• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
Форум » TrinityCore » [TrinityCore] Help » Не проходит проверку на уровень
Не проходит проверку на уровень
Mocosin
Капрал
Код

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
p620
Маршал
Цитата Mocosin ()
На итемы работает а на лвл нет, почему ?

Опишите, какого результата Вы хотите достичь, чтобы можно было проверить условие.
Сообщение # 2 написано 02.10.2015 в 12:53
Mocosin
Капрал
Цитата Mocosin ()
Не проходит проверку на уровень

так яснее ?
Сообщение # 3 написано 02.10.2015 в 13:10
p620
Маршал
Цитата Mocosin ()
так яснее ?

Нет, чего Вы от нее ждете? Правильность условия не проверить, если не знать, чего человек хотел.
Сообщение # 4 написано 02.10.2015 в 14:29
Mocosin
Капрал
Цитата p620 ()
Нет, чего Вы от нее ждете? Правильность условия не проверить, если не знать, чего человек хотел.

Разьясню,
Цитата Mocosin ()
 if (pPlayer->getLevel() >= 180

не срабатывает, далее
Цитата Mocosin ()
pPlayer->GetItemCount(45408) < 1 || pPlayer->GetItemCount(100070) < 1)

Срабатывает
Сообщение # 5 написано 02.10.2015 в 15:07
p620
Маршал
Цитата Mocosin ()
не срабатывает, далее

Хорошо, и я разъясняю:
Данная конструкция проверяет, соответствует ли статус игрока ХОТЯ БЫ ОДНОМУ из условий:
- Его уровень выше или равен 180.
- У него в инвентаре нет предметов с EntryID 45408 (короче было использовать !pPlayer->GetItemCount(45408) ).
- У него в инвентаре нет предметов с EntryID 100070 (читать комментарий к предыдущему пункту).

Если цель именно такая, которую я описал, тогда:
Настройте вывод в консоль возвращаемого значения pPlayer->getLevel() и сравните с ожидаемым.
Сообщение # 6 написано 02.10.2015 в 16:11
r0m1ntik
Центурион
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 уровень для использование данного баффа!"

Если не работает пишите помогу
Сообщение # 7 отредактировано r0m1ntik - Пятница, 02.10.2015, 17:39
p620
Маршал
r0m1ntik, Ваш пример не соответствует желаемому функционалу.
Сообщение # 8 написано 02.10.2015 в 17:43
r0m1ntik
Центурион
p620, я вроде сделал как он хотел, чтобы запрос был сначало по лвл а потом по итему.
Сообщение # 9 написано 02.10.2015 в 17:55
Mocosin
Капрал
я уже давно сделал

Добавлено (02.10.2015, 18:02)
---------------------------------------------

Цитата r0m1ntik ()
p620, я вроде сделал как он хотел, чтобы запрос был сначало по лвл а потом по итему.

Код

if (pPlayer->getLevel() >= 255 && (pPlayer->HasItemCount(46313, 1) || pPlayer->HasItemCount(100070, 1)))

вот правильный вариант
Сообщение # 10 написано 02.10.2015 в 18:02
p620
Маршал
Цитата Mocosin ()
вот правильный вариант

Теперь Вы видите, почему важно описать словами то, что Вы хотите получить?
То, что Вы привели в пример сейчас (как правильный вариант), никак не соответствует тому, что было в начале темы.
Сообщение # 11 отредактировано p620 - Пятница, 02.10.2015, 18:30
Pallam
Рыцарь
Цитата Mocosin ()
pPlayer->getLevel() >= 255

Очень глупый вопрос - как тебе функция, что дает только uint8, вернет значение больше 255? о_О

А вообще да, ТС странный. то 180, то 255..
Сообщение # 12 отредактировано Pallam - Пятница, 02.10.2015, 19:05
p620
Маршал
Цитата Pallam ()
Очень глупый вопрос - как тебе функция, что дает только uint8, вернет значение больше 255? о_О

Судя по одному существованию такой проверки (255/180 - не имеет значения), можно предположить, что у ТСа поддерживается больше 255 уровней. Иначе это действительно глупо.
Сообщение # 13 написано 02.10.2015 в 19:51
Pallam
Рыцарь
Цитата p620 ()
255/180 - не имеет значения

uint8_t [0..255]
Так что имеет.
Сообщение # 14 написано 02.10.2015 в 19:59
p620
Маршал
Цитата Pallam ()
uint8_t [0..255] Так что имеет.

Не очень понял, что Вы прокомментировали, но поясню свою позицию. Из синтаксиса вызова функции неизвестно, значение какого типа она возвращает. А учитывая уровни, используемые в проверке (т.е. высокие, из разряда crazy-серверов), можно предположить, что функция была адаптирована для возвращения, скажем, двух байтов, а не одного (uint16).
Сообщение # 15 отредактировано p620 - Суббота, 03.10.2015, 16:23
Pallam
Рыцарь
Цитата p620 ()
Не очень понял, что Вы прокомментировали, но поясню свою позицию. Из синтаксиса вызова функции неизвестно, значение какого типа оно возвращает. А учитывая уровни, используемые в проверке (т.е. высокие, из разряда crazy-серверов), можно предположить, что функция была адаптирована для возвращения, скажем, двух байтов, а не одного (uint16).

И тогда половина сервера является дерьмом, передающее непонятные байты клиенту. Тащем-то.. Он сам виноват =D
Сообщение # 16 написано 03.10.2015 в 01:03
p620
Маршал
Цитата Pallam ()
И тогда половина сервера является дерьмом, передающее непонятные байты клиенту. Тащем-то.. Он сам виноват =D

Посмотрел функцию Player::GiveLevel(), в ней формируется пакет для клиента с информацией по обновлению уровня. Для значения уровня резервируется 4 байта (uint32), так что клиент к такому готов.
Сообщение # 17 написано 03.10.2015 в 02:04
Mocosin
Капрал
Цитата Pallam ()
А вообще да, ТС странный. то 180, то 255..

У меня все инсты переписанные под 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);

добавлении вещи, она сразу одевалась ?
Сообщение # 18 отредактировано Mocosin - Суббота, 03.10.2015, 06:36
Ranege
Чемпион
Написать соответствующую функцию выше и вызвать ее. Пример написания можно найти в исходниках, даже по приходу опкода, когда игрок одевает вещь, связано со swapitem вроде
Сообщение # 19 написано 03.10.2015 в 09:15
Pallam
Рыцарь
QuickEquipItem в помощь.
Сообщение # 20 написано 03.10.2015 в 11:25
Форум » TrinityCore » [TrinityCore] Help » Не проходит проверку на уровень
  • Страница 1 из 1
  • 1
Поиск: