Перековать (Rochet2) в AzerothCore - PullRequest
2 голосов
/ 17 марта 2019

Кто-нибудь уже успешно добавил скрипт перековки Rochet2 в AC ? Мой работает, но не полностью. При входе в систему персонажа скрипт должен повторно применять бонусы к перекованным (и экипированным) предметам, но кажется, что " player-> GetItemByGuid () " не может найти запрошенный предмет, поэтому он ничего не возвращает.

Код TrinityCore (работает):

uint32 lowGUID = (*result)[0].GetUInt32();
Item* invItem = player->GetItemByGuid(ObjectGuid(HighGuid::Item, 0, lowGUID));

if (invItem) 
    player->_ApplyItemMods(invItem, invItem->GetSlot(), false);             

ReforgeData& data = player->reforgeMap[lowGUID];
data.increase = (*result)[1].GetUInt32();
data.decrease = (*result)[2].GetUInt32();
data.stat_value = (*result)[3].GetInt32();
if (invItem)
     player->_ApplyItemMods(invItem, invItem->GetSlot(), true);

Код AzerothCore (работает, но условие "if (invItem)" никогда не выполняется.

uint32 lowGUID = (*result)[0].GetUInt32();
Item* invItem = player->GetItemByGuid((uint64) MAKE_NEW_GUID(HIGHGUID_ITEM, 0, lowGUID));

if (invItem /*&& invItem->IsEquipped()*/)
      player->_ApplyItemMods(invItem, invItem->GetSlot(), false); 

ReforgeData& data = player->reforgeMap[lowGUID];
data.increase = (*result)[1].GetUInt32();
data.decrease = (*result)[2].GetUInt32();
data.stat_value = (*result)[3].GetInt32();
if (invItem /*&& invItem->IsEquipped()*/)
      player->_ApplyItemMods(invItem, invItem->GetSlot(), true);

MAKE_NEW_GUID () возвращает что-то, похожее на guid.

Но я не знаю, почему " player-> GetItemByGuid () " не может найти предмет.

1 Ответ

2 голосов
/ 17 марта 2019

Порядок аргументов MAKE_NEW_GUID отличается от конструктора ObjectGuid. Таким образом, поскольку ваши аргументы находятся в неправильном порядке, результат также неверен, и элемент не найден. Смотрите определение и использование MAKE_NEW_GUID для правильного порядка аргументов.

...