-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:
glighta 2013-06-29 01:39:07 +00:00
parent 5ba50d12a5
commit 185b6b2d5e
14 changed files with 989 additions and 597 deletions

View File

@ -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 !!

View 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

View File

@ -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

File diff suppressed because one or more lines are too long

166
db/re/job_maxhpsp_db.txt Normal file
View 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

View File

@ -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);

View File

@ -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);
}

View File

@ -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;

View File

@ -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,

View File

@ -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();

View File

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

View File

@ -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);

View File

@ -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.
}

View File

@ -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);