527 lines
13 KiB
C++
527 lines
13 KiB
C++
#pragma once
|
|
|
|
class SGameObject;
|
|
class SGameManager;
|
|
|
|
//#include <vector>
|
|
//#include <string>
|
|
#include <map>
|
|
#include <list>
|
|
#include <windows.h>
|
|
|
|
#include "KTypes.h"
|
|
#include <mmo/ArType.h>
|
|
|
|
#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<AR_HANDLE> SUMMON_CREAUTRE_LIST;
|
|
typedef std::map<int, const SkillTree*> SKILLTREE_LIST;
|
|
typedef std::map<AR_HANDLE, NPCInfo> NPC_MAP;
|
|
typedef std::map<AR_HANDLE, PartyPlayerInfo> PARTYPLAYER_MAP;
|
|
typedef std::vector<CHATDATA*> CHAT_LIST;
|