提问者:小点点

在特定时间运行PHP脚本一次


我在做一个游戏机。

我已经做了一些类似于“Build a house”的事情,其中我做了一个mysql事件,在一个特定的时间将house的db条目从5改为10,例如在5分25秒内。

问题是当我想在6分12秒内做一个像两个家伙之间的战斗。。。。。我必须在6分12秒内运行一个php脚本来计算他们的部队和当时的战斗本身,然后修改数据库。

我不能“预先计算”战斗的时候,这个家伙派遣他的部队到另一个原因,在那6分12秒,另一个家伙可以购买更多的军队或防御。。。

我希望你明白我想做什么。

mysql无法从事件或触发器运行php脚本。。。

我想,每秒运行一个cron作业来检查这一秒是否发生了冲突,服务器负载太大了。。。。即使不是这样,大多数提供商也只允许每5分钟或2分钟运行一次cron.。。

有什么方法可以实现我的目标吗?

编辑:也许我只是停留在mysql事件,但我必须做很多事情,当计算战斗。。。例如,使用随机数,增加百分比,做一些查询,也许使用数组,写消息给玩家。。。我不认为所有这些都可能在mysql


共1个答案

匿名用户

https://dev.mysql.com/doc/refman/8.0/en/events-overview.html

CREATE TABLE player (
    id INT PRIMARY KEY AUTO_INCREMENT,
    Name VARCHAR(50) NOT NULL,
    Attack NOT NULL,
    Defense NOT NULL,
    Health NOT NULL,
    TroopCount NOT NULL
);
CREATE TABLE battle (
    id INT PRIMARY KEY AUTO_INCREMENT,
    attackerid INT NOT NULL,
    defenderid INT NOT NULL,
    desc VARCHAR(255) NOT NULL,
    battledate DATETIME NOT NULL
);
CREATE EVENT IF NOT EXISTS battle_001
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 6 MINUTE + INTERVAL 12 SECONDS
DO
  
  INSERT INTO battle(battledate,desc)
  # Create Select to do the math
  SELECT    NOW()
            , #replace with battle algorithm both the attacker and defender values available for the math
  
    FROM player AS attacker
    INNER Join player AS defender
     ON defender.id = #replace with defenders id
    WHERE attacker.id = #replace with attackers id
  
  ;