0

これが私の問題です。私のゲームでは、一定量の経験に達すると、より高いレベルに進むこのレベリング システムを実装しようとしています。私はphp 5.0と最新のMYSQLを使用しています。私の問題は、スクリプトを正しく実行できないことです。

SO ここにいくつかのダミーの統計とそれに続く私のコードがあります 私の問題を解決するのに役立つ情報は大歓迎です

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

13 から 14 にレベルアップすると、どの統計も新しい値で更新されず、レベルも更新されません... はい、connect.php から DB サーバーへのすべての接続は正しく機能しており、正しいものを使用しています私のコードのテーブル名

 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 is NOT EQUAL to 13が本当に必要なときに、NOT $playerLEVEL is EQUAL to 13 であるかどうかを尋ねています。

if($playerLEVEL != 13)

!の場所に注意してください。(ではない) 行きます。

余談ですが、特定のエッジ ケースがプレーヤーが 2 つのレベルであることを意味する不平等の状況があります。

たとえば、レベル 2 の場合、100 から 200 の EXP が必要です。ただし、レベル 3 には 200 と 400 の EXP が必要です。プレイヤーが 200EXP を持っている場合、技術的にはレベル 2 と 3 です。コードを実行すると、レベル 3 セクションではなく、コードのレベル 2 セクションの 200 と一致します...

あなたのコード:

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 OR EQUAL TO]の代わりに< [LESS THAN] を使用していることに注意してください。

これで問題が解決することを願っています:)

于 2009-08-08T10:08:17.023 に答える
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);

次に、各レベルに必要な経験を保存するレベルのテーブルを作成します。

したがって、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 に答える
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 に答える