0

我有这个问题有一段时间了,最​​后我把它缩小到它是什么(我认为)。我试图限制收入,限制是 $storagecap 每个 $warehouse = 到 500 $storagecap。在我向您展示代码之前,我会告诉您我的问题。它显示了当我拥有 2 个 $ 仓库时你的限制是什么,它说我的限制是 1000,但它使我的收入停止在 499,我设置为 0 个仓库,所以它显示 499/1000。Cron_turn 将您的收入添加到您的帐户中。

我不知道为什么当它知道 $storagecap 是 1000 时它会停在 499。

storagecap.php

<?php

$warehouse = $building['warehouse'];

if ($warehouse == 1) {
$storagecap = 500;
}elseif($warehouse == 2) {
$storagecap = 1000;
}elseif($warehouse == 3) {
$storagecap = 1500;
}elseif($warehouse == 4) {
$storagecap = 2000;
}elseif($warehouse == 5) {
$storagecap = 2500;
}elseif($warehouse == 6) {
$storagecap = 3000;
}elseif($warehouse == 7) {
$storagecap = 3500;
}elseif($warehouse == 8) {
$storagecap = 4000;
}elseif($warehouse == 9) {
$storagecap = 4500;
}elseif($warehouse == 10) {
$storagecap = 5000;
}elseif($warehouse == 11) {
$storagecap = 5500;
}elseif($warehouse == 12) {
$storagecap = 6000;
}elseif($warehouse == 13) {
$storagecap = 6500;
}elseif($warehouse == 14) {
$storagecap = 7000;
}elseif($warehouse == 15) {
$storagecap = 7500;
}elseif($warehouse == 16) {
$storagecap = 8000;
}elseif($warehouse == 17) {
$storagecap = 8500;
}elseif($warehouse == 18) {
$storagecap = 9000;
}elseif($warehouse == 19) {
$storagecap = 9500;
}elseif($warehouse == 20) {
$storagecap = 10000;
}elseif($warehouse == 0) {
$storagecap = 499;
}else{
$storagecap = 10;
}
?>

* cron_turn.php*

<?php 
include("functions.php");
connect();
include("safe.php");
include("storagecap.php");
$get_users = mysql_query("SELECT * FROM `stats`") or die(mysql_error());

while($user = mysql_fetch_assoc($get_users)) {
  //Get
  $gold = $user["gold"];
  $food = $user["food"];
  $energy = $user["energy"];

  //Increment
  $gold += $user["income"];
  $food += $user["farming"];
  $energy += 5;

  //Verify and correct
  if ($energy > 100) {
     $energy = 100;
  };

  if ($gold > $storagecap) {
     $gold = $storagecap;
  };

  if ($food > $storagecap) {
     $food = $storagecap;
  };

  //Submit
  $update = mysql_query("UPDATE `stats` SET
                    `gold`= '".$gold."',
                    `food`= '".$food."',
                    `energy`= '".$energy."' WHERE `id`='".$user['id']."'") or     die(mysql_error());
}
?>
4

2 回答 2

0

这不是定义存储的正常方式。我看到你正在开发一个游戏。让我们猜猜您有可以让您获得收入的建筑物(黄金等)和用于容量的建筑物(存储)。它们都应该保存在buildings表格中,因此每个级别都定义了收入,即第一级 gold_buildings => 100 gold/h;1 级存储 => 500 容量(收入列)。

然后,每个用户都应该在单独的表中拥有自己的建筑级别,即 user_buildings:

user_id | building_id | level

大多数游戏,每个用户都在某个平台(星球,王国,取决于想法)上开发这些建筑物,假设在你的情况下它只是一个“平台”

桌子platforms

id | user_id | income_gold | income_food | energy | capacity_gold | capacity_food | gold | food |

因此,每次您的用户访问带有收入的相关菜单时,您都在更新platform表格,具体取决于 user_buildings 级别,您正在构建收入的数量以及容量。

当 cron 转动时,它应该从该表中获取值并进行比较。

假设你有 100 金收入,平台上有 350,容量 500:

UPDATE platform SET gold = IF((gold+gold_income)>capacity, `capacity`, gold+gold_income);

IF条件(老实说没测试过)应该检查收益加当前金币是否超过限额,如果为真,则金币栏等于容量(限额),如果不是,则将收入添加到当前黄金中。

但是,有些游戏正在添加资源,无论它是否超过限制,然后另一个 cron 会检查超出限制的平台,并更新到限制。

PS:我认为,提供资源的 crone 不需要关于 user_id 的 WHERE 子句,因为它应该为每个人提供收入(或者如果没有,你应该排除,即禁止帐户)

于 2013-05-20T22:20:48.520 回答
0

在将分配值设置为之前,您将包含 storagecap.php 文件$building['warehouse']。由于您在 if 语句中将 null 与 int 进行比较,因此 0 环为真。将包含向下移动到您具有价值的点$building['warehouse']

于 2013-05-20T22:17:03.103 回答