#pragma once class SGameObject; class SGameManager; //#include //#include #include #include #include #include "KTypes.h" #include #include "CreatureBase.h" #include "SkillBase.h" namespace{ enum { c_nJPKLimit = 99999, c_nJPMLimit = 999999999, }; enum { c_nEXPKLimit = 999, c_nEXPMLimit = 999999, }; const KColor c_ColorClockControl = KColor( 32, 32, 32, 200 ); const char * c_szDEF_SPR_NAME = "ui_frame.spr"; ////////////////////////////////////////////////////////////////////////// // MJ 2004/02/25 // 맵 추가 되면 꼭 추가해 주어야 한다 // // ======================= // SUIWorldMapWnd.cpp : 맵 추가/삭제 되면 여기서도 꼭!!!! 수정요함 // ======================= // GetMapPos // GetMapAniName // ======================= // // ======================= // SUIMinimapWnd.cpp : 맵 추가/삭제 되면 여기서도 꼭!!!! 수정요함 // ======================= // GetMapPos // GetMapAniName // ////////////////////////////////////////////////////////////////////////// const int c_nMapCount = 7; ///< 텍스쳐를 몇개로 나눌것인가.. 이것은 절대로..네버 변하지 않는다 //// 맵 포스 //enum MAP_POS //{ // MAP_00 = 0, // MAP_10, // MAP_11, // MAP_12, // MAP_20, // MAP_21, // MAP_22, // MAP_30, // MAP_40, // MAP_41, // MAP_42, // MAP_50, // MAP_51, // MAP_52, // MAP_66, // MAP_63, // MAP_62, // MAP_73, // MAP_72, // MAP_13, //}; //// 전체맵에서 어디에 위치하나.. //const int c_nMapPos[20][2] = //{ // { 3,1 }, // MAP_00 // { 6,6 }, // MAP_10 // { 3,1 }, // MAP_11 // { 3,0 }, // MAP_12 // { 6,6 }, // MAP_20 // { 4,1 }, // MAP_21 // { 4,0 }, // MAP_22 // { 6,6 }, // MAP_30 // { 6,6 }, // MAP_40 // { 2,6 }, // MAP_41 // { 2,5 }, // MAP_42 // { 6,6 }, // MAP_50 // { 3,6 }, // MAP_51 // { 3,5 }, // MAP_52 // { 6,6 }, // MAP_66 // { 4,4 }, // MAP_63 // { 4,6 }, // MAP_62 // { 5,4 }, // MAP_73 // { 5,5 }, // MAP_72 // { 1,3 }, // MAP_13 //}; ////////////////////////////////////////////////////////////////////////// const char* g_strLookChangeIcon = "common_mark_titanium_transform_equipment"; // 2012. 7. 26 - marine 아이템 형상변환 표시 } /// 아이템 카테고리 enum UI_ITEM_CATEGORY { UI_ITEM_ALL, UI_ITEM_EQUIP, //장비 UI_ITEM_USE, //소모품 UI_ITEM_CARD, //카드 UI_ITEM_CREATURE, //크리쳐 UI_ITEM_EXPEND, //재료 UI_ITEM_ETC, //기타 UI_ITEM_QUEST, //퀘스트 UI_ITEM_CRU, //크루 UI_ITEM_COLLECTION, UI_ITEM_CARD2, }; enum UI_ITEM_NEW_CATEGORY { UI_ITEM_NEW_ALL = 0, UI_ITEM_NEW_1 = 0x0001, UI_ITEM_NEW_2 = 0x0002, UI_ITEM_NEW_3 = 0x0004, UI_ITEM_NEW_4 = 0x0008, UI_ITEM_NEW_5 = 0x0010, UI_ITEM_NEW_6 = 0x0020, UI_ITEM_NEW_7 = 0x0040, UI_ITEM_NEW_8 = 0x0080, UI_ITEM_NEW_9 = 0x0100, UI_ITEM_NEW_10 = 0x0200, }; // 퀵 슬롯 정보 /////////////////////////////////////////////////// /*enum QUICKSLOT_BTNSTATE { QUICKSLOT_DEFAULT = 0, QUICKSLOT_CS = 1, QUICKSLOT_CONTROL = 2, QUICKSLOT_SHIFT = 3, QUICKSLOT_ALT = 4, QUICKSLOT_BTN_MAXCOUNT = 5, };*/ struct QUICKSLOT_DISPLAYINFO { bool bEquip; count_t nCount; int nFrameNum; std::string strSprName; std::string strAniName; std::string strTooltip; QUICKSLOT_DISPLAYINFO() : bEquip( false ), nCount( 0 ), nFrameNum( 0 ) { } bool operator!=( const QUICKSLOT_DISPLAYINFO& r ) { return ( bEquip != r.bEquip || nCount != r.nCount || nFrameNum != r.nFrameNum || strSprName != r.strSprName || strAniName != r.strAniName || strTooltip != r.strTooltip ); } }; struct SUIQuickSlotInfo { enum QUICKSLOT_TYPE { QSLOTTYPE_ITEM, QSLOTTYPE_SKILL, QSLOTTYPE_MOTION, QSLOTTYPE_EMPTYITEM, // 수량이 0 인 소모성 아이템 // QSLOTTYPE_CREATURE_SKILL, //크리쳐스킬은 Skill에 통합한다. 단, SUIQuickSlotSkillInfo의 bPlayer를 통해 creature스킬인지 아닌지 검사하도록한다. //2009.03.25. sfreer }; SUIQuickSlotInfo( QUICKSLOT_TYPE type ) : m_type( type ), m_bEnable(true), m_LastUsedTime(0) { } QUICKSLOT_TYPE m_type; QUICKSLOT_DISPLAYINFO DisplayInfo; bool m_bEnable; virtual SUIQuickSlotInfo* Duplicate() const = 0; AR_TIME m_LastUsedTime; }; struct SUIQuickSlotItemInfo : public SUIQuickSlotInfo { SUIQuickSlotItemInfo( AR_HANDLE hItem, int nItemCode ) : SUIQuickSlotInfo( QSLOTTYPE_ITEM ), m_hItem( hItem ), m_ItemCode( nItemCode ) { } AR_HANDLE m_hItem; int m_ItemCode; SUIQuickSlotInfo* Duplicate() const { return new SUIQuickSlotItemInfo( m_hItem, m_ItemCode ); } }; struct SUIQuickSlotEmptyItemInfo : public SUIQuickSlotInfo { SUIQuickSlotEmptyItemInfo( int Code ) : SUIQuickSlotInfo( QSLOTTYPE_EMPTYITEM ), iItemCode( Code ){ } int iItemCode; // 2012. 3. 27 - marine 서버 클라에 없는 아이템이므로 핸들을 사용할 수 없고 아이템 코드로 식별한다. SUIQuickSlotInfo* Duplicate() const { return new SUIQuickSlotEmptyItemInfo( iItemCode ); } }; struct SUIQuickSlotSkillInfo : public SUIQuickSlotInfo { SUIQuickSlotSkillInfo( AR_HANDLE hTarget, int nSkillID, int nSkillLevel, bool bPlayer = true/*, AR_TIME tLastUpdate = 0*/ ) : SUIQuickSlotInfo( QUICKSLOT_TYPE::QSLOTTYPE_SKILL ), m_hTarget(hTarget), m_nSkillID( nSkillID ), m_nSkillLevel( nSkillLevel ),m_bPlayer(bPlayer)/*, m_LastUsedTime(tLastUpdate)*/{ } AR_HANDLE m_hTarget; int m_nSkillID; int m_nSkillLevel; bool m_bPlayer; //AR_TIME m_LastUsedTime; // Fraun quickslot cooldown SUIQuickSlotInfo* Duplicate() const { return new SUIQuickSlotSkillInfo( m_hTarget, m_nSkillID, m_nSkillLevel,m_bPlayer/*, m_LastUsedTime*/); } }; /* struct SUIQuickSlotCreatureSkillInfo : public SUIQuickSlotInfo { SUIQuickSlotCreatureSkillInfo( AR_HANDLE hTarget, int nSkillID, int nSkillLevel ) : SUIQuickSlotInfo( QUICKSLOT_TYPE::QSLOTTYPE_CREATURE_SKILL ), m_hTarget(hTarget), m_nSkillID( nSkillID ), m_nSkillLevel( nSkillLevel ) { } AR_HANDLE m_hTarget; int m_nSkillID; int m_nSkillLevel; SUIQuickSlotInfo* Duplicate() const { return new SUIQuickSlotCreatureSkillInfo( m_hTarget, m_nSkillID, m_nSkillLevel ); } };*/ struct SUIQuickSlotMotionInfo : public SUIQuickSlotInfo { SUIQuickSlotMotionInfo( int nMotionID, int nMotionCmd ) : SUIQuickSlotInfo( QUICKSLOT_TYPE::QSLOTTYPE_MOTION ) , m_nMotionID( nMotionID ) , m_nMotionCommandID( nMotionCmd ) { } int m_nMotionID; int m_nMotionCommandID; SUIQuickSlotInfo* Duplicate() const { return new SUIQuickSlotMotionInfo( m_nMotionID, m_nMotionCommandID ); } }; /// Drag & Drop 정보 /////////////////////////////////////////////////// struct SUIDragInfo { enum UIDRAGINFO_TYPE { DRAGTYPE_INVENITEM, DRAGTYPE_COMBINEITEM, DRAGTYPE_SHOPBUYITEM, DRAGTYPE_SHOPSELLITEM, DRAGTYPE_SHOPPINGKART, DRAGTYPE_QUICKSLOT, DRAGTYPE_SKILL, DRAGTYPE_MOTION, DRAGTYPE_CREATURECARD, DRAGTYPE_EQUIPCREATURE, DRAGTYPE_STORAGE, DRAGTYPE_CREATURE_QUICKSLOT, DRAGTYPE_BOOTH, DRAGTYPE_CASHITEM, DRAGTYPE_CHATTAB, DRAGTYPE_EQUIPMENT, // 인벤토리에서 장비창 분리. bintitle. 2010.07.23 DRAGTYPE_DESTRUCTION, // 파괴창. DRAGTYPE_CREATURE_FARM, // 크리처 농장 //servantes 2011.01.27 DRAGTYPE_DECOMPOSITION, // 크리처 농장 //servantes 2011.01.27 }; SUIDragInfo( UIDRAGINFO_TYPE type ) : m_type( type ) { } UIDRAGINFO_TYPE m_type; }; struct SUICashItemDragInfo : public SUIDragInfo { SUICashItemDragInfo( unsigned int uid, count_t count ) : SUIDragInfo( SUIDragInfo::DRAGTYPE_CASHITEM ) { item_uid = uid; item_count = count; } unsigned int item_uid; ///< cuid (캐쉬템고유번호) count_t item_count; }; struct SUIStorageDragInfo : public SUIDragInfo { SUIStorageDragInfo( AR_HANDLE hItem ) : SUIDragInfo( SUIDragInfo::DRAGTYPE_STORAGE ), m_hItem( hItem ) { } AR_HANDLE m_hItem; }; struct SUIInvenItemDragInfo : public SUIDragInfo { SUIInvenItemDragInfo( AR_HANDLE hItem, bool bFromEquipSlot, bool bFromBeltSlot = false ) : SUIDragInfo( SUIDragInfo::DRAGTYPE_INVENITEM ), m_hItem( hItem ), m_bFromEquipSlot( bFromEquipSlot ), m_bFromBeltSlot(bFromBeltSlot) { } AR_HANDLE m_hItem; bool m_bFromEquipSlot; bool m_bFromBeltSlot; }; // 장비창. bintitle. 2010.07.23. struct SUIEquipmentDragInfo : public SUIDragInfo { SUIEquipmentDragInfo( AR_HANDLE hItem, bool bFromEquipSlot, bool bFromBeltSlot = false ) : SUIDragInfo( SUIDragInfo::DRAGTYPE_EQUIPMENT ), m_hItem( hItem ), m_bFromEquipSlot( bFromEquipSlot ), m_bFromBeltSlot(bFromBeltSlot) { } AR_HANDLE m_hItem; bool m_bFromEquipSlot; bool m_bFromBeltSlot; }; // 파괴창에서 드래그. struct SUIDestructionItemDragInfo : public SUIDragInfo { SUIDestructionItemDragInfo( AR_HANDLE hItem ) : SUIDragInfo( DRAGTYPE_DESTRUCTION ), m_hItem( hItem ) { } AR_HANDLE m_hItem; }; struct SUICombineItemDragInfo : public SUIDragInfo { SUICombineItemDragInfo( AR_HANDLE hItem ) : SUIDragInfo( DRAGTYPE_COMBINEITEM ), m_hItem( hItem ) { } AR_HANDLE m_hItem; }; struct SUIShopBuyItemDragInfo : public SUIDragInfo { SUIShopBuyItemDragInfo( ItemBase::ItemCode id ) : SUIDragInfo( DRAGTYPE_SHOPBUYITEM ), m_ItemID( id ) { } ItemBase::ItemCode m_ItemID; }; struct SUIShopSellItemDragInfo : public SUIDragInfo { SUIShopSellItemDragInfo( AR_HANDLE hItem ) : SUIDragInfo( DRAGTYPE_SHOPSELLITEM ), m_hItem( hItem ) { } AR_HANDLE m_hItem; }; struct SUIShoppingKartDragInfo : public SUIDragInfo { SUIShoppingKartDragInfo( bool bBuyMode, int nIndex ) : SUIDragInfo( DRAGTYPE_SHOPPINGKART ), m_bBuyMode( bBuyMode ), m_nIndex( nIndex ) { } bool m_bBuyMode; int m_nIndex; }; struct SUIStoreItemDragInfo : public SUIDragInfo { SUIStoreItemDragInfo( ItemBase::ItemCode code, bool bIsSell, int nLevel = 1, int nEnhance = 0, int nEndurance = 0, int nFlag = 0, int nIndex = -1 ) : SUIDragInfo( DRAGTYPE_BOOTH ), m_Code( code ), m_bIsSell( bIsSell ), m_nLevel( nLevel ), m_nEnhance( nEnhance ), m_nEndurance( nEndurance ), m_nFlag( nFlag ), m_nIndex( nIndex ) { } ItemBase::ItemCode m_Code; int m_nLevel; int m_nIndex; int m_nEndurance; int m_nFlag; int m_nEnhance; bool m_bIsSell; }; struct SUIQuickSlotDragInfo : public SUIDragInfo { /* SUIQuickSlotDragInfo( QUICKSLOT_BTNSTATE ButtonState, int nSlotIndex ) : SUIDragInfo( DRAGTYPE_QUICKSLOT ), m_ButtonState( ButtonState ), m_nSlotIndex( nSlotIndex ) { }*/ //QUICKSLOT_BTNSTATE m_ButtonState; SUIQuickSlotDragInfo( int nSlotIndex ) : SUIDragInfo( DRAGTYPE_QUICKSLOT ), m_nSlotIndex( nSlotIndex ) { } int m_nSlotIndex; }; struct SUISkillDragInfo : public SUIDragInfo { SUISkillDragInfo( int nSkillID, int nLevel, AR_HANDLE hCardItem = NULL, AR_HANDLE hTarget = NULL, UIDRAGINFO_TYPE Type = DRAGTYPE_SKILL, int state = 0, bool player = true) : SUIDragInfo( DRAGTYPE_SKILL ) , m_nSkillID( nSkillID ) , m_nLevel( nLevel ) , m_hCardItem( hCardItem ) , m_hTarget( hTarget ) , m_nState( state ) , m_bPlayer( player) { m_type = Type; }; int m_nSkillID; int m_nLevel; AR_HANDLE m_hCardItem; AR_HANDLE m_hTarget; int m_nState; bool m_bPlayer; }; struct SUIEquipCreatureInfo : public SUIDragInfo { SUIEquipCreatureInfo( AR_HANDLE hCreature, AR_HANDLE hItem ) : SUIDragInfo( DRAGTYPE_EQUIPCREATURE ) , m_hCreature( hCreature ) , m_hItem( hItem ) {} AR_HANDLE m_hCreature; AR_HANDLE m_hItem; }; struct SUIMotionDragInfo : public SUIDragInfo { SUIMotionDragInfo( int nMotionID, int nMotionCmd ) : SUIDragInfo( DRAGTYPE_MOTION ), m_nMotionID( nMotionID ) , m_nMotionCommandID( nMotionCmd ) { } int m_nMotionID; int m_nMotionCommandID; }; struct SUICreatureCardDragInfo : public SUIDragInfo { SUICreatureCardDragInfo( int nIndex ) : SUIDragInfo( DRAGTYPE_CREATURECARD ), m_nSlotIndex( nIndex ) { } int m_nSlotIndex; }; // 크리처 농장 //servantes 2011.01.27 struct SUICreatureFarmDragInfo : public SUIDragInfo { SUICreatureFarmDragInfo( AR_HANDLE hItem, int _nMsg ) // 2011.03.15 servantes : SUIDragInfo( SUIDragInfo::DRAGTYPE_CREATURE_FARM ), m_hItem( hItem ) { nMsg = _nMsg; } AR_HANDLE m_hItem; int nMsg; // 2011.03.15 servantes }; // 분해 struct SUIDecompositionDragInfo : public SUIDragInfo { SUIDecompositionDragInfo( WORD wIndex ) // 2011.03.15 servantes : SUIDragInfo( SUIDragInfo::DRAGTYPE_DECOMPOSITION ) , m_wIndex( wIndex ) { } WORD m_wIndex; }; /// 미니맵 struct NPCInfo{ AR_HANDLE handle; bool bVisible; DWORD dwShowTime; std::string strCtrlName; }; /// 미니맵 struct PartyPlayerInfo{ AR_HANDLE handle; bool bVisible; int nPosX; int nPosY; bool bAlive; DWORD dwShowTime; std::string strCtrlName; }; /// 채팅 struct CHATDATA { CHATDATA() : nChatType(0), nReferenceCnt(0) { szText.empty(); szSender.empty(); szColor.empty(); szSenderColor.empty(); } int nChatType; std::string szText; std::string szSender; std::string szColor; std::string szSenderColor; int nReferenceCnt; }; #define NO_TIME (DWORD)-1 typedef std::list SUMMON_CREAUTRE_LIST; typedef std::map SKILLTREE_LIST; typedef std::map NPC_MAP; typedef std::map PARTYPLAYER_MAP; typedef std::vector CHAT_LIST;