php mysql игровые скрипты levelup проблемы - PullRequest
0 голосов
/ 08 августа 2009

Вот моя проблема. В моей игре я пытаюсь внедрить эту систему прокачки, когда, достигнув определенного уровня опыта, вы переходите на более высокий уровень. Я использую php 5.0 и последнюю версию MYSQL. Моя проблема в том, что я не могу заставить мои сценарии работать должным образом.

ТАК вот некоторые фиктивные статистические данные, за которыми следует мой код. Любая информация, которая поможет мне решить мои проблемы, будет принята с благодарностью

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

когда я перехожу на levelup с 13 по 14, ни одна из характеристик не обновляется новым значением и не обновляется до уровня ... Да, все мои подключения из 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";
        }

Проблема в том, что не отображается сообщение об ошибке.

Не будет корректно обновлять статистику, уровень не обновляется.

Ответы [ 5 ]

3 голосов
/ 08 августа 2009

Тестировали ли вы запросы на самом деле с теми значениями, которые вы им даете? т. е. использовать phpMyAdmin или аналогичный и попытаться выполнить запрос вручную?

У меня были ситуации, когда я думал, что мой PHP неверен, но проблема была в маленькой ошибке в SQL.

Вы также можете установить режим ошибок PHP на E_ALL. Вы можете сделать это в php.ini или через код, набрав

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

в начале вашего скрипта. Он должен [надеюсь] дать вам ошибку, которая идентифицирует вашу проблему.


EDIT

Я только что заметил кое-что с вашими условиями, которое может быть проблемой ...

У вас есть:

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

Я скорее подозреваю, что если блок никогда не будет запущен и не будет никакого вызова levelUPSTATS ().

Вы спрашиваете , если NOT $ playerLEVEL равен EQUAL на 13 , когда вы действительно хотите , если $ playerLEVEL НЕ равно EQUAL на 13 , что делает условие:

if($playerLEVEL != 13)

Обратите внимание, куда идет ! (НЕ).

Кроме того, у вас есть ситуация с вашими неравенствами, когда определенные крайние случаи означают, что у игрока два уровня.

Например, для уровня 2 вам нужно от 100 до 200 опыта включительно. Но уровень 3 требует 200 и 400 опыта включительно. Если у вашего игрока 200EXP, то он технически 2 и 3 уровня. Когда код запускается, он будет соответствовать 200 в разделе кода уровня 2, а не в разделе уровня 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)

Обратите внимание на использование <</strong> [МЕНЬШЕ, ЧЕМ] вместо <= </strong> [МЕНЬШЕ, ЧЕМ ИЛИ РАВНОЕ].

Надеюсь, это решит вашу проблему:)

0 голосов
/ 20 августа 2009

вы можете попробовать использовать это. $ x = текущий пользовательский опыт $ userlevel = "SELECT * FROM level, где exp = (SELECT MAX (exp) FROM level, где exp <= $ x)"; $ Userlevel1 = mysql_query ($ userlevel); $ Userlevelmax = mysql_fetch_array ($ userlevel1); </p>

затем создайте таблицу для уровня, где вы храните свой опыт, необходимый для каждого уровня.

так что вам не нужно повторять так много, если еще цикл и использовать вместо этого. замените свои числа на значения из таблицы, которую вы сделали.

if ($ playerstats3 ['c_exp']> = $ userlevelmax2 ['exp']) { if ($ playerstats ['level']! = $ userlevelmax ['level']) { $ Newlevel = $ userlevelmax [ 'уровень'];

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


        }
0 голосов
/ 08 августа 2009

Извините, но ваш код полностью не читается, и это должно быть причиной того, что вы не нашли проблему.

Попробуйте применить эти изменения:

  • Вам не нужно запускать разные запросы MySQL для каждого действия набора. Весь ваш раздел «Воин» должен выглядеть примерно так:
    $statusplayerSTR = "update players set strength=strength+'$playerSTR',
           defence=defence+'$playerDEF',
           dexterity=dexterity+'$playerDEX',
           magic=magic+'$playerMAG',
           basedamage=basedamage+'$playerBASE_DAMAGE',
           spellbasedamage=spellbasedamage+'$playerSPELL_BASE_DAMAGE',
           healthpoints='$playerMAX_HEALTH_POINTS',
           ......
           WHERE username='$playerNAME'"
    mysql_query($statusplayerSTR) or die("Could not update player");
  • Используйте оператор switch вместо всех этих операторов IF ELSE:

    switch ($playerCLASS) {
       case "Warrior": 
          ....
          break;
       case "Mage": 
          ....
          break;
       case default:
          ....
    }

блок $ playerEXPERIENCE IF ELSE

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

Затем вы можете распечатать запросы и проверить их правильно, используя клиент MySQL.

0 голосов
/ 08 августа 2009

Глядя на подсветку синтаксиса вашего кода, становится ясно, что что-то не так с кодом 14 уровня. Похоже, вы добавили 2 дополнительные строки без причины:

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

Вам действительно следует убедиться, что код не слишком скопирован, а также использовать редактор с подсветкой синтаксиса, если вы этого еще не сделали.

0 голосов
/ 08 августа 2009

Бозо и Воин не заключены в кавычки в первом фрагменте кода

...