- Mesaj
- 93
- Çözümler
- 7
- Beğeni
- 54
- Puan
- 684
- Ticaret Puanı
- 0
Merhabalar, biliyorsunuz ki No-TXT db kullananlar için yaptıkları işlemleri pack tarafına da aktarabilmek için converter gereçleri var ( python script ) bende bu araçlardan birini kullanıyorum öncelikle belirtmeliyim ki mob_proto çevirici sorunsuz çalışıyor hiçbir hata ve sıkıntı yok çıkarttığı dosyalarda sorunsuz fakat 4 gündür uğraşmama rağmen item_proto kısmını bir türlü ayarlayamadım sanırım ayar kısmında bir hata yapıyorum, yardımcı olursanız çok memnun olurum.
PROBLEM ;
TypeError: cannot concatenate 'str' and 'long' objects
Convert script ;
ProtoReader.cpp Dosyam ;
DB item_proto dosyamın formatını incelemek isterseniz ;
PROBLEM ;
TypeError: cannot concatenate 'str' and 'long' objects
Convert script ;
Python:
def item_proto():
item_type = {
0: "ITEM_NONE",
1: "ITEM_WEAPON",
2: "ITEM_ARMOR",
3: "ITEM_USE",
4: "ITEM_AUTOUSE",
5: "ITEM_MATERIAL",
6: "ITEM_SPECIAL",
7: "ITEM_TOOL",
8: "ITEM_LOTTERY",
9: "ITEM_ELK",
10: "ITEM_METIN",
11: "ITEM_CONTAINER",
12: "ITEM_FISH",
13: "ITEM_ROD",
14: "ITEM_RESOURCE",
15: "ITEM_CAMPFIRE",
16: "ITEM_UNIQUE",
17: "ITEM_SKILLBOOK",
18: "ITEM_QUEST",
19: "ITEM_POLYMORPH",
20: "ITEM_TREASURE_BOX",
21: "ITEM_TREASURE_KEY",
22: "ITEM_SKILLFORGET",
23: "ITEM_GIFTBOX",
24: "ITEM_PICK",
25: "ITEM_HAIR",
26: "ITEM_TOTEM",
27: "ITEM_BLEND",
28: "ITEM_COSTUME",
29: "ITEM_DS",
30: "ITEM_SPECIAL_DS",
31: "ITEM_EXTRACT",
32: "ITEM_SECONDARY_COIN",
33: "ITEM_RING",
34: "ITEM_BELT"
}
item_subtype = {
1: {
0: "WEAPON_SWORD",
1: "WEAPON_DAGGER",
2: "WEAPON_BOW",
3: "WEAPON_TWO_HANDED",
4: "WEAPON_BELL",
5: "WEAPON_FAN",
6: "WEAPON_ARROW",
7: "WEAPON_MOUNT_SPEAR",
8: "WEAPON_NUM_TYPES",
},
2: {
0: "ARMOR_BODY",
1: "ARMOR_HEAD",
2: "ARMOR_SHIELD",
3: "ARMOR_WRIST",
4: "ARMOR_FOOTS",
5: "ARMOR_NECK",
6: "ARMOR_EAR",
7: "ARMOR_NUM_TYPES",
},
3 : {
0: "USE_POTION",
1: "USE_TALISMAN",
2: "USE_TUNING",
3: "USE_MOVE",
4: "USE_TREASURE_BOX",
5: "USE_MONEYBAG",
6: "USE_BAIT",
7: "USE_ABILITY_UP",
8: "USE_AFFECT",
9: "USE_CREATE_STONE",
10: "USE_SPECIAL",
11: "USE_POTION_NODELAY",
12: "USE_CLEAR",
13: "USE_INVISIBILITY",
14: "USE_DETACHMENT",
15: "USE_BUCKET",
16: "USE_POTION_CONTINUE",
17: "USE_CLEAN_SOCKET",
18: "USE_CHANGE_ATTRIBUTE",
19: "USE_ADD_ATTRIBUTE",
20: "USE_ADD_ACCESSORY_SOCKET",
21: "USE_PUT_INTO_ACCESSORY_SOCKET",
22: "USE_ADD_ATTRIBUTE2",
23: "USE_RECIPE",
24: "USE_CHANGE_ATTRIBUTE2",
25: "USE_BIND",
26: "USE_UNBIND",
27: "USE_TIME_CHARGE_PER",
28: "USE_TIME_CHARGE_FIX",
29: "USE_PUT_INTO_BELT_SOCKET",
30: "USE_PUT_INTO_RING_SOCKET",
},
4: {
0: "AUTOUSE_POTION",
1: "AUTOUSE_ABILITY_UP",
2: "AUTOUSE_BOMB",
3: "AUTOUSE_GOLD",
4: "AUTOUSE_MONEYBAG",
5: "AUTOUSE_TREASURE_BOX",
},
5: {
0: "MATERIAL_LEATHER",
1: "MATERIAL_BLOOD",
2: "MATERIAL_ROOT",
3: "MATERIAL_NEEDLE",
4: "MATERIAL_JEWEL",
5: "MATERIAL_DS_REFINE_NORMAL",
6: "MATERIAL_DS_REFINE_BLESSED",
7: "MATERIAL_DS_REFINE_HOLLY",
},
6: {
0: "SPECIAL_MAP",
1: "SPECIAL_KEY",
2: "SPECIAL_DOC",
3: "SPECIAL_SPIRIT",
},
7: {
0 : "TOOL_FISHING_ROD",
},
8: {
0: "LOTTERY_TICKET",
1: "LOTTERY_INSTANT",
},
10: {
0: "METIN_NORMAL",
1: "METIN_GOLD",
},
12: {
0: "FISH_ALIVE",
1: "FISH_DEAD",
},
14: {
0: "RESOURCE_FISHBONE",
1: "RESOURCE_WATERSTONEPIECE",
2: "RESOURCE_WATERSTONE",
3: "RESOURCE_BLOOD_PEARL",
4: "RESOURCE_BLUE_PEARL",
5: "RESOURCE_WHITE_PEARL",
6: "RESOURCE_BUCKET",
7: "RESOURCE_CRYSTAL",
8: "RESOURCE_GEM",
9: "RESOURCE_STONE",
10: "RESOURCE_METIN",
11: "RESOURCE_ORE",
},
16: {
0: "UNIQUE_NONE",
1: "UNIQUE_BOOK",
2: "UNIQUE_SPECIAL_RIDE",
3: "UNIQUE_3",
4: "UNIQUE_4",
5: "UNIQUE_5",
6: "UNIQUE_6",
7: "UNIQUE_7",
8: "UNIQUE_8",
9: "UNIQUE_9",
10: "USE_SPECIAL",
},
28: {
0: "COSTUME_BODY",
1: "COSTUME_HAIR",
},
29: {
0: "DS_SLOT1",
1: "DS_SLOT2",
2: "DS_SLOT3",
3: "DS_SLOT4",
4: "DS_SLOT5",
5: "DS_SLOT6",
},
31: {
0: "EXTRACT_DRAGON_SOUL",
1: "EXTRACT_DRAGON_HEART",
},
}
wearflag = {
1: "WEAR_BODY",
2: "WEAR_HEAD",
4: "WEAR_FOOTS",
8: "WEAR_WRIST",
16: "WEAR_WEAPON",
32: "WEAR_NECK",
64: "WEAR_EAR",
128: "WEAR_SHIELD",
256: "WEAR_UNIQUE",
512: "WEAR_ARROW",
1024: "WEAR_HAIR",
2048: "WEAR_ABILITY",
}
limittype = {
1: "LEVEL",
2: "STR",
3: "DEX",
4: "INT",
5: "CON",
6: "REAL_TIME",
7: "REAL_TIME_FIRST_USE",
8: "TIMER_BASED_ON_WEAR",
}
bonus = {
1: "APPLY_MAX_HP",
2: "APPLY_MAX_SP",
3: "APPLY_CON",
4: "APPLY_INT",
5: "APPLY_STR",
6: "APPLY_DEX",
7: "APPLY_ATT_SPEED",
8: "APPLY_MOV_SPEED",
9: "APPLY_CAST_SPEED",
10: "APPLY_HP_REGEN",
11: "APPLY_SP_REGEN",
12: "APPLY_POISON_PCT",
13: "APPLY_STUN_PCT",
14: "APPLY_SLOW_PCT",
15: "APPLY_CRITICAL_PCT",
16: "APPLY_PENETRATE_PCT",
17: "APPLY_ATTBONUS_HUMAN",
18: "APPLY_ATTBONUS_ANIMAL",
19: "APPLY_ATTBONUS_ORC",
20: "APPLY_ATTBONUS_MILGYO",
21: "APPLY_ATTBONUS_UNDEAD",
22: "APPLY_ATTBONUS_DEVIL",
23: "APPLY_STEAL_HP",
24: "APPLY_STEAL_SP",
25: "APPLY_MANA_BURN_PCT",
26: "APPLY_DAMAGE_SP_RECOVER",
27: "APPLY_BLOCK",
28: "APPLY_DODGE",
29: "APPLY_RESIST_SWORD",
30: "APPLY_RESIST_TWOHAND",
31: "APPLY_RESIST_DAGGER",
32: "APPLY_RESIST_BELL",
33: "APPLY_RESIST_FAN",
34: "APPLY_RESIST_BOW",
35: "APPLY_RESIST_FIRE",
36: "APPLY_RESIST_ELEC",
37: "APPLY_RESIST_MAGIC",
38: "APPLY_RESIST_WIND",
39: "APPLY_REFLECT_MELEE",
40: "APPLY_REFLECT_CURSE",
41: "APPLY_POISON_REDUCE",
42: "APPLY_KILL_SP_RECOVER",
43: "APPLY_EXP_DOUBLE_BONUS",
44: "APPLY_GOLD_DOUBLE_BONUS",
45: "APPLY_ITEM_DROP_BONUS",
46: "APPLY_POTION_BONUS",
47: "APPLY_KILL_HP_RECOVER",
48: "APPLY_IMMUNE_STUN",
49: "APPLY_IMMUNE_SLOW",
50: "APPLY_IMMUNE_FALL",
51: "APPLY_SKILL",
52: "APPLY_BOW_DISTANCE",
53: "APPLY_ATT_GRADE_BONUS",
54: "APPLY_DEF_GRADE_BONUS",
55: "APPLY_MAGIC_ATT_GRADE",
56: "APPLY_MAGIC_DEF_GRADE",
57: "APPLY_CURSE_PCT",
58: "APPLY_MAX_STAMINA",
59: "APPLY_ATTBONUS_WARRIOR",
60: "APPLY_ATTBONUS_ASSASSIN",
61: "APPLY_ATTBONUS_SURA",
62: "APPLY_ATTBONUS_SHAMAN",
63: "APPLY_ATTBONUS_MONSTER",
64: "APPLY_MALL_ATTBONUS",
65: "APPLY_MALL_DEFBONUS",
66: "APPLY_MALL_EXPBONUS",
67: "APPLY_MALL_ITEMBONUS",
68: "APPLY_MALL_GOLDBONUS",
69: "APPLY_MAX_HP_PCT",
70: "APPLY_MAX_SP_PCT",
71: "APPLY_SKILL_DAMAGE_BONUS",
72: "APPLY_NORMAL_HIT_DAMAGE_BONUS",
73: "APPLY_SKILL_DEFEND_BONUS",
74: "APPLY_NORMAL_HIT_DEFEND_BONUS",
75: "APPLY_PC_BANG_EXP_BONUS",
76: "APPLY_PC_BANG_DROP_BONUS",
77: "APPLY_EXTRACT_HP_PCT",
78: "APPLY_RESIST_WARRIOR",
79: "APPLY_RESIST_ASSASSIN",
80: "APPLY_RESIST_SURA",
81: "APPLY_RESIST_SHAMAN",
82: "APPLY_ENERGY",
83: "APPLY_DEF_GRADE",
84: "APPLY_COSTUME_ATTR_BONUS",
85: "APPLY_MAGIC_ATTBONUS_PER",
86: "APPLY_MELEE_MAGIC_ATTBONUS_PER",
87: "APPLY_RESIST_ICE",
88: "APPLY_RESIST_EARTH",
89: "APPLY_RESIST_DARK",
90: "APPLY_ANTI_CRITICAL_PCT",
91: "APPLY_ANTI_PENETRATE_PCT",
}
addon_type = {
180,
181,
182,
183,
184,
185,
186,
187,
188,
189,
190,
191,
192,
193,
194,
195,
196,
197,
198,
199,
290,
291,
292,
293,
294,
295,
296,
297,
298,
299,
1130,
1131,
1132,
1133,
1134,
1135,
1136,
1137,
1138,
1139,
1170,
1171,
1172,
1173,
1174,
1175,
1176,
1177,
1178,
1179,
2150,
2151,
2152,
2153,
2154,
2155,
2156,
2157,
2158,
2159,
2170,
2171,
2172,
2173,
2174,
2175,
2176,
2177,
2178,
2179,
3160,
3161,
3162,
3163,
3164,
3165,
3166,
3167,
3168,
3169,
3210,
3211,
3212,
3213,
3214,
3215,
3216,
3217,
3218,
3219,
5110,
5111,
5112,
5113,
5114,
5115,
5116,
5117,
5118,
5119,
5120,
5121,
5122,
5123,
5124,
5125,
5126,
5127,
5128,
5129,
7160,
7161,
7162,
7163,
7164,
7165,
7166,
7167,
7168,
7169,
65159,
350,
351,
352,
353,
354,
355,
356,
357,
358,
359,
360,
361,
362,
363,
364,
365,
366,
367,
368,
369,
1300,
1301,
1302,
1303,
1304,
1305,
1306,
1307,
1308,
1309,
2340,
2341,
2342,
2343,
2344,
2345,
2346,
2347,
2348,
2349,
3330,
3331,
3332,
3333,
3334,
3335,
3336,
3337,
3338,
3339,
5290,
5291,
5292,
5293,
5294,
5295,
5296,
5297,
5298,
5299,
}
errors = ""
def get_item_type(type, vnum):
global errors
errors = ""
if type in item_type:
return item_type[type]
else:
errors += "Strange type in item %s\r\n" % vnum
return item_type[0]
def get_item_subtype(type, subtype, vnum):
global errors
errors = ""
if type in item_subtype:
if subtype in item_subtype[type]:
return item_subtype[type][subtype]
else:
errors += "Strange subtype in item %s\r\n" % vnum
return "NONE"
def get_antiflag(antiflag, vnum):
global errors
str = ""
if antiflag >= 131072:
antiflag -= 131072
if len(str) <= 0:
str = "ANTI_SAFEBOX"
else:
str = "ANTI_SAFEBOX | " + str
if antiflag >= 65536:
antiflag -= 65536
if len(str) <= 0:
str = "ANTI_MYSHOP"
else:
str = "ANTI_MYSHOP | " + str
if antiflag >= 32768:
antiflag -= 32768
if len(str) <= 0:
str = "ANTI_STACK"
else:
str = "ANTI_STACK | " + str
if antiflag >= 16384:
antiflag -= 16384
if len(str) <= 0:
str = "ANTI_PKDROP"
else:
str = "ANTI_PKDROP | " + str
if antiflag >= 8192:
antiflag -= 8192
if len(str) <= 0:
str = "ANTI_GIVE"
else:
str = "ANTI_GIVE | " + str
if antiflag >= 4096:
antiflag -= 4096
if len(str) <= 0:
str = "ANTI_SAVE"
else:
str = "ANTI_SAVE | " + str
if antiflag >= 2048:
antiflag -= 2048
if len(str) <= 0:
str = "ANTI_EMPIRE_C"
else:
str = "ANTI_EMPIRE_C | " + str
if antiflag >= 1024:
antiflag -= 1024
if len(str) <= 0:
str = "ANTI_EMPIRE_B"
else:
str = "ANTI_EMPIRE_B | " + str
if antiflag >= 512:
antiflag -= 512
if len(str) <= 0:
str = "ANTI_EMPIRE_A"
else:
str = "ANTI_EMPIRE_A | " + str
if antiflag >= 256:
antiflag -= 256
if len(str) <= 0:
str = "ANTI_SELL"
else:
str = "ANTI_SELL | " + str
if antiflag >= 64:
antiflag -= 64
if len(str) <= 0:
str = "ANTI_GET"
else:
str = "ANTI_GET | " + str
if antiflag >= 32:
antiflag -= 32
if len(str) <= 0:
str = "ANTI_MUDANG"
else:
str = "ANTI_MUDANG | " + str
if antiflag >= 16:
antiflag -= 16
if len(str) <= 0:
str = "ANTI_SURA"
else:
str = "ANTI_SURA | " + str
if antiflag >= 8:
antiflag -= 8
if len(str) <= 0:
str = "ANTI_ASSASSIN"
else:
str = "ANTI_ASSASSIN | " + str
if antiflag >= 4:
antiflag -= 4
if len(str) <= 0:
str = "ANTI_MUSA"
else:
str = "ANTI_MUSA | " + str
if antiflag >= 2:
antiflag -= 2
if len(str) <= 0:
str = "ANTI_MALE"
else:
str = "ANTI_MALE | " + str
if antiflag >= 1:
antiflag -= 1
if len(str) <= 0:
str = "ANTI_FEMALE"
else:
str = "ANTI_FEMALE | " + str
if antiflag == 0 and len(str) > 0:
return "\"" + str + "\""
else:
errors += "Strange antiflag in item %s\r\n" % vnum
return "\"NONE\""
def get_flag(flag, vnum):
global errors
str = ""
if flag >= 32768:
flag -= 32768
if len(str) <= 0:
str = "ITEM_APPLICABLE"
else:
str = "ITEM_APPLICABLE | " + str
if flag >= 16384:
flag -= 16384
if len(str) <= 0:
str = "REFINEABLE"
else:
str = "REFINEABLE | " + str
if flag >= 8192:
flag -= 8192
if len(str) <= 0:
str = "LOG"
else:
str = "LOG | " + str
if flag >= 4096:
flag -= 4096
if len(str) <= 0:
str = "ITEM_QUEST"
else:
str = "ITEM_QUEST | " + str
if flag >= 2048:
flag -= 2048
if len(str) <= 0:
str = "QUEST_GIVE"
else:
str = "QUEST_GIVE | " + str
if flag >= 1024:
flag -= 1024
if len(str) <= 0:
str = "QUEST_USE_MULTIPLE"
else:
str = "QUEST_USE_MULTIPLE | " + str
if flag >= 512:
flag -= 512
if len(str) <= 0:
str = "QUEST_USE"
else:
str = "QUEST_USE | " + str
if flag >= 256:
flag -= 256
if len(str) <= 0:
str = "CONFIRM_WHEN_USE"
else:
str = "CONFIRM_WHEN_USE | " + str
if flag >= 128:
flag -= 128
if len(str) <= 0:
str = "ITEM_IRREMOVABLE"
else:
str = "ITEM_IRREMOVABLE | " + str
if flag >= 64:
flag -= 64
if len(str) <= 0:
str = "ITEM_MAKECOUNT"
else:
str = "ITEM_MAKECOUNT | " + str
if flag >= 32:
flag -= 32
if len(str) <= 0:
str = "ITEM_UNIQUE"
else:
str = "ITEM_UNIQUE | " + str
if flag >= 16:
flag -= 16
if len(str) <= 0:
str = "ITEM_SLOW_QUERY"
else:
str = "ITEM_SLOW_QUERY | " + str
if flag >= 8:
flag -= 8
if len(str) <= 0:
str = "COUNT_PER_1GOLD"
else:
str = "COUNT_PER_1GOLD | " + str
if flag >= 4:
flag -= 4
if len(str) <= 0:
str = "ITEM_STACKABLE"
else:
str = "ITEM_STACKABLE | " + str
if flag >= 2:
flag -= 2
if len(str) <= 0:
str = "ITEM_SAVE"
else:
str = "ITEM_SAVE | " + str
if flag >= 1:
flag -= 1
if len(str) <= 0:
str = "ITEM_TUNABLE"
else:
str = "ITEM_TUNABLE | " + str
if flag == 0 and len(str) > 0:
return "\"" + str + "\""
else:
errors += "Strange flag in item %s\r\n" % vnum
return "\"NONE\""
def get_wearflag(wear, vnum):
global errors
if wear in wearflag:
return "\"" + wearflag[wear] + "\""
else:
errors += "Strange wearflag in item %s\r\n" % vnum
return "\"NONE\""
def get_immuneflag(immune):
return "\"NONE\""
def get_limittype(limit):
if limit in limittype:
return "\"" + limittype[limit] + "\""
else:
return "\"LIMIT_NONE\""
def get_apply(apply):
if apply in bonus:
return "\"" + bonus[apply] + "\""
else:
return "\"APPLY_NONE\""
def socket(sockett):
if sockett == 127:
return 0
else:
return sockett
print "item_proto icin databaseye baglaniliyor."
data = "player"
db = MySQLdb.connect(host_mysql,user_mysql,passwd_mysql,data)
cur = db.cursor()
print "baglanti basarili."
cur.execute("select * from item_proto")
rows = cur.fetchall()
out_file_itemproto = open("item_proto.txt", "w")
out_file_itemnames = open("item_names.txt", "w")
print "item_proto donusturuluyor."
for row in rows:
item_proto_line = "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (row[0], "\"" + row[1] + "\"", "\"" + get_item_type(row[3], row[0]) + "\"" , "\"" + get_item_subtype(row[3], row[4], row[0]) + "\"", row[6] , get_antiflag(row[7], row[0]), get_flag(row[8], row[0]), get_wearflag(row[9], row[0]), get_immuneflag(row[10]), row[11], row[12], row[13], row[14], row[16], get_limittype(row[17]), row[18], get_limittype(row[19]), row[20], get_apply(row[21]), row[22], get_apply(row[23]), row[24], get_apply(row[25]), row[26], row[27], row[28], row[29], row[30], row[31], row[32], row[39], row[40], row[41])
item_names_line = "%s\t%s" % (row[0], row[2])
out_file_itemproto.write(item_proto_line + "\r\n")
out_file_itemnames.write(item_names_line + "\r\n")
out_file_itemproto.close()
print "item_proto donusturuldu."
"""if len(errors) != 0:
print "Errors during conversion:"
print errors"""
print item_proto()
ProtoReader.cpp Dosyam ;
C++:
#include "stdafx.h"
#include <math.h>
#include "ProtoReader.h"
#include "CsvReader.h"
#include <sstream>
using namespace std;
inline string trim_left(const string& str)
{
string::size_type n = str.find_first_not_of(" \t\v\n\r");
return n == string::npos ? str : str.substr(n, str.length());
}
inline string trim_right(const string& str)
{
string::size_type n = str.find_last_not_of(" \t\v\n\r");
return n == string::npos ? str : str.substr(0, n + 1);
}
string trim(const string& str){return trim_left(trim_right(str));}
static string* StringSplit(string strOrigin, string strTok)
{
int cutAt; //ÀÚ¸£´ÂÀ§Ä¡
int index = 0; //¹®ÀÚ¿À妽º
string* strResult = new string[30]; //°á°úreturn ÇÒº¯¼ö
//strTokÀ»Ã£À»¶§±îÁö¹İº¹
while (unsigned(cutAt = strOrigin.find_first_of(strTok)) != strOrigin.npos) //Game-DB SRC Warning Fix 22
{
if (cutAt > 0) //ÀÚ¸£´ÂÀ§Ä¡°¡0º¸´ÙÅ©¸é(¼º°ø½Ã)
{
strResult[index++] = strOrigin.substr(0, cutAt); //°á°ú¹è¿¿¡Ãß°¡
}
strOrigin = strOrigin.substr(cutAt+1); //¿øº»ÀºÀÚ¸¥ºÎºĞÁ¦¿ÜÇѳª¸ÓÁö
}
if(strOrigin.length() > 0) //¿øº»À̾ÆÁ÷³²¾ÒÀ¸¸é
{
strResult[index++] = strOrigin.substr(0, cutAt); //³ª¸ÓÁö¸¦°á°ú¹è¿¿¡Ãß°¡
}
for( int i=0;i<index;i++)
{
strResult[i] = trim(strResult[i]);
}
return strResult; //°á°úreturn
}
int get_Item_Type_Value(string inputString)
{
string arType[] = {"ITEM_NONE", "ITEM_WEAPON",
"ITEM_ARMOR", "ITEM_USE",
"ITEM_AUTOUSE", "ITEM_MATERIAL",
"ITEM_SPECIAL", "ITEM_TOOL",
"ITEM_LOTTERY", "ITEM_ELK", //10°³
"ITEM_METIN", "ITEM_CONTAINER",
"ITEM_FISH", "ITEM_ROD",
"ITEM_RESOURCE", "ITEM_CAMPFIRE",
"ITEM_UNIQUE", "ITEM_SKILLBOOK",
"ITEM_QUEST", "ITEM_POLYMORPH", //20°³
"ITEM_TREASURE_BOX", "ITEM_TREASURE_KEY",
"ITEM_SKILLFORGET", "ITEM_GIFTBOX",
"ITEM_PICK", "ITEM_HAIR",
"ITEM_TOTEM", "ITEM_BLEND",
"ITEM_COSTUME", "ITEM_DS", //30°³
"ITEM_SPECIAL_DS", "ITEM_EXTRACT",
"ITEM_SECONDARY_COIN", //33°³
"ITEM_RING",
"ITEM_BELT", //35°³ (EItemTypes °ªÀ¸·Î Ä¡¸é 34)
};
int retInt = -1;
//cout << "Type : " << typeStr << " -> ";
for (unsigned int j=0;j<sizeof(arType)/sizeof(arType[0]);j++) { //Game-DB SRC Warning Fix 23
string tempString = arType[j];
if (inputString.find(tempString)!=string::npos && tempString.find(inputString)!=string::npos) {
//cout << j << " ";
retInt = j;
break;
}
}
//cout << endl;
return retInt;
}
int get_Item_SubType_Value(unsigned int type_value, string inputString) //Game-DB SRC Warning Fix 44
{
static string arSub1[] = { "WEAPON_SWORD", "WEAPON_DAGGER", "WEAPON_BOW", "WEAPON_TWO_HANDED",
"WEAPON_BELL", "WEAPON_FAN", "WEAPON_ARROW", "WEAPON_MOUNT_SPEAR"};
static string arSub2[] = { "ARMOR_BODY", "ARMOR_HEAD", "ARMOR_SHIELD", "ARMOR_WRIST", "ARMOR_FOOTS",
"ARMOR_NECK", "ARMOR_EAR", "ARMOR_NUM_TYPES"};
static string arSub3[] = { "USE_POTION", "USE_TALISMAN", "USE_TUNING", "USE_MOVE", "USE_TREASURE_BOX", "USE_MONEYBAG", "USE_BAIT",
"USE_ABILITY_UP", "USE_AFFECT", "USE_CREATE_STONE", "USE_SPECIAL", "USE_POTION_NODELAY", "USE_CLEAR",
"USE_INVISIBILITY", "USE_DETACHMENT", "USE_BUCKET", "USE_POTION_CONTINUE", "USE_CLEAN_SOCKET",
"USE_CHANGE_ATTRIBUTE", "USE_ADD_ATTRIBUTE", "USE_ADD_ACCESSORY_SOCKET", "USE_PUT_INTO_ACCESSORY_SOCKET",
"USE_ADD_ATTRIBUTE2", "USE_RECIPE", "USE_CHANGE_ATTRIBUTE2", "USE_BIND", "USE_UNBIND", "USE_TIME_CHARGE_PER", "USE_TIME_CHARGE_FIX", "USE_PUT_INTO_BELT_SOCKET", "USE_PUT_INTO_RING_SOCKET"};
static string arSub4[] = { "AUTOUSE_POTION", "AUTOUSE_ABILITY_UP", "AUTOUSE_BOMB", "AUTOUSE_GOLD", "AUTOUSE_MONEYBAG", "AUTOUSE_TREASURE_BOX"};
static string arSub5[] = { "MATERIAL_LEATHER", "MATERIAL_BLOOD", "MATERIAL_ROOT", "MATERIAL_NEEDLE", "MATERIAL_JEWEL",
"MATERIAL_DS_REFINE_NORMAL", "MATERIAL_DS_REFINE_BLESSED", "MATERIAL_DS_REFINE_HOLLY"};
static string arSub6[] = { "SPECIAL_MAP", "SPECIAL_KEY", "SPECIAL_DOC", "SPECIAL_SPIRIT"};
static string arSub7[] = { "TOOL_FISHING_ROD" };
static string arSub8[] = { "LOTTERY_TICKET", "LOTTERY_INSTANT" };
static string arSub10[] = { "METIN_NORMAL", "METIN_GOLD" };
static string arSub12[] = { "FISH_ALIVE", "FISH_DEAD"};
static string arSub14[] = { "RESOURCE_FISHBONE", "RESOURCE_WATERSTONEPIECE", "RESOURCE_WATERSTONE", "RESOURCE_BLOOD_PEARL",
"RESOURCE_BLUE_PEARL", "RESOURCE_WHITE_PEARL", "RESOURCE_BUCKET", "RESOURCE_CRYSTAL", "RESOURCE_GEM",
"RESOURCE_STONE", "RESOURCE_METIN", "RESOURCE_ORE" };
static string arSub16[] = { "UNIQUE_NONE", "UNIQUE_BOOK", "UNIQUE_SPECIAL_RIDE", "UNIQUE_3", "UNIQUE_4", "UNIQUE_5",
"UNIQUE_6", "UNIQUE_7", "UNIQUE_8", "UNIQUE_9", "USE_SPECIAL"};
static string arSub28[] = { "COSTUME_BODY", "COSTUME_HAIR" };
static string arSub29[] = { "DS_SLOT1", "DS_SLOT2", "DS_SLOT3", "DS_SLOT4", "DS_SLOT5", "DS_SLOT6" };
static string arSub31[] = { "EXTRACT_DRAGON_SOUL", "EXTRACT_DRAGON_HEART" };
static string* arSubType[] = {0, //0
arSub1, //1
arSub2, //2
arSub3, //3
arSub4, //4
arSub5, //5
arSub6, //6
arSub7, //7
arSub8, //8
0, //9
arSub10, //10
0, //11
arSub12, //12
0, //13
arSub14, //14
0, //15
arSub16, //16
0, //17
0, //18
0, //19
0, //20
0, //21
0, //22
0, //23
0, //24
0, //25
0, //26
0, //27
arSub28, //28
arSub29, //29
arSub29, //30
arSub31, //31
0, //32
0, //33 ¹İÁö
0, //34 º§Æ®
};
static int arNumberOfSubtype[_countof(arSubType)] = {
0,
sizeof(arSub1)/sizeof(arSub1[0]),
sizeof(arSub2)/sizeof(arSub2[0]),
sizeof(arSub3)/sizeof(arSub3[0]),
sizeof(arSub4)/sizeof(arSub4[0]),
sizeof(arSub5)/sizeof(arSub5[0]),
sizeof(arSub6)/sizeof(arSub6[0]),
sizeof(arSub7)/sizeof(arSub7[0]),
sizeof(arSub8)/sizeof(arSub8[0]),
0,
sizeof(arSub10)/sizeof(arSub10[0]),
0,
sizeof(arSub12)/sizeof(arSub12[0]),
0,
sizeof(arSub14)/sizeof(arSub14[0]),
0,
sizeof(arSub16)/sizeof(arSub16[0]),
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
sizeof(arSub28)/sizeof(arSub28[0]),
sizeof(arSub29)/sizeof(arSub29[0]),
sizeof(arSub29)/sizeof(arSub29[0]),
sizeof(arSub31)/sizeof(arSub31[0]),
0, // 32
0, // 33 ¹İÁö
0, // 34 º§Æ®
};
assert(_countof(arSubType) > type_value && "Subtype rule: Out of range!!");
// assert ¾È ¸ÔÈ÷´Â µí..
if (_countof(arSubType) <= type_value)
{
sys_err("SubType : Out of range!! (type_value: %d, count of registered subtype: %d", type_value, _countof(arSubType));
return -1;
}
//¾ÆÀÌÅÛ Å¸ÀÔÀÇ ¼ºêŸÀÔ ¾î·¹ÀÌ°¡ Á¸ÀçÇÏ´ÂÁö ¾Ë¾Æº¸°í, ¾øÀ¸¸é 0 ¸®ÅÏ
if (arSubType[type_value]==0) {
return 0;
}
//
int retInt = -1;
//cout << "SubType : " << subTypeStr << " -> ";
for (int j=0;j<arNumberOfSubtype[type_value];j++) {
string tempString = arSubType[type_value][j];
string tempInputString = trim(inputString);
if (tempInputString.compare(tempString)==0)
{
//cout << j << " ";
retInt = j;
break;
}
}
//cout << endl;
return retInt;
}
int get_Item_AntiFlag_Value(string inputString)
{
string arAntiFlag[] = {"ANTI_FEMALE", "ANTI_MALE", "ANTI_MUSA", "ANTI_ASSASSIN", "ANTI_SURA", "ANTI_MUDANG",
"ANTI_GET", "ANTI_DROP", "ANTI_SELL", "ANTI_EMPIRE_A", "ANTI_EMPIRE_B", "ANTI_EMPIRE_C",
"ANTI_SAVE", "ANTI_GIVE", "ANTI_PKDROP", "ANTI_STACK", "ANTI_MYSHOP", "ANTI_SAFEBOX"};
int retValue = 0;
string* arInputString = StringSplit(inputString, "|"); //ÇÁ·ÎÅä Á¤º¸ ³»¿ëÀ» ´Ü¾îº°·Î ÂÉ°µ ¹è¿.
for(unsigned int i =0;i<sizeof(arAntiFlag)/sizeof(arAntiFlag[0]);i++) { //Game-DB SRC Warning Fix 24
string tempString = arAntiFlag[i];
for (int j=0; j<30 ; j++) //ÃÖ´ë 30°³ ´Ü¾î±îÁö. (ÇϵåÄÚµù)
{
string tempString2 = arInputString[j];
if (tempString2.compare(tempString)==0) { //ÀÏÄ¡ÇÏ´ÂÁö È®ÀÎ.
retValue = retValue + pow((float)2,(float)i);
}
if(tempString2.compare("") == 0)
break;
}
}
delete []arInputString;
//cout << "AntiFlag : " << antiFlagStr << " -> " << retValue << endl;
return retValue;
}
int get_Item_Flag_Value(string inputString)
{
string arFlag[] = {"ITEM_TUNABLE", "ITEM_SAVE", "ITEM_STACKABLE", "COUNT_PER_1GOLD", "ITEM_SLOW_QUERY", "ITEM_UNIQUE",
"ITEM_MAKECOUNT", "ITEM_IRREMOVABLE", "CONFIRM_WHEN_USE", "QUEST_USE", "QUEST_USE_MULTIPLE",
"QUEST_GIVE", "ITEM_QUEST", "LOG", "STACKABLE", "SLOW_QUERY", "REFINEABLE", "IRREMOVABLE", "ITEM_APPLICABLE"};
int retValue = 0;
string* arInputString = StringSplit(inputString, "|"); //ÇÁ·ÎÅä Á¤º¸ ³»¿ëÀ» ´Ü¾îº°·Î ÂÉ°µ ¹è¿.
for(unsigned int i =0;i<sizeof(arFlag)/sizeof(arFlag[0]);i++) { //Game-DB SRC Warning Fix 25
string tempString = arFlag[i];
for (int j=0; j<30 ; j++) //ÃÖ´ë 30°³ ´Ü¾î±îÁö. (ÇϵåÄÚµù)
{
string tempString2 = arInputString[j];
if (tempString2.compare(tempString)==0) { //ÀÏÄ¡ÇÏ´ÂÁö È®ÀÎ.
retValue = retValue + pow((float)2,(float)i);
}
if(tempString2.compare("") == 0)
break;
}
}
delete []arInputString;
//cout << "Flag : " << flagStr << " -> " << retValue << endl;
return retValue;
}
int get_Item_WearFlag_Value(string inputString)
{
string arWearrFlag[] = {"WEAR_BODY", "WEAR_HEAD", "WEAR_FOOTS", "WEAR_WRIST", "WEAR_WEAPON", "WEAR_NECK", "WEAR_EAR", "WEAR_SHIELD", "WEAR_UNIQUE",
"WEAR_ARROW", "WEAR_HAIR", "WEAR_ABILITY"};
int retValue = 0;
string* arInputString = StringSplit(inputString, "|"); //ÇÁ·ÎÅä Á¤º¸ ³»¿ëÀ» ´Ü¾îº°·Î ÂÉ°µ ¹è¿.
for(unsigned int i =0;i<sizeof(arWearrFlag)/sizeof(arWearrFlag[0]);i++) { //Game-DB SRC Warning Fix 26
string tempString = arWearrFlag[i];
for (int j=0; j<30 ; j++) //ÃÖ´ë 30°³ ´Ü¾î±îÁö. (ÇϵåÄÚµù)
{
string tempString2 = arInputString[j];
if (tempString2.compare(tempString)==0) { //ÀÏÄ¡ÇÏ´ÂÁö È®ÀÎ.
retValue = retValue + pow((float)2,(float)i);
}
if(tempString2.compare("") == 0)
break;
}
}
delete []arInputString;
//cout << "WearFlag : " << wearFlagStr << " -> " << retValue << endl;
return retValue;
}
int get_Item_Immune_Value(string inputString)
{
string arImmune[] = {"PARA","CURSE","STUN","SLEEP","SLOW","POISON","TERROR"};
int retValue = 0;
string* arInputString = StringSplit(inputString, "|"); //ÇÁ·ÎÅä Á¤º¸ ³»¿ëÀ» ´Ü¾îº°·Î ÂÉ°µ ¹è¿.
for(unsigned int i =0;i<sizeof(arImmune)/sizeof(arImmune[0]);i++) { //Game-DB SRC Warning Fix 27
string tempString = arImmune[i];
for (int j=0; j<30 ; j++) //ÃÖ´ë 30°³ ´Ü¾î±îÁö. (ÇϵåÄÚµù)
{
string tempString2 = arInputString[j];
if (tempString2.compare(tempString)==0) { //ÀÏÄ¡ÇÏ´ÂÁö È®ÀÎ.
retValue = retValue + pow((float)2,(float)i);
}
if(tempString2.compare("") == 0)
break;
}
}
delete []arInputString;
//cout << "Immune : " << immuneStr << " -> " << retValue << endl;
return retValue;
}
int get_Item_LimitType_Value(string inputString)
{
string arLimitType[] = {"LIMIT_NONE", "LEVEL", "STR", "DEX", "INT", "CON", "REAL_TIME", "REAL_TIME_FIRST_USE", "TIMER_BASED_ON_WEAR"};
int retInt = -1;
//cout << "LimitType : " << limitTypeStr << " -> ";
for (unsigned int j=0;j<sizeof(arLimitType)/sizeof(arLimitType[0]);j++) { //Game-DB SRC Warning Fix 28
string tempString = arLimitType[j];
string tempInputString = trim(inputString);
if (tempInputString.compare(tempString)==0)
{
//cout << j << " ";
retInt = j;
break;
}
}
//cout << endl;
return retInt;
}
int get_Item_ApplyType_Value(string inputString)
{
string arApplyType[] = {"APPLY_NONE", "APPLY_MAX_HP", "APPLY_MAX_SP", "APPLY_CON", "APPLY_INT", "APPLY_STR", "APPLY_DEX", "APPLY_ATT_SPEED",
"APPLY_MOV_SPEED", "APPLY_CAST_SPEED", "APPLY_HP_REGEN", "APPLY_SP_REGEN", "APPLY_POISON_PCT", "APPLY_STUN_PCT",
"APPLY_SLOW_PCT", "APPLY_CRITICAL_PCT", "APPLY_PENETRATE_PCT", "APPLY_ATTBONUS_HUMAN", "APPLY_ATTBONUS_ANIMAL",
"APPLY_ATTBONUS_ORC", "APPLY_ATTBONUS_MILGYO", "APPLY_ATTBONUS_UNDEAD", "APPLY_ATTBONUS_DEVIL", "APPLY_STEAL_HP",
"APPLY_STEAL_SP", "APPLY_MANA_BURN_PCT", "APPLY_DAMAGE_SP_RECOVER", "APPLY_BLOCK", "APPLY_DODGE", "APPLY_RESIST_SWORD",
"APPLY_RESIST_TWOHAND", "APPLY_RESIST_DAGGER", "APPLY_RESIST_BELL", "APPLY_RESIST_FAN", "APPLY_RESIST_BOW", "APPLY_RESIST_FIRE",
"APPLY_RESIST_ELEC", "APPLY_RESIST_MAGIC", "APPLY_RESIST_WIND", "APPLY_REFLECT_MELEE", "APPLY_REFLECT_CURSE", "APPLY_POISON_REDUCE",
"APPLY_KILL_SP_RECOVER", "APPLY_EXP_DOUBLE_BONUS", "APPLY_GOLD_DOUBLE_BONUS", "APPLY_ITEM_DROP_BONUS", "APPLY_POTION_BONUS",
"APPLY_KILL_HP_RECOVER", "APPLY_IMMUNE_STUN", "APPLY_IMMUNE_SLOW", "APPLY_IMMUNE_FALL", "APPLY_SKILL", "APPLY_BOW_DISTANCE",
"APPLY_ATT_GRADE_BONUS", "APPLY_DEF_GRADE_BONUS", "APPLY_MAGIC_ATT_GRADE", "APPLY_MAGIC_DEF_GRADE", "APPLY_CURSE_PCT",
"APPLY_MAX_STAMINA", "APPLY_ATTBONUS_WARRIOR", "APPLY_ATTBONUS_ASSASSIN", "APPLY_ATTBONUS_SURA", "APPLY_ATTBONUS_SHAMAN",
"APPLY_ATTBONUS_MONSTER", "APPLY_MALL_ATTBONUS", "APPLY_MALL_DEFBONUS", "APPLY_MALL_EXPBONUS", "APPLY_MALL_ITEMBONUS",
"APPLY_MALL_GOLDBONUS", "APPLY_MAX_HP_PCT", "APPLY_MAX_SP_PCT", "APPLY_SKILL_DAMAGE_BONUS", "APPLY_NORMAL_HIT_DAMAGE_BONUS",
"APPLY_SKILL_DEFEND_BONUS", "APPLY_NORMAL_HIT_DEFEND_BONUS",
"APPLY_EXTRACT_HP_PCT", "APPLY_RESIST_WARRIOR", "APPLY_RESIST_ASSASSIN", "APPLY_RESIST_SURA", "APPLY_RESIST_SHAMAN",
"APPLY_ENERGY", "APPLY_DEF_GRADE", "APPLY_COSTUME_ATTR_BONUS", "APPLY_MAGIC_ATTBONUS_PER", "APPLY_MELEE_MAGIC_ATTBONUS_PER",
"APPLY_RESIST_ICE", "APPLY_RESIST_EARTH", "APPLY_RESIST_DARK", "APPLY_ANTI_CRITICAL_PCT", "APPLY_ANTI_PENETRATE_PCT",
};
int retInt = -1;
//cout << "ApplyType : " << applyTypeStr << " -> ";
for (unsigned int j=0;j<sizeof(arApplyType)/sizeof(arApplyType[0]);j++) { //Game-DB SRC Warning Fix 29
string tempString = arApplyType[j];
string tempInputString = trim(inputString);
if (tempInputString.compare(tempString)==0)
{
//cout << j << " ";
retInt = j;
break;
}
}
//cout << endl;
return retInt;
}
//¸ó½ºÅÍ ÇÁ·ÎÅäµµ Àд´Ù.
int get_Mob_Rank_Value(string inputString)
{
string arRank[] = {"PAWN", "S_PAWN", "KNIGHT", "S_KNIGHT", "BOSS", "KING"};
int retInt = -1;
//cout << "Rank : " << rankStr << " -> ";
for (unsigned int j=0;j<sizeof(arRank)/sizeof(arRank[0]);j++) { //Game-DB SRC Warning Fix 30
string tempString = arRank[j];
string tempInputString = trim(inputString);
if (tempInputString.compare(tempString)==0)
{
//cout << j << " ";
retInt = j;
break;
}
}
//cout << endl;
return retInt;
}
int get_Mob_Type_Value(string inputString)
{
string arType[] = { "MONSTER", "NPC", "STONE", "WARP", "DOOR", "BUILDING", "PC", "POLYMORPH_PC", "HORSE", "GOTO"};
int retInt = -1;
//cout << "Type : " << typeStr << " -> ";
for (unsigned int j=0;j<sizeof(arType)/sizeof(arType[0]);j++) { //Game-DB SRC Warning Fix 31
string tempString = arType[j];
string tempInputString = trim(inputString);
if (tempInputString.compare(tempString)==0)
{
//cout << j << " ";
retInt = j;
break;
}
}
//cout << endl;
return retInt;
}
int get_Mob_BattleType_Value(string inputString)
{
string arBattleType[] = { "MELEE", "RANGE", "MAGIC", "SPECIAL", "POWER", "TANKER", "SUPER_POWER", "SUPER_TANKER"};
int retInt = -1;
//cout << "Battle Type : " << battleTypeStr << " -> ";
for (unsigned int j=0;j<sizeof(arBattleType)/sizeof(arBattleType[0]);j++) { //Game-DB SRC Warning Fix 32
string tempString = arBattleType[j];
string tempInputString = trim(inputString);
if (tempInputString.compare(tempString)==0)
{
//cout << j << " ";
retInt = j;
break;
}
}
//cout << endl;
return retInt;
}
int get_Mob_Size_Value(string inputString)
{
string arSize[] = { "SAMLL", "MEDIUM", "BIG"};
int retInt = 0;
//cout << "Size : " << sizeStr << " -> ";
for (unsigned int j=0;j<sizeof(arSize)/sizeof(arSize[0]);j++) { //Game-DB SRC Warning Fix 33
string tempString = arSize[j];
string tempInputString = trim(inputString);
if (tempInputString.compare(tempString)==0)
{
//cout << j << " ";
retInt = j + 1;
break;
}
}
//cout << endl;
return retInt;
}
int get_Mob_AIFlag_Value(string inputString)
{
string arAIFlag[] = {"AGGR","NOMOVE","COWARD","NOATTSHINSU","NOATTCHUNJO","NOATTJINNO","ATTMOB","BERSERK","STONESKIN","GODSPEED","DEATHBLOW","REVIVE"};
int retValue = 0;
string* arInputString = StringSplit(inputString, ","); //ÇÁ·ÎÅä Á¤º¸ ³»¿ëÀ» ´Ü¾îº°·Î ÂÉ°µ ¹è¿.
for(unsigned int i =0;i<sizeof(arAIFlag)/sizeof(arAIFlag[0]);i++) { //Game-DB SRC Warning Fix 34
string tempString = arAIFlag[i];
for (int j=0; j<30 ; j++) //ÃÖ´ë 30°³ ´Ü¾î±îÁö. (ÇϵåÄÚµù)
{
string tempString2 = arInputString[j];
if (tempString2.compare(tempString)==0) { //ÀÏÄ¡ÇÏ´ÂÁö È®ÀÎ.
retValue = retValue + pow((float)2,(float)i);
}
if(tempString2.compare("") == 0)
break;
}
}
delete []arInputString;
//cout << "AIFlag : " << aiFlagStr << " -> " << retValue << endl;
return retValue;
}
int get_Mob_RaceFlag_Value(string inputString)
{
string arRaceFlag[] = {"ANIMAL","UNDEAD","DEVIL","HUMAN","ORC","MILGYO","INSECT","FIRE","ICE","DESERT","TREE",
"ATT_ELEC","ATT_FIRE","ATT_ICE","ATT_WIND","ATT_EARTH","ATT_DARK"};
int retValue = 0;
string* arInputString = StringSplit(inputString, ","); //ÇÁ·ÎÅä Á¤º¸ ³»¿ëÀ» ´Ü¾îº°·Î ÂÉ°µ ¹è¿.
for(unsigned int i =0;i<sizeof(arRaceFlag)/sizeof(arRaceFlag[0]);i++) { //Game-DB SRC Warning Fix 35
string tempString = arRaceFlag[i];
for (int j=0; j<30 ; j++) //ÃÖ´ë 30°³ ´Ü¾î±îÁö. (ÇϵåÄÚµù)
{
string tempString2 = arInputString[j];
if (tempString2.compare(tempString)==0) { //ÀÏÄ¡ÇÏ´ÂÁö È®ÀÎ.
retValue = retValue + pow((float)2,(float)i);
}
if(tempString2.compare("") == 0)
break;
}
}
delete []arInputString;
//cout << "Race Flag : " << raceFlagStr << " -> " << retValue << endl;
return retValue;
}
int get_Mob_ImmuneFlag_Value(string inputString)
{
string arImmuneFlag[] = {"STUN","SLOW","FALL","CURSE","POISON","TERROR", "REFLECT"};
int retValue = 0;
string* arInputString = StringSplit(inputString, ","); //ÇÁ·ÎÅä Á¤º¸ ³»¿ëÀ» ´Ü¾îº°·Î ÂÉ°µ ¹è¿.
for(unsigned int i =0;i<sizeof(arImmuneFlag)/sizeof(arImmuneFlag[0]);i++) { //Game-DB SRC Warning Fix 36
string tempString = arImmuneFlag[i];
for (int j=0; j<30 ; j++) //ÃÖ´ë 30°³ ´Ü¾î±îÁö. (ÇϵåÄÚµù)
{
string tempString2 = arInputString[j];
if (tempString2.compare(tempString)==0) { //ÀÏÄ¡ÇÏ´ÂÁö È®ÀÎ.
retValue = retValue + pow((float)2,(float)i);
}
if(tempString2.compare("") == 0)
break;
}
}
delete []arInputString;
//cout << "Immune Flag : " << immuneFlagStr << " -> " << retValue << endl;
return retValue;
}
#ifndef __DUMP_PROTO__
//¸÷ Å×À̺íÀ» ¼ÂÆÃÇØÁØ´Ù.
bool Set_Proto_Mob_Table(TMobTable *mobTable, cCsvTable &csvTable,std::map<int,const char*> &nameMap)
{
int col = 0;
str_to_number(mobTable->dwVnum, csvTable.AsStringByIndex(col++));
strlcpy(mobTable->szName, csvTable.AsStringByIndex(col++), sizeof(mobTable->szName));
//3. Áö¿ªº° À̸§ ³Ö¾îÁÖ±â.
map<int,const char*>::iterator it;
it = nameMap.find(mobTable->dwVnum);
if (it != nameMap.end()) {
const char * localeName = it->second;
strlcpy(mobTable->szLocaleName, localeName, sizeof (mobTable->szLocaleName));
} else {
strlcpy(mobTable->szLocaleName, mobTable->szName, sizeof (mobTable->szLocaleName));
}
//RANK
int rankValue = get_Mob_Rank_Value(csvTable.AsStringByIndex(col++));
mobTable->bRank = rankValue;
//TYPE
int typeValue = get_Mob_Type_Value(csvTable.AsStringByIndex(col++));
mobTable->bType = typeValue;
//BATTLE_TYPE
int battleTypeValue = get_Mob_BattleType_Value(csvTable.AsStringByIndex(col++));
mobTable->bBattleType = battleTypeValue;
str_to_number(mobTable->bLevel, csvTable.AsStringByIndex(col++));
//SIZE
int sizeValue = get_Mob_Size_Value(csvTable.AsStringByIndex(col++));
mobTable->bSize = sizeValue;
//AI_FLAG
int aiFlagValue = get_Mob_AIFlag_Value(csvTable.AsStringByIndex(col++));
mobTable->dwAIFlag = aiFlagValue;
//mount_capacity;
col++;
//RACE_FLAG
int raceFlagValue = get_Mob_RaceFlag_Value(csvTable.AsStringByIndex(col++));
mobTable->dwRaceFlag = raceFlagValue;
//IMMUNE_FLAG
int immuneFlagValue = get_Mob_ImmuneFlag_Value(csvTable.AsStringByIndex(col++));
mobTable->dwImmuneFlag = immuneFlagValue;
str_to_number(mobTable->bEmpire, csvTable.AsStringByIndex(col++)); //col = 11
strlcpy(mobTable->szFolder, csvTable.AsStringByIndex(col++), sizeof(mobTable->szFolder));
str_to_number(mobTable->bOnClickType, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bStr, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bDex, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bCon, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bInt, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->dwDamageRange[0], csvTable.AsStringByIndex(col++));
str_to_number(mobTable->dwDamageRange[1], csvTable.AsStringByIndex(col++));
str_to_number(mobTable->dwMaxHP, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bRegenCycle, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bRegenPercent, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->dwGoldMin, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->dwGoldMax, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->dwExp, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->wDef, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->sAttackSpeed, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->sMovingSpeed, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bAggresiveHPPct, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->wAggressiveSight, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->wAttackRange, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->dwDropItemVnum, csvTable.AsStringByIndex(col++)); //32
str_to_number(mobTable->dwResurrectionVnum, csvTable.AsStringByIndex(col++));
for (int i = 0; i < MOB_ENCHANTS_MAX_NUM; ++i)
str_to_number(mobTable->cEnchants[i], csvTable.AsStringByIndex(col++));
for (int i = 0; i < MOB_RESISTS_MAX_NUM; ++i)
str_to_number(mobTable->cResists[i], csvTable.AsStringByIndex(col++));
str_to_number(mobTable->fDamMultiply, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->dwSummonVnum, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->dwDrainSP, csvTable.AsStringByIndex(col++));
//Mob_Color
++col;
str_to_number(mobTable->dwPolymorphItemVnum, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[0].bLevel, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[0].dwVnum, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[1].bLevel, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[1].dwVnum, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[2].bLevel, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[2].dwVnum, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[3].bLevel, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[3].dwVnum, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[4].bLevel, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->Skills[4].dwVnum, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bBerserkPoint, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bStoneSkinPoint, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bGodSpeedPoint, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bDeathBlowPoint, csvTable.AsStringByIndex(col++));
str_to_number(mobTable->bRevivePoint, csvTable.AsStringByIndex(col++));
sys_log(0, "MOB #%-5d %-24s level: %-3u rank: %u empire: %d", mobTable->dwVnum, mobTable->szLocaleName, mobTable->bLevel, mobTable->bRank, mobTable->bEmpire);
return true;
}
bool Set_Proto_Item_Table(TItemTable *itemTable, cCsvTable &csvTable,std::map<int,const char*> &nameMap)
{
int col = 0;
int dataArray[33];
for (unsigned int i=0; i<sizeof(dataArray)/sizeof(dataArray[0]);i++) { //Game-DB SRC Warning Fix 37
int validCheck = 0;
if (i==2) {
dataArray[i] = get_Item_Type_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==3) {
dataArray[i] = get_Item_SubType_Value(dataArray[i-1], csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==5) {
dataArray[i] = get_Item_AntiFlag_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==6) {
dataArray[i] = get_Item_Flag_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==7) {
dataArray[i] = get_Item_WearFlag_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==8) {
dataArray[i] = get_Item_Immune_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==14) {
dataArray[i] = get_Item_LimitType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==16) {
dataArray[i] = get_Item_LimitType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==18) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==20) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else if (i==22) {
dataArray[i] = get_Item_ApplyType_Value(csvTable.AsStringByIndex(col));
validCheck = dataArray[i];
} else {
str_to_number(dataArray[i], csvTable.AsStringByIndex(col));
}
if (validCheck == -1)
{
std::ostringstream dataStream;
for (unsigned int j = 0; j < i; ++j) //Game-DB SRC Warning Fix 38
dataStream << dataArray[j] << ",";
//fprintf(stderr, "ItemProto Reading Failed : Invalid value.\n");
sys_err("ItemProto Reading Failed : Invalid value. (index: %d, col: %d, value: %s)", i, col, csvTable.AsStringByIndex(col));
sys_err("\t%d ~ %d Values: %s", 0, i, dataStream.str().c_str());
exit(0);
}
col = col + 1;
}
// vnum ¹× vnum range Àбâ.
{
std::string s(csvTable.AsStringByIndex(0));
unsigned int pos = s.find("~"); //Game-DB SRC Warning Fix 39
// vnum Çʵ忡 '~'°¡ ¾ø´Ù¸é Æнº
if (std::string::npos == pos)
{
itemTable->dwVnum = dataArray[0];
itemTable->dwVnumRange = 0;
}
else
{
std::string s_start_vnum (s.substr(0, pos));
std::string s_end_vnum (s.substr(pos +1 ));
int start_vnum = atoi(s_start_vnum.c_str());
int end_vnum = atoi(s_end_vnum.c_str());
if (0 == start_vnum || (0 != end_vnum && end_vnum < start_vnum))
{
sys_err ("INVALID VNUM %s", s.c_str());
return false;
}
itemTable->dwVnum = start_vnum;
itemTable->dwVnumRange = end_vnum - start_vnum;
}
}
strlcpy(itemTable->szName, csvTable.AsStringByIndex(1), sizeof(itemTable->szName));
//Áö¿ªº° À̸§ ³Ö¾îÁÖ±â.
map<int,const char*>::iterator it;
it = nameMap.find(itemTable->dwVnum);
if (it != nameMap.end()) {
const char * localeName = it->second;
strlcpy(itemTable->szLocaleName, localeName, sizeof (itemTable->szLocaleName));
} else {
strlcpy(itemTable->szLocaleName, itemTable->szName, sizeof (itemTable->szLocaleName));
}
itemTable->bType = dataArray[2];
itemTable->bSubType = dataArray[3];
itemTable->bSize = dataArray[4];
itemTable->dwAntiFlags = dataArray[5];
itemTable->dwFlags = dataArray[6];
itemTable->dwWearFlags = dataArray[7];
itemTable->dwImmuneFlag = dataArray[8];
itemTable->dwGold = dataArray[9];
itemTable->dwShopBuyPrice = dataArray[10];
itemTable->dwRefinedVnum = dataArray[11];
itemTable->wRefineSet = dataArray[12];
itemTable->bAlterToMagicItemPct = dataArray[13];
itemTable->cLimitRealTimeFirstUseIndex = -1;
itemTable->cLimitTimerBasedOnWearIndex = -1;
int i;
for (i = 0; i < ITEM_LIMIT_MAX_NUM; ++i)
{
itemTable->aLimits[i].bType = dataArray[14+i*2];
itemTable->aLimits[i].lValue = dataArray[15+i*2];
if (LIMIT_REAL_TIME_START_FIRST_USE == itemTable->aLimits[i].bType)
itemTable->cLimitRealTimeFirstUseIndex = (char)i;
if (LIMIT_TIMER_BASED_ON_WEAR == itemTable->aLimits[i].bType)
itemTable->cLimitTimerBasedOnWearIndex = (char)i;
}
for (i = 0; i < ITEM_APPLY_MAX_NUM; ++i)
{
itemTable->aApplies[i].bType = dataArray[18+i*2];
itemTable->aApplies[i].lValue = dataArray[19+i*2];
}
for (i = 0; i < ITEM_VALUES_MAX_NUM; ++i)
itemTable->alValues[i] = dataArray[24+i];
//column for 'Specular'
itemTable->bGainSocketPct = dataArray[31];
itemTable->sAddonType = dataArray[32];
//test
str_to_number(itemTable->bWeight, "0");
return true;
}
#endif
DB item_proto dosyamın formatını incelemek isterseniz ;
Kod:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for item_proto
-- ----------------------------
DROP TABLE IF EXISTS `item_proto`;
CREATE TABLE `item_proto` (
`vnum` int(11) UNSIGNED NOT NULL DEFAULT 0,
`vnum_range` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'No TXT DB',
`name` varbinary(38) NOT NULL DEFAULT 'Noname ',
`locale_name` varbinary(38) NOT NULL DEFAULT 'Noname ',
`type` tinyint(2) NOT NULL DEFAULT 0,
`subtype` tinyint(2) NOT NULL DEFAULT 0,
`weight` tinyint(3) NULL DEFAULT 0,
`size` tinyint(3) NULL DEFAULT 0,
`antiflag` int(11) NULL DEFAULT 0,
`flag` int(11) NULL DEFAULT 0,
`wearflag` int(11) NULL DEFAULT 0,
`immuneflag` set('PARA','CURSE','STUN','SLEEP','SLOW','POISON','TERROR') CHARACTER SET big5 COLLATE big5_chinese_ci NOT NULL DEFAULT '',
`gold` int(11) NULL DEFAULT 0,
`shop_buy_price` int(10) UNSIGNED NOT NULL DEFAULT 0,
`refined_vnum` int(10) UNSIGNED NOT NULL DEFAULT 0,
`refine_set` smallint(11) UNSIGNED NOT NULL DEFAULT 0,
`refine_set2` smallint(5) UNSIGNED NOT NULL DEFAULT 0,
`magic_pct` tinyint(4) NOT NULL DEFAULT 0,
`limittype0` tinyint(4) NULL DEFAULT 0,
`limitvalue0` int(11) NULL DEFAULT 0,
`limittype1` tinyint(4) NULL DEFAULT 0,
`limitvalue1` int(11) NULL DEFAULT 0,
`applytype0` tinyint(4) NULL DEFAULT 0,
`applyvalue0` int(11) NULL DEFAULT 0,
`applytype1` tinyint(4) NULL DEFAULT 0,
`applyvalue1` int(11) NULL DEFAULT 0,
`applytype2` tinyint(4) NULL DEFAULT 0,
`applyvalue2` int(11) NULL DEFAULT 0,
`value0` int(11) NULL DEFAULT 0,
`value1` int(11) NULL DEFAULT 0,
`value2` int(11) NULL DEFAULT 0,
`value3` int(11) NULL DEFAULT 0,
`value4` int(11) NULL DEFAULT 0,
`value5` int(11) NULL DEFAULT 0,
`socket0` int(10) NULL DEFAULT -1,
`socket1` int(10) NULL DEFAULT -1,
`socket2` int(10) NULL DEFAULT -1,
`socket3` int(10) NULL DEFAULT -1,
`socket4` int(10) NULL DEFAULT -1,
`socket5` int(10) NULL DEFAULT -1,
`specular` tinyint(4) NOT NULL DEFAULT 0,
`socket_pct` tinyint(4) NOT NULL DEFAULT 0,
`addon_type` smallint(6) NOT NULL DEFAULT 0,
PRIMARY KEY (`vnum`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = big5 COLLATE = big5_chinese_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of item_proto
-- ----------------------------
INSERT INTO `item_proto` VALUES (1, 0, 0xB5B7B2D9B7AFB9CC, 0x59616E67, 9, 0, 0, 1, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, 0, 0, 0);
INSERT INTO `item_proto` VALUES (2, 0, 0xC7D1B1B9B9ABBDD6B9F6C1AF, 0x54FC726BE7652053FC72FC6D, 0, 0, 0, 1, 0, 0, 0, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, 0, 0, 0);
INSERT INTO `item_proto` VALUES (10, 0, 0xB5B52B30, 0x4BFD6CFDE72B30, 1, 0, 0, 2, 32, 1, 16, '', 0, 0, 11, 1, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 0, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (11, 0, 0xB5B52B31, 0x4BFD6CFDE72B31, 1, 0, 0, 2, 32, 1, 16, '', 100, 100, 12, 2, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 7, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (12, 0, 0xB5B52B32, 0x4BFD6CFDE72B32, 1, 0, 0, 2, 32, 1, 16, '', 100, 100, 13, 3, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 14, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (13, 0, 0xB5B52B33, 0x4BFD6CFDE72B33, 1, 0, 0, 2, 32, 1, 16, '', 100, 150, 14, 4, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 21, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (14, 0, 0xB5B52B34, 0x4BFD6CFDE72B34, 1, 0, 0, 2, 32, 1, 16, '', 100, 150, 15, 5, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 28, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (15, 0, 0xB5B52B35, 0x4BFD6CFDE72B35, 1, 0, 0, 2, 32, 1, 16, '', 100, 200, 16, 6, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 35, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (16, 0, 0xB5B52B36, 0x4BFD6CFDE72B36, 1, 0, 0, 2, 32, 1, 16, '', 100, 250, 17, 7, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 42, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (17, 0, 0xB5B52B37, 0x4BFD6CFDE72B37, 1, 0, 0, 2, 32, 1, 16, '', 100, 350, 18, 8, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 49, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (18, 0, 0xB5B52B38, 0x4BFD6CFDE72B38, 1, 0, 0, 2, 32, 1, 16, '', 100, 500, 19, 9, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 56, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (19, 0, 0xB5B52B39, 0x4BFD6CFDE72B39, 1, 0, 0, 2, 32, 1, 16, '', 100, 750, 0, 0, 0, 15, 1, 0, 0, 0, 7, 22, 0, 0, 0, 0, 0, 15, 19, 13, 15, 63, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (20, 0, 0xC0E5B0CB2B30, 0x557A756E204BFD6CFDE72B30, 1, 0, 0, 2, 32, 1, 16, '', 400, 400, 21, 1, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 0, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (21, 0, 0xC0E5B0CB2B31, 0x557A756E204BFD6CFDE72B31, 1, 0, 0, 2, 32, 1, 16, '', 400, 500, 22, 2, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 7, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (22, 0, 0xC0E5B0CB2B32, 0x557A756E204BFD6CFDE72B32, 1, 0, 0, 2, 32, 1, 16, '', 400, 500, 23, 3, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 14, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (23, 0, 0xC0E5B0CB2B33, 0x557A756E204BFD6CFDE72B33, 1, 0, 0, 2, 32, 1, 16, '', 400, 500, 24, 4, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 21, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (24, 0, 0xC0E5B0CB2B34, 0x557A756E204BFD6CFDE72B34, 1, 0, 0, 2, 32, 1, 16, '', 400, 500, 25, 5, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 28, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (25, 0, 0xC0E5B0CB2B35, 0x557A756E204BFD6CFDE72B35, 1, 0, 0, 2, 32, 1, 16, '', 400, 1000, 26, 6, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 35, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (26, 0, 0xC0E5B0CB2B36, 0x557A756E204BFD6CFDE72B36, 1, 0, 0, 2, 32, 1, 16, '', 400, 1000, 27, 7, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 42, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (27, 0, 0xC0E5B0CB2B37, 0x557A756E204BFD6CFDE72B37, 1, 0, 0, 2, 32, 1, 16, '', 400, 1500, 28, 8, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 49, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (28, 0, 0xC0E5B0CB2B38, 0x557A756E204BFD6CFDE72B38, 1, 0, 0, 2, 32, 1, 16, '', 400, 2000, 29, 9, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 56, -1, -1, -1, -1, -1, -1, 0, 1, 0);
INSERT INTO `item_proto` VALUES (29, 0, 0xC0E5B0CB2B39, 0x557A756E204BFD6CFDE72B39, 1, 0, 0, 2, 32, 1, 16, '', 400, 3000, 0, 0, 0, 15, 1, 5, 0, 0, 7, 27, 0, 0, 0, 0, 0, 13, 15, 15, 19, 63, -1, -1, -1, -1, -1, -1, 0, 1, 0);