2013-05-20 113 views
0

我有这个问题一段时间,最后我缩小到它是什么(我认为)。 我想限制一个收入,限制是$ storagecap每个$ warehouse是= 500 $ storagecap。在我告诉你代码之前,我会告诉你我的问题。 它显示了你的限制是什么时候我拥有2 $仓库的例子,它说我的限制是1000,但它停止我的收入在499,我设置等于0仓库,所以它显示499/1000。 Cron_turn将您的收入添加到您的帐户。如果声明错误与变量

我不知道为什么它停止在499,当它知道$ storagecap是1000

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()); 
} 
?> 
+1

有人显然从来没有听说过[ 'switch'](http://php.net/switch)... –

+2

'$ storagecap = 500 * $ warehouse'带有一些边界条件? – jeroen

+0

切换到'switch' – samayo

回答

0

您在设置之前包含storagecap.php文件给$building['warehouse']分配一个值。由于您在if语句中将null与int进行比较,因此0声明为真。将包含物向下移动过去,以获得值$building['warehouse']

+0

这使得容量= 499这意味着0仓库以及黄金和食品 – Aidan

0

这不是定义存储的常规方式。我看你正在制作一款游戏。让我们猜想你有建筑物让你的收入(黄金等)和建筑物的能力(存储)。他们都应该保存在buildings表中,因此每个级别都定义了收入,即第一级gold_buildings => 100 gold/h;一级存储=> 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会检查超出限制的平台,并更新到最低限度。

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

+0

这是一个非常好的主意我会尝试并实施它,但现在我只想解决我的问题,因为这看起来有点令人困惑 – Aidan

+0

您没有从您的提取中获取仓库级别,或者至少不在$仓库变量中,从而导致到你的'else'语句或者评估为0. –

+0

我有点不明白如何修复它 – Aidan