0

这是我的问题。在我的游戏中,我试图实现这个等级系统,一旦你达到一定的经验,你就会进入更高的水平。我正在使用 php 5.0 和最新的 MYSQL。我的问题是我无法让我的脚本正确执行。

所以这里有一些虚拟统计数据,后面是我的代码任何可以帮助我解决问题的信息将不胜感激

     $playerNAME = "Bozo";
 $playerClASS = "Warrior";
 $playerLEVEL = 13;
 $playerSTR = 5;
 $playerDEF = 2;
 $playerDEX = 3;
 $playerMAG = 2;
     $playerEXPERIENCE = 99999;

当我从 13 升级到 14 时,没有任何统计数据更新为新值,并且级别 dosnt 更新...是的,我从 connect.php 到数据库服务器的所有连接都正常工作,是的,我使用的是正确的我的代码中的表名

 function levelUPSTATS () {
        global $playerNAME;
        global $playerClASS;
        global $playerLEVEL;
        global $playerSTR;
        global $playerDEF;
        global $playerDEX;
        global $playerMAG;

    if ($playerCLASS === "Warrior") {
        $playerSTR = $playerSTR + 3;
        $playerDEF = $playerDEF + 2;
        $playerDEX = $playerDEX + 3;
        $playerMAG = $playerMAG + 2;
        $playerBASE_DAMAGE = ceil($playerSTR*$playerDEX);
        $playerSPELL_BASE_DAMAGE = ceil($playerMAG * $playerDEX);
        $playerMAX_HEALTH_POINTS = ceil($playerSTR * $playerDEF * $playerDEX);
        $playerMAX_MANA_POINTS = ceil($playerMAG * $playerDEF * $playerDEX / $playerSTR);
        $statusplayerSTR = "update players set strength=strength+'$playerSTR' where username='$playerNAME'";
        mysql_query($statusplayerSTR) or die("Could not update player");

        $statusplayerDEF = "update players set defence=defence+'$playerDEF' where username='$playerNAME'";
        mysql_query($statusplayerDEF) or die("Could not update player");

        $statusplayerDEX = "update players set dexterity=dexterity+'$playerDEX' where username='$playerNAME'";
        mysql_query($statusplayerDEX) or die("Could not update player");

        $statusplayerMAG = "update players set magic=magic+'$playerMAG' where username='$playerNAME'";
        mysql_query($statusplayerMAG) or die("Could not update player");

        $statusplayerBASE_DAMAGE = "update players set basedamage=basedamage+'$playerBASE_DAMAGE' where username='$playerNAME'";
        mysql_query($statusplayerBASE_DAMAGE) or die("Could not update player");

        $statusplayerSPELL_BASE_DAMAGE = "update players set spellbasedamage=spellbasedamage+'$playerSPELL_BASE_DAMAGE' where username='$playerNAME'";
        mysql_query($statusplayerSPELL_BASE_DAMAGE) or die("Could not update player");

        $statusplayerHealthPOINTS = "update players set healthpoints='$playerMAX_HEALTH_POINTS' where username='$playerNAME'";
        mysql_query($statusplayerHealthPOINTS) or die("Could not update player");

        $statusplayerMaxHealthPOINTS = "update players set maxhealthpoints='$playerMAX_HEALTH_POINTS' where username='$playerNAME'";
        mysql_query($statusplayerMaxHealthPOINTS) or die("Could not update player");

        $statusplayerManaPOINTS = "update players set manapoints='$playerMAX_MANA_POINTS' where username='$playerNAME'";
        mysql_query($statusplayerManaPOINTS) or die("Could not update player");

        $statusplayerMaxManaPOINTS = "update players set maxmanapoints='$playerMAX_MANA_POINTS' where username='$playerNAME'";
        mysql_query($statusplayerMaxManaPOINTS) or die("Could not update player");
    } elseif ($playerCLASS === "Mage") {
        $playerSTR = $playerSTR + 2;
        $playerDEF = $playerDEF + 2;
        $playerDEX = $playerDEX + 3;
        $playerMAG = $playerMAG + 3;
        $playerBASE_DAMAGE = ceil($playerSTR * $playerDEF);
        $playerSPELL_BASE_DAMAGE = ceil($playerMAG * $playerDEX);
        $playerMAX_HEALTH_POINTS = ceil($playerDEF * $playerDEX * $playerMAG);
        $playerMAX_MANA_POINTS = ceil($playerMAG * $playerDEF * $playerDEX / $playerSTR);           
    } else {
    }
}

        if ($playerEXPERIENCE < 100) {
            if (!$playerLEVEL ==1) {
                $playerLEVEL = 1;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");

            } else {
                $playerNEXT_LEVEL = 100;
            }
        } elseif ($playerEXPERIENCE >= 100 && $playerEXPERIENCE <= 200) {
            if (!$playerLEVEL ==2) {
                                levelUPSTATS ();
                $playerLEVEL = 2;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 200;
            }
        } elseif ($playerEXPERIENCE >= 200 && $playerEXPERIENCE <= 400) {
            if (!$playerLEVEL ==3) {
                                levelUPSTATS ();
                $playerLEVEL = 3;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 400;
            }
        } elseif ($playerEXPERIENCE >= 400 && $playerEXPERIENCE <= 800) {
            if (!$playerLEVEL ==4) {
                                levelUPSTATS ();
                $playerLEVEL = 4;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 800;
            }
        } elseif ($playerEXPERIENCE >= 800 && $playerEXPERIENCE <= 1600) {
            if (!$playerLEVEL ==5) {
                                levelUPSTATS ();
                $playerLEVEL = 5;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 1600;
            }
        } elseif ($playerEXPERIENCE >= 1600 && $playerEXPERIENCE <= 3200) {
            if (!$playerLEVEL ==6) {

                                levelUPSTATS ();
                $playerLEVEL = 6;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 3200;
            }
        } elseif ($playerEXPERIENCE >= 3200 && $playerEXPERIENCE <= 6400) {
            if (!$playerLEVEL ==7) {
                                levelUPSTATS ();
                $playerLEVEL = 7;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 6400;
            }
        } elseif ($playerEXPERIENCE >= 6400 && $playerEXPERIENCE <= 12800) {
            if (!$playerLEVEL ==8) {
                                levelUPSTATS ();
                $playerLEVEL = 8;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 12800;
            }
        } elseif ($playerEXPERIENCE >= 12800 && $playerEXPERIENCE <= 25000) {
            if (!$playerLEVEL ==9) {
                                levelUPSTATS ();
                $playerLEVEL = 9;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 25000;
            }
        } elseif ($playerEXPERIENCE >= 25000 && $playerEXPERIENCE <= 35000) {
            if (!$playerLEVEL ==10) {
                                levelUPSTATS ();
                $playerLEVEL = 10;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");

            } else {
                $playerNEXT_LEVEL = 35000;
            }
        } elseif ($playerEXPERIENCE >= 35000 && $playerEXPERIENCE <= 50000) {
            if (!$playerLEVEL ==11) {
                                levelUPSTATS ();
                $playerLEVEL = 11;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 50000;
            }
        } elseif ($playerEXPERIENCE >= 50000 && $playerEXPERIENCE <= 75000) {
            if (!$playerLEVEL ==12) {
                                levelUPSTATS ();
                $playerLEVEL = 12;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 75000;
            }
        } elseif ($playerEXPERIENCE >= 75000 && $playerEXPERIENCE <= 100000) {
            if (!$playerLEVEL ==13) {
                                levelUPSTATS ();
                $playerLEVEL = 13;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 100000;
            }
        } elseif ($playerEXPERIENCE >= 100000 && $playerEXPERIENCE <= 135000) {
            if (!$playerLEVEL == 14) {
                levelUPSTATS ();
                $playerLEVEL = 14;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 135000;
            }
        } elseif ($playerEXPERIENCE >= 135000 && $playerEXPERIENCE <= 200000) {
            if (!$playerLEVEL ==15) {
                                levelUPSTATS ();
                $playerLEVEL = 15;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 200000;
                }
        } elseif ($playerEXPERIENCE >= 200000 && $playerEXPERIENCE <= 300000) {
            if (!$playerLEVEL ==16) {

                                levelUPSTATS ();
                $playerLEVEL = 16;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 300000;
                }
        } elseif ($playerEXPERIENCE >= 300000 && $playerEXPERIENCE <= 420000) {
            if (!$playerLEVEL ==17) {
                                levelUPSTATS ();
                $playerLEVEL = 17;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 420000;
                }
        } elseif ($playerEXPERIENCE >= 420000 && $playerEXPERIENCE <= 600000) {
            if (!$playerLEVEL ==18) {
                                levelUPSTATS ();
                $playerLEVEL = 18;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 600000;
                }
        } elseif ($playerEXPERIENCE >= 600000 && $playerEXPERIENCE <= 800000) {
            if (!$playerLEVEL ==19) {
                                levelUPSTATS ();
                $playerLEVEL = 19;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 800000;
                }
        } elseif ($playerEXPERIENCE >= 800000 && $playerEXPERIENCE <= 1000000) {
            if (!$playerLEVEL ==20) {
                                levelUPSTATS ();
                $playerLEVEL = 20;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            } else {
                $playerNEXT_LEVEL = 1000000;
                }
        } elseif ($playerEXPERIENCE >= 1000000) {
            if (!$playerLEVEL ==21) {
                                levelUPSTATS ();
                $playerLEVEL = 21;
                                $statusplayerLEVELUPDATE = "update players set level='$playerLEVEL' where username='$playerNAME'";
        mysql_query($statusplayerLEVELUPDATE ) or die("Could not update player");
            }
        } else {
            print "N/A";
        }

