c++ 艾泽拉斯之心的重塑(罗切特2)

rqcrx0a6  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(92)

有人已经成功地在AC上添加了Rochet2's Reforging script吗?我的可以,但不是完全的。在角色登录时,脚本应该会在重新锻造(和装备)的物品上重新应用奖励,但似乎“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()”找不到该项目。

nimxete2

nimxete21#

MAKE_NEW_GUID的参数顺序与ObjectGuid构造函数不同。因此,由于您的参数顺序错误,因此结果也是错误的,并且找不到项。有关正确的参数顺序,请参阅MAKE_NEW_GUID的定义和用法。

相关问题