|
|
Модератор форума: Dimitro |
Форум TrinityCore [TrinityCore] Help не работает скрипт (Точнее работает но не правельно) |
не работает скрипт |
Вот кусок скрипта
Код void buyGuildhouse(Player *player, Creature *_creature, uint32 guildhouseId) { if (player->GetMoney() < COST_GH_BUY) { //show how much money player need to buy GH (in gold) char msg[100]; sprintf(msg, MSG_NOTENOUGHMONEY, COST_GH_BUY / 10000); _creature->MonsterWhisper(msg, player->GetGUID()); return; } if (isPlayerHasGuildhouse(player, _creature, true)) { //player already have GH return; } QueryResult result; //check if somebody already occupied this GH result = CharacterDatabase.PQuery("SELECT `id` FROM `guildhouses` WHERE `id` = %u AND `guildId` <> 0", guildhouseId); if (result) { _creature->MonsterWhisper(MSG_GHOCCUPIED, player->GetGUID()); return; } //update DB result = CharacterDatabase.PQuery("UPDATE `guildhouses` SET `guildId` = %u WHERE `id` = %u", player->GetGuildId(), guildhouseId); if (result) player->ModifyMoney(-COST_GH_BUY); player->DestroyItemCount(30, 1, true, false); _creature->MonsterSay(MSG_CONGRATULATIONS, LANG_UNIVERSAL, player->GetGUID()); } Именно player->ModifyMoney(-COST_GH_BUY); player->ModifyMoney(COST_GH_BUY); не отнимает и не даёт голд, почему ?
Сообщение # 1 написано 01.11.2015 в 08:47
|
этот момент работает, проверяется отлично Добавлено (01.11.2015, 12:27) #define COST_GH_BUY 1000000000 //1000 g. #define COST_GH_SELL 500000000 //500 g.
Сообщение # 3 написано 01.11.2015 в 12:27
|
У вас ощибка не выходит так как вы используете 2 раза
Цитата if (result) Цитата result = CharacterDatabase.PQuery("UPDATE `guildhouses` SET `guildId` = %u WHERE `id` = %u", player->GetGuildId(), guildhouseId); на result1 = CharacterDatabase.PQuery("UPDATE `guildhouses` SET `guildId` = %u WHERE `id` = %u", player->GetGuildId(), guildhouseId); Добавлено (01.11.2015, 12:52)
Сообщение # 4 написано 01.11.2015 в 12:52
|
Чушь полная. Еще одна. Программа бы не компилировалась в этом случае. И еще одна. Вы проверяете, хватает ли у игрока денег на покупку, и, если да, говорите ему, что денег не хватает. Зато если на самом деле не хватает - он желанный клиент. Потому что Вы эти инструкции засовываете под if(result), который является NULL'ом и интерпретируется как false, если запрос не возвращает никаких данных (не SELECT). Это абсолютно некорректно в данном случае. Код QueryResult result; //check if somebody already occupied this GH result = CharacterDatabase.PQuery("SELECT `id` FROM `guildhouses` WHERE `id` = %u AND `guildId` <> 0", guildhouseId); if (result) { _creature->MonsterWhisper(MSG_GHOCCUPIED, player->GetGUID()); return; } Запрос, улетающий при покупке, простить можно, но не запрос, улетающий при проверке. Лучше заставьте сервер читать все сведенья из базы на эту тему в оперативную память при его загрузке, писать туда же все изменения, сделанные за время работы (покупки/продажи), а при завершении его работы - накатывать UPDATE в базу со всеми этими изменениями. Ну и, само собой, для большей стабильности добавить в регулярное сохранение функционал по записи этих данных. char msg[100]; sprintf(msg, MSG_NOTENOUGHMONEY, COST_GH_BUY / 10000); _creature->MonsterWhisper(msg, player->GetGUID()); И кстати, что это за фигня? =) |
Проблема уже решена, да и человек помощь просил а не коментарии о том о чем вы думаете.
Цитата enum Costs { COST_GH_BUY = 1000000000, //1000 голды. COST_GH_SELL = 500000000, //500 голды. }; Еще одна. Программа бы не компилировалась в этом случае. Вы уверены что не компилится ? Ошибаетесь
Сообщение # 6 написано 01.11.2015 в 18:38
|
Проблема уже решена, да и человек помощь просил а не коментарии о том о чем вы думаете. Комментарий содержит не мои мысли, а факты, в частности, решение проблемы, было бы иначе - я бы заранее проинформировал. О том, что проблема была решена, нигде не написано. Просветите, как мне следовало догадаться об этом? И не стоит искажать мои цитаты, я цитировал не определение перечисления, а Вашу совершенно неуместную догадку о возможной неопределенности используемого идентификатора, которая предположительно повлекла неправильную работу кода на этапе выполнения.
Сообщение # 7 написано 01.11.2015 в 19:09
|
| |||
| |||