-Add max hpsp table, (Offi) thx Daegaladh.
-Cleanup code: --Fix sv_read line limitation to 1024char, now limited to 512char per column --Change db read output to display number of line read --Remove code duplicated that was acting like sv_read --Move job_var[JOB_COUNT] into 1struct job_info. --Move job related db into pc.c instead status, and those in pc that affect all into status git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17391 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
5ba50d12a5
commit
185b6b2d5e
@ -1,45 +1,46 @@
|
||||
// Monster Chat Database
|
||||
//
|
||||
// Structure of Database:
|
||||
// Line_ID,Color_Code,Dialog
|
||||
// Line_ID#Color_Code#Dialog
|
||||
|
||||
1#0xFF0000#Weakling! Challenge me if you have any courage!
|
||||
2#0xFF0000#Impressive! I wonder how far your recklessness will take you.
|
||||
3#0xFF0000#I almost pity how outmatched you are against me. Now prepare for my attack!
|
||||
4#0xFF0000#My loyal servants! Welcome them with a painful death!
|
||||
5#0xFF0000#Don't you run away!
|
||||
6#0xFF0000#You worthless humans. Your so-called holy powers have no effect on me!
|
||||
7#0xFF0000#Useless underlings!...Well, that's fine, I have more weapons to use and dispose.
|
||||
8#0xFF0000#Pray to your gods!
|
||||
9#0xFF0000#Do you still think you're a match to me?!
|
||||
10#0xFF0000#Vanish!
|
||||
11#0xFF0000#Let's see how long you can endure my power!
|
||||
12#0xFF0000#Is this all you've got?!
|
||||
13#0xFF0000#You're tickling me!
|
||||
14#0xFF0000#This is how you attack? Watch and learn, weaklings!
|
||||
15#0xFF0000#It's time to finish the game!
|
||||
16#0xFF0000#Oh, you're stronger than I thought!
|
||||
17#0xFF0000#No, this can't be happening! I'm Satan Morroc, Demon King of Destruction!
|
||||
18#0xFF0000#I can never die! I'll be coming back for you!
|
||||
19#0xFF0000#I was born to conquer this world! None shall stop me!
|
||||
20#0xFF0000#Your days are numbered!
|
||||
21#0xFF0000#Pulse Strike! My fingers tear steel!
|
||||
22#0xFF0000#Hahaha, tell me who I am! I'm Baphomet, the Heir of Hell!
|
||||
23#0xFF0000#Enjoy your time on the mortal plane while you can, your hope will soon turn into despair!
|
||||
24#0xFF0000#When are you going to learn your lesson? In death?
|
||||
25#0xFF0000#No... I can't lose! I won't beg for my life! I'm not running away! I don't accept this as defeat!
|
||||
26#0xFF0000#Argh... I... I'm weakening...
|
||||
27#0xFF0000#What do you want from me?
|
||||
28#0xFF0000#No! I didn't do this! He's the one who planned out all this!
|
||||
29#0xFF0000#I just wanted to find peace..! That's why I have been fleeing away!
|
||||
30#0xFF0000#Ahhhh!!! Now, I just have to kill you all!
|
||||
31#0xFF0000#Annoying flies!! Get off of me!
|
||||
32#0xFF0000#Suffer in Hell!
|
||||
33#0xFF0000#Mwahahaha! Taste the anger of the earth!!!
|
||||
34#0xFF0000#No... I won't accept this as defeat!
|
||||
35#0xFF0000#Will it ease your loneliness to hit me? Why don't you stay here with me forever, human?
|
||||
36#0xFF0000#You will forgot the meaning of time. I wonder how long can you last in here...
|
||||
37#0xFF0000#Is there anyone waiting for you outside of here? Throw them all away, you are mine now...
|
||||
38#0xFF0000#Discard your life and stay confined here. You will yearn for freedom in captivity !!
|
||||
39#0xFF0000#How much will the outside world change if you stay here in solitude for one thousand years?
|
||||
40#0xFF0000#Yes! Yearn for your freedom from this confined place, your captivity here will be permanent !!
|
||||
|
||||
1,0xFF0000,Weakling! Challenge me if you have any courage!
|
||||
2,0xFF0000,Impressive! I wonder how far your recklessness will take you.
|
||||
3,0xFF0000,I almost pity how outmatched you are against me. Now prepare for my attack!
|
||||
4,0xFF0000,My loyal servants! Welcome them with a painful death!
|
||||
5,0xFF0000,Don't you run away!
|
||||
6,0xFF0000,You worthless humans. Your so-called holy powers have no effect on me!
|
||||
7,0xFF0000,Useless underlings!...Well, that's fine, I have more weapons to use and dispose.
|
||||
8,0xFF0000,Pray to your gods!
|
||||
9,0xFF0000,Do you still think you're a match to me?!
|
||||
10,0xFF0000,Vanish!
|
||||
11,0xFF0000,Let's see how long you can endure my power!
|
||||
12,0xFF0000,Is this all you've got?!
|
||||
13,0xFF0000,You're tickling me!
|
||||
14,0xFF0000,This is how you attack? Watch and learn, weaklings!
|
||||
15,0xFF0000,It's time to finish the game!
|
||||
16,0xFF0000,Oh, you're stronger than I thought!
|
||||
17,0xFF0000,No, this can't be happening! I'm Satan Morroc, Demon King of Destruction!
|
||||
18,0xFF0000,I can never die! I'll be coming back for you!
|
||||
19,0xFF0000,I was born to conquer this world! None shall stop me!
|
||||
20,0xFF0000,Your days are numbered!
|
||||
21,0xFF0000,Pulse Strike! My fingers tear steel!
|
||||
22,0xFF0000,Hahaha, tell me who I am! I'm Baphomet, the Heir of Hell!
|
||||
23,0xFF0000,Enjoy your time on the mortal plane while you can, your hope will soon turn into despair!
|
||||
24,0xFF0000,When are you going to learn your lesson? In death?
|
||||
25,0xFF0000,No... I can't lose! I won't beg for my life! I'm not running away! I don't accept this as defeat!
|
||||
26,0xFF0000,Argh... I... I'm weakening...
|
||||
27,0xFF0000,What do you want from me?
|
||||
28,0xFF0000,No! I didn't do this! He's the one who planned out all this!
|
||||
29,0xFF0000,I just wanted to find peace..! That's why I have been fleeing away!
|
||||
30,0xFF0000,Ahhhh!!! Now, I just have to kill you all!
|
||||
31,0xFF0000,Annoying flies!! Get off of me!
|
||||
32,0xFF0000,Suffer in Hell!
|
||||
33,0xFF0000,Mwahahaha! Taste the anger of the earth!!!
|
||||
34,0xFF0000,No... I won't accept this as defeat!
|
||||
35,0xFF0000,Will it ease your loneliness to hit me? Why don't you stay here with me forever, human?
|
||||
36,0xFF0000,You will forgot the meaning of time. I wonder how long can you last in here...
|
||||
37,0xFF0000,Is there anyone waiting for you outside of here? Throw them all away, you are mine now...
|
||||
38,0xFF0000,Discard your life and stay confined here. You will yearn for freedom in captivity !!
|
||||
39,0xFF0000,How much will the outside world change if you stay here in solitude for one thousand years?
|
||||
40,0xFF0000,Yes! Yearn for your freedom from this confined place, your captivity here will be permanent !!
|
||||
|
165
db/pre-re/job_maxhpsp_db.txt
Normal file
165
db/pre-re/job_maxhpsp_db.txt
Normal file
@ -0,0 +1,165 @@
|
||||
//MaxHP & MaxSP tables format:
|
||||
//Max Level,Class list,Type,Max value for Lv 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99
|
||||
//Type (0 - MaxHP; 1 - MaxSP)
|
||||
//===================================
|
||||
// Pre-Renewal MaxHP & MaxSP Database
|
||||
//===================================
|
||||
|
||||
//MaxHP - Novice/Super Novice/Novice High/Baby Novice/Baby Super Novice
|
||||
1,99,0:23:4001:4023:4045,0,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275,280,285,290,295,300,305,310,315,320,325,330,335,340,345,350,355,360,365,370,375,380,385,390,395,400,405,410,415,420,425,430,435,440,445,450,455,460,465,470,475,480,485,490,495,500,505,510,515,520,525,530
|
||||
|
||||
//MaxHP - Swordman/Swordman High/Baby Swordman
|
||||
1,99,1:4002:4024,0,40,46,53,61,70,79,89,100,111,123,136,149,163,178,194,210,227,245,263,282,302,322,343,365,388,411,435,460,485,511,538,565,593,622,652,682,713,745,777,810,844,878,913,949,986,1023,1061,1100,1139,1179,1220,1261,1303,1346,1390,1434,1479,1525,1571,1618,1666,1714,1763,1813,1864,1915,1967,2020,2073,2127,2182,2237,2293,2350,2408,2466,2525,2585,2645,2706,2768,2830,2893,2957,3022,3087,3153,3220,3287,3355,3424,3493,3563,3634,3706,3778,3851,3925,3999
|
||||
|
||||
//MaxHP - Magician/Magician High/Baby Magician
|
||||
1,99,2:4003:4025,0,40,46,52,58,65,72,79,86,94,102,110,119,128,137,147,157,167,177,188,199,210,222,234,246,259,272,285,298,312,326,340,355,370,385,401,417,433,449,466,483,500,518,536,554,573,592,611,630,650,670,690,711,732,753,775,797,819,841,864,887,910,934,958,982,1007,1032,1057,1082,1108,1134,1160,1187,1214,1241,1269,1297,1325,1353,1382,1411,1440,1470,1500,1530,1561,1592,1623,1654,1686,1718,1750,1783,1816,1849,1883,1917,1951,1985,2020
|
||||
|
||||
//MaxHP - Archer/Thief/Archer High/Thief High/Baby Archer/Baby Thief
|
||||
1,99,3:6:4004:4007:4026:4029,0,40,46,53,60,68,76,85,94,104,114,125,136,148,160,173,186,200,214,229,244,260,276,293,310,328,346,365,384,404,424,445,466,488,510,533,556,580,604,629,654,680,706,733,760,788,816,845,874,904,934,965,996,1028,1060,1093,1126,1160,1194,1229,1264,1300,1336,1373,1410,1448,1486,1525,1564,1604,1644,1685,1726,1768,1810,1853,1896,1940,1984,2029,2074,2120,2166,2213,2260,2308,2356,2405,2454,2504,2554,2605,2656,2708,2760,2813,2866,2920,2974,3029
|
||||
|
||||
//MaxHP - Acolyte/Merchant/Acolyte High/Merchant High/Baby Acolyte/Baby Merchant
|
||||
1,99,4:5:4005:4006:4027:4028,0,40,46,52,59,66,73,81,89,98,107,116,126,136,147,158,169,181,193,206,219,232,246,260,275,290,305,321,337,354,371,388,406,424,443,462,481,501,521,542,563,584,606,628,651,674,697,721,745,770,795,820,846,872,899,926,953,981,1009,1038,1067,1096,1126,1156,1187,1218,1249,1281,1313,1346,1379,1412,1446,1480,1515,1550,1585,1621,1657,1694,1731,1768,1806,1844,1883,1922,1961,2001,2041,2082,2123,2164,2206,2248,2291,2334,2377,2421,2465,2510
|
||||
|
||||
//MaxHP - Knight/Knight (Peco)/Lord Knight/Lord Knight (Peco)/Baby Knight/Baby Knight (Peco)
|
||||
1,99,7:13:4008:4014:4030:4036,0,40,48,58,69,82,96,112,129,148,168,190,213,238,264,292,321,352,384,418,453,490,528,568,609,652,696,742,789,838,888,940,993,1048,1104,1162,1221,1282,1344,1408,1473,1540,1608,1678,1749,1822,1896,1972,2049,2128,2208,2290,2373,2458,2544,2632,2721,2812,2904,2998,3093,3190,3288,3388,3489,3592,3696,3802,3909,4018,4128,4240,4353,4468,4584,4702,4821,4942,5064,5188,5313,5440,5568,5698,5829,5962,6096,6232,6369,6508,6648,6790,6933,7078,7224,7372,7521,7672,7824,7978
|
||||
|
||||
//MaxHP - Priest/Sage/High Priest/Professor/Baby Priest/Baby Sage
|
||||
1,99,8:16:4009:4017:4031:4039,0,40,47,54,62,71,81,91,102,114,127,140,154,169,185,201,218,236,255,274,294,315,337,359,382,406,431,456,482,509,537,565,594,624,655,686,718,751,785,819,854,890,927,964,1002,1041,1081,1121,1162,1204,1247,1290,1334,1379,1425,1471,1518,1566,1615,1664,1714,1765,1817,1869,1922,1976,2031,2086,2142,2199,2257,2315,2374,2434,2495,2556,2618,2681,2745,2809,2874,2940,3007,3074,3142,3211,3281,3351,3422,3494,3567,3640,3714,3789,3865,3941,4018,4096,4175,4254
|
||||
|
||||
//MaxHP - Wizard/High Wizard/Baby Wizard
|
||||
1,99,9:4010:4032,0,40,46,53,60,68,76,85,94,104,115,126,138,150,163,176,190,204,219,234,250,267,284,302,320,339,358,378,398,419,441,463,486,509,533,557,582,607,633,659,686,714,742,771,800,830,860,891,922,954,987,1020,1054,1088,1123,1158,1194,1230,1267,1304,1342,1381,1420,1460,1500,1541,1582,1624,1666,1709,1753,1797,1842,1887,1933,1979,2026,2073,2121,2169,2218,2268,2318,2369,2420,2472,2524,2577,2630,2684,2739,2794,2850,2906,2963,3020,3078,3136,3195,3254
|
||||
|
||||
//MaxHP - Blacksmith/Alchemist/Whitesmith/Creator/Baby Blacksmith/Baby Alchemist
|
||||
1,99,10:18:4011:4019:4033:4041,0,40,47,55,64,74,84,95,107,120,134,149,165,182,200,219,238,258,279,301,324,348,373,399,426,454,482,511,541,572,604,637,671,706,742,779,816,854,893,933,974,1016,1059,1103,1148,1194,1240,1287,1335,1384,1434,1485,1537,1590,1644,1699,1754,1810,1867,1925,1984,2044,2105,2167,2230,2294,2358,2423,2489,2556,2624,2693,2763,2834,2906,2979,3052,3126,3201,3277,3354,3432,3511,3591,3672,3754,3836,3919,4003,4088,4174,4261,4349,4438,4528,4619,4710,4802,4895,4989
|
||||
|
||||
//MaxHP - Hunter/Rogue/Sniper/Stalker/Baby Hunter/Baby Rogue
|
||||
1,99,11:17:4012:4018:4034:4040,0,40,47,55,63,72,82,93,105,118,132,146,161,177,194,212,231,250,270,291,313,336,360,385,410,436,463,491,520,550,581,612,644,677,711,746,782,818,855,893,932,972,1013,1055,1097,1140,1184,1229,1275,1322,1370,1418,1467,1517,1568,1620,1673,1726,1780,1835,1891,1948,2006,2065,2124,2184,2245,2307,2370,2434,2499,2564,2630,2697,2765,2834,2904,2974,3045,3117,3190,3264,3339,3415,3491,3568,3646,3725,3805,3886,3968,4050,4133,4217,4302,4388,4475,4562,4650,4739
|
||||
|
||||
//MaxHP - Assassin/Assassin Cross/Baby Assassin
|
||||
1,99,12:4013:4035,0,40,47,55,64,75,87,100,114,129,145,162,180,199,219,241,264,288,313,339,366,394,423,453,484,517,551,586,622,659,697,736,776,817,859,903,948,994,1041,1089,1138,1188,1239,1291,1344,1399,1455,1512,1570,1629,1689,1750,1812,1875,1939,2005,2072,2140,2209,2279,2350,2422,2495,2569,2644,2721,2799,2878,2958,3039,3121,3204,3288,3373,3459,3547,3636,3726,3817,3909,4002,4096,4191,4287,4384,4483,4583,4684,4786,4889,4993,5098,5204,5311,5419,5529,5640,5752,5865,5979
|
||||
|
||||
//MaxHP - Crusader/Crusader (Peco)/Paladin/Paladin (Peco)/Baby Crusader/Baby Crusader (Peco)
|
||||
1,99,14:21:4015:4022:4037:4044,0,40,47,56,62,81,94,108,128,147,165,184,204,225,247,271,296,322,349,377,406,436,467,499,532,567,603,640,678,717,757,798,840,883,927,973,1020,1068,1117,1167,1218,1270,1323,1377,1432,1489,1547,1606,1666,1727,1789,1852,1916,1981,2047,2115,2184,2254,2325,2397,2470,2544,2619,2695,2772,2851,2931,3012,3094,3177,3261,3346,3432,3519,3607,3697,3788,3880,3973,4067,4162,4258,4355,4453,4552,4653,4755,4858,4962,5067,5173,5280,5388,5497,5607,5719,5832,5946,6061,6177
|
||||
|
||||
//MaxHP - Monk/Champion/Baby Monk
|
||||
1,99,15:4016:4038,0,40,47,55,64,74,84,95,107,120,134,149,165,182,200,219,238,258,306,329,354,379,406,433,462,491,521,551,583,615,649,683,719,755,793,831,870,909,950,991,1034,1077,1122,1167,1214,1261,1309,1357,1407,1457,1509,1561,1615,1669,1725,1781,1838,1895,1954,2013,2074,2135,2198,2261,2326,2391,2457,2523,2591,2659,2729,2799,2871,2943,3017,3091,3166,3241,3318,3395,3474,3553,3634,3715,3798,3881,3965,4049,4135,4221,4309,4397,4487,4577,4669,4761,4854,4947,5042,5137
|
||||
|
||||
//MaxHP - Bard/Dancer/Clown/Gypsy/Baby Bard/Baby Dancer
|
||||
1,99,19:20:4020:4021:4042:4043,0,40,47,54,62,71,81,91,102,114,127,140,154,169,180,196,212,224,242,260,278,296,316,330,350,371,393,415,438,451,477,503,530,558,587,616,646,677,709,741,774,808,843,878,914,951,989,1027,1066,1106,1147,1188,1230,1273,1317,1361,1406,1452,1499,1546,1594,1643,1693,1743,1794,1846,1899,1952,2006,2061,2117,2173,2230,2288,2347,2406,2466,2527,2589,2651,2714,2778,2843,2908,2974,3041,3109,3177,3246,3316,3387,3458,3530,3603,3677,3751,3826,3902,3979,4056
|
||||
|
||||
//MaxHP - Gunslinger
|
||||
1,99,24,0,40,47,54,61,69,77,85,94,103,202,212,222,232,243,254,265,277,289,301,316,331,346,364,382,400,420,440,460,490,520,550,580,610,650,680,710,740,770,800,830,865,890,925,955,990,1025,1050,1080,1110,1145,1180,1215,1275,1335,1395,1455,1515,1575,1635,1695,1760,1820,1885,1950,2015,2080,2145,2210,2275,2340,2410,2480,2550,2620,2690,2760,2830,2900,2970,3040,3115,3190,3265,3340,3415,3490,3565,3640,3715,3790,3870,3950,4030,4110,4190,4270,4350,4430,4510
|
||||
|
||||
//MaxHP - Ninja
|
||||
1,99,25,0,40,47,54,61,69,77,85,94,103,202,212,222,232,243,254,265,277,289,301,316,331,346,364,382,400,420,440,460,482,504,526,548,572,596,620,646,672,698,726,754,784,814,844,876,908,940,975,1010,1100,1140,1180,1220,1260,1300,1340,1385,1430,1475,1520,1565,1615,1665,1715,1765,1815,1880,1935,1990,2045,2100,2160,2220,2280,2340,2400,2460,2520,2580,2640,2705,2770,2835,2900,2965,3030,3100,3170,3240,3310,3380,3455,3530,3605,3680,3760,3840,3920,4000,4080
|
||||
|
||||
//MaxHP - Taekwon
|
||||
1,99,4046,0,40,46,53,61,70,79,89,100,111,123,136,149,163,178,194,210,227,245,263,282,302,322,343,365,388,411,435,460,485,511,538,565,593,622,652,682,713,745,777,810,844,878,913,949,986,1023,1061,1100,1139,1179,1220,1261,1303,1346,1390,1434,1479,1525,1571,1618,1666,1714,1763,1813,1864,1915,1967,2020,2073,2127,2137,2147,2157,2167,2177,2187,2197,2200,2210,2230,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3200
|
||||
|
||||
//MaxHP - Star Knight/Star Knight (flying)
|
||||
1,99,4047:4048,0,40,47,55,64,74,84,95,107,120,134,149,165,182,200,219,238,258,306,329,354,379,406,433,462,491,521,551,583,615,649,683,719,755,793,831,870,909,950,991,1034,1077,1122,1167,1214,1261,1309,1357,1407,1457,1509,1561,1615,1669,1725,1781,1838,1895,1954,2013,2074,2135,2198,2261,2326,2391,2457,2523,2591,2659,2670,2680,2690,2700,2710,2720,2730,2740,2750,2760,3000,3020,3040,3060,3080,3100,3120,3140,3160,3180,3455,3524,3593,3663,3734,3806,3878,3951,4025,4500
|
||||
|
||||
//MaxHP - Soul Linker
|
||||
1,99,4049,0,40,47,54,62,71,81,91,102,114,127,140,154,169,185,201,218,236,255,274,294,315,337,359,382,406,431,456,482,509,537,565,594,624,655,686,718,751,785,819,854,890,927,964,1002,1041,1081,1121,1162,1204,1247,1290,1334,1379,1425,1471,1518,1566,1615,1664,1714,1765,1817,1869,1922,1976,2031,2086,2142,2199,2257,2275,2294,2314,2335,2356,2378,2401,2425,2449,2874,2890,2907,2924,2942,2971,2991,3011,3032,3054,3567,3590,3614,3649,3675,3701,3728,3756,3800,4250
|
||||
|
||||
//MaxHP - Munak/Bongun
|
||||
1,99,4050,0,40,46,52,59,66,73,81,89,98,107,116,126,136,147,158,169,181,193,206,219,232,246,260,275,290,305,321,337,354,371,388,406,424,443,462,481,501,521,542,563,584,606,628,651,674,697,721,745,770,795,820,846,872,899,926,953,981,1009,1038,1067,1096,1126,1156,1187,1218,1249,1281,1313,1346,1379,1412,1446,1480,1515,1550,1585,1621,1657,1694,1731,1768,1806,1844,1883,1922,1961,2001,2041,2082,2123,2164,2206,2248,2291,2334,2377,2421,2465,2510
|
||||
|
||||
//MaxHP - Death Knight
|
||||
1,99,4051,0,40,48,58,69,82,96,112,129,148,168,190,213,238,264,292,321,352,384,418,453,490,528,568,609,652,696,742,789,838,888,940,993,1048,1104,1162,1221,1282,1344,1408,1473,1540,1608,1678,1749,1822,1896,1972,2049,2128,2208,2290,2373,2458,2544,2632,2721,2812,2904,2998,3093,3190,3288,3388,3489,3592,3696,3802,3909,4018,4128,4240,4353,4468,4584,4702,4821,4942,5064,5188,5313,5440,5568,5698,5829,5962,6096,6232,6369,6508,6648,6790,6933,7078,7224,7372,7521,7672,7824,7978
|
||||
|
||||
//MaxHP - Dark Collector
|
||||
1,99,4052,0,40,47,54,62,71,81,91,102,114,127,140,154,169,185,201,218,236,255,274,294,315,337,359,382,406,431,456,482,509,537,565,594,624,655,686,718,751,785,819,854,890,927,964,1002,1041,1081,1121,1162,1204,1247,1290,1334,1379,1425,1471,1518,1566,1615,1664,1714,1765,1817,1869,1922,1976,2031,2086,2142,2199,2257,2315,2374,2434,2495,2556,2618,2681,2745,2809,2874,2940,3007,3074,3142,3211,3281,3351,3422,3494,3567,3640,3714,3789,3865,3941,4018,4096,4175,4254
|
||||
|
||||
//MaxHP - Rune Knight/Rune Knight_T/Rune Knight (Dragon)/Rune Knight (Dragon)_T
|
||||
99,150,4054:4060:4080:4081:4096:4109,0,8100,8133,8242,8352,8464,8576,8690,8804,8920,9036,9154,9273,9393,9514,9636,9759,9883,10008,10134,10261,10389,10518,10648,10779,10912,11045,11180,11315,11452,11589,11728,11868,12009,12151,12294,12438,12583,12729,12876,13024,13173,13323,13474,13626,13780,13934,14090,14246,14404,14562,14722,14883
|
||||
|
||||
//MaxHP - Warlock/Warlock_T
|
||||
99,150,4055:4061:4097,0,3200,3313,3383,3455,3528,3601,3675,3749,3824,3899,3975,4051,4129,4208,4287,4367,4447,4528,4609,4691,4773,4857,4941,5026,5112,5198,5285,5372,5460,5548,5638,5728,5819,5911,6003,6096,6189,6283,6377,6473,6569,6666,6763,6861,6960,7059,7159,7259,7361,7463,7566,7669
|
||||
|
||||
//MaxHP - Ranger/Ranger_T/Minstrel/Wanderer/Minstrel_T/Wanderer_T/Ranger (Warg)/Ranger (Warg)_T
|
||||
99,150,4056:4062:4068:4069:4075:4076:4084:4085:4098:4104:4105:4111,0,4800,4828,4918,5009,5101,5194,5288,5382,5477,5573,5670,5768,5867,5967,6068,6170,6273,6377,6482,6588,6694,6801,6909,7018,7128,7239,7351,7464,7578,7693,7809,7926,8044,8162,8281,8401,8522,8644,8767,8891,9016,9142,9269,9397,9526,9656,9786,9917,10049,10182,10316,10451
|
||||
|
||||
//MaxHP - Arch Bishop/Arch Bishop_T
|
||||
99,150,4057:4063:4099,0,4300,4333,4412,4491,4570,4649,4728,4807,4886,4965,5044,5123,5202,5281,5360,5439,5518,5597,5676,5755,5834,5913,5992,6071,6150,6229,6308,6387,6466,6545,6624,6703,6782,6861,6940,7019,7098,7177,7256,7335,7414,7493,7572,7651,7730,7809,7888,7967,8046,8125,8204,8283
|
||||
|
||||
//MaxHP - Mechanic/Mechanic_T/Sura/Sura_T/Mechanic (Mado Gear)/Mechanic (Mado Gear)_T
|
||||
99,150,4058:4064:4086:4087:4100:4112,0,5807,5844,5952,6061,6172,6283,6396,6510,6625,6741,6857,6974,7093,7212,7333,7455,7578,7702,7828,7954,8081,8208,8337,8467,8598,8730,8864,8998,9134,9271,9408,9546,9685,9825,9967,10109,10253,10398,10544,10691,10838,10987,11136,11287,11439,11592,11746,11901,12057,12215,12372,12531
|
||||
|
||||
//MaxHP - Guillotine Cross/Guillotine Cross_T/Royal Guard/Shadow Chaser/Royal Guard_T/Shadow Chaser_T/Royal Guard (Gryphon)/Royal Guard (Gryphon)_T
|
||||
99,150,4059:4065:4066:4072:4073:4079:4082:4083:4101:4102:4108:4110,0,6050,6093,6208,6324,6441,6559,6678,6798,6920,7043,7167,7292,7418,7545,7673,7802,7932,8063,8196,8330,8465,8601,8738,8876,9015,9155,9296,9438,9582,9727,9873,10020,10168,10317,10467,10618,10770,10923,11078,11234,11391,11549,11708,11868,12029,12191,12354,12518,12684,12851,13019,13188
|
||||
|
||||
//MaxHP - Sorcerer/Sorcerer_T
|
||||
99,150,4067:4074:4103,0,4080,4103,4180,4257,4335,4414,4494,4574,4655,4737,4819,4902,4986,5071,5157,5244,5332,5420,5509,5599,5689,5780,5872,5965,6058,6153,6248,6344,6441,6539,6637,6737,6837,6937,7038,7140,7243,7347,7451,7557,7663,7770,7878,7987,8097,8207,8318,8429,8541,8654,8768,8883
|
||||
|
||||
//MaxHP - Sura/Sura_T
|
||||
99,150,4070:4077:4106,0,5050,5082,5176,5271,5367,5464,5562,5661,5761,5862,5963,6065,6168,6272,6377,6483,6590,6698,6807,6917,7027,7138,7250,7363,7477,7592,7708,7825,7943,8062,8181,8301,8422,8544,8667,8791,8916,9042,9169,9297,9425,9554,9684,9815,9947,10080,10214,10349,10485,10622,10759,10897
|
||||
|
||||
//MaxHP - Genetic/Genetic_T
|
||||
99,150,4071:4078:4107,0,4730,4766,4853,4940,5027,5113,5200,5287,5374,5461,5548,5635,5722,5809,5896,5982,6069,6156,6243,6330,6417,6504,6591,6678,6765,6851,6938,7025,7112,7199,7286,7373,7460,7547,7634,7720,7807,7894,7981,8068,8155,8242,8329,8416,8503,8589,8676,8763,8850,8937,9024,9111
|
||||
|
||||
//MaxSP - Novice/Super Novice/Novice High/Baby Novice/Baby Super Novice
|
||||
1,99,0:23:4001:4023:4045,1,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109
|
||||
|
||||
//MaxSP - Swordman/Archer/Thief/Swordman High/Archer High/Thief High/Baby Swordman/Baby Archer/Baby Thief
|
||||
1,99,1:3:6:4002:4004:4007:4024:4026:4029,1,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208
|
||||
|
||||
//MaxSP - Magician/Bard/Dancer/Magician High/Clown/Gypsy/Baby Magician/Baby Bard/Baby Dancer
|
||||
1,99,2:19:20:4003:4020:4021:4025:4042:4043,1,16,22,28,34,40,46,52,58,64,70,76,82,88,94,100,106,112,118,124,130,136,142,148,154,160,166,172,178,184,190,196,202,208,214,220,226,232,238,244,250,256,262,268,274,280,286,292,298,304,310,316,322,328,334,340,346,352,358,364,370,376,382,388,394,400,406,412,418,424,430,436,442,448,454,460,466,472,478,484,490,496,502,508,514,520,526,532,538,544,550,556,562,568,574,580,586,592,598,604
|
||||
|
||||
//MaxSP - Acolyte/Rogue/Acolyte High/Stalker/Baby Acolyte/Baby Rogue
|
||||
1,99,4:17:4005:4018:4027:4040,1,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275,280,285,290,295,300,305,310,315,320,325,330,335,340,345,350,355,360,365,370,375,380,385,390,395,400,405,410,415,420,425,430,435,440,445,450,455,460,465,470,475,480,485,490,495,500,505
|
||||
|
||||
//MaxSP - Merchant/Knight/Knight (Peco)/Merchant High/Lord Knight/Lord Knight (Peco)/Baby Merchant/Baby Knight/Baby Knight (Peco)
|
||||
1,99,5:7:13:4006:4008:4014:4028:4030:4036,1,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307
|
||||
|
||||
//MaxSP - Priest/High Priest/Baby Priest
|
||||
1,99,8:4009:4031,1,18,26,34,42,50,58,66,74,82,90,98,106,114,122,130,138,146,154,162,170,178,186,194,202,210,218,226,234,242,250,258,266,274,282,290,298,306,314,322,330,338,346,354,362,370,378,386,394,402,410,418,426,434,442,450,458,466,474,482,490,498,506,514,522,530,538,546,554,562,570,578,586,594,602,610,618,626,634,642,650,658,666,674,682,690,698,706,714,722,730,738,746,754,762,770,778,786,794,802
|
||||
|
||||
//MaxSP - Wizard/High Wizard/Baby Wizard
|
||||
1,99,9:4010:4032,1,19,28,37,46,55,64,73,82,91,100,109,118,127,136,145,154,163,172,181,190,199,208,217,226,235,244,253,262,271,280,289,298,307,316,325,334,343,352,361,370,379,388,397,406,415,424,433,442,451,460,469,478,487,496,505,514,523,532,541,550,559,568,577,586,595,604,613,622,631,640,649,658,667,676,685,694,703,712,721,730,739,748,757,766,775,784,793,802,811,820,829,838,847,856,865,874,883,892,901
|
||||
|
||||
//MaxSP - Blacksmith/Hunter/Assassin/Alchemist/Whitesmith/Sniper/Assassin Cross/Creator/Baby Blacksmith/Baby Hunter/Baby Assassin/Baby Alchemist
|
||||
1,99,10:11:12:18:4011:4012:4013:4019:4033:4034:4035:4041,1,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290,294,298,302,306,310,314,318,322,326,330,334,338,342,346,350,354,358,362,366,370,374,378,382,386,390,394,398,402,406
|
||||
|
||||
//MaxSP - Crusader/Monk/Crusader (Peco)/Paladin/Champion/Paladin (Peco)/Baby Crusader/Baby Monk/Baby Crusader (Peco)
|
||||
1,99,14:15:21:4015:4016:4022:4037:4038:4044,1,14,19,24,28,33,38,42,47,52,57,61,66,71,75,80,85,89,94,99,104,108,113,118,122,127,132,136,141,146,151,155,160,165,169,174,179,183,188,193,198,202,207,212,216,221,226,230,235,240,245,249,254,259,263,268,273,277,282,287,292,296,301,306,310,315,320,324,329,334,339,343,348,353,357,362,367,371,376,381,386,390,395,400,404,409,414,418,423,428,433,437,442,447,451,456,461,465,470,475
|
||||
|
||||
//MaxSP - Sage/Professor/Baby Sage
|
||||
1,99,16:4017:4039,1,17,24,31,38,45,52,59,66,73,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,332,339,346,353,360,367,374,381,388,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,514,521,528,535,542,549,556,563,570,577,584,591,598,605,612,619,626,633,640,647,654,661,668,675,682,689,696,703
|
||||
|
||||
//MaxSP - Gunslinger
|
||||
1,99,24,1,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,61,64,67,70,73,76,79,82,85,89,93,97,101,105,109,113,117,121,125,129,131,135,139,141,145,149,153,157,161,165,169,173,177,181,186,191,196,201,206,211,216,221,226,231,236,241,246,251,256,261,266,271,276,281,286,291,296,301,306,312,318,324,336,342,348,354,360,366,372,378,384,390,396,402,408,414,420,426,432,438,444,450,456
|
||||
|
||||
//MaxSP - Ninja
|
||||
1,99,25,1,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,156,161,166,171,176,181,186,191,196,201,206,211,216,221,226,231,236,241,246,251,257,263,269,275,281,287,293,299,305,311,317,323,329,335,341,347,353,359,365,371,378,386,394,402,410,418,426,434,442,450,458,466,474,482,490,498,506,514,522
|
||||
|
||||
//MaxSP - Taekwon
|
||||
1,99,4046,1,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,151,152,153,154,155,156,157,158,159,170,171,172,173,174,175,176,177,178,188,190,190,190,190,190,190,190,190,190,200
|
||||
|
||||
//MaxSP - Star Knight/Star Knight (flying)
|
||||
1,99,4047:4048,1,14,19,24,28,33,38,42,47,52,57,61,66,71,75,80,85,89,94,99,104,108,113,118,122,127,132,136,141,146,151,155,160,165,169,174,179,183,188,193,198,202,207,212,216,221,226,230,235,240,245,249,254,259,263,268,273,277,282,287,292,296,301,306,310,315,320,324,329,334,339,341,343,345,347,349,351,353,355,357,386,388,390,392,394,396,398,400,402,404,430,433,436,439,442,445,448,451,454,500
|
||||
|
||||
//MaxSP - Soul Linker
|
||||
1,99,4049,1,19,28,37,46,55,64,73,82,91,100,109,118,127,136,145,154,163,172,181,190,199,208,217,226,235,244,253,262,271,280,289,298,307,316,325,334,343,352,361,370,379,388,397,406,415,424,433,442,451,460,469,478,487,496,505,514,523,532,541,550,559,568,577,586,595,604,613,622,631,635,640,645,650,655,660,665,670,675,680,730,735,740,745,750,755,760,765,770,775,820,825,830,845,850,855,860,865,870,900
|
||||
|
||||
//MaxSP - Munak/Bongun
|
||||
1,99,4050,1,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275,280,285,290,295,300,305,310,315,320,325,330,335,340,345,350,355,360,365,370,375,380,385,390,395,400,405,410,415,420,425,430,435,440,445,450,455,460,465,470,475,480,485,490,495,500,505
|
||||
|
||||
//MaxSP - Death Knight
|
||||
1,99,4051,1,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307
|
||||
|
||||
//MaxSP - Dark Collector
|
||||
1,99,4052,1,17,24,31,38,45,52,59,66,73,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,332,339,346,353,360,367,374,381,388,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,514,521,528,535,542,549,556,563,570,577,584,591,598,605,612,619,626,633,640,647,654,661,668,675,682,689,696,703
|
||||
|
||||
//MaxSP - Rune Knight/Rune Knight_T/Rune Knight (Dragon)/Rune Knight (Dragon)_T
|
||||
99,150,4054:4060:4080:4081:4096:4109,1,300,310,313,316,319,322,325,328,331,334,337,340,343,346,349,352,355,358,361,364,367,370,373,376,379,382,385,388,391,394,397,400,403,406,409,412,415,418,421,424,427,430,433,436,439,442,445,448,451,454,457,460
|
||||
|
||||
//MaxSP - Warlock/Sorcerer/Genetic/Warlock_T/Sorcerer_T/Genetic_T
|
||||
99,150,4055:4061:4067:4071:4074:4078:4097:4103:4107,1,900,910,919,928,937,946,955,964,973,982,991,1000,1009,1018,1027,1036,1045,1054,1063,1072,1081,1090,1099,1108,1117,1126,1135,1144,1153,1162,1171,1180,1189,1198,1207,1216,1225,1234,1243,1252,1261,1270,1279,1288,1297,1306,1315,1324,1333,1342,1351,1360
|
||||
|
||||
//MaxSP - Arch Bishop/Arch Bishop_T
|
||||
99,150,4057:4063:4099,1,800,810,818,826,834,842,850,858,866,874,882,890,898,906,914,922,930,938,946,954,962,970,978,986,994,1002,1010,1018,1026,1034,1042,1050,1058,1066,1074,1082,1090,1098,1106,1114,1122,1130,1138,1146,1154,1162,1170,1178,1186,1194,1202,1210
|
||||
|
||||
//MaxSP - Ranger/Mechanic/Guillotine Cross/Ranger_T/Mechanic_T/Guillotine Cross_T/Royal Guard/Minstrel/Wanderer/Sura/Shadow Chaser/Royal Guard_T/Minstrel_T/Wanderer_T/Sura_T/Shadow Chaser_T/Royal Guard (Gryphon)/Royal Guard (Gryphon)_T/Ranger (Warg)/Ranger (Warg)_T/Mechanic (Mado Gear)/Mechanic (Mado Gear)_T
|
||||
1,150,4056:4058:4059:4062:4064:4065:4066:4068:4069:4070:4072:4073:4075:4076:4077:4079:4082:4083:4084:4085:4086:4087:4098:4100:4101:4102:4104:4105:4106:4108:4110:4111:4112,1,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290,294,298,302,306,310,314,318,322,326,330,334,338,342,346,350,354,358,362,366,370,374,378,382,386,390,394,398,402,406,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610
|
@ -4,157 +4,157 @@
|
||||
// JobID,Weight,HPFactor,HPMultiplicator,SPFactor,Unarmed,Dagger,1HSword,2HSword,1HSpear,2HSpear,1HAxe,2HAxe,1HMace,2HMace(unused),Rod,Bow,Knuckle,Instrument,Whip,Book,Katar,Revolver,Rifle,Gatling Gun,Shotgun,Grenade Launcher,Fuuma Shuriken,2HStaff,Shield
|
||||
//
|
||||
// Novice
|
||||
0, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
0, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
// Swordman
|
||||
1, 28000,70 ,500 ,200 ,440 ,510 ,510 ,580 ,610 ,690 ,590 ,640 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
1, 28000,70 ,500 ,200 ,440 ,510 ,510 ,580 ,610 ,690 ,590 ,640 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Magician
|
||||
2, 22000,30 ,500 ,600 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,640
|
||||
2, 22000,30 ,500 ,600 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,640
|
||||
// Archer
|
||||
3, 26000,50 ,500 ,200 ,440 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
3, 26000,50 ,500 ,200 ,440 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
// Acolyte
|
||||
4, 24000,40 ,500 ,500 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490 ,640 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,510
|
||||
4, 24000,40 ,500 ,500 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490 ,640 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,510
|
||||
// Merchant
|
||||
5, 28000,40 ,500 ,300 ,440 ,560 ,560 ,2000 ,2000 ,2000 ,520 ,590 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
5, 28000,40 ,500 ,300 ,440 ,560 ,560 ,2000 ,2000 ,2000 ,520 ,590 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Thief
|
||||
6, 24000,50 ,500 ,200 ,440 ,520 ,540 ,2000 ,2000 ,2000 ,640 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
6, 24000,50 ,500 ,200 ,440 ,520 ,540 ,2000 ,2000 ,2000 ,640 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Knight
|
||||
7, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
7, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Priest
|
||||
8, 26000,75 ,500 ,800 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,640 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,490
|
||||
8, 26000,75 ,500 ,800 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,640 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,490
|
||||
// Wizard
|
||||
9, 24000,55 ,500 ,900 ,540 ,580 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,620
|
||||
9, 24000,55 ,500 ,900 ,540 ,580 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,620
|
||||
// Blacksmith
|
||||
10, 30000,90 ,500 ,400 ,440 ,540 ,540 ,2000 ,2000 ,2000 ,500 ,570 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
10, 30000,90 ,500 ,400 ,440 ,540 ,540 ,2000 ,2000 ,2000 ,500 ,570 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Hunter
|
||||
11, 27000,85 ,500 ,400 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
11, 27000,85 ,500 ,400 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
// Assassin
|
||||
12, 24000,110 ,500 ,400 ,440 ,460 ,540 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
12, 24000,110 ,500 ,400 ,440 ,460 ,540 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Knight (Peco)
|
||||
13, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
13, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Crusader
|
||||
14, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
14, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Monk
|
||||
15, 26000,90 ,650 ,470 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,620 ,490
|
||||
15, 26000,90 ,650 ,470 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,620 ,490
|
||||
// Sage
|
||||
16, 24000,75 ,500 ,700 ,490 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,590
|
||||
16, 24000,75 ,500 ,700 ,490 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,590
|
||||
// Rogue
|
||||
17, 24000,85 ,500 ,500 ,440 ,490 ,540 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
17, 24000,85 ,500 ,500 ,440 ,490 ,540 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Alchemist
|
||||
18, 30000,90 ,500 ,400 ,440 ,540 ,490 ,2000 ,2000 ,2000 ,490 ,560 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
||||
18, 30000,90 ,500 ,400 ,440 ,540 ,490 ,2000 ,2000 ,2000 ,490 ,560 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
||||
// Bard
|
||||
19, 27000,75 ,300 ,600 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
19, 27000,75 ,300 ,600 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Dancer
|
||||
20, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470
|
||||
20, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470
|
||||
// Crusader (Peco)
|
||||
21, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
21, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Wedding
|
||||
22, 20000,0 ,500 ,100 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
|
||||
22, 20000,0 ,500 ,100 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
|
||||
// Super Novice
|
||||
23, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
23, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
// Gunslinger
|
||||
24, 28000,88 ,0 ,450 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,590 ,440 ,940 ,1040 ,2000 ,2000 ,600
|
||||
24, 28000,100 ,0 ,450 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,590 ,440 ,940 ,1040 ,2000 ,2000 ,600
|
||||
// Ninja
|
||||
25, 26000,80 ,0 ,515 ,440 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,500
|
||||
25, 26000,90 ,0 ,515 ,440 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,500
|
||||
// Novice High
|
||||
4001, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
4001, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
// Swordman High
|
||||
4002, 28000,70 ,500 ,200 ,440 ,510 ,510 ,580 ,610 ,690 ,590 ,640 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4002, 28000,70 ,500 ,200 ,440 ,510 ,510 ,580 ,610 ,690 ,590 ,640 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Magician High
|
||||
4003, 22000,30 ,500 ,600 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,640
|
||||
4003, 22000,30 ,500 ,600 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,640
|
||||
// Archer High
|
||||
4004, 26000,50 ,500 ,200 ,440 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
4004, 26000,50 ,500 ,200 ,440 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
// Acolyte High
|
||||
4005, 24000,40 ,500 ,500 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490 ,640 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,510
|
||||
4005, 24000,40 ,500 ,500 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490 ,640 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,510
|
||||
// Merchant High
|
||||
4006, 28000,40 ,500 ,300 ,440 ,560 ,560 ,2000 ,2000 ,2000 ,520 ,590 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4006, 28000,40 ,500 ,300 ,440 ,560 ,560 ,2000 ,2000 ,2000 ,520 ,590 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Thief High
|
||||
4007, 24000,50 ,500 ,200 ,440 ,520 ,540 ,2000 ,2000 ,2000 ,640 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
4007, 24000,50 ,500 ,200 ,440 ,520 ,540 ,2000 ,2000 ,2000 ,640 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Lord Knight
|
||||
4008, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4008, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// High Priest
|
||||
4009, 26000,75 ,500 ,800 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,640 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,490
|
||||
4009, 26000,75 ,500 ,800 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,640 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,490
|
||||
// High Wizard
|
||||
4010, 24000,55 ,500 ,900 ,540 ,580 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,620
|
||||
4010, 24000,55 ,500 ,900 ,540 ,580 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,620
|
||||
// Whitesmith
|
||||
4011, 30000,90 ,500 ,400 ,440 ,540 ,540 ,2000 ,2000 ,2000 ,500 ,570 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4011, 30000,90 ,500 ,400 ,440 ,540 ,540 ,2000 ,2000 ,2000 ,500 ,570 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Sniper
|
||||
4012, 27000,85 ,500 ,400 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
4012, 27000,85 ,500 ,400 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
// Assassin Cross
|
||||
4013, 24000,110 ,500 ,400 ,440 ,460 ,540 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
4013, 24000,110 ,500 ,400 ,440 ,460 ,540 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Lord Knight (Peco)
|
||||
4014, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4014, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Paladin
|
||||
4015, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4015, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Champion
|
||||
4016, 26000,90 ,650 ,470 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,620 ,490
|
||||
4016, 26000,90 ,650 ,470 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,620 ,490
|
||||
// Professor
|
||||
4017, 24000,75 ,500 ,700 ,490 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,590
|
||||
4017, 24000,75 ,500 ,700 ,490 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,590
|
||||
// Stalker
|
||||
4018, 24000,85 ,500 ,500 ,440 ,490 ,540 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4018, 24000,85 ,500 ,500 ,440 ,490 ,540 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Creator
|
||||
4019, 30000,90 ,500 ,400 ,440 ,540 ,490 ,490 ,2000 ,2000 ,490 ,560 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
||||
4019, 30000,90 ,500 ,400 ,440 ,540 ,490 ,490 ,2000 ,2000 ,490 ,560 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
||||
// Clown
|
||||
4020, 27000,75 ,300 ,600 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
4020, 27000,75 ,300 ,600 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Gypsy
|
||||
4021, 27000,75 ,300 ,600 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
4021, 27000,75 ,300 ,600 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Paladin (Peco)
|
||||
4022, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4022, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Baby Novice
|
||||
4023, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
4023, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
// Baby Swordman
|
||||
4024, 28000,70 ,500 ,200 ,440 ,510 ,510 ,580 ,610 ,690 ,590 ,640 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4024, 28000,70 ,500 ,200 ,440 ,510 ,510 ,580 ,610 ,690 ,590 ,640 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Baby Magician
|
||||
4025, 22000,30 ,500 ,600 ,540 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,640
|
||||
4025, 22000,30 ,500 ,600 ,540 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,640
|
||||
// Baby Archer
|
||||
4026, 26000,50 ,500 ,200 ,440 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
4026, 26000,50 ,500 ,200 ,440 ,590 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
// Baby Acolyte
|
||||
4027, 24000,40 ,500 ,500 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490 ,640 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,510
|
||||
4027, 24000,40 ,500 ,500 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490 ,640 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,510
|
||||
// Baby Merchant
|
||||
4028, 28000,40 ,500 ,300 ,440 ,560 ,560 ,2000 ,2000 ,2000 ,520 ,590 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4028, 28000,40 ,500 ,300 ,440 ,560 ,560 ,2000 ,2000 ,2000 ,520 ,590 ,540 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Baby Thief
|
||||
4029, 24000,50 ,500 ,200 ,440 ,520 ,540 ,2000 ,2000 ,2000 ,640 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
4029, 24000,50 ,500 ,200 ,440 ,520 ,540 ,2000 ,2000 ,2000 ,640 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Baby Knight
|
||||
4030, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4030, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Baby Priest
|
||||
4031, 26000,75 ,500 ,800 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,640 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,490
|
||||
4031, 26000,75 ,500 ,800 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,640 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,640 ,490
|
||||
// Baby Wizard
|
||||
4032, 24000,55 ,500 ,900 ,540 ,580 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,620
|
||||
4032, 24000,55 ,500 ,900 ,540 ,580 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,620
|
||||
// Baby Blacksmith
|
||||
4033, 30000,90 ,500 ,400 ,440 ,540 ,540 ,2000 ,2000 ,2000 ,500 ,570 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4033, 30000,90 ,500 ,400 ,440 ,540 ,540 ,2000 ,2000 ,2000 ,500 ,570 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Baby Hunter
|
||||
4034, 27000,85 ,500 ,400 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
4034, 27000,85 ,500 ,400 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||
// Baby Assassin
|
||||
4035, 24000,110 ,500 ,400 ,440 ,460 ,540 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
4035, 24000,110 ,500 ,400 ,440 ,460 ,540 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Baby Knight (Peco)
|
||||
4036, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4036, 28000,150 ,500 ,300 ,440 ,530 ,490 ,560 ,590 ,690 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Baby Crusader
|
||||
4037, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4037, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Baby Monk
|
||||
4038, 26000,90 ,650 ,470 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,620 ,490
|
||||
4038, 26000,90 ,650 ,470 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,640 ,2000 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,620 ,490
|
||||
// Baby Sage
|
||||
4039, 24000,75 ,500 ,700 ,490 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,590
|
||||
4039, 24000,75 ,500 ,700 ,490 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,2000 ,2000 ,2000 ,2000 ,470 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,590
|
||||
// Baby Rogue
|
||||
4040, 24000,85 ,500 ,500 ,440 ,490 ,540 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4040, 24000,85 ,500 ,500 ,440 ,490 ,540 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Baby Alchemist
|
||||
4041, 30000,90 ,500 ,400 ,440 ,540 ,490 ,2000 ,2000 ,2000 ,490 ,560 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
||||
4041, 30000,90 ,500 ,400 ,440 ,540 ,490 ,2000 ,2000 ,2000 ,490 ,560 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
||||
// Baby Bard
|
||||
4042, 27000,75 ,300 ,600 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
4042, 27000,75 ,300 ,600 ,440 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Baby Dancer
|
||||
4043, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470
|
||||
4043, 27000,75 ,300 ,600 ,400 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480 ,2000 ,2000 ,450 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470
|
||||
// Baby Crusader (Peco)
|
||||
4044, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
4044, 28000,110 ,700 ,470 ,440 ,520 ,470 ,590 ,570 ,560 ,540 ,590 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||
// Baby Super Novice
|
||||
4045, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
4045, 20000,0 ,500 ,100 ,440 ,590 ,610 ,2000 ,2000 ,2000 ,540 ,2000 ,540 ,540 ,690 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,690 ,540
|
||||
// Taekwon
|
||||
4046, 28000,70 ,500 ,200 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
4046, 28000,70 ,500 ,200 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Star Knight
|
||||
4047, 28000,90 ,650 ,470 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
4047, 28000,90 ,650 ,500 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Star Knight (flying)
|
||||
4048, 28000,90 ,650 ,470 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
4048, 28000,90 ,650 ,500 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Soul Linker
|
||||
4049, 24000,75 ,500 ,900 ,540 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,620
|
||||
4049, 24000,75 ,500 ,900 ,540 ,440 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,570 ,620
|
||||
// Gangsi (Bongun/Munak)
|
||||
4050, 24000,40 ,500 ,500 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,500
|
||||
4050, 24000,65 ,500 ,500 ,400 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,600 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,500
|
||||
// Death Knight
|
||||
4051, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||
// Dark Collector
|
||||
@ -188,7 +188,7 @@
|
||||
// Sorcerer (Regular)
|
||||
4067, 30000,75 ,500 ,700 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490
|
||||
// Minstrel (Regular)
|
||||
4068, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
4068, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Wanderer (Regular)
|
||||
4069, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Sura (Regular)
|
||||
@ -202,7 +202,7 @@
|
||||
// Sorcerer (Trans)
|
||||
4074, 30000,75 ,500 ,700 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490
|
||||
// Minstrel (Trans)
|
||||
4075, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
4075, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Wanderer (Trans)
|
||||
4076, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Sura (Trans)
|
||||
@ -244,7 +244,7 @@
|
||||
// Baby Sorcerer
|
||||
4103, 24000,75 ,500 ,700 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490
|
||||
// Baby Minstrel
|
||||
4104, 27000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
4104, 27000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Baby Wanderer
|
||||
4105, 27000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||
// Baby Sura
|
||||
|
53
db/re/job_exp.txt
Normal file
53
db/re/job_exp.txt
Normal file
File diff suppressed because one or more lines are too long
166
db/re/job_maxhpsp_db.txt
Normal file
166
db/re/job_maxhpsp_db.txt
Normal file
@ -0,0 +1,166 @@
|
||||
//MaxHP & MaxSP tables format:
|
||||
//Startlvl,Max Level,Class list,Type,Max value for Lv 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99
|
||||
//Type (0 - MaxHP; 1 - MaxSP)
|
||||
|
||||
//===============================
|
||||
// Renewal MaxHP & MaxSP Database
|
||||
//===============================
|
||||
|
||||
//MaxHP - Novice/Super Novice/Novice High/Baby Novice/Baby Super Novice
|
||||
1,99,23:4001:4023:4045,0,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275,280,285,290,295,300,305,310,315,320,325,330,335,340,345,350,355,360,365,370,375,380,385,390,395,400,405,410,415,420,425,430,435,440,445,450,455,460,465,470,475,480,485,490,495,500,505,510,515,520,525,530
|
||||
|
||||
//MaxHP - Swordman/Swordman High/Baby Swordman
|
||||
1,99,1:4002:4024,0,40,46,53,61,70,79,89,100,111,123,136,149,163,178,194,210,227,245,263,282,302,322,343,365,388,411,435,460,485,511,538,565,593,622,652,682,713,745,777,810,844,878,913,949,986,1023,1061,1100,1139,1179,1220,1261,1303,1346,1390,1434,1479,1525,1571,1618,1666,1714,1763,1813,1864,1915,1967,2020,2073,2127,2182,2237,2293,2350,2408,2466,2525,2585,2645,2706,2768,2830,2893,2957,3022,3087,3153,3220,3287,3355,3424,3493,3563,3634,3706,3778,3851,3925,3999
|
||||
|
||||
//MaxHP - Magician/Magician High/Baby Magician
|
||||
1,99,2:4003:4025,0,40,46,52,58,65,72,79,86,94,102,110,119,128,137,147,157,167,177,188,199,210,222,234,246,259,272,285,298,312,326,340,355,370,385,401,417,433,449,466,483,500,518,536,554,573,592,611,630,650,670,690,711,732,753,775,797,819,841,864,887,910,934,958,982,1007,1032,1057,1082,1108,1134,1160,1187,1214,1241,1269,1297,1325,1353,1382,1411,1440,1470,1500,1530,1561,1592,1623,1654,1686,1718,1750,1783,1816,1849,1883,1917,1951,1985,2020
|
||||
|
||||
//MaxHP - Archer/Thief/Archer High/Thief High/Baby Archer/Baby Thief
|
||||
1,99,3:6:4004:4007:4026:4029,0,40,46,53,60,68,76,85,94,104,114,125,136,148,160,173,186,200,214,229,244,260,276,293,310,328,346,365,384,404,424,445,466,488,510,533,556,580,604,629,654,680,706,733,760,788,816,845,874,904,934,965,996,1028,1060,1093,1126,1160,1194,1229,1264,1300,1336,1373,1410,1448,1486,1525,1564,1604,1644,1685,1726,1768,1810,1853,1896,1940,1984,2029,2074,2120,2166,2213,2260,2308,2356,2405,2454,2504,2554,2605,2656,2708,2760,2813,2866,2920,2974,3029
|
||||
|
||||
//MaxHP - Acolyte/Merchant/Acolyte High/Merchant High/Baby Acolyte/Baby Merchant
|
||||
1,99,4:5:4005:4006:4027:4028,0,40,46,52,59,66,73,81,89,98,107,116,126,136,147,158,169,181,193,206,219,232,246,260,275,290,305,321,337,354,371,388,406,424,443,462,481,501,521,542,563,584,606,628,651,674,697,721,745,770,795,820,846,872,899,926,953,981,1009,1038,1067,1096,1126,1156,1187,1218,1249,1281,1313,1346,1379,1412,1446,1480,1515,1550,1585,1621,1657,1694,1731,1768,1806,1844,1883,1922,1961,2001,2041,2082,2123,2164,2206,2248,2291,2334,2377,2421,2465,2510
|
||||
|
||||
//MaxHP - Knight/Knight (Peco)/Lord Knight/Lord Knight (Peco)/Baby Knight/Baby Knight (Peco)
|
||||
1,99,7:13:4008:4014:4030:4036,0,40,48,58,69,82,96,112,129,148,168,190,213,238,264,292,321,352,384,418,453,490,528,568,609,652,696,742,789,838,888,940,993,1048,1104,1162,1221,1282,1344,1408,1473,1540,1608,1678,1749,1822,1896,1972,2049,2128,2208,2290,2373,2458,2544,2632,2721,2812,2904,2998,3093,3190,3288,3388,3489,3592,3696,3802,3909,4018,4128,4240,4353,4468,4584,4702,4821,4942,5064,5188,5313,5440,5568,5698,5829,5962,6096,6232,6369,6508,6648,6790,6933,7078,7224,7372,7521,7672,7824,7978
|
||||
|
||||
//MaxHP - Priest/Sage/High Priest/Professor/Baby Priest/Baby Sage
|
||||
1,99,8:16:4009:4017:4031:4039,0,40,47,54,62,71,81,91,102,114,127,140,154,169,185,201,218,236,255,274,294,315,337,359,382,406,431,456,482,509,537,565,594,624,655,686,718,751,785,819,854,890,927,964,1002,1041,1081,1121,1162,1204,1247,1290,1334,1379,1425,1471,1518,1566,1615,1664,1714,1765,1817,1869,1922,1976,2031,2086,2142,2199,2257,2315,2374,2434,2495,2556,2618,2681,2745,2809,2874,2940,3007,3074,3142,3211,3281,3351,3422,3494,3567,3640,3714,3789,3865,3941,4018,4096,4175,4254
|
||||
|
||||
//MaxHP - Wizard/High Wizard/Baby Wizard
|
||||
1,99,9:4010:4032,0,40,46,53,60,68,76,85,94,104,115,126,138,150,163,176,190,204,219,234,250,267,284,302,320,339,358,378,398,419,441,463,486,509,533,557,582,607,633,659,686,714,742,771,800,830,860,891,922,954,987,1020,1054,1088,1123,1158,1194,1230,1267,1304,1342,1381,1420,1460,1500,1541,1582,1624,1666,1709,1753,1797,1842,1887,1933,1979,2026,2073,2121,2169,2218,2268,2318,2369,2420,2472,2524,2577,2630,2684,2739,2794,2850,2906,2963,3020,3078,3136,3195,3254
|
||||
|
||||
//MaxHP - Blacksmith/Alchemist/Whitesmith/Creator/Baby Blacksmith/Baby Alchemist
|
||||
1,99,10:18:4011:4019:4033:4041,0,40,47,55,64,74,84,95,107,120,134,149,165,182,200,219,238,258,279,301,324,348,373,399,426,454,482,511,541,572,604,637,671,706,742,779,816,854,893,933,974,1016,1059,1103,1148,1194,1240,1287,1335,1384,1434,1485,1537,1590,1644,1699,1754,1810,1867,1925,1984,2044,2105,2167,2230,2294,2358,2423,2489,2556,2624,2693,2763,2834,2906,2979,3052,3126,3201,3277,3354,3432,3511,3591,3672,3754,3836,3919,4003,4088,4174,4261,4349,4438,4528,4619,4710,4802,4895,4989
|
||||
|
||||
//MaxHP - Hunter/Rogue/Sniper/Stalker/Baby Hunter/Baby Rogue
|
||||
1,99,11:17:4012:4018:4034:4040,0,40,47,55,63,72,82,93,105,118,132,146,161,177,194,212,231,250,270,291,313,336,360,385,410,436,463,491,520,550,581,612,644,677,711,746,782,818,855,893,932,972,1013,1055,1097,1140,1184,1229,1275,1322,1370,1418,1467,1517,1568,1620,1673,1726,1780,1835,1891,1948,2006,2065,2124,2184,2245,2307,2370,2434,2499,2564,2630,2697,2765,2834,2904,2974,3045,3117,3190,3264,3339,3415,3491,3568,3646,3725,3805,3886,3968,4050,4133,4217,4302,4388,4475,4562,4650,4739
|
||||
|
||||
//MaxHP - Assassin/Assassin Cross/Baby Assassin
|
||||
1,99,12:4013:4035,0,40,47,55,64,75,87,100,114,129,145,162,180,199,219,241,264,288,313,339,366,394,423,453,484,517,551,586,622,659,697,736,776,817,859,903,948,994,1041,1089,1138,1188,1239,1291,1344,1399,1455,1512,1570,1629,1689,1750,1812,1875,1939,2005,2072,2140,2209,2279,2350,2422,2495,2569,2644,2721,2799,2878,2958,3039,3121,3204,3288,3373,3459,3547,3636,3726,3817,3909,4002,4096,4191,4287,4384,4483,4583,4684,4786,4889,4993,5098,5204,5311,5419,5529,5640,5752,5865,5979
|
||||
|
||||
//MaxHP - Crusader/Crusader (Peco)/Paladin/Paladin (Peco)/Baby Crusader/Baby Crusader (Peco)
|
||||
1,99,14:21:4015:4022:4037:4044,0,40,47,56,62,81,94,108,128,147,165,184,204,225,247,271,296,322,349,377,406,436,467,499,532,567,603,640,678,717,757,798,840,883,927,973,1020,1068,1117,1167,1218,1270,1323,1377,1432,1489,1547,1606,1666,1727,1789,1852,1916,1981,2047,2115,2184,2254,2325,2397,2470,2544,2619,2695,2772,2851,2931,3012,3094,3177,3261,3346,3432,3519,3607,3697,3788,3880,3973,4067,4162,4258,4355,4453,4552,4653,4755,4858,4962,5067,5173,5280,5388,5497,5607,5719,5832,5946,6061,6177
|
||||
|
||||
//MaxHP - Monk/Champion/Baby Monk
|
||||
1,99,15:4016:4038,0,40,47,55,64,74,84,95,107,120,134,149,165,182,200,219,238,258,306,329,354,379,406,433,462,491,521,551,583,615,649,683,719,755,793,831,870,909,950,991,1034,1077,1122,1167,1214,1261,1309,1357,1407,1457,1509,1561,1615,1669,1725,1781,1838,1895,1954,2013,2074,2135,2198,2261,2326,2391,2457,2523,2591,2659,2729,2799,2871,2943,3017,3091,3166,3241,3318,3395,3474,3553,3634,3715,3798,3881,3965,4049,4135,4221,4309,4397,4487,4577,4669,4761,4854,4947,5042,5137
|
||||
|
||||
//MaxHP - Bard/Dancer/Clown/Gypsy/Baby Bard/Baby Dancer
|
||||
1,99,19:20:4020:4021:4042:4043,0,40,47,54,62,71,81,91,102,114,127,140,154,169,180,196,212,224,242,260,278,296,316,330,350,371,393,415,438,451,477,503,530,558,587,616,646,677,709,741,774,808,843,878,914,951,989,1027,1066,1106,1147,1188,1230,1273,1317,1361,1406,1452,1499,1546,1594,1643,1693,1743,1794,1846,1899,1952,2006,2061,2117,2173,2230,2288,2347,2406,2466,2527,2589,2651,2714,2778,2843,2908,2974,3041,3109,3177,3246,3316,3387,3458,3530,3603,3677,3751,3826,3902,3979,4056
|
||||
|
||||
//MaxHP - Gunslinger
|
||||
1,99,24,0,40,47,55,64,74,84,95,107,120,134,149,165,182,200,219,238,258,306,329,354,379,406,433,462,491,521,551,583,615,649,683,719,755,793,831,870,909,950,991,1034,1077,1122,1167,1214,1261,1309,1357,1407,1457,1509,1561,1615,1669,1725,1781,1838,1895,1954,2013,2074,2135,2198,2261,2326,2391,2457,2523,2591,2659,2670,2680,2690,2700,2710,2720,2730,2740,2750,2760,3000,3020,3040,3060,3080,3100,3120,3140,3160,3180,3455,3524,3593,3663,3834,3806,3878,3951,4025,4500
|
||||
|
||||
//MaxHP - Ninja
|
||||
1,99,25,0,40,47,54,62,71,81,91,102,114,127,140,154,169,185,201,218,236,255,274,294,315,337,359,382,406,431,456,482,509,537,565,594,624,655,686,718,751,785,819,854,890,927,964,1002,1041,1081,1121,1162,1204,1247,1290,1334,1379,1425,1471,1518,1566,1615,1664,1714,1765,1817,1869,1922,1976,2031,2086,2142,2199,2257,2275,2294,2314,2335,2356,2378,2401,2425,2449,2874,2890,2907,2924,2942,2971,2991,3011,3032,3054,3567,3590,3614,3649,3675,3701,3728,3756,3800,4250
|
||||
|
||||
//MaxHP - Taekwon
|
||||
1,99,4046,0,40,46,53,61,70,79,89,100,111,123,136,149,163,178,194,210,227,245,263,282,302,322,343,365,388,411,435,460,485,511,538,565,593,622,652,682,713,745,777,810,844,878,913,949,986,1023,1061,1100,1139,1179,1220,1261,1303,1346,1390,1434,1479,1525,1571,1618,1666,1714,1763,1813,1864,1915,1967,2020,2073,2127,2137,2147,2157,2167,2177,2187,2197,2200,2210,2230,2250,2300,2350,2400,2450,2500,2550,2600,2650,2700,2750,2800,2850,2900,2950,3000,3050,3100,3200
|
||||
|
||||
//MaxHP - Star Knight/Star Knight (flying)
|
||||
1,99,4047:4048,0,40,47,55,64,74,84,95,107,120,134,149,165,182,200,219,238,258,306,329,354,379,406,433,462,491,521,551,583,615,649,683,719,755,793,831,870,909,950,991,1034,1077,1122,1167,1214,1261,1309,1357,1407,1457,1509,1561,1615,1669,1725,1781,1838,1895,1954,2013,2074,2135,2198,2261,2326,2391,2457,2523,2591,2659,2670,2680,2690,2700,2710,2720,2730,2740,2750,2760,3000,3020,3040,3060,3080,3100,3120,3140,3160,3180,3455,3524,3593,3663,3734,3806,3878,3951,4025,4500
|
||||
|
||||
//MaxHP - Soul Linker
|
||||
1,99,4049,0,40,47,54,62,71,81,91,102,114,127,140,154,169,185,201,218,236,255,274,294,315,337,359,382,406,431,456,482,509,537,565,594,624,655,686,718,751,785,819,854,890,927,964,1002,1041,1081,1121,1162,1204,1247,1290,1334,1379,1425,1471,1518,1566,1615,1664,1714,1765,1817,1869,1922,1976,2031,2086,2142,2199,2257,2275,2294,2314,2335,2356,2378,2401,2425,2449,2874,2890,2907,2924,2942,2971,2991,3011,3032,3054,3567,3590,3614,3649,3675,3701,3728,3756,3800,4250
|
||||
|
||||
//MaxHP - Munak/Bongun
|
||||
1,99,4050,0,40,46,53,60,68,76,85,94,104,114,125,136,148,160,173,186,200,214,229,244,260,276,293,310,328,346,365,384,404,424,445,466,488,510,533,556,580,604,629,654,680,706,733,760,788,816,845,874,904,934,965,996,1028,1060,1093,1126,1160,1194,1229,1264,1300,1336,1373,1410,1448,1486,1525,1564,1604,1644,1685,1726,1768,1810,1853,1896,1940,1984,2029,2074,2120,2166,2213,2260,2308,2356,2405,2454,2504,2554,2605,2656,2708,2760,2813,2866,2920,2974,3029
|
||||
|
||||
//MaxHP - Death Knight
|
||||
1,99,4051,0,2040,2046,2053,2060,2068,2076,2085,2094,2104,2114,2125,2136,2148,2160,2173,2186,2200,2214,2229,2244,2260,2276,2293,2310,2328,2346,2365,2384,2404,2424,2445,2466,2488,2510,2533,2556,2580,2604,2629,2654,2680,2706,2733,2760,2788,2816,2845,2874,2904,2934,2965,2996,3028,3060,3093,3126,3160,3194,3229,3264,3300,3336,3373,3410,3448,3486,3525,3564,3604,3644,3685,3726,3768,3810,3853,3896,3940,3984,4029,4074,4120,4166,4213,4260,4308,4356,4405,4454,4504,4554,4605,4656,4708,4760,4813,4866,4920,4974,5029
|
||||
|
||||
//MaxHP - Dark Collector
|
||||
1,99,4052,0,40,47,54,62,71,81,91,102,114,127,140,154,169,185,201,218,236,255,274,294,315,337,359,382,406,431,456,482,509,537,565,594,624,655,686,718,751,785,819,854,890,927,964,1002,1041,1081,1121,1162,1204,1247,1290,1334,1379,1425,1471,1518,1566,1615,1664,1714,1765,1817,1869,1922,1976,2031,2086,2142,2199,2257,2315,2374,2434,2495,2556,2618,2681,2745,2809,2874,2940,3007,3074,3142,3211,3281,3351,3422,3494,3567,3640,3714,3789,3865,3941,4018,4096,4175,4254
|
||||
|
||||
//MaxHP - Rune Knight/Rune Knight_T/Rune Knight (Dragon)/Rune Knight (Dragon)_T
|
||||
99,150,4054:4060:4080:4081:4096:4109,0,8100,8133,8242,8352,8464,8576,8690,8804,8920,9036,9154,9273,9393,9514,9636,9759,9883,10008,10134,10261,10389,10518,10648,10779,10912,11045,11180,11315,11452,11589,11728,11868,12009,12151,12294,12438,12583,12729,12876,13024,13173,13323,13474,13626,13780,13934,14090,14246,14404,14562,14722,14883
|
||||
|
||||
//MaxHP - Warlock/Warlock_T
|
||||
99,150,4055:4061:4097,0,3200,3313,3383,3455,3528,3601,3675,3749,3824,3899,3975,4051,4129,4208,4287,4367,4447,4528,4609,4691,4773,4857,4941,5026,5112,5198,5285,5372,5460,5548,5638,5728,5819,5911,6003,6096,6189,6283,6377,6473,6569,6666,6763,6861,6960,7059,7159,7259,7361,7463,7566,7669
|
||||
|
||||
//MaxHP - Ranger/Ranger_T/Minstrel/Wanderer/Minstrel_T/Wanderer_T/Ranger (Warg)/Ranger (Warg)_T
|
||||
99,150,4056:4062:4068:4069:4075:4076:4084:4085:4098:4104:4105:4111,0,4800,4828,4918,5009,5101,5194,5288,5382,5477,5573,5670,5768,5867,5967,6068,6170,6273,6377,6482,6588,6694,6801,6909,7018,7128,7239,7351,7464,7578,7693,7809,7926,8044,8162,8281,8401,8522,8644,8767,8891,9016,9142,9269,9397,9526,9656,9786,9917,10049,10182,10316,10451
|
||||
|
||||
//MaxHP - Arch Bishop/Arch Bishop_T
|
||||
99,150,4057:4063:4099,0,4300,4333,4412,4491,4570,4649,4728,4807,4886,4965,5044,5123,5202,5281,5360,5439,5518,5597,5676,5755,5834,5913,5992,6071,6150,6229,6308,6387,6466,6545,6624,6703,6782,6861,6940,7019,7098,7177,7256,7335,7414,7493,7572,7651,7730,7809,7888,7967,8046,8125,8204,8283
|
||||
|
||||
//MaxHP - Mechanic/Mechanic_T/Sura/Sura_T/Mechanic (Mado Gear)/Mechanic (Mado Gear)_T
|
||||
99,150,4058:4064:4086:4087:4100:4112,0,5807,5844,5952,6061,6172,6283,6396,6510,6625,6741,6857,6974,7093,7212,7333,7455,7578,7702,7828,7954,8081,8208,8337,8467,8598,8730,8864,8998,9134,9271,9408,9546,9685,9825,9967,10109,10253,10398,10544,10691,10838,10987,11136,11287,11439,11592,11746,11901,12057,12215,12372,12531
|
||||
|
||||
//MaxHP - Guillotine Cross/Guillotine Cross_T/Royal Guard/Shadow Chaser/Royal Guard_T/Shadow Chaser_T/Royal Guard (Gryphon)/Royal Guard (Gryphon)_T
|
||||
99,150,4059:4065:4066:4072:4073:4079:4082:4083:4101:4102:4108:4110,0,6050,6093,6208,6324,6441,6559,6678,6798,6920,7043,7167,7292,7418,7545,7673,7802,7932,8063,8196,8330,8465,8601,8738,8876,9015,9155,9296,9438,9582,9727,9873,10020,10168,10317,10467,10618,10770,10923,11078,11234,11391,11549,11708,11868,12029,12191,12354,12518,12684,12851,13019,13188
|
||||
|
||||
//MaxHP - Sorcerer/Sorcerer_T
|
||||
99,150,4067:4074:4103,0,4080,4103,4180,4257,4335,4414,4494,4574,4655,4737,4819,4902,4986,5071,5157,5244,5332,5420,5509,5599,5689,5780,5872,5965,6058,6153,6248,6344,6441,6539,6637,6737,6837,6937,7038,7140,7243,7347,7451,7557,7663,7770,7878,7987,8097,8207,8318,8429,8541,8654,8768,8883
|
||||
|
||||
//MaxHP - Sura/Sura_T
|
||||
99,150,4070:4077:4106,0,5050,5082,5176,5271,5367,5464,5562,5661,5761,5862,5963,6065,6168,6272,6377,6483,6590,6698,6807,6917,7027,7138,7250,7363,7477,7592,7708,7825,7943,8062,8181,8301,8422,8544,8667,8791,8916,9042,9169,9297,9425,9554,9684,9815,9947,10080,10214,10349,10485,10622,10759,10897
|
||||
|
||||
//MaxHP - Genetic/Genetic_T
|
||||
99,150,4071:4078:4107,0,4730,4766,4853,4940,5027,5113,5200,5287,5374,5461,5548,5635,5722,5809,5896,5982,6069,6156,6243,6330,6417,6504,6591,6678,6765,6851,6938,7025,7112,7199,7286,7373,7460,7547,7634,7720,7807,7894,7981,8068,8155,8242,8329,8416,8503,8589,8676,8763,8850,8937,9024,9111
|
||||
|
||||
//MaxSP - Novice/Super Novice/Novice High/Baby Novice/Baby Super Novice
|
||||
1,99,0:23:4001:4023:4045,1,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109
|
||||
|
||||
//MaxSP - Swordman/Archer/Thief/Swordman High/Archer High/Thief High/Baby Swordman/Baby Archer/Baby Thief
|
||||
1,99,1:3:6:4002:4004:4007:4024:4026:4029,1,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208
|
||||
|
||||
//MaxSP - Magician/Bard/Dancer/Magician High/Clown/Gypsy/Baby Magician/Baby Bard/Baby Dancer
|
||||
1,99,2:19:20:4003:4020:4021:4025:4042:4043,1,16,22,28,34,40,46,52,58,64,70,76,82,88,94,100,106,112,118,124,130,136,142,148,154,160,166,172,178,184,190,196,202,208,214,220,226,232,238,244,250,256,262,268,274,280,286,292,298,304,310,316,322,328,334,340,346,352,358,364,370,376,382,388,394,400,406,412,418,424,430,436,442,448,454,460,466,472,478,484,490,496,502,508,514,520,526,532,538,544,550,556,562,568,574,580,586,592,598,604
|
||||
|
||||
//MaxSP - Acolyte/Rogue/Acolyte High/Stalker/Baby Acolyte/Baby Rogue
|
||||
1,99,4:17:4005:4018:4027:4040,1,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,260,265,270,275,280,285,290,295,300,305,310,315,320,325,330,335,340,345,350,355,360,365,370,375,380,385,390,395,400,405,410,415,420,425,430,435,440,445,450,455,460,465,470,475,480,485,490,495,500,505
|
||||
|
||||
//MaxSP - Merchant/Knight/Knight (Peco)/Merchant High/Lord Knight/Lord Knight (Peco)/Baby Merchant/Baby Knight/Baby Knight (Peco)
|
||||
1,99,5:7:13:4006:4008:4014:4028:4030:4036,1,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307
|
||||
|
||||
//MaxSP - Priest/High Priest/Baby Priest
|
||||
1,99,8:4009:4031,1,18,26,34,42,50,58,66,74,82,90,98,106,114,122,130,138,146,154,162,170,178,186,194,202,210,218,226,234,242,250,258,266,274,282,290,298,306,314,322,330,338,346,354,362,370,378,386,394,402,410,418,426,434,442,450,458,466,474,482,490,498,506,514,522,530,538,546,554,562,570,578,586,594,602,610,618,626,634,642,650,658,666,674,682,690,698,706,714,722,730,738,746,754,762,770,778,786,794,802
|
||||
|
||||
//MaxSP - Wizard/High Wizard/Baby Wizard
|
||||
1,99,9:4010:4032,1,19,28,37,46,55,64,73,82,91,100,109,118,127,136,145,154,163,172,181,190,199,208,217,226,235,244,253,262,271,280,289,298,307,316,325,334,343,352,361,370,379,388,397,406,415,424,433,442,451,460,469,478,487,496,505,514,523,532,541,550,559,568,577,586,595,604,613,622,631,640,649,658,667,676,685,694,703,712,721,730,739,748,757,766,775,784,793,802,811,820,829,838,847,856,865,874,883,892,901
|
||||
|
||||
//MaxSP - Blacksmith/Hunter/Assassin/Alchemist/Whitesmith/Sniper/Assassin Cross/Creator/Baby Blacksmith/Baby Hunter/Baby Assassin/Baby Alchemist
|
||||
1,99,10:11:12:18:4011:4012:4013:4019:4033:4034:4035:4041,1,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290,294,298,302,306,310,314,318,322,326,330,334,338,342,346,350,354,358,362,366,370,374,378,382,386,390,394,398,402,406
|
||||
|
||||
//MaxSP - Crusader/Monk/Crusader (Peco)/Paladin/Champion/Paladin (Peco)/Baby Crusader/Baby Monk/Baby Crusader (Peco)
|
||||
1,99,14:15:21:4015:4016:4022:4037:4038:4044,1,14,19,24,28,33,38,42,47,52,57,61,66,71,75,80,85,89,94,99,104,108,113,118,122,127,132,136,141,146,151,155,160,165,169,174,179,183,188,193,198,202,207,212,216,221,226,230,235,240,245,249,254,259,263,268,273,277,282,287,292,296,301,306,310,315,320,324,329,334,339,343,348,353,357,362,367,371,376,381,386,390,395,400,404,409,414,418,423,428,433,437,442,447,451,456,461,465,470,475
|
||||
|
||||
//MaxSP - Sage/Professor/Baby Sage
|
||||
1,99,16:4017:4039,1,17,24,31,38,45,52,59,66,73,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,332,339,346,353,360,367,374,381,388,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,514,521,528,535,542,549,556,563,570,577,584,591,598,605,612,619,626,633,640,647,654,661,668,675,682,689,696,703
|
||||
|
||||
//MaxSP - Gunslinger
|
||||
1,99,24,1,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,61,64,67,70,73,76,79,82,85,89,93,97,101,105,109,113,117,121,125,129,131,135,139,141,145,149,153,157,161,165,169,173,177,181,186,191,196,201,206,211,216,221,226,231,236,241,246,251,256,261,266,271,276,281,286,291,296,301,306,312,318,324,336,342,348,354,360,366,372,378,384,390,396,402,408,414,420,426,432,438,444,450,456
|
||||
|
||||
//MaxSP - Ninja
|
||||
1,99,25,1,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59,62,65,68,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151,156,161,166,171,176,181,186,191,196,201,206,211,216,221,226,231,236,241,246,251,257,263,269,275,281,287,293,299,305,311,317,323,329,335,341,347,353,359,365,371,378,386,394,402,410,418,426,434,442,450,458,466,474,482,490,498,506,514,522
|
||||
|
||||
//MaxSP - Taekwon
|
||||
1,99,4046,1,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,151,152,153,154,155,156,157,158,159,170,171,172,173,174,175,176,177,178,188,190,190,190,190,190,190,190,190,190,200
|
||||
|
||||
//MaxSP - Star Knight/Star Knight (flying)
|
||||
1,99,4047:4048,1,14,19,24,28,33,38,42,47,52,57,61,66,71,75,80,85,89,94,99,104,108,113,118,122,127,132,136,141,146,151,155,160,165,169,174,179,183,188,193,198,202,207,212,216,221,226,230,235,240,245,249,254,259,263,268,273,277,282,287,292,296,301,306,310,315,320,324,329,334,339,341,343,345,347,349,351,353,355,357,386,388,390,392,394,396,398,400,402,404,430,433,436,439,442,445,448,451,454,500
|
||||
|
||||
//MaxSP - Soul Linker
|
||||
1,99,4049,1,19,28,37,46,55,64,73,82,91,100,109,118,127,136,145,154,163,172,181,190,199,208,217,226,235,244,253,262,271,280,289,298,307,316,325,334,343,352,361,370,379,388,397,406,415,424,433,442,451,460,469,478,487,496,505,514,523,532,541,550,559,568,577,586,595,604,613,622,631,635,640,645,650,655,660,665,670,675,680,730,735,740,745,750,755,760,765,770,775,820,825,830,845,850,855,860,865,870,900
|
||||
|
||||
//MaxSP - Munak/Bongun
|
||||
1,99,4050,1,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307
|
||||
|
||||
//MaxSP - Death Knight
|
||||
1,99,4051,1,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,118,121,124,127,130,133,136,139,142,145,148,151,154,157,160,163,166,169,172,175,178,181,184,187,190,193,196,199,202,205,208,211,214,217,220,223,226,229,232,235,238,241,244,247,250,253,256,259,262,265,268,271,274,277,280,283,286,289,292,295,298,301,304,307
|
||||
|
||||
//MaxSP - Dark Collector
|
||||
1,99,4052,1,17,24,31,38,45,52,59,66,73,80,87,94,101,108,115,122,129,136,143,150,157,164,171,178,185,192,199,206,213,220,227,234,241,248,255,262,269,276,283,290,297,304,311,318,325,332,339,346,353,360,367,374,381,388,395,402,409,416,423,430,437,444,451,458,465,472,479,486,493,500,507,514,521,528,535,542,549,556,563,570,577,584,591,598,605,612,619,626,633,640,647,654,661,668,675,682,689,696,703
|
||||
|
||||
//MaxSP - Rune Knight/Rune Knight_T/Rune Knight (Dragon)/Rune Knight (Dragon)_T
|
||||
99,150,4054:4060:4080:4081:4096:4109,1,300,310,313,316,319,322,325,328,331,334,337,340,343,346,349,352,355,358,361,364,367,370,373,376,379,382,385,388,391,394,397,400,403,406,409,412,415,418,421,424,427,430,433,436,439,442,445,448,451,454,457,460
|
||||
|
||||
//MaxSP - Warlock/Sorcerer/Genetic/Warlock_T/Sorcerer_T/Genetic_T
|
||||
99,150,4055:4061:4067:4071:4074:4078:4097:4103:4107,1,900,910,919,928,937,946,955,964,973,982,991,1000,1009,1018,1027,1036,1045,1054,1063,1072,1081,1090,1099,1108,1117,1126,1135,1144,1153,1162,1171,1180,1189,1198,1207,1216,1225,1234,1243,1252,1261,1270,1279,1288,1297,1306,1315,1324,1333,1342,1351,1360
|
||||
|
||||
//MaxSP - Arch Bishop/Arch Bishop_T
|
||||
99,150,4057:4063:4099,1,800,810,818,826,834,842,850,858,866,874,882,890,898,906,914,922,930,938,946,954,962,970,978,986,994,1002,1010,1018,1026,1034,1042,1050,1058,1066,1074,1082,1090,1098,1106,1114,1122,1130,1138,1146,1154,1162,1170,1178,1186,1194,1202,1210
|
||||
|
||||
//MaxSP - Ranger/Mechanic/Guillotine Cross/Ranger_T/Mechanic_T/Guillotine Cross_T/Royal Guard/Minstrel/Wanderer/Sura/Shadow Chaser/Royal Guard_T/Minstrel_T/Wanderer_T/Sura_T/Shadow Chaser_T/Royal Guard (Gryphon)/Royal Guard (Gryphon)_T/Ranger (Warg)/Ranger (Warg)_T/Mechanic (Mado Gear)/Mechanic (Mado Gear)_T
|
||||
1,150,4056:4058:4059:4062:4064:4065:4066:4068:4069:4070:4072:4073:4075:4076:4077:4079:4082:4083:4084:4085:4086:4087:4098:4100:4101:4102:4104:4105:4106:4108:4110:4111:4112,1,14,18,22,26,30,34,38,42,46,50,54,58,62,66,70,74,78,82,86,90,94,98,102,106,110,114,118,122,126,130,134,138,142,146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,214,218,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290,294,298,302,306,310,314,318,322,326,330,334,338,342,346,350,354,358,362,366,370,374,378,382,386,390,394,398,402,406,410,414,418,422,426,430,434,438,442,446,450,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610
|
@ -58,7 +58,7 @@ char* jstrescapecpy (char* pt, const char* spt)
|
||||
pt[0] = '\0';
|
||||
return &pt[0];
|
||||
}
|
||||
|
||||
|
||||
while (spt[i] != '\0') {
|
||||
switch (spt[i]) {
|
||||
case '\'':
|
||||
@ -150,6 +150,27 @@ char* trim(char* str)
|
||||
return str;
|
||||
}
|
||||
|
||||
// Note: This function returns a pointer to a substring of the original string.
|
||||
// If the given string was allocated dynamically, the caller must not overwrite
|
||||
// that pointer with the returned value, since the original pointer must be
|
||||
// deallocated using the same allocator with which it was allocated. The return
|
||||
// value must NOT be deallocated using free() etc.
|
||||
char *trim2(char *str,char flag){
|
||||
char *end;
|
||||
if(flag&1){ // Trim leading space
|
||||
while(isspace(*str)) str++;
|
||||
if(*str == 0) // All spaces?
|
||||
return str;
|
||||
}
|
||||
if(flag&2){ // Trim trailing space
|
||||
end = str + strlen(str) - 1;
|
||||
while(end > str && isspace(*end)) end--;
|
||||
*(end+1) = 0; // Write new null terminator
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
// Converts one or more consecutive occurences of the delimiters into a single space
|
||||
// and removes such occurences from the beginning and end of string
|
||||
// NOTE: make sure the string is not const!!
|
||||
@ -188,7 +209,7 @@ char* normalize_name(char* str,const char* delims)
|
||||
return str;
|
||||
}
|
||||
|
||||
//stristr: Case insensitive version of strstr, code taken from
|
||||
//stristr: Case insensitive version of strstr, code taken from
|
||||
//http://www.daniweb.com/code/snippet313.html, Dave Sinkula
|
||||
//
|
||||
const char* stristr(const char* haystack, const char* needle)
|
||||
@ -331,7 +352,7 @@ int e_mail_check(char* email)
|
||||
|
||||
//--------------------------------------------------
|
||||
// Return numerical value of a switch configuration
|
||||
// on/off, english, français, deutsch, español, portuguese
|
||||
// on/off, english, fran<EFBFBD>ais, deutsch, espa<70>ol, portuguese
|
||||
//--------------------------------------------------
|
||||
int config_switch(const char* str)
|
||||
{
|
||||
@ -603,13 +624,13 @@ int sv_parse_next(struct s_svstate* sv)
|
||||
/// out_pos[0] and out_pos[1] are the start and end of line.
|
||||
/// Other position pairs are the start and end of fields.
|
||||
/// Returns the number of fields found or -1 if an error occurs.
|
||||
///
|
||||
///
|
||||
/// out_pos can be NULL.
|
||||
/// If a line terminator is found, the end position is placed there.
|
||||
/// out_pos[2] and out_pos[3] for the first field, out_pos[4] and out_pos[5]
|
||||
/// out_pos[2] and out_pos[3] for the first field, out_pos[4] and out_pos[5]
|
||||
/// for the seconds field and so on.
|
||||
/// Unfilled positions are set to -1.
|
||||
///
|
||||
///
|
||||
/// @param str String to parse
|
||||
/// @param len Length of the string
|
||||
/// @param startoff Where to start parsing
|
||||
@ -655,11 +676,11 @@ int sv_parse(const char* str, int len, int startoff, char delim, int* out_pos, i
|
||||
/// out_fields[0] is the start of the next line.
|
||||
/// Other entries are the start of fields (nul-teminated).
|
||||
/// Returns the number of fields found or -1 if an error occurs.
|
||||
///
|
||||
///
|
||||
/// out_fields can be NULL.
|
||||
/// Fields that don't fit in out_fields are not nul-terminated.
|
||||
/// Extra entries in out_fields are filled with the end of the last field (empty string).
|
||||
///
|
||||
///
|
||||
/// @param str String to parse
|
||||
/// @param len Length of the string
|
||||
/// @param startoff Where to start parsing
|
||||
@ -965,7 +986,7 @@ bool sv_readdb(const char* directory, const char* filename, char delim, int minc
|
||||
int entries = 0;
|
||||
char** fields; // buffer for fields ([0] is reserved)
|
||||
int columns, fields_length;
|
||||
char path[1024], line[1024];
|
||||
char path[1024], *line, colsize[512];
|
||||
char* match;
|
||||
|
||||
snprintf(path, sizeof(path), "%s/%s", directory, filename);
|
||||
@ -981,9 +1002,10 @@ bool sv_readdb(const char* directory, const char* filename, char delim, int minc
|
||||
// allocate enough memory for the maximum requested amount of columns plus the reserved one
|
||||
fields_length = maxcols+1;
|
||||
fields = (char**)aMalloc(fields_length*sizeof(char*));
|
||||
line = (char*)aMalloc(fields_length*sizeof(colsize));
|
||||
|
||||
// process rows one by one
|
||||
while( fgets(line, sizeof(line), fp) )
|
||||
while( fgets(line, fields_length*sizeof(colsize), fp) )
|
||||
{
|
||||
lines++;
|
||||
|
||||
@ -992,7 +1014,8 @@ bool sv_readdb(const char* directory, const char* filename, char delim, int minc
|
||||
match[0] = 0;
|
||||
}
|
||||
|
||||
//TODO: strip trailing whitespace
|
||||
//trim(line); //TODO: strip trailing whitespace
|
||||
//trim2(line,1); //removing trailing actually break mob_skill_db
|
||||
if( line[0] == '\0' || line[0] == '\n' || line[0] == '\r')
|
||||
continue;
|
||||
|
||||
@ -1026,6 +1049,7 @@ bool sv_readdb(const char* directory, const char* filename, char delim, int minc
|
||||
}
|
||||
|
||||
aFree(fields);
|
||||
aFree(line);
|
||||
fclose(fp);
|
||||
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", entries, path);
|
||||
|
||||
@ -1039,7 +1063,7 @@ bool sv_readdb(const char* directory, const char* filename, char delim, int minc
|
||||
// @author MouseJstr (original)
|
||||
|
||||
/// Allocates a StringBuf
|
||||
StringBuf* StringBuf_Malloc()
|
||||
StringBuf* StringBuf_Malloc()
|
||||
{
|
||||
StringBuf* self;
|
||||
CREATE(self, StringBuf, 1);
|
||||
@ -1114,7 +1138,7 @@ int StringBuf_Append(StringBuf* self, const StringBuf* sbuf)
|
||||
}
|
||||
|
||||
// Appends str to the StringBuf
|
||||
int StringBuf_AppendStr(StringBuf* self, const char* str)
|
||||
int StringBuf_AppendStr(StringBuf* self, const char* str)
|
||||
{
|
||||
int available = self->max_ - (self->ptr_ - self->buf_);
|
||||
int needed = (int)strlen(str);
|
||||
@ -1133,20 +1157,20 @@ int StringBuf_AppendStr(StringBuf* self, const char* str)
|
||||
}
|
||||
|
||||
// Returns the length of the data in the Stringbuf
|
||||
int StringBuf_Length(StringBuf* self)
|
||||
int StringBuf_Length(StringBuf* self)
|
||||
{
|
||||
return (int)(self->ptr_ - self->buf_);
|
||||
}
|
||||
|
||||
/// Returns the data in the StringBuf
|
||||
char* StringBuf_Value(StringBuf* self)
|
||||
char* StringBuf_Value(StringBuf* self)
|
||||
{
|
||||
*self->ptr_ = '\0';
|
||||
return self->buf_;
|
||||
}
|
||||
|
||||
/// Clears the contents of the StringBuf
|
||||
void StringBuf_Clear(StringBuf* self)
|
||||
void StringBuf_Clear(StringBuf* self)
|
||||
{
|
||||
self->ptr_ = self->buf_;
|
||||
}
|
||||
@ -1160,7 +1184,7 @@ void StringBuf_Destroy(StringBuf* self)
|
||||
}
|
||||
|
||||
// Frees a StringBuf returned by StringBuf_Malloc
|
||||
void StringBuf_Free(StringBuf* self)
|
||||
void StringBuf_Free(StringBuf* self)
|
||||
{
|
||||
StringBuf_Destroy(self);
|
||||
aFree(self);
|
||||
|
@ -2329,7 +2329,7 @@ void clif_inventorylist(struct map_session_data *sd) {
|
||||
unsigned char *bufe;
|
||||
|
||||
#if PACKETVER < 5
|
||||
const int s = 10; //Entry size.
|
||||
const int s = 10; //Entry size
|
||||
#elif PACKETVER < 20080102
|
||||
const int s = 18;
|
||||
#elif PACKETVER < 20120925
|
||||
@ -16711,7 +16711,7 @@ void packetdb_readdb(void)
|
||||
{
|
||||
FILE *fp;
|
||||
char line[1024];
|
||||
int ln=0;
|
||||
int ln=0, entries=0;
|
||||
int cmd,i,j,packet_ver;
|
||||
int max_cmd=-1;
|
||||
int skip_ver = 0;
|
||||
@ -17298,6 +17298,7 @@ void packetdb_readdb(void)
|
||||
|
||||
packet_db[packet_ver][cmd].pos[j] = k;
|
||||
}
|
||||
entries++;
|
||||
}
|
||||
fclose(fp);
|
||||
if(max_cmd > MAX_PACKET_DB)
|
||||
@ -17311,7 +17312,7 @@ void packetdb_readdb(void)
|
||||
|
||||
clif_config.packet_db_ver = j?j:MAX_PACKET_VER;
|
||||
}
|
||||
ShowStatus("Done reading packet database from '"CL_WHITE"%s"CL_RESET"'.\n","packet_db.txt");
|
||||
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", entries, "packet_db.txt");
|
||||
ShowStatus("Using default packet version: "CL_WHITE"%d"CL_RESET".\n", clif_config.packet_db_ver);
|
||||
}
|
||||
|
||||
|
131
src/map/itemdb.c
131
src/map/itemdb.c
@ -26,7 +26,7 @@ static struct item_group itemgroup_db[MAX_ITEMGROUP];
|
||||
struct item_data dummy_item; //This is the default dummy item used for non-existant items. [Skotlex]
|
||||
|
||||
/**
|
||||
* Search for item name
|
||||
* Search for item name
|
||||
* name = item alias, so we should find items aliases first. if not found then look for "jname" (full name)
|
||||
* @see DBApply
|
||||
*/
|
||||
@ -52,7 +52,7 @@ static int itemdb_searchname_sub(DBKey key, DBData *data, va_list ap)
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Return item data from item name. (lookup)
|
||||
* Return item data from item name. (lookup)
|
||||
*------------------------------------------*/
|
||||
struct item_data* itemdb_searchname(const char *str)
|
||||
{
|
||||
@ -137,7 +137,7 @@ int itemdb_searchname_array(struct item_data** data, int size, const char *str)
|
||||
|
||||
|
||||
/*==========================================
|
||||
* Return a random item id from group. (takes into account % chance giving/tot group)
|
||||
* Return a random item id from group. (takes into account % chance giving/tot group)
|
||||
*------------------------------------------*/
|
||||
int itemdb_searchrandomid(int group)
|
||||
{
|
||||
@ -147,7 +147,7 @@ int itemdb_searchrandomid(int group)
|
||||
}
|
||||
if (itemgroup_db[group].qty)
|
||||
return itemgroup_db[group].nameid[rnd()%itemgroup_db[group].qty];
|
||||
|
||||
|
||||
ShowError("itemdb_searchrandomid: No item entries for group id %d\n", group);
|
||||
return UNKNOWN_ITEM_ID;
|
||||
}
|
||||
@ -204,7 +204,7 @@ const char* itemdb_typename(int type)
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* Converts the jobid from the format in itemdb
|
||||
* Converts the jobid from the format in itemdb
|
||||
* to the format used by the map server. [Skotlex]
|
||||
*------------------------------------------*/
|
||||
static void itemdb_jobid2mapid(unsigned int *bclass, unsigned int jobmask)
|
||||
@ -359,7 +359,7 @@ int itemdb_isequip(int nameid)
|
||||
* Alternate version of itemdb_isequip
|
||||
*------------------------------------------*/
|
||||
int itemdb_isequip2(struct item_data *data)
|
||||
{
|
||||
{
|
||||
nullpo_ret(data);
|
||||
switch(data->type) {
|
||||
case IT_WEAPON:
|
||||
@ -452,10 +452,10 @@ int itemdb_isrestricted(struct item* item, int gmlv, int gmlv2, int (*func)(stru
|
||||
|
||||
if (!func(item_data, gmlv, gmlv2))
|
||||
return 0;
|
||||
|
||||
|
||||
if(item_data->slot == 0 || itemdb_isspecial(item->card[0]))
|
||||
return 1;
|
||||
|
||||
|
||||
for(i = 0; i < item_data->slot; i++) {
|
||||
if (!item->card[i]) continue;
|
||||
if (!func(itemdb_search(item->card[i]), gmlv, gmlv2))
|
||||
@ -519,11 +519,11 @@ static void itemdb_read_itemgroup_sub(const char* filename)
|
||||
{
|
||||
FILE *fp;
|
||||
char line[1024];
|
||||
int ln=0;
|
||||
int ln=0, entries=0;
|
||||
int groupid,j,k,nameid;
|
||||
char *str[3],*p;
|
||||
char w1[1024], w2[1024];
|
||||
|
||||
|
||||
if( (fp=fopen(filename,"r"))==NULL ){
|
||||
ShowError("can't read %s\n", filename);
|
||||
return;
|
||||
@ -571,8 +571,10 @@ static void itemdb_read_itemgroup_sub(const char* filename)
|
||||
}
|
||||
for(j=0;j<k;j++)
|
||||
itemgroup_db[groupid].nameid[itemgroup_db[groupid].qty++] = nameid;
|
||||
entries++;
|
||||
}
|
||||
fclose(fp);
|
||||
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", entries, filename);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -582,7 +584,6 @@ static void itemdb_read_itemgroup(void)
|
||||
snprintf(path, 255, "%s/"DBPATH"item_group_db.txt", db_path);
|
||||
memset(&itemgroup_db, 0, sizeof(itemgroup_db));
|
||||
itemdb_read_itemgroup_sub(path);
|
||||
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n", "item_group_db.txt");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -748,12 +749,12 @@ static bool itemdb_read_nouse(char* fields[], int columns, int current)
|
||||
struct item_data* id;
|
||||
|
||||
nameid = atoi(fields[0]);
|
||||
|
||||
|
||||
if( ( id = itemdb_exists(nameid) ) == NULL ) {
|
||||
ShowWarning("itemdb_read_nouse: Invalid item id %d.\n", nameid);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
flag = atoi(fields[1]);
|
||||
override = atoi(fields[2]);
|
||||
|
||||
@ -768,21 +769,21 @@ static bool itemdb_read_nouse(char* fields[], int columns, int current)
|
||||
**/
|
||||
int itemdb_combo_split_atoi (char *str, int *val) {
|
||||
int i;
|
||||
|
||||
|
||||
for (i=0; i<MAX_ITEMS_PER_COMBO; i++) {
|
||||
if (!str) break;
|
||||
|
||||
|
||||
val[i] = atoi(str);
|
||||
|
||||
|
||||
str = strchr(str,':');
|
||||
|
||||
|
||||
if (str)
|
||||
*str++=0;
|
||||
}
|
||||
|
||||
|
||||
if( i == 0 ) //No data found.
|
||||
return 0;
|
||||
|
||||
|
||||
return i;
|
||||
}
|
||||
/**
|
||||
@ -791,56 +792,56 @@ int itemdb_combo_split_atoi (char *str, int *val) {
|
||||
void itemdb_read_combos() {
|
||||
uint32 lines = 0, count = 0;
|
||||
char line[1024];
|
||||
|
||||
|
||||
char path[256];
|
||||
FILE* fp;
|
||||
|
||||
|
||||
sprintf(path, "%s/%s", db_path, DBPATH"item_combo_db.txt");
|
||||
|
||||
|
||||
if ((fp = fopen(path, "r")) == NULL) {
|
||||
ShowError("itemdb_read_combos: File not found \"%s\".\n", path);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// process rows one by one
|
||||
while(fgets(line, sizeof(line), fp)) {
|
||||
char *str[2], *p;
|
||||
|
||||
|
||||
lines++;
|
||||
|
||||
if (line[0] == '/' && line[1] == '/')
|
||||
continue;
|
||||
|
||||
|
||||
memset(str, 0, sizeof(str));
|
||||
|
||||
|
||||
p = line;
|
||||
|
||||
|
||||
p = trim(p);
|
||||
|
||||
if (*p == '\0')
|
||||
continue;// empty line
|
||||
|
||||
|
||||
if (!strchr(p,','))
|
||||
{
|
||||
/* is there even a single column? */
|
||||
ShowError("itemdb_read_combos: Insufficient columns in line %d of \"%s\", skipping.\n", lines, path);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
str[0] = p;
|
||||
p = strchr(p,',');
|
||||
*p = '\0';
|
||||
p++;
|
||||
|
||||
str[1] = p;
|
||||
p = strchr(p,',');
|
||||
p = strchr(p,',');
|
||||
p++;
|
||||
|
||||
|
||||
if (str[1][0] != '{') {
|
||||
ShowError("itemdb_read_combos(#1): Invalid format (Script column) in line %d of \"%s\", skipping.\n", lines, path);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
/* no ending key anywhere (missing \}\) */
|
||||
if ( str[1][strlen(str[1])-1] != '}' ) {
|
||||
ShowError("itemdb_read_combos(#2): Invalid format (Script column) in line %d of \"%s\", skipping.\n", lines, path);
|
||||
@ -850,12 +851,12 @@ void itemdb_read_combos() {
|
||||
int v = 0, retcount = 0;
|
||||
struct item_data * id = NULL;
|
||||
int idx = 0;
|
||||
|
||||
|
||||
if((retcount = itemdb_combo_split_atoi(str[0], items)) < 2) {
|
||||
ShowError("itemdb_read_combos: line %d of \"%s\" doesn't have enough items to make for a combo (min:2), skipping.\n", lines, path);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
/* validate */
|
||||
for(v = 0; v < retcount; v++) {
|
||||
if( !itemdb_exists(items[v]) ) {
|
||||
@ -868,9 +869,9 @@ void itemdb_read_combos() {
|
||||
continue;
|
||||
|
||||
id = itemdb_exists(items[0]);
|
||||
|
||||
|
||||
idx = id->combos_count;
|
||||
|
||||
|
||||
/* first entry, create */
|
||||
if( id->combos == NULL ) {
|
||||
CREATE(id->combos, struct item_combo*, 1);
|
||||
@ -878,9 +879,9 @@ void itemdb_read_combos() {
|
||||
} else {
|
||||
RECREATE(id->combos, struct item_combo*, ++id->combos_count);
|
||||
}
|
||||
|
||||
|
||||
CREATE(id->combos[idx],struct item_combo,1);
|
||||
|
||||
|
||||
id->combos[idx]->nameid = aMalloc( retcount * sizeof(unsigned short) );
|
||||
id->combos[idx]->count = retcount;
|
||||
id->combos[idx]->script = parse_script(str[1], path, lines, 0);
|
||||
@ -890,40 +891,40 @@ void itemdb_read_combos() {
|
||||
for( v = 0; v < retcount; v++ ) {
|
||||
id->combos[idx]->nameid[v] = items[v];
|
||||
}
|
||||
|
||||
|
||||
/* populate the children to refer to this combo */
|
||||
for( v = 1; v < retcount; v++ ) {
|
||||
struct item_data * it;
|
||||
int index;
|
||||
|
||||
|
||||
it = itemdb_exists(items[v]);
|
||||
|
||||
|
||||
index = it->combos_count;
|
||||
|
||||
|
||||
if( it->combos == NULL ) {
|
||||
CREATE(it->combos, struct item_combo*, 1);
|
||||
it->combos_count = 1;
|
||||
} else {
|
||||
RECREATE(it->combos, struct item_combo*, ++it->combos_count);
|
||||
}
|
||||
|
||||
|
||||
CREATE(it->combos[index],struct item_combo,1);
|
||||
|
||||
|
||||
/* we copy previously alloc'd pointers and just set it to reference */
|
||||
memcpy(it->combos[index],id->combos[idx],sizeof(struct item_combo));
|
||||
/* we flag this way to ensure we don't double-dealloc same data */
|
||||
it->combos[index]->isRef = true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
|
||||
fclose(fp);
|
||||
|
||||
|
||||
ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"item_combo_db"CL_RESET"'.\n", count);
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -987,7 +988,7 @@ static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scr
|
||||
*/
|
||||
int nameid;
|
||||
struct item_data* id;
|
||||
|
||||
|
||||
nameid = atoi(str[0]);
|
||||
if( nameid <= 0 )
|
||||
{
|
||||
@ -1026,9 +1027,9 @@ static bool itemdb_parse_dbrow(char** str, const char* source, int line, int scr
|
||||
id->value_sell = atoi(str[5]);
|
||||
else
|
||||
id->value_sell = id->value_buy / 2;
|
||||
/*
|
||||
/*
|
||||
if ( !str[4][0] && !str[5][0])
|
||||
{
|
||||
{
|
||||
ShowWarning("itemdb_parse_dbrow: No buying/selling price defined for item %d (%s), using 20/10z\n", nameid, id->jname);
|
||||
id->value_buy = 20;
|
||||
id->value_sell = 10;
|
||||
@ -1197,18 +1198,18 @@ static int itemdb_readdb(void)
|
||||
continue;
|
||||
}
|
||||
str[21] = p;
|
||||
|
||||
|
||||
if ( str[21][strlen(str[21])-2] != '}' ) {
|
||||
/* lets count to ensure it's not something silly e.g. a extra space at line ending */
|
||||
int v, lcurly = 0, rcurly = 0;
|
||||
|
||||
|
||||
for( v = 0; v < strlen(str[21]); v++ ) {
|
||||
if( str[21][v] == '{' )
|
||||
lcurly++;
|
||||
else if ( str[21][v] == '}' )
|
||||
rcurly++;
|
||||
}
|
||||
|
||||
|
||||
if( lcurly != rcurly ) {
|
||||
ShowError("itemdb_readdb: Mismatching curly braces in line %d of \"%s\" (item with id %d), skipping.\n", lines, path, atoi(str[0]));
|
||||
continue;
|
||||
@ -1217,7 +1218,7 @@ static int itemdb_readdb(void)
|
||||
|
||||
if (!itemdb_parse_dbrow(str, path, lines, 0))
|
||||
continue;
|
||||
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
@ -1242,7 +1243,7 @@ static int itemdb_read_sqldb(void) {
|
||||
#endif
|
||||
item_db2_db };
|
||||
int fi;
|
||||
|
||||
|
||||
for( fi = 0; fi < ARRAYLENGTH(item_db_name); ++fi ) {
|
||||
uint32 lines = 0, count = 0;
|
||||
|
||||
@ -1289,7 +1290,7 @@ static int itemdb_read_sqldb(void) {
|
||||
*------------------------------------------*/
|
||||
uint64 itemdb_unique_id(int8 flag, int64 value) {
|
||||
static uint64 item_uid = 0;
|
||||
|
||||
|
||||
if(flag)
|
||||
{
|
||||
if(flag == 1)
|
||||
@ -1297,7 +1298,7 @@ uint64 itemdb_unique_id(int8 flag, int64 value) {
|
||||
return (item_uid = value);
|
||||
}else if(flag == 2)
|
||||
return (item_uid = value);
|
||||
|
||||
|
||||
return item_uid;
|
||||
}
|
||||
|
||||
@ -1327,12 +1328,12 @@ int itemdb_uid_load(){
|
||||
* read all item-related databases
|
||||
*------------------------------------*/
|
||||
static void itemdb_read(void) {
|
||||
|
||||
|
||||
if (db_use_sqldbs)
|
||||
itemdb_read_sqldb();
|
||||
else
|
||||
itemdb_readdb();
|
||||
|
||||
|
||||
itemdb_read_combos();
|
||||
itemdb_read_itemgroup();
|
||||
sv_readdb(db_path, "item_avail.txt", ',', 2, 2, -1, &itemdb_read_itemavail);
|
||||
@ -1401,7 +1402,7 @@ void itemdb_reload(void)
|
||||
struct map_session_data* sd;
|
||||
|
||||
int i,d,k;
|
||||
|
||||
|
||||
// clear the previous itemdb data
|
||||
for( i = 0; i < ARRAYLENGTH(itemdb_array); ++i )
|
||||
if( itemdb_array[i] )
|
||||
@ -1410,11 +1411,11 @@ void itemdb_reload(void)
|
||||
itemdb_other->clear(itemdb_other, itemdb_final_sub);
|
||||
|
||||
memset(itemdb_array, 0, sizeof(itemdb_array));
|
||||
|
||||
|
||||
// read new data
|
||||
itemdb_read();
|
||||
cashshop_reloaddb();
|
||||
|
||||
|
||||
//Epoque's awesome @reloaditemdb fix - thanks! [Ind]
|
||||
//- Fixes the need of a @reloadmobdb after a @reloaditemdb to re-link monster drop data
|
||||
for( i = 0; i < MAX_MOB_DB; i++ ) {
|
||||
@ -1435,7 +1436,7 @@ void itemdb_reload(void)
|
||||
|
||||
if (k == MAX_SEARCH)
|
||||
continue;
|
||||
|
||||
|
||||
if (id->mob[k].id != i)
|
||||
memmove(&id->mob[k+1], &id->mob[k], (MAX_SEARCH-k-1)*sizeof(id->mob[0]));
|
||||
id->mob[k].chance = entry->dropitem[d].p;
|
||||
|
@ -52,6 +52,7 @@ void map_msg_reload(void);
|
||||
|
||||
// Added definitions for WoESE objects. [L0ne_W0lf]
|
||||
enum MOBID {
|
||||
MOBID_PORING = 1002,
|
||||
MOBID_EMPERIUM = 1288,
|
||||
MOBID_TREAS01 = 1324,
|
||||
MOBID_TREAS40 = 1363,
|
||||
|
105
src/map/mob.c
105
src/map/mob.c
@ -53,7 +53,7 @@
|
||||
#define MOB_MAX_DELAY (24*3600*1000)
|
||||
#define MAX_MINCHASE 30 //Max minimum chase value to use for mobs.
|
||||
#define RUDE_ATTACKED_COUNT 2 //After how many rude-attacks should the skill be used?
|
||||
#define MAX_MOB_CHAT 250 //Max Skill's messages
|
||||
#define MAX_MOB_CHAT 50 //Max Skill's messages
|
||||
|
||||
//Dynamic mob database, allows saving of memory when there's big gaps in the mob_db [Skotlex]
|
||||
struct mob_db *mob_db_data[MAX_MOB_DB+1];
|
||||
@ -4007,7 +4007,7 @@ static int mob_read_randommonster(void)
|
||||
FILE *fp;
|
||||
char line[1024];
|
||||
char *str[10],*p;
|
||||
int i,j;
|
||||
int i,j, entries;
|
||||
const char* mobfile[] = {
|
||||
DBPATH"mob_branch.txt",
|
||||
DBPATH"mob_poring.txt",
|
||||
@ -4018,8 +4018,9 @@ static int mob_read_randommonster(void)
|
||||
memset(&summon, 0, sizeof(summon));
|
||||
|
||||
for( i = 0; i < ARRAYLENGTH(mobfile) && i < MAX_RANDOMMONSTER; i++ )
|
||||
{
|
||||
mob_db_data[0]->summonper[i] = 1002; // Default fallback value, in case the database does not provide one
|
||||
{ // MobID,DummyName,Rate
|
||||
entries=0;
|
||||
mob_db_data[0]->summonper[i] = MOBID_PORING; // Default fallback value, in case the database does not provide one
|
||||
sprintf(line, "%s/%s", db_path, mobfile[i]);
|
||||
fp=fopen(line,"r");
|
||||
if(fp==NULL){
|
||||
@ -4053,6 +4054,7 @@ static int mob_read_randommonster(void)
|
||||
break;
|
||||
}
|
||||
}
|
||||
entries++;
|
||||
}
|
||||
if (i && !summon[i].qty)
|
||||
{ //At least have the default here.
|
||||
@ -4060,30 +4062,24 @@ static int mob_read_randommonster(void)
|
||||
summon[i].qty = 1;
|
||||
}
|
||||
fclose(fp);
|
||||
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n",mobfile[i]);
|
||||
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", entries, mobfile[i]);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* processes one mob_chat_db entry [SnakeDrak]
|
||||
* @param last_msg_id ensures that only one error message per mob id is printed
|
||||
*------------------------------------------*/
|
||||
static bool mob_parse_row_chatdb(char** str, const char* source, int line, int* last_msg_id)
|
||||
//processes one mob_chat_db entry [SnakeDrak]
|
||||
//db struct: Line_ID,Color_Code,Dialog
|
||||
static bool mob_parse_row_chatdb(char* fields[], int columns, int current)
|
||||
{
|
||||
char* msg;
|
||||
struct mob_chat *ms;
|
||||
int msg_id;
|
||||
size_t len;
|
||||
|
||||
msg_id = atoi(str[0]);
|
||||
msg_id = atoi(fields[0]);
|
||||
|
||||
if (msg_id <= 0 || msg_id > MAX_MOB_CHAT)
|
||||
{
|
||||
if (msg_id != *last_msg_id) {
|
||||
ShowError("mob_chat: Invalid chat ID: %d at %s, line %d\n", msg_id, source, line);
|
||||
*last_msg_id = msg_id;
|
||||
}
|
||||
if (msg_id <= 0 || msg_id > MAX_MOB_CHAT){
|
||||
ShowError("mob_parse_row_chatdb: Invalid chat ID: %d at %s, line %d\n", msg_id, columns, current);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -4094,9 +4090,9 @@ static bool mob_parse_row_chatdb(char** str, const char* source, int line, int*
|
||||
//MSG ID
|
||||
ms->msg_id=msg_id;
|
||||
//Color
|
||||
ms->color=strtoul(str[1],NULL,0);
|
||||
ms->color=strtoul(fields[1],NULL,0);
|
||||
//Message
|
||||
msg = str[2];
|
||||
msg = fields[2];
|
||||
len = strlen(msg);
|
||||
|
||||
while( len && ( msg[len-1]=='\r' || msg[len-1]=='\n' ) )
|
||||
@ -4104,82 +4100,21 @@ static bool mob_parse_row_chatdb(char** str, const char* source, int line, int*
|
||||
len--;
|
||||
}
|
||||
|
||||
if(len>(CHAT_SIZE_MAX-1))
|
||||
{
|
||||
if (msg_id != *last_msg_id) {
|
||||
ShowError("mob_chat: readdb: Message too long! Line %d, id: %d\n", line, msg_id);
|
||||
*last_msg_id = msg_id;
|
||||
}
|
||||
if(len>(CHAT_SIZE_MAX-1)){
|
||||
ShowError("mob_chat: readdb: Message too long! Line %d, id: %d\n", current, msg_id);
|
||||
return false;
|
||||
}
|
||||
else if( !len )
|
||||
{
|
||||
else if( !len ){
|
||||
ShowWarning("mob_parse_row_chatdb: Empty message for id %d.\n", msg_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
msg[len] = 0; // strip previously found EOL
|
||||
safestrncpy(ms->msg, str[2], CHAT_SIZE_MAX);
|
||||
safestrncpy(ms->msg, fields[2], CHAT_SIZE_MAX);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* mob_chat_db.txt reading [SnakeDrak]
|
||||
*-------------------------------------------------------------------------*/
|
||||
static void mob_readchatdb(void)
|
||||
{
|
||||
char arc[]="mob_chat_db.txt";
|
||||
uint32 lines=0, count=0;
|
||||
char line[1024], path[256];
|
||||
int i, tmp=0;
|
||||
FILE *fp;
|
||||
sprintf(path, "%s/%s", db_path, arc);
|
||||
fp=fopen(path, "r");
|
||||
if(fp == NULL)
|
||||
{
|
||||
ShowWarning("mob_readchatdb: File not found \"%s\", skipping.\n", path);
|
||||
return;
|
||||
}
|
||||
|
||||
while(fgets(line, sizeof(line), fp))
|
||||
{
|
||||
char *str[3], *p, *np;
|
||||
int j=0;
|
||||
|
||||
lines++;
|
||||
if(line[0] == '/' && line[1] == '/')
|
||||
continue;
|
||||
memset(str, 0, sizeof(str));
|
||||
|
||||
p=line;
|
||||
while(ISSPACE(*p))
|
||||
++p;
|
||||
if(*p == '\0')
|
||||
continue;// empty line
|
||||
for(i = 0; i <= 2; i++)
|
||||
{
|
||||
str[i] = p;
|
||||
if(i<2 && (np = strchr(p, ',')) != NULL) {
|
||||
*np = '\0'; p = np + 1; j++;
|
||||
}
|
||||
}
|
||||
|
||||
if( j < 2 || str[2]==NULL)
|
||||
{
|
||||
ShowError("mob_readchatdb: Insufficient number of fields for skill at %s, line %d\n", arc, lines);
|
||||
continue;
|
||||
}
|
||||
|
||||
if( !mob_parse_row_chatdb(str, path, lines, &tmp) )
|
||||
continue;
|
||||
|
||||
count++;
|
||||
}
|
||||
fclose(fp);
|
||||
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n", arc);
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* processes one mob_skill_db entry
|
||||
*------------------------------------------*/
|
||||
@ -4585,7 +4520,7 @@ static bool mob_readdb_itemratio(char* str[], int columns, int current)
|
||||
static void mob_load(void)
|
||||
{
|
||||
sv_readdb(db_path, "mob_item_ratio.txt", ',', 2, 2+MAX_ITEMRATIO_MOBS, -1, &mob_readdb_itemratio); // must be read before mobdb
|
||||
mob_readchatdb();
|
||||
sv_readdb(db_path, "mob_chat_db.txt", '#', 3, 3, MAX_MOB_CHAT, &mob_parse_row_chatdb);
|
||||
if (db_use_sqldbs)
|
||||
{
|
||||
mob_read_sqldb();
|
||||
|
399
src/map/pc.c
399
src/map/pc.c
@ -47,10 +47,10 @@
|
||||
#include <string.h>
|
||||
#include <time.h>
|
||||
|
||||
int pc_split_atoui(char* str, unsigned int* val, char sep, int max);
|
||||
|
||||
#define PVP_CALCRANK_INTERVAL 1000 // PVP calculation interval
|
||||
static unsigned int exp_table[CLASS_COUNT][2][MAX_LEVEL];
|
||||
static unsigned int max_level[CLASS_COUNT][2];
|
||||
|
||||
static unsigned int statp[MAX_LEVEL+1];
|
||||
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
|
||||
static unsigned int level_penalty[3][RC_MAX][MAX_LEVEL*2+1];
|
||||
@ -1578,7 +1578,7 @@ int pc_calc_skilltree_normalize_job(struct map_session_data *sd)
|
||||
|
||||
skill_point = pc_calc_skillpoint(sd);
|
||||
|
||||
novice_skills = max_level[pc_class2idx(JOB_NOVICE)][1] - 1;
|
||||
novice_skills = job_info[pc_class2idx(JOB_NOVICE)].max_level[1] - 1;
|
||||
|
||||
// limit 1st class and above to novice job levels
|
||||
if(skill_point < novice_skills)
|
||||
@ -1595,7 +1595,7 @@ int pc_calc_skilltree_normalize_job(struct map_session_data *sd)
|
||||
{
|
||||
// if neither 2nd nor 3rd jobchange levels are known, we have to assume a default for 2nd
|
||||
if (!sd->change_level_3rd)
|
||||
sd->change_level_2nd = max_level[pc_class2idx(pc_mapid2jobid(sd->class_&MAPID_UPPERMASK, sd->status.sex))][1];
|
||||
sd->change_level_2nd = job_info[pc_class2idx(pc_mapid2jobid(sd->class_&MAPID_UPPERMASK, sd->status.sex))].max_level[1];
|
||||
else
|
||||
sd->change_level_2nd = 1 + skill_point + sd->status.skill_point
|
||||
- (sd->status.job_level - 1)
|
||||
@ -5874,14 +5874,12 @@ int pc_gainexp(struct map_session_data *sd, struct block_list *src, unsigned int
|
||||
/*==========================================
|
||||
* Returns max level for this character.
|
||||
*------------------------------------------*/
|
||||
unsigned int pc_maxbaselv(struct map_session_data *sd)
|
||||
{
|
||||
return max_level[pc_class2idx(sd->status.class_)][0];
|
||||
unsigned int pc_maxbaselv(struct map_session_data *sd){
|
||||
return job_info[pc_class2idx(sd->status.class_)].max_level[0];
|
||||
}
|
||||
|
||||
unsigned int pc_maxjoblv(struct map_session_data *sd)
|
||||
{
|
||||
return max_level[pc_class2idx(sd->status.class_)][1];
|
||||
unsigned int pc_maxjoblv(struct map_session_data *sd){
|
||||
return job_info[pc_class2idx(sd->status.class_)].max_level[1];
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
@ -5896,7 +5894,7 @@ unsigned int pc_nextbaseexp(struct map_session_data *sd)
|
||||
if(sd->status.base_level>=pc_maxbaselv(sd) || sd->status.base_level<=0)
|
||||
return 0;
|
||||
|
||||
return exp_table[pc_class2idx(sd->status.class_)][0][sd->status.base_level-1];
|
||||
return job_info[pc_class2idx(sd->status.class_)].exp_table[0][sd->status.base_level-1];
|
||||
}
|
||||
|
||||
//Base exp needed for this level.
|
||||
@ -5905,7 +5903,7 @@ unsigned int pc_thisbaseexp(struct map_session_data *sd)
|
||||
if(sd->status.base_level>pc_maxbaselv(sd) || sd->status.base_level<=1)
|
||||
return 0;
|
||||
|
||||
return exp_table[pc_class2idx(sd->status.class_)][0][sd->status.base_level-2];
|
||||
return job_info[pc_class2idx(sd->status.class_)].exp_table[0][sd->status.base_level-2];
|
||||
}
|
||||
|
||||
|
||||
@ -5923,7 +5921,7 @@ unsigned int pc_nextjobexp(struct map_session_data *sd)
|
||||
|
||||
if(sd->status.job_level>=pc_maxjoblv(sd) || sd->status.job_level<=0)
|
||||
return 0;
|
||||
return exp_table[pc_class2idx(sd->status.class_)][1][sd->status.job_level-1];
|
||||
return job_info[pc_class2idx(sd->status.class_)].exp_table[1][sd->status.job_level-1];
|
||||
}
|
||||
|
||||
//Job exp needed for this level.
|
||||
@ -5931,7 +5929,7 @@ unsigned int pc_thisjobexp(struct map_session_data *sd)
|
||||
{
|
||||
if(sd->status.job_level>pc_maxjoblv(sd) || sd->status.job_level<=1)
|
||||
return 0;
|
||||
return exp_table[pc_class2idx(sd->status.class_)][1][sd->status.job_level-2];
|
||||
return job_info[pc_class2idx(sd->status.class_)].exp_table[1][sd->status.job_level-2];
|
||||
}
|
||||
|
||||
/// Returns the value of the specified stat.
|
||||
@ -9627,7 +9625,7 @@ static bool pc_readdb_levelpenalty(char* fields[], int columns, int current)
|
||||
{
|
||||
int type, race, diff;
|
||||
|
||||
type = atoi(fields[0]);
|
||||
type = atoi(fields[0]); //1=experience, 2=item drop
|
||||
race = atoi(fields[1]);
|
||||
diff = atoi(fields[2]);
|
||||
|
||||
@ -9652,102 +9650,219 @@ static bool pc_readdb_levelpenalty(char* fields[], int columns, int current)
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//Reading job_db1.txt line, (class,weight,HPFactor,HPMultiplicator,SPFactor,aspd/lvl...)
|
||||
static bool pc_readdb_job1(char* fields[], int columns, int current){
|
||||
int idx, class_;
|
||||
unsigned int i;
|
||||
|
||||
class_ = atoi(fields[0]);
|
||||
|
||||
if(!pcdb_checkid(class_))
|
||||
{
|
||||
ShowWarning("status_readdb_job1: Invalid job class %d specified.\n", class_);
|
||||
return false;
|
||||
}
|
||||
idx = pc_class2idx(class_);
|
||||
|
||||
job_info[idx].max_weight_base = atoi(fields[1]);
|
||||
job_info[idx].hp_factor = atoi(fields[2]);
|
||||
job_info[idx].hp_multiplicator = atoi(fields[3]);
|
||||
job_info[idx].sp_factor = atoi(fields[4]);
|
||||
#ifdef RENEWAL_ASPD
|
||||
for(i = 0; i <= MAX_WEAPON_TYPE; i++)
|
||||
#else
|
||||
for(i = 0; i < MAX_WEAPON_TYPE; i++)
|
||||
#endif
|
||||
{
|
||||
job_info[idx].aspd_base[i] = atoi(fields[i+5]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//Reading job_db2.txt line (class,JobLv1,JobLv2,JobLv3,...)
|
||||
static bool pc_readdb_job2(char* fields[], int columns, int current)
|
||||
{
|
||||
int idx, class_, i;
|
||||
|
||||
class_ = atoi(fields[0]);
|
||||
|
||||
if(!pcdb_checkid(class_))
|
||||
{
|
||||
ShowWarning("status_readdb_job2: Invalid job class %d specified.\n", class_);
|
||||
return false;
|
||||
}
|
||||
idx = pc_class2idx(class_);
|
||||
|
||||
for(i = 1; i < columns; i++)
|
||||
{
|
||||
job_info[idx].job_bonus[i-1] = atoi(fields[i]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//Reading job_maxhpsp.txt line
|
||||
//startlvl,maxlvl,class,type,values...
|
||||
static bool pc_readdb_job_maxhpsp(char* fields[], int columns, int current)
|
||||
{
|
||||
int idx, i,j, maxlvl, startlvl;
|
||||
int job_id,job_count,jobs[CLASS_COUNT];
|
||||
int type;
|
||||
|
||||
startlvl = atoi(fields[0]);
|
||||
if(startlvl > MAX_LEVEL || startlvl<1){
|
||||
ShowError("pc_readdb_job_maxhpsp: Invalid startlvl %d specified.\n", startlvl);
|
||||
return false;
|
||||
}
|
||||
maxlvl = atoi(fields[1]);
|
||||
if(maxlvl > MAX_LEVEL || maxlvl<1){
|
||||
ShowError("pc_readdb_job_maxhpsp: Invalid maxlevel %d specified.\n", maxlvl);
|
||||
return false;
|
||||
}
|
||||
if((maxlvl-startlvl+1+4) != columns){ //nb values = (maxlvl-startlvl)+1-index1stvalue
|
||||
ShowError("pc_readdb_job_maxhpsp: Number of colums=%d defined is too low for startlevel=%d,maxlevel=%d\n",columns,startlvl,maxlvl);
|
||||
return false;
|
||||
}
|
||||
type = atoi(fields[3]);
|
||||
if(type < 0 || type > 1){
|
||||
ShowError("pc_readdb_job_maxhpsp: Invalid type %d specified, only [0;1] is valid.\n", type);
|
||||
return false;
|
||||
}
|
||||
job_count = pc_split_atoi(fields[2],jobs,':',CLASS_COUNT);
|
||||
if (job_count < 1)
|
||||
return false;
|
||||
for (j = 0; j < job_count; j++) {
|
||||
job_id = jobs[j];
|
||||
if(!pcdb_checkid(job_id)){
|
||||
ShowError("pc_readdb_job_maxhpsp: Invalid job class %d specified.\n", job_id);
|
||||
return false;
|
||||
}
|
||||
idx = pc_class2idx(job_id);
|
||||
if(type == 0){ //hp type
|
||||
unsigned int k = 0;
|
||||
unsigned int val, oldval=0;
|
||||
for(i = 1; i <= MAX_LEVEL; i++) {
|
||||
val = 0;
|
||||
k += (job_info[idx].hp_factor*(i+1) + 50) / 100;
|
||||
if(i>=startlvl && i <=maxlvl) val = atoi(fields[i+4]);
|
||||
if(val==0) val = 35 + ((i+1)*job_info[idx].hp_multiplicator)/100 + k;
|
||||
if(oldval >= val)
|
||||
ShowWarning("Warn, HP value is lower or equal then previous one for (job=%d,oldval=%d,val=%d,lvl=%d hp_factor=%d,hp_multiplicator=%d,k=%d)\n",
|
||||
job_id,oldval,val,i+1,job_info[idx].hp_factor,job_info[idx].hp_multiplicator,k);
|
||||
val = min(INT_MAX,val);
|
||||
job_info[idx].hp_table[i-1] = val;
|
||||
oldval = val;
|
||||
}
|
||||
// ShowInfo("Have readen hp table for job=%d\n{",job_id);
|
||||
// for(i=0; i<MAX_LEVEL; i++ )
|
||||
// printf("%d,",job_info[idx].hp_table[i]);
|
||||
// printf("\n}\n");
|
||||
}
|
||||
else if(type == 1){ //sp type
|
||||
unsigned int val, oldval=0;
|
||||
for(i = 1; i <= MAX_LEVEL; i++) {
|
||||
val = 0;
|
||||
if(i>=startlvl && i <=maxlvl) val = atoi(fields[i+4]);
|
||||
if(val==0) val = 10 + ((i+1)*job_info[idx].sp_factor)/100;
|
||||
if(oldval >= val) ShowWarning("Warn, SP value is lower or equal then previous one for (job=%d,oldval=%d,val=%d,lvl=%d,sp_factor=%d)\n",
|
||||
job_id,oldval,val,i,job_info[idx].sp_factor);
|
||||
val = min(INT_MAX,val);
|
||||
job_info[idx].sp_table[i-1] = val;
|
||||
oldval = val;
|
||||
}
|
||||
// ShowInfo("Have readen sp table for job=%d\n{",job_id);
|
||||
// for(i=0; i<MAX_LEVEL; i++ )
|
||||
// printf("%d,",job_info[idx].sp_table[i]);
|
||||
// printf("\n}\n");
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//Reading job_maxhpsp.txt line
|
||||
//Max Level,Class list,Type (0 - Base Exp; 1 - Job Exp),Exp/lvl...
|
||||
static bool pc_readdb_job_exp(char* fields[], int columns, int current)
|
||||
{
|
||||
int idx, i, type;
|
||||
int job_id,job_count,jobs[CLASS_COUNT];
|
||||
unsigned int ui, maxlvl;
|
||||
|
||||
maxlvl = atoi(fields[0]);
|
||||
if(maxlvl > MAX_LEVEL || maxlvl<1){
|
||||
ShowError("pc_readdb_job_exp: Invalid maxlevel %d specified.\n", maxlvl);
|
||||
return false;
|
||||
}
|
||||
if((maxlvl+3) > columns){ //nb values = (maxlvl-startlvl)+1-index1stvalue
|
||||
ShowError("pc_readdb_job_exp: Number of colums=%d defined is too low for maxlevel=%d\n",columns,maxlvl);
|
||||
return false;
|
||||
}
|
||||
type = atoi(fields[2]);
|
||||
if(type < 0 || type > 1){
|
||||
ShowError("pc_readdb_job_exp: Invalid type %d specified, only [0;1] is valid.\n", type);
|
||||
return false;
|
||||
}
|
||||
job_count = pc_split_atoi(fields[1],jobs,':',CLASS_COUNT);
|
||||
if (job_count < 1)
|
||||
return false;
|
||||
job_id = jobs[0];
|
||||
if(!pcdb_checkid(job_id)){
|
||||
ShowError("pc_readdb_job_exp: Invalid job class %d specified.\n", job_id);
|
||||
return false;
|
||||
}
|
||||
idx = pc_class2idx(job_id);
|
||||
|
||||
job_info[idx].max_level[type] = maxlvl;
|
||||
for(i=0; i<maxlvl; i++){
|
||||
job_info[idx].exp_table[type][i] = ((uint32) atoi(fields[3+i]));
|
||||
}
|
||||
//Reverse check in case the array has a bunch of trailing zeros... [Skotlex]
|
||||
//The reasoning behind the -2 is this... if the max level is 5, then the array
|
||||
//should look like this:
|
||||
//0: x, 1: x, 2: x: 3: x 4: 0 <- last valid value is at 3.
|
||||
while ((ui = job_info[idx].max_level[type]) >= 2 && job_info[idx].exp_table[type][ui-2] <= 0)
|
||||
job_info[idx].max_level[type]--;
|
||||
if (job_info[idx].max_level[type] < maxlvl) {
|
||||
ShowWarning("pc_readdb: Specified max %u for job %d, but that job's exp table only goes up to level %u.\n", maxlvl, job_id, job_info[idx].max_level[type]);
|
||||
ShowInfo("Filling the missing values with the last exp entry.\n");
|
||||
//Fill the requested values with the last entry.
|
||||
ui = (job_info[idx].max_level[type] <= 2? 0: job_info[idx].max_level[type]-2);
|
||||
for (; ui+2 < maxlvl; ui++)
|
||||
job_info[idx].exp_table[type][ui] = job_info[idx].exp_table[type][ui-1];
|
||||
job_info[idx].max_level[type] = maxlvl;
|
||||
}
|
||||
// ShowInfo("%s - Class %d: %d\n", type?"Job":"Base", job_id, job_info[idx].max_level[type]);
|
||||
for (i = 1; i < job_count; i++) {
|
||||
job_id = jobs[i];
|
||||
if (!pcdb_checkid(job_id)) {
|
||||
ShowError("pc_readdb_job_exp: Invalid job ID %d.\n", job_id);
|
||||
continue;
|
||||
}
|
||||
idx = pc_class2idx(job_id);
|
||||
memcpy(job_info[idx].exp_table[type], job_info[jobs[0]].exp_table[type], sizeof(job_info[0].exp_table[0]));
|
||||
job_info[idx].max_level[type] = maxlvl;
|
||||
// ShowInfo("%s - Class %d: %u\n", type?"Job":"Base", job_id, job_info[idx].max_level[type]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
* pc DB reading.
|
||||
* exp.txt - required experience values
|
||||
* skill_tree.txt - skill tree for every class
|
||||
* attr_fix.txt - elemental adjustment table
|
||||
* exp.txt - required experience values
|
||||
* skill_tree.txt - skill tree for every class
|
||||
* attr_fix.txt - elemental adjustment table
|
||||
* job_db1.txt - job,weight,hp_factor,hp_multiplicator,sp_factor,aspds/lvl
|
||||
* job_db2.txt - job,stats bonuses/lvl
|
||||
* job_maxhpsp_db.txt - strtlvl,maxlvl,job,type,values/lvl (values=hp|sp)
|
||||
*------------------------------------------*/
|
||||
int pc_readdb(void)
|
||||
{
|
||||
int i,j,k;
|
||||
int i,j,k, entries;
|
||||
FILE *fp;
|
||||
char line[24000],*p;
|
||||
char line[24000];
|
||||
|
||||
//reset
|
||||
memset(exp_table,0,sizeof(exp_table));
|
||||
memset(max_level,0,sizeof(max_level));
|
||||
memset(job_info,0,sizeof(job_info)); // job_info table
|
||||
|
||||
sprintf(line, "%s/"DBPATH"exp.txt", db_path);
|
||||
|
||||
fp=fopen(line, "r");
|
||||
if(fp==NULL){
|
||||
ShowError("can't read %s\n", line);
|
||||
return 1;
|
||||
}
|
||||
while(fgets(line, sizeof(line), fp))
|
||||
{
|
||||
int jobs[CLASS_COUNT], job_count, job, job_id;
|
||||
int type;
|
||||
unsigned int ui,maxlv;
|
||||
char *split[4];
|
||||
if(line[0]=='/' && line[1]=='/')
|
||||
continue;
|
||||
if (pc_split_str(line,split,4) < 4)
|
||||
continue;
|
||||
|
||||
job_count = pc_split_atoi(split[1],jobs,':',CLASS_COUNT);
|
||||
if (job_count < 1)
|
||||
continue;
|
||||
job_id = jobs[0];
|
||||
if (!pcdb_checkid(job_id)) {
|
||||
ShowError("pc_readdb: Invalid job ID %d.\n", job_id);
|
||||
continue;
|
||||
}
|
||||
type = atoi(split[2]);
|
||||
if (type < 0 || type > 1) {
|
||||
ShowError("pc_readdb: Invalid type %d (must be 0 for base levels, 1 for job levels).\n", type);
|
||||
continue;
|
||||
}
|
||||
maxlv = atoi(split[0]);
|
||||
if (maxlv > MAX_LEVEL) {
|
||||
ShowWarning("pc_readdb: Specified max level %u for job %d is beyond server's limit (%u).\n ", maxlv, job_id, MAX_LEVEL);
|
||||
maxlv = MAX_LEVEL;
|
||||
}
|
||||
|
||||
job = jobs[0] = pc_class2idx(job_id);
|
||||
//We send one less and then one more because the last entry in the exp array should hold 0.
|
||||
max_level[job][type] = pc_split_atoui(split[3], exp_table[job][type],',',maxlv-1)+1;
|
||||
//Reverse check in case the array has a bunch of trailing zeros... [Skotlex]
|
||||
//The reasoning behind the -2 is this... if the max level is 5, then the array
|
||||
//should look like this:
|
||||
//0: x, 1: x, 2: x: 3: x 4: 0 <- last valid value is at 3.
|
||||
while ((ui = max_level[job][type]) >= 2 && exp_table[job][type][ui-2] <= 0)
|
||||
max_level[job][type]--;
|
||||
if (max_level[job][type] < maxlv) {
|
||||
ShowWarning("pc_readdb: Specified max %u for job %d, but that job's exp table only goes up to level %u.\n", maxlv, job_id, max_level[job][type]);
|
||||
ShowInfo("Filling the missing values with the last exp entry.\n");
|
||||
//Fill the requested values with the last entry.
|
||||
ui = (max_level[job][type] <= 2? 0: max_level[job][type]-2);
|
||||
for (; ui+2 < maxlv; ui++)
|
||||
exp_table[job][type][ui] = exp_table[job][type][ui-1];
|
||||
max_level[job][type] = maxlv;
|
||||
}
|
||||
// ShowDebug("%s - Class %d: %d\n", type?"Job":"Base", job_id, max_level[job][type]);
|
||||
for (i = 1; i < job_count; i++) {
|
||||
job_id = jobs[i];
|
||||
if (!pcdb_checkid(job_id)) {
|
||||
ShowError("pc_readdb: Invalid job ID %d.\n", job_id);
|
||||
continue;
|
||||
}
|
||||
job = pc_class2idx(job_id);
|
||||
memcpy(exp_table[job][type], exp_table[jobs[0]][type], sizeof(exp_table[0][0]));
|
||||
max_level[job][type] = maxlv;
|
||||
// ShowDebug("%s - Class %d: %u\n", type?"Job":"Base", job_id, max_level[job][type]);
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
for (i = 0; i < JOB_MAX; i++) {
|
||||
if (!pcdb_checkid(i)) continue;
|
||||
if (i == JOB_WEDDING || i == JOB_XMAS || i == JOB_SUMMER || i == JOB_HANBOK)
|
||||
continue; //Classes that do not need exp tables.
|
||||
j = pc_class2idx(i);
|
||||
if (!max_level[j][0])
|
||||
ShowWarning("Class %s (%d) does not have a base exp table.\n", job_name(i), i);
|
||||
if (!max_level[j][1])
|
||||
ShowWarning("Class %s (%d) does not have a job exp table.\n", job_name(i), i);
|
||||
}
|
||||
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","exp.txt");
|
||||
|
||||
// Reset and read skilltree
|
||||
memset(skill_tree,0,sizeof(skill_tree));
|
||||
@ -9770,58 +9885,6 @@ int pc_readdb(void)
|
||||
}
|
||||
#endif
|
||||
|
||||
// Reset then read attr_fix
|
||||
for(i=0;i<4;i++)
|
||||
for(j=0;j<ELE_MAX;j++)
|
||||
for(k=0;k<ELE_MAX;k++)
|
||||
attr_fix_table[i][j][k]=100;
|
||||
|
||||
sprintf(line, "%s/"DBPATH"attr_fix.txt", db_path);
|
||||
|
||||
fp=fopen(line,"r");
|
||||
if(fp==NULL){
|
||||
ShowError("can't read %s\n", line);
|
||||
return 1;
|
||||
}
|
||||
while(fgets(line, sizeof(line), fp))
|
||||
{
|
||||
char *split[10];
|
||||
int lv,n;
|
||||
if(line[0]=='/' && line[1]=='/')
|
||||
continue;
|
||||
for(j=0,p=line;j<3 && p;j++){
|
||||
split[j]=p;
|
||||
p=strchr(p,',');
|
||||
if(p) *p++=0;
|
||||
}
|
||||
if( j < 2 )
|
||||
continue;
|
||||
|
||||
lv=atoi(split[0]);
|
||||
n=atoi(split[1]);
|
||||
|
||||
for(i=0;i<n && i<ELE_MAX;){
|
||||
if( !fgets(line, sizeof(line), fp) )
|
||||
break;
|
||||
if(line[0]=='/' && line[1]=='/')
|
||||
continue;
|
||||
|
||||
for(j=0,p=line;j<n && j<ELE_MAX && p;j++){
|
||||
while(*p==32 && *p>0)
|
||||
p++;
|
||||
attr_fix_table[lv-1][i][j]=atoi(p);
|
||||
if(battle_config.attr_recover == 0 && attr_fix_table[lv-1][i][j] < 0)
|
||||
attr_fix_table[lv-1][i][j] = 0;
|
||||
p=strchr(p,',');
|
||||
if(p) *p++=0;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
fclose(fp);
|
||||
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","attr_fix.txt");
|
||||
|
||||
// reset then read statspoint
|
||||
memset(statp,0,sizeof(statp));
|
||||
i=1;
|
||||
@ -9832,6 +9895,7 @@ int pc_readdb(void)
|
||||
ShowWarning("Can't read '"CL_WHITE"%s"CL_RESET"'... Generating DB.\n",line);
|
||||
//return 1;
|
||||
} else {
|
||||
entries=0;
|
||||
while(fgets(line, sizeof(line), fp))
|
||||
{
|
||||
int stat;
|
||||
@ -9843,10 +9907,10 @@ int pc_readdb(void)
|
||||
break;
|
||||
statp[i]=stat;
|
||||
i++;
|
||||
entries++;
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
ShowStatus("Done reading '"CL_WHITE"%s"CL_RESET"'.\n","statpoint.txt");
|
||||
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", entries, DBPATH"statpoint.txt");
|
||||
}
|
||||
// generate the remaining parts of the db if necessary
|
||||
k = battle_config.use_statpoint_table; //save setting
|
||||
@ -9856,6 +9920,29 @@ int pc_readdb(void)
|
||||
statp[i] = statp[i-1] + pc_gets_status_point(i-1);
|
||||
battle_config.use_statpoint_table = k; //restore setting
|
||||
|
||||
#ifdef RENEWAL_ASPD
|
||||
sv_readdb(db_path, "re/job_db1.txt",',',6+MAX_WEAPON_TYPE,6+MAX_WEAPON_TYPE,CLASS_COUNT,&pc_readdb_job1);
|
||||
#else
|
||||
sv_readdb(db_path, "pre-re/job_db1.txt",',',5+MAX_WEAPON_TYPE,5+MAX_WEAPON_TYPE,CLASS_COUNT,&pc_readdb_job1);
|
||||
#endif
|
||||
sv_readdb(db_path, "job_db2.txt",',',1,1+MAX_LEVEL,CLASS_COUNT,&pc_readdb_job2);
|
||||
sv_readdb(db_path, DBPATH"job_maxhpsp_db.txt", ',', 4, 4+MAX_LEVEL, CLASS_COUNT*2, &pc_readdb_job_maxhpsp);
|
||||
sv_readdb(db_path, DBPATH"job_exp.txt",',',4,1000+3,CLASS_COUNT*2,&pc_readdb_job_exp); //support till 1000lvl
|
||||
|
||||
|
||||
//Checking if all class have their data
|
||||
for (i = 0; i < JOB_MAX; i++) {
|
||||
int j;
|
||||
if (!pcdb_checkid(i)) continue;
|
||||
if (i == JOB_WEDDING || i == JOB_XMAS || i == JOB_SUMMER || i == JOB_HANBOK)
|
||||
continue; //Classes that do not need exp tables.
|
||||
j = pc_class2idx(i);
|
||||
if (!job_info[j].max_level[0])
|
||||
ShowWarning("Class %s (%d) does not have a base exp table.\n", job_name(i), i);
|
||||
if (!job_info[j].max_level[0])
|
||||
ShowWarning("Class %s (%d) does not have a job exp table.\n", job_name(i), i);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
28
src/map/pc.h
28
src/map/pc.h
@ -25,6 +25,12 @@
|
||||
#define MAX_PC_FEELHATE 3
|
||||
#define DAMAGELOG_SIZE_PC 100 // Any idea for this value?
|
||||
|
||||
//Update this max as necessary. 55 is the value needed for Super Baby currently
|
||||
//Raised to 84 since Expanded Super Novice needs it.
|
||||
#define MAX_SKILL_TREE 84
|
||||
//Total number of classes (for data storage)
|
||||
#define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC)
|
||||
|
||||
//Equip indexes constants. (eg: sd->equip_index[EQI_AMMO] returns the index
|
||||
//where the arrows are equipped)
|
||||
enum equip_index {
|
||||
@ -522,11 +528,6 @@ struct map_session_data {
|
||||
|
||||
};
|
||||
|
||||
//Update this max as necessary. 55 is the value needed for Super Baby currently
|
||||
//Raised to 84 since Expanded Super Novice needs it.
|
||||
#define MAX_SKILL_TREE 84
|
||||
//Total number of classes (for data storage)
|
||||
#define CLASS_COUNT (JOB_MAX - JOB_NOVICE_HIGH + JOB_MAX_BASIC)
|
||||
|
||||
enum weapon_type {
|
||||
W_FIST, //Bare hands
|
||||
@ -601,6 +602,22 @@ enum equip_pos {
|
||||
//EQP_SHADOW_ACC_L = 0x200000,
|
||||
};
|
||||
|
||||
struct {
|
||||
int hp_table[MAX_LEVEL];
|
||||
int sp_table[MAX_LEVEL];
|
||||
int hp_factor, hp_multiplicator;
|
||||
int sp_factor;
|
||||
int max_weight_base;
|
||||
char job_bonus[MAX_LEVEL];
|
||||
#ifdef RENEWAL_ASPD
|
||||
int aspd_base[MAX_WEAPON_TYPE+1];
|
||||
#else
|
||||
int aspd_base[MAX_WEAPON_TYPE]; //[blackhole89]
|
||||
#endif
|
||||
uint32 exp_table[2][MAX_LEVEL];
|
||||
uint32 max_level[2];
|
||||
} job_info[CLASS_COUNT];
|
||||
|
||||
#define EQP_WEAPON EQP_HAND_R
|
||||
#define EQP_SHIELD EQP_HAND_L
|
||||
#define EQP_ARMS (EQP_HAND_R|EQP_HAND_L)
|
||||
@ -705,6 +722,7 @@ enum equip_pos {
|
||||
)
|
||||
#endif
|
||||
|
||||
int pc_split_atoi(char* str, int* val, char sep, int max);
|
||||
int pc_class2idx(int class_);
|
||||
int pc_get_group_level(struct map_session_data *sd);
|
||||
int pc_get_group_id(struct map_session_data *sd);
|
||||
|
@ -6301,7 +6301,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
}
|
||||
break;
|
||||
case ASC_CDP:
|
||||
if(sd) {
|
||||
if(sd) {
|
||||
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
||||
skill_produce_mix(sd, skill_id, 678, 0, 0, 0, 1); //Produce a Deadly Poison Bottle.
|
||||
}
|
||||
|
230
src/map/status.c
230
src/map/status.c
@ -48,17 +48,6 @@ enum e_regen
|
||||
RGN_SSP = 0x08,
|
||||
};
|
||||
|
||||
static int max_weight_base[CLASS_COUNT];
|
||||
static int hp_coefficient[CLASS_COUNT];
|
||||
static int hp_coefficient2[CLASS_COUNT];
|
||||
static int hp_sigma_val[CLASS_COUNT][MAX_LEVEL+1];
|
||||
static int sp_coefficient[CLASS_COUNT];
|
||||
#ifdef RENEWAL_ASPD
|
||||
static int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE+1];
|
||||
#else
|
||||
static int aspd_base[CLASS_COUNT][MAX_WEAPON_TYPE]; //[blackhole89]
|
||||
#endif
|
||||
|
||||
// bonus values and upgrade chances for refining equipment
|
||||
static struct {
|
||||
int chance[MAX_REFINE]; // success chance
|
||||
@ -67,7 +56,6 @@ static struct {
|
||||
} refine_info[REFINE_TYPE_MAX];
|
||||
|
||||
static int atkmods[3][MAX_WEAPON_TYPE]; //ATK weapon modification for size (size_fix.txt)
|
||||
static char job_bonus[CLASS_COUNT][MAX_LEVEL];
|
||||
|
||||
static struct eri *sc_data_ers; //For sc_data entries
|
||||
static struct status_data dummy_status;
|
||||
@ -1820,6 +1808,7 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat
|
||||
int amotion;
|
||||
#ifdef RENEWAL_ASPD
|
||||
short mod = -1;
|
||||
int classidx = pc_class2idx(sd->status.class_);
|
||||
|
||||
switch( sd->weapontype2 ){ // adjustment for dual weilding
|
||||
case W_DAGGER: mod = 0; break; // 0, 1, 1
|
||||
@ -1830,21 +1819,21 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat
|
||||
}
|
||||
|
||||
amotion = ( sd->status.weapon < MAX_WEAPON_TYPE && mod < 0 )
|
||||
? (aspd_base[pc_class2idx(sd->status.class_)][sd->status.weapon]) // single weapon
|
||||
: ((aspd_base[pc_class2idx(sd->status.class_)][sd->weapontype2] // dual-wield
|
||||
+ aspd_base[pc_class2idx(sd->status.class_)][sd->weapontype2]) * 6 / 10 + 10 * mod
|
||||
- aspd_base[pc_class2idx(sd->status.class_)][sd->weapontype2]
|
||||
+ aspd_base[pc_class2idx(sd->status.class_)][sd->weapontype1]);
|
||||
? (job_info[classidx].aspd_base[sd->status.weapon]) // single weapon
|
||||
: ((job_info[classidx].aspd_base[sd->weapontype2] // dual-wield
|
||||
+ job_info[classidx].aspd_base[sd->weapontype2]) * 6 / 10 + 10 * mod
|
||||
- job_info[classidx].aspd_base[sd->weapontype2]
|
||||
+ job_info[classidx].aspd_base[sd->weapontype1]);
|
||||
|
||||
if ( sd->status.shield )
|
||||
amotion += ( 2000 - aspd_base[pc_class2idx(sd->status.class_)][W_FIST] ) +
|
||||
( aspd_base[pc_class2idx(sd->status.class_)][MAX_WEAPON_TYPE] - 2000 );
|
||||
amotion += ( 2000 - job_info[classidx].aspd_base[W_FIST] ) +
|
||||
( job_info[classidx].aspd_base[MAX_WEAPON_TYPE] - 2000 );
|
||||
|
||||
#else
|
||||
// base weapon delay
|
||||
amotion = (sd->status.weapon < MAX_WEAPON_TYPE)
|
||||
? (aspd_base[pc_class2idx(sd->status.class_)][sd->status.weapon]) // single weapon
|
||||
: (aspd_base[pc_class2idx(sd->status.class_)][sd->weapontype1] + aspd_base[pc_class2idx(sd->status.class_)][sd->weapontype2])*7/10; // dual-wield
|
||||
? (job_info[classidx].aspd_base[sd->status.weapon]) // single weapon
|
||||
: (job_info[classidx].aspd_base[sd->weapontype1] + job_info[classidx].aspd_base[sd->weapontype2])*7/10; // dual-wield
|
||||
|
||||
// percentual delay reduction from stats
|
||||
amotion -= amotion * (4*status->agi + status->dex)/1000;
|
||||
@ -2240,39 +2229,11 @@ int status_calc_pet_(struct pet_data *pd, bool first)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/// Helper function for status_base_pc_maxhp(), used to pre-calculate the hp_sigma_val[] array
|
||||
static void status_calc_sigma(void)
|
||||
{
|
||||
int i,j;
|
||||
|
||||
for(i = 0; i < CLASS_COUNT; i++)
|
||||
{
|
||||
unsigned int k = 0;
|
||||
hp_sigma_val[i][0] = hp_sigma_val[i][1] = 0;
|
||||
for(j = 2; j <= MAX_LEVEL; j++)
|
||||
{
|
||||
k += (hp_coefficient[i]*j + 50) / 100;
|
||||
hp_sigma_val[i][j] = k;
|
||||
if (k >= INT_MAX)
|
||||
break; //Overflow protection. [Skotlex]
|
||||
}
|
||||
for(; j <= MAX_LEVEL; j++)
|
||||
hp_sigma_val[i][j] = INT_MAX;
|
||||
}
|
||||
}
|
||||
|
||||
/// Calculates base MaxHP value according to class and base level
|
||||
/// The recursive equation used to calculate level bonus is (using integer operations)
|
||||
/// f(0) = 35 | f(x+1) = f(x) + A + (x + B)*C/D
|
||||
/// which reduces to something close to
|
||||
/// f(x) = 35 + x*(A + B*C/D) + sum(i=2..x){ i*C/D }
|
||||
//Calculate maxHP from tables
|
||||
static unsigned int status_base_pc_maxhp(struct map_session_data* sd, struct status_data* status)
|
||||
{
|
||||
uint64 val = pc_class2idx(sd->status.class_);
|
||||
val = 35 + sd->status.base_level*(int64)hp_coefficient2[val]/100 + hp_sigma_val[val][sd->status.base_level];
|
||||
uint32 val = job_info[pc_class2idx(sd->status.class_)].hp_table[sd->status.base_level-1];
|
||||
|
||||
if((sd->class_&MAPID_UPPERMASK) == MAPID_NINJA || (sd->class_&MAPID_UPPERMASK) == MAPID_GUNSLINGER)
|
||||
val += 100; //Since their HP can't be approximated well enough without this.
|
||||
if((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc_famerank(sd->status.char_id, MAPID_TAEKWON))
|
||||
val *= 3; //Triple max HP for top ranking Taekwons over level 90.
|
||||
if((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.base_level >= 99)
|
||||
@ -2287,11 +2248,11 @@ static unsigned int status_base_pc_maxhp(struct map_session_data* sd, struct sta
|
||||
return (unsigned int)val;
|
||||
}
|
||||
|
||||
//Calculate maxSP from tables
|
||||
static unsigned int status_base_pc_maxsp(struct map_session_data* sd, struct status_data *status)
|
||||
{
|
||||
uint64 val;
|
||||
uint32 val = job_info[pc_class2idx(sd->status.class_)].sp_table[sd->status.base_level-1];
|
||||
|
||||
val = 10 + sd->status.base_level*(int64)sp_coefficient[pc_class2idx(sd->status.class_)]/100;
|
||||
val += val * status->int_/100;
|
||||
|
||||
if (sd->class_&JOBL_UPPER)
|
||||
@ -2327,7 +2288,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
|
||||
|
||||
pc_calc_skilltree(sd); // SkillTree calculation
|
||||
|
||||
sd->max_weight = max_weight_base[pc_class2idx(sd->status.class_)]+sd->status.str*300;
|
||||
sd->max_weight = job_info[pc_class2idx(sd->status.class_)].max_weight_base+sd->status.str*300;
|
||||
|
||||
if(first) {
|
||||
//Load Hp/SP from char-received data.
|
||||
@ -2704,9 +2665,9 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
|
||||
// Job bonuses
|
||||
index = pc_class2idx(sd->status.class_);
|
||||
for(i=0;i<(int)sd->status.job_level && i<MAX_LEVEL;i++){
|
||||
if(!job_bonus[index][i])
|
||||
if(!job_info[index].job_bonus[i])
|
||||
continue;
|
||||
switch(job_bonus[index][i]) {
|
||||
switch(job_info[index].job_bonus[i]) {
|
||||
case 1: status->str++; break;
|
||||
case 2: status->agi++; break;
|
||||
case 3: status->vit++; break;
|
||||
@ -11343,63 +11304,6 @@ int status_get_refine_chance(enum refine_type wlv, int refine) {
|
||||
return refine_info[wlv].chance[refine];
|
||||
}
|
||||
|
||||
|
||||
/*------------------------------------------
|
||||
* DB reading.
|
||||
* job_db1.txt - weight, hp, sp, aspd
|
||||
* job_db2.txt - job level stat bonuses
|
||||
* size_fix.txt - size adjustment table for weapons
|
||||
* refine_db.txt - refining data table
|
||||
*------------------------------------------*/
|
||||
static bool status_readdb_job1(char* fields[], int columns, int current)
|
||||
{// Job-specific values (weight, HP, SP, ASPD)
|
||||
int idx, class_;
|
||||
unsigned int i;
|
||||
|
||||
class_ = atoi(fields[0]);
|
||||
|
||||
if(!pcdb_checkid(class_))
|
||||
{
|
||||
ShowWarning("status_readdb_job1: Invalid job class %d specified.\n", class_);
|
||||
return false;
|
||||
}
|
||||
idx = pc_class2idx(class_);
|
||||
|
||||
max_weight_base[idx] = atoi(fields[1]);
|
||||
hp_coefficient[idx] = atoi(fields[2]);
|
||||
hp_coefficient2[idx] = atoi(fields[3]);
|
||||
sp_coefficient[idx] = atoi(fields[4]);
|
||||
#ifdef RENEWAL_ASPD
|
||||
for(i = 0; i <= MAX_WEAPON_TYPE; i++)
|
||||
#else
|
||||
for(i = 0; i < MAX_WEAPON_TYPE; i++)
|
||||
#endif
|
||||
{
|
||||
aspd_base[idx][i] = atoi(fields[i+5]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool status_readdb_job2(char* fields[], int columns, int current)
|
||||
{
|
||||
int idx, class_, i;
|
||||
|
||||
class_ = atoi(fields[0]);
|
||||
|
||||
if(!pcdb_checkid(class_))
|
||||
{
|
||||
ShowWarning("status_readdb_job2: Invalid job class %d specified.\n", class_);
|
||||
return false;
|
||||
}
|
||||
idx = pc_class2idx(class_);
|
||||
|
||||
for(i = 1; i < columns; i++)
|
||||
{
|
||||
job_bonus[idx][i-1] = atoi(fields[i]);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool status_readdb_sizefix(char* fields[], int columns, int current)
|
||||
{
|
||||
unsigned int i;
|
||||
@ -11445,34 +11349,73 @@ static bool status_readdb_refine(char* fields[], int columns, int current)
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read status db
|
||||
* job1.txt
|
||||
* job2.txt
|
||||
* size_fixe.txt
|
||||
* refine_db.txt
|
||||
*/
|
||||
static bool status_readdb_attrfix(){
|
||||
FILE *fp;
|
||||
char line[512], path[512],*p;
|
||||
int entries=0;
|
||||
|
||||
|
||||
sprintf(path, "%s/"DBPATH"attr_fix.txt", db_path);
|
||||
fp=fopen(path,"r");
|
||||
if(fp==NULL){
|
||||
ShowError("can't read %s\n", path);
|
||||
return 1;
|
||||
}
|
||||
while(fgets(line, sizeof(line), fp))
|
||||
{
|
||||
char *split[10];
|
||||
int lv,n,i,j;
|
||||
if(line[0]=='/' && line[1]=='/')
|
||||
continue;
|
||||
for(j=0,p=line;j<3 && p;j++){
|
||||
split[j]=p;
|
||||
p=strchr(p,',');
|
||||
if(p) *p++=0;
|
||||
}
|
||||
if( j < 2 )
|
||||
continue;
|
||||
|
||||
lv=atoi(split[0]);
|
||||
n=atoi(split[1]);
|
||||
|
||||
for(i=0;i<n && i<ELE_MAX;){
|
||||
if( !fgets(line, sizeof(line), fp) )
|
||||
break;
|
||||
if(line[0]=='/' && line[1]=='/')
|
||||
continue;
|
||||
|
||||
for(j=0,p=line;j<n && j<ELE_MAX && p;j++){
|
||||
while(*p==32 && *p>0)
|
||||
p++;
|
||||
attr_fix_table[lv-1][i][j]=atoi(p);
|
||||
if(battle_config.attr_recover == 0 && attr_fix_table[lv-1][i][j] < 0)
|
||||
attr_fix_table[lv-1][i][j] = 0;
|
||||
p=strchr(p,',');
|
||||
if(p) *p++=0;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
entries++;
|
||||
}
|
||||
fclose(fp);
|
||||
ShowStatus("Done reading '"CL_WHITE"%d"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", entries, path);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*------------------------------------------
|
||||
* DB reading.
|
||||
* size_fix.txt - size adjustment table for weapons
|
||||
* refine_db.txt - refining data table
|
||||
*------------------------------------------*/
|
||||
int status_readdb(void)
|
||||
{
|
||||
int i, j;
|
||||
|
||||
int i, j, k;
|
||||
// initialize databases to default
|
||||
//
|
||||
|
||||
// reset job_db1.txt data
|
||||
memset(max_weight_base, 0, sizeof(max_weight_base));
|
||||
memset(hp_coefficient, 0, sizeof(hp_coefficient));
|
||||
memset(hp_coefficient2, 0, sizeof(hp_coefficient2));
|
||||
memset(sp_coefficient, 0, sizeof(sp_coefficient));
|
||||
memset(aspd_base, 0, sizeof(aspd_base));
|
||||
// reset job_db2.txt data
|
||||
memset(job_bonus,0,sizeof(job_bonus)); // Job-specific stats bonus
|
||||
|
||||
// size_fix.txt
|
||||
for(i=0;i<ARRAYLENGTH(atkmods);i++)
|
||||
for(j=0;j<MAX_WEAPON_TYPE;j++)
|
||||
atkmods[i][j]=100;
|
||||
|
||||
// refine_db.txt
|
||||
for(i=0;i<ARRAYLENGTH(refine_info);i++)
|
||||
{
|
||||
@ -11483,18 +11426,16 @@ int status_readdb(void)
|
||||
refine_info[i].randombonus_max[j] = 0;
|
||||
}
|
||||
}
|
||||
// attr_fix.txt
|
||||
for(i=0;i<4;i++)
|
||||
for(j=0;j<ELE_MAX;j++)
|
||||
for(k=0;k<ELE_MAX;k++)
|
||||
attr_fix_table[i][j][k]=100;
|
||||
|
||||
// read databases
|
||||
//
|
||||
|
||||
|
||||
#ifdef RENEWAL_ASPD
|
||||
sv_readdb(db_path, "re/job_db1.txt", ',', 6+MAX_WEAPON_TYPE, 6+MAX_WEAPON_TYPE, -1, &status_readdb_job1);
|
||||
#else
|
||||
sv_readdb(db_path, "pre-re/job_db1.txt", ',', 5+MAX_WEAPON_TYPE, 5+MAX_WEAPON_TYPE, -1, &status_readdb_job1);
|
||||
#endif
|
||||
sv_readdb(db_path, "job_db2.txt", ',', 1, 1+MAX_LEVEL, -1, &status_readdb_job2);
|
||||
sv_readdb(db_path, "size_fix.txt", ',', MAX_WEAPON_TYPE, MAX_WEAPON_TYPE, ARRAYLENGTH(atkmods), &status_readdb_sizefix);
|
||||
// path,filename,separator,mincol,maxcol,maxrow,func_parsor
|
||||
status_readdb_attrfix(); //TODO use sv_readdb ?
|
||||
sv_readdb(db_path, "size_fix.txt",',',MAX_WEAPON_TYPE,MAX_WEAPON_TYPE,ARRAYLENGTH(atkmods),&status_readdb_sizefix);
|
||||
sv_readdb(db_path, DBPATH"refine_db.txt", ',', 4+MAX_REFINE, 4+MAX_REFINE, ARRAYLENGTH(refine_info), &status_readdb_refine);
|
||||
|
||||
return 0;
|
||||
@ -11511,7 +11452,6 @@ int do_init_status(void)
|
||||
initChangeTables();
|
||||
initDummyData();
|
||||
status_readdb();
|
||||
status_calc_sigma();
|
||||
natural_heal_prev_tick = gettick();
|
||||
sc_data_ers = ers_new(sizeof(struct status_change_entry),"status.c::sc_data_ers",ERS_OPT_NONE);
|
||||
add_timer_interval(natural_heal_prev_tick + NATURAL_HEAL_INTERVAL, status_natural_heal_timer, 0, 0, NATURAL_HEAL_INTERVAL);
|
||||
|
Loading…
x
Reference in New Issue
Block a user