Files
2022-10-26 12:25:11 +08:00

181 lines
5.5 KiB
C++

//=======================================================================================================================
/** EquipmentContainer
@author
유재영
@since
@remarks
*/
#ifndef __EQUIPMENTCONTAINER_H__
#define __EQUIPMENTCONTAINER_H__
#pragma once
#include <SCItemSlotContainer.h>
typedef map<int,int> USE_TOOLTIP_CTRL_EQUIP_WINDOW;
class CControlWZ;
#include "./ItemAttrCalculatorEP2.h"
class EquipmentContainer : public SCItemSlotContainer, public IEquipmentRestriction
{
public:
//////////////////////////////////////////////////////////////////////////
enum eEQUIP_POS
{
EQUIP_WEAPON1 = 0, //eEQUIPCONTAINER_WEAPON = 0,
EQUIP_ARMOR, //eEQUIPCONTAINER_ARMOR,
EQUIP_PROTECTOR, //eEQUIPCONTAINER_PROTECTOR,
EQUIP_HELMET, //eEQUIPCONTAINER_HELMET,
EQUIP_PANTS, //eEQUIPCONTAINER_PANTS,
EQUIP_BOOTS, //eEQUIPCONTAINER_BOOTS,
EQUIP_GLOVE, //eEQUIPCONTAINER_GLOVE,
EQUIP_BELT, //eEQUIPCONTAINER_BELT,
EQUIP_SHIRTS, //eEQUIPCONTAINER_SHIRTS,
EQUIP_RING1, //eEQUIPCONTAINER_RING1,
EQUIP_RING2, //eEQUIPCONTAINER_RING2,
EQUIP_NECKLACE, //eEQUIPCONTAINER_NECKLACE,
EQUIP_BOW, //eEQUIPCONTAINER_BOW, // 안쓰지만 순서 맞춰서 넣어두자.
EQUIP_SACCESSORY1, //eEQUIPCONTAINER_SACCESSORY1,
EQUIP_SACCESSORY2, //eEQUIPCONTAINER_SACCESSORY2,
EQUIP_SACCESSORY3, //eEQUIPCONTAINER_SACCESSORY3,
EQUIP_CHARGE1, //eEQUIPCONTAINER_CHARGE1,
EQUIP_CHARGE2, //eEQUIPCONTAINER_CHARGE2,
EQUIP_CHARGE3, //eEQUIPCONTAINER_CHARGE3,
EQUIP_CHARGE4, //eEQUIPCONTAINER_CHARGE4
EQUIP_CHARGE5, //eEQUIPCONTAINER_CHARGE5
#ifdef _GS_GSP_REMOVE_PCROOM_SLOT
//no operation
#else
EQUIP_PC_ROOM1, //eEQUIPCONTAINER_PC_ROOM1
EQUIP_PC_ROOM2, //eEQUIPCONTAINER_PC_ROOM2
EQUIP_PC_ROOM3, //eEQUIPCONTAINER_PC_ROOM3
#endif//_GS_GSP_REMOVE_PCROOM_SLOT
EQUIP_PIC_CHARGE4,
EQUIP_PIC_CHARGE5,
#ifdef _NA_000000_20130114_RENEWER_UI
EQUIP_PICTURE_P004,
EQUIP_PICTURE_P005,
EQUIP_PICTURE_P006,
EQUIP_PICTURE_P007,
EQUIP_PICTURE_P008,
EQUIP_PICTURE_P009,
#else
#ifdef _NA_002935_20110704_ITEM_SCORE
EQUIP_SCORE_BG,
EQUIP_SCORE_NUMBER1,
EQUIP_SCORE_NUMBER2,
EQUIP_SCORE_NUMBER3,
EQUIP_SCORE_NUMBER4,
EQUIP_SCORE_NUMBER5,
#endif //_NA_002935_20110704_ITEM_SCORE
#endif
EQUIP_EXIT,
EQUIP_CHARACTER_VIEW,
EQUIP_TXT_TITLE,
#ifdef _NA_000000_20130114_RENEWER_UI
EQUIP_HIDE_HELMET,
EQUIP_HIDE_HELMET_P010,
#endif
EQUIP_MAX,
};
//////////////////////////////////////////////////////////////////////////
enum
{
EQUIP_SLOT_START = EQUIP_WEAPON1,
#ifdef _GS_GSP_REMOVE_PCROOM_SLOT
EQUIP_SLOT_END = EQUIP_CHARGE5 +1,
#else
EQUIP_SLOT_END = EQUIP_PC_ROOM3 +1,
#endif//_GS_GSP_REMOVE_PCROOM_SLOT
};
#ifdef _NA_000000_20130114_RENEWER_UI
#else
#ifdef _NA_002935_20110704_ITEM_SCORE
enum
{
EQUIP_SCORE_START = EQUIP_SCORE_BG,
EQUIP_SCORE_END = EQUIP_SCORE_NUMBER5 +1,
};
#endif //_NA_002935_20110704_ITEM_SCORE
#endif
public:
EquipmentContainer();
virtual ~EquipmentContainer();
void Release();
// HERO를 제외한 나머지 사람의 장착 아이템은 Serial(클라이언트 자체 발급), Pos, Code를 제외한 나머지 정보는 필요없다!!!
virtual VOID UpdateSlot( POSTYPE AtPos,SCSlot & rSlot );
virtual RC::eSLOT_INSERT_RESULT InsertSlot( POSTYPE AtPos, SCSlot & IN rSlot ); //< 슬롯에 객체 추가
virtual BOOL DeleteSlot( POSTYPE AtPos, SCSlot * pSlotOut ); // 슬롯의 객체 삭제
// 단순 슬롯 삽입
virtual void JustInsertSlot(POSTYPE insert_position, SCSlot& slot_info);
// 단순 슬롯 제거
virtual bool JustDeleteSlot(POSTYPE delete_position, SCSlot* slot_info_ptr);
virtual void SetDeleteChargeSlot(Character* character_ptr, POSTYPE delete_position);
//파츠인덱스를 통해 이큅위치얻기
int GetEquipPosByParts(POSTYPE parts_position);
SCItemSlot* GetItemSlot(POSTYPE at_pos);
//------------------------------------------------------------------------------
//! Returns: bool
//! Qualifier: 아이템 타입으로 해당 아이템이 창착되어 있는지 확인
//! Parameter: eITEMTYPE item_type
//! Parameter: OUT SLOTCODE* item_code : 장착되어 있는 아이템 코드
//------------------------------------------------------------------------------
bool IsEquipItem(eITEMTYPE item_type, OUT SLOTCODE* item_code);
void SetOwnerKey(DWORD dwKey);
// 실제 슬롯정보관련한 위치
POSTYPE GetRealSlotPos( POSTYPE pos );
// 인터페이스 컨트롤 위치.
POSTYPE GetRelativeSlotPos( POSTYPE pos );
void RenderTooltip( DWORD DialogKey );
USE_TOOLTIP_CTRL_EQUIP_WINDOW m_UseTooltipCtrls;
int m_iTooltipStringCode;
int getTooltipString(POSTYPE pos);
virtual SCItemSlotContainer* GetEquipmentSlotContainer();
virtual ns_formula::EquipSlotsManageInfo* GetEquipmentManageInfo();
virtual bool CheckEquipDefaultValidationWithoutStats(POSTYPE at_pot, const SCItemSlot& IN check_slot);
bool CanEquip(POSTYPE at_pos, const SCItemSlot& IN check_slot);
bool ValidLimitStats(const SCItemSlot& item_slot) const;
bool OnChangedEquipItemDurability(const SCItemSlot& item_slot);
#ifdef _NA_000000_20130114_RENEWER_UI
void SetChangeBackgroundIsClass(eCHAR_TYPE charater_type);
#endif//#ifdef _NA_000000_20130114_RENEWER_UI
protected:
virtual CControlWZ * getControl( POSTYPE /*AtPos*/ ){ return NULL; }
POSTYPE getCtrlIDToPos( WzID wzId );
POSTYPE m_TabNum;
static WzID m_wzId[EQUIP_MAX];
DWORD m_dwOwnerKey;
ns_formula::EquipSlotsManageInfo equip_slot_manage_info_;
};
#endif // __EQUIPMENTCONTAINER_H__