Files
Leviathan/Client/Game/game/Interface/SUIDefine.h
T
2026-06-01 12:46:52 +02:00

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;