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

613 lines
15 KiB
C++

#pragma once
#ifdef _RAC
#include "GameRule.h"
#elif _JEDIT
#include "GameRule.h"
#endif
namespace GAME_DEFINE
{
enum SEX
{
SEX_NONE = 0, // No sex (gender)
SEX_FEMALE, // Female
SEX_MALE , // Male
SEX_MAX, // Max (for iterations)
};
enum CLAN
{
GCLAN_NOTHING = 0, // No Race
GCLAN_MONSTER, // Monster
GCLAN_NPC, // NPC
GCLAN_GAIA, // Gaia
GCLAN_DEVA, // Deva
GCLAN_ASURA, // Asura
GCLAN_ALFEN, // Alfen
GCLAN_GIAN, // Gian
GCLAN_AMAZON, // Amazon
GCLAN_MAX, // For iterations
GCLAN_PROP_NX3 = 1000, // Prop
GCLAN_PROP_SPEED, // Prop SPT
GCLAN_PROP_COB,
};
// Animation management, animation part management
enum ANIPART
{
ANIPART_BIPED = 0,///< Biped Ani(기본)
ANIPART_HAIR, ///< 머리 Ani
ANIPART_NECKLACE, ///< 목걸이 Ani
ANIPART_EARRING, ///< 귀고리 Ani
ANIPART_MANTLE, ///< 망토 Ani
ANIPART_FABRIC, ///< 앞뒤 가리개 Ani
ANIPART_LONGSKIRT, ///< 긴치마 Ani
ANIPART_MIDSKIRT, ///< 중치마 Ani
ANIPART_SHORTSKIRT, ///< 짧은 치마 Ani
ANIPART_WEAPON_LEFT, ///< 무기 왼쪽 Ani
ANIPART_WEAPON_RIGHT, ///< 무기 오른쪽 Ani
ANIPART_MAX,
};
// Manage bones and mesh parts
enum MPART
{
MPART_FACE = 0, ///< 얼굴
MPART_HAIR , // Hair
MPART_BODY , ///< 몸통-상의,하의 포함
MPART_FOOT , ///< 신발(단화, 장화)
MPART_HAND , ///< 손 (긴,짧은장갑)
MPART_L_SKIRT , ///< 긴 치마
MPART_M_SKIRT , ///< 중 치마
MPART_S_SKIRT , ///< 짧은 치마
MPART_MANTLE , ///< 망토
MPART_ACCE_EYE, ///< 액세서리 눈
MPART_ACCE_LIP, ///< 액세서리 입, 코
MPART_ACCE_EAR, ///< 액세서리 귀
MPART_ACCE_NECK,///< 액세서리 목걸이
MPART_FABRIC, ///< 앞가리개
MPART_L_WEAPON, ///< 왼쪽 무기
MPART_R_WEAPON, ///< 오른쪽 무기
MPART_HELM, ///< 투구
MPART_MAX ,
};
enum MDECOPART
{
MDECOPART_L_WEAPON = 0, ///< 치장용 무기 ( 방패 류 는 Attach에 붙는다 )
MDECOPART_R_WEAPON, ///< 치장용 무기 ( 방패 류 는 Attach에 붙는다 )
MDECOPART_BODY, ///< 치장용 의상
MDECOPART_HELM, ///< 치장용 투구
MDECOPART_HAND, ///< 치장용 장갑
MDECOPART_FOOT, ///< 치장용 부츠
// { sonador 1.8.1 액세서리 확장 표현 슬롯 추가
MDECOPART_L_SKIRT, ///< 치장용 긴 치마
MDECOPART_M_SKIRT, ///< 치장용 중 치마
MDECOPART_S_SKIRT, ///< 치장용 Ÿ裏?치마
// }
MDECOPART_MANTLE, ///< 치장용 망토
MDECOPART_SHOULDER, ///< 치장용 어깨
MDECOPART_HAIR, ///< 치장용 헤어
MDECOPART_SHOULDER2, ///< 치장용 어깨
MDECOPART_MAX,
};
/// const char * pAniClassEx[]; <= 과 같은 인덱스를 사용
enum
{
ANICLS_UNA = 0, ///< 맨 손 0
ANICLS_SWO, ///< 칼 한손 1
ANICLS_SWA, ///< 칼 양손 2
ANICLS_SPA, ///< 창 양손 3
ANICLS_BWA, ///< 활 양손 4
ANICLS_DGO, ///< 단검 한손 5
ANICLS_SWT, ///< 장검 이도류 6
ANICLS_DGT, ///< 단검 이도류 7
ANICLS_SFO, ///< 지팡이 한손 8
ANICLS_SFA, ///< 지팡이 양손 9
ANICLS_AXO, ///< 도끼 한손 10
ANICLS_AXA, ///< 도끼 양손 11
ANICLS_AXT, ///< 도끼 이도류12
ANICLS_MAO, ///< 둔기 한손 13
ANICLS_MAA, ///< 둔기 양손 14
ANICLS_CBO, ///< 석궁 한손 15
<<<<<<< HEAD
ANICLS_CBT, // CBT Double Crossbow
=======
ANICLS_CBT, // AziaMafia Double Crossbow // From ZONE source; dual crossbows
>>>>>>> a34328224e914a577b99c79ec6e8ffbcea554a05
ANICLS_MAX,
};
/// Attach List
enum ATTACH
{
ATTACH_HEAD = 0, ///< 머리 0
ATTACH_HAND_LEFT , ///< 왼손 1
ATTACH_HAND_RIGHT, ///< 오른손 2
ATTACH_HAND_ARM2L, ///< 왼손 팔뚝 3
ATTACH_HAND_ARM2R, ///< 오른손 팔뚝 4
ATTACH_HAND_ARM2L_DECO, ///< 왼손 팔뚝 치장 5
ATTACH_HAND_ARM2R_DECO, ///< 오른손 팔뚝 치장 6
ATTACH_BODY, ///< 몸 7
ATTACH_SADDLE, ///< 허리 8
ATTACH_BACK, ///< 등 9
ATTACH_HAND_LEFT_WEAPON, ///< 왼손 무기 10
ATTACH_HAND_RIGHT_WEAPON, ///< 오른손 무기 11
ATTACH_HAND_LEFT_WEAPON01, ///< 왼손 무기 12
ATTACH_HAND_RIGHT_WEAPON01, ///< 오른손 무기 13
ATTACH_HAND_LEFT_WEAPON02, ///< 왼손 무기 14
ATTACH_HAND_RIGHT_WEAPON02, ///< 오른손 무기 15
ATTACH_MAX ,
};
/// Game Object Type
enum GAMEOBJECT_TYPE
{
OBJ_PLAYER = 0, ///< 일반 사용자
OBJ_NPC, ///< NPC
OBJ_MOB, ///< 몬스터
OBJ_GM, ///< Game Master
};
/// Event Type
enum EVENT_TYPE
{
TYPE_EFFECT = 0, ///< Effect
TYPE_SOUND, ///< Sound
};
enum EVENT_POS
{
POS_MY = 1000, ///< Effect
POS_TARGET, ///< Sound
};
/// 새로운 이펙트 위치 인덱스
enum EFFECT_POS
{
EFFECT_POS_TOP = 0, ///< HEAD에 링크
EFFECT_POS_MIDDLE, ///< BODY1, SPINE1에 링크
EFFECT_POS_DAMAGE, ///< 회전하여, 방향에 맞게 계산 필요
EFFECT_POS_BOTTOM, ///< BOTTOM(땅 바닥), TARGET(바라보는 시선위치) 2개 들어 있음
EFFECT_POS_SADDLE, ///< 안장, 크리처 라이딩 할때, 플레이어가 붙는 위치
EFFECT_POS_W_LEFT,
EFFECT_POS_W_RIGHT,
EFFECT_POS_W_TWOHAND,
EFFECT_POS_MAX,
};
enum EFFECT_POS_WEAPON
{
EFFECT_POS_LEFT_WEAPON = 0,
EFFECT_POS_RIGHT_WEAPON,
EFFECT_POS_TWOHAND_WEAPON,
EFFECT_POS_WEAPON_MAX,
};
enum EFFECT_POS_WEAPON_EP
{
EFFECT_POS_WEAPON_EP_START = 0,
EFFECT_POS_WEAPON_EP_END,
EFFECT_POS_WEAPON_EP_MAX,
};
enum MOTION_SPEED
{
MOTION_SPEED_0, ///< 0 : Lent = Attaque 5 : Veille 5
MOTION_SPEED_1, ///< 1 : Normal = Attaque 6 : Veille 4
MOTION_SPEED_2, ///< 2 : Rapide = Attaque 7 : Veille 3
MOTION_SPEED_3, ///< 3 : Normal = Attaque 10 : Veille 0²
};
enum EVENT_DETAIL_POS
{
DETAIL_HEAD = 0, ///< 0 머리
DETAIL_NECK, ///< 1 목
DETAIL_BODY2, ///< 2 Pelvis 바로 위~
DETAIL_BODY1, ///< 3 가슴
DETAIL_PELVIS, ///< 4 골방
DETAIL_LEFT_HAND, ///< 5 왼손
DETAIL_RIGHT_HAND,///< 6 오른손
DETAIL_BOTTOM, ///< 7 땅바닥
DETAIL_LEFT_FOOT, ///< 8 왼발
DETAIL_RIGHT_FOOT,///< 9 오른 발
DETAIL_LEFT_FIST, ///< 10 왼주먹
DETAIL_RIGHT_FIST, ///< 11 오른주먹
};
enum TEXTURE_GROUP_INDEX_LIST
{
TEXTURE_GROUP_INDEX_0 = 0,
TEXTURE_GROUP_INDEX_1,
TEXTURE_GROUP_INDEX_2,
TEXTURE_GROUP_INDEX_3,
TEXTURE_GROUP_INDEX_4,
TEXTURE_GROUP_INDEX_5,
TEXTURE_GROUP_INDEX_6,
TEXTURE_GROUP_INDEX_7,
TEXTURE_GROUP_INDEX_8,
TEXTURE_GROUP_INDEX_9,
TEXTURE_GROUP_INDEX_MAX,
};
enum TEXTURE_USING_INDEX_LIST
{
TEXTURE_USING_INDEX_0 = 0,
TEXTURE_USING_INDEX_1,
TEXTURE_USING_INDEX_2,
TEXTURE_USING_INDEX_3,
TEXTURE_USING_INDEX_4,
TEXTURE_USING_INDEX_5,
TEXTURE_USING_INDEX_6,
TEXTURE_USING_INDEX_7,
TEXTURE_USING_INDEX_8,
TEXTURE_USING_INDEX_9,
TEXTURE_USING_INDEX_10,
TEXTURE_USING_INDEX_11,
TEXTURE_USING_INDEX_12,
TEXTURE_USING_INDEX_13,
TEXTURE_USING_INDEX_14,
TEXTURE_USING_INDEX_15,
TEXTURE_USING_INDEX_16,
TEXTURE_USING_INDEX_17,
TEXTURE_USING_INDEX_18,
TEXTURE_USING_INDEX_19,
TEXTURE_USING_INDEX_MAX,
};
/// Environment
enum ENV_TYPE
{
ENV_FIELD = 0, ///< 일반 필드
ENV_FIELD_SKY, ///< 하늘 도시
ENV_FIELD_WATER,///< 물
// ENV_FIELD_
};
enum RENDERTARGET_SIZE
{
SIZE_RT_128 = 128,
SIZE_RT_256 = 256,
SIZE_RT_512 = 512,
SIZE_RT_1024 = 1024,
};
enum DEF_SIZE
{
SIZE_1024 = 1024,
SIZE_768 = 768,
};
enum SHADOW_RECT
{
RECT_SHADOW_128 = 128,
RECT_SHADOW_256 = 256,
RECT_SHADOW_512 = 512,
RECT_SHADOW_1024 = 1024,
};
enum WATER_RECT
{
RECT_WATER_128 = 128,
RECT_WATER_256 = 256,
RECT_WATER_512 = 512,
RECT_WATER_1024 = 1024,
};
/// MJ 2004/10/13 모션 조작 명령
enum MOTION_ACTION
{
MOTION_ATTACK = 0, ///< 공격
MOTION_STANDUP, ///< 앉기, 서기
MOTION_PICKUP, ///< 줍기
MOTION_COMBINE, ///< 조합
MOTION_RUN, ///< 걷기, 뛰기
MOTION_BOOTH, ///< 노점
MOTION_TRADE, ///< 트레이드
MOTION_PKMODE, ///< PK 모드
MOTION_MOUNT, ///< 타기, 내리기
MOTION_CAST_CANCEL, // Cancel all actions
MOTION_ASSIST, ///< 어시스트
MOTION_HI,
MOTION_BOW,
MOTION_HAPPY,
MOTION_SORROW,
MOTION_YES,
MOTION_NO,
MOTION_BORING,
MOTION_APOLOGIZE,
MOTION_CHEER,
MOTION_POUT,
MOTION_DANCE,
MOTION_CLAP,
MOTION_ANGRY,
MOTION_PROVOKE,
MOTION_PARTY_CREATE,
MOTION_PARTY_INVITE,
MOTION_PICKUP_CARD, ///< 카드 줍기
MOTION_MAX,
CREATURE_ATTACK, ///< 소환수 공격
CREATURE_BACKDOWN, ///< 퇴각
CREATURE_ALLATTACK, ///< 합동 공격
CREATURE_MAX,
};
/// 2005/ 06/ 23 모션 조작 명령에 해당하는 아이디( MOTION_ACTION으로 대체 가능 할거 같음 )
enum MOTION_ID
{
ID_ATTACK = 0,
ID_STANDUP ,
ID_PICKUP ,
ID_ASSIST ,
ID_PKMODE ,
ID_RUN ,
ID_MOUNT ,
// ID_CAST_CANCEL ,
ID_CREATURE_ATTACK ,
ID_CREATURE_ALLATTACK ,
ID_CREATURE_BACKDOWN ,
ID_TRADE ,
ID_COMBINE ,
ID_BOOTH ,
ID_HI ,
ID_BOW ,
ID_HAPPY ,
ID_SORROW ,
ID_YES ,
ID_NO ,
ID_BORING ,
ID_APOLOGIZE,
ID_CHEER ,
ID_POUT ,
ID_DANCE ,
ID_CLAP ,
ID_ANGRY ,
ID_PROVOKE ,
ID_PARTY_CREATE,
ID_PARTY_INVITE,
//편의성 용
ID_PICKUP_CARD, ///< 카드만 먹음
// AziaMafia ADD EMOTE
ID_TP,
ID_LOOT,
ID_TAME,
ID_BUFF,
ID_BUFFGUILD,
ID_TPTAMINGZONE,
ID_ATRADE,
ID_MAX,
};
enum CREATURE_POSITION
{
CREATURE_MOVE_LEFT = 0, ///< 왼쪽으로 이동
CREATURE_MOVE_RIGHT, ///< 오른쪽으로 이동
};
enum RENDER_FLAG
{
RENDER_SKY = 0, ///< 00 하늘 상자
RENDER_CLOUD, ///< 01 구름
RENDER_TERRAIN, ///< 02 땅
RENDER_TERRAIN_SHADOW, ///< 03 그림자
RENDER_PRIMITIVE, ///< 04 빌딩
RENDER_PRIMITIVE_ALPHA, ///< 05 빌딩 알파
RENDER_SPEED_TREE, ///< 06 Speed Tree Branch
RENDER_BILLBOARD, ///< 07 Bill Board
RENDER_ADDITIVEBILLBOARD, ///< 08 애디티브 Bill Board
RENDER_LENSFLARE, ///< 09 Lens Flare
RENDER_SPRITE, ///< 10 Sprite_AdditiveSprite
RENDER_WPRLIST, ///< 11 Wire
RENDER_TILE, ///< 12 Tile-Loading Screen
//RENDER_PATHEFFECT, //13 PathEffect
RENDER_QUAD,
RENDER_LINE,
RENDER_POLYLINE,
RENDER_SPEED_GRASS,
};
enum LIMIT_PK
{
LIMIT_MOB = (1 << 2), ///< 몬스터
LIMIT_PLAYER = (1 << 3), ///< 플레이어
LIMIT_SUMMON = (1 << 4), ///< 소환수
};
/// 각종 상태
enum CONTENT_STATE
{
CS_NONE, ///< 일반 상태
CS_TRADE, ///< 트레이드 상태
CS_STORAGE, ///< 창고 상태
};
/// Prop Category
enum SPROP_CATEGORY
{
SCATEGORY_PROP = 0,
SCATEGORY_BUILDING,
SCATEGORY_NPC,
SCATEGORY_MAX,
};
enum WORLD_TIME_INFO
{
WORLD_TIME_DAWN = 0,
WORLD_TIME_DAYLIGHT = 1,
WORLD_TIME_EVENING = 2,
WORLD_TIME_NIGHT = 3,
};
enum PLAYER_POSITION_INFO
{
PLAYER_IN_WORLD = 0,
PLAYER_IN_DUNGEON,
PLAYER_IN_DUNGEON_SIEGE,
PLAYER_IN_DUNGEON_RAID,
/// 2012.04.30 아레나가 추가가 되야 되서 기존걸 LOCATION_TYPE과 같은 이름인 MATCH로 바꿈 - prodongi
PLAYER_IN_MATCH,
PLAYER_IN_TOWN,
PLAYER_IN_TOWN_DUNGEON,
PLAYER_IN_DEATHMATCH,
PLAYER_IN_HUNTA,
PLAYER_IN_INSTANCE_DUNGEON_AUTO, // 2011.07.19 - servantes
PLAYER_IN_ARENA, /// 2012.04.30 - prodongi
PLAYER_IN_RAMADAN_PRAY_ROOM,
};
enum ADDON_WINDOW_POSITION
{
MOUSE_POSITION = 0,
CENTER_H_POSITION,
CENTER_V_POSITION,
LEFT_IN_POSITION,
LEFT_OUT_POSITION,
RIGHT_IN_POSITION,
RIGHT_OUT_POSITION,
TOP_IN_POSITION,
TOP_OUT_POSITION,
BOTTOM_IN_POSITION,
BOTTOM_OUT_POSITION,
USER_INPUT_POSTION,
};
const static float GAME_TERRAIN_DISTANCE_LV1 = 0.212f;
const static float GAME_TERRAIN_DISTANCE_LV2 = 0.3f;
const static float GAME_TERRAIN_DISTANCE_LV3 = 0.45f;
const static float GAME_TERRAIN_DISTANCE_LV4 = 0.7f;
const static float GAME_TERRAIN_DISTANCE_LV5 = 1.0f;
const static float GAME_PROP_DISTANCE_LV1 = 0.3f;
const static float GAME_PROP_DISTANCE_LV2 = 0.4f;
const static float GAME_PROP_DISTANCE_LV3 = 0.5f;
const static float GAME_PROP_DISTANCE_LV4 = 0.7f;
const static float GAME_PROP_DISTANCE_LV5 = 1.0f;
}
using namespace GAME_DEFINE;
// 2010.06.15 정의가 여러군데 있어서 여기로 통합함 - prodongi
#define FORCE_CHIP_SKILL_ID 6008
#define SOUL_CHIP_SKILL_ID 6009
#define RUNA_CHIP_SKILL_ID 6010
#define IS_AUTO_ATTACK_CHIP_SKILL_ID(id) ((id == FORCE_CHIP_SKILL_ID) || (id == SOUL_CHIP_SKILL_ID) || (id == RUNA_CHIP_SKILL_ID))
#define ISNT_AUTO_ATTACK_CHIP_SKILL_ID(id) ((id != FORCE_CHIP_SKILL_ID) && (id != SOUL_CHIP_SKILL_ID) && (id != RUNA_CHIP_SKILL_ID))
//Avatar 사용
const float CHECK_RANGE = 100.f;
const float RSHADOW_SIZE = 3.f;
const int UPDATE_TIME = 4000;
const int ATTACK_TIME = 500;
const int TRACE_TIME = 600;
const int DEF_SPEED = 17;
const int ATTACK_WAIT_TIME = 30000; ///< 전투 대기 모드 유지 시간
const float VIEW_NAME_PLATE_CULL_SIZE = 480.f; ///< 이름이 보이는 거리
const float DEFAULT_MOVE_SPEED = 100.0f / 7.0f; ///< 서버에 이리 돼있음
const float DEFAULT_ANI_PLAY_RATE = 4.8f;
const float HIDING_VISIBILITY_RATE = 0.2f;
const float HIDING_VISIBILITY_RATE_PARTY_RAID = 0.3f;
//World 사용
const float NPC_CLICK_LEN = 100.f;
const int RES_EVENT_TIME = 1500;
//종족 및 성별 카메라 높이
const float CAMERA_Z_OFFSET_DEVA_M = 15.f;
const float CAMERA_Z_OFFSET_DEVA_F = 14.f;
const float CAMERA_Z_OFFSET_GAIA_M = 15.f;
const float CAMERA_Z_OFFSET_GAIA_F = 14.f;
const float CAMERA_Z_OFFSET_ASURA_M = 15.f;
const float CAMERA_Z_OFFSET_ASURA_F = 14.f;
const float CAMERA_Z_OFFSET = 10.f;
#ifdef _RAC
const float GAME_EFFECT_DISTANCE = 50.0f*GameRule::DEFAULT_UNIT_SIZE; ///< 50미터로 제한
#endif
//게임만 사용
#ifdef _RAC
//Work 사용
const FLOAT ITEM_TAKE_RANGE = 5.f * GameRule::DEFAULT_UNIT_SIZE;
#endif
const float cam_pos[6][5][3] =
{
{ {-4,-6,16 }, {-1,-6,16 }, { 1,-5,17 }, { 3,-3,16 }, {-5,-3,17 }, }, ///< 데바 남 0
{ {-1,-5,15 }, { 0,-4,14 }, { 1,-4,14 }, { 2,-3,15 }, {-5,-2,15 }, }, ///< 데바 여 1
{ { 2,-7,14 }, { 1,-6,16 }, { 2,-5,16 }, { 5,-3,16 }, {-3,-4,16 }, }, ///< 아수라 남 2
{ { 0,-5,14 }, {-1,-4,14 }, { 1,-3,14 }, { 2,-3,14 }, {-2,-3,14 }, }, ///< 아수라 여 3
{ {-1,-6,15 }, { 1,-5,15 }, {-2,-5,15 }, { 2,-3,16 }, {-3,-3,17 }, }, ///< 가이아 남 4
{ { 0,-6,13 }, { 0,-5,14 }, { 0,-4,14 }, { 4,-2,14 }, {-2,-3,14 }, }, ///< 가이아 여 5
};
//해상도
const int RES_1024 = 1024;
const int RES_1280 = 1280;
const int RES_768 = 768;
bool static IsValidSex( int nSex )
{
switch( nSex )
{
case SEX_FEMALE: return true;
case SEX_MALE: return true;
}
return false;
}
bool static IsValidRace( int nRace )
{
switch( nRace )
{
case GCLAN_GAIA: return true;
case GCLAN_DEVA: return true;
case GCLAN_ASURA: return true;
case GCLAN_ALFEN: return true;
case GCLAN_GIAN: return true;
case GCLAN_AMAZON: return true;
}
return false;
}