- UID
- 40404
- 阅读权限
- 0
- 回帖
- 122
- 喵币
- 0
- 有爱
- 37
- DKP
- 610
- 金币
- 2321
- 在线时间
- 197 小时
- 注册时间
- 2023-6-16
- 最后登录
- 2024-11-19
声望: 450   虚弱: 0

禁止访问

|
发表于 2023-6-28 21:43:58
|
显示全部楼层
亲测综合lua商人依然会崩溃,使用的源码查看是修改之后的代码,崩溃原因是在循环中(eObjectMgr->RemoveVendorItem)会删除被循环的itemlist子项,只要保证不在循环遍历itemlist中改变子项即可;修复解决代码如下:
int VendorRemoveAllItems(lua_State* L)
{
uint32 entry = Eluna::CHECKVAL<uint32>(L, 1);
while (1)
{
VendorItemData const* items = eObjectMgr->GetNpcVendorItemList(entry);
if (!items || items->Empty())
return 0;
auto const& itemlist = items->m_items;
auto itr = itemlist.rbegin();
if (itr == itemlist.rend())
{
return 0;
}
#if defined(CATA) || defined(MISTS)
eObjectMgr->RemoveVendorItem(entry, (*itr)->item, 1);
#else
#ifdef TRINITY
eObjectMgr->RemoveVendorItem(entry, itr->item);
#else
eObjectMgr->RemoveVendorItem(entry, (*itr)->item);
#endif
#endif
}
return 0;
} |
|