2

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

4

1 回答 1

2

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

于 2019-03-17T18:50:44.233 回答