Codice:
int item_remove(lua_State* L)
{
CQuestManager& q = CQuestManager::instance();
LPITEM item = q.GetCurrentItem();
if (item != NULL) {
if (q.GetCurrentCharacterPtr() == item->GetOwner()) {
ITEM_MANAGER::instance().RemoveItem(item);
} else {
sys_err("Tried to remove invalid item %p", get_pointer(item));
}
q.ClearCurrentItem();
}
return 0;
}
Andando a vedere come funziona "RemoveItem(LPITEM item)", scoprirai che cancella definitivamente un oggetto da...
Codice:
void ITEM_MANAGER::RemoveItem(LPITEM item, const char * c_pszReason)
{
LPCHARACTER o;
if ((o = item->GetOwner()))
{
char szHint[64];
snprintf(szHint, sizeof(szHint), "%s %u ", item->GetName(), item->GetCount());
LogManager::instance().ItemLog(o, item, c_pszReason ? c_pszReason : "REMOVE", szHint);
// SAFEBOX_TIME_LIMIT_ITEM_BUG_FIX
if (item->GetWindow() == MALL || item->GetWindow() == SAFEBOX)
{
// 20050613.ipkn.½Ã°£Á¦ ¾ÆÀÌÅÛÀÌ »óÁ¡¿¡ ÀÖÀ» °æ¿ì ½Ã°£¸¸·á½Ã ¼¹ö°¡ ´Ù¿îµÈ´Ù.
CSafebox* pSafebox = item->GetWindow() == MALL ? o->GetMall() : o->GetSafebox();
if (pSafebox)
{
pSafebox->Remove(item->GetCell());
}
}
// END_OF_SAFEBOX_TIME_LIMIT_ITEM_BUG_FIX
else
{
o->SyncQuickslot(QUICKSLOT_TYPE_ITEM, item->GetCell(), 255);
item->RemoveFromCharacter();
}
}
M2_DESTROY_ITEM(item);
}
Magazzino, item shop, e poi c'è un else, che dice "RemoveFromCharacter"... andiamo a vedere cosa fa questo altro metodo qui...
Codice:
if (m_bEquipped) // ÀåÂøµÇ¾ú´Â°¡?
{
Unequip();
//pOwner->UpdatePacket();
SetWindow(RESERVED_WINDOW);
Save();
return (this);
}
Se l'item è equipaggiato lo disequipaggia e lo porta nel limbo (dico cosi perchè onestamente non ricordo la finestra 0 per cosa fosse ma dovrebbe sparirti l'item). In ogni caso puoi fare una funzione apposita (che sicuramente ci sarà già ma ora non ho molto tempo per controllare) per rimuovere l'item direttamente dall'equip con cose del tipo: "pOwner->SetItem(cell, NULL);" dopo aver definito un "TItemPos cell(EQUIPMENT, posizione);"
Molto bene tutto bello, ma item.remove() toglie un item SELEZIONATO!!! come aspita seleziono un item nell'equip????? usiamo la fantastica funzione lua (nella quest quindi ci stiamo spostando) pc.get_wear(posizione dell'equip)
WEARABLE_BODY = (1 << 0),
WEARABLE_HEAD = (1 << 1),
WEARABLE_FOOTS = (1 << 2),
WEARABLE_WRIST = (1 << 3),
WEARABLE_WEAPON = (1 << 4),
WEARABLE_NECK = (1 << 5),
WEARABLE_EAR = (1 << 6),
WEARABLE_UNIQUE = (1 << 7),
WEARABLE_SHIELD = (1 << 8),
WEARABLE_ARROW = (1 << 9),
questi sono i numeri che devi mettere come posizione, tralasciando cosa siano.
Quindi scriverai qualcosa del tipo "local item = pc.get_wear(4)" e poi "if item != nil then" e fai l'item.remove().
Questa è una soluzione partorita sul momento ci saranno sicuramente 3984398 modi migliori di fare il tutto ma non ho visto risposte migliori al momento. Saluti