#include "stdafx.h" #include "./ItemManager_ItemFunction.h" #include "ItemManager.h" #include "InventorySlotContainer.h" //================================================================================================== namespace nsSlot { ; // NOTE: sub-manager is implemented to decompose ItemManager. // this object has not extra members and virtual function table except the instance of ItemManager. BOOST_STATIC_ASSERT(sizeof(nsSlot::ItemFunctionItemProperty) == sizeof(ItemManager*) * 2); }; //end of namespace //================================================================================================== // CHANGES: f110611.1L, moved from ItemManager_Use_EXCEPTION_PACKET.cpp RC::eITEM_RESULT nsSlot::ItemFunctionItemProperty::UseHammerOfAlchemist( POSTYPE ChargeItemPos, POSTYPE TargetPos) { SCSlotContainer * pContainer = root_->GetItemSlotContainer(SI_INVENTORY); if (!root_->ValidState()) return RC::RC_ITEM_INVALIDSTATE; if (!root_->ValidPos(SI_INVENTORY, ChargeItemPos)) return RC::RC_ITEM_INVALIDPOS; if (!root_->ValidPos(SI_INVENTORY, TargetPos)) return RC::RC_ITEM_INVALIDPOS; SCItemSlot & rChargeItemSlot = (SCItemSlot &)pContainer->GetSlot(ChargeItemPos); if (!rChargeItemSlot.GetItemInfo()) return RC::RC_ITEM_NOINFO; SCItemSlot & rTargetItemSlot = (SCItemSlot &)pContainer->GetSlot(TargetPos); if (!rTargetItemSlot.GetItemInfo()) return RC::RC_ITEM_NOINFO; //¿¬±Ý¼ú»çÀÇ ¸ÁÄ¡¸¦ »ç¿ëÇߴ°¡? if (rChargeItemSlot.GetItemInfo()->m_wType != eITEMTYPE_HAMMER_OF_ALCHEMIST || (rChargeItemSlot.GetNum() == 0)) { return RC::RC_ITEM_INVALID_TYPE; }; //¼ö¸® ´ë»óÀÌ ¸®¹ÌƼµå ¾ÆÀÌÅÛÀΰ¡? if (!rTargetItemSlot.IsLimited()) return RC::RC_ITEM_NOT_LIMITED_ITEM; // ¸í°øÀÇ ¸ÁÄ¡ ³»±¸µµ üũ if (!rTargetItemSlot.IsNeedToRepair()) return RC::RC_ITEM_DONT_NEED_TO_REPAIR; #ifdef __NA_1024_MODIFY_LIMITED_ITEM_REPAIR_COUNT //¼ö¸® °¡´É Ƚ¼ö üũ ¾ÈÇϴ°ɷΠº¯°æ #else //¼ö¸® °¡´É Ƚ¼ö üũ if (rTargetItemSlot.GetLimitedRepairCount() <= 0) return RC::RC_ITEM_OVER_REPAIR_COUNT; #endif //ÄðŸÀÓ Ã¼Å© RC::eITEM_RESULT rcResult = root_->player_->CanUseItem(rChargeItemSlot.GetItemInfo()); if (rcResult != RC::RC_ITEM_SUCCESS) return rcResult; //¼ö¸® rTargetItemSlot.RepairMaxDura(); rTargetItemSlot.SetDura(rTargetItemSlot.GetMaxDura()); GAMELOG->LogItem(ITEM_USE, root_->player_, &rChargeItemSlot); //¿¬±Ý¼ú»çÀÇ ¸ÁÄ¡(À¯·á ¾ÆÀÌÅÛ) »èÁ¦ root_->Lose(pContainer, ChargeItemPos, 1); WORD wCoolTimeType = rChargeItemSlot.GetItemInfo()->m_wCoolTimeType; //ÄðŸÀÓ root_->player_->ResetUseItem(wCoolTimeType); return RC::RC_ITEM_SUCCESS; } // CHANGES: f110611.1L, moved from ItemManager_Use_EXCEPTION_PACKET.cpp #ifdef _NA_002050_20110216_ADD_GENDER // ij¸¯ÅÍ ½½·Ô È®Àå ¾ÆÀÌÅÛÀ» »ç¿ëÇÑ´Ù. RC::eITEM_RESULT nsSlot::ItemFunctionItemProperty::UseExtendCharSlotItem( const SLOTIDX inven_type, const POSTYPE inven_position) { if (inven_type != SI_INVENTORY) { return RC::RC_ITEM_INVALIDPOS; } MSG_DG_OTHER_EXTEND_CHAR_SLOT_SYN msg; { msg.Init(); msg.extend_item_position = inven_position; } root_->player_->SendToGameDBPServer(&msg, msg.GetSize()); return RC::RC_ITEM_PROCESS_PENDING; } #endif