问题是它不显示任何错误消息。

它不会正确更新统计数据,级别不会更新。

4

5 回答 5

2

您是否测试过查询实际上与您提供的值一起使用?即,使用 phpMyAdmin 或类似工具并手动尝试查询?

我曾经遇到过我认为我的 PHP 不正确但我的 SQL 中有一个小错误的情况。

您可能还想将 PHP 的错误模式设置为 E_ALL。您可以在 php.ini 中或通过代码执行此操作

ini_set("display_errors","2"); ERROR_REPORTING(E_ALL);

在脚本的开头。它应该 [希望] 给你一个识别你的问题的错误。


编辑

我刚刚注意到您的情况可能是问题所在...

你有:

if (!$playerLEVEL ==13) 
{
    levelUPSTATS ();
    $playerLEVEL = 13;
    //etc
}

我宁愿怀疑 if 块永远不会运行,也不会调用 levelUPSTATS()。

当您真正想要$playerLEVEL 不等于13 时,您会询问NOT $playerLEVEL 是否等于13 ,这会产生以下条件:

if($playerLEVEL != 13)

注意! (不)去。

顺便说一句,你有一个不等式的情况,某些边缘情况意味着玩家有两个级别。

例如,对于 2 级,您需要 100 到 200 之间的 EXP(含)。但是 3 级需要 200 和 400 经验值(含)。如果你的玩家有 200EXP,他在技术上是 2 级和 3 级。当代码运行时,它将匹配 2 级代码部分中的 200,而不是 3 级部分......

你的代码:

if($playerEXPERIENCE >= 100 && $playerEXPERIENCE <= 200)
//code to make them 2
if($playerEXPERIENCE >= 200 $$ $playerEXPERIENCE <= 400)
//code to make them 3

这对我来说似乎是错误的——尽管这可能是你的意图,我不知道。如果不是故意的,您应该将其更改为:

if($playerEXPERIENCE >= 100 && $playerEXPERIENCE < 200)

注意使用< [LESS THAN] 而不是<= [LESS THAN OR EQUAL TO]。

我希望这能解决你的问题:)

于 2009-08-08T10:08:17.023 回答
0

在第一个代码片段中,Bozo 和 Warrior 没有用引号括起来

于 2009-08-08T09:25:47.000 回答
0

查看代码的语法突出显示,很明显 14 级代码有问题。看起来您无缘无故地添加了 2 行:

playerLEVEL' where username='$playerNAME'";
mysql_query($statusplayerSTR) or die("Could not update player");

你真的应该尽量确保代码没有被复制粘贴太多,如果你还没有的话,还应该使用带有语法突出显示的编辑器。

于 2009-08-08T09:58:01.490 回答
0

很抱歉,您的代码完全不可读,这就是您找不到问题的原因。

尝试实施这些更改:

  • 您不需要为每个设置操作运行不同的 MySQL 查询。您的整个“战士”部分应如下所示:
    $statusplayerSTR = "更新玩家设置强度=strength+'$playerSTR',
           防御=防御+'$playerDEF',
           灵巧=灵巧+'$playerDEX',
           魔法=魔法+'$playerMAG',
           basedamage=basedamage+'$playerBASE_DAMAGE',
           spellbasedamage=spellbasedamage+'$playerSPELL_BASE_DAMAGE',
           健康点='$playerMAX_HEALTH_POINTS',
           ……
           WHERE 用户名='$playerNAME'"
    mysql_query($statusplayerSTR) 或 die("无法更新播放器");
  • 使用 switch 语句代替所有这些 IF ELSE 语句:
    开关($playerCLASS){
       案例“战士”:
          ……
          休息;
       案例“法师”:
          ……
          休息;
       案例默认:
          ……
    }

$playerEXPERIENCE IF ELSE 块

switch (true) {
   case $playerEXPERIENCE < 100:
      ... 
      break;
   case $playerEXPERIENCE >= 100 && $playerEXPERIENCE <= 200:
      ....
}

然后,您可以打印出查询并使用 MySQL 客户端正确检查它们。

于 2009-08-08T11:28:12.040 回答
0

你可以尝试使用它。$x = 用户当前 exp $userlevel="SELECT * FROM level where exp=(SELECT MAX(exp) FROM level where exp<= $x)"; $userlevel1=mysql_query($userlevel); $userlevelmax=mysql_fetch_array($userlevel1);

然后为级别制作一个表格,您可以在其中存储每个级别所需的经验。

所以你不必重复这么多 if else 循环并使用它来代替。用您制作的表格中的值替换您的数字。

if($playerstats3['c_exp'] >= $userlevelmax2['exp']) { if($playerstats['level'] != $userlevelmax['level']){ $newlevel=$userlevelmax['level'] ;

                        $updateuserlevel="update youruserinfotable set level=$newlevel, allurnewstatsforthatlevel where UID='$playerstats3[UID]'";
                        mysql_query($updateuserlevel) or die("It just died");


        }
于 2009-08-20T04:33:44.920 回答