func void DropFromSlot (var c_npc slf, var string slotName)
{
CALL_zStringPtrParam(slotName);
CALL__thiscall(_@(slf), 7644560);
};
Choć to i tak ci nie pomoże. Nie musisz wymuszać wywoływania tej funkcji, bo silnik wywołuje ją zawsze po śmierci lub pobiciu postaci. Cały problem polega na tym, że przenoszenie przedmiotu ze slotu na slot z poziomu MDSa jest tylko "efektem wizualnym". Przedmiot tak naprawdę nadal jest w tamtym slocie. Dowód:
func int GetSlotItem(var c_npc slf, var string slotName)
{
CALL_zStringPtrParam(slotName);
CALL__thiscall(_@(slf), 7544560);
return CALL_RetValAsPtr();
};
func void Test ()
{
var c_npc slf; slf = MEM_PtrToInst (ECX);
if (GetSlotItem (slf, "ZS_LEFTHAND") > 0)
{
Print ("ZS_LEFTHAND");
}
else if (GetSlotItem (slf, "ZS_CROSSBOW") > 0)
{
Print ("ZS_CROSSBOW");
};
};
func void INIT_GLOBAL()
{
[...]
HookEngineF (7560880, 7, Test);
HookEngineF (7563104, 7, Test);
};