void CInputMain::SafeboxCheckout(LPCHARACTER ch, const char * c_pData, bool bMall) { TPacketCGSafeboxCheckout * p = (TPacketCGSafeboxCheckout *) c_pData; if (!ch->CanHandleItem()) return; CSafebox * pkSafebox; if (bMall) pkSafebox = ch->GetMall(); else pkSafebox = ch->GetSafebox(); if (!pkSafebox) return; LPITEM pkItem = pkSafebox->Get(p->bSafePos); if (!pkItem) return; #ifdef __SPECIAL_INVENTORY_SYSTEM__ if (p->ItemPos.IsSkillBookInventoryPosition() && !pkItem->IsSkillBook()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can only move skill books into this inventory.")); return; } if (p->ItemPos.IsUpgradeItemsInventoryPosition() && !pkItem->IsUpgradeItem()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can only move upgrade items into this inventory.")); return; } if (p->ItemPos.IsStoneInventoryPosition() && !pkItem->IsStone()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can only move stones into this inventory.")); return; } if (p->ItemPos.IsFlowersInventoryPosition() && !pkItem->IsFlowers()) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You can only move flowers into this inventory.")); return; } #endif #if defined(ITEM_CHECKINOUT_UPDATE) if (p->SelectPosAuto) { int AutoPos = -1; #if defined(__SPECIAL_INVENTORY_SYSTEM__) if (pkItem->IsSkillBook()) AutoPos = ch->GetEmptySkillBookInventory(pkItem->GetSize()); else if (pkItem->IsUpgradeItem()) AutoPos = ch->GetEmptyUpgradeItemsInventory(pkItem->GetSize()); else if (pkItem->IsStone()) AutoPos = ch->GetEmptyStoneInventory(pkItem->GetSize()); else if (pkItem->IsFlowers()) AutoPos = ch->GetEmptyFlowersInventory(pkItem->GetSize()); else AutoPos = ch->GetEmptyInventory(pkItem->GetSize()); #else AutoPos = ch->GetEmptyInventory(pkItem->GetSize()); #endif if (AutoPos == -1) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("You don't have enough space.")); return; } p->ItemPos = TItemPos(INVENTORY, AutoPos); } #endif if (!ch->IsEmptyItemGrid(p->ItemPos, pkItem->GetSize())) return; pkSafebox->Remove(p->bSafePos); if (bMall) { if (NULL == pkItem->GetProto()) { sys_err ("pkItem->GetProto() == NULL (id : %d)",pkItem->GetID()); return ; } // 100% È®·ü·Î ¼Ó¼ºÀÌ ºÙ¾î¾ß Çϴµ¥ ¾È ºÙ¾îÀÖ´Ù¸é »õ·Î ºÙÈù´Ù. ............... if (100 == pkItem->GetProto()->bAlterToMagicItemPct && 0 == pkItem->GetAttributeCount()) { pkItem->AlterToMagicItem(); } } #ifdef __HIGHLIGHT_SYSTEM__ pkItem->AddToCharacter(ch, p->ItemPos, false); #else pkItem->AddToCharacter(ch, p->ItemPos); #endif ITEM_MANAGER::instance().FlushDelayedSave(pkItem); DWORD dwID = pkItem->GetID(); db_clientdesc->DBPacketHeader(HEADER_GD_ITEM_FLUSH, 0, sizeof(DWORD)); db_clientdesc->Packet(&dwID, sizeof(DWORD)); char szHint[128]; snprintf(szHint, sizeof(szHint), "%s %u", pkItem->GetName(), pkItem->GetCount()); if (bMall) LogManager::instance().ItemLog(ch, pkItem, "MALL GET", szHint); else LogManager::instance().ItemLog(ch, pkItem, "SAFEBOX GET", szHint); }