#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; }