将 (Rochet2) 重铸为 AzerothCore
Reforging (Rochet2) to AzerothCore
有没有人已经成功添加了Rochet2's Reforging script on 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() returns 看起来像 guid 的东西。
但不知道为什么“player->GetItemByGuid()”找不到物品
MAKE_NEW_GUID
的参数顺序不同于 ObjectGuid
构造函数。因此,由于您的论点顺序错误,因此结果也是错误的,并且找不到项目。有关参数的正确顺序,请参阅 MAKE_NEW_GUID
的定义和使用。
有没有人已经成功添加了Rochet2's Reforging script on 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() returns 看起来像 guid 的东西。
但不知道为什么“player->GetItemByGuid()”找不到物品
MAKE_NEW_GUID
的参数顺序不同于 ObjectGuid
构造函数。因此,由于您的论点顺序错误,因此结果也是错误的,并且找不到项目。有关参数的正确顺序,请参阅 MAKE_NEW_GUID
的定义和使用。