#pragma once #pragma pack( 1 ) // Difference between ItemCode and ItemUID: // 1) The ItemCode of a Bastard Sword is 1, and the ItemCode of a Leather Armor is 2 // 2) If there are two Bastard Swords, each one will have a different ItemUID // Since the server and source are not shared, you must check whenever the Item DB is changed. #include #include #define JOKER_CARD_ID 540070 // Item content information struct ItemBase { typedef int ItemCode; typedef XFlag BaseFlag; enum { MAX_COOLTIME_GROUP = 20, MAX_OPTION_NUMBER = 4, // Maximum number of options MAX_SOCKET_NUMBER = 4, // Maximum number of soulstone sockets MAX_ITEM_NAME_LENGTH = 32, // Maximum item name length MAX_ITEM_WEAR_LOGIN = 28, // When receiving character information (character info at login), the server sends 24 MAX_ITEM_SPARE_WEAR = 28, MAX_ITEM_WEAR = 32, // From ZONE source; dual crossbows MAX_AWAKENING_OPTION = 5, // Maximum number of awakening options MAX_RANDOM_OPTION_NUMBER = 10, // Maximum number of random options MAX_ENHANCE_NUMBER = 25, // Maximum enhancement }; enum { CODE_BASE_BOOSTER = 603000, CODE_BASE_BACKBOARD = 603100, }; ItemCode nCode; // Item code (ID) int nNameId; // Name ID int nType; // Item Type enum ITEM_TYPE { TYPE_ETC = 0, ///< 일반 TYPE_ARMOR = 1, ///< 장비 TYPE_CARD = 2, ///< 카드 TYPE_USEABLE = 3, ///< 소모품 TYPE_CUBE = 4, ///< 큐브 TYPE_CHARM = 5, ///< 부적 TYPE_USE = 6, ///< 사용형 - 소모되지 않고 쿨타임만 TYPE_SOULSTONE = 7, ///< 소울스톤 TYPE_CREATURE = 8, ///< 크리처 servantes 2010.11.24 TYPE_COLLECTION = 9 }; int nGroup; ///< 그룹 ID enum ITEM_GROUP { GROUP_ETC = 0, GROUP_WEAPON = 1, GROUP_ARMOR = 2, GROUP_SHIELD = 3, GROUP_HELM = 4, GROUP_GLOVE = 5, GROUP_BOOTS = 6, GROUP_BELT = 7, GROUP_MANTLE = 8, GROUP_ACCESSORY = 9, GROUP_SKILLCARD = 10, GROUP_ITEMCARD = 11, GROUP_SPELLCARD = 12, GROUP_SUMMONCARD = 13, // [3.1.3] Auction House server integration GROUP_FACE = 15, ///< 가면 GROUP_UNDERWEAR = 16, ///< 속옷 GROUP_BAG = 17, ///< 가방 GROUP_PETCAGE = 18, // Cage for lootpet GROUP_STRIKE_CUBE = 21, GROUP_DEFENCE_CUBE = 22, GROUP_SKILL_CUBE = 23, GROUP_CASH_ITEM = 80, GROUP_SOULSTONE = 93, GROUP_BULLET = 98, GROUP_USEABLE = 99, GROUP_DECO = 110, GROUP_RIDING = 120, GROUP_ARTIFACT = 130, // 2010.08.18 아이템 엑셀 파일에는 있는 여기에 없어서 추가함 - prodongi GROUP_BOSSCARD = 140, // 2010.08.18 - prodongi GROUP_SKIN1 = 150, GROUP_SKIN2 = 151, }; enum ItemClass { CLASS_ETC = 0, ///< 미분류 // 무기 <<<<<<< HEAD ======= //CLASS_DOUBLE_CROSSBOW = 94, // AziaMafia Double Crossbow >>>>>>> a34328224e914a577b99c79ec6e8ffbcea554a05 CLASS_DOUBLE_AXE = 95, ///< 쌍도끼 CLASS_DOUBLE_SWORD = 96, CLASS_DOUBLE_DAGGER = 98, CLASS_EVERY_WEAPON = 99, CLASS_ETCWEAPON = 100, ///< 기타무기 CLASS_ONEHAND_SWORD = 101, ///< 한손검 CLASS_TWOHAND_SWORD = 102, ///< 한손검 CLASS_DAGGER = 103, ///< 단검 CLASS_TWOHAND_SPEAR = 104, ///< 창 CLASS_TWOHAND_AXE = 105, ///< 도끼 CLASS_ONEHAND_MACE = 106, ///< 한손메이스 CLASS_TWOHAND_MACE = 107, ///< 양손메이스 CLASS_HEAVY_BOW = 108, ///< 헤비 보우 <- 이거 숏보우/롱보우가 맞는것 같은데.. -.-;; CLASS_LIGHT_BOW = 109, ///< 라이트 보우 CLASS_CROSSBOW = 110, ///< 석궁 CLASS_ONEHAND_STAFF = 111, ///< 한손 지팡이 CLASS_TWOHAND_STAFF = 112, ///< 양손 지팡이 CLASS_ONEHAND_AXE = 113, ///< 한손 도끼 <<<<<<< HEAD CLASS_DOUBLE_CROSSBOW = 114, ///< Double Crossbow ======= CLASS_DOUBLE_CROSSBOW = 114, // From ZONE source; dual crossbows >>>>>>> a34328224e914a577b99c79ec6e8ffbcea554a05 //CLASS_DOUBLE_WEAPON = 199, // 방어구 CLASS_ARMOR = 200, ///< 공용의상 CLASS_FIGHTER_ARMOR = 201, ///< 전사용 CLASS_HUNTER_ARMOR = 202, ///< 헌터용 CLASS_MAGICIAN_ARMOR = 203, ///< 마법사용 CLASS_SUMMONER_ARMOR = 204, ///< 소환사용 // CLASS_SHIELD = 210, ///< 공용방패 CLASS_HELM = 220, ///< 공용투구 CLASS_BOOTS = 230, ///< 공용부츠 /// 2011.01.19 - prodongi CLASS_FIGHTER_BOOTS = 231, ///< 전사부츠 CLASS_HUNTER_BOOTS = 232, ///< 헌터부츠 CLASS_MAGICIAN_BOOTS = 233, ///< 법사부츠 CLASS_SUMMONER_BOOTS = 234, ///< 소환사부츠 CLASS_GLOVE = 240, ///< 공용장갑 /// 2011.01.19 - prodongi CLASS_FIGHTER_GLOVE = 241, ///< 전사장갑 CLASS_HUNTER_GLOVE = 242, ///< 헌터장갑 CLASS_MAGICIAN_GLOVE = 243, ///< 법사장갑 CLASS_SUMMONER_GLOVE = 244, ///< 소환사장갑 CLASS_BELT = 250, ///< 공용벨트 /// 2011.01.19 - prodongi CLASS_FIGHTER_BELT = 251, ///< 전사벨트 CLASS_HUNTER_BELT = 252, ///< 헌터벨트 CLASS_MAGICIAN_BELT = 253, ///< 법사벨트 CLASS_SUMMONER_BELT = 254, ///< 소환사벨트 CLASS_MANTLE = 260, ///< 공용망토 /// 2011.01.19 - prodongi CLASS_FIGHTER_MANTLE = 261, ///< 전사망토 CLASS_HUNTER_MANTLE = 262, ///< 헌터망토 CLASS_MAGICIAN_MANTLE = 263, ///< 법사망토 CLASS_SUMMONER_MANTLE = 264, ///< 소환사망토 CLASS_QUIVER = 265, // 화살통 CLASS_BOOSTER = 266, // 화살통 // 악세사리 CLASS_ETC_ACCESSORY = 300, ///< 기타악세사리 CLASS_RING = 301, ///< 링 CLASS_EARRING = 302, ///< 귀걸이 CLASS_ARMULET = 303, ///< 목걸이 CLASS_EYEGLASS = 304, ///< 안경 CLASS_MASK = 305, ///< 수염 CLASS_CUBE = 306, ///< 큐브 // 포스칩, 소울칩, 루나칩 CLASS_BOOST_CHIP = 400, ///< 칩 CLASS_SOULSTONE = 401, ///< 소울스톤 CLASS_CRACKER = 402, ///< 쑥쑥크래커 CLASS_FARM_TICKET = 403, ///< 농장이용권 2011.03.15 servantes CLASS_USE_CASH_ITEM = 502, ///< 사용형 캐쉬템 // Deco CLASS_DECO_WEAPON = 600, // deprecated! CLASS_DECO_SHIELD = 601, CLASS_DECO_ARMOR = 602, CLASS_DECO_HELM = 603, CLASS_DECO_GLOVE = 604, CLASS_DECO_BOOTS = 605, CLASS_DECO_MALTLE = 606, CLASS_DECO_SHOULDER = 607, CLASS_DECO_HAIR = 608, CLASS_DECO_ONEHAND_SWORD = 609, CLASS_DECO_TWOHAND_SWORD = 610, CLASS_DECO_DAGGER = 611, CLASS_DECO_TWOHAND_SPEAR = 612, CLASS_DECO_TWOHAND_AXE = 613, CLASS_DECO_ONEHAND_MACE = 614, ///< 한손메이스 CLASS_DECO_TWOHAND_MACE = 615, ///< 양손메이스 CLASS_DECO_HEAVY_BOW = 616, ///< 헤비 보우 <- 이거 숏보우/롱보우가 맞는것 같은데.. -.-;; CLASS_DECO_LIGHT_BOW = 617, ///< 라이트 보우 CLASS_DECO_CROSSBOW = 618, ///< 석궁 CLASS_DECO_ONEHAND_STAFF = 619, ///< 한손 지팡이 CLASS_DECO_TWOHAND_STAFF = 620, ///< 양손 지팡이 CLASS_DECO_ONEHAND_AXE = 621, ///< 한손 도끼 }; ItemClass nClass; ///< 계열 int set_id; ///< 소속 세트 아이디 // #2.1.2.6.1 int set_part_flag; // int nRank; ///< 등급 int level; ///< INT NOT NULL, -- 레벨 9 int enhance; ///< INT NOT NULL, -- 강화 10 int socket; ///< INT NOT NULL, -- 소켓 11 int status_flag; ///< INT NOT NULL, -- 아이템 생성시 적용 flag 12 // Usage restriction level int nMinLevel; // Above level int nMaxLevel; // Below level // Target level restriction // int nTargetMinLevel; ///< Lv 이상 // int nTargetMaxLevel; ///< Lv 이하 int nRange; ///< 사정거리 float fWeight; ///< 무게 DECIMAL( 10, 2 ) NOT NULL int nPrice; ///< 기준가격 int nHuntaholicPoint; ///< INT NOT NULL, -- 상점 판매가 - 헌터홀릭 포인트 // #2.1.2.11.1 int nEthereal_durability; // 에테리얼 내구도. kappamind, 2010.01.13 int nEndurance; ///< 내구성 enum ItemWearType { WEAR_CANTWEAR = -1, ///< 장비불가 WEAR_NONE = -1, ///< 장비 하지 않음 WEAR_STORAGE = -2, ///< 창고 저장품 WEAR_WEAPON = 0, ///< 오른손전용 (방패라던가) WEAR_SHIELD = 1, ///< 왼손전용 WEAR_ARMOR = 2, ///< 갑옷 WEAR_HELM = 3, ///< 투구 WEAR_GLOVE = 4, ///< 장갑 WEAR_BOOTS = 5, ///< 부츠 WEAR_BELT = 6, ///< 벨트 WEAR_MANTLE = 7, ///< 망토 WEAR_ARMULET = 8, ///< 목걸이 WEAR_RING = 9, ///< 반지 WEAR_SECOND_RING = 10, // Second ring WEAR_EAR = 11, ///< 귀걸이 WEAR_FACE = 12, ///< 얼굴 WEAR_BACKPACK = 13, ///< 치장용헤어 WEAR_DECO_WEAPON = 14, ///< 치장용무기 WEAR_DECO_SHIELD = 15, ///< 치장용방패 WEAR_DECO_ARMOR = 16, ///< 치장용의상 WEAR_DECO_HELM = 17, ///< 치장용투구 WEAR_DECO_GLOVE = 18, ///< 치장용장갑 WEAR_DECO_BOOTS = 19, ///< 치장용부츠 WEAR_DECO_MANTLE = 20, ///< 치장용망토 WEAR_DECO_SHOULDER = 21, ///< 치장용어깨 WEAR_RIDE_ITEM = 22, ///< 라이딩슬롯 WEAR_BAG_SLOT = 23, ///< 가방 장착 슬롯 인덱스 추가 WEAR_BOOSTER = 24, // 부스터 WEAR_BACKBOARD = 25, // 부스터 WEAR_SECOND_EAR = 26, WEAR_CHAOS_STONE = 27, //--- SWAP --// WEAR_SWAP_WEAPON = 28, // 무기. WEAR_SWAP_SHIELD = 29, // 방패. WEAR_SWAP_DECO_WEAPON = 30, // 치장용무기. WEAR_SWAP_DECO_SHIELD = 31, // 치장용방패. //-----------// WEAR_BELT_SLOT = 198, // 2010.08.20 - prodongi WEAR_DECO_TWOHAND = 199, ///< 치장용무기+방패 WEAR_EAR_EYE = 90, ///< 귀+눈 WEAR_EAR_MOUTH = 91, ///< 귀+입 WEAR_EYE_MOUTH = 92, // Eyes + Mouth WEAR_EYE_EAR_MOUTH = 93, // Eyes + Ears + Mouth WEAR_TWOFINGER_RING = 94, ///< 반지 두칸 소모 WEAR_TWOHAND = 99, ///< 투핸드 WEAR_SKILL = 100, ///< 스킬 WEAR_SUMMON_ONLY = 200, // 크리처 전용 장비 WEAR_RIGHTHAND = WEAR_WEAPON, // Right hand only WEAR_LEFTHAND = WEAR_SHIELD, // Left hand only (e.g., shield) WEAR_BULLET = WEAR_SHIELD, // Ammo (Arrows) // Belt slots (Not existing on the server) WEAR_BELT00 = 1000, WEAR_BELT01 = 1001, WEAR_BELT02 = 1002, WEAR_BELT03 = 1003, WEAR_BELT04 = 1004, WEAR_BELT05 = 1005, WEAR_BELT06 = 1006, WEAR_BELT07 = 1007, }; ItemWearType WearType; enum LIMIT_FLAG { LIMIT_DEVA = (1 << 2), ///< 데바 LIMIT_ASURA = (1 << 3), ///< 아수라 LIMIT_GAIA = (1 << 4), ///< 가이아 LIMIT_FIGHTER = (1 << 10), ///< 전사 LIMIT_HUNTER = (1 << 11), ///< 헌터 LIMIT_MAGICIAN = (1 << 12), ///< 마법사 LIMIT_SUMMONER = (1 << 13), ///< 소환사 }; int nLimit; ///< 사용제한 BaseFlag Flag; enum ITEM_FLAG { FLAG_WEARABLE = 0, // 표준장비 FLAG_CANT_STORAGE = 1, // 창고 집어넣을 수 있는지 없는지 여부 FLAG_ENHANCE = 2, // 강화여부 FLAG_USE = 3, // 소모성 사용 가능 여부 FLAG_CARD = 4, // 카드화 가능여부 FLAG_SOCKET = 5, // 소켓삽입가능여부 FLAG_JOIN = 6, // 중첩 가능 여부 FLAG_TARGET_USE = 7, // 타겟 지정 사용 여부 FLAG_WARP = 8, // 사용시 워프하는 아이템임 FLAG_CANT_TRADE = 9, // 트레이드가능여부 (1이면 불가인듯) FLAG_CANT_SELL = 10, // 상점 매각 가능 여부 FLAG_QUEST = 11, // 퀘스트 아이템 여부 FLAG_CANT_USE_OVERWEIGHT = 12, // 무게 초과시 사용 불가 여부 FLAG_CASHITEM = 13, // 캐쉬 아이템 FLAG_RIDING = 14, // CHAR NOT NULL, -- 라이딩시 가능 37 FLAG_CANT_DROP = 15, // 드랍 불가 : 0가능, 1불가능 FLAG_MOVE = 16, // 이동중 사용 가능, 불가능 FLAG_QUEST_DISTRIBUTE = 17, // 퀘스트 분배 아이템 FLAG_SIT = 18, // 앉은 상태 사용 가능, 불가능 FLAG_RAID = 19, // 레이드/시즈 시 사용불가 FLAG_SECROUTE = 20, // 시크루트에서 사용 불가 필드 추가 FLAG_EVENTMAP = 21, // 이벤트 지역에서 사용 불가 FLAG_HUNTAHOLIC = 22, // 헌터홀릭 로비/던전에서 사용 불가 // #2.2.4.1 FLAG_HUNTAHOLIC_USEABLE_ONLY = 23, // 헌터홀릭 로비/던전에서만 사용 // #2.2.4.1 FLAG_DEATHMATCH = 24, // 데스매치 사용 불가 ( 1이면 사용 불가 ) FLAG_DEATHMATCH_USEABLE_ONLY = 25, // 데스매치에서만 사용 ( 1이면 데스매치에서만 사용 ) FLAG_CANT_DESTRUCTION = 26, // 아이템 파괴 불가. FLAG_USABLE_ON_ONLY_SIT = 27, // 앉아서만 사용 가능 FLAG_CANT_USE_IN_SECRET_DUNGEON = 28, // 숨겨진 던전 내에서 사용 불가(0:사용 가능, 1: 사용 불가) FLAG_CANT_USE_IN_BATTLE_ARENA = 29, // 배틀 아레나 내에서 사용 불가(0:사용 가능, 1: 사용 불가) FLAG_CANT_DECOMPOSE = 30, // 분해 불가능 여부 (0:분해 가능, 1:분해 불가) FLAG_RANDOMIZABLE = 31, // 랜덤화 가능 ( 0:불가, 1: 가능 ) }; // char distribute_type; ///< CHAR NOT NULL, -- 분배 타입 45 // int item_use_flag; // 09.08.27, kappamind bool CheckFlag( ITEM_FLAG flag ) const { return Flag.IsOn( flag ); } int nMaterial; int nSummonId; int nThrowRange; short nBaseType[MAX_OPTION_NUMBER]; float dBaseVar1[MAX_OPTION_NUMBER]; float dBaseVar2[MAX_OPTION_NUMBER]; short nOptType[MAX_OPTION_NUMBER]; float dOptVar1[MAX_OPTION_NUMBER]; float dOptVar2[MAX_OPTION_NUMBER]; int nEffectId; ///< 아이템 특수 성능 int nEnhanceID; int nSkillID; int nStateCode; int nStateLevel; int nStateTime; int nCoolTime; int available_time; short nCoolTimeGroup; enum { PERMANENT = 0, DECREASE_ON_GAME = 1, DECREASE_ALWAYS = 2 }; short decrease_type; enum { JOB_DEPTH_0 = (1 << 0), JOB_DEPTH_1 = (1 << 1), JOB_DEPTH_2 = (1 << 2), JOB_DEPTH_MASTER = (1 << 3), JOB_DEPTH_ALL = JOB_DEPTH_0 | JOB_DEPTH_1 | JOB_DEPTH_2 | JOB_DEPTH_MASTER, }; short job_depth; /// 2011.03.30 직업 전직 여부 - prodongi short nGrade; // 아이템 등급. kappamind, 2010.01.13 /* 이하 클라이언트 정보 char szModel[61][6]; char szDropModel[61]; int nIconId; */ // 2010.05.19 hide equip info - prodongi enum { HIDE_EQUIP_WEAPON = ( 1 << 0 ), ///< 오른손전용 (방패라던가) HIDE_EQUIP_SHIELD = ( 1 << 1 ), ///< 왼손전용 HIDE_EQUIP_ARMOR = ( 1 << 2 ), ///< 갑옷 HIDE_EQUIP_HELM = ( 1 << 3 ), ///< 투구 HIDE_EQUIP_GLOVE = ( 1 << 4 ), ///< 장갑 HIDE_EQUIP_BOOTS = ( 1 << 5 ), ///< 부츠 HIDE_EQUIP_BELT = ( 1 << 6 ), ///< 벨트 HIDE_EQUIP_MANTLE = ( 1 << 7 ), ///< 망토 HIDE_EQUIP_ARMULET = ( 1 << 8 ), ///< 목걸이 HIDE_EQUIP_RING = ( 1 << 9 ), ///< 반지 HIDE_EQUIP_EAR = ( 1 << 10), ///< 귀걸이 HIDE_EQUIP_FACE = ( 1 << 11), ///< 얼굴 HIDE_EQUIP_SHOULDER = ( 1 << 13), // Wings probably // 꾸미기 // DECO_HIDE_EQUIP_WEAPON = ( 1 << 14 ), ///< Right-hand only (e.g. shield) DECO_HIDE_EQUIP_SHIELD = ( 1 << 15 ), ///< 왼손전용 DECO_HIDE_EQUIP_ARMOR = ( 1 << 16 ), ///< 갑옷 DECO_HIDE_EQUIP_HELM = ( 1 << 17 ), ///< 투구 DECO_HIDE_EQUIP_GLOVE = ( 1 << 18 ), ///< 장갑 DECO_HIDE_EQUIP_BOOTS = ( 1 << 19 ), ///< 부츠 DECO_HIDE_EQUIP_CLOAK = ( 1 << 20 ), ///< 망토 DECO_HIDE_EQUIP_SHOULDER= ( 1 << 21 ), ///< 어깨 }; ItemBase() : nCode( -1 ) , nNameId( 690000075 /*존재하지 않는 아이템*/ ) , nType( -1 ) , nGroup( -1 ) , nClass( ItemBase::ItemClass( -1 ) ) , set_id( NULL ) , set_part_flag( NULL ) , nGrade( 0 ) , nRank( 0 ) , level( 0 ) , enhance( 0 ) , socket( 0 ) , status_flag( 0 ) , job_depth( -1 ) , nMinLevel( 0 ) , nMaxLevel( 0 ) , nRange( 0 ) , fWeight( 0.0f ) , nPrice( 0 ) , nHuntaholicPoint( 0 ) , nEthereal_durability( 0 ) , nEndurance( 0 ) , WearType( ItemBase::WEAR_CANTWEAR ) , nMaterial( 0 ) , nSummonId( 0 ) , nEffectId( 0 ) , nEnhanceID( 0 ) , nSkillID( 0 ) , nStateCode( 0 ) , nStateLevel( 0 ) , nStateTime( 0 ) , nCoolTime( 0 ) , nCoolTimeGroup( 0 ) , available_time( 0 ) , decrease_type( -1 ) { ZeroMemory( nBaseType, sizeof( nBaseType ) ); ZeroMemory( dBaseVar1, sizeof( dBaseVar1 ) ); ZeroMemory( dBaseVar2, sizeof( dBaseVar2 ) ); ZeroMemory( nOptType, sizeof( nOptType ) ); ZeroMemory( dOptVar1, sizeof( dOptVar1 ) ); ZeroMemory( dOptVar2, sizeof( dOptVar2 ) ); } }; /// 아이템 강화 정보 struct ItemEnhanceEffectBase { int sid; int sub_id; int effect_id; float value[ItemBase::MAX_ENHANCE_NUMBER]; }; // 꾸미기아이템용 비트마스크. bintitle. 08.12. #define DECO_EQUIPMENT_MASK ( ItemBase::DECO_HIDE_EQUIP_WEAPON | \ ItemBase::DECO_HIDE_EQUIP_SHIELD| \ ItemBase::DECO_HIDE_EQUIP_ARMOR |\ ItemBase::DECO_HIDE_EQUIP_HELM |\ ItemBase::DECO_HIDE_EQUIP_GLOVE |\ ItemBase::DECO_HIDE_EQUIP_BOOTS |\ ItemBase::DECO_HIDE_EQUIP_CLOAK |\ ItemBase::DECO_HIDE_EQUIP_SHOULDER ) #pragma pack()