|
|
Модератор форума: Dimitro |
Форум TrinityCore [TrinityCore] Help Не проходит проверку на уровень |
Не проходит проверку на уровень |
Код case 122: //Dps if (pPlayer->getLevel() >= 180 || pPlayer->GetItemCount(45408) < 1 || pPlayer->GetItemCount(100070) < 1) { pCreature->MonsterSay("Deficiently Buff Token !", LANG_UNIVERSAL, NULL); } else { pPlayer->CastSpell(pPlayer, 23737, true); } pPlayer->CLOSE_GOSSIP_MENU(); break; На итемы работает а на лвл нет, почему ?
Сообщение # 1 написано 02.10.2015 в 11:14
|
Сообщение # 5 написано 02.10.2015 в 15:07
|
Хорошо, и я разъясняю: Данная конструкция проверяет, соответствует ли статус игрока ХОТЯ БЫ ОДНОМУ из условий: - Его уровень выше или равен 180. - У него в инвентаре нет предметов с EntryID 45408 (короче было использовать !pPlayer->GetItemCount(45408) ). - У него в инвентаре нет предметов с EntryID 100070 (читать комментарий к предыдущему пункту). Если цель именно такая, которую я описал, тогда: Настройте вывод в консоль возвращаемого значения pPlayer->getLevel() и сравните с ожидаемым.
Сообщение # 6 написано 02.10.2015 в 16:11
|
Mocosin, попробуйте вот так:
Цитата case 122: //Dps if (pPlayer->getLevel() >= 180) { if (pPlayer->GetItemCount(45408) < 1 || pPlayer->GetItemCount(100070) < 1) { pPlayer->GetSession()->SendNotification("Недостататочка токенов для баффа!"); pPlayer->CLOSE_GOSSIP_MENU(); } else { pPlayer->CastSpell(pPlayer, 23737, true); pPlayer->GetSession()->SendNotification("Ура! Я получил бафф"); pPlayer->CLOSE_GOSSIP_MENU(); } } else { pPlayer->GetSession()->SendNotification("У вас должен быть 180 уровень для использование данного баффа!"); pPlayer->CLOSE_GOSSIP_MENU(); } break; описание дейтсвий: Проверяет уровень персонажа(если у него есть 180 уровень то открывает проверну на предмет, если есть то дает, если нет то нет) потом если у персонажа нету 180 лвл то пишет "У вас должен быть 180 уровень для использование данного баффа!" Если не работает пишите помогу |
я уже давно сделал
Добавлено (02.10.2015, 18:02) p620, я вроде сделал как он хотел, чтобы запрос был сначало по лвл а потом по итему. Код if (pPlayer->getLevel() >= 255 && (pPlayer->HasItemCount(46313, 1) || pPlayer->HasItemCount(100070, 1))) вот правильный вариант
Сообщение # 10 написано 02.10.2015 в 18:02
|
Сообщение # 13 написано 02.10.2015 в 19:51
|
Не очень понял, что Вы прокомментировали, но поясню свою позицию. Из синтаксиса вызова функции неизвестно, значение какого типа она возвращает. А учитывая уровни, используемые в проверке (т.е. высокие, из разряда crazy-серверов), можно предположить, что функция была адаптирована для возвращения, скажем, двух байтов, а не одного (uint16). |
Не очень понял, что Вы прокомментировали, но поясню свою позицию. Из синтаксиса вызова функции неизвестно, значение какого типа оно возвращает. А учитывая уровни, используемые в проверке (т.е. высокие, из разряда crazy-серверов), можно предположить, что функция была адаптирована для возвращения, скажем, двух байтов, а не одного (uint16). И тогда половина сервера является дерьмом, передающее непонятные байты клиенту. Тащем-то.. Он сам виноват =D
Сообщение # 16 написано 03.10.2015 в 01:03
|
И тогда половина сервера является дерьмом, передающее непонятные байты клиенту. Тащем-то.. Он сам виноват =D Посмотрел функцию Player::GiveLevel(), в ней формируется пакет для клиента с информацией по обновлению уровня. Для значения уровня резервируется 4 байта (uint32), так что клиент к такому готов.
Сообщение # 17 написано 03.10.2015 в 02:04
|
У меня все инсты переписанные под 16 --------------------------------------------- И возник вопрос у меня, что бы не создавать тему вот мой case Код case 188://PROTECTION if (pPlayer->getLevel() >= 255 && (pPlayer->HasItemCount(45385, 1)) && (pPlayer->HasItemCount(100070, 1))) { pPlayer->CLOSE_GOSSIP_MENU(); pPlayer->DestroyItemCount(45385, 1, true); pPlayer->DestroyItemCount(100070, 1, true); pPlayer->AddItem(48647, 1); pPlayer->CastSpell(pCreature, 59477, true); } else { pPlayer->CLOSE_GOSSIP_MENU(); pCreature->MonsterWhisper(pPlayer->GetSession()->GetTrinityString(ERROR_GLOBAL), pPlayer->GetGUID()); } break; Что сюда добавить, что бы при Код pPlayer->AddItem(48647, 1); добавлении вещи, она сразу одевалась ? |
Написать соответствующую функцию выше и вызвать ее. Пример написания можно найти в исходниках, даже по приходу опкода, когда игрок одевает вещь, связано со swapitem вроде
Сообщение # 19 написано 03.10.2015 в 09:15
|
| |||
| |||