Мой старый код. Работает с полгода, всё нормально.
PHP код:
if (GetUInt32Value(ITEM_FIELD_DURATION) <= diff)
{
uint8 bagSlot = GetBagSlot();
uint8 slot = GetSlot();
uint32 ItemId = GetProto()->ItemId;
owner->DestroyItem(bagSlot, slot, true);
// Mysterious Egg (39878) & Disgusting Jar (44717)
if (ItemId == 39878 || ItemId == 44717)
{
// Cracked Egg (39883) & Ripe Disgusting Jar (44718)
uint32 newItemId = (ItemId == 39878) ? 39883 : 44718;
// first try store new item instead of deleted
ItemPosCountVec dest;
uint8 msg = owner->CanStoreNewItem(bagSlot, slot, dest, newItemId, 1);
if (msg == EQUIP_ERR_OK)
{
owner->StoreNewItem(dest, newItemId, 1, true);
}
else
{
// try store new item in any slot
if (Item* pItem = owner->StoreNewItemInInventorySlot(newItemId, 1))
owner->SendNewItem(pItem, 1, true, false);
// on any case... send error
else
owner->SendEquipError(msg, NULL, NULL);
}
}
return;
}