summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--conf/mapflag/nobranch.txt6
-rw-r--r--conf/mapflag/nomemo.txt6
-rw-r--r--conf/maps.conf100
-rw-r--r--db/map_index.txt100
-rw-r--r--db/pre-re/mob_skill_db.txt4
-rw-r--r--db/re/job_db1.txt136
-rw-r--r--db/re/map_cache.datbin2096346 -> 2099548 bytes
-rw-r--r--db/re/mob_skill_db.txt4
-rw-r--r--npc/cities/alberta.txt280
-rw-r--r--npc/cities/ayothaya.txt7
-rw-r--r--npc/quests/eye_of_hellion.txt5
-rw-r--r--npc/quests/first_class/tu_sword.txt13
-rw-r--r--npc/quests/quests_13_1.txt103
-rw-r--r--npc/quests/quests_13_2.txt41
-rw-r--r--npc/re/guides/guides_izlude.txt22
-rw-r--r--npc/re/jobs/1-1/acolyte.txt7
-rw-r--r--npc/re/jobs/1-1/archer.txt7
-rw-r--r--npc/re/jobs/1-1/mage.txt5
-rw-r--r--npc/re/jobs/1-1/merchant.txt5
-rw-r--r--npc/re/jobs/1-1/swordman.txt5
-rw-r--r--npc/re/jobs/1-1/thief.txt9
-rw-r--r--npc/re/mobs/fields/amatsu.txt4
-rw-r--r--npc/re/mobs/fields/ayothaya.txt7
-rw-r--r--npc/re/mobs/fields/bifrost.txt79
-rw-r--r--npc/re/mobs/fields/brasilis.txt2
-rw-r--r--npc/re/mobs/fields/comodo.txt10
-rw-r--r--npc/re/mobs/fields/dewata.txt4
-rw-r--r--npc/re/mobs/fields/dicastes.txt4
-rw-r--r--npc/re/mobs/fields/einbroch.txt36
-rw-r--r--npc/re/mobs/fields/geffen.txt8
-rw-r--r--npc/re/mobs/fields/gonryun.txt11
-rw-r--r--npc/re/mobs/fields/hugel.txt20
-rw-r--r--npc/re/mobs/fields/jawaii.txt6
-rw-r--r--npc/re/mobs/fields/lighthalzen.txt14
-rw-r--r--npc/re/mobs/fields/louyang.txt9
-rw-r--r--npc/re/mobs/fields/lutie.txt4
-rw-r--r--npc/re/mobs/fields/malaya.txt16
-rw-r--r--npc/re/mobs/fields/manuk.txt6
-rw-r--r--npc/re/mobs/fields/mjolnir.txt6
-rw-r--r--npc/re/mobs/fields/morocc.txt6
-rw-r--r--npc/re/mobs/fields/moscovia.txt11
-rw-r--r--npc/re/mobs/fields/niflheim.txt4
-rw-r--r--npc/re/mobs/fields/payon.txt12
-rw-r--r--npc/re/mobs/fields/prontera.txt13
-rw-r--r--npc/re/mobs/fields/rachel.txt15
-rw-r--r--npc/re/mobs/fields/splendide.txt8
-rw-r--r--npc/re/mobs/fields/umbala.txt8
-rw-r--r--npc/re/mobs/fields/veins.txt32
-rw-r--r--npc/re/mobs/fields/yuno.txt20
-rw-r--r--npc/warps/pvp.txt144
-rw-r--r--sql-files/main.sql13
-rw-r--r--sql-files/upgrades/2013-02-14--16-15.sql7
-rw-r--r--sql-files/upgrades/index.txt1
-rw-r--r--sql-files/upgrades/upgrade_svn15003.sql1
-rw-r--r--sql-files/upgrades/upgrade_svn15420_log.sql3
-rw-r--r--sql-files/upgrades/upgrade_svn15519_log.sql3
-rw-r--r--sql-files/upgrades/upgrade_svn15531_db.sql4
-rw-r--r--sql-files/upgrades/upgrade_svn15572.sql3
-rw-r--r--sql-files/upgrades/upgrade_svn15818_log.sql3
-rw-r--r--sql-files/upgrades/upgrade_svn15885.sql24
-rw-r--r--sql-files/upgrades/upgrade_svn15926_log.sql3
-rw-r--r--sql-files/upgrades/upgrade_svn16490.sql1
-rw-r--r--sql-files/upgrades/upgrade_svn16518.sql1
-rw-r--r--sql-files/upgrades/upgrade_svn16639.sql1
-rw-r--r--sql-files/upgrades/upgrade_svn16645.sql2
-rw-r--r--sql-files/upgrades/upgrade_svn16663.sql1
-rw-r--r--sql-files/upgrades/upgrade_svn16823.sql2
-rw-r--r--sql-files/upgrades/upgrade_svn16914.sql1
-rw-r--r--sql-files/upgrades/upgrade_svn17014.sql9
-rw-r--r--sql-files/upgrades/upgrade_svn17080.sql16
-rw-r--r--sql-files/upgrades/upgrade_svn17086.sql11
-rw-r--r--src/char/char.c27
-rw-r--r--src/common/core.c40
-rw-r--r--src/common/core.h5
-rw-r--r--src/common/mmo.h3
-rw-r--r--src/common/sql.c47
-rw-r--r--src/common/sql.h2
-rw-r--r--src/login/account.h1
-rw-r--r--src/login/account_sql.c4
-rw-r--r--src/login/login.c4
-rw-r--r--src/map/battle.c22
-rw-r--r--src/map/map.c90
-rw-r--r--src/map/map.h12
-rw-r--r--src/map/npc.c40
-rw-r--r--src/map/pc.c1344
-rw-r--r--src/map/script.c8
-rw-r--r--src/map/skill.c687
87 files changed, 2125 insertions, 1705 deletions
diff --git a/conf/mapflag/nobranch.txt b/conf/mapflag/nobranch.txt
index a05c37df5..0c96bf896 100644
--- a/conf/mapflag/nobranch.txt
+++ b/conf/mapflag/nobranch.txt
@@ -199,13 +199,13 @@ force_1-2 mapflag nobranch
force_1-3 mapflag nobranch
ordeal_1-1 mapflag nobranch
ordeal_1-2 mapflag nobranch
-ordeal_1-3 mapflag nobranch
+//ordeal_1-3 mapflag nobranch
ordeal_2-1 mapflag nobranch
ordeal_2-2 mapflag nobranch
-ordeal_2-3 mapflag nobranch
+//ordeal_2-3 mapflag nobranch
ordeal_3-1 mapflag nobranch
ordeal_3-2 mapflag nobranch
-ordeal_3-3 mapflag nobranch
+//ordeal_3-3 mapflag nobranch
pvp_2vs2 mapflag nobranch
pvp_c_room mapflag nobranch
quiz_00 mapflag nobranch
diff --git a/conf/mapflag/nomemo.txt b/conf/mapflag/nomemo.txt
index dbb35a164..f6628bf46 100644
--- a/conf/mapflag/nomemo.txt
+++ b/conf/mapflag/nomemo.txt
@@ -494,13 +494,13 @@ force_4-1 mapflag nomemo
force_5-1 mapflag nomemo
ordeal_1-1 mapflag nomemo
ordeal_1-2 mapflag nomemo
-ordeal_1-3 mapflag nomemo
+//ordeal_1-3 mapflag nomemo
ordeal_2-1 mapflag nomemo
ordeal_2-2 mapflag nomemo
-ordeal_2-3 mapflag nomemo
+//ordeal_2-3 mapflag nomemo
ordeal_3-1 mapflag nomemo
ordeal_3-2 mapflag nomemo
-ordeal_3-3 mapflag nomemo
+//ordeal_3-3 mapflag nomemo
pvp_c_room mapflag nomemo
quiz_00 mapflag nomemo
quiz_01 mapflag nomemo
diff --git a/conf/maps.conf b/conf/maps.conf
index 71a3b7db6..c34b05adf 100644
--- a/conf/maps.conf
+++ b/conf/maps.conf
@@ -164,12 +164,20 @@ map: new_5-3
map: new_5-4
map: orcsdun01
map: orcsdun02
+//map: ordeal_a00
+//map: ordeal_a02
map: ordeal_1-1
map: ordeal_1-2
+//map: ordeal_1-3
+//map: ordeal_1-4
map: ordeal_2-1
map: ordeal_2-2
+//map: ordeal_2-3
+//map: ordeal_2-4
map: ordeal_3-1
map: ordeal_3-2
+//map: ordeal_3-3
+//map: ordeal_3-4
map: pay_arche
map: pay_dun00
map: pay_dun01
@@ -1049,51 +1057,55 @@ map: moc_prydn2
// ===============================
// New Maps added 2013-02-10 (Thanks Streusel!)
+// Credits to Baneado for reporting some
// ===============================
-//map: iz_int
-//map: iz_int01
-//map: iz_int02
-//map: iz_int03
-//map: iz_int04
-//map: iz_ac01
-//map: iz_ac02
-//map: iz_ng01
-//map: treasure_n1
-//map: treasure_n2
-//map: iz_ac01_d
-//map: iz_ac02_d
-//map: iz_ac01_c
-//map: iz_ac02_c
-//map: iz_ac01_b
-//map: iz_ac02_b
-//map: iz_ac01_a
-//map: iz_ac02_a
-//map: izlude_d
-//map: izlude_c
-//map: izlude_b
-//map: izlude_a
-//map: prt_fild08d
-//map: prt_fild08c
-//map: prt_fild08b
-//map: prt_fild08a
-//map: te_prt_gld
-//map: te_prtcas01
-//map: te_prtcas02
-//map: te_prtcas03
-//map: te_prtcas04
-//map: te_prtcas05
-//map: teg_dun01
-//map: teg_dun02
-//map: te_alde_gld
-//map: te_aldecas1
-//map: te_aldecas2
-//map: te_aldecas3
-//map: te_aldecas4
-//map: te_aldecas5
-//map: gl_cas02_
-//map: gl_chyard_
-//map: 2@gl_k
-//map: 1@gl_k
+map: iz_int
+map: iz_int01
+map: iz_int02
+map: iz_int03
+map: iz_int04
+map: iz_ac01
+map: iz_ac02
+map: iz_ng01
+map: treasure_n1
+map: treasure_n2
+map: iz_ac01_d
+map: iz_ac02_d
+map: iz_ac01_c
+map: iz_ac02_c
+map: iz_ac01_b
+map: iz_ac02_b
+map: iz_ac01_a
+map: iz_ac02_a
+map: izlude_d
+map: izlude_c
+map: izlude_b
+map: izlude_a
+map: prt_fild08d
+map: prt_fild08c
+map: prt_fild08b
+map: prt_fild08a
+map: te_prt_gld
+map: te_prtcas01
+map: te_prtcas02
+map: te_prtcas03
+map: te_prtcas04
+map: te_prtcas05
+map: teg_dun01
+map: teg_dun02
+map: te_alde_gld
+map: te_aldecas1
+map: te_aldecas2
+map: te_aldecas3
+map: te_aldecas4
+map: te_aldecas5
+map: gl_cas02_
+map: gl_chyard_
+map: 2@gl_k
+map: 1@gl_k
+map: silk_lair
+map: 1@def02
+map: 1@def03
//------------------------- Clone Maps ---------------------------
//------------------------- Extra Maps ---------------------------
diff --git a/db/map_index.txt b/db/map_index.txt
index acfaacca4..e2ed76848 100644
--- a/db/map_index.txt
+++ b/db/map_index.txt
@@ -168,10 +168,16 @@ orcsdun01
orcsdun02
ordeal_1-1
ordeal_1-2
+//ordeal_1-3
+//ordeal_1-4
ordeal_2-1
ordeal_2-2
+//ordeal_2-3
+//ordeal_2-4
ordeal_3-1
ordeal_3-2
+//ordeal_3-3
+//ordeal_3-4
pay_arche
pay_dun00
pay_dun01
@@ -859,51 +865,55 @@ moc_prydn2
// ===============================
// New Maps added 2013-02-10 (Thanks Streusel!)
+// Credits also to Baneado for reporting some
// ===============================
-//iz_int
-//iz_int01
-//iz_int02
-//iz_int03
-//iz_int04
-//iz_ac01
-//iz_ac02
-//iz_ng01
-//treasure_n1
-//treasure_n2
-//iz_ac01_d
-//iz_ac02_d
-//iz_ac01_c
-//iz_ac02_c
-//iz_ac01_b
-//iz_ac02_b
-//iz_ac01_a
-//iz_ac02_a
-//izlude_d
-//izlude_c
-//izlude_b
-//izlude_a
-//prt_fild08d
-//prt_fild08c
-//prt_fild08b
-//prt_fild08a
-//te_prt_gld
-//te_prtcas01
-//te_prtcas02
-//te_prtcas03
-//te_prtcas04
-//te_prtcas05
-//teg_dun01
-//teg_dun02
-//te_alde_gld
-//te_aldecas1
-//te_aldecas2
-//te_aldecas3
-//te_aldecas4
-//te_aldecas5
-//gl_cas02_
-//gl_chyard_
-//2@gl_k
-//1@gl_k
+iz_int
+iz_int01
+iz_int02
+iz_int03
+iz_int04
+iz_ac01
+iz_ac02
+iz_ng01
+treasure_n1
+treasure_n2
+iz_ac01_d
+iz_ac02_d
+iz_ac01_c
+iz_ac02_c
+iz_ac01_b
+iz_ac02_b
+iz_ac01_a
+iz_ac02_a
+izlude_d
+izlude_c
+izlude_b
+izlude_a
+prt_fild08d
+prt_fild08c
+prt_fild08b
+prt_fild08a
+te_prt_gld
+te_prtcas01
+te_prtcas02
+te_prtcas03
+te_prtcas04
+te_prtcas05
+teg_dun01
+teg_dun02
+te_alde_gld
+te_aldecas1
+te_aldecas2
+te_aldecas3
+te_aldecas4
+te_aldecas5
+gl_cas02_
+gl_chyard_
+2@gl_k
+1@gl_k
+silk_lair
+1@def02
+1@def03
// Only add maps under this line if they are not standard maps!
@@ -929,6 +939,8 @@ moc_prydn2
//prontera_s
//pay_arche_s
//xmas_old
+//ordeal_a00
+//ordeal_a02
//fay_vilg00
//fay_vilg01
//gef_vilg00
diff --git a/db/pre-re/mob_skill_db.txt b/db/pre-re/mob_skill_db.txt
index d8370a17e..cba21fc60 100644
--- a/db/pre-re/mob_skill_db.txt
+++ b/db/pre-re/mob_skill_db.txt
@@ -5746,11 +5746,11 @@
2072,Jaguar@NPC_COMBOATTACK,attack,171,1,500,500,5000,no,target,always,0,,,,,,6,
2072,Jaguar@AS_SONICBLOW,attack,136,3,500,800,5000,no,target,always,0,,,,,,0,
2072,Jaguar@NPC_DARKNESSATTACK,attack,190,1,2000,0,5000,yes,target,always,0,,,,,,,
-2072,Jaguar@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,7,0x3195,,,,,
+2072,Jaguar@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,7,0x3095,,,,,
2072,Jaguar@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
2073,Toucan@NPC_EMOTION,walk,197,1,2000,0,5000,yes,self,always,0,2,,,,,,
2073,Toucan@NPC_EMOTION,chase,197,1,200,0,5000,yes,self,always,0,19,0x81,,,,,
-2073,Toucan@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,7,0x3195,,,,,
+2073,Toucan@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,7,0x3095,,,,,
2073,Toucan@NPC_TELEKINESISATTACK,chase,191,5,500,0,5000,yes,target,always,0,,,,,,,
2073,Toucan@NPC_WINDATTACK,attack,187,3,500,500,5000,no,target,always,0,,,,,,6,
2073,Toucan@NPC_STOP,attack,342,1,500,500,5000,no,target,always,0,,,,,,30,
diff --git a/db/re/job_db1.txt b/db/re/job_db1.txt
index ef035063a..085e29625 100644
--- a/db/re/job_db1.txt
+++ b/db/re/job_db1.txt
@@ -102,55 +102,55 @@
// 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
// 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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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, 20000,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
// 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
// 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, 24000,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
// 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, 24000,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
// 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
// Gangsi (Bongun/Munak)
@@ -160,107 +160,107 @@
// Dark Collector
4052, 24000,75 ,500 ,700 ,450 ,525 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625, 0
// Rune Knight (Regular)
-4054, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4054, 40000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Warlock (Regular)
-4055, 24000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
+4055, 30000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
// Ranger (Regular)
4056, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
// Arch Bishop (Regular)
-4057, 26000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
+4057, 30000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
// Mechanic (Regular)
-4058, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
+4058, 38000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
// Guillotine Cross (Regular)
-4059, 24000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
+4059, 32000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
// Rune Knight (Trans)
-4060, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4060, 40000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Warlock (Trans)
-4061, 24000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
+4061, 30000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
// Ranger (Trans)
4062, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
// Arch Bishop (Trans)
-4063, 26000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
+4063, 30000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
// Mechanic (Trans)
-4064, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
+4064, 38000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
// Guillotine Cross (Trans)
-4065, 24000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
+4065, 32000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
// Royal Guard (Regular)
-4066, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4066, 35000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Sorcerer (Regular)
-4067, 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
+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, 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
+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, 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
// Sura (Regular)
-4070, 26000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
+4070, 30000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
// Genetic (Regular)
-4071, 30000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
+4071, 32000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
// Shadow Chaser (Regular)
-4072, 24000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4072, 28000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Royal Guard (Trans)
-4073, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4073, 35000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Sorcerer (Trans)
-4074, 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
+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, 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
+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, 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
// Sura (Trans)
-4077, 26000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
+4077, 30000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
// Genetic (Trans)
-4078, 30000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
+4078, 32000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
// Shadow Chaser (Trans)
-4079, 24000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4079, 28000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Rune Knight (Dragon) (Regular)
-4080, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4080, 40000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Rune Knight (Dragon) (Trans)
-4081, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4081, 40000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Royal Guard (Gryphon) (Regular)
-4082, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4082, 35000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Royal Guard (Gryphon) (Trans)
-4083, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4083, 35000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Ranger (Warg) (Regular)
4084, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
// Ranger (Warg) (Trans)
4085, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
// Mechanic (Mado) (Regular)
-4086, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
+4086, 38000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
// Mechanic (Mado) (Trans)
-4087, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
+4087, 38000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
// Baby Rune Knight
-4096, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4096, 20000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Baby Warlock
-4097, 24000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
+4097, 20000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
// Baby Ranger
-4098, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
+4098, 20000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
// Baby Arch Bishop
-4099, 26000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
+4099, 20000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
// Baby Mechanic
-4100, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
+4100, 20000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
// Baby Guillotine Cross
-4101, 24000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
+4101, 20000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
// Baby Royal Guard
-4102, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4102, 20000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// 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
+4103, 20000,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, 20000,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
+4105, 20000,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
-4106, 26000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
+4106, 20000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
// Baby Genetic
-4107, 30000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
+4107, 20000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
// Baby Shadow Chaser
-4108, 24000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4108, 20000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Baby Rune Knight (Dragon)
-4109, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4109, 20000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Baby Royal Guard (Gryphon)
-4110, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
+4110, 20000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
// Baby Ranger (Warg)
-4111, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
+4111, 20000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
// Baby Mechanic (Mado)
-4112, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
+4112, 20000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
// Super Novice (Expanded)
4190, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650 ,540
// Super Baby (Expanded)
diff --git a/db/re/map_cache.dat b/db/re/map_cache.dat
index 645961065..cd79556d3 100644
--- a/db/re/map_cache.dat
+++ b/db/re/map_cache.dat
Binary files differ
diff --git a/db/re/mob_skill_db.txt b/db/re/mob_skill_db.txt
index 3610f95c3..5ba654c93 100644
--- a/db/re/mob_skill_db.txt
+++ b/db/re/mob_skill_db.txt
@@ -5823,11 +5823,11 @@
2072,Jaguar@NPC_COMBOATTACK,attack,171,1,500,500,5000,no,target,always,0,,,,,,6,
2072,Jaguar@AS_SONICBLOW,attack,136,3,500,800,5000,no,target,always,0,,,,,,0,
2072,Jaguar@NPC_DARKNESSATTACK,attack,190,1,2000,0,5000,yes,target,always,0,,,,,,,
-2072,Jaguar@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,7,0x3195,,,,,
+2072,Jaguar@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,7,0x3095,,,,,
2072,Jaguar@AL_TELEPORT,idle,26,1,10000,0,0,yes,self,rudeattacked,0,,,,,,,
2073,Toucan@NPC_EMOTION,walk,197,1,2000,0,5000,yes,self,always,0,2,,,,,,
2073,Toucan@NPC_EMOTION,chase,197,1,200,0,5000,yes,self,always,0,19,0x81,,,,,
-2073,Toucan@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,7,0x3195,,,,,
+2073,Toucan@NPC_EMOTION,idle,197,1,2000,0,5000,yes,self,always,0,7,0x3095,,,,,
2073,Toucan@NPC_TELEKINESISATTACK,chase,191,5,500,0,5000,yes,target,always,0,,,,,,,
2073,Toucan@NPC_WINDATTACK,attack,187,3,500,500,5000,no,target,always,0,,,,,,6,
2073,Toucan@NPC_STOP,attack,342,1,500,500,5000,no,target,always,0,,,,,,30,
diff --git a/npc/cities/alberta.txt b/npc/cities/alberta.txt
index ccfced388..3909d63b2 100644
--- a/npc/cities/alberta.txt
+++ b/npc/cities/alberta.txt
@@ -67,45 +67,41 @@ alberta,131,139,2 script Drunken Old Man 54,{
mes "Wh-what are you";
mes "staring at? Get lost!!";
next;
- switch(select("Say nothing.","Leave him alone.")) {
- case 1:
+ if(select("Say nothing.","Leave him alone.") == 1) {
+ mes "[Deagle]";
+ mes "Hahahaha ^666666*hiccup*^000000... You've got some nerve. I may look worthless now, but I used to be a sailor on the 'Going Mary.'";
+ next;
+ if(select("Never heard of it.","Really? No kidding!") == 1) {
mes "[Deagle]";
- mes "Hahahaha ^666666*hiccup*^000000... You've got some nerve. I may look worthless now, but I used to be a sailor on the 'Going Mary.'";
+ mes "Never heard of it?! Everybody knows th'notorious pirate ship 'Going Mary!' ^666666*Hiccup~*^000000";
next;
- switch(select("Never heard of it.","Really? No kidding!")) {
- case 1:
- mes "[Deagle]";
- mes "Never heard of it?! Everybody knows th'notorious pirate ship 'Going Mary!' ^666666*Hiccup~*^000000";
- next;
- mes "[Deagle]";
- mes "Ah~ The ol'days. If only... If only we hadn't run into that STORM...^666666*hiccup*^000000";
- next;
- mes "[Deagle]";
- mes "AH~ Captain. I miss our cap'n more than anything... No foe survived before cap'n's sword.";
- close;
- case 2:
- mes "[Deagle]";
- mes "That's right! NOBODY meshes with the crew of the 'Going Mary!' And nobody can beat out cap'n in a sword fight!";
- next;
- mes "[Deagle]";
- mes "CAPTAIN~!!! ^666666*HICCUP~*^000000 He would swing his sword like this, then... THEN!!";
- next;
- mes "[Deagle]";
- mes "The bastard the captain was fighting, and anyone of his friends near him, were surrounded in flame!";
- next;
- mes "[Deagle]";
- mes "Man, that sword must have had some sort of mysterious power, or the captain was just that good...!";
- next;
- mes "[Deagle]";
- mes "Phew~~ ^666666*Sob* *Sob...*^000000 God, I miss everyone! Now I'm depressed! Please, go away now.";
- close;
- }
- case 2:
mes "[Deagle]";
- mes "That's right!";
- mes "Go AWAY~";
+ mes "Ah~ The ol'days. If only... If only we hadn't run into that STORM...^666666*hiccup*^000000";
+ next;
+ mes "[Deagle]";
+ mes "AH~ Captain. I miss our cap'n more than anything... No foe survived before cap'n's sword.";
close;
+ }
+ mes "[Deagle]";
+ mes "That's right! NOBODY meshes with the crew of the 'Going Mary!' And nobody can beat out cap'n in a sword fight!";
+ next;
+ mes "[Deagle]";
+ mes "CAPTAIN~!!! ^666666*HICCUP~*^000000 He would swing his sword like this, then... THEN!!";
+ next;
+ mes "[Deagle]";
+ mes "The bastard the captain was fighting, and anyone of his friends near him, were surrounded in flame!";
+ next;
+ mes "[Deagle]";
+ mes "Man, that sword must have had some sort of mysterious power, or the captain was just that good...!";
+ next;
+ mes "[Deagle]";
+ mes "Phew~~ ^666666*Sob* *Sob...*^000000 God, I miss everyone! Now I'm depressed! Please, go away now.";
+ close;
}
+ mes "[Deagle]";
+ mes "That's right!";
+ mes "Go AWAY~";
+ close;
}
alberta,58,80,2 script Shakir 99,{
@@ -232,7 +228,7 @@ alb2trea,39,50,6 script Fisk#a2t 100,{
mes "[Fisk]";
mes "So you wanna head back to the mainland in Alberta, eh?";
next;
- if(select("Yes please.","I changed my mind.")==1)
+ if(select("Yes please.","I changed my mind.") == 1)
warp "alberta",192,169;
close;
}
@@ -255,25 +251,22 @@ alberta,195,151,2 script Paul 86,{
mes "fee is only";
mes "200 Zeny.";
next;
- switch(select("Sign me up!","Uh, no thanks.")) {
- case 1:
- if (Zeny < 200) {
- mes "[Paul]";
- mes "It seems you don't have the money, my friend. But please come back when you're able to pay.";
- close;
- } else {
- set Zeny,Zeny - 200;
- warp "alb2trea",62,69;
- close;
- }
- case 2:
+ if(select("Sign me up!","Uh, no thanks.") == 1) {
+ if (Zeny < 200) {
mes "[Paul]";
- mes "Alright, well...";
- mes "I'll be around";
- mes "if you change";
- mes "your mind.";
+ mes "It seems you don't have the money, my friend. But please come back when you're able to pay.";
close;
+ }
+ set Zeny,Zeny - 200;
+ warp "alb2trea",62,69;
+ close;
}
+ mes "[Paul]";
+ mes "Alright, well...";
+ mes "I'll be around";
+ mes "if you change";
+ mes "your mind.";
+ close;
}
alberta,190,173,4 script Phelix 85,{
@@ -299,111 +292,106 @@ alberta,190,173,4 script Phelix 85,{
mes "If you're interested in my offer, get me the stuff I mentioned.";
set @event_zelopy,1;
close;
- } else {
- mes "Hmm.. you want to exchange jellopies for Red Potions or some Carrots eh? Well.. which one?";
+ }
+ mes "Hmm.. you want to exchange jellopies for Red Potions or some Carrots eh? Well.. which one?";
+ next;
+ if(select("Red Potions please.","Carrots please.") == 1) {
+ mes "[Phelix]";
+ mes "Alright...";
+ mes "Let's see";
+ mes "what'cha got...";
+ next;
+ mes "[Phelix]";
+ if (countitem(909) < 10) {
+ mes "Hey! Weren't you listening?. I said 10 jellopies for 1 Red Potion.. are ya deaf?";
+ close;
+ }
+ set .@max,countitem(909)/10;
+ mes "Hmm, not bad...";
+ mes "How many potions";
+ mes "do you want to get?";
next;
- switch(select("Red Potions please.","Carrots please.")) {
+ switch(select("As many as I can, please.","I want this many.","Never mind, I like my jellopy.")) {
case 1:
+ delitem 909,.@max*10; // Jellopy
+ getitem 501,.@max; // Red_Potion
+ break;
+ case 2:
mes "[Phelix]";
- mes "Alright...";
- mes "Let's see";
- mes "what'cha got...";
+ mes "I'm not giving you more then 100 at a time so don't bother, OK? If you don't want any, just say '0'.";
+ mes "Right now, the most you can get is " + .@max + " but remember, 100 at most, you want to break my back?.";
+ input .@amount;
next;
mes "[Phelix]";
- if (countitem(909) < 10) {
- mes "Hey! Weren't you listening?. I said 10 jellopies for 1 Red Potion.. are ya deaf?";
- close;
- } else {
- set .@max,countitem(909)/10;
- mes "Hmm, not bad...";
- mes "How many potions";
- mes "do you want to get?";
- next;
- switch(select("As many as I can, please.","I want this many.","Never mind, I like my jellopy.")) {
- case 1:
- delitem 909,.@max*10; // Jellopy
- getitem 501,.@max; // Red_Potion
- break;
- case 2:
- mes "[Phelix]";
- mes "I'm not giving you more then 100 at a time so don't bother, OK? If you don't want any, just say '0'.";
- mes "Right now, the most you can get is " + .@max + " but remember, 100 at most, you want to break my back?.";
- input .@amount;
- next;
- mes "[Phelix]";
- if (.@amount <= 0) {
- mes "Much obliged, come again anytime.";
- close;
- }
- if (.@amount > 100) {
- mes "Hey, what'd I say? 100 at a time at most, you're trying to kill me aren't you!";
- close;
- }
- if (countitem(909) < .@amount*10) {
- mes "Hmm, it looks like you don't have enough. Go get more jellopies if you want anything else from me.";
- close;
- }
- delitem 909,.@amount*10; // Jellopy
- getitem 501,.@amount; // Red_Potion
- break;
- case 3:
- mes "[Phelix]";
- mes "No problem,";
- mes "see you next time.";
- close;
- }
- mes "[Phelix]";
- mes "There you go! As I promised. Don't go suckin' them all down at once.";
+ if (.@amount <= 0) {
+ mes "Much obliged, come again anytime.";
close;
}
- case 2:
- mes "[Phelix]";
- mes "Alright, let's see what ya got...";
- next;
- mes "[Phelix]";
- if (countitem(909) < 3) {
- mes "Hmm, look pansy ass, I said 3 jellopies for 1 Carrot.. got it?";
+ if (.@amount > 100) {
+ mes "Hey, what'd I say? 100 at a time at most, you're trying to kill me aren't you!";
close;
- } else {
- set .@max,countitem(909)/3;
- mes "Not too bad pansy...";
- mes "How many do you want?";
- next;
- switch(select("As many as I can get, please","I want this many.","Never mind, I like my jellopy.")) {
- case 1:
- delitem 909,.@max*3; // Jellopy
- getitem 515,.@max; // Carrot
- break;
- case 2:
- mes "[Phelix]";
- mes "Right I'm not giving you more then 100 at a time so don't bother, okay? If you don't want any, just say '0'.";
- input .@amount;
- next;
- mes "[Phelix]";
- if (.@amount == 0) {
- mes "Alright then, see you next time.";
- close;
- }
- if (.@amount > 100) {
- mes "Hey pansy ass, I said 100 at most, no more then that! I'm not going to break my back for the likes of you!";
- close;
- }
- if (countitem(909) < .@amount*10) {
- mes "Seems you don't have enough. Go get some more if you want anything else.";
- close;
- }
- delitem 909,.@amount*3; // Jellopy
- getitem 515,.@amount; // Carrot
- break;
- case 3:
- mes "[Phelix]";
- mes "Catch'ya later.";
- close;
- }
- mes "[Phelix]";
- mes "There you go~! As I promised. Try not to stuff yer face.";
+ }
+ if (countitem(909) < .@amount*10) {
+ mes "Hmm, it looks like you don't have enough. Go get more jellopies if you want anything else from me.";
close;
}
+ delitem 909,.@amount*10; // Jellopy
+ getitem 501,.@amount; // Red_Potion
+ break;
+ case 3:
+ mes "[Phelix]";
+ mes "No problem,";
+ mes "see you next time.";
+ close;
}
+ mes "[Phelix]";
+ mes "There you go! As I promised. Don't go suckin' them all down at once.";
+ close;
+ }
+ mes "[Phelix]";
+ mes "Alright, let's see what ya got...";
+ next;
+ mes "[Phelix]";
+ if (countitem(909) < 3) {
+ mes "Hmm, look pansy ass, I said 3 jellopies for 1 Carrot.. got it?";
+ close;
}
+ set .@max,countitem(909)/3;
+ mes "Not too bad pansy...";
+ mes "How many do you want?";
+ next;
+ switch(select("As many as I can get, please","I want this many.","Never mind, I like my jellopy.")) {
+ case 1:
+ delitem 909,.@max*3; // Jellopy
+ getitem 515,.@max; // Carrot
+ break;
+ case 2:
+ mes "[Phelix]";
+ mes "Right I'm not giving you more then 100 at a time so don't bother, okay? If you don't want any, just say '0'.";
+ input .@amount;
+ next;
+ mes "[Phelix]";
+ if (.@amount == 0) {
+ mes "Alright then, see you next time.";
+ close;
+ }
+ if (.@amount > 100) {
+ mes "Hey pansy ass, I said 100 at most, no more then that! I'm not going to break my back for the likes of you!";
+ close;
+ }
+ if (countitem(909) < .@amount*10) {
+ mes "Seems you don't have enough. Go get some more if you want anything else.";
+ close;
+ }
+ delitem 909,.@amount*3; // Jellopy
+ getitem 515,.@amount; // Carrot
+ break;
+ case 3:
+ mes "[Phelix]";
+ mes "Catch'ya later.";
+ close;
+ }
+ mes "[Phelix]";
+ mes "There you go~! As I promised. Try not to stuff yer face.";
+ close;
}
diff --git a/npc/cities/ayothaya.txt b/npc/cities/ayothaya.txt
index e05cf8e40..1c22c2975 100644
--- a/npc/cities/ayothaya.txt
+++ b/npc/cities/ayothaya.txt
@@ -3,7 +3,7 @@
//===== By: ==================================================
//= MasterOfMuppets
//===== Current Version: =====================================
-//= 1.8
+//= 1.9
//===== Description: =========================================
//= [Aegis Conversion]
//= Ayotaya Town Script
@@ -11,6 +11,7 @@
//= 1.6 Rescripted to Aegis 10.3 standards. [L0ne_W0lf]
//= 1.7 Fixed character's anme bugs [Lupus]
//= 1.8 Moved Alberta NPC to pre-re/re paths. [Euphy]
+//= 1.9 Updated Warp coordinates to Alberta
//============================================================
// Ayothaya Transportation NPC
@@ -91,9 +92,9 @@ ayothaya,152,68,1 script Aibakthing#ayo2 843,{
mes "You will be welcome to come back whenever you please. I hope that we will see each other again sometime soon. Thank you~";
close2;
if (checkre(0))
- warp "alberta",238,22;
- else
warp "alberta",235,45;
+ else
+ warp "alberta",238,22;
end;
}
mes "[Aibakthing]";
diff --git a/npc/quests/eye_of_hellion.txt b/npc/quests/eye_of_hellion.txt
index f1a63e272..841e93734 100644
--- a/npc/quests/eye_of_hellion.txt
+++ b/npc/quests/eye_of_hellion.txt
@@ -19,6 +19,7 @@
//= 1.7 Corrected reminants from aegis conversion. [L0en_w0lf]
//= 1.8 Replaced effect numerics with constants. [L0ne_W0lf]
//= 1.9 Removed duplicate text. [Kisuka]
+//= 2.0 Corrected EXP reward
//============================================================
morocc_in,116,101,3 script Old Scholar Tyus#hellion 735,3,3,{
@@ -545,7 +546,7 @@ morocc_in,116,101,3 script Old Scholar Tyus#hellion 735,3,3,{
set HELLIONQ,69;
getitem 2658,1; //Nile_Rose_
getitem 603,1; //Old_Blue_Box
- getexp 120000,0;
+ getexp 1200000,0;
next;
mes "[Sir Chilias'Tyus]";
mes "Thank you, kind";
@@ -612,7 +613,7 @@ morocc_in,116,101,3 script Old Scholar Tyus#hellion 735,3,3,{
delitem 7332,1; //Slate
set HELLIONQ,70;
getitem 2658,1; //Nile_Rose_
- getexp 100000,0;
+ getexp 1000000,0;
next;
mes "[Sir Chilias'Tyus]";
mes "Thank you, kind";
diff --git a/npc/quests/first_class/tu_sword.txt b/npc/quests/first_class/tu_sword.txt
index 6ae1d7c08..ee54103de 100644
--- a/npc/quests/first_class/tu_sword.txt
+++ b/npc/quests/first_class/tu_sword.txt
@@ -3,7 +3,7 @@
//===== By: ==================================================
//= Fix up by Jukka
//===== Current Version: =====================================
-//= 1.4
+//= 1.5
//===== Compatible With: =====================================
//= rAthena SVN (Testet in Trunk 88xx)
//===== Description: =========================================
@@ -15,6 +15,7 @@
//= 1.2 Fixed a typo on NPC name. [SinSloth]
//= 1.3 Fixed experience gains to match upcoming rate adjustments. [SinSloth]
//= 1.4 Misc. updates. [L0ne_W0lf]
+//= 1.5 Warp New Izlude update
//============================================================
// Shurank
@@ -1006,7 +1007,10 @@ geffen,154,143,3 script Dequ'ee 734,{
set tu_swordman, 21;
changequest 8226,8227;
close2;
- warp "izlude",35,78;
+ if (checkre(0))
+ warp "izlude",127,100;
+ else
+ warp "izlude",35,78;
end;
}
if(tu_swordman == 19){
@@ -2116,7 +2120,10 @@ geffen,154,143,3 script Dequ'ee 734,{
mes "of yourself,";
mes "brave Swordman.";
next;
- warp "izlude",35,78;
+ if (checkre(0))
+ warp "izlude",127,100;
+ else
+ warp "izlude",35,78;
close;
}
case 2:
diff --git a/npc/quests/quests_13_1.txt b/npc/quests/quests_13_1.txt
index 86b0697a4..c8cc1d29a 100644
--- a/npc/quests/quests_13_1.txt
+++ b/npc/quests/quests_13_1.txt
@@ -3,7 +3,7 @@
//===== By: ==================================================
//= L0ne_W0lf
//===== Current Version: =====================================
-//= 2.6a
+//= 2.7
//===== Description: =========================================
//= [Official Conversion]
//= Contains Quests:
@@ -43,6 +43,7 @@
//= 2.5a Minor fixes. [Euphy]
//= 2.6 Disabled "Ash Vacuum Warper" as it's no longer in iRO. [Euphy]
//= 2.6a Added 'npcskill' command. [Euphy]
+//= 2.7 Updated incorrect EXP values & added checkre() checks
//============================================================
// Onward to the New World
@@ -292,7 +293,10 @@ prt_castle,83,67,5 script Recruiter for the Brave 109,{
next;
changequest 10064,10065;
set ep13_ryu,9;
- getexp 66000,21000;
+ if(checkre(0))
+ getexp 66000,21000;
+ else
+ getexp 660000,210000;
mes "[Recruiter]";
mes "Just go there!";
mes "And listen carefully";
@@ -1938,7 +1942,10 @@ moc_fild22b,230,197,5 script Munkenro#2 967,{
next;
completequest 10078;
set ep13_ryu,100;
- getexp 66000,21000;
+ if(checkre(0))
+ getexp 66000,21000;
+ else
+ getexp 660000,210000;
mes "[Munkenro]";
mes "I will let you go there.";
mes "Let me know once you are ready.";
@@ -2831,7 +2838,10 @@ mid_camp,261,284,4 script Instructor#ep13bs 405,{
set ep13_newbs,100;
getitem 617,1; //Old_Violet_Box
getitem 12322,5; //Chocolate_Pie
- getexp 100000,10000;
+ if(checkre(0))
+ getexp 100000,10000;
+ else
+ getexp 1000000,100000;
completequest 11100;
close;
}
@@ -4361,7 +4371,10 @@ mid_camp,188,254,3 script Monster Scholar#ep13 883,{
mes "I hope you'll make yourself known in Ash Vacuum with your great accomplishments.";
set ep13_animal,15;
completequest 2157;
- getexp 150000,0;
+ if(checkre(0))
+ getexp 100000,0;
+ else
+ getexp 1500000,0;
close;
}
else {
@@ -4459,7 +4472,10 @@ mid_camp,188,254,3 script Monster Scholar#ep13 883,{
mes "- You pat his shoulder gently, it's worrying that Rumis is not able to return to his country. -";
set ep13_animal,100;
delitem 6033,1; //Horn_Of_Tendrilion
- getexp 100000,0;
+ if(checkre(0))
+ getexp 50000,0;
+ else
+ getexp 1000000,0;
close;
}
else {
@@ -5291,7 +5307,10 @@ mid_camp,212,237,5 script Camp Guard Captain#man1 852,{
mes "I'll discuss this more with the expedition management.";
mes "Thank you for your valuable information.";
completequest 2158;
- getexp 70000,0;
+ if(checkre(0))
+ getexp 90000,0;
+ else
+ getexp 900000,0;
close;
}
else if (checkquest(2158) == -1) {
@@ -5312,7 +5331,10 @@ mid_camp,212,237,5 script Camp Guard Captain#man1 852,{
mes "I'll discuss this more with the expedition management.";
mes "Thank you for your valuable information.";
completequest 2159;
- getexp 70000,0;
+ if(checkre(0))
+ getexp 90000,0;
+ else
+ getexp 900000,0;
close;
}
else {
@@ -5334,7 +5356,10 @@ mid_camp,212,237,5 script Camp Guard Captain#man1 852,{
mes "I'll discuss this more with the expedition management.";
mes "Thank you for your valuable information.";
completequest 2159;
- getexp 70000,0;
+ if(checkre(0))
+ getexp 90000,0;
+ else
+ getexp 900000,0;
close;
}
else {
@@ -5760,7 +5785,10 @@ OnTouch:
mes "- You feel so refreshed and light, as you drink the tea that the Official offered. -";
specialeffect2 EF_ABSORBSPIRITS;
set ep13_1_rhea,100;
- getexp 30000,10000;
+ if(checkre(0))
+ getexp 80000,3000;
+ else
+ getexp 300000,10000;
completequest 8210;
next;
mes "[United Research Official]";
@@ -7577,7 +7605,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{
next;
delitem 579,50; //Delicious_Fish
set ep13_alba,6;
- getexp 8000,3000;
+ if(checkre(0))
+ getexp 8000,3000;
+ else
+ getexp 80000,30000;
erasequest 7042;
setquest 7047;
mes "^4d4dff You have received 8,000 EXP";
@@ -7610,7 +7641,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{
delitem 7198,30; //Great_Leaf
delitem 7188,30; //Browny_Root
set ep13_alba,6;
- getexp 9000,4000;
+ if(checkre(0))
+ getexp 9000,4000;
+ else
+ getexp 90000,40000;
erasequest 7043;
setquest 7047;
mes "^4d4dff You have received 9,000 EXP";
@@ -7648,7 +7682,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{
delitem 528,20; //Monster's_Feed
delitem 537,30; //Pet_Food
set ep13_alba,6;
- getexp 8000,3000;
+ if(checkre(0))
+ getexp 8000,3000;
+ else
+ getexp 80000,30000;
erasequest 7044;
setquest 7047;
mes "^4d4dff You have received 8,000 EXP";
@@ -7683,7 +7720,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{
delitem 517,50; //Meat
delitem 537,30; //Pet_Food
set ep13_alba,6;
- getexp 8000,3000;
+ if(checkre(0))
+ getexp 8000,3000;
+ else
+ getexp 80000,30000;
erasequest 7045;
setquest 7047;
mes "^4d4dff You have received 8,000 EXP";
@@ -7715,7 +7755,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{
next;
delitem 6020,30; //Fur
set ep13_alba,6;
- getexp 8000,3000;
+ if(checkre(0))
+ getexp 8000,3000;
+ else
+ getexp 80000,30000;
erasequest 7046;
setquest 7047;
mes "^4d4dff You have received 8,000 EXP";
@@ -8022,7 +8065,7 @@ function Catwarp;
close;
}
}
- else if ((ep13_yong1 > 39) && (ep13_yong1 < 200)) {
+ else if ((ep13_yong1 > 39) && (ep13_yong1 < 100)) {
mes "[Cat Hand Agent]";
mes "Cat Trading's available services are as followed.";
mes "For additional services, please consult Agent Gyaruk.";
@@ -8467,7 +8510,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{
mes "You've brough Pieces of Fish!";
mes "GOOD JOB!";
delitem 6039,10; //Piece_Of_Fish
- getexp 3000,0;
+ getexp 20000,0;
set ep13_yong1,10;
setquest 12060;
next;
@@ -8487,7 +8530,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{
mes "You've brough Pieces of Fish!";
mes "GOOD JOB!";
delitem 6039,10; //Piece_Of_Fish
- getexp 1500,0;
+ getexp 15000,0;
setquest 12060;
set ep13_yong1,ep13_yong1+1;
next;
@@ -8508,7 +8551,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{
mes "You've brough Pieces of Fish!";
mes "GOOD JOB!";
delitem 6039,10; //Piece_Of_Fish
- getexp 1500,0;
+ getexp 15000,0;
setquest 12060;
set ep13_yong1,ep13_yong1+1;
next;
@@ -8528,7 +8571,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{
mes "You've brough Pieces of Fish!";
mes "GOOD JOB!";
delitem 6039,10; //Piece_Of_Fish
- getexp 1500,0;
+ getexp 15000,0;
setquest 12060;
set ep13_yong1,ep13_yong1+1;
next;
@@ -8543,7 +8586,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{
close;
}
}
- else if ((ep13_yong1 > 59) && (ep13_yong1 < 300)) {
+ else if ((ep13_yong1 > 59) && (ep13_yong1 < 80)) {
npcskill "AL_HEAL",8,50,50;
if (countitem(6039) > 9) {
mes "[Ferocious Gorurug]";
@@ -8714,7 +8757,7 @@ mid_camp,88,100,55 script Cat Hand Mining Agent 876,{
mes "Thank you for collecting minerals for me.";
next;
delitem 6048,3; //Unidentified_Mineral
- getexp 3000,0;
+ getexp 20000,0;
setquest 12062;
set ep13_yong1,ep13_yong1+1;
select("I'm freezing! Take them quickly.");
@@ -9229,7 +9272,11 @@ mid_campin,90,121,5 script Hibba Agip 459,{
mes "And please take this small reward.";
mes "Thank you for your help so far.";
next;
- getexp 3750000,0;
+ if(checkre(0))
+ getexp 30000,0; //kRO
+ //getexp 3750000,0; //iRO?
+ else
+ getexp 2500000,0;
getitem 12110,3; //First_Aid_Kit
set ep13_1_edq,14;
completequest 3094;
@@ -11625,7 +11672,10 @@ mid_campin,68,185,3 script Pursuit Party Leader#1 803,{
mes "[Echinacea]";
mes "Keep up the good work assisting the explorers in this camp.";
set mao_morocc2,100;
- getexp 120000,20000;
+ if(checkre(0))
+ getexp 120000,20000;
+ else
+ getexp 1200000,200000;
getitem 617,1; //Old_Violet_Box
completequest 7036;
close;
@@ -12002,7 +12052,10 @@ mid_camp,199,311,7 script Mr. Kidd#ep13_dan01 884,{
delitem 6029,1; //Morocc_Tracing_Log
delitem 6027,1; //Crystal_Of_Feardoom
set mao_morocc2,10;
- getexp 20000,1000;
+ if(checkre(0))
+ getexp 20000,1000;
+ else
+ getexp 200000,10000;
changequest 7018,7019;
close2;
}
diff --git a/npc/quests/quests_13_2.txt b/npc/quests/quests_13_2.txt
index f2c64d2d8..1da301ac9 100644
--- a/npc/quests/quests_13_2.txt
+++ b/npc/quests/quests_13_2.txt
@@ -3,7 +3,7 @@
//===== By: ==================================================
//= L0ne_W0lf
//===== Current Version: =====================================
-//= 2.4a
+//= 2.5
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
@@ -43,6 +43,8 @@
//= 2.3 Fixed EF_Wind not showing. (bugreport:5149) [Masao]
//= 2.4 Optimized (6000+ lines reduced!). [Euphy]
//= 2.4a Fixed an invisible NPC clashing with a warp portal. [Euphy]
+//= 2.5 Fixed EXP values, added support for pre-re
+//= & other minor stuff [Streusel]
//============================================================
// Cat Hand Addition.
@@ -2452,7 +2454,10 @@ spl_in02,236,92,5 script Arc#ep13md_l02 447,{
mes "I'm sorry this is all I can give you for now.";
set ep13_mdrama,27;
getitem 6081,25; //Splendide_Coin
- getexp 120000,10000;
+ if(checkre(0))
+ getexp 120000,10000;
+ else
+ getexp 1200000,100000;
completequest 7071;
close;
}
@@ -2771,7 +2776,10 @@ manuk,252,116,3 script Manuk Galtun#ep13_2day 450,{
completequest 7074;
completequest 7075;
set ep13_2_days01,2;
- getexp 50000,30000;
+ if(checkre(0))
+ getexp 50000,30000;
+ else
+ getexp 500000,300000;
getitem 6080,10; //Manuk_Coin
close;
}
@@ -2805,7 +2813,7 @@ manuk,252,116,3 script Manuk Galtun#ep13_2day 450,{
// Daily Quests
// - Bradium Collection
// - Laphine Craftsman
-// - Drago Egg Collection (npc includes 'Wanted' quest)
+// - Draco Egg Collection (npc includes 'Wanted' quest)
//============================================================
man_in01,378,276,3 script Manuk Engineer#ep13_2 453,{
if (checkweight(1201,2) == 0) {
@@ -2845,7 +2853,7 @@ man_in01,378,276,3 script Manuk Engineer#ep13_2 453,{
delitem 6090,20; //Purified_Bradium
erasequest 7079;
setquest 7080;
- getexp 4000,4000;
+ getexp 40000,40000;
getitem 6080,3; //Manuk_Coin
close;
}
@@ -2954,7 +2962,7 @@ spl_in01,97,313,3 script Laphine Craftsman#ep13 446,{
delitem 6075,15; //Crystalized_Teardrop
erasequest 7081;
setquest 7082;
- getexp 3000,3000;
+ getexp 30000,30000;
getitem 6081,3; //Splendide_Coin
close;
}
@@ -3159,7 +3167,7 @@ mid_camp,146,306,3 script Pet Breeder#ep13_eden01 982,{
erasequest 7077;
setquest 7078;
set ep13_2_dayegg,2;
- getexp 4000,4000;
+ getexp 40000,40000;
getitem 6081,1; //Splendide_Coin
getitem 6080,1; //Manuk_Coin
close;
@@ -3739,7 +3747,10 @@ mid_camp,197,237,3 script Schwartzvalt Mechanic#1 869,{
mes "I hope this ring would be a big help for your journey through the other world.";
completequest 8253;
set ep13_2_rhea,100;
- getexp 100000,30000;
+ if(checkre(0))
+ getexp 200000,5000;
+ else
+ getexp 1000000,300000;
getitem 2782,1; //Ring_Of_Wise_King
close;
}
@@ -4832,10 +4843,13 @@ man_in01,372,221,5 script Scientist#lifeguard 449,{
delitem 6077,.@stone_chk; //Rough_Mineral
delitem 6078,.@stoneelse_chk; //Stone_Fragments
delitem 6076,1; //Portable_Toolbox
- getitem 6080,2; //Manuk_Coin
- getexp 0,70000;
+ getitem 6080,3; //Manuk_Coin
changequest 2179+(ep13_2_tre-2),2182;
set ep13_2_tre,100;
+ if(checkre(0))
+ close;
+ else
+ getexp 0,700000;
close;
}
else {
@@ -5699,8 +5713,11 @@ spl_in01,30,324,3 script High Laphine#grenouille 446,{
mes "If you have something to talk to me about, come to me whenever. Nice to meet you, human from Rune Midgard.";
set ep13_2_tre1,6;
changequest 2185,2186;
- getitem 6081,2; //Splendide_Coin
- getexp 0,70000;
+ getitem 6081,3; //Splendide_Coin
+ if(checkre(0))
+ close;
+ else
+ getexp 0,700000;
close;
}
else {
diff --git a/npc/re/guides/guides_izlude.txt b/npc/re/guides/guides_izlude.txt
index b3f4cd4b0..80eedaf91 100644
--- a/npc/re/guides/guides_izlude.txt
+++ b/npc/re/guides/guides_izlude.txt
@@ -35,7 +35,7 @@
mes "on Byalan Island since it is";
mes "filled with dreadful monsters.";
mes "Would you like to check any other locations?";
- viewpoint 1,200,180,0,0xFF0000;
+ viewpoint 1,197,205,0,0xFF0000;
next;
break;
case 2:
@@ -45,7 +45,7 @@
mes "Let me mark its location";
mes "on your mini-map.";
mes "Would you like to check any other locations?";
- viewpoint 1,145,39,1,0x0A82FF;
+ viewpoint 1,204,75,1,0x0A82FF;
next;
break;
case 3:
@@ -64,7 +64,7 @@
mes "Let me mark the location of the ^006400Tool Shop^000000";
mes "on your mini-map.";
mes "Would you like to check any other locations?";
- viewpoint 1,148,148,3,0xAAFF00;
+ viewpoint 1,160,125,3,0xAAFF00;
next;
break;
case 5:
@@ -72,7 +72,7 @@
mes "Let me mark the location of the ^7F3300Weapon & Armor Shop^000000";
mes "on your mini-map.";
mes "Would you like to check any other locations?";
- viewpoint 1,114,149,4,0xD2691E;
+ viewpoint 1,109,182,4,0xD2691E;
next;
break;
case 6:
@@ -81,7 +81,7 @@
mes "Let me mark its location";
mes "on your mini-map.";
mes "Would you like to check any other locations?";
- viewpoint 1,52,140,5,0xDA70D6;
+ viewpoint 1,52,172,5,0xDA70D6;
next;
break;
case 7:
@@ -89,7 +89,7 @@
mes "Let me mark the location of the ^B9062FSwordsman Association^000000";
mes "on your mini-map.";
mes "Would you like to check any other locations?";
- viewpoint 1,214,130,6,0xFF0000;
+ viewpoint 1,212,161,6,0xFF0000;
next;
break;
case 8:
@@ -109,7 +109,7 @@
mes "the Swordsman Guild building.";
mes "Let me mark his location on your mini-map.";
mes "Would you like to check any other locations?";
- viewpoint 1,52,140,7,0x0A82FF;
+ viewpoint 1,131,148,7,0x0A82FF;
next;
break;
case 2:
@@ -118,7 +118,7 @@
mes "^FF5400Kafra Employee^000000";
mes "on your mini-map.";
mes "Would you like to check any other locations?";
- viewpoint 1,134,88,8,0xFF5400;
+ viewpoint 1,128,148,8,0xFF5400;
next;
break;
case 3:
@@ -127,7 +127,7 @@
mes "^8B4513Jawaii^000000, the paradise of newlyweds,";
mes "please speak to the ^B9062FNewlywed Helper^000000.";
mes "Would you like to check any other locations?";
- viewpoint 1,171,185,9,0xFF0000;
+ viewpoint 1,102,150,9,0xFF0000;
next;
break;
case 4:
@@ -137,7 +137,7 @@
mes "Let me mark his location";
mes "on your mini-map.";
mes "Would you like to check any other locations?";
- viewpoint 1,171,130,10,0xD2691E;
+ viewpoint 1,158,130,10,0xD2691E;
next;
break;
case 5:
@@ -146,7 +146,7 @@
mes "^0000FFMercenary Goods Merchant^000000";
mes "on your mini-map.";
mes "Would you like to check any other locations?";
- viewpoint 1,48,137,11,0xDA70D6;
+ viewpoint 1,56,169,11,0xDA70D6;
next;
break;
case 6:
diff --git a/npc/re/jobs/1-1/acolyte.txt b/npc/re/jobs/1-1/acolyte.txt
index 4808879be..6bc00e86e 100644
--- a/npc/re/jobs/1-1/acolyte.txt
+++ b/npc/re/jobs/1-1/acolyte.txt
@@ -3,12 +3,13 @@
//===== By: ==================================================
//= Kisuka
//===== Current Version: =====================================
-//= 1.1
+//= 1.2
//===== Description: =========================================
//= Job Change to Acolyte Class
//===== Additional Comments: =================================
//= 1.0 First Version. [Kisuka]
//= 1.1 Added back the npcs used for the priest quest.
+//= 1.2 Added Baby Job compatibility [Streusel]
//============================================================
prt_church,184,41,4 script Cleric#aco 60,{
if (Upper == 1) {
@@ -61,7 +62,7 @@ prt_church,184,41,4 script Cleric#aco 60,{
next;
switch(select("Change your job to acolyte.:Ask the requirements to be an acolyte.:Quit it.")) {
case 1:
- if(Class != Job_Novice) {
+ if(Class != Job_Novice && Class != Job_Baby) {
mes "[Father Mareusis]";
if(Class == Job_Acolyte) {
mes "Are you feeling okay today? I can tell by your attire that you are already an Acolyte. You're not joking around, are you?";
@@ -85,7 +86,7 @@ prt_church,184,41,4 script Cleric#aco 60,{
next;
mes "[Father Mareusis]";
mes "Always remember to be thankful to God, who takes care of us all the time. In chaos and times of difficulty, face your hardships with unwavering faith.";
- jobchange Job_Acolyte;
+ callfunc "Job_Change",Job_Acolyte;
getitem 1545,1; // N_Mace
next;
mes "[Father Mareusis]";
diff --git a/npc/re/jobs/1-1/archer.txt b/npc/re/jobs/1-1/archer.txt
index 86560b9ed..4d98bbe49 100644
--- a/npc/re/jobs/1-1/archer.txt
+++ b/npc/re/jobs/1-1/archer.txt
@@ -3,11 +3,12 @@
//===== By: ==================================================
//= Kisuka
//===== Current Version: =====================================
-//= 1.0
+//= 1.1
//===== Description: =========================================
//= Job Change to Archer Class
//===== Additional Comments: =================================
//= 1.0 First Version. [Kisuka]
+//= 1.1 Added Baby Job compatibility [Streusel]
//============================================================
payon_in02,64,71,4 script Archer Guildsman#archer 85,{
if (Upper == 1) {
@@ -61,7 +62,7 @@ payon_in02,64,71,4 script Archer Guildsman#archer 85,{
next;
switch(select("I want to be an Archer.:I need the requirements, please.:Nothing, thanks.")) {
case 1:
- if(Class != Job_Novice) {
+ if(Class != Job_Novice && Class != Job_Baby) {
mes "[Archer Guildsman]";
if(Class == Job_Archer) {
mes "Haha, you are kidding me..";
@@ -90,7 +91,7 @@ payon_in02,64,71,4 script Archer Guildsman#archer 85,{
mes "[Archer Guildsman]";
mes "Congratulations! You are now an Archer! Also, we hope that you actively participate in many programs for the revival of the Archer Guild.";
mes "Ah, items have arrived from the Production Department. Here, take these! These are all yours!";
- jobchange Job_Archer;
+ callfunc "Job_Change",Job_Archer;
getitem 1742,1; // N_Composite_Bow
getitem 12004,1; // Arrow_Container
getitem 12009,1; // Silver_Arrow_Container
diff --git a/npc/re/jobs/1-1/mage.txt b/npc/re/jobs/1-1/mage.txt
index ee5eba7fd..a25ec5635 100644
--- a/npc/re/jobs/1-1/mage.txt
+++ b/npc/re/jobs/1-1/mage.txt
@@ -3,13 +3,14 @@
//===== By: ==================================================
//= Kisuka
//===== Current Version: =====================================
-//= 1.0
+//= 1.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Job Change to Mage Class
//===== Additional Comments: =================================
//= 1.0 First Version. [Kisuka]
+//= 1.1 Added Baby Job compatibility [Streusel]
//============================================================
geffen_in,164,124,4 script Mage Guildsman#mage 123,{
if (Upper == 1) {
@@ -52,7 +53,7 @@ geffen_in,164,124,4 script Mage Guildsman#mage 123,{
close;
}
}
- if(Class != Job_Novice) {
+ if(Class != Job_Novice && Class != Job_Baby) {
mes "[Mage Guildsman]";
if(Class == Job_Mage) {
mes "Hey, haven't you realized? You're already a Mage, silly!";
diff --git a/npc/re/jobs/1-1/merchant.txt b/npc/re/jobs/1-1/merchant.txt
index a010af556..0edefd1ac 100644
--- a/npc/re/jobs/1-1/merchant.txt
+++ b/npc/re/jobs/1-1/merchant.txt
@@ -3,13 +3,14 @@
//===== By: ==================================================
//= Kisuka
//===== Current Version: =====================================
-//= 1.0
+//= 1.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Job Change to Merchant Class
//===== Additional Comments: =================================
//= 1.0 First Version. [Kisuka]
+//= 1.1 Added Baby Job compatibility [Streusel]
//============================================================
alberta_in,53,43,6 script Merchant#mer 86,{
if (Upper == 1) {
@@ -57,7 +58,7 @@ alberta_in,53,43,6 script Merchant#mer 86,{
next;
switch(select("I want to be a merchant.:I want to know more about merchants.:Ask him the requirements to be a merchant.:Nothing.")) {
case 1:
- if(Class != Job_Novice) {
+ if(Class != Job_Novice && Class != Job_Baby) {
mes "[Guildsman Mahnsoo]";
if(Class == Job_Merchant) {
mes ".....? Sorry? What are you saying?";
diff --git a/npc/re/jobs/1-1/swordman.txt b/npc/re/jobs/1-1/swordman.txt
index cd01ecb28..168b32b2e 100644
--- a/npc/re/jobs/1-1/swordman.txt
+++ b/npc/re/jobs/1-1/swordman.txt
@@ -3,13 +3,14 @@
//===== By: ==================================================
//= Kisuka
//===== Current Version: =====================================
-//= 1.0
+//= 1.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Job Change to Swordman Class
//===== Additional Comments: =================================
//= 1.0 First Version. [Kisuka]
+//= 1.1 Added Baby Job compatibility [Streusel]
//============================================================
izlude_in,74,172,4 script Swordman#swd 119,{
if (Upper == 1) {
@@ -80,7 +81,7 @@ izlude_in,74,172,4 script Swordman#swd 119,{
mes "In my opinion, Swordman is the best job ever!";
close;
case 2:
- if(Class != Job_Novice) {
+ if(Class != Job_Novice && Class != Job_Baby) {
mes "[Swordman Guildsman]";
if(Class == Job_Swordman) {
mes "You are already an excellent Swordman, aren't you?";
diff --git a/npc/re/jobs/1-1/thief.txt b/npc/re/jobs/1-1/thief.txt
index 5bf41fa87..b23846b5f 100644
--- a/npc/re/jobs/1-1/thief.txt
+++ b/npc/re/jobs/1-1/thief.txt
@@ -3,13 +3,14 @@
//===== By: ==================================================
//= Kisuka
//===== Current Version: =====================================
-//= 1.0
+//= 1.1
//===== Compatible With: =====================================
//= rAthena SVN
//===== Description: =========================================
//= Job Change to Thief Class
//===== Additional Comments: =================================
//= 1.0 First Version. [Kisuka]
+//= 1.1 Added Baby Job compatibility [Streusel]
//============================================================
moc_prydb1,39,129,2 script Thief Guide#thief 69,{
if (Upper == 1) {
@@ -65,7 +66,7 @@ moc_prydb1,39,129,2 script Thief Guide#thief 69,{
mes "If you want to become a Thief, ask the sharp-eyed guy next to me.";
close;
}
- if(Class != Job_Novice) {
+ if(Class != Job_Novice && Class != Job_Baby) {
if(Class == Job_Thief) {
mes "[Thief Guildsman]";
mes "Hey~ if you have any trouble, get it out to me anytime, huh?";
@@ -169,7 +170,7 @@ moc_prydb1,42,133,2 script Thief Guildsman#thief 118,{
mes "[Commander of Thief Guild]";
mes "'"+strcharinfo(0)+".'";
mes "'For those who are ready, the moonlight shall open the way. Now you are fully ready, I now officially allow you to become a member of the Thief Guild.'";
- jobchange Job_Thief;
+ callfunc "Job_Change",Job_Thief;
set q_job_thief,0;
getitem 13041,1; // N_Main_Gauche
next;
@@ -189,7 +190,7 @@ moc_prydb1,42,133,2 script Thief Guildsman#thief 118,{
mes "See you again.";
close;
}
- if(Class != Job_Novice) {
+ if(Class != Job_Novice && Class != Job_Baby) {
if(Class == Job_Thief) {
mes "[Brad]";
mes "I don't have any special events now. So go on your way and come back later.";
diff --git a/npc/re/mobs/fields/amatsu.txt b/npc/re/mobs/fields/amatsu.txt
index 6c6761814..86e96f337 100644
--- a/npc/re/mobs/fields/amatsu.txt
+++ b/npc/re/mobs/fields/amatsu.txt
@@ -1,4 +1,4 @@
-//===== Hercules Script =======================================
+//===== Hercules Script ======================================
//= Amatsu Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
@@ -32,4 +32,4 @@ ama_fild01,171,313,0,0 monster Hydra 1068,1,66000,33000,0
ama_fild01,171,314,0,0 monster Hydra 1068,1,69000,34500,0
ama_fild01,171,315,0,0 monster Hydra 1068,1,69000,34500,0
ama_fild01,175,314,0,0 monster Hydra 1068,1,72000,39000,0
-ama_fild01,169,315,0,0 monster Hydra 1068,1,72000,39000,0
+ama_fild01,169,315,0,0 monster Hydra 1068,1,72000,39000,0 \ No newline at end of file
diff --git a/npc/re/mobs/fields/ayothaya.txt b/npc/re/mobs/fields/ayothaya.txt
index 6bf71ed2c..cef980e7d 100644
--- a/npc/re/mobs/fields/ayothaya.txt
+++ b/npc/re/mobs/fields/ayothaya.txt
@@ -3,13 +3,14 @@
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
-//= 1.5
+//= 1.6
//===== Additional Comments: =================================
//= 1.1 Using EuRO data [Ishizu]
//= 1.2 According the guide book, added a Choco [Lupus&VP]
//= 1.3 Removed Choco [Lupus]
//= 1.4 Official kRO 10.1 spawns [Playtester]
//= 1.5 Updated to Renewal Spawns [Kisuka]
+//= 1.6 Updated Renewal Spawns [Streusel]
//============================================================
//==================================================
@@ -18,7 +19,7 @@
ayo_fild01,0,0,0,0 monster Smokie 1056,30,5000,0,0
ayo_fild01,0,0,0,0 monster Coco 1104,30,5000,0,0
ayo_fild01,0,0,0,0 monster Yoyo 1057,30,5000,0,0
-ayo_fild01,0,0,0,0 monster Green Plant 1080,10,5000,0,0
+ayo_fild01,0,0,0,0 monster Green Plant 1080,10,10000,0,1
//==================================================
// ayo_fild02 - Ayothaya Field
@@ -26,4 +27,4 @@ ayo_fild01,0,0,0,0 monster Green Plant 1080,10,5000,0,0
ayo_fild02,0,0,0,0 monster Yoyo 1057,45,5000,0,0
ayo_fild02,0,0,0,0 monster Leaf Cat 1586,35,5000,0,0
ayo_fild02,0,0,0,0 monster Kraben 1587,5,5000,0,0
-ayo_fild02,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0
+ayo_fild02,0,0,0,0 monster Yellow Plant 1081,10,10000,0,1
diff --git a/npc/re/mobs/fields/bifrost.txt b/npc/re/mobs/fields/bifrost.txt
index c518669f6..b8c28bf49 100644
--- a/npc/re/mobs/fields/bifrost.txt
+++ b/npc/re/mobs/fields/bifrost.txt
@@ -3,11 +3,12 @@
//===== By: ==================================================
//= Chilly
//===== Current Version: =====================================
-//= 1.0
+//= 1.1
//===== Description: =========================================
//= Official kRO monster spawns
//===== Additional Comments: =================================
//= 1.0 First Release
+//= 1.1 Added more accurate 1@mist monsters
//============================================================
//==================================================
@@ -29,3 +30,79 @@ bif_fild02,0,0,0,0 monster Pom Spider 2132,5,0,0,0
bif_fild02,0,0,0,0 monster Angra Mantis 2133,5,0,0,0
bif_fild02,0,0,0,0 monster Little Fatum 2136,50,0,0,0
bif_fild02,0,0,0,0 monster Miming 2137,30,0,0,0
+
+//==================================================
+// 1@mist - Forest Maze of Mists
+//==================================================
+1@mist,247,124,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,247,124,0,0 monster Nydhoggur Memory 2138,1,1200000,600000,0
+1@mist,247,124,0,0 monster Nydhoggur Memory 2139,1,1200000,600000,0
+1@mist,225,98,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,225,98,0,0 monster Nydhoggur Memory 2138,1,1200000,600000,0
+1@mist,225,98,0,0 monster Nydhoggur Memory 2139,1,1200000,600000,0
+1@mist,159,184,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,159,184,0,0 monster Nydhoggur Memory 2138,1,1200000,600000,0
+1@mist,159,184,0,0 monster Nydhoggur Memory 2139,1,1200000,600000,0
+1@mist,61,39,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,61,39,0,0 monster Nydhoggur Memory 2138,1,1200000,600000,0
+1@mist,61,39,0,0 monster Nydhoggur Memory 2139,1,1200000,600000,0
+1@mist,254,151,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,254,151,0,0 monster Nydhoggur Memory 2138,1,1200000,600000,0
+1@mist,254,151,0,0 monster Nydhoggur Memory 2139,1,1200000,600000,0
+1@mist,230,179,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,230,179,0,0 monster Nydhoggur Memory 2140,1,1200000,600000,0
+1@mist,230,179,0,0 monster Nydhoggur Memory 2141,1,1200000,600000,0
+1@mist,285,225,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,285,225,0,0 monster Nydhoggur Memory 2140,1,1200000,600000,0
+1@mist,285,225,0,0 monster Nydhoggur Memory 2141,1,1200000,600000,0
+1@mist,161,316,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,161,316,0,0 monster Nydhoggur Memory 2140,1,1200000,600000,0
+1@mist,161,316,0,0 monster Nydhoggur Memory 2141,1,1200000,600000,0
+1@mist,230,324,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,230,324,0,0 monster Nydhoggur Memory 2140,1,1200000,600000,0
+1@mist,230,324,0,0 monster Nydhoggur Memory 2141,1,1200000,600000,0
+1@mist,206,200,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,206,200,0,0 monster Nydhoggur Memory 2140,1,1200000,600000,0
+1@mist,206,200,0,0 monster Nydhoggur Memory 2141,1,1200000,600000,0
+1@mist,221,236,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,221,236,0,0 monster Nydhoggur Memory 2142,1,1200000,600000,0
+1@mist,221,236,0,0 monster Nydhoggur Memory 2143,1,1200000,600000,0
+1@mist,204,299,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,204,299,0,0 monster Nydhoggur Memory 2142,1,1200000,600000,0
+1@mist,204,299,0,0 monster Nydhoggur Memory 2143,1,1200000,600000,0
+1@mist,84,273,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,84,273,0,0 monster Nydhoggur Memory 2142,1,1200000,600000,0
+1@mist,84,273,0,0 monster Nydhoggur Memory 2143,1,1200000,600000,0
+1@mist,95,287,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,95,287,0,0 monster Nydhoggur Memory 2142,1,1200000,600000,0
+1@mist,95,287,0,0 monster Nydhoggur Memory 2143,1,1200000,600000,0
+1@mist,324,325,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,324,325,0,0 monster Nydhoggur Memory 2142,1,1200000,600000,0
+1@mist,324,325,0,0 monster Nydhoggur Memory 2143,1,1200000,600000,0
+1@mist,280,343,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,280,343,0,0 monster Nydhoggur Memory 2142,1,1200000,600000,0
+1@mist,280,343,0,0 monster Nydhoggur Memory 2143,1,1200000,600000,0
+1@mist,345,186,0,0 monster Creeper 2135,1,1200000,600000,0
+1@mist,345,186,0,0 monster Nydhoggur Memory 2142,1,1200000,600000,0
+1@mist,345,186,0,0 monster Nydhoggur Memory 2143,1,1200000,600000,0
+1@mist,105,105,85,85 monster Pom Spider 2132,8,1200000,600000,0
+1@mist,105,105,85,85 monster Angra Mantis 2133,8,1200000,600000,0
+1@mist,105,105,85,85 monster Parus 2134,8,1200000,600000,0
+1@mist,105,105,85,85 monster Little Fatum 2136,8,1200000,600000,0
+1@mist,105,105,85,85 monster Miming 2137,5,1200000,600000,0
+1@mist,105,275,85,85 monster Pom Spider 2132,10,1200000,600000,0
+1@mist,105,275,85,85 monster Angra Mantis 2133,10,1200000,600000,0
+1@mist,105,275,85,85 monster Parus 2134,10,1200000,600000,0
+1@mist,105,275,85,85 monster Little Fatum 2136,8,1200000,600000,0
+1@mist,105,275,85,85 monster Miming 2137,5,1200000,600000,0
+1@mist,275,105,85,85 monster Pom Spider 2132,12,1200000,600000,0
+1@mist,275,105,85,85 monster Angra Mantis 2133,12,1200000,600000,0
+1@mist,275,105,85,85 monster Parus 2134,10,1200000,600000,0
+1@mist,275,105,85,85 monster Little Fatum 2136,8,1200000,600000,0
+1@mist,275,105,85,85 monster Miming 2137,5,1200000,600000,0
+1@mist,275,275,85,85 monster Pom Spider 2132,15,1200000,600000,0
+1@mist,275,275,85,85 monster Angra Mantis 2133,15,1200000,600000,0
+1@mist,275,275,85,85 monster Parus 2134,10,1200000,600000,0
+1@mist,275,275,85,85 monster Little Fatum 2136,8,1200000,600000,0
+1@mist,275,275,85,85 monster Miming 2137,5,1200000,600000,0
+1@mist,325,210,25,150 boss_monster Lost Dragon 2131,1,1,7200000,600000,1
diff --git a/npc/re/mobs/fields/brasilis.txt b/npc/re/mobs/fields/brasilis.txt
index d0bc14591..82dc93441 100644
--- a/npc/re/mobs/fields/brasilis.txt
+++ b/npc/re/mobs/fields/brasilis.txt
@@ -9,7 +9,7 @@
//============================================================
//==================================================
-// bra_fild01
+// bra_fild01 - Brasilis Field
//==================================================
bra_fild01,0,0,0,0 monster Curupira 2074,50,5000,0,0
bra_fild01,0,0,0,0 monster Dokebi 1110,10,5000,0,0
diff --git a/npc/re/mobs/fields/comodo.txt b/npc/re/mobs/fields/comodo.txt
index eac8387ac..ae4ddedeb 100644
--- a/npc/re/mobs/fields/comodo.txt
+++ b/npc/re/mobs/fields/comodo.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Comodo Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.4
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.2 Official kRO 10.1 spawns [Playtester]
//= 1.3 More accurate spawns [Playtester]
@@ -57,6 +55,10 @@ cmd_fild04,0,0,0,0 monster Aster 1266,10,5000,0,0
//==================================================
// cmd_fild05 - Disabled on Renewal
//==================================================
+//cmd_fild05,63,158,10,10 monster Shining Plant 1083,1,1800000,900000,1
+//cmd_fild05,318,277,10,10 monster Yellow Plant 1081,3,1800000,900000,1
+//cmd_fild05,282,49,20,20 monster Yellow Plant 1081,3,1800000,900000,1
+//cmd_fild05,0,0,0,0 monster Green Plant 1080,5,1800000,900000,1
//==================================================
// cmd_fild06 - Fortress Saint Darmain (West)
@@ -92,4 +94,4 @@ cmd_fild09,0,0,0,0 monster Metaller 1058,145,5000,0,0
cmd_fild09,0,0,0,0 monster Deniro 1105,15,5000,0,0
cmd_fild09,0,0,0,0 monster Piere 1160,15,5000,0,0
cmd_fild09,0,0,0,0 monster Andre 1095,15,5000,0,0
-cmd_fild09,0,0,0,0 monster Ant Egg 1097,10,5000,0,0
+cmd_fild09,0,0,0,0 monster Ant Egg 1097,10,5000,0,0 \ No newline at end of file
diff --git a/npc/re/mobs/fields/dewata.txt b/npc/re/mobs/fields/dewata.txt
index da7ffa4fe..58118c4dc 100644
--- a/npc/re/mobs/fields/dewata.txt
+++ b/npc/re/mobs/fields/dewata.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script ========================================
+//===== Hercules Script ======================================
//= Dewata Field Monster Spawn Script
//===== By: ==================================================
//= Chilly
//===== Current Version: =====================================
//= 1.0
-//===== Compatible With: =====================================
-//= rAthena SVN
//===== Description: =========================================
//= Official kRO monster spawns
//===== Additional Comments: =================================
diff --git a/npc/re/mobs/fields/dicastes.txt b/npc/re/mobs/fields/dicastes.txt
index 82f71bd21..9d778c891 100644
--- a/npc/re/mobs/fields/dicastes.txt
+++ b/npc/re/mobs/fields/dicastes.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= El Dicastes Fields Monster Spawn Script
//===== By: ==================================================
//= Kisuka
//===== Current Version: =====================================
//= 1.0
-//===== Compatible With: =====================================
-//= rAthena SVN
//===== Additional Comments: =================================
//= 1.0 Official spawns from Aegis [Kisuka]
//============================================================
diff --git a/npc/re/mobs/fields/einbroch.txt b/npc/re/mobs/fields/einbroch.txt
index 518e1d218..f31395f3b 100644
--- a/npc/re/mobs/fields/einbroch.txt
+++ b/npc/re/mobs/fields/einbroch.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Einbroch Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
-//= 1.6
-//===== Compatible With: =====================================
-//= Any Athena Version
+//= 1.8
//===== Additional Comments: =================================
//= 1.1 correct spawn maps, but not yet exact amount of
//= monsters [Lupus]
@@ -21,6 +19,7 @@
//= 1.5 Adjusted some spawns according to official info [Playtester]
//= 1.6 More accurate spawns [Playtester]
//= 1.7 Updated to Renewal Spawns [Kisuka]
+//= 1.8 Updated Renewal Spawns [Streusel]
//============================================================
//==================================================
@@ -38,8 +37,8 @@ ein_fild03,0,0,0,0 monster Teddy Bear 1622,100,5000,0,0
ein_fild03,0,0,0,0 monster Venomous 1621,20,5000,0,0
ein_fild03,0,0,0,0 monster Noxious 1620,20,5000,0,0
ein_fild03,0,0,0,0 monster Pitman 1616,20,5000,0,0
-ein_fild03,0,0,0,0 monster Yellow Plant 1081,15,60000,30000,0
-ein_fild03,0,0,0,0 monster Green Plant 1080,15,60000,30000,0
+ein_fild03,0,0,0,0 monster Yellow Plant 1081,15,60000,30000,1
+ein_fild03,0,0,0,0 monster Green Plant 1080,15,60000,30000,1
//==================================================
// ein_fild04 - Einbroch Field
@@ -49,9 +48,9 @@ ein_fild04,0,0,0,0 monster Noxious 1620,30,5000,0,0
ein_fild04,0,0,0,0 monster Teddy Bear 1622,20,5000,0,0
ein_fild04,0,0,0,0 monster Demon Pungus 1378,15,5000,0,0
ein_fild04,0,0,0,0 monster Pitman 1616,10,5000,0,0
-ein_fild04,0,0,0,0 monster Red Plant 1078,10,60000,30000,0
-ein_fild04,0,0,0,0 monster Yellow Plant 1081,10,60000,30000,0
-ein_fild04,0,0,0,0 monster Green Plant 1080,10,60000,30000,0
+ein_fild04,0,0,0,0 monster Red Plant 1078,10,60000,30000,1
+ein_fild04,0,0,0,0 monster Yellow Plant 1081,10,60000,30000,1
+ein_fild04,0,0,0,0 monster Green Plant 1080,10,60000,30000,1
//==================================================
// ein_fild05 - Einbroch Field
@@ -67,8 +66,8 @@ ein_fild05,0,0,0,0 monster Pitman 1616,10,5000,0,0
//==================================================
ein_fild06,0,0,0,0 monster Holden 1628,100,5000,0,0
ein_fild06,0,0,0,0 monster Metaling 1613,30,5000,0,0
-ein_fild06,0,0,0,0 monster Red Plant 1078,10,120000,60000,0
-ein_fild06,0,0,0,0 monster Yellow Plant 1081,10,120000,60000,0
+ein_fild06,0,0,0,0 monster Red Plant 1078,10,120000,60000,1
+ein_fild06,0,0,0,0 monster Yellow Plant 1081,10,120000,60000,1
ein_fild06,0,0,0,0 monster Black Mushroom 1084,5,120000,60000,0
//==================================================
@@ -78,8 +77,8 @@ ein_fild07,0,0,0,0 monster Metaling 1613,90,5000,0,0
ein_fild07,0,0,0,0 monster Porcellio 1619,30,5000,0,0
ein_fild07,0,0,0,0 monster Holden 1628,10,5000,0,0
ein_fild07,0,0,0,0 monster Ungoliant 1618,1,86400000,86000000,0
-ein_fild07,0,0,0,0 monster Red Plant 1078,10,120000,60000,0
-ein_fild07,0,0,0,0 monster Yellow Plant 1081,10,120000,60000,0
+ein_fild07,0,0,0,0 monster Red Plant 1078,10,120000,60000,1
+ein_fild07,0,0,0,0 monster Yellow Plant 1081,10,120000,60000,1
ein_fild07,0,0,0,0 monster Red Mushroom 1085,10,120000,60000,0
//==================================================
@@ -87,8 +86,8 @@ ein_fild07,0,0,0,0 monster Red Mushroom 1085,10,120000,60000,0
//==================================================
ein_fild08,0,0,0,0 monster Metaling 1613,100,5000,0,0
ein_fild08,0,0,0,0 monster Porcellio 1619,30,5000,0,0
-ein_fild08,0,0,0,0 monster Red Plant 1078,10,120000,60000,0
-ein_fild08,0,0,0,0 monster Yellow Plant 1081,10,120000,60000,0
+ein_fild08,0,0,0,0 monster Red Plant 1078,10,120000,60000,1
+ein_fild08,0,0,0,0 monster Yellow Plant 1081,10,120000,60000,1
ein_fild08,0,0,0,0 monster Red Mushroom 1085,10,120000,60000,0
//==================================================
@@ -96,10 +95,13 @@ ein_fild08,0,0,0,0 monster Red Mushroom 1085,10,120000,60000,0
//==================================================
ein_fild09,0,0,0,0 monster Porcellio 1619,70,5000,0,0
ein_fild09,0,0,0,0 monster Metaling 1613,30,5000,0,0
-ein_fild09,0,0,0,0 monster Red Plant 1078,10,120000,60000,0
-ein_fild09,0,0,0,0 monster Yellow Plant 1081,10,120000,60000,0
+ein_fild09,0,0,0,0 monster Red Plant 1078,10,120000,60000,1
+ein_fild09,0,0,0,0 monster Yellow Plant 1081,10,120000,60000,1
ein_fild09,0,0,0,0 monster Red Mushroom 1085,10,120000,60000,0
//==================================================
// ein_fild10 - Disabled on Renewal
//==================================================
+//ein_fild10,0,0,0,0 monster Red Plant 1078,20,120000,60000,1
+//ein_fild10,0,0,0,0 monster Yellow Plant 1081,20,120000,60000,1
+//ein_fild10,0,0,0,0 monster Blue Plant 1079,20,600000,300000,1 \ No newline at end of file
diff --git a/npc/re/mobs/fields/geffen.txt b/npc/re/mobs/fields/geffen.txt
index 8daf2793d..35ff2e814 100644
--- a/npc/re/mobs/fields/geffen.txt
+++ b/npc/re/mobs/fields/geffen.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Geffen Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.6
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.2 Map names typos fix [Lupus]
//= 1.3 Official kRO 10.1 spawns + future changes [Playtester]
@@ -40,8 +38,8 @@ gef_fild02,0,0,0,0 monster Coco 1104,140,5000,0,0
gef_fild02,0,0,0,0 monster Poporing 1031,20,5000,0,0
gef_fild02,0,0,0,0 monster Horn 1128,20,5000,0,0
gef_fild02,0,0,0,0 monster Elder Willow 1033,20,5000,0,0
-gef_fild02,227,316,6,6 monster Green Plant 1080,8,360000,180000,1
gef_fild02,87,48,6,6 monster Red Mushroom 1085,5,360000,180000,1
+gef_fild02,227,316,6,6 monster Green Plant 1080,8,360000,180000,1
gef_fild02,215,209,2,1 monster Blue Plant 1079,2,360000,180000,1
gef_fild02,207,214,1,1 monster Blue Plant 1079,1,360000,180000,1
gef_fild02,220,214,1,1 monster Blue Plant 1079,1,360000,180000,1
@@ -199,4 +197,4 @@ gef_fild11,283,100,4,1 monster Black Mushroom 1084,3,360000,180000,1
//==================================================
// gef_fild14 - Disabled on Renewal
-//==================================================
+//================================================== \ No newline at end of file
diff --git a/npc/re/mobs/fields/gonryun.txt b/npc/re/mobs/fields/gonryun.txt
index 60ac58acf..290524caa 100644
--- a/npc/re/mobs/fields/gonryun.txt
+++ b/npc/re/mobs/fields/gonryun.txt
@@ -1,14 +1,13 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Gon Ryun Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
-//= 1.2
-//===== Compatible With: =====================================
-//= Any Athena Version
+//= 1.3
//===== Additional Comments: =================================
//= 1.1 Official kRO 10.1 spawns [Playtester]
//= 1.2 Updated to Renewal Spawns [Kisuka]
+//= 1.3 Updated Renewal Spawns [Streusel]
//============================================================
//==================================================
@@ -17,5 +16,5 @@
gon_fild01,0,0,0,0 monster Dumpling Child 1409,55,5000,0,0
gon_fild01,0,0,0,0 monster Baby Leopard 1415,40,5000,0,0
gon_fild01,0,0,0,0 monster Side Winder 1037,10,5000,0,0
-gon_fild01,0,0,0,0 monster Green Plant 1080,5,5000,0,0
-gon_fild01,0,0,0,0 monster Shining Plant 1083,1,5000,0,0
+gon_fild01,0,0,0,0 monster Green Plant 1080,5,10000,0,1
+gon_fild01,0,0,0,0 monster Shining Plant 1083,1,10000,0,1 \ No newline at end of file
diff --git a/npc/re/mobs/fields/hugel.txt b/npc/re/mobs/fields/hugel.txt
index 14b74aa17..852d35e4e 100644
--- a/npc/re/mobs/fields/hugel.txt
+++ b/npc/re/mobs/fields/hugel.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Hugel Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
-//= 1.4
-//===== Compatible With: =====================================
-//= Any Athena Version
+//= 1.5
//===== Additional Comments: =================================
//= Spawns for hu_fild05 and hu_fild04, numbers may not be correct [MasterOfMuppets]
//= 0.2 Fixed Petit ID
@@ -18,6 +16,7 @@
//= 1.2 Some 11.1 spawn updates [Playtester]
//= 1.3 More accurate spawns [Playtester]
//= 1.4 Updated to Renewal Spawns [Kisuka]
+//= 1.5 Updated Renewal Spawns [Streusel]
//============================================================
//==================================================
@@ -48,10 +47,10 @@ hu_fild04,0,0,0,0 monster Novus 1718,100,5000,0,0
hu_fild04,0,0,0,0 monster Novus 1715,30,5000,0,0
hu_fild04,0,0,0,0 monster Geographer 1368,30,5000,0,0
hu_fild04,0,0,0,0 monster Dragon Egg 1721,20,5000,0,0
-hu_fild04,0,0,0,0 monster Green Plant 1080,10,0,0,0
-hu_fild04,0,0,0,0 monster Yellow Plant 1081,10,0,0,0
-hu_fild04,206,210,30,18 monster Blue Plant 1079,4,120000,600000,0
-hu_fild04,206,120,10,10 monster Blue Plant 1079,2,120000,600000,0
+hu_fild04,0,0,0,0 monster Green Plant 1080,10,10000,0,1
+hu_fild04,0,0,0,0 monster Yellow Plant 1081,10,10000,0,1
+hu_fild04,206,210,30,18 monster Blue Plant 1079,4,120000,600000,1
+hu_fild04,206,120,10,10 monster Blue Plant 1079,2,120000,600000,1
//==================================================
// hu_fild05 - The Abyss Lake
@@ -66,9 +65,10 @@ hu_fild05,0,0,0,0 monster Dragon Egg 1721,20,5000,0,0
hu_fild06,0,0,0,0 monster Shellfish 1074,50,5000,0,0
hu_fild06,0,0,0,0 monster Crab 1073,20,5000,0,0
hu_fild06,0,0,0,0 monster Aster 1266,20,5000,0,0
-hu_fild06,234,251,14,120 monster Green Plant 1080,10,600000,0,0
-hu_fild06,234,251,14,120 monster Yellow Plant 1081,10,600000,0,0
+hu_fild06,234,251,14,120 monster Green Plant 1080,10,600000,0,1
+hu_fild06,234,251,14,120 monster Yellow Plant 1081,10,600000,0,1
//==================================================
// hu_fild07 - Disabled on Renewal
//==================================================
+//hu_fild07,0,0,0,0 monster Yellow Plant 1081,20,10000,0,1 \ No newline at end of file
diff --git a/npc/re/mobs/fields/jawaii.txt b/npc/re/mobs/fields/jawaii.txt
index b34fa815b..14490c698 100644
--- a/npc/re/mobs/fields/jawaii.txt
+++ b/npc/re/mobs/fields/jawaii.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Jawaii the honeymoon Island Monster Spawn Script
//===== By: ==================================================
//= MasterOfMuppets (1.0)
//===== Current Version: =====================================
//= 1.0
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.0 First version [MasterOfMuppets]
//============================================================
@@ -26,4 +24,4 @@ jawaii_in,128,121,1,4 monster Red Mushroom 1085,1,3000000,1200000,0
jawaii_in,124,76,1,1 monster Black Mushroom 1084,1,3600000,1200000,0
jawaii_in,72,74,5,1 monster Black Mushroom 1084,2,3000000,1200000,0
jawaii_in,73,117,4,4 monster Thief Bug Egg 1048,1,5400000,3000000,0
-jawaii_in,83,117,5,5 monster Thief Bug Egg 1048,1,4800000,2400000,0
+jawaii_in,83,117,5,5 monster Thief Bug Egg 1048,1,4800000,2400000,0 \ No newline at end of file
diff --git a/npc/re/mobs/fields/lighthalzen.txt b/npc/re/mobs/fields/lighthalzen.txt
index 2a8867b13..8a9dbead3 100644
--- a/npc/re/mobs/fields/lighthalzen.txt
+++ b/npc/re/mobs/fields/lighthalzen.txt
@@ -21,9 +21,9 @@
lhz_fild01,0,0,0,0 monster Rafflesia 1162,130,5000,0,0
lhz_fild01,0,0,0,0 monster Stem Worm 1215,35,5000,0,0
lhz_fild01,0,0,0,0 monster Metaling 1613,35,5000,0,0
-lhz_fild01,0,0,0,0 monster Red Plant 1078,10,60000,30000,0
-lhz_fild01,0,0,0,0 monster Yellow Plant 1081,10,60000,30000,0
-lhz_fild01,0,0,0,0 monster Green Plant 1080,10,60000,30000,0
+lhz_fild01,0,0,0,0 monster Red Plant 1078,10,60000,30000,1
+lhz_fild01,0,0,0,0 monster Yellow Plant 1081,10,60000,30000,1
+lhz_fild01,0,0,0,0 monster Green Plant 1080,10,60000,30000,1
//==================================================
// lhz_fild02 - Lighthalzen Field (Grim Reaper's Valley)
@@ -33,8 +33,8 @@ lhz_fild02,0,0,0,0 monster Breeze 1692,40,5000,0,0
lhz_fild02,0,0,0,0 monster Rafflesia 1162,20,5000,0,0
lhz_fild02,0,0,0,0 monster Metaling 1613,20,5000,0,0
lhz_fild02,0,0,0,0 monster Demon Pungus 1378,15,5000,0,0
-lhz_fild02,0,0,0,0 monster Yellow Plant 1081,15,60000,30000,0
-lhz_fild02,0,0,0,0 monster Green Plant 1080,15,60000,30000,0
+lhz_fild02,0,0,0,0 monster Yellow Plant 1081,15,60000,30000,1
+lhz_fild02,0,0,0,0 monster Green Plant 1080,15,60000,30000,1
//==================================================
// lhz_fild03 - Lighthalzen Field
@@ -44,5 +44,5 @@ lhz_fild03,0,0,0,0 monster Stem Worm 1215,20,5000,0,0
lhz_fild03,0,0,0,0 monster Rafflesia 1162,20,5000,0,0
lhz_fild03,0,0,0,0 monster Metaling 1613,20,5000,0,0
lhz_fild03,0,0,0,0 monster Demon Pungus 1378,15,5000,0,0
-lhz_fild03,0,0,0,0 monster Red Plant 1078,10,60000,30000,0
-lhz_fild03,0,0,0,0 monster Green Plant 1080,10,60000,30000,0
+lhz_fild03,0,0,0,0 monster Red Plant 1078,10,60000,30000,1
+lhz_fild03,0,0,0,0 monster Green Plant 1080,10,60000,30000,0 \ No newline at end of file
diff --git a/npc/re/mobs/fields/louyang.txt b/npc/re/mobs/fields/louyang.txt
index fd645faf3..586b49960 100644
--- a/npc/re/mobs/fields/louyang.txt
+++ b/npc/re/mobs/fields/louyang.txt
@@ -1,15 +1,14 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Louyang Fields Monster Spawn Script
//===== By: ==================================================
//= Evera/Lorri
//===== Current Version: =====================================
-//= 1.3
-//===== Compatible With: =====================================
-//= Any Athena Version
+//= 1.4
//===== Additional Comments: =================================
//= 1.1 updated by MasterOfMuppets
//= 1.2 Official kRO 10.1 spawns [Playtester]
//= 1.3 Updated to Renewal Spawns [Kisuka]
+//= 1.4 Updated Renewal Spawns [Streusel]
//============================================================
//==================================================
@@ -19,4 +18,4 @@ lou_fild01,0,0,0,0 monster Mi Gao 1516,40,5000,0,0
lou_fild01,0,0,0,0 monster Mantis 1139,19,5000,0,0
lou_fild01,0,0,0,0 monster Geographer 1368,19,5000,0,0
lou_fild01,0,0,0,0 monster Black Mushroom 1084,5,5000,0,0
-lou_fild01,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0
+lou_fild01,0,0,0,0 monster Yellow Plant 1081,10,10000,0,1 \ No newline at end of file
diff --git a/npc/re/mobs/fields/lutie.txt b/npc/re/mobs/fields/lutie.txt
index 19583ffe4..99db7de31 100644
--- a/npc/re/mobs/fields/lutie.txt
+++ b/npc/re/mobs/fields/lutie.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Lutie Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.4
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.1 added Garm Baby according to May 10 patch
//= 1.2 Official kRO 10.1 spawns [Playtester]
diff --git a/npc/re/mobs/fields/malaya.txt b/npc/re/mobs/fields/malaya.txt
index 908bf16fd..2cf027f44 100644
--- a/npc/re/mobs/fields/malaya.txt
+++ b/npc/re/mobs/fields/malaya.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script ========================================
+//===== Hercules Script ======================================
//= Malaya Port Field Monster Spawn Script
//===== By: ==================================================
//= Chilly
//===== Current Version: =====================================
//= 1.0
-//===== Compatible With: =====================================
-//= rAthena SVN
//===== Description: =========================================
//= Official kRO monster spawns
//===== Additional Comments: =================================
@@ -15,15 +13,15 @@
//==================================================
// ma_fild01 - Barrio Maligawa
//==================================================
-ma_fild01,0,0,0,0 monster Tikbalang 2313,70,0,0,0
-ma_fild01,0,0,0,0 monster Tiyanak 2314,50,0,0,0
-ma_fild01,0,0,0,0 monster Jejeling 2316,30,0,0,0
+ma_fild01,0,0,0,0 monster Tikbalang 2313,50,0,0,0
+ma_fild01,0,0,0,0 monster Tiyanak 2314,40,0,0,0
+ma_fild01,0,0,0,0 monster Jejeling 2316,20,0,0,0
//==================================================
// ma_fild02 - Malaya Forest
//==================================================
-ma_fild02,0,0,0,0 monster Bungisngis 2309,70,0,0,0
-ma_fild02,0,0,0,0 monster Engkanto 2310,50,0,0,0
+ma_fild02,0,0,0,0 monster Bungisngis 2309,40,0,0,0
+ma_fild02,0,0,0,0 monster Engkanto 2310,15,0,0,0
ma_fild02,0,0,0,0 monster Mangkukulam 2312,20,0,0,0
ma_fild02,0,0,0,0 monster Jejeling 2316,10,0,0,0
-ma_fild02,0,0,0,0 monster Wakwak 2315,10,0,0,0
+ma_fild02,0,0,0,0 monster Wakwak 2315,25,0,0,0
diff --git a/npc/re/mobs/fields/manuk.txt b/npc/re/mobs/fields/manuk.txt
index 92f9866a1..e27d7f6c6 100644
--- a/npc/re/mobs/fields/manuk.txt
+++ b/npc/re/mobs/fields/manuk.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Manuk Fields Monster Spawn Script
//===== By: ==================================================
//= alexx, MaC
//===== Current Version: =====================================
//= 1.1a
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.0 Official spawn ammounts from Aegis script [alexx]
//= 1.1 Added 13.2 mob spawn update [scriptor]
@@ -33,4 +31,4 @@ man_fild02,0,0,0,0 monster Tatacho 1986,25,5000,0,0
man_fild03,0,0,0,0 monster Hillslion 1989,25,5000,0,0
man_fild03,0,0,0,0 monster Tatacho 1986,25,5000,0,0
man_fild03,0,0,0,0 monster Centipede 1987,25,5000,0,0
-man_fild03,0,0,0,0 monster Hardrock Mammoth 1990,1,14400000,0,0
+man_fild03,0,0,0,0 monster Hardrock Mammoth 1990,1,14400000,0,0 \ No newline at end of file
diff --git a/npc/re/mobs/fields/mjolnir.txt b/npc/re/mobs/fields/mjolnir.txt
index e2483c2a8..58fba9422 100644
--- a/npc/re/mobs/fields/mjolnir.txt
+++ b/npc/re/mobs/fields/mjolnir.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Mt. Mjolnir Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.3
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.2 Official kRO 10.1 spawns [Playtester]
//= 1.3 Updated to renewal spawns. [L0ne_W0lf]
@@ -226,4 +224,4 @@ mjolnir_11,295,271,0,0 monster Green Plant 1080,1,180000,90000,1
//==================================================
mjolnir_12,0,0,0,0 monster Dustiness 1114,130,5000,0,0
mjolnir_12,0,0,0,0 monster Hunter Fly 1035,35,5000,0,0
-mjolnir_12,0,0,0,0 monster Mantis 1139,35,5000,0,0
+mjolnir_12,0,0,0,0 monster Mantis 1139,35,5000,0,0 \ No newline at end of file
diff --git a/npc/re/mobs/fields/morocc.txt b/npc/re/mobs/fields/morocc.txt
index 774e342da..3e71b0846 100644
--- a/npc/re/mobs/fields/morocc.txt
+++ b/npc/re/mobs/fields/morocc.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Morocc Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.8
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.1 Official kRO 10.1 spawns [Playtester]
//= 1.2 More accurate spawns [Playtester]
@@ -216,4 +214,4 @@ moc_fild22,0,0,0,0 monster Incarnation of Morroc 1918,60,30000,0,0
moc_fild22,0,0,0,0 monster Incarnation of Morroc 1919,60,30000,0,0
moc_fild22,0,0,0,0 monster Incarnation of Morroc 1920,60,30000,0,0
moc_fild22,0,0,0,0 monster Incarnation of Morroc 1921,25,10000,0,0
-moc_fild22,0,0,0,0 boss_monster Wounded Morroc 1917,1,43200000,600000,0
+moc_fild22,0,0,0,0 boss_monster Wounded Morroc 1917,1,43200000,600000,0 \ No newline at end of file
diff --git a/npc/re/mobs/fields/moscovia.txt b/npc/re/mobs/fields/moscovia.txt
index 1edaf0464..7ffbd4c28 100644
--- a/npc/re/mobs/fields/moscovia.txt
+++ b/npc/re/mobs/fields/moscovia.txt
@@ -1,14 +1,13 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Moscovia Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
-//= 1.1
-//===== Compatible With: =====================================
-//= Any Athena Version
+//= 1.2
//===== Additional Comments: =================================
//= 1.0 Added spawns [Playtester]
//= 1.1 Updated to Renewal Spawns [Kisuka]
+//= 1.2 Updated Renewal Spawns. [Streusel]
//============================================================
//==================================================
@@ -18,5 +17,5 @@ mosk_fild02,0,0,0,0 monster Side Winder 1037,40,5000,0,0
mosk_fild02,0,0,0,0 monster Argiope 1099,30,5000,0,0
mosk_fild02,0,0,0,0 monster Mantis 1139,10,5000,0,0
mosk_fild02,0,0,0,0 monster Geographer 1368,5,5000,0,0
-mosk_fild02,0,0,0,0 monster Yellow Plant 1081,5,5000,0,0
-mosk_fild02,0,0,0,0 monster White Plant 1082,5,10000,0,0
+mosk_fild02,0,0,0,0 monster Yellow Plant 1081,5,10000,0,1
+mosk_fild02,0,0,0,0 monster White Plant 1082,5,10000,0,1 \ No newline at end of file
diff --git a/npc/re/mobs/fields/niflheim.txt b/npc/re/mobs/fields/niflheim.txt
index 1c8c2340e..2446ec0e0 100644
--- a/npc/re/mobs/fields/niflheim.txt
+++ b/npc/re/mobs/fields/niflheim.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Niflheim Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.7
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.2 updated [shadow],
//= 1.3 many changes and wrong LOD ID 5373 -> 1373 [Lupus]
diff --git a/npc/re/mobs/fields/payon.txt b/npc/re/mobs/fields/payon.txt
index 0f97f0265..9736fb31b 100644
--- a/npc/re/mobs/fields/payon.txt
+++ b/npc/re/mobs/fields/payon.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Payon Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
//= 1.5
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.1 Official kRO 10.1 spawns [Playtester]
//= 1.2 Some 11.1 spawn changes [Playtester]
@@ -43,8 +41,8 @@ pay_fild01,0,0,0,0 monster Green Plant 1080,5,180000,90000,1
pay_fild02,0,0,0,0 monster Boa 1025,140,5000,0,0
pay_fild02,0,0,0,0 monster Wormtail 1024,30,5000,0,0
pay_fild02,0,0,0,0 monster Spore 1014,30,5000,0,0
-pay_fild02,105,256,10,10 monster Green Plant 1080,4,360000,180000,1
pay_fild02,105,256,10,10 monster Red Mushroom 1085,4,360000,180000,1
+pay_fild02,105,256,10,10 monster Green Plant 1080,4,360000,180000,1
//==================================================
// pay_fild03 - Payon Forest
@@ -73,6 +71,8 @@ pay_fild04,254,193,10,10 monster Green Plant 1080,5,360000,180000,1
//==================================================
// pay_fild05 - Disabled on Renewal
//==================================================
+//pay_fild05,95,147,5,5 monster Green Plant 1080,4,900000,450000,1
+//pay_fild05,86,90,5,5 monster Green Plant 1080,4,900000,450000,1
//==================================================
// pay_fild06 - Payon Forest
@@ -108,7 +108,7 @@ pay_fild08,143,156,40,40 monster Shining Plant 1083,1,3600000,1800000,1
pay_fild09,0,0,0,0 monster Elder Willow 1033,140,5000,0,0
pay_fild09,0,0,0,0 monster Horn 1128,30,5000,0,0
pay_fild09,0,0,0,0 monster Coco 1104,30,5000,0,0
-pay_fild09,198,217,30,30 monster Green Plant 1080,10,360000,180000,0
+pay_fild09,198,217,30,30 monster Green Plant 1080,10,360000,180000,1
pay_fild09,198,217,30,30 monster Shining Plant 1083,1,1800000,900000,1
//==================================================
@@ -127,4 +127,4 @@ pay_fild10,66,332,10,10 monster Blue Plant 1079,1,360000,180000,1
//==================================================
// pay_fild11 - Disabled on Renewal
-//==================================================
+//================================================== \ No newline at end of file
diff --git a/npc/re/mobs/fields/prontera.txt b/npc/re/mobs/fields/prontera.txt
index c2c2d7852..5eec3c925 100644
--- a/npc/re/mobs/fields/prontera.txt
+++ b/npc/re/mobs/fields/prontera.txt
@@ -1,16 +1,15 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Prontera Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
-//= 1.5
-//===== Compatible With: =====================================
-//= Any Athena Version
+//= 1.6
//===== Additional Comments: =================================
//= 1.2 fixed some map name typos [Lupus]
//= 1.3 Official kRO 10.1 spawns [Playtester]
//= 1.4 More accurate spawns [Playtester]
//= 1.5 Updated to Renewal spawns.
+//= 1.6 Updated Renewal Spawns [Streusel]
//============================================================
//==================================================
@@ -51,7 +50,7 @@ prt_fild03,0,0,0,0 monster Choco 1214,1,5000,0,0
prt_fild03,296,58,15,15 monster Green Plant 1080,5,180000,90000,1
prt_fild03,296,58,15,15 monster Blue Plant 1079,2,900000,450000,1
prt_fild03,307,75,5,5 monster Green Plant 1080,5,360000,180000,1
-prt_fild03,0,0,0,0 monster Green Plant 1080,5,360000,180000,1
+prt_fild03,147,219,5,5 monster Green Plant 1080,5,360000,180000,1
prt_fild03,148,107,5,5 monster Green Plant 1080,5,360000,180000,1
//==================================================
@@ -77,7 +76,7 @@ prt_fild05,208,37,10,10 monster Blue Plant 1079,1,900000,450000,1
prt_fild06,0,0,0,0 monster Fabre 1007,140,5000,0,0
prt_fild06,0,0,0,0 monster Poring 1002,30,5000,0,0
prt_fild06,0,0,0,0 monster Lunatic 1063,30,5000,0,0
-//prt_fild06,222,30,40,10 monster Green Plant 1080,15,900000,450000,1 // Commented the Line since those Plants can't spawn anyway. Maybe Gravity will fix it someday... [Masao]
+prt_fild06,222,30,40,10 monster Green Plant 1080,15,900000,450000,1
//==================================================
// prt_fild07 - Prontera Field
@@ -123,4 +122,4 @@ prt_fild11,0,0,0,0 monster Goblin 1125,10,5000,0,0
prt_fild11,0,0,0,0 monster Goblin 1123,10,5000,0,0
prt_fild11,0,0,0,0 monster Goblin 1122,10,5000,0,0
prt_fild11,0,0,0,0 monster Panzer Goblin 1308,1,1800000,1200000,0
-prt_fild11,0,0,0,0 monster Red Mushroom 1085,10,180000,90000,1
+prt_fild11,0,0,0,0 monster Red Mushroom 1085,10,180000,90000,1 \ No newline at end of file
diff --git a/npc/re/mobs/fields/rachel.txt b/npc/re/mobs/fields/rachel.txt
index 92708aa5e..68e34c4c5 100644
--- a/npc/re/mobs/fields/rachel.txt
+++ b/npc/re/mobs/fields/rachel.txt
@@ -1,17 +1,16 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Rachel Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
-//= 1.4
-//===== Compatible With: =====================================
-//= Any Athena Version
+//= 1.5
//===== Additional Comments: =================================
//= 1.0 Created this [Sepheus]
//= 1.1 Updated [Playtester]
//= 1.2 More accurate spawns [Playtester]
//= 1.3 Corrected MVP spawn variance. [L0ne_W0lf]
//= 1.4 Updated to Renewal Spawns [Kisuka]
+//= 1.5 Updated Renewal Spawns [Streusel]
//============================================================
//==================================================
@@ -86,6 +85,8 @@ ra_fild08,0,0,0,0 monster Anopheles 1627,10,5000,0,0
//==================================================
// ra_fild11 - Disabled on Renewal
//==================================================
+//ra_fild11,0,0,0,0 monster Yellow Plant 1081,15,10000,0,1
+//ra_fild11,0,0,0,0 monster Red Plant 1078,5,10000,0,1
//==================================================
// ra_fild12 - The Plain of Ida
@@ -93,9 +94,9 @@ ra_fild08,0,0,0,0 monster Anopheles 1627,10,5000,0,0
ra_fild12,0,0,0,0 monster Roween 1782,130,5000,0,0
ra_fild12,0,0,0,0 monster Anopheles 1627,30,5000,0,0
ra_fild12,0,0,0,0 monster Baby Desert Wolf 1107,15,5000,0,0
-ra_fild12,0,0,0,0 monster Yellow Plant 1081,15,5000,0,1
-ra_fild12,0,0,0,0 monster Red Plant 1078,5,5000,0,1
+ra_fild12,0,0,0,0 monster Yellow Plant 1081,15,10000,0,1
+ra_fild12,0,0,0,0 monster Red Plant 1078,5,10000,0,1
//==================================================
// ra_fild13 - Disabled on Renewal
-//==================================================
+//================================================== \ No newline at end of file
diff --git a/npc/re/mobs/fields/splendide.txt b/npc/re/mobs/fields/splendide.txt
index c9f41b1e7..a9b5c8a1a 100644
--- a/npc/re/mobs/fields/splendide.txt
+++ b/npc/re/mobs/fields/splendide.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Splendide Fields Monster Spawn Script
//===== By: ==================================================
//= alexx, MaC
//===== Current Version: =====================================
//= 1.1
-//===== Compatible With: =====================================
-//= Any Athena Version
//===== Additional Comments: =================================
//= 1.0 Official spawn ammounts from Aegis script [alexx]
//= 1.1 Added 13.2 mob spawn update [scriptor]
@@ -22,6 +20,8 @@ spl_fild01,0,0,0,0 monster Cornus 1992,25,5000,0,0
// spl_fild02 - Splendide Field
//==================================================
spl_fild02,0,0,0,0 monster Pinguicula 1995,75,5000,0,0
+spl_fild02,0,0,0,0 monster Bradium Golem 2024,20,5000,0,0
+spl_fild02,0,0,0,0 monster Naga 1993,20,5000,0,0
spl_fild02,0,0,0,0 monster Luciola Vespa 1994,15,5000,0,0
//==================================================
@@ -30,4 +30,4 @@ spl_fild02,0,0,0,0 monster Luciola Vespa 1994,15,5000,0,0
spl_fild03,0,0,0,0 monster Luciola Vespa 1994,35,5000,0,0
spl_fild03,0,0,0,0 monster Cornus 1992,25,5000,0,0
spl_fild03,0,0,0,0 monster Naga 1993,20,5000,0,0
-spl_fild03,0,0,0,0 monster Tendrilion 1991,1,3600000,0,0
+spl_fild03,0,0,0,0 monster Tendrilion 1991,1,3600000,0,0 \ No newline at end of file
diff --git a/npc/re/mobs/fields/umbala.txt b/npc/re/mobs/fields/umbala.txt
index 85c4dafb8..e3bd52469 100644
--- a/npc/re/mobs/fields/umbala.txt
+++ b/npc/re/mobs/fields/umbala.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Umbala Fields Monster Spawn Script
//===== By: ==================================================
//= Darkchild (1.0)
//===== Current Version: =====================================
//= 1.5
-//===== Compatible With: =====================================
-//= Any rAthena Version; RO Ep6+
//===== Additional Comments: =================================
//= 1.3 Official kRO 10.1 spawns [Playtester]
//= 1.4 More accurate spawns [Playtester]
@@ -23,6 +21,7 @@ um_fild01,0,0,0,0 monster Wooden Golem 1497,10,5000,0,0
um_fild01,0,0,0,0 monster Green Plant 1080,10,180000,90000,1
um_fild01,0,0,0,0 monster Yellow Plant 1081,10,180000,90000,1
um_fild01,0,0,0,0 monster Shining Plant 1083,5,180000,90000,1
+um_fild01,0,0,0,0 monster Shining Plant 1083,1,180000,90000,1
//==================================================
// um_fild02 - Hoomga Forest
@@ -55,5 +54,4 @@ um_fild04,0,0,0,0 monster Wootan Fighter 1499,5,5000,0,0
um_fild04,0,0,0,0 monster Wooden Golem 1497,10,5000,0,0
um_fild04,0,0,0,0 monster Choco 1214,2,5000,0,0
um_fild04,0,0,0,0 monster Red Plant 1078,5,180000,90000,1
-um_fild04,0,0,0,0 monster Yellow Plant 1081,5,180000,90000,1
-um_fild01,0,0,0,0 monster Shining Plant 1083,1,180000,90000,1
+um_fild04,0,0,0,0 monster Yellow Plant 1081,5,180000,90000,1 \ No newline at end of file
diff --git a/npc/re/mobs/fields/veins.txt b/npc/re/mobs/fields/veins.txt
index 0ab4ecf58..ca8cc431e 100644
--- a/npc/re/mobs/fields/veins.txt
+++ b/npc/re/mobs/fields/veins.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Veins Fields Monster Spawn Script
//===== By: ==================================================
//= $ephiroth
//===== Current Version: =====================================
-//= 1.8
-//===== Compatible With: =====================================
-//= Any Athena Version
+//= 1.9
//===== Additional Comments: =================================
//= 1.0 Temp. monster spawn in Veins Field. [$ephiroth]
//= 1.1 Updated monster spawn based on kRO website. [$ephiroth]
@@ -16,6 +14,7 @@
//= 1.6 Even more accurate spawns [Playtester]
//= 1.7 Corrected MVP spawn variance. [Gepard]
//= 1.8 Updated to Renewal Spawns. [Kisuka]
+//= 1.9 Updated Renewal Spawns. [Streusel]
//============================================================
//==================================================
@@ -26,10 +25,10 @@ ve_fild01,0,0,0,0 monster Stapo 1784,20,5000,0,0
ve_fild01,0,0,0,0 monster Drosera 1781,20,5000,0,0
ve_fild01,0,0,0,0 monster Muscipular 1780,20,5000,0,0
ve_fild01,0,0,0,0 boss_monster Atroce 1785,1,10800000,600000,0
-ve_fild01,0,0,0,0 monster Red Plant 1078,10,5000,0,0
-ve_fild01,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0
-ve_fild01,270,80,20,7 monster Blue Plant 1079,4,840000,0,0
-ve_fild01,270,80,20,7 monster Shining Plant 1083,1,960000,0,0
+ve_fild01,0,0,0,0 monster Red Plant 1078,10,10000,0,1
+ve_fild01,0,0,0,0 monster Yellow Plant 1081,10,10000,0,1
+ve_fild01,270,80,20,7 monster Blue Plant 1079,4,840000,0,1
+ve_fild01,270,80,20,7 monster Shining Plant 1083,1,960000,0,1
//==================================================
// ve_fild02 - Veins Field
@@ -38,8 +37,8 @@ ve_fild02,0,0,0,0 monster Drosera 1781,130,5000,0,0
ve_fild02,0,0,0,0 monster Muscipular 1780,20,5000,0,0
ve_fild02,0,0,0,0 monster Galion 1783,10,5000,0,0
ve_fild02,120,55,50,50 boss_monster Atroce 1785,1,21600000,600000,0
-ve_fild02,0,0,0,0 monster Red Plant 1078,10,5000,0,0
-ve_fild02,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0
+ve_fild02,0,0,0,0 monster Red Plant 1078,10,10000,0,1
+ve_fild02,0,0,0,0 monster Yellow Plant 1081,10,10000,0,1
//==================================================
// ve_fild03 - Veins Field
@@ -47,8 +46,8 @@ ve_fild02,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0
ve_fild03,0,0,0,0 monster Magmaring 1836,130,5000,0,0
ve_fild03,0,0,0,0 monster Muscipular 1780,35,5000,0,0
ve_fild03,0,0,0,0 monster Drosera 1781,35,5000,0,0
-ve_fild03,200,212,114,60 monster Red Plant 1078,10,0,0,0
-ve_fild03,0,0,0,0 monster Yellow Plant 1081,10,0,0,0
+ve_fild03,200,212,114,60 monster Red Plant 1078,10,10000,0,1
+ve_fild03,0,0,0,0 monster Yellow Plant 1081,10,10000,0,1
//==================================================
// ve_fild04 - Veins Field
@@ -56,16 +55,19 @@ ve_fild03,0,0,0,0 monster Yellow Plant 1081,10,0,0,0
ve_fild04,0,0,0,0 monster Muscipular 1780,100,5000,0,0
ve_fild04,0,0,0,0 monster Drosera 1781,50,5000,0,0
ve_fild04,0,0,0,0 monster Galion 1783,20,5000,0,0
-ve_fild04,288,273,4,4 monster Blue Plant 1079,3,660000,0,0
+ve_fild04,0,0,0,0 monster Yellow Plant 1081,10,10000,0,1
+ve_fild04,288,273,4,4 monster Blue Plant 1079,3,660000,0,1
//==================================================
// ve_fild05 - Disabled on Renewal
//==================================================
+//ve_fild05,152,139,15,17 monster White Plant 1082,5,1800000,0,1
+//ve_fild05,152,139,5,5 monster Shining Plant 1083,1,2400000,0,1
//==================================================
// ve_fild06 - Veins Field - No spawns on Renewal
//==================================================
-ve_fild06,0,0,0,0 monster Shining Plant 1083,1,5000,0,0
+//ve_fild06,0,0,0,0 monster Shining Plant 1083,1,1020000,0,1
//==================================================
// ve_fild07 - Veins Field
@@ -73,4 +75,4 @@ ve_fild06,0,0,0,0 monster Shining Plant 1083,1,5000,0,0
ve_fild07,0,0,0,0 monster Stapo 1784,100,5000,0,0
ve_fild07,0,0,0,0 monster Drosera 1781,50,5000,0,0
ve_fild07,0,0,0,0 monster Muscipular 1780,30,5000,0,0
-ve_fild07,0,0,0,0 monster White Plant 1082,10,600000,0,0
+ve_fild07,0,0,0,0 monster White Plant 1082,10,600000,0,1 \ No newline at end of file
diff --git a/npc/re/mobs/fields/yuno.txt b/npc/re/mobs/fields/yuno.txt
index b5ea8aea2..13f1ecb63 100644
--- a/npc/re/mobs/fields/yuno.txt
+++ b/npc/re/mobs/fields/yuno.txt
@@ -1,11 +1,9 @@
-//===== rAthena Script =======================================
+//===== Hercules Script ======================================
//= Yuno Fields Monster Spawn Script
//===== By: ==================================================
//= Athena (1.0)
//===== Current Version: =====================================
-//= 2.0
-//===== Compatible With: =====================================
-//= Any Athena Version
+//= 2.1
//===== Additional Comments: =================================
//= 1.1 fixed tabs, names [Lupus]
//= 1.2 New/Better Spawn [Muad_Dib]
@@ -21,6 +19,7 @@
//= 1.8 Added kRO 10.1 spawns where they fit [Playtester]
//= 1.9 More accurate spawns [Playtester]
//= 2.0 Updated spawns to renewal. [L0ne_W0lf]
+//= 2.1 Updated Renewal Spawns. [Streusel]
//============================================================
//==================================================
@@ -77,15 +76,20 @@ yuno_fild04,0,0,0,0 monster Green Plant 1080,10,1800000,900000,1
//==================================================
// yuno_fild05 - Disabled on Renewal
//==================================================
+//yuno_fild05,0,0,0,0 monster Red Plant 1078,10,180000,90000,1
+//yuno_fild05,0,0,0,0 monster Green Plant 1080,10,180000,90000,1
+//yuno_fild05,0,0,0,0 monster Yellow Plant 1081,10,180000,90000,1
+//yuno_fild05,176,202,8,8 monster Blue Plant 1079,2,180000,90000,1
+//yuno_fild05,300,280,5,5 monster Blue Plant 1079,2,180000,90000,1
//==================================================
// yuno_fild06 - El Mes Plateau
//==================================================
yuno_fild06,0,0,0,0 monster Sleeper 1386,80,5000,0,0
yuno_fild06,0,0,0,0 monster Geographer 1368,20,5000,0,0
-yuno_fild06,0,0,0,0 monster Red Plant 1078,10,5000,0,0
-yuno_fild06,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0
-yuno_fild06,0,0,0,0 monster Green Plant 1080,10,5000,0,0
+yuno_fild06,0,0,0,0 monster Red Plant 1078,10,10000,0,1
+yuno_fild06,0,0,0,0 monster Yellow Plant 1081,10,10000,0,1
+yuno_fild06,0,0,0,0 monster Green Plant 1080,10,10000,0,1
//==================================================
// yuno_fild07 - El Mes Gorge (Valley of Abyss)
@@ -134,4 +138,4 @@ yuno_fild11,0,0,0,0 monster Yellow Plant 1081,10,180000,90000,1
// yuno_fild12 - Border Checkpoint
//==================================================
yuno_fild12,0,0,0,0 monster Geographer 1368,60,5000,0,0
-yuno_fild12,0,0,0,0 monster Mantis 1139,30,5000,0,0
+yuno_fild12,0,0,0,0 monster Mantis 1139,30,5000,0,0 \ No newline at end of file
diff --git a/npc/warps/pvp.txt b/npc/warps/pvp.txt
index da82d6d09..e9440aeb9 100644
--- a/npc/warps/pvp.txt
+++ b/npc/warps/pvp.txt
@@ -40,30 +40,30 @@ ordeal_1-2,153,180,0 warp ord12-5 1,1,ordeal_1-2,144,284
ordeal_1-2,172,135,0 warp ord12-6 1,1,ordeal_1-2,284,24
ordeal_1-2,172,172,0 warp ord12-7 1,1,ordeal_1-2,284,284
ordeal_1-2,180,154,0 warp ord12-8 1,1,ordeal_1-2,284,164
-ordeal_1-3,100,150,0 warp ord13-1 1,1,ordeal_1-3,128,150
-ordeal_1-3,114,183,0 warp ord13-2 1,1,ordeal_1-3,135,163
-ordeal_1-3,115,115,0 warp ord13-3 1,1,ordeal_1-3,136,136
-ordeal_1-3,123,150,0 warp ord13-4 1,1,ordeal_1-3,95,150
-ordeal_1-3,130,168,0 warp ord13-5 1,1,ordeal_1-3,109,188
-ordeal_1-3,131,131,0 warp ord13-6 1,1,ordeal_1-3,110,110
-ordeal_1-3,148,176,0 warp ord13-7 1,1,ordeal_1-3,149,204
-ordeal_1-3,149,99,0 warp ord13-8 1,1,ordeal_1-3,151,129
-ordeal_1-3,149,199,0 warp ord13-9 1,1,ordeal_1-3,148,171
-ordeal_1-3,151,124,0 warp ord13-10 1,1,ordeal_1-3,151,94
-ordeal_1-3,168,168,0 warp ord13-11 1,1,ordeal_1-3,189,189
-ordeal_1-3,169,131,0 warp ord13-12 1,1,ordeal_1-3,188,111
-ordeal_1-3,176,150,0 warp ord13-13 1,1,ordeal_1-3,204,150
-ordeal_1-3,183,116,0 warp ord13-14 1,1,ordeal_1-3,164,136
-ordeal_1-3,184,184,0 warp ord13-15 1,1,ordeal_1-3,163,163
-ordeal_1-3,199,150,0 warp ord13-16 1,1,ordeal_1-3,171,150
-ordeal_1-4,128,154,0 warp ord14-1 1,1,ordeal_1-4,24,154
-ordeal_1-4,136,136,0 warp ord14-2 1,1,ordeal_1-4,24,24
-ordeal_1-4,136,172,0 warp ord14-3 1,1,ordeal_1-4,24,284
-ordeal_1-4,153,128,0 warp ord14-4 1,1,ordeal_1-4,153,23
-ordeal_1-4,153,180,0 warp ord14-5 1,1,ordeal_1-4,144,284
-ordeal_1-4,172,135,0 warp ord14-6 1,1,ordeal_1-4,284,24
-ordeal_1-4,172,172,0 warp ord14-7 1,1,ordeal_1-4,284,284
-ordeal_1-4,180,154,0 warp ord14-8 1,1,ordeal_1-4,284,164
+//ordeal_1-3,100,150,0 warp ord13-1 1,1,ordeal_1-3,128,150
+//ordeal_1-3,114,183,0 warp ord13-2 1,1,ordeal_1-3,135,163
+//ordeal_1-3,115,115,0 warp ord13-3 1,1,ordeal_1-3,136,136
+//ordeal_1-3,123,150,0 warp ord13-4 1,1,ordeal_1-3,95,150
+//ordeal_1-3,130,168,0 warp ord13-5 1,1,ordeal_1-3,109,188
+//ordeal_1-3,131,131,0 warp ord13-6 1,1,ordeal_1-3,110,110
+//ordeal_1-3,148,176,0 warp ord13-7 1,1,ordeal_1-3,149,204
+//ordeal_1-3,149,99,0 warp ord13-8 1,1,ordeal_1-3,151,129
+//ordeal_1-3,149,199,0 warp ord13-9 1,1,ordeal_1-3,148,171
+//ordeal_1-3,151,124,0 warp ord13-10 1,1,ordeal_1-3,151,94
+//ordeal_1-3,168,168,0 warp ord13-11 1,1,ordeal_1-3,189,189
+//ordeal_1-3,169,131,0 warp ord13-12 1,1,ordeal_1-3,188,111
+//ordeal_1-3,176,150,0 warp ord13-13 1,1,ordeal_1-3,204,150
+//ordeal_1-3,183,116,0 warp ord13-14 1,1,ordeal_1-3,164,136
+//ordeal_1-3,184,184,0 warp ord13-15 1,1,ordeal_1-3,163,163
+//ordeal_1-3,199,150,0 warp ord13-16 1,1,ordeal_1-3,171,150
+//ordeal_1-4,128,154,0 warp ord14-1 1,1,ordeal_1-4,24,154
+//ordeal_1-4,136,136,0 warp ord14-2 1,1,ordeal_1-4,24,24
+//ordeal_1-4,136,172,0 warp ord14-3 1,1,ordeal_1-4,24,284
+//ordeal_1-4,153,128,0 warp ord14-4 1,1,ordeal_1-4,153,23
+//ordeal_1-4,153,180,0 warp ord14-5 1,1,ordeal_1-4,144,284
+//ordeal_1-4,172,135,0 warp ord14-6 1,1,ordeal_1-4,284,24
+//ordeal_1-4,172,172,0 warp ord14-7 1,1,ordeal_1-4,284,284
+//ordeal_1-4,180,154,0 warp ord14-8 1,1,ordeal_1-4,284,164
ordeal_2-1,100,150,0 warp ord21-1 1,1,ordeal_2-1,128,150
ordeal_2-1,123,150,0 warp ord21-2 1,1,ordeal_2-1,95,150
ordeal_2-1,114,183,0 warp ord21-3 1,1,ordeal_2-1,135,163
@@ -88,30 +88,30 @@ ordeal_2-2,153,180,0 warp ord22-5 1,1,ordeal_2-2,144,284
ordeal_2-2,172,135,0 warp ord22-6 1,1,ordeal_2-2,284,24
ordeal_2-2,172,172,0 warp ord22-7 1,1,ordeal_2-2,284,284
ordeal_2-2,180,154,0 warp ord22-8 1,1,ordeal_2-2,284,164
-ordeal_2-3,100,150,0 warp ord23-1 1,1,ordeal_2-3,128,150
-ordeal_2-3,114,183,0 warp ord23-2 1,1,ordeal_2-3,135,163
-ordeal_2-3,115,115,0 warp ord23-3 1,1,ordeal_2-3,136,136
-ordeal_2-3,123,150,0 warp ord23-4 1,1,ordeal_2-3,95,150
-ordeal_2-3,130,168,0 warp ord23-5 1,1,ordeal_2-3,109,188
-ordeal_2-3,131,131,0 warp ord23-6 1,1,ordeal_2-3,110,110
-ordeal_2-3,148,176,0 warp ord23-7 1,1,ordeal_2-3,149,204
-ordeal_2-3,149,99,0 warp ord23-8 1,1,ordeal_2-3,151,129
-ordeal_2-3,149,199,0 warp ord23-9 1,1,ordeal_2-3,148,171
-ordeal_2-3,151,124,0 warp ord23-10 1,1,ordeal_2-3,151,94
-ordeal_2-3,168,168,0 warp ord23-11 1,1,ordeal_2-3,189,189
-ordeal_2-3,169,131,0 warp ord23-12 1,1,ordeal_2-3,188,111
-ordeal_2-3,176,150,0 warp ord23-13 1,1,ordeal_2-3,204,150
-ordeal_2-3,183,116,0 warp ord23-14 1,1,ordeal_2-3,164,136
-ordeal_2-3,184,184,0 warp ord23-15 1,1,ordeal_2-3,163,163
-ordeal_2-3,199,150,0 warp ord23-16 1,1,ordeal_2-3,171,150
-ordeal_2-4,128,154,0 warp ord24-1 1,1,ordeal_2-4,24,154
-ordeal_2-4,136,136,0 warp ord24-2 1,1,ordeal_2-4,24,24
-ordeal_2-4,136,172,0 warp ord24-3 1,1,ordeal_2-4,24,284
-ordeal_2-4,153,128,0 warp ord24-4 1,1,ordeal_2-4,153,23
-ordeal_2-4,153,180,0 warp ord24-5 1,1,ordeal_2-4,144,284
-ordeal_2-4,172,135,0 warp ord24-6 1,1,ordeal_2-4,284,24
-ordeal_2-4,172,172,0 warp ord24-7 1,1,ordeal_2-4,284,284
-ordeal_2-4,180,154,0 warp ord24-8 1,1,ordeal_2-4,284,164
+//ordeal_2-3,100,150,0 warp ord23-1 1,1,ordeal_2-3,128,150
+//ordeal_2-3,114,183,0 warp ord23-2 1,1,ordeal_2-3,135,163
+//ordeal_2-3,115,115,0 warp ord23-3 1,1,ordeal_2-3,136,136
+//ordeal_2-3,123,150,0 warp ord23-4 1,1,ordeal_2-3,95,150
+//ordeal_2-3,130,168,0 warp ord23-5 1,1,ordeal_2-3,109,188
+//ordeal_2-3,131,131,0 warp ord23-6 1,1,ordeal_2-3,110,110
+//ordeal_2-3,148,176,0 warp ord23-7 1,1,ordeal_2-3,149,204
+//ordeal_2-3,149,99,0 warp ord23-8 1,1,ordeal_2-3,151,129
+//ordeal_2-3,149,199,0 warp ord23-9 1,1,ordeal_2-3,148,171
+//ordeal_2-3,151,124,0 warp ord23-10 1,1,ordeal_2-3,151,94
+//ordeal_2-3,168,168,0 warp ord23-11 1,1,ordeal_2-3,189,189
+//ordeal_2-3,169,131,0 warp ord23-12 1,1,ordeal_2-3,188,111
+//ordeal_2-3,176,150,0 warp ord23-13 1,1,ordeal_2-3,204,150
+//ordeal_2-3,183,116,0 warp ord23-14 1,1,ordeal_2-3,164,136
+//ordeal_2-3,184,184,0 warp ord23-15 1,1,ordeal_2-3,163,163
+//ordeal_2-3,199,150,0 warp ord23-16 1,1,ordeal_2-3,171,150
+//ordeal_2-4,128,154,0 warp ord24-1 1,1,ordeal_2-4,24,154
+//ordeal_2-4,136,136,0 warp ord24-2 1,1,ordeal_2-4,24,24
+//ordeal_2-4,136,172,0 warp ord24-3 1,1,ordeal_2-4,24,284
+//ordeal_2-4,153,128,0 warp ord24-4 1,1,ordeal_2-4,153,23
+//ordeal_2-4,153,180,0 warp ord24-5 1,1,ordeal_2-4,144,284
+//ordeal_2-4,172,135,0 warp ord24-6 1,1,ordeal_2-4,284,24
+//ordeal_2-4,172,172,0 warp ord24-7 1,1,ordeal_2-4,284,284
+//ordeal_2-4,180,154,0 warp ord24-8 1,1,ordeal_2-4,284,164
ordeal_3-1,100,150,0 warp ord31-1 1,1,ordeal_3-1,128,150
ordeal_3-1,123,150,0 warp ord31-2 1,1,ordeal_3-1,95,150
ordeal_3-1,114,183,0 warp ord31-3 1,1,ordeal_3-1,135,163
@@ -136,30 +136,30 @@ ordeal_3-2,153,180,0 warp ord32-5 1,1,ordeal_3-2,144,284
ordeal_3-2,172,135,0 warp ord32-6 1,1,ordeal_3-2,284,24
ordeal_3-2,172,172,0 warp ord32-7 1,1,ordeal_3-2,284,284
ordeal_3-2,180,154,0 warp ord32-8 1,1,ordeal_3-2,284,164
-ordeal_3-3,100,150,0 warp ord33-1 1,1,ordeal_3-3,128,150
-ordeal_3-3,114,183,0 warp ord33-2 1,1,ordeal_3-3,135,163
-ordeal_3-3,115,115,0 warp ord33-3 1,1,ordeal_3-3,136,136
-ordeal_3-3,123,150,0 warp ord33-4 1,1,ordeal_3-3,95,150
-ordeal_3-3,130,168,0 warp ord33-5 1,1,ordeal_3-3,109,188
-ordeal_3-3,131,131,0 warp ord33-6 1,1,ordeal_3-3,110,110
-ordeal_3-3,148,176,0 warp ord33-7 1,1,ordeal_3-3,149,204
-ordeal_3-3,149,99,0 warp ord33-8 1,1,ordeal_3-3,151,129
-ordeal_3-3,149,199,0 warp ord33-9 1,1,ordeal_3-3,148,171
-ordeal_3-3,151,124,0 warp ord33-10 1,1,ordeal_3-3,151,94
-ordeal_3-3,168,168,0 warp ord33-11 1,1,ordeal_3-3,189,189
-ordeal_3-3,169,131,0 warp ord33-12 1,1,ordeal_3-3,188,111
-ordeal_3-3,176,150,0 warp ord33-13 1,1,ordeal_3-3,204,150
-ordeal_3-3,183,116,0 warp ord33-14 1,1,ordeal_3-3,164,136
-ordeal_3-3,184,184,0 warp ord33-15 1,1,ordeal_3-3,163,163
-ordeal_3-3,199,150,0 warp ord33-16 1,1,ordeal_3-3,171,150
-ordeal_3-4,128,154,0 warp ord34-1 1,1,ordeal_3-4,24,154
-ordeal_3-4,136,136,0 warp ord34-2 1,1,ordeal_3-4,24,24
-ordeal_3-4,136,172,0 warp ord34-3 1,1,ordeal_3-4,24,284
-ordeal_3-4,153,128,0 warp ord34-4 1,1,ordeal_3-4,153,23
-ordeal_3-4,153,180,0 warp ord34-5 1,1,ordeal_3-4,144,284
-ordeal_3-4,172,135,0 warp ord34-6 1,1,ordeal_3-4,284,24
-ordeal_3-4,172,172,0 warp ord34-7 1,1,ordeal_3-4,284,284
-ordeal_3-4,180,154,0 warp ord34-8 1,1,ordeal_3-4,284,164
+//ordeal_3-3,100,150,0 warp ord33-1 1,1,ordeal_3-3,128,150
+//ordeal_3-3,114,183,0 warp ord33-2 1,1,ordeal_3-3,135,163
+//ordeal_3-3,115,115,0 warp ord33-3 1,1,ordeal_3-3,136,136
+//ordeal_3-3,123,150,0 warp ord33-4 1,1,ordeal_3-3,95,150
+//ordeal_3-3,130,168,0 warp ord33-5 1,1,ordeal_3-3,109,188
+//ordeal_3-3,131,131,0 warp ord33-6 1,1,ordeal_3-3,110,110
+//ordeal_3-3,148,176,0 warp ord33-7 1,1,ordeal_3-3,149,204
+//ordeal_3-3,149,99,0 warp ord33-8 1,1,ordeal_3-3,151,129
+//ordeal_3-3,149,199,0 warp ord33-9 1,1,ordeal_3-3,148,171
+//ordeal_3-3,151,124,0 warp ord33-10 1,1,ordeal_3-3,151,94
+//ordeal_3-3,168,168,0 warp ord33-11 1,1,ordeal_3-3,189,189
+//ordeal_3-3,169,131,0 warp ord33-12 1,1,ordeal_3-3,188,111
+//ordeal_3-3,176,150,0 warp ord33-13 1,1,ordeal_3-3,204,150
+//ordeal_3-3,183,116,0 warp ord33-14 1,1,ordeal_3-3,164,136
+//ordeal_3-3,184,184,0 warp ord33-15 1,1,ordeal_3-3,163,163
+//ordeal_3-3,199,150,0 warp ord33-16 1,1,ordeal_3-3,171,150
+//ordeal_3-4,128,154,0 warp ord34-1 1,1,ordeal_3-4,24,154
+//ordeal_3-4,136,136,0 warp ord34-2 1,1,ordeal_3-4,24,24
+//ordeal_3-4,136,172,0 warp ord34-3 1,1,ordeal_3-4,24,284
+//ordeal_3-4,153,128,0 warp ord34-4 1,1,ordeal_3-4,153,23
+//ordeal_3-4,153,180,0 warp ord34-5 1,1,ordeal_3-4,144,284
+//ordeal_3-4,172,135,0 warp ord34-6 1,1,ordeal_3-4,284,24
+//ordeal_3-4,172,172,0 warp ord34-7 1,1,ordeal_3-4,284,284
+//ordeal_3-4,180,154,0 warp ord34-8 1,1,ordeal_3-4,284,164
//This map doesn't even exists. Is it ordeal_a02 or ordea_la00?
//ordeal_a04,128,154,0 warp orda1 0,0,ordeal_a04,24,154
//ordeal_a04,136,136,0 warp orda2 0,0,ordeal_a04,24,24
diff --git a/sql-files/main.sql b/sql-files/main.sql
index e69279710..fbdf40dde 100644
--- a/sql-files/main.sql
+++ b/sql-files/main.sql
@@ -618,6 +618,7 @@ CREATE TABLE IF NOT EXISTS `skill` (
`char_id` int(11) unsigned NOT NULL default '0',
`id` smallint(11) unsigned NOT NULL default '0',
`lv` tinyint(4) unsigned NOT NULL default '0',
+ `flag` TINYINT(1) UNSIGNED NOT NULL default 0,
PRIMARY KEY (`char_id`,`id`)
) ENGINE=MyISAM;
@@ -633,6 +634,18 @@ CREATE TABLE IF NOT EXISTS `skill_homunculus` (
) ENGINE=MyISAM;
--
+-- Table structure for table `sql_updates`
+--
+
+CREATE TABLE IF NOT EXISTS `sql_updates` (
+ `timestamp` int(11) unsigned NOT NULL,
+ `ignored` enum('Yes','No') NOT NULL DEFAULT 'No'
+) ENGINE=MyISAM;
+
+-- Existent updates to enter
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1360858500);
+
+--
-- Table structure for table `sstatus`
--
diff --git a/sql-files/upgrades/2013-02-14--16-15.sql b/sql-files/upgrades/2013-02-14--16-15.sql
new file mode 100644
index 000000000..9afd034b1
--- /dev/null
+++ b/sql-files/upgrades/2013-02-14--16-15.sql
@@ -0,0 +1,7 @@
+#1360858500
+CREATE TABLE IF NOT EXISTS `sql_updates` (
+ `timestamp` int(11) unsigned NOT NULL,
+ `ignored` enum('Yes','No') NOT NULL DEFAULT 'No'
+) ENGINE=MyISAM;
+ALTER TABLE `skill` ADD COLUMN `flag` TINYINT(1) UNSIGNED NOT NULL DEFAULT 0;
+INSERT INTO `sql_updates` (`timestamp`) VALUES (1360858500); \ No newline at end of file
diff --git a/sql-files/upgrades/index.txt b/sql-files/upgrades/index.txt
new file mode 100644
index 000000000..e0c49cbce
--- /dev/null
+++ b/sql-files/upgrades/index.txt
@@ -0,0 +1 @@
+2013-02-14--16-15.sql \ No newline at end of file
diff --git a/sql-files/upgrades/upgrade_svn15003.sql b/sql-files/upgrades/upgrade_svn15003.sql
deleted file mode 100644
index e30a3b0fd..000000000
--- a/sql-files/upgrades/upgrade_svn15003.sql
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE `global_reg_value` MODIFY `type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '3';
diff --git a/sql-files/upgrades/upgrade_svn15420_log.sql b/sql-files/upgrades/upgrade_svn15420_log.sql
deleted file mode 100644
index 580dce9a2..000000000
--- a/sql-files/upgrades/upgrade_svn15420_log.sql
+++ /dev/null
@@ -1,3 +0,0 @@
--- Adds 'I' and 'X' to `type` in `picklog` table
-
-ALTER TABLE `picklog` MODIFY `type` ENUM('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X') NOT NULL DEFAULT 'P';
diff --git a/sql-files/upgrades/upgrade_svn15519_log.sql b/sql-files/upgrades/upgrade_svn15519_log.sql
deleted file mode 100644
index 623b022b8..000000000
--- a/sql-files/upgrades/upgrade_svn15519_log.sql
+++ /dev/null
@@ -1,3 +0,0 @@
--- Adds 'D' and 'U' to `type` in `picklog` table
-
-ALTER TABLE `picklog` MODIFY `type` ENUM('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U') NOT NULL DEFAULT 'P';
diff --git a/sql-files/upgrades/upgrade_svn15531_db.sql b/sql-files/upgrades/upgrade_svn15531_db.sql
deleted file mode 100644
index ce0e56302..000000000
--- a/sql-files/upgrades/upgrade_svn15531_db.sql
+++ /dev/null
@@ -1,4 +0,0 @@
--- `ExpPer` column removed from `mob_db` and `mob_db2` tables
-
-ALTER TABLE `mob_db` DROP COLUMN `ExpPer`;
-ALTER TABLE `mob_db2` DROP COLUMN `ExpPer`;
diff --git a/sql-files/upgrades/upgrade_svn15572.sql b/sql-files/upgrades/upgrade_svn15572.sql
deleted file mode 100644
index 821bb79d6..000000000
--- a/sql-files/upgrades/upgrade_svn15572.sql
+++ /dev/null
@@ -1,3 +0,0 @@
--- Rename `level` column to `group_id` in `login` table
-
-ALTER TABLE `login` CHANGE COLUMN `level` `group_id` TINYINT(3) NOT NULL DEFAULT '0'; \ No newline at end of file
diff --git a/sql-files/upgrades/upgrade_svn15818_log.sql b/sql-files/upgrades/upgrade_svn15818_log.sql
deleted file mode 100644
index b61f71f53..000000000
--- a/sql-files/upgrades/upgrade_svn15818_log.sql
+++ /dev/null
@@ -1,3 +0,0 @@
--- Adds 'I' to `type` in `zenylog`
-
-ALTER TABLE `zenylog` MODIFY `type` ENUM('M','T','V','S','N','A','E','B','I') NOT NULL DEFAULT 'S';
diff --git a/sql-files/upgrades/upgrade_svn15885.sql b/sql-files/upgrades/upgrade_svn15885.sql
deleted file mode 100644
index 48b25b5a7..000000000
--- a/sql-files/upgrades/upgrade_svn15885.sql
+++ /dev/null
@@ -1,24 +0,0 @@
-ALTER TABLE `char` ADD COLUMN `elemental_id` int(11) unsigned NOT NULL default '0';
-
---
--- Table structure for table `elemental`
---
-
-CREATE TABLE IF NOT EXISTS `elemental` (
- `ele_id` int(11) unsigned NOT NULL auto_increment,
- `char_id` int(11) NOT NULL,
- `class` mediumint(9) unsigned NOT NULL default '0',
- `mode` int(11) unsigned NOT NULL default '1',
- `hp` int(12) NOT NULL default '1',
- `sp` int(12) NOT NULL default '1',
- `max_hp` mediumint(8) unsigned NOT NULL default '0',
- `max_sp` mediumint(6) unsigned NOT NULL default '0',
- `str` smallint(4) unsigned NOT NULL default '0',
- `agi` smallint(4) unsigned NOT NULL default '0',
- `vit` smallint(4) unsigned NOT NULL default '0',
- `int` smallint(4) unsigned NOT NULL default '0',
- `dex` smallint(4) unsigned NOT NULL default '0',
- `luk` smallint(4) unsigned NOT NULL default '0',
- `life_time` int(11) NOT NULL default '0',
- PRIMARY KEY (`ele_id`)
-) ENGINE=MyISAM;
diff --git a/sql-files/upgrades/upgrade_svn15926_log.sql b/sql-files/upgrades/upgrade_svn15926_log.sql
deleted file mode 100644
index 099ee6faa..000000000
--- a/sql-files/upgrades/upgrade_svn15926_log.sql
+++ /dev/null
@@ -1,3 +0,0 @@
--- Adds 'D' to `type` in `zenylog`
-
-ALTER TABLE `zenylog` MODIFY `type` ENUM('M','T','V','S','N','A','E','B','I','D') NOT NULL DEFAULT 'S';
diff --git a/sql-files/upgrades/upgrade_svn16490.sql b/sql-files/upgrades/upgrade_svn16490.sql
deleted file mode 100644
index b38445c46..000000000
--- a/sql-files/upgrades/upgrade_svn16490.sql
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE `char` ADD CONSTRAINT `name_key` UNIQUE (`name`);
diff --git a/sql-files/upgrades/upgrade_svn16518.sql b/sql-files/upgrades/upgrade_svn16518.sql
deleted file mode 100644
index 1c142c65f..000000000
--- a/sql-files/upgrades/upgrade_svn16518.sql
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE `inventory` ADD COLUMN `favorite` TINYINT(3) UNSIGNED NOT NULL DEFAULT '0' AFTER `expire_time`;
diff --git a/sql-files/upgrades/upgrade_svn16639.sql b/sql-files/upgrades/upgrade_svn16639.sql
deleted file mode 100644
index 0da4b91d1..000000000
--- a/sql-files/upgrades/upgrade_svn16639.sql
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE `item_db_re` CHANGE `equip_level` `equip_level` VARCHAR(10) DEFAULT '';
diff --git a/sql-files/upgrades/upgrade_svn16645.sql b/sql-files/upgrades/upgrade_svn16645.sql
deleted file mode 100644
index 9a3237ad8..000000000
--- a/sql-files/upgrades/upgrade_svn16645.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-ALTER TABLE `item_db_re` MODIFY COLUMN `atk:matk` VARCHAR(11) DEFAULT '';
-ALTER TABLE `item_db_re` MODIFY COLUMN `defence` SMALLINT(5) UNSIGNED DEFAULT NULL; \ No newline at end of file
diff --git a/sql-files/upgrades/upgrade_svn16663.sql b/sql-files/upgrades/upgrade_svn16663.sql
deleted file mode 100644
index 8883a108b..000000000
--- a/sql-files/upgrades/upgrade_svn16663.sql
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE `homunculus` ADD `prev_class` MEDIUMINT( 9 ) NOT NULL AFTER `class`
diff --git a/sql-files/upgrades/upgrade_svn16823.sql b/sql-files/upgrades/upgrade_svn16823.sql
deleted file mode 100644
index f4b211912..000000000
--- a/sql-files/upgrades/upgrade_svn16823.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-ALTER TABLE `item_db_re` MODIFY `defence` SMALLINT(5) DEFAULT NULL;
-ALTER TABLE `item_db` MODIFY `defence` SMALLINT(5) DEFAULT NULL;
diff --git a/sql-files/upgrades/upgrade_svn16914.sql b/sql-files/upgrades/upgrade_svn16914.sql
deleted file mode 100644
index 2352077ac..000000000
--- a/sql-files/upgrades/upgrade_svn16914.sql
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE `zenylog` MODIFY `type` ENUM('T','V','P','M','S','N','D','C','A','E','I','B') NOT NULL DEFAULT 'S';
diff --git a/sql-files/upgrades/upgrade_svn17014.sql b/sql-files/upgrades/upgrade_svn17014.sql
deleted file mode 100644
index 68a279aa7..000000000
--- a/sql-files/upgrades/upgrade_svn17014.sql
+++ /dev/null
@@ -1,9 +0,0 @@
-ALTER TABLE `elemental` CHANGE COLUMN `str` `atk1` MEDIUMINT(6) UNSIGNED NOT NULL DEFAULT 0,
- CHANGE COLUMN `agi` `atk2` MEDIUMINT(6) UNSIGNED NOT NULL DEFAULT 0,
- CHANGE COLUMN `vit` `matk` MEDIUMINT(6) UNSIGNED NOT NULL DEFAULT 0,
- CHANGE COLUMN `int` `aspd` SMALLINT(4) UNSIGNED NOT NULL DEFAULT 0,
- CHANGE COLUMN `dex` `def` SMALLINT(4) UNSIGNED NOT NULL DEFAULT 0,
- CHANGE COLUMN `luk` `mdef` SMALLINT(4) UNSIGNED NOT NULL DEFAULT 0,
- CHANGE COLUMN `life_time` `flee` SMALLINT(4) UNSIGNED NOT NULL DEFAULT 0,
- ADD COLUMN `hit` SMALLINT(4) UNSIGNED NOT NULL DEFAULT 0 AFTER `flee`,
- ADD COLUMN `life_time` INT(11) NOT NULL DEFAULT 0 AFTER `hit`; \ No newline at end of file
diff --git a/sql-files/upgrades/upgrade_svn17080.sql b/sql-files/upgrades/upgrade_svn17080.sql
deleted file mode 100644
index cfbe5dfe0..000000000
--- a/sql-files/upgrades/upgrade_svn17080.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-CREATE TABLE IF NOT EXISTS `interreg` (
- `varname` varchar(11) NOT NULL,
- `value` varchar(20) NOT NULL,
- PRIMARY KEY (`varname`)
-) ENGINE=InnoDB;
-INSERT INTO `interreg` (`varname`, `value`) VALUES
-('nsiuid', '0');
-
-ALTER TABLE `auction` ADD `nsiuid` BIGINT NOT NULL DEFAULT '0';
-ALTER TABLE `cart_inventory` ADD `nsiuid` BIGINT NOT NULL DEFAULT '0';
-ALTER TABLE `guild_storage` ADD `nsiuid` BIGINT NOT NULL DEFAULT '0';
-ALTER TABLE `inventory` ADD `nsiuid` BIGINT NOT NULL DEFAULT '0';
-ALTER TABLE `mail` ADD `nsiuid` BIGINT NOT NULL DEFAULT '0';
-ALTER TABLE `storage` ADD `nsiuid` BIGINT NOT NULL DEFAULT '0';
-
-ALTER TABLE `picklog` ADD `nsiuid` BIGINT NOT NULL DEFAULT '0' AFTER `card3`;
diff --git a/sql-files/upgrades/upgrade_svn17086.sql b/sql-files/upgrades/upgrade_svn17086.sql
deleted file mode 100644
index 3ba53e9ba..000000000
--- a/sql-files/upgrades/upgrade_svn17086.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-UPDATE `interreg` SET `varname` = 'unique_id' WHERE `interreg`.`varname` = 'nsiuid';
-
-
-ALTER TABLE `auction` CHANGE `nsiuid` `unique_id` BIGINT( 20 ) NOT NULL DEFAULT '0';
-ALTER TABLE `cart_inventory` CHANGE `nsiuid` `unique_id` BIGINT( 20 ) NOT NULL DEFAULT '0';
-ALTER TABLE `guild_storage` CHANGE `nsiuid` `unique_id` BIGINT( 20 ) NOT NULL DEFAULT '0';
-ALTER TABLE `inventory` CHANGE `nsiuid` `unique_id` BIGINT( 20 ) NOT NULL DEFAULT '0';
-ALTER TABLE `mail` CHANGE `nsiuid` `unique_id` BIGINT( 20 ) NOT NULL DEFAULT '0';
-ALTER TABLE `storage` CHANGE `nsiuid` `unique_id` BIGINT( 20 ) NOT NULL DEFAULT '0';
-
-ALTER TABLE `picklog` CHANGE `nsiuid` `unique_id` BIGINT( 20 ) NOT NULL DEFAULT '0'; \ No newline at end of file
diff --git a/src/char/char.c b/src/char/char.c
index 1b5c7898d..8be0134ba 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -595,19 +595,20 @@ int mmo_char_tosql(int char_id, struct mmo_charstatus* p)
}
StringBuf_Clear(&buf);
- StringBuf_Printf(&buf, "INSERT INTO `%s`(`char_id`,`id`,`lv`) VALUES ", skill_db);
+ StringBuf_Printf(&buf, "INSERT INTO `%s`(`char_id`,`id`,`lv`,`flag`) VALUES ", skill_db);
//insert here.
- for( i = 0, count = 0; i < MAX_SKILL; ++i )
- {
- if( p->skill[i].id != 0 && p->skill[i].flag != SKILL_FLAG_TEMPORARY )
- {
- if( p->skill[i].flag == SKILL_FLAG_PERMANENT && p->skill[i].lv == 0 )
+ for( i = 0, count = 0; i < MAX_SKILL; ++i ) {
+ if( p->skill[i].id != 0 && p->skill[i].flag != SKILL_FLAG_TEMPORARY ) {
+
+ if( p->skill[i].lv == 0 && ( p->skill[i].flag == SKILL_FLAG_PERM_GRANTED || p->skill[i].flag == SKILL_FLAG_PERMANENT ) )
continue;
- if( p->skill[i].flag != SKILL_FLAG_PERMANENT && (p->skill[i].flag - SKILL_FLAG_REPLACED_LV_0) == 0 )
+ if( p->skill[i].flag != SKILL_FLAG_PERMANENT && p->skill[i].flag != SKILL_FLAG_PERM_GRANTED && (p->skill[i].flag - SKILL_FLAG_REPLACED_LV_0) == 0 )
continue;
if( count )
StringBuf_AppendStr(&buf, ",");
- StringBuf_Printf(&buf, "('%d','%d','%d')", char_id, p->skill[i].id, (p->skill[i].flag == SKILL_FLAG_PERMANENT ? p->skill[i].lv : p->skill[i].flag - SKILL_FLAG_REPLACED_LV_0));
+ StringBuf_Printf(&buf, "('%d','%d','%d','%d')", char_id, p->skill[i].id,
+ ( (p->skill[i].flag == SKILL_FLAG_PERMANENT || p->skill[i].flag == SKILL_FLAG_PERM_GRANTED) ? p->skill[i].lv : p->skill[i].flag - SKILL_FLAG_REPLACED_LV_0),
+ p->skill[i].flag == SKILL_FLAG_PERM_GRANTED ? p->skill[i].flag : 0);/* other flags do not need to be saved */
++count;
}
}
@@ -1274,13 +1275,16 @@ int mmo_char_fromsql(int char_id, struct mmo_charstatus* p, bool load_everything
//read skill
//`skill` (`char_id`, `id`, `lv`)
- if( SQL_ERROR == SqlStmt_Prepare(stmt, "SELECT `id`, `lv` FROM `%s` WHERE `char_id`=? LIMIT %d", skill_db, MAX_SKILL)
+ if( SQL_ERROR == SqlStmt_Prepare(stmt, "SELECT `id`, `lv`,`flag` FROM `%s` WHERE `char_id`=? LIMIT %d", skill_db, MAX_SKILL)
|| SQL_ERROR == SqlStmt_BindParam(stmt, 0, SQLDT_INT, &char_id, 0)
|| SQL_ERROR == SqlStmt_Execute(stmt)
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 0, SQLDT_USHORT, &tmp_skill.id, 0, NULL, NULL)
- || SQL_ERROR == SqlStmt_BindColumn(stmt, 1, SQLDT_USHORT, &tmp_skill.lv, 0, NULL, NULL) )
+ || SQL_ERROR == SqlStmt_BindColumn(stmt, 1, SQLDT_USHORT, &tmp_skill.lv, 0, NULL, NULL)
+ || SQL_ERROR == SqlStmt_BindColumn(stmt, 2, SQLDT_USHORT, &tmp_skill.flag, 0, NULL, NULL) )
SqlStmt_ShowDebug(stmt);
- tmp_skill.flag = SKILL_FLAG_PERMANENT;
+
+ if( tmp_skill.flag != SKILL_FLAG_PERM_GRANTED )
+ tmp_skill.flag = SKILL_FLAG_PERMANENT;
for( i = 0; i < MAX_SKILL && SQL_SUCCESS == SqlStmt_NextRow(stmt); ++i )
{
@@ -4820,6 +4824,7 @@ int do_init(int argc, char **argv)
char_fd = make_listen_bind(bind_ip, char_port);
ShowStatus("The char-server is "CL_GREEN"ready"CL_RESET" (Server is listening on the port %d).\n\n", char_port);
+ Sql_HerculesUpdateCheck(sql_handle);
if( runflag != CORE_ST_STOP )
{
shutdown_callback = do_shutdown;
diff --git a/src/common/core.c b/src/common/core.c
index 42cdfa7cd..d1a374b29 100644
--- a/src/common/core.c
+++ b/src/common/core.c
@@ -254,17 +254,46 @@ const char* get_svn_revision(void)
}
// fallback
- snprintf(svn_version_buffer, sizeof(svn_version_buffer), "Unknown");
+ svn_version_buffer[0] = HERC_UNKNOWN_VER;
return svn_version_buffer;
}
#endif
-
+/* whats our origin */
+#define GIT_ORIGIN "master"
+/* Grabs the hash from the last time the user updated his working copy (last pull) */
+const char *get_git_hash (void) {
+ static char HerculesGitHash[41] = "";//Sha(40) + 1
+ FILE *fp;
+
+ if( HerculesGitHash[0] != '\0' )
+ return HerculesGitHash;
+
+ if ( (fp = fopen (".git/refs/remotes/origin/"GIT_ORIGIN, "r")) != NULL) {
+ char line[64];
+ char *rev = malloc (sizeof (char) * 50);
+
+ if (fgets (line, sizeof (line), fp) && sscanf (line, "%s", rev))
+ snprintf (HerculesGitHash, sizeof (HerculesGitHash), "%s", rev);
+
+ free (rev);
+ fclose (fp);
+ } else {
+ HerculesGitHash[0] = HERC_UNKNOWN_VER;
+ }
+
+ if (! (*HerculesGitHash)) {
+ HerculesGitHash[0] = HERC_UNKNOWN_VER;
+ }
+
+ return HerculesGitHash;
+}
/*======================================
* CORE : Display title
* ASCII By CalciumKid 1/12/2011
*--------------------------------------*/
static void display_title(void) {
- //ClearScreen(); // clear screen and go up/left (0, 0 position in text)
+ const char* svn = get_svn_revision();
+ const char* git = get_git_hash();
ShowMessage("\n");
ShowMessage(""CL_BG_RED" "CL_BT_WHITE" "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
@@ -279,7 +308,10 @@ static void display_title(void) {
ShowMessage(""CL_BG_RED" "CL_BT_WHITE" http://hercules.ws/board/ "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
ShowMessage(""CL_BG_RED" "CL_BT_WHITE" "CL_BG_RED""CL_CLL""CL_NORMAL"\n");
- //ShowInfo("SVN Revision: '"CL_WHITE"%s"CL_RESET"'.\n", get_svn_revision());
+ if( git[0] != HERC_UNKNOWN_VER )
+ ShowInfo("Git Hash: '"CL_WHITE"%s"CL_RESET"'\n", git);
+ else if( svn[0] != HERC_UNKNOWN_VER )
+ ShowInfo("SVN Revision: '"CL_WHITE"%s"CL_RESET"'\n", svn);
}
// Warning if executed as superuser (root)
diff --git a/src/common/core.h b/src/common/core.h
index f619d821f..8007e6036 100644
--- a/src/common/core.h
+++ b/src/common/core.h
@@ -16,6 +16,8 @@ extern char **arg_v;
extern int buildbotflag;
#endif
+#define HERC_UNKNOWN_VER '\x02'
+
/// @see E_CORE_ST
extern int runflag;
extern char *SERVER_NAME;
@@ -31,7 +33,8 @@ enum {
extern char SERVER_TYPE;
extern int parse_console(const char* buf);
-extern const char *get_svn_revision(void);
+const char *get_svn_revision(void);
+const char *get_git_hash (void);
extern int do_init(int,char**);
extern void set_server_type(void);
extern void do_abort(void);
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 493f87691..2ef9789f2 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -46,8 +46,7 @@
// 20120307 - 2012-03-07aRagexeRE+ - 0x970
#ifndef PACKETVER
- #define PACKETVER 20120410
- //#define PACKETVER 20111116
+ #define PACKETVER 20120418
#endif
//Remove/Comment this line to disable sc_data saving. [Skotlex]
diff --git a/src/common/sql.c b/src/common/sql.c
index b842db46d..fdb6e0114 100644
--- a/src/common/sql.c
+++ b/src/common/sql.c
@@ -1016,6 +1016,53 @@ void Sql_inter_server_read(const char* cfgName, bool first) {
return;
}
+void Sql_HerculesUpdateCheck(Sql* self) {
+ char line[22];// "yyyy-mm-dd--hh-mm" (17) + ".sql" (4) + 1
+ FILE* ifp;/* index fp */
+ unsigned int performed = 0;
+
+ if( !( ifp = fopen("sql-files/upgrades/index.txt", "r") ) ) {
+ ShowError("SQL upgrade index was not found!\n");
+ return;
+ }
+
+ while(fgets(line, sizeof(line), ifp)) {
+ char path[41];// "sql-files/upgrades/" (19) + "yyyy-mm-dd--hh-mm" (17) + ".sql" (4) + 1
+ char timestamp[11];// "1360186680" (10) + 1
+ FILE* ufp;/* upgrade fp */
+
+ sprintf(path,"sql-files/upgrades/%s",line);
+
+ if( !( ufp = fopen(path, "r") ) ) {
+ ShowError("SQL upgrade file %s was not found!\n",path);
+ continue;
+ }
+
+ if( fgetc(ufp) != '#' )
+ continue;
+
+ fseek (ufp,1,SEEK_SET);/* woo. skip the # */
+
+ if( fgets(timestamp,sizeof(timestamp),ufp) ) {
+ unsigned int timestampui = atol(timestamp);
+ if( SQL_ERROR == Sql_Query(self, "SELECT 1 FROM `sql_updates` WHERE `timestamp` = '%u' LIMIT 1", timestampui) )
+ Sql_ShowDebug(self);
+ if( Sql_NumRows(self) != 1 ) {
+ ShowSQL("'"CL_WHITE"%s"CL_RESET"' wasn't applied to the database\n",path);
+ performed++;
+ }
+ }
+
+ fclose(ufp);
+ }
+
+ fclose(ifp);
+
+ if( performed ) {
+ ShowSQL("If you did apply these updates or would like to be skip, insert a new entry in your sql_updates table with the timestamp of each file\n");
+ }
+}
+
void Sql_Init(void) {
Sql_inter_server_read("conf/inter-server.conf",true);
}
diff --git a/src/common/sql.h b/src/common/sql.h
index b7159ec90..ebbd1711f 100644
--- a/src/common/sql.h
+++ b/src/common/sql.h
@@ -325,7 +325,7 @@ int SqlStmt_NextRow(SqlStmt* self);
/// Frees the result of the statement execution.
void SqlStmt_FreeResult(SqlStmt* self);
-
+void Sql_HerculesUpdateCheck(Sql* self);
#if defined(SQL_REMOVE_SHOWDEBUG)
#define SqlStmt_ShowDebug(self) (void)0
diff --git a/src/login/account.h b/src/login/account.h
index 1b567be70..adbcb7102 100644
--- a/src/login/account.h
+++ b/src/login/account.h
@@ -152,5 +152,6 @@ struct AccountDB
AccountDBIterator* (*iterator)(AccountDB* self);
};
+void account_db_sql_up(AccountDB* self);
#endif // __ACCOUNT_H_INCLUDED__
diff --git a/src/login/account_sql.c b/src/login/account_sql.c
index 5073941e2..ae80163af 100644
--- a/src/login/account_sql.c
+++ b/src/login/account_sql.c
@@ -678,3 +678,7 @@ static bool mmo_auth_tosql(AccountDB_SQL* db, const struct mmo_account* acc, boo
return result;
}
+void account_db_sql_up(AccountDB* self) {
+ AccountDB_SQL* db = (AccountDB_SQL*)self;
+ Sql_HerculesUpdateCheck(db->accounts);
+} \ No newline at end of file
diff --git a/src/login/login.c b/src/login/login.c
index 7f272e2a4..c7e250040 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -1879,6 +1879,8 @@ int do_init(int argc, char** argv)
ShowStatus("The login-server is "CL_GREEN"ready"CL_RESET" (Server is listening on the port %u).\n\n", login_config.login_port);
login_log(0, "login server", 100, "login server started");
-
+
+ account_db_sql_up(accounts);
+
return 0;
}
diff --git a/src/map/battle.c b/src/map/battle.c
index 2ad066d33..5bc3df6f8 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -1606,7 +1606,20 @@ static int battle_range_type(
return BF_SHORT;
return BF_LONG;
}
+static inline int battle_adjust_skill_damage(int m, unsigned short skill_id) {
+ if( map[m].skill_count ) {
+ int i;
+ ARR_FIND(0, map[m].skill_count, i, map[m].skills[i]->skill_id == skill_id );
+
+ if( i < map[m].skill_count ) {
+ return map[m].skills[i]->modifier;
+ }
+
+ }
+
+ return 0;
+}
static int battle_blewcount_bonus(struct map_session_data *sd, uint16 skill_id)
{
int i;
@@ -3094,6 +3107,9 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if (skill_id && (i = pc_skillatk_bonus(sd, skill_id)))
ATK_ADDRATE(i);
+ if( (i = battle_adjust_skill_damage(sd->bl.m,skill_id)) )
+ ATK_RATE(i);
+
if( skill_id != PA_SACRIFICE && skill_id != MO_INVESTIGATE && skill_id != CR_GRANDCROSS && skill_id != NPC_GRANDDARKNESS && skill_id != PA_SHIELDCHAIN && !flag.cri )
{ //Elemental/Racial adjustments
if( sd->right_weapon.def_ratio_atk_ele & (1<<tstatus->def_ele) ||
@@ -4075,6 +4091,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
//Damage bonuses
if ((i = pc_skillatk_bonus(sd, skill_id)))
ad.damage += ad.damage*i/100;
+
+ if( (i = battle_adjust_skill_damage(sd->bl.m,skill_id)) )
+ MATK_RATE(i);
//Ignore Defense?
if (!flag.imdef && (
@@ -4456,6 +4475,9 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
if (sd && (i = pc_skillatk_bonus(sd, skill_id)))
md.damage += md.damage*i/100;
+ if( (i = battle_adjust_skill_damage(sd->bl.m,skill_id)) )
+ md.damage = md.damage * i / 100;
+
if(md.damage < 0)
md.damage = 0;
else if(md.damage && tstatus->mode&MD_PLANT){
diff --git a/src/map/map.c b/src/map/map.c
index 6f9401dad..dde922f39 100644
--- a/src/map/map.c
+++ b/src/map/map.c
@@ -2894,13 +2894,54 @@ int map_delmap(char* mapname)
return 0;
}
+void do_final_maps(void) {
+ int i, v = 0;
+
+ for( i = 0; i < map_num; i++ ) {
+
+ if(map[i].cell) aFree(map[i].cell);
+ if(map[i].block) aFree(map[i].block);
+ if(map[i].block_mob) aFree(map[i].block_mob);
+
+ if(battle_config.dynamic_mobs) { //Dynamic mobs flag by [random]
+ int j;
+ if(map[i].mob_delete_timer != INVALID_TIMER)
+ delete_timer(map[i].mob_delete_timer, map_removemobs_timer);
+ for (j=0; j<MAX_MOB_LIST_PER_MAP; j++)
+ if (map[i].moblist[j]) aFree(map[i].moblist[j]);
+ }
+
+ if( map[i].unit_count ) {
+ for(v = 0; v < map[i].unit_count; v++) {
+ aFree(map[i].units[v]);
+ }
+ if( map[i].units ) {
+ aFree(map[i].units);
+ map[i].units = NULL;
+ }
+ map[i].unit_count = 0;
+ }
+
+ if( map[i].skill_count ) {
+ for(v = 0; v < map[i].skill_count; v++) {
+ aFree(map[i].skills[v]);
+ }
+ if( map[i].skills ) {
+ aFree(map[i].skills);
+ map[i].skills = NULL;
+ }
+ map[i].skill_count = 0;
+ }
+
+ }
+
+}
+
/// Initializes map flags and adjusts them depending on configuration.
-void map_flags_init(void)
-{
- int i;
+void map_flags_init(void) {
+ int i, v = 0;
- for( i = 0; i < map_num; i++ )
- {
+ for( i = 0; i < map_num; i++ ) {
// mapflags
memset(&map[i].flag, 0, sizeof(map[i].flag));
@@ -2911,6 +2952,24 @@ void map_flags_init(void)
map[i].jexp = 100; // per map job exp multiplicator
memset(map[i].drop_list, 0, sizeof(map[i].drop_list)); // pvp nightmare drop list
+ if( map[i].unit_count ) {
+ for(v = 0; v < map[i].unit_count; v++) {
+ aFree(map[i].units[v]);
+ }
+ aFree(map[i].units);
+ }
+ map[i].units = NULL;
+ map[i].unit_count = 0;
+
+ if( map[i].skill_count ) {
+ for(v = 0; v < map[i].skill_count; v++) {
+ aFree(map[i].skills[v]);
+ }
+ aFree(map[i].skills);
+ }
+ map[i].skills = NULL;
+ map[i].skill_count = 0;
+
// adjustments
if( battle_config.pk_mode )
map[i].flag.pvp = 1; // make all maps pvp for pk_mode [Valaris]
@@ -3552,7 +3611,7 @@ static int cleanup_db_sub(DBKey key, DBData *data, va_list va)
*------------------------------------------*/
void do_final(void)
{
- int i, j;
+ int i;
struct map_session_data* sd;
struct s_mapiterator* iter;
@@ -3600,21 +3659,10 @@ void do_final(void)
do_final_battleground();
do_final_duel();
do_final_elemental();
-
+ do_final_maps();
+
map_db->destroy(map_db, map_db_final);
-
- for (i=0; i<map_num; i++) {
- if(map[i].cell) aFree(map[i].cell);
- if(map[i].block) aFree(map[i].block);
- if(map[i].block_mob) aFree(map[i].block_mob);
- if(battle_config.dynamic_mobs) { //Dynamic mobs flag by [random]
- if(map[i].mob_delete_timer != INVALID_TIMER)
- delete_timer(map[i].mob_delete_timer, map_removemobs_timer);
- for (j=0; j<MAX_MOB_LIST_PER_MAP; j++)
- if (map[i].moblist[j]) aFree(map[i].moblist[j]);
- }
- }
-
+
mapindex_final();
if(enable_grf)
grfio_final();
@@ -3939,6 +3987,8 @@ int do_init(int argc, char *argv[])
ShowStatus("Server is '"CL_GREEN"ready"CL_RESET"' and listening on port '"CL_WHITE"%d"CL_RESET"'.\n\n", map_port);
+ Sql_HerculesUpdateCheck(mmysql_handle);
+
if( runflag != CORE_ST_STOP )
{
shutdown_callback = do_shutdown;
diff --git a/src/map/map.h b/src/map/map.h
index 73f8e694b..861a55d0a 100644
--- a/src/map/map.h
+++ b/src/map/map.h
@@ -496,6 +496,11 @@ struct iwall_data {
bool shootable;
};
+struct mapflag_skill_adjust {
+ unsigned short skill_id;
+ unsigned short modifier;
+};
+
struct map_data {
char name[MAP_NAME_LENGTH];
uint16 index; // The map index used by the mapindex* functions.
@@ -588,6 +593,13 @@ struct map_data {
// Instance Variables
int instance_id;
int instance_src_map;
+
+ /* adjust_unit_duration mapflag */
+ struct mapflag_skill_adjust **units;
+ unsigned short unit_count;
+ /* adjust_skill_damage mapflag */
+ struct mapflag_skill_adjust **skills;
+ unsigned short skill_count;
};
/// Stores information about a remote map (for multi-mapserver setups).
diff --git a/src/map/npc.c b/src/map/npc.c
index ba476e810..671b4485a 100644
--- a/src/map/npc.c
+++ b/src/map/npc.c
@@ -3398,7 +3398,45 @@ static const char* npc_parse_mapflag(char* w1, char* w2, char* w3, char* w4, con
map[m].flag.guildlock=state;
else if (!strcmpi(w3,"reset"))
map[m].flag.reset=state;
- else
+ else if (!strcmpi(w3,"adjust_unit_duration")) {
+ char *mod;
+ int skill_id;
+
+ strtok(w4,"\t");/* makes w4 contain only 4th param */
+
+ if( !(mod = strtok(NULL,"\t")) ) {/* makes mod contain only the 5th param */
+ ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", map[m].name, filepath, strline(buffer,start-buffer));
+ } else if( !( skill_id = skill_name2id(w4) ) || !skill_get_unit_id( skill_name2id(w4), 0) ) {
+ ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", w4, map[m].name, filepath, strline(buffer,start-buffer));
+ } else if ( atoi(mod) < 1 || atoi(mod) > USHRT_MAX ) {
+ ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_unit_duration' flag! removing flag from %s (file '%s', line '%d').\n", atoi(mod), w4, map[m].name, filepath, strline(buffer,start-buffer));
+ } else {
+ int idx = map[m].unit_count;
+ RECREATE(map[m].units, struct mapflag_skill_adjust*, ++map[m].unit_count);
+ CREATE(map[m].units[idx],struct mapflag_skill_adjust,1);
+ map[m].units[idx]->skill_id = (unsigned short)skill_id;
+ map[m].units[idx]->modifier = (unsigned short)atoi(mod);
+ }
+ } else if (!strcmpi(w3,"adjust_skill_damage")) {
+ char *mod;
+ int skill_id;
+
+ strtok(w4,"\t");/* makes w4 contain only 4th param */
+
+ if( !(mod = strtok(NULL,"\t")) ) {/* makes mod contain only the 5th param */
+ ShowWarning("npc_parse_mapflag: Missing 5th param for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", map[m].name, filepath, strline(buffer,start-buffer));
+ } else if( !( skill_id = skill_name2id(w4) ) ) {
+ ShowWarning("npc_parse_mapflag: Unknown skill (%s) for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", w4, map[m].name, filepath, strline(buffer,start-buffer));
+ } else if ( atoi(mod) < 1 || atoi(mod) > USHRT_MAX ) {
+ ShowWarning("npc_parse_mapflag: Invalid modifier '%d' for skill '%s' for 'adjust_skill_damage' flag! removing flag from %s (file '%s', line '%d').\n", atoi(mod), w4, map[m].name, filepath, strline(buffer,start-buffer));
+ } else {
+ int idx = map[m].skill_count;
+ RECREATE(map[m].skills, struct mapflag_skill_adjust*, ++map[m].skill_count);
+ CREATE(map[m].skills[idx],struct mapflag_skill_adjust,1);
+ map[m].skills[idx]->skill_id = (unsigned short)skill_id;
+ map[m].skills[idx]->modifier = (unsigned short)atoi(mod);
+ }
+ } else
ShowError("npc_parse_mapflag: unrecognized mapflag '%s' (file '%s', line '%d').\n", w3, filepath, strline(buffer,start-buffer));
return strchr(start,'\n');// continue
diff --git a/src/map/pc.c b/src/map/pc.c
index 0dd210394..ad779a268 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -1058,9 +1058,16 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim
if( !changing_mapservers ) {
- if (battle_config.display_version == 1){
+ if (battle_config.display_version == 1) {
+ const char* svn = get_svn_revision();
+ const char* git = get_git_hash();
char buf[256];
- sprintf(buf, "SVN version: %s", get_svn_revision());
+ if( git[0] != HERC_UNKNOWN_VER )
+ sprintf(buf,"Git Hash: %s", git);
+ else if( svn[0] != HERC_UNKNOWN_VER )
+ sprintf(buf,"SVN Revision: %s", svn);
+ else
+ sprintf(buf,"Unknown Version");
clif_displaymessage(sd->fd, buf);
}
@@ -1253,7 +1260,7 @@ static int pc_calc_skillpoint(struct map_session_data* sd)
if(sd->status.skill[i].flag == SKILL_FLAG_PERMANENT)
skill_point += skill;
else
- if(sd->status.skill[i].flag >= SKILL_FLAG_REPLACED_LV_0)
+ if(sd->status.skill[i].flag == SKILL_FLAG_REPLACED_LV_0)
skill_point += (sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0);
}
}
@@ -1283,13 +1290,13 @@ int pc_calc_skilltree(struct map_session_data *sd)
for( i = 0; i < MAX_SKILL; i++ )
{
- if( sd->status.skill[i].flag != SKILL_FLAG_PLAGIARIZED ) //Don't touch plagiarized skills
+ if( sd->status.skill[i].flag != SKILL_FLAG_PLAGIARIZED && sd->status.skill[i].flag != SKILL_FLAG_PERM_GRANTED ) //Don't touch these
sd->status.skill[i].id = 0; //First clear skills.
}
for( i = 0; i < MAX_SKILL; i++ )
{
- if( sd->status.skill[i].flag != SKILL_FLAG_PERMANENT && sd->status.skill[i].flag != SKILL_FLAG_PLAGIARIZED )
+ if( sd->status.skill[i].flag != SKILL_FLAG_PERMANENT && sd->status.skill[i].flag != SKILL_FLAG_PERM_GRANTED && sd->status.skill[i].flag != SKILL_FLAG_PLAGIARIZED )
{ // Restore original level of skills after deleting earned skills.
sd->status.skill[i].lv = (sd->status.skill[i].flag == SKILL_FLAG_TEMPORARY) ? 0 : sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0;
sd->status.skill[i].flag = SKILL_FLAG_PERMANENT;
@@ -1509,7 +1516,7 @@ int pc_clean_skilltree(struct map_session_data *sd)
sd->status.skill[i].flag = 0;
}
else
- if (sd->status.skill[i].flag >= SKILL_FLAG_REPLACED_LV_0){
+ if (sd->status.skill[i].flag == SKILL_FLAG_REPLACED_LV_0){
sd->status.skill[i].lv = sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0;
sd->status.skill[i].flag = 0;
}
@@ -2013,604 +2020,604 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
status = &sd->base_status;
switch(type){
- case SP_STR:
- case SP_AGI:
- case SP_VIT:
- case SP_INT:
- case SP_DEX:
- case SP_LUK:
- if(sd->state.lr_flag != 2)
- sd->param_bonus[type-SP_STR]+=val;
- break;
- case SP_ATK1:
- if(!sd->state.lr_flag) {
- bonus = status->rhw.atk + val;
- status->rhw.atk = cap_value(bonus, 0, USHRT_MAX);
- }
- else if(sd->state.lr_flag == 1) {
- bonus = status->lhw.atk + val;
- status->lhw.atk = cap_value(bonus, 0, USHRT_MAX);
- }
- break;
- case SP_ATK2:
- if(!sd->state.lr_flag) {
- bonus = status->rhw.atk2 + val;
- status->rhw.atk2 = cap_value(bonus, 0, USHRT_MAX);
- }
- else if(sd->state.lr_flag == 1) {
- bonus = status->lhw.atk2 + val;
- status->lhw.atk2 = cap_value(bonus, 0, USHRT_MAX);
- }
- break;
- case SP_BASE_ATK:
- if(sd->state.lr_flag != 2) {
-//#ifdef RENEWAL
-// sd->bonus.eatk += val;
-//#else
- bonus = status->batk + val;
- status->batk = cap_value(bonus, 0, USHRT_MAX);
-//#endif
- }
- break;
- case SP_DEF1:
- if(sd->state.lr_flag != 2) {
- bonus = status->def + val;
-#ifdef RENEWAL
- status->def = cap_value(bonus, SHRT_MIN, SHRT_MAX);
-#else
- status->def = cap_value(bonus, CHAR_MIN, CHAR_MAX);
-#endif
- }
- break;
- case SP_DEF2:
- if(sd->state.lr_flag != 2) {
- bonus = status->def2 + val;
- status->def2 = cap_value(bonus, SHRT_MIN, SHRT_MAX);
- }
- break;
- case SP_MDEF1:
- if(sd->state.lr_flag != 2) {
- bonus = status->mdef + val;
-#ifdef RENEWAL
- status->mdef = cap_value(bonus, SHRT_MIN, SHRT_MAX);
-#else
- status->mdef = cap_value(bonus, CHAR_MIN, CHAR_MAX);
-#endif
- if( sd->state.lr_flag == 3 ) {//Shield, used for royal guard
- sd->bonus.shieldmdef += bonus;
+ case SP_STR:
+ case SP_AGI:
+ case SP_VIT:
+ case SP_INT:
+ case SP_DEX:
+ case SP_LUK:
+ if(sd->state.lr_flag != 2)
+ sd->param_bonus[type-SP_STR]+=val;
+ break;
+ case SP_ATK1:
+ if(!sd->state.lr_flag) {
+ bonus = status->rhw.atk + val;
+ status->rhw.atk = cap_value(bonus, 0, USHRT_MAX);
+ }
+ else if(sd->state.lr_flag == 1) {
+ bonus = status->lhw.atk + val;
+ status->lhw.atk = cap_value(bonus, 0, USHRT_MAX);
}
- }
- break;
- case SP_MDEF2:
- if(sd->state.lr_flag != 2) {
- bonus = status->mdef2 + val;
- status->mdef2 = cap_value(bonus, SHRT_MIN, SHRT_MAX);
- }
- break;
- case SP_HIT:
- if(sd->state.lr_flag != 2) {
- bonus = status->hit + val;
- status->hit = cap_value(bonus, SHRT_MIN, SHRT_MAX);
- } else
- sd->bonus.arrow_hit+=val;
- break;
- case SP_FLEE1:
- if(sd->state.lr_flag != 2) {
- bonus = status->flee + val;
- status->flee = cap_value(bonus, SHRT_MIN, SHRT_MAX);
- }
- break;
- case SP_FLEE2:
- if(sd->state.lr_flag != 2) {
- bonus = status->flee2 + val*10;
- status->flee2 = cap_value(bonus, SHRT_MIN, SHRT_MAX);
- }
- break;
- case SP_CRITICAL:
- if(sd->state.lr_flag != 2) {
- bonus = status->cri + val*10;
- status->cri = cap_value(bonus, SHRT_MIN, SHRT_MAX);
- } else
- sd->bonus.arrow_cri += val*10;
- break;
- case SP_ATKELE:
- if(val >= ELE_MAX) {
- ShowError("pc_bonus: SP_ATKELE: Invalid element %d\n", val);
break;
- }
- switch (sd->state.lr_flag)
- {
- case 2:
- switch (sd->status.weapon) {
- case W_BOW:
- case W_REVOLVER:
- case W_RIFLE:
- case W_GATLING:
- case W_SHOTGUN:
- case W_GRENADE:
- //Become weapon element.
- status->rhw.ele=val;
- break;
- default: //Become arrow element.
- sd->bonus.arrow_ele=val;
- break;
+ case SP_ATK2:
+ if(!sd->state.lr_flag) {
+ bonus = status->rhw.atk2 + val;
+ status->rhw.atk2 = cap_value(bonus, 0, USHRT_MAX);
+ }
+ else if(sd->state.lr_flag == 1) {
+ bonus = status->lhw.atk2 + val;
+ status->lhw.atk2 = cap_value(bonus, 0, USHRT_MAX);
}
break;
- case 1:
- status->lhw.ele=val;
+ case SP_BASE_ATK:
+ if(sd->state.lr_flag != 2) {
+ //#ifdef RENEWAL
+ // sd->bonus.eatk += val;
+ //#else
+ bonus = status->batk + val;
+ status->batk = cap_value(bonus, 0, USHRT_MAX);
+ //#endif
+ }
break;
- default:
- status->rhw.ele=val;
+ case SP_DEF1:
+ if(sd->state.lr_flag != 2) {
+ bonus = status->def + val;
+ #ifdef RENEWAL
+ status->def = cap_value(bonus, SHRT_MIN, SHRT_MAX);
+ #else
+ status->def = cap_value(bonus, CHAR_MIN, CHAR_MAX);
+ #endif
+ }
break;
- }
- break;
- case SP_DEFELE:
- if(val >= ELE_MAX) {
- ShowError("pc_bonus: SP_DEFELE: Invalid element %d\n", val);
+ case SP_DEF2:
+ if(sd->state.lr_flag != 2) {
+ bonus = status->def2 + val;
+ status->def2 = cap_value(bonus, SHRT_MIN, SHRT_MAX);
+ }
break;
- }
- if(sd->state.lr_flag != 2)
- status->def_ele=val;
- break;
- case SP_MAXHP:
- if(sd->state.lr_flag == 2)
+ case SP_MDEF1:
+ if(sd->state.lr_flag != 2) {
+ bonus = status->mdef + val;
+ #ifdef RENEWAL
+ status->mdef = cap_value(bonus, SHRT_MIN, SHRT_MAX);
+ #else
+ status->mdef = cap_value(bonus, CHAR_MIN, CHAR_MAX);
+ #endif
+ if( sd->state.lr_flag == 3 ) {//Shield, used for royal guard
+ sd->bonus.shieldmdef += bonus;
+ }
+ }
break;
- val += (int)status->max_hp;
- //Negative bonuses will underflow, this will be handled in status_calc_pc through casting
- //If this is called outside of status_calc_pc, you'd better pray they do not underflow and end with UINT_MAX max_hp.
- status->max_hp = (unsigned int)val;
- break;
- case SP_MAXSP:
- if(sd->state.lr_flag == 2)
+ case SP_MDEF2:
+ if(sd->state.lr_flag != 2) {
+ bonus = status->mdef2 + val;
+ status->mdef2 = cap_value(bonus, SHRT_MIN, SHRT_MAX);
+ }
break;
- val += (int)status->max_sp;
- status->max_sp = (unsigned int)val;
- break;
-#ifndef RENEWAL_CAST
- case SP_VARCASTRATE:
-#endif
- case SP_CASTRATE:
- if(sd->state.lr_flag != 2)
- sd->castrate+=val;
- break;
- case SP_MAXHPRATE:
- if(sd->state.lr_flag != 2)
- sd->hprate+=val;
- break;
- case SP_MAXSPRATE:
- if(sd->state.lr_flag != 2)
- sd->sprate+=val;
- break;
- case SP_SPRATE:
- if(sd->state.lr_flag != 2)
- sd->dsprate+=val;
- break;
- case SP_ATTACKRANGE:
- switch (sd->state.lr_flag) {
- case 2:
- switch (sd->status.weapon) {
- case W_BOW:
- case W_REVOLVER:
- case W_RIFLE:
- case W_GATLING:
- case W_SHOTGUN:
- case W_GRENADE:
- status->rhw.range += val;
+ case SP_HIT:
+ if(sd->state.lr_flag != 2) {
+ bonus = status->hit + val;
+ status->hit = cap_value(bonus, SHRT_MIN, SHRT_MAX);
+ } else
+ sd->bonus.arrow_hit+=val;
+ break;
+ case SP_FLEE1:
+ if(sd->state.lr_flag != 2) {
+ bonus = status->flee + val;
+ status->flee = cap_value(bonus, SHRT_MIN, SHRT_MAX);
}
break;
- case 1:
- status->lhw.range += val;
+ case SP_FLEE2:
+ if(sd->state.lr_flag != 2) {
+ bonus = status->flee2 + val*10;
+ status->flee2 = cap_value(bonus, SHRT_MIN, SHRT_MAX);
+ }
break;
- default:
- status->rhw.range += val;
+ case SP_CRITICAL:
+ if(sd->state.lr_flag != 2) {
+ bonus = status->cri + val*10;
+ status->cri = cap_value(bonus, SHRT_MIN, SHRT_MAX);
+ } else
+ sd->bonus.arrow_cri += val*10;
break;
- }
- break;
- case SP_SPEED_RATE: //Non stackable increase
- if(sd->state.lr_flag != 2)
- sd->bonus.speed_rate = min(sd->bonus.speed_rate, -val);
- break;
- case SP_SPEED_ADDRATE: //Stackable increase
- if(sd->state.lr_flag != 2)
- sd->bonus.speed_add_rate -= val;
- break;
- case SP_ASPD: //Raw increase
- if(sd->state.lr_flag != 2)
- sd->bonus.aspd_add -= 10*val;
- break;
- case SP_ASPD_RATE: //Stackable increase - Made it linear as per rodatazone
- if(sd->state.lr_flag != 2)
-#ifndef RENEWAL_ASPD
- status->aspd_rate -= 10*val;
-#else
- status->aspd_rate2 += val;
-#endif
- break;
- case SP_HP_RECOV_RATE:
- if(sd->state.lr_flag != 2)
- sd->hprecov_rate += val;
- break;
- case SP_SP_RECOV_RATE:
- if(sd->state.lr_flag != 2)
- sd->sprecov_rate += val;
- break;
- case SP_CRITICAL_DEF:
- if(sd->state.lr_flag != 2)
- sd->bonus.critical_def += val;
- break;
- case SP_NEAR_ATK_DEF:
- if(sd->state.lr_flag != 2)
- sd->bonus.near_attack_def_rate += val;
- break;
- case SP_LONG_ATK_DEF:
- if(sd->state.lr_flag != 2)
- sd->bonus.long_attack_def_rate += val;
- break;
- case SP_DOUBLE_RATE:
- if(sd->state.lr_flag == 0 && sd->bonus.double_rate < val)
- sd->bonus.double_rate = val;
- break;
- case SP_DOUBLE_ADD_RATE:
- if(sd->state.lr_flag == 0)
- sd->bonus.double_add_rate += val;
- break;
- case SP_MATK_RATE:
- if(sd->state.lr_flag != 2)
- sd->matk_rate += val;
- break;
- case SP_IGNORE_DEF_ELE:
- if(val >= ELE_MAX) {
- ShowError("pc_bonus: SP_IGNORE_DEF_ELE: Invalid element %d\n", val);
+ case SP_ATKELE:
+ if(val >= ELE_MAX) {
+ ShowError("pc_bonus: SP_ATKELE: Invalid element %d\n", val);
+ break;
+ }
+ switch (sd->state.lr_flag)
+ {
+ case 2:
+ switch (sd->status.weapon) {
+ case W_BOW:
+ case W_REVOLVER:
+ case W_RIFLE:
+ case W_GATLING:
+ case W_SHOTGUN:
+ case W_GRENADE:
+ //Become weapon element.
+ status->rhw.ele=val;
+ break;
+ default: //Become arrow element.
+ sd->bonus.arrow_ele=val;
+ break;
+ }
+ break;
+ case 1:
+ status->lhw.ele=val;
+ break;
+ default:
+ status->rhw.ele=val;
+ break;
+ }
break;
- }
- if(!sd->state.lr_flag)
- sd->right_weapon.ignore_def_ele |= 1<<val;
- else if(sd->state.lr_flag == 1)
- sd->left_weapon.ignore_def_ele |= 1<<val;
- break;
- case SP_IGNORE_DEF_RACE:
- if(!sd->state.lr_flag)
- sd->right_weapon.ignore_def_race |= 1<<val;
- else if(sd->state.lr_flag == 1)
- sd->left_weapon.ignore_def_race |= 1<<val;
- break;
- case SP_ATK_RATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.atk_rate += val;
- break;
- case SP_MAGIC_ATK_DEF:
- if(sd->state.lr_flag != 2)
- sd->bonus.magic_def_rate += val;
- break;
- case SP_MISC_ATK_DEF:
- if(sd->state.lr_flag != 2)
- sd->bonus.misc_def_rate += val;
- break;
- case SP_IGNORE_MDEF_RATE:
- if(sd->state.lr_flag != 2) {
- sd->ignore_mdef[RC_NONBOSS] += val;
- sd->ignore_mdef[RC_BOSS] += val;
- }
- break;
- case SP_IGNORE_MDEF_ELE:
- if(val >= ELE_MAX) {
- ShowError("pc_bonus: SP_IGNORE_MDEF_ELE: Invalid element %d\n", val);
+ case SP_DEFELE:
+ if(val >= ELE_MAX) {
+ ShowError("pc_bonus: SP_DEFELE: Invalid element %d\n", val);
+ break;
+ }
+ if(sd->state.lr_flag != 2)
+ status->def_ele=val;
break;
- }
- if(sd->state.lr_flag != 2)
- sd->bonus.ignore_mdef_ele |= 1<<val;
- break;
- case SP_IGNORE_MDEF_RACE:
- if(sd->state.lr_flag != 2)
- sd->bonus.ignore_mdef_race |= 1<<val;
- break;
- case SP_PERFECT_HIT_RATE:
- if(sd->state.lr_flag != 2 && sd->bonus.perfect_hit < val)
- sd->bonus.perfect_hit = val;
- break;
- case SP_PERFECT_HIT_ADD_RATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.perfect_hit_add += val;
- break;
- case SP_CRITICAL_RATE:
- if(sd->state.lr_flag != 2)
- sd->critical_rate+=val;
- break;
- case SP_DEF_RATIO_ATK_ELE:
- if(val >= ELE_MAX) {
- ShowError("pc_bonus: SP_DEF_RATIO_ATK_ELE: Invalid element %d\n", val);
+ case SP_MAXHP:
+ if(sd->state.lr_flag == 2)
+ break;
+ val += (int)status->max_hp;
+ //Negative bonuses will underflow, this will be handled in status_calc_pc through casting
+ //If this is called outside of status_calc_pc, you'd better pray they do not underflow and end with UINT_MAX max_hp.
+ status->max_hp = (unsigned int)val;
break;
- }
- if(!sd->state.lr_flag)
- sd->right_weapon.def_ratio_atk_ele |= 1<<val;
- else if(sd->state.lr_flag == 1)
- sd->left_weapon.def_ratio_atk_ele |= 1<<val;
- break;
- case SP_DEF_RATIO_ATK_RACE:
- if(val >= RC_MAX) {
- ShowError("pc_bonus: SP_DEF_RATIO_ATK_RACE: Invalid race %d\n", val);
+ case SP_MAXSP:
+ if(sd->state.lr_flag == 2)
+ break;
+ val += (int)status->max_sp;
+ status->max_sp = (unsigned int)val;
break;
- }
- if(!sd->state.lr_flag)
- sd->right_weapon.def_ratio_atk_race |= 1<<val;
- else if(sd->state.lr_flag == 1)
- sd->left_weapon.def_ratio_atk_race |= 1<<val;
- break;
- case SP_HIT_RATE:
- if(sd->state.lr_flag != 2)
- sd->hit_rate += val;
- break;
- case SP_FLEE_RATE:
- if(sd->state.lr_flag != 2)
- sd->flee_rate += val;
- break;
- case SP_FLEE2_RATE:
- if(sd->state.lr_flag != 2)
- sd->flee2_rate += val;
- break;
- case SP_DEF_RATE:
- if(sd->state.lr_flag != 2)
- sd->def_rate += val;
- break;
- case SP_DEF2_RATE:
- if(sd->state.lr_flag != 2)
- sd->def2_rate += val;
- break;
- case SP_MDEF_RATE:
- if(sd->state.lr_flag != 2)
- sd->mdef_rate += val;
- break;
- case SP_MDEF2_RATE:
- if(sd->state.lr_flag != 2)
- sd->mdef2_rate += val;
- break;
- case SP_RESTART_FULL_RECOVER:
- if(sd->state.lr_flag != 2)
- sd->special_state.restart_full_recover = 1;
- break;
- case SP_NO_CASTCANCEL:
- if(sd->state.lr_flag != 2)
- sd->special_state.no_castcancel = 1;
- break;
- case SP_NO_CASTCANCEL2:
- if(sd->state.lr_flag != 2)
- sd->special_state.no_castcancel2 = 1;
- break;
- case SP_NO_SIZEFIX:
- if(sd->state.lr_flag != 2)
- sd->special_state.no_sizefix = 1;
- break;
- case SP_NO_MAGIC_DAMAGE:
- if(sd->state.lr_flag == 2)
+ #ifndef RENEWAL_CAST
+ case SP_VARCASTRATE:
+ #endif
+ case SP_CASTRATE:
+ if(sd->state.lr_flag != 2)
+ sd->castrate+=val;
break;
- val+= sd->special_state.no_magic_damage;
- sd->special_state.no_magic_damage = cap_value(val,0,100);
- break;
- case SP_NO_WEAPON_DAMAGE:
- if(sd->state.lr_flag == 2)
+ case SP_MAXHPRATE:
+ if(sd->state.lr_flag != 2)
+ sd->hprate+=val;
break;
- val+= sd->special_state.no_weapon_damage;
- sd->special_state.no_weapon_damage = cap_value(val,0,100);
- break;
- case SP_NO_MISC_DAMAGE:
- if(sd->state.lr_flag == 2)
+ case SP_MAXSPRATE:
+ if(sd->state.lr_flag != 2)
+ sd->sprate+=val;
break;
- val+= sd->special_state.no_misc_damage;
- sd->special_state.no_misc_damage = cap_value(val,0,100);
- break;
- case SP_NO_GEMSTONE:
- if(sd->state.lr_flag != 2)
- sd->special_state.no_gemstone = 1;
- break;
- case SP_INTRAVISION: // Maya Purple Card effect allowing to see Hiding/Cloaking people [DracoRPG]
- if(sd->state.lr_flag != 2) {
- sd->special_state.intravision = 1;
- clif_status_load(&sd->bl, SI_INTRAVISION, 1);
- }
- break;
- case SP_NO_KNOCKBACK:
- if(sd->state.lr_flag != 2)
- sd->special_state.no_knockback = 1;
- break;
- case SP_SPLASH_RANGE:
- if(sd->bonus.splash_range < val)
- sd->bonus.splash_range = val;
- break;
- case SP_SPLASH_ADD_RANGE:
- sd->bonus.splash_add_range += val;
- break;
- case SP_SHORT_WEAPON_DAMAGE_RETURN:
- if(sd->state.lr_flag != 2)
- sd->bonus.short_weapon_damage_return += val;
- break;
- case SP_LONG_WEAPON_DAMAGE_RETURN:
- if(sd->state.lr_flag != 2)
- sd->bonus.long_weapon_damage_return += val;
- break;
- case SP_MAGIC_DAMAGE_RETURN: //AppleGirl Was Here
- if(sd->state.lr_flag != 2)
- sd->bonus.magic_damage_return += val;
- break;
- case SP_ALL_STATS: // [Valaris]
- if(sd->state.lr_flag!=2) {
- sd->param_bonus[SP_STR-SP_STR]+=val;
- sd->param_bonus[SP_AGI-SP_STR]+=val;
- sd->param_bonus[SP_VIT-SP_STR]+=val;
- sd->param_bonus[SP_INT-SP_STR]+=val;
- sd->param_bonus[SP_DEX-SP_STR]+=val;
- sd->param_bonus[SP_LUK-SP_STR]+=val;
- }
- break;
- case SP_AGI_VIT: // [Valaris]
- if(sd->state.lr_flag!=2) {
- sd->param_bonus[SP_AGI-SP_STR]+=val;
- sd->param_bonus[SP_VIT-SP_STR]+=val;
- }
- break;
- case SP_AGI_DEX_STR: // [Valaris]
- if(sd->state.lr_flag!=2) {
- sd->param_bonus[SP_AGI-SP_STR]+=val;
- sd->param_bonus[SP_DEX-SP_STR]+=val;
- sd->param_bonus[SP_STR-SP_STR]+=val;
- }
- break;
- case SP_PERFECT_HIDE: // [Valaris]
- if(sd->state.lr_flag!=2)
- sd->special_state.perfect_hiding=1;
- break;
- case SP_UNBREAKABLE:
- if(sd->state.lr_flag!=2)
- sd->bonus.unbreakable += val;
- break;
- case SP_UNBREAKABLE_WEAPON:
- if(sd->state.lr_flag != 2)
- sd->bonus.unbreakable_equip |= EQP_WEAPON;
- break;
- case SP_UNBREAKABLE_ARMOR:
- if(sd->state.lr_flag != 2)
- sd->bonus.unbreakable_equip |= EQP_ARMOR;
- break;
- case SP_UNBREAKABLE_HELM:
- if(sd->state.lr_flag != 2)
- sd->bonus.unbreakable_equip |= EQP_HELM;
- break;
- case SP_UNBREAKABLE_SHIELD:
- if(sd->state.lr_flag != 2)
- sd->bonus.unbreakable_equip |= EQP_SHIELD;
- break;
- case SP_UNBREAKABLE_GARMENT:
- if(sd->state.lr_flag != 2)
- sd->bonus.unbreakable_equip |= EQP_GARMENT;
- break;
- case SP_UNBREAKABLE_SHOES:
- if(sd->state.lr_flag != 2)
- sd->bonus.unbreakable_equip |= EQP_SHOES;
- break;
- case SP_CLASSCHANGE: // [Valaris]
- if(sd->state.lr_flag !=2)
- sd->bonus.classchange=val;
- break;
- case SP_LONG_ATK_RATE:
- if(sd->state.lr_flag != 2) //[Lupus] it should stack, too. As any other cards rate bonuses
- sd->bonus.long_attack_atk_rate+=val;
- break;
- case SP_BREAK_WEAPON_RATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.break_weapon_rate+=val;
- break;
- case SP_BREAK_ARMOR_RATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.break_armor_rate+=val;
- break;
- case SP_ADD_STEAL_RATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.add_steal_rate+=val;
- break;
- case SP_DELAYRATE:
- if(sd->state.lr_flag != 2)
- sd->delayrate+=val;
- break;
- case SP_CRIT_ATK_RATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.crit_atk_rate += val;
- break;
- case SP_NO_REGEN:
- if(sd->state.lr_flag != 2)
- sd->regen.state.block|=val;
- break;
- case SP_UNSTRIPABLE_WEAPON:
- if(sd->state.lr_flag != 2)
- sd->bonus.unstripable_equip |= EQP_WEAPON;
- break;
- case SP_UNSTRIPABLE:
- case SP_UNSTRIPABLE_ARMOR:
- if(sd->state.lr_flag != 2)
- sd->bonus.unstripable_equip |= EQP_ARMOR;
- break;
- case SP_UNSTRIPABLE_HELM:
- if(sd->state.lr_flag != 2)
- sd->bonus.unstripable_equip |= EQP_HELM;
- break;
- case SP_UNSTRIPABLE_SHIELD:
- if(sd->state.lr_flag != 2)
- sd->bonus.unstripable_equip |= EQP_SHIELD;
- break;
- case SP_HP_DRAIN_VALUE:
- if(!sd->state.lr_flag) {
- sd->right_weapon.hp_drain[RC_NONBOSS].value += val;
- sd->right_weapon.hp_drain[RC_BOSS].value += val;
- }
- else if(sd->state.lr_flag == 1) {
- sd->left_weapon.hp_drain[RC_NONBOSS].value += val;
- sd->left_weapon.hp_drain[RC_BOSS].value += val;
- }
- break;
- case SP_SP_DRAIN_VALUE:
- if(!sd->state.lr_flag) {
- sd->right_weapon.sp_drain[RC_NONBOSS].value += val;
- sd->right_weapon.sp_drain[RC_BOSS].value += val;
- }
- else if(sd->state.lr_flag == 1) {
- sd->left_weapon.sp_drain[RC_NONBOSS].value += val;
- sd->left_weapon.sp_drain[RC_BOSS].value += val;
- }
- break;
- case SP_SP_GAIN_VALUE:
- if(!sd->state.lr_flag)
- sd->bonus.sp_gain_value += val;
- break;
- case SP_HP_GAIN_VALUE:
- if(!sd->state.lr_flag)
- sd->bonus.hp_gain_value += val;
- break;
- case SP_MAGIC_SP_GAIN_VALUE:
- if(!sd->state.lr_flag)
- sd->bonus.magic_sp_gain_value += val;
- break;
- case SP_MAGIC_HP_GAIN_VALUE:
- if(!sd->state.lr_flag)
- sd->bonus.magic_hp_gain_value += val;
- break;
- case SP_ADD_HEAL_RATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.add_heal_rate += val;
- break;
- case SP_ADD_HEAL2_RATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.add_heal2_rate += val;
- break;
- case SP_ADD_ITEM_HEAL_RATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.itemhealrate2 += val;
- break;
- case SP_EMATK:
- if(sd->state.lr_flag != 2)
- sd->bonus.ematk += val;
- break;
- case SP_FIXCASTRATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.fixcastrate -= val;
- break;
- case SP_ADD_FIXEDCAST:
- if(sd->state.lr_flag != 2)
- sd->bonus.add_fixcast += val;
+ case SP_SPRATE:
+ if(sd->state.lr_flag != 2)
+ sd->dsprate+=val;
+ break;
+ case SP_ATTACKRANGE:
+ switch (sd->state.lr_flag) {
+ case 2:
+ switch (sd->status.weapon) {
+ case W_BOW:
+ case W_REVOLVER:
+ case W_RIFLE:
+ case W_GATLING:
+ case W_SHOTGUN:
+ case W_GRENADE:
+ status->rhw.range += val;
+ }
+ break;
+ case 1:
+ status->lhw.range += val;
+ break;
+ default:
+ status->rhw.range += val;
+ break;
+ }
+ break;
+ case SP_SPEED_RATE: //Non stackable increase
+ if(sd->state.lr_flag != 2)
+ sd->bonus.speed_rate = min(sd->bonus.speed_rate, -val);
+ break;
+ case SP_SPEED_ADDRATE: //Stackable increase
+ if(sd->state.lr_flag != 2)
+ sd->bonus.speed_add_rate -= val;
+ break;
+ case SP_ASPD: //Raw increase
+ if(sd->state.lr_flag != 2)
+ sd->bonus.aspd_add -= 10*val;
+ break;
+ case SP_ASPD_RATE: //Stackable increase - Made it linear as per rodatazone
+ if(sd->state.lr_flag != 2)
+ #ifndef RENEWAL_ASPD
+ status->aspd_rate -= 10*val;
+ #else
+ status->aspd_rate2 += val;
+ #endif
+ break;
+ case SP_HP_RECOV_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->hprecov_rate += val;
+ break;
+ case SP_SP_RECOV_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->sprecov_rate += val;
+ break;
+ case SP_CRITICAL_DEF:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.critical_def += val;
+ break;
+ case SP_NEAR_ATK_DEF:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.near_attack_def_rate += val;
+ break;
+ case SP_LONG_ATK_DEF:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.long_attack_def_rate += val;
+ break;
+ case SP_DOUBLE_RATE:
+ if(sd->state.lr_flag == 0 && sd->bonus.double_rate < val)
+ sd->bonus.double_rate = val;
+ break;
+ case SP_DOUBLE_ADD_RATE:
+ if(sd->state.lr_flag == 0)
+ sd->bonus.double_add_rate += val;
+ break;
+ case SP_MATK_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->matk_rate += val;
+ break;
+ case SP_IGNORE_DEF_ELE:
+ if(val >= ELE_MAX) {
+ ShowError("pc_bonus: SP_IGNORE_DEF_ELE: Invalid element %d\n", val);
+ break;
+ }
+ if(!sd->state.lr_flag)
+ sd->right_weapon.ignore_def_ele |= 1<<val;
+ else if(sd->state.lr_flag == 1)
+ sd->left_weapon.ignore_def_ele |= 1<<val;
+ break;
+ case SP_IGNORE_DEF_RACE:
+ if(!sd->state.lr_flag)
+ sd->right_weapon.ignore_def_race |= 1<<val;
+ else if(sd->state.lr_flag == 1)
+ sd->left_weapon.ignore_def_race |= 1<<val;
+ break;
+ case SP_ATK_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.atk_rate += val;
+ break;
+ case SP_MAGIC_ATK_DEF:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.magic_def_rate += val;
+ break;
+ case SP_MISC_ATK_DEF:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.misc_def_rate += val;
+ break;
+ case SP_IGNORE_MDEF_RATE:
+ if(sd->state.lr_flag != 2) {
+ sd->ignore_mdef[RC_NONBOSS] += val;
+ sd->ignore_mdef[RC_BOSS] += val;
+ }
+ break;
+ case SP_IGNORE_MDEF_ELE:
+ if(val >= ELE_MAX) {
+ ShowError("pc_bonus: SP_IGNORE_MDEF_ELE: Invalid element %d\n", val);
+ break;
+ }
+ if(sd->state.lr_flag != 2)
+ sd->bonus.ignore_mdef_ele |= 1<<val;
+ break;
+ case SP_IGNORE_MDEF_RACE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.ignore_mdef_race |= 1<<val;
+ break;
+ case SP_PERFECT_HIT_RATE:
+ if(sd->state.lr_flag != 2 && sd->bonus.perfect_hit < val)
+ sd->bonus.perfect_hit = val;
+ break;
+ case SP_PERFECT_HIT_ADD_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.perfect_hit_add += val;
+ break;
+ case SP_CRITICAL_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->critical_rate+=val;
+ break;
+ case SP_DEF_RATIO_ATK_ELE:
+ if(val >= ELE_MAX) {
+ ShowError("pc_bonus: SP_DEF_RATIO_ATK_ELE: Invalid element %d\n", val);
+ break;
+ }
+ if(!sd->state.lr_flag)
+ sd->right_weapon.def_ratio_atk_ele |= 1<<val;
+ else if(sd->state.lr_flag == 1)
+ sd->left_weapon.def_ratio_atk_ele |= 1<<val;
+ break;
+ case SP_DEF_RATIO_ATK_RACE:
+ if(val >= RC_MAX) {
+ ShowError("pc_bonus: SP_DEF_RATIO_ATK_RACE: Invalid race %d\n", val);
+ break;
+ }
+ if(!sd->state.lr_flag)
+ sd->right_weapon.def_ratio_atk_race |= 1<<val;
+ else if(sd->state.lr_flag == 1)
+ sd->left_weapon.def_ratio_atk_race |= 1<<val;
+ break;
+ case SP_HIT_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->hit_rate += val;
+ break;
+ case SP_FLEE_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->flee_rate += val;
+ break;
+ case SP_FLEE2_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->flee2_rate += val;
+ break;
+ case SP_DEF_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->def_rate += val;
+ break;
+ case SP_DEF2_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->def2_rate += val;
+ break;
+ case SP_MDEF_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->mdef_rate += val;
+ break;
+ case SP_MDEF2_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->mdef2_rate += val;
+ break;
+ case SP_RESTART_FULL_RECOVER:
+ if(sd->state.lr_flag != 2)
+ sd->special_state.restart_full_recover = 1;
+ break;
+ case SP_NO_CASTCANCEL:
+ if(sd->state.lr_flag != 2)
+ sd->special_state.no_castcancel = 1;
+ break;
+ case SP_NO_CASTCANCEL2:
+ if(sd->state.lr_flag != 2)
+ sd->special_state.no_castcancel2 = 1;
+ break;
+ case SP_NO_SIZEFIX:
+ if(sd->state.lr_flag != 2)
+ sd->special_state.no_sizefix = 1;
+ break;
+ case SP_NO_MAGIC_DAMAGE:
+ if(sd->state.lr_flag == 2)
+ break;
+ val+= sd->special_state.no_magic_damage;
+ sd->special_state.no_magic_damage = cap_value(val,0,100);
+ break;
+ case SP_NO_WEAPON_DAMAGE:
+ if(sd->state.lr_flag == 2)
+ break;
+ val+= sd->special_state.no_weapon_damage;
+ sd->special_state.no_weapon_damage = cap_value(val,0,100);
+ break;
+ case SP_NO_MISC_DAMAGE:
+ if(sd->state.lr_flag == 2)
+ break;
+ val+= sd->special_state.no_misc_damage;
+ sd->special_state.no_misc_damage = cap_value(val,0,100);
+ break;
+ case SP_NO_GEMSTONE:
+ if(sd->state.lr_flag != 2)
+ sd->special_state.no_gemstone = 1;
+ break;
+ case SP_INTRAVISION: // Maya Purple Card effect allowing to see Hiding/Cloaking people [DracoRPG]
+ if(sd->state.lr_flag != 2) {
+ sd->special_state.intravision = 1;
+ clif_status_load(&sd->bl, SI_INTRAVISION, 1);
+ }
+ break;
+ case SP_NO_KNOCKBACK:
+ if(sd->state.lr_flag != 2)
+ sd->special_state.no_knockback = 1;
+ break;
+ case SP_SPLASH_RANGE:
+ if(sd->bonus.splash_range < val)
+ sd->bonus.splash_range = val;
+ break;
+ case SP_SPLASH_ADD_RANGE:
+ sd->bonus.splash_add_range += val;
+ break;
+ case SP_SHORT_WEAPON_DAMAGE_RETURN:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.short_weapon_damage_return += val;
+ break;
+ case SP_LONG_WEAPON_DAMAGE_RETURN:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.long_weapon_damage_return += val;
+ break;
+ case SP_MAGIC_DAMAGE_RETURN: //AppleGirl Was Here
+ if(sd->state.lr_flag != 2)
+ sd->bonus.magic_damage_return += val;
+ break;
+ case SP_ALL_STATS: // [Valaris]
+ if(sd->state.lr_flag!=2) {
+ sd->param_bonus[SP_STR-SP_STR]+=val;
+ sd->param_bonus[SP_AGI-SP_STR]+=val;
+ sd->param_bonus[SP_VIT-SP_STR]+=val;
+ sd->param_bonus[SP_INT-SP_STR]+=val;
+ sd->param_bonus[SP_DEX-SP_STR]+=val;
+ sd->param_bonus[SP_LUK-SP_STR]+=val;
+ }
+ break;
+ case SP_AGI_VIT: // [Valaris]
+ if(sd->state.lr_flag!=2) {
+ sd->param_bonus[SP_AGI-SP_STR]+=val;
+ sd->param_bonus[SP_VIT-SP_STR]+=val;
+ }
+ break;
+ case SP_AGI_DEX_STR: // [Valaris]
+ if(sd->state.lr_flag!=2) {
+ sd->param_bonus[SP_AGI-SP_STR]+=val;
+ sd->param_bonus[SP_DEX-SP_STR]+=val;
+ sd->param_bonus[SP_STR-SP_STR]+=val;
+ }
+ break;
+ case SP_PERFECT_HIDE: // [Valaris]
+ if(sd->state.lr_flag!=2)
+ sd->special_state.perfect_hiding=1;
+ break;
+ case SP_UNBREAKABLE:
+ if(sd->state.lr_flag!=2)
+ sd->bonus.unbreakable += val;
+ break;
+ case SP_UNBREAKABLE_WEAPON:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unbreakable_equip |= EQP_WEAPON;
+ break;
+ case SP_UNBREAKABLE_ARMOR:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unbreakable_equip |= EQP_ARMOR;
+ break;
+ case SP_UNBREAKABLE_HELM:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unbreakable_equip |= EQP_HELM;
+ break;
+ case SP_UNBREAKABLE_SHIELD:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unbreakable_equip |= EQP_SHIELD;
+ break;
+ case SP_UNBREAKABLE_GARMENT:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unbreakable_equip |= EQP_GARMENT;
+ break;
+ case SP_UNBREAKABLE_SHOES:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unbreakable_equip |= EQP_SHOES;
+ break;
+ case SP_CLASSCHANGE: // [Valaris]
+ if(sd->state.lr_flag !=2)
+ sd->bonus.classchange=val;
+ break;
+ case SP_LONG_ATK_RATE:
+ if(sd->state.lr_flag != 2) //[Lupus] it should stack, too. As any other cards rate bonuses
+ sd->bonus.long_attack_atk_rate+=val;
+ break;
+ case SP_BREAK_WEAPON_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.break_weapon_rate+=val;
+ break;
+ case SP_BREAK_ARMOR_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.break_armor_rate+=val;
+ break;
+ case SP_ADD_STEAL_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.add_steal_rate+=val;
+ break;
+ case SP_DELAYRATE:
+ if(sd->state.lr_flag != 2)
+ sd->delayrate+=val;
+ break;
+ case SP_CRIT_ATK_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.crit_atk_rate += val;
+ break;
+ case SP_NO_REGEN:
+ if(sd->state.lr_flag != 2)
+ sd->regen.state.block|=val;
+ break;
+ case SP_UNSTRIPABLE_WEAPON:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unstripable_equip |= EQP_WEAPON;
+ break;
+ case SP_UNSTRIPABLE:
+ case SP_UNSTRIPABLE_ARMOR:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unstripable_equip |= EQP_ARMOR;
+ break;
+ case SP_UNSTRIPABLE_HELM:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unstripable_equip |= EQP_HELM;
+ break;
+ case SP_UNSTRIPABLE_SHIELD:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.unstripable_equip |= EQP_SHIELD;
+ break;
+ case SP_HP_DRAIN_VALUE:
+ if(!sd->state.lr_flag) {
+ sd->right_weapon.hp_drain[RC_NONBOSS].value += val;
+ sd->right_weapon.hp_drain[RC_BOSS].value += val;
+ }
+ else if(sd->state.lr_flag == 1) {
+ sd->left_weapon.hp_drain[RC_NONBOSS].value += val;
+ sd->left_weapon.hp_drain[RC_BOSS].value += val;
+ }
+ break;
+ case SP_SP_DRAIN_VALUE:
+ if(!sd->state.lr_flag) {
+ sd->right_weapon.sp_drain[RC_NONBOSS].value += val;
+ sd->right_weapon.sp_drain[RC_BOSS].value += val;
+ }
+ else if(sd->state.lr_flag == 1) {
+ sd->left_weapon.sp_drain[RC_NONBOSS].value += val;
+ sd->left_weapon.sp_drain[RC_BOSS].value += val;
+ }
+ break;
+ case SP_SP_GAIN_VALUE:
+ if(!sd->state.lr_flag)
+ sd->bonus.sp_gain_value += val;
+ break;
+ case SP_HP_GAIN_VALUE:
+ if(!sd->state.lr_flag)
+ sd->bonus.hp_gain_value += val;
+ break;
+ case SP_MAGIC_SP_GAIN_VALUE:
+ if(!sd->state.lr_flag)
+ sd->bonus.magic_sp_gain_value += val;
+ break;
+ case SP_MAGIC_HP_GAIN_VALUE:
+ if(!sd->state.lr_flag)
+ sd->bonus.magic_hp_gain_value += val;
+ break;
+ case SP_ADD_HEAL_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.add_heal_rate += val;
+ break;
+ case SP_ADD_HEAL2_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.add_heal2_rate += val;
+ break;
+ case SP_ADD_ITEM_HEAL_RATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.itemhealrate2 += val;
+ break;
+ case SP_EMATK:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.ematk += val;
+ break;
+ case SP_FIXCASTRATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.fixcastrate -= val;
+ break;
+ case SP_ADD_FIXEDCAST:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.add_fixcast += val;
- break;
-#ifdef RENEWAL_CAST
- case SP_VARCASTRATE:
- if(sd->state.lr_flag != 2)
- sd->bonus.varcastrate -= val;
- break;
- case SP_ADD_VARIABLECAST:
- if(sd->state.lr_flag != 2)
+ break;
+ #ifdef RENEWAL_CAST
+ case SP_VARCASTRATE:
+ if(sd->state.lr_flag != 2)
+ sd->bonus.varcastrate -= val;
+ break;
+ case SP_ADD_VARIABLECAST:
+ if(sd->state.lr_flag != 2)
- sd->bonus.add_varcast += val;
+ sd->bonus.add_varcast += val;
- break;
-#endif
- default:
- ShowWarning("pc_bonus: unknown type %d %d !\n",type,val);
- break;
+ break;
+ #endif
+ default:
+ ShowWarning("pc_bonus: unknown type %d %d !\n",type,val);
+ break;
}
return 0;
}
@@ -3442,7 +3449,7 @@ int pc_skill(TBL_PC* sd, int id, int level, int flag)
case 0: //Set skill data overwriting whatever was there before.
sd->status.skill[id].id = id;
sd->status.skill[id].lv = level;
- sd->status.skill[id].flag = SKILL_FLAG_PERMANENT;
+ sd->status.skill[id].flag = SKILL_FLAG_PERM_GRANTED;
if( level == 0 ) //Remove skill.
{
sd->status.skill[id].id = 0;
@@ -6056,7 +6063,7 @@ int pc_allskillup(struct map_session_data *sd)
nullpo_ret(sd);
for(i=0;i<MAX_SKILL;i++){
- if (sd->status.skill[i].flag != SKILL_FLAG_PERMANENT && sd->status.skill[i].flag != SKILL_FLAG_PLAGIARIZED) {
+ if (sd->status.skill[i].flag != SKILL_FLAG_PERMANENT && sd->status.skill[i].flag != SKILL_FLAG_PERM_GRANTED && sd->status.skill[i].flag != SKILL_FLAG_PLAGIARIZED) {
sd->status.skill[i].lv = (sd->status.skill[i].flag == SKILL_FLAG_TEMPORARY) ? 0 : sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0;
sd->status.skill[i].flag = SKILL_FLAG_PERMANENT;
if (sd->status.skill[i].lv == 0)
@@ -6329,6 +6336,9 @@ int pc_resetskill(struct map_session_data* sd, int flag)
if( i == NV_BASIC && (sd->class_&MAPID_UPPERMASK) != MAPID_NOVICE )
continue;
+ if( sd->status.skill[i].flag == SKILL_FLAG_PERM_GRANTED )
+ continue;
+
if( flag&4 && !skill_ischangesex(i) )
continue;
@@ -6344,7 +6354,7 @@ int pc_resetskill(struct map_session_data* sd, int flag)
if( sd->status.skill[i].flag == SKILL_FLAG_PERMANENT )
skill_point += lv;
else
- if( sd->status.skill[i].flag >= SKILL_FLAG_REPLACED_LV_0 )
+ if( sd->status.skill[i].flag == SKILL_FLAG_REPLACED_LV_0 )
skill_point += (sd->status.skill[i].flag - SKILL_FLAG_REPLACED_LV_0);
if( !(flag&2) )
@@ -6865,39 +6875,139 @@ int pc_readparam(struct map_session_data* sd,int type)
nullpo_ret(sd);
switch(type) {
- case SP_SKILLPOINT: val = sd->status.skill_point; break;
- case SP_STATUSPOINT: val = sd->status.status_point; break;
- case SP_ZENY: val = sd->status.zeny; break;
- case SP_BASELEVEL: val = sd->status.base_level; break;
- case SP_JOBLEVEL: val = sd->status.job_level; break;
- case SP_CLASS: val = sd->status.class_; break;
- case SP_BASEJOB: val = pc_mapid2jobid(sd->class_&MAPID_UPPERMASK, sd->status.sex); break; //Base job, extracting upper type.
- case SP_UPPER: val = sd->class_&JOBL_UPPER?1:(sd->class_&JOBL_BABY?2:0); break;
- case SP_BASECLASS: val = pc_mapid2jobid(sd->class_&MAPID_BASEMASK, sd->status.sex); break; //Extract base class tree. [Skotlex]
- case SP_SEX: val = sd->status.sex; break;
- case SP_WEIGHT: val = sd->weight; break;
- case SP_MAXWEIGHT: val = sd->max_weight; break;
- case SP_BASEEXP: val = sd->status.base_exp; break;
- case SP_JOBEXP: val = sd->status.job_exp; break;
- case SP_NEXTBASEEXP: val = pc_nextbaseexp(sd); break;
- case SP_NEXTJOBEXP: val = pc_nextjobexp(sd); break;
- case SP_HP: val = sd->battle_status.hp; break;
- case SP_MAXHP: val = sd->battle_status.max_hp; break;
- case SP_SP: val = sd->battle_status.sp; break;
- case SP_MAXSP: val = sd->battle_status.max_sp; break;
- case SP_STR: val = sd->status.str; break;
- case SP_AGI: val = sd->status.agi; break;
- case SP_VIT: val = sd->status.vit; break;
- case SP_INT: val = sd->status.int_; break;
- case SP_DEX: val = sd->status.dex; break;
- case SP_LUK: val = sd->status.luk; break;
- case SP_KARMA: val = sd->status.karma; break;
- case SP_MANNER: val = sd->status.manner; break;
- case SP_FAME: val = sd->status.fame; break;
- case SP_KILLERRID: val = sd->killerrid; break;
- case SP_KILLEDRID: val = sd->killedrid; break;
- case SP_CRITICAL: val = sd->battle_status.cri/10; break;
- case SP_ASPD: val = (2000-sd->battle_status.amotion)/10; break;
+ case SP_SKILLPOINT: val = sd->status.skill_point; break;
+ case SP_STATUSPOINT: val = sd->status.status_point; break;
+ case SP_ZENY: val = sd->status.zeny; break;
+ case SP_BASELEVEL: val = sd->status.base_level; break;
+ case SP_JOBLEVEL: val = sd->status.job_level; break;
+ case SP_CLASS: val = sd->status.class_; break;
+ case SP_BASEJOB: val = pc_mapid2jobid(sd->class_&MAPID_UPPERMASK, sd->status.sex); break; //Base job, extracting upper type.
+ case SP_UPPER: val = sd->class_&JOBL_UPPER?1:(sd->class_&JOBL_BABY?2:0); break;
+ case SP_BASECLASS: val = pc_mapid2jobid(sd->class_&MAPID_BASEMASK, sd->status.sex); break; //Extract base class tree. [Skotlex]
+ case SP_SEX: val = sd->status.sex; break;
+ case SP_WEIGHT: val = sd->weight; break;
+ case SP_MAXWEIGHT: val = sd->max_weight; break;
+ case SP_BASEEXP: val = sd->status.base_exp; break;
+ case SP_JOBEXP: val = sd->status.job_exp; break;
+ case SP_NEXTBASEEXP: val = pc_nextbaseexp(sd); break;
+ case SP_NEXTJOBEXP: val = pc_nextjobexp(sd); break;
+ case SP_HP: val = sd->battle_status.hp; break;
+ case SP_MAXHP: val = sd->battle_status.max_hp; break;
+ case SP_SP: val = sd->battle_status.sp; break;
+ case SP_MAXSP: val = sd->battle_status.max_sp; break;
+ case SP_STR: val = sd->status.str; break;
+ case SP_AGI: val = sd->status.agi; break;
+ case SP_VIT: val = sd->status.vit; break;
+ case SP_INT: val = sd->status.int_; break;
+ case SP_DEX: val = sd->status.dex; break;
+ case SP_LUK: val = sd->status.luk; break;
+ case SP_KARMA: val = sd->status.karma; break;
+ case SP_MANNER: val = sd->status.manner; break;
+ case SP_FAME: val = sd->status.fame; break;
+ case SP_KILLERRID: val = sd->killerrid; break;
+ case SP_KILLEDRID: val = sd->killedrid; break;
+ case SP_CRITICAL: val = sd->battle_status.cri/10; break;
+ case SP_ASPD: val = (2000-sd->battle_status.amotion)/10; break;
+ case SP_BASE_ATK: val = sd->battle_status.batk; break;
+ case SP_DEF1: val = sd->battle_status.def; break;
+ case SP_DEF2: val = sd->battle_status.def2; break;
+ case SP_MDEF1: val = sd->battle_status.mdef; break;
+ case SP_MDEF2: val = sd->battle_status.mdef2; break;
+ case SP_HIT: val = sd->battle_status.hit; break;
+ case SP_FLEE1: val = sd->battle_status.flee; break;
+ case SP_FLEE2: val = sd->battle_status.flee2; break;
+ case SP_DEFELE: val = sd->battle_status.def_ele; break;
+#ifndef RENEWAL_CAST
+ case SP_VARCASTRATE:
+#endif
+ case SP_CASTRATE:
+ val = sd->castrate+=val;
+ break;
+ case SP_MAXHPRATE: val = sd->hprate; break;
+ case SP_MAXSPRATE: val = sd->sprate; break;
+ case SP_SPRATE: val = sd->dsprate; break;
+ case SP_SPEED_RATE: val = sd->bonus.speed_rate; break;
+ case SP_SPEED_ADDRATE: val = sd->bonus.speed_add_rate; break;
+ case SP_ASPD_RATE:
+#ifndef RENEWAL_ASPD
+ val = sd->battle_status.aspd_rate;
+#else
+ val = sd->battle_status.aspd_rate2;
+#endif
+ break;
+ case SP_HP_RECOV_RATE: val = sd->hprecov_rate; break;
+ case SP_SP_RECOV_RATE: val = sd->sprecov_rate; break;
+ case SP_CRITICAL_DEF: val = sd->bonus.critical_def; break;
+ case SP_NEAR_ATK_DEF: val = sd->bonus.near_attack_def_rate; break;
+ case SP_LONG_ATK_DEF: val = sd->bonus.long_attack_def_rate; break;
+ case SP_DOUBLE_RATE: val = sd->bonus.double_rate; break;
+ case SP_DOUBLE_ADD_RATE: val = sd->bonus.double_add_rate; break;
+ case SP_MATK_RATE: val = sd->matk_rate; break;
+ case SP_ATK_RATE: val = sd->bonus.atk_rate; break;
+ case SP_MAGIC_ATK_DEF: val = sd->bonus.magic_def_rate; break;
+ case SP_MISC_ATK_DEF: val = sd->bonus.misc_def_rate; break;
+ case SP_PERFECT_HIT_RATE:val = sd->bonus.perfect_hit; break;
+ case SP_PERFECT_HIT_ADD_RATE: val = sd->bonus.perfect_hit_add; break;
+ case SP_CRITICAL_RATE: val = sd->critical_rate; break;
+ case SP_HIT_RATE: val = sd->hit_rate; break;
+ case SP_FLEE_RATE: val = sd->flee_rate; break;
+ case SP_FLEE2_RATE: val = sd->flee2_rate; break;
+ case SP_DEF_RATE: val = sd->def_rate; break;
+ case SP_DEF2_RATE: val = sd->def2_rate; break;
+ case SP_MDEF_RATE: val = sd->mdef_rate; break;
+ case SP_MDEF2_RATE: val = sd->mdef2_rate; break;
+ case SP_RESTART_FULL_RECOVER: val = sd->special_state.restart_full_recover?1:0; break;
+ case SP_NO_CASTCANCEL: val = sd->special_state.no_castcancel?1:0; break;
+ case SP_NO_CASTCANCEL2: val = sd->special_state.no_castcancel2?1:0; break;
+ case SP_NO_SIZEFIX: val = sd->special_state.no_sizefix?1:0; break;
+ case SP_NO_MAGIC_DAMAGE: val = sd->special_state.no_magic_damage; break;
+ case SP_NO_WEAPON_DAMAGE:val = sd->special_state.no_weapon_damage; break;
+ case SP_NO_MISC_DAMAGE: val = sd->special_state.no_misc_damage; break;
+ case SP_NO_GEMSTONE: val = sd->special_state.no_gemstone?1:0; break;
+ case SP_INTRAVISION: val = sd->special_state.intravision?1:0; break;
+ case SP_NO_KNOCKBACK: val = sd->special_state.no_knockback?1:0; break;
+ case SP_SPLASH_RANGE: val = sd->bonus.splash_range; break;
+ case SP_SPLASH_ADD_RANGE:val = sd->bonus.splash_add_range; break;
+ case SP_SHORT_WEAPON_DAMAGE_RETURN: val = sd->bonus.short_weapon_damage_return; break;
+ case SP_LONG_WEAPON_DAMAGE_RETURN: val = sd->bonus.long_weapon_damage_return; break;
+ case SP_MAGIC_DAMAGE_RETURN: val = sd->bonus.magic_damage_return; break;
+ case SP_PERFECT_HIDE: val = sd->special_state.perfect_hiding?1:0; break;
+ case SP_UNBREAKABLE: val = sd->bonus.unbreakable; break;
+ case SP_UNBREAKABLE_WEAPON: val = (sd->bonus.unbreakable_equip&EQP_WEAPON)?1:0; break;
+ case SP_UNBREAKABLE_ARMOR: val = (sd->bonus.unbreakable_equip&EQP_ARMOR)?1:0; break;
+ case SP_UNBREAKABLE_HELM: val = (sd->bonus.unbreakable_equip&EQP_HELM)?1:0; break;
+ case SP_UNBREAKABLE_SHIELD: val = (sd->bonus.unbreakable_equip&EQP_SHIELD)?1:0; break;
+ case SP_UNBREAKABLE_GARMENT: val = (sd->bonus.unbreakable_equip&EQP_GARMENT)?1:0; break;
+ case SP_UNBREAKABLE_SHOES: val = (sd->bonus.unbreakable_equip&EQP_SHOES)?1:0; break;
+ case SP_CLASSCHANGE: val = sd->bonus.classchange; break;
+ case SP_LONG_ATK_RATE: val = sd->bonus.long_attack_atk_rate; break;
+ case SP_BREAK_WEAPON_RATE: val = sd->bonus.break_weapon_rate; break;
+ case SP_BREAK_ARMOR_RATE: val = sd->bonus.break_armor_rate; break;
+ case SP_ADD_STEAL_RATE: val = sd->bonus.add_steal_rate; break;
+ case SP_DELAYRATE: val = sd->delayrate; break;
+ case SP_CRIT_ATK_RATE: val = sd->bonus.crit_atk_rate; break;
+ case SP_UNSTRIPABLE_WEAPON: val = (sd->bonus.unstripable_equip&EQP_WEAPON)?1:0; break;
+ case SP_UNSTRIPABLE:
+ case SP_UNSTRIPABLE_ARMOR:
+ val = (sd->bonus.unstripable_equip&EQP_ARMOR)?1:0;
+ break;
+ case SP_UNSTRIPABLE_HELM: val = (sd->bonus.unstripable_equip&EQP_HELM)?1:0; break;
+ case SP_UNSTRIPABLE_SHIELD: val = (sd->bonus.unstripable_equip&EQP_SHIELD)?1:0; break;
+ case SP_SP_GAIN_VALUE: val = sd->bonus.sp_gain_value; break;
+ case SP_HP_GAIN_VALUE: val = sd->bonus.hp_gain_value; break;
+ case SP_MAGIC_SP_GAIN_VALUE: val = sd->bonus.magic_sp_gain_value; break;
+ case SP_MAGIC_HP_GAIN_VALUE: val = sd->bonus.magic_hp_gain_value; break;
+ case SP_ADD_HEAL_RATE: val = sd->bonus.add_heal_rate; break;
+ case SP_ADD_HEAL2_RATE: val = sd->bonus.add_heal2_rate; break;
+ case SP_ADD_ITEM_HEAL_RATE: val = sd->bonus.itemhealrate2; break;
+ case SP_EMATK: val = sd->bonus.ematk; break;
+ case SP_FIXCASTRATE: val = sd->bonus.fixcastrate; break;
+ case SP_ADD_FIXEDCAST: val = sd->bonus.add_fixcast; break;
+#ifdef RENEWAL_CAST
+ case SP_VARCASTRATE: val = sd->bonus.varcastrate; break;
+ case SP_ADD_VARIABLECAST:val = sd->bonus.add_varcast; break;
+#endif
+
}
return val;
diff --git a/src/map/script.c b/src/map/script.c
index b89121ee4..fe00599a6 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -7347,7 +7347,7 @@ BUILDIN_FUNC(strnpcinfo)
// aegis->athena slot position conversion table
-static unsigned int equip[] = {EQP_HEAD_TOP,EQP_ARMOR,EQP_HAND_L,EQP_HAND_R,EQP_GARMENT,EQP_SHOES,EQP_ACC_L,EQP_ACC_R,EQP_HEAD_MID,EQP_HEAD_LOW};
+static unsigned int equip[] = {EQP_HEAD_TOP,EQP_ARMOR,EQP_HAND_L,EQP_HAND_R,EQP_GARMENT,EQP_SHOES,EQP_ACC_L,EQP_ACC_R,EQP_HEAD_MID,EQP_HEAD_LOW,EQP_COSTUME_HEAD_LOW,EQP_COSTUME_HEAD_MID,EQP_COSTUME_HEAD_TOP};
/*==========================================
* GetEquipID(Pos); Pos: 1-10
@@ -16992,10 +16992,10 @@ BUILDIN_FUNC(is_function) {
* get_revision() -> retrieves the current svn revision (if available)
**/
BUILDIN_FUNC(get_revision) {
- const char * revision;
+ const char *svn = get_svn_revision();
- if ( (revision = get_svn_revision()) != 0 )
- script_pushint(st,atoi(revision));
+ if ( svn[0] != HERC_UNKNOWN_VER )
+ script_pushint(st,atoi(svn));
else
script_pushint(st,-1);//unknown
diff --git a/src/map/skill.c b/src/map/skill.c
index ba720da42..b37d28e3c 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -10570,308 +10570,316 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill
unit_flag = skill_get_unit_flag(skill_id);
layout = skill_get_unit_layout(skill_id,skill_lv,src,x,y);
+ if( map[src->m].unit_count ) {
+ ARR_FIND(0, map[src->m].unit_count, i, map[src->m].units[i]->skill_id == skill_id );
+
+ if( i < map[src->m].unit_count ) {
+ limit = limit * map[src->m].units[i]->modifier / 100;
+ }
+ }
+
sd = BL_CAST(BL_PC, src);
status = status_get_status_data(src);
sc = status_get_sc(src); // for traps, firewall and fogwall - celest
switch( skill_id ) {
- case MH_STEINWAND:
- val2 = 4 + skill_lv; //nb of attack blocked
- break;
- case MG_SAFETYWALL:
- #ifdef RENEWAL
- /**
- * According to data provided in RE, SW life is equal to 3 times caster's health
- **/
- val2 = status_get_max_hp(src) * 3;
- #else
- val2 = skill_lv+1;
- #endif
- break;
- case MG_FIREWALL:
- if(sc && sc->data[SC_VIOLENTGALE])
- limit = limit*3/2;
- val2=4+skill_lv;
- break;
+ case MH_STEINWAND:
+ val2 = 4 + skill_lv; //nb of attack blocked
+ break;
+ case MG_SAFETYWALL:
+ #ifdef RENEWAL
+ /**
+ * According to data provided in RE, SW life is equal to 3 times caster's health
+ **/
+ val2 = status_get_max_hp(src) * 3;
+ #else
+ val2 = skill_lv+1;
+ #endif
+ break;
+ case MG_FIREWALL:
+ if(sc && sc->data[SC_VIOLENTGALE])
+ limit = limit*3/2;
+ val2=4+skill_lv;
+ break;
- case AL_WARP:
- val1=skill_lv+6;
- if(!(flag&1))
- limit=2000;
- else // previous implementation (not used anymore)
- { //Warp Portal morphing to active mode, extract relevant data from src. [Skotlex]
- if( src->type != BL_SKILL ) return NULL;
- group = ((TBL_SKILL*)src)->group;
- src = map_id2bl(group->src_id);
- if( !src ) return NULL;
- val2 = group->val2; //Copy the (x,y) position you warp to
- val3 = group->val3; //as well as the mapindex to warp to.
- }
- break;
- case HP_BASILICA:
- val1 = src->id; // Store caster id.
- break;
+ case AL_WARP:
+ val1=skill_lv+6;
+ if(!(flag&1))
+ limit=2000;
+ else // previous implementation (not used anymore)
+ { //Warp Portal morphing to active mode, extract relevant data from src. [Skotlex]
+ if( src->type != BL_SKILL ) return NULL;
+ group = ((TBL_SKILL*)src)->group;
+ src = map_id2bl(group->src_id);
+ if( !src ) return NULL;
+ val2 = group->val2; //Copy the (x,y) position you warp to
+ val3 = group->val3; //as well as the mapindex to warp to.
+ }
+ break;
+ case HP_BASILICA:
+ val1 = src->id; // Store caster id.
+ break;
- case PR_SANCTUARY:
- case NPC_EVILLAND:
- val1=(skill_lv+3)*2;
- break;
+ case PR_SANCTUARY:
+ case NPC_EVILLAND:
+ val1=(skill_lv+3)*2;
+ break;
- case WZ_FIREPILLAR:
- if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) )
- return NULL;
- if((flag&1)!=0)
- limit=1000;
- val1=skill_lv+2;
- break;
- case WZ_QUAGMIRE: //The target changes to "all" if used in a gvg map. [Skotlex]
- case AM_DEMONSTRATION:
- case GN_HELLS_PLANT:
- if (map_flag_vs(src->m) && battle_config.vs_traps_bctall
- && (src->type&battle_config.vs_traps_bctall))
- target = BCT_ALL;
- break;
- case HT_SHOCKWAVE:
- val1=skill_lv*15+10;
- case HT_SANDMAN:
- case MA_SANDMAN:
- case HT_CLAYMORETRAP:
- case HT_SKIDTRAP:
- case MA_SKIDTRAP:
- case HT_LANDMINE:
- case MA_LANDMINE:
- case HT_ANKLESNARE:
- case HT_FLASHER:
- case HT_FREEZINGTRAP:
- case MA_FREEZINGTRAP:
- case HT_BLASTMINE:
- /**
- * Ranger
- **/
- case RA_ELECTRICSHOCKER:
- case RA_CLUSTERBOMB:
- case RA_MAGENTATRAP:
- case RA_COBALTTRAP:
- case RA_MAIZETRAP:
- case RA_VERDURETRAP:
- case RA_FIRINGTRAP:
- case RA_ICEBOUNDTRAP:
- {
- struct skill_condition req = skill_get_requirement(sd,skill_id,skill_lv);
- ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, i, req.itemid[i] && (req.itemid[i] == ITEMID_TRAP || req.itemid[i] == ITEMID_TRAP_ALLOY));
- if( req.itemid[i] )
- req_item = req.itemid[i];
- if( map_flag_gvg(src->m) || map[src->m].flag.battleground )
- limit *= 4; // longer trap times in WOE [celest]
- if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) )
+ case WZ_FIREPILLAR:
+ if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) )
+ return NULL;
+ if((flag&1)!=0)
+ limit=1000;
+ val1=skill_lv+2;
+ break;
+ case WZ_QUAGMIRE: //The target changes to "all" if used in a gvg map. [Skotlex]
+ case AM_DEMONSTRATION:
+ case GN_HELLS_PLANT:
+ if (map_flag_vs(src->m) && battle_config.vs_traps_bctall
+ && (src->type&battle_config.vs_traps_bctall))
target = BCT_ALL;
- }
- break;
+ break;
+ case HT_SHOCKWAVE:
+ val1=skill_lv*15+10;
+ case HT_SANDMAN:
+ case MA_SANDMAN:
+ case HT_CLAYMORETRAP:
+ case HT_SKIDTRAP:
+ case MA_SKIDTRAP:
+ case HT_LANDMINE:
+ case MA_LANDMINE:
+ case HT_ANKLESNARE:
+ case HT_FLASHER:
+ case HT_FREEZINGTRAP:
+ case MA_FREEZINGTRAP:
+ case HT_BLASTMINE:
+ /**
+ * Ranger
+ **/
+ case RA_ELECTRICSHOCKER:
+ case RA_CLUSTERBOMB:
+ case RA_MAGENTATRAP:
+ case RA_COBALTTRAP:
+ case RA_MAIZETRAP:
+ case RA_VERDURETRAP:
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
+ {
+ struct skill_condition req = skill_get_requirement(sd,skill_id,skill_lv);
+ ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, i, req.itemid[i] && (req.itemid[i] == ITEMID_TRAP || req.itemid[i] == ITEMID_TRAP_ALLOY));
+ if( req.itemid[i] )
+ req_item = req.itemid[i];
+ if( map_flag_gvg(src->m) || map[src->m].flag.battleground )
+ limit *= 4; // longer trap times in WOE [celest]
+ if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) )
+ target = BCT_ALL;
+ }
+ break;
- case SA_LANDPROTECTOR:
- case SA_VOLCANO:
- case SA_DELUGE:
- case SA_VIOLENTGALE:
- {
- struct skill_unit_group *old_sg;
- if ((old_sg = skill_locate_element_field(src)) != NULL)
- { //HelloKitty confirmed that these are interchangeable,
- //so you can change element and not consume gemstones.
- if ((
- old_sg->skill_id == SA_VOLCANO ||
- old_sg->skill_id == SA_DELUGE ||
- old_sg->skill_id == SA_VIOLENTGALE
- ) && old_sg->limit > 0)
- { //Use the previous limit (minus the elapsed time) [Skotlex]
- limit = old_sg->limit - DIFF_TICK(gettick(), old_sg->tick);
- if (limit < 0) //This can happen...
- limit = skill_get_time(skill_id,skill_lv);
+ case SA_LANDPROTECTOR:
+ case SA_VOLCANO:
+ case SA_DELUGE:
+ case SA_VIOLENTGALE:
+ {
+ struct skill_unit_group *old_sg;
+ if ((old_sg = skill_locate_element_field(src)) != NULL)
+ { //HelloKitty confirmed that these are interchangeable,
+ //so you can change element and not consume gemstones.
+ if ((
+ old_sg->skill_id == SA_VOLCANO ||
+ old_sg->skill_id == SA_DELUGE ||
+ old_sg->skill_id == SA_VIOLENTGALE
+ ) && old_sg->limit > 0)
+ { //Use the previous limit (minus the elapsed time) [Skotlex]
+ limit = old_sg->limit - DIFF_TICK(gettick(), old_sg->tick);
+ if (limit < 0) //This can happen...
+ limit = skill_get_time(skill_id,skill_lv);
+ }
+ skill_clear_group(src,1);
}
- skill_clear_group(src,1);
+ break;
}
- break;
- }
- case BA_DISSONANCE:
- case DC_UGLYDANCE:
- val1 = 10; //FIXME: This value is not used anywhere, what is it for? [Skotlex]
- break;
- case BA_WHISTLE:
- val1 = skill_lv +status->agi/10; // Flee increase
- val2 = ((skill_lv+1)/2)+status->luk/10; // Perfect dodge increase
- if(sd){
- val1 += pc_checkskill(sd,BA_MUSICALLESSON);
- val2 += pc_checkskill(sd,BA_MUSICALLESSON);
- }
- break;
- case DC_HUMMING:
- val1 = 2*skill_lv+status->dex/10; // Hit increase
+ case BA_DISSONANCE:
+ case DC_UGLYDANCE:
+ val1 = 10; //FIXME: This value is not used anywhere, what is it for? [Skotlex]
+ break;
+ case BA_WHISTLE:
+ val1 = skill_lv +status->agi/10; // Flee increase
+ val2 = ((skill_lv+1)/2)+status->luk/10; // Perfect dodge increase
+ if(sd){
+ val1 += pc_checkskill(sd,BA_MUSICALLESSON);
+ val2 += pc_checkskill(sd,BA_MUSICALLESSON);
+ }
+ break;
+ case DC_HUMMING:
+ val1 = 2*skill_lv+status->dex/10; // Hit increase
+ #ifdef RENEWAL
+ val1 *= 2;
+ #endif
+ if(sd)
+ val1 += pc_checkskill(sd,DC_DANCINGLESSON);
+ break;
+ case BA_POEMBRAGI:
+ val1 = 3*skill_lv+status->dex/10; // Casting time reduction
+ //For some reason at level 10 the base delay reduction is 50%.
+ val2 = (skill_lv<10?3*skill_lv:50)+status->int_/5; // After-cast delay reduction
+ if(sd){
+ val1 += 2*pc_checkskill(sd,BA_MUSICALLESSON);
+ val2 += 2*pc_checkskill(sd,BA_MUSICALLESSON);
+ }
+ break;
+ case DC_DONTFORGETME:
+ val1 = status->dex/10 + 3*skill_lv + 5; // ASPD decrease
+ val2 = status->agi/10 + 3*skill_lv + 5; // Movement speed adjustment.
+ if(sd){
+ val1 += pc_checkskill(sd,DC_DANCINGLESSON);
+ val2 += pc_checkskill(sd,DC_DANCINGLESSON);
+ }
+ break;
+ case BA_APPLEIDUN:
+ val1 = 5+2*skill_lv+status->vit/10; // MaxHP percent increase
+ if(sd)
+ val1 += pc_checkskill(sd,BA_MUSICALLESSON);
+ break;
+ case DC_SERVICEFORYOU:
+ val1 = 15+skill_lv+(status->int_/10); // MaxSP percent increase TO-DO: this INT bonus value is guessed
+ val2 = 20+3*skill_lv+(status->int_/10); // SP cost reduction
+ if(sd){
+ val1 += pc_checkskill(sd,DC_DANCINGLESSON); //TO-DO This bonus value is guessed
+ val2 += pc_checkskill(sd,DC_DANCINGLESSON); //TO-DO Should be half this value
+ }
+ break;
+ case BA_ASSASSINCROSS:
+ val1 = 100+(10*skill_lv)+(status->agi/10); // ASPD increase
+ if(sd)
+ val1 += 5*pc_checkskill(sd,BA_MUSICALLESSON);
+ break;
+ case DC_FORTUNEKISS:
+ val1 = 10+skill_lv+(status->luk/10); // Critical increase
+ if(sd)
+ val1 += pc_checkskill(sd,DC_DANCINGLESSON);
+ val1*=10; //Because every 10 crit is an actual cri point.
+ break;
+ case BD_DRUMBATTLEFIELD:
#ifdef RENEWAL
- val1 *= 2;
+ val1 = (skill_lv+5)*25; //Watk increase
+ val2 = skill_lv*10; //Def increase
+ #else
+ val1 = (skill_lv+1)*25; //Watk increase
+ val2 = (skill_lv+1)*2; //Def increase
#endif
- if(sd)
- val1 += pc_checkskill(sd,DC_DANCINGLESSON);
- break;
- case BA_POEMBRAGI:
- val1 = 3*skill_lv+status->dex/10; // Casting time reduction
- //For some reason at level 10 the base delay reduction is 50%.
- val2 = (skill_lv<10?3*skill_lv:50)+status->int_/5; // After-cast delay reduction
- if(sd){
- val1 += 2*pc_checkskill(sd,BA_MUSICALLESSON);
- val2 += 2*pc_checkskill(sd,BA_MUSICALLESSON);
- }
- break;
- case DC_DONTFORGETME:
- val1 = status->dex/10 + 3*skill_lv + 5; // ASPD decrease
- val2 = status->agi/10 + 3*skill_lv + 5; // Movement speed adjustment.
- if(sd){
- val1 += pc_checkskill(sd,DC_DANCINGLESSON);
- val2 += pc_checkskill(sd,DC_DANCINGLESSON);
- }
- break;
- case BA_APPLEIDUN:
- val1 = 5+2*skill_lv+status->vit/10; // MaxHP percent increase
- if(sd)
- val1 += pc_checkskill(sd,BA_MUSICALLESSON);
- break;
- case DC_SERVICEFORYOU:
- val1 = 15+skill_lv+(status->int_/10); // MaxSP percent increase TO-DO: this INT bonus value is guessed
- val2 = 20+3*skill_lv+(status->int_/10); // SP cost reduction
- if(sd){
- val1 += pc_checkskill(sd,DC_DANCINGLESSON); //TO-DO This bonus value is guessed
- val2 += pc_checkskill(sd,DC_DANCINGLESSON); //TO-DO Should be half this value
- }
- break;
- case BA_ASSASSINCROSS:
- val1 = 100+(10*skill_lv)+(status->agi/10); // ASPD increase
- if(sd)
- val1 += 5*pc_checkskill(sd,BA_MUSICALLESSON);
- break;
- case DC_FORTUNEKISS:
- val1 = 10+skill_lv+(status->luk/10); // Critical increase
- if(sd)
- val1 += pc_checkskill(sd,DC_DANCINGLESSON);
- val1*=10; //Because every 10 crit is an actual cri point.
- break;
- case BD_DRUMBATTLEFIELD:
- #ifdef RENEWAL
- val1 = (skill_lv+5)*25; //Watk increase
- val2 = skill_lv*10; //Def increase
- #else
- val1 = (skill_lv+1)*25; //Watk increase
- val2 = (skill_lv+1)*2; //Def increase
- #endif
- break;
- case BD_RINGNIBELUNGEN:
- val1 = (skill_lv+2)*25; //Watk increase
- break;
- case BD_RICHMANKIM:
- val1 = 25 + 11*skill_lv; //Exp increase bonus.
- break;
- case BD_SIEGFRIED:
- val1 = 55 + skill_lv*5; //Elemental Resistance
- val2 = skill_lv*10; //Status ailment resistance
- break;
- case WE_CALLPARTNER:
- if (sd) val1 = sd->status.partner_id;
- break;
- case WE_CALLPARENT:
- if (sd) {
- val1 = sd->status.father;
- val2 = sd->status.mother;
- }
- break;
- case WE_CALLBABY:
- if (sd) val1 = sd->status.child;
- break;
- case NJ_KAENSIN:
- skill_clear_group(src, 1); //Delete previous Kaensins/Suitons
- val2 = (skill_lv+1)/2 + 4;
- break;
- case NJ_SUITON:
- skill_clear_group(src, 1);
- break;
+ break;
+ case BD_RINGNIBELUNGEN:
+ val1 = (skill_lv+2)*25; //Watk increase
+ break;
+ case BD_RICHMANKIM:
+ val1 = 25 + 11*skill_lv; //Exp increase bonus.
+ break;
+ case BD_SIEGFRIED:
+ val1 = 55 + skill_lv*5; //Elemental Resistance
+ val2 = skill_lv*10; //Status ailment resistance
+ break;
+ case WE_CALLPARTNER:
+ if (sd) val1 = sd->status.partner_id;
+ break;
+ case WE_CALLPARENT:
+ if (sd) {
+ val1 = sd->status.father;
+ val2 = sd->status.mother;
+ }
+ break;
+ case WE_CALLBABY:
+ if (sd) val1 = sd->status.child;
+ break;
+ case NJ_KAENSIN:
+ skill_clear_group(src, 1); //Delete previous Kaensins/Suitons
+ val2 = (skill_lv+1)/2 + 4;
+ break;
+ case NJ_SUITON:
+ skill_clear_group(src, 1);
+ break;
- case GS_GROUNDDRIFT:
- {
- int element[5]={ELE_WIND,ELE_DARK,ELE_POISON,ELE_WATER,ELE_FIRE};
+ case GS_GROUNDDRIFT:
+ {
+ int element[5]={ELE_WIND,ELE_DARK,ELE_POISON,ELE_WATER,ELE_FIRE};
- val1 = status->rhw.ele;
- if (!val1)
- val1=element[rnd()%5];
+ val1 = status->rhw.ele;
+ if (!val1)
+ val1=element[rnd()%5];
- switch (val1)
- {
- case ELE_FIRE:
- subunt++;
- case ELE_WATER:
- subunt++;
- case ELE_POISON:
- subunt++;
- case ELE_DARK:
- subunt++;
- case ELE_WIND:
- break;
- default:
- subunt=rnd()%5;
- break;
- }
+ switch (val1)
+ {
+ case ELE_FIRE:
+ subunt++;
+ case ELE_WATER:
+ subunt++;
+ case ELE_POISON:
+ subunt++;
+ case ELE_DARK:
+ subunt++;
+ case ELE_WIND:
+ break;
+ default:
+ subunt=rnd()%5;
+ break;
+ }
- break;
- }
- case GC_POISONSMOKE:
- if( !(sc && sc->data[SC_POISONINGWEAPON]) )
- return NULL;
- val2 = sc->data[SC_POISONINGWEAPON]->val2; // Type of Poison
- val3 = sc->data[SC_POISONINGWEAPON]->val1;
- limit = 4000 + 2000 * skill_lv;
- break;
- case GD_LEADERSHIP:
- case GD_GLORYWOUNDS:
- case GD_SOULCOLD:
- case GD_HAWKEYES:
- limit = 1000000;//it doesn't matter
- break;
- case LG_BANDING:
- limit = -1;
- break;
- case WM_REVERBERATION:
- interval = limit;
- val2 = 1;
- case WM_POEMOFNETHERWORLD: // Can't be placed on top of Land Protector.
- if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) )
- return NULL;
- break;
- case SO_CLOUD_KILL:
- skill_clear_group(src, 4);
- break;
- case SO_WARMER:
- skill_clear_group(src, 8);
- break;
- case SO_VACUUM_EXTREME:
- range++;
+ break;
+ }
+ case GC_POISONSMOKE:
+ if( !(sc && sc->data[SC_POISONINGWEAPON]) )
+ return NULL;
+ val2 = sc->data[SC_POISONINGWEAPON]->val2; // Type of Poison
+ val3 = sc->data[SC_POISONINGWEAPON]->val1;
+ limit = 4000 + 2000 * skill_lv;
+ break;
+ case GD_LEADERSHIP:
+ case GD_GLORYWOUNDS:
+ case GD_SOULCOLD:
+ case GD_HAWKEYES:
+ limit = 1000000;//it doesn't matter
+ break;
+ case LG_BANDING:
+ limit = -1;
+ break;
+ case WM_REVERBERATION:
+ interval = limit;
+ val2 = 1;
+ case WM_POEMOFNETHERWORLD: // Can't be placed on top of Land Protector.
+ if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) )
+ return NULL;
+ break;
+ case SO_CLOUD_KILL:
+ skill_clear_group(src, 4);
+ break;
+ case SO_WARMER:
+ skill_clear_group(src, 8);
+ break;
+ case SO_VACUUM_EXTREME:
+ range++;
- break;
- case SC_BLOODYLUST:
- skill_clear_group(src, 32);
- break;
- case GN_WALLOFTHORN:
- if( flag&1 )
- limit = 3000;
- val3 = (x<<16)|y;
- break;
- case KO_ZENKAI:
- if( sd ){
- ARR_FIND(1, 6, i, sd->talisman[i] > 0);
- if( i < 5 ){
- val1 = sd->talisman[i]; // no. of aura
- val2 = i; // aura type
- limit += val1 * 1000;
- subunt = i - 1;
- pc_del_talisman(sd, sd->talisman[i], i);
+ break;
+ case SC_BLOODYLUST:
+ skill_clear_group(src, 32);
+ break;
+ case GN_WALLOFTHORN:
+ if( flag&1 )
+ limit = 3000;
+ val3 = (x<<16)|y;
+ break;
+ case KO_ZENKAI:
+ if( sd ){
+ ARR_FIND(1, 6, i, sd->talisman[i] > 0);
+ if( i < 5 ){
+ val1 = sd->talisman[i]; // no. of aura
+ val2 = i; // aura type
+ limit += val1 * 1000;
+ subunt = i - 1;
+ pc_del_talisman(sd, sd->talisman[i], i);
+ }
}
- }
- break;
+ break;
}
nullpo_retr(NULL, group=skill_initunitgroup(src,layout->count,skill_id,skill_lv,skill_get_unit_id(skill_id,flag&1)+subunt, limit, interval));
@@ -10910,8 +10918,7 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill
}
limit = group->limit;
- for( i = 0; i < layout->count; i++ )
- {
+ for( i = 0; i < layout->count; i++ ) {
struct skill_unit *unit;
int ux = x + layout->dx[i];
int uy = y + layout->dy[i];
@@ -10924,65 +10931,61 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill
if( battle_config.skill_wall_check && skill_get_unit_flag(skill_id)&UF_PATHCHECK && !path_search_long(NULL,src->m,ux,uy,x,y,CELL_CHKWALL) )
continue; // no path between cell and center of casting.
- switch( skill_id )
- {
- case MG_FIREWALL:
- case NJ_KAENSIN:
- val2=group->val2;
- break;
- case WZ_ICEWALL:
- val1 = (skill_lv <= 1) ? 500 : 200 + 200*skill_lv;
- val2 = map_getcell(src->m, ux, uy, CELL_GETTYPE);
- break;
- case HT_LANDMINE:
- case MA_LANDMINE:
- case HT_ANKLESNARE:
- case HT_SHOCKWAVE:
- case HT_SANDMAN:
- case MA_SANDMAN:
- case HT_FLASHER:
- case HT_FREEZINGTRAP:
- case MA_FREEZINGTRAP:
- case HT_TALKIEBOX:
- case HT_SKIDTRAP:
- case MA_SKIDTRAP:
- case HT_CLAYMORETRAP:
- case HT_BLASTMINE:
- /**
- * Ranger
- **/
- case RA_ELECTRICSHOCKER:
- case RA_CLUSTERBOMB:
- case RA_MAGENTATRAP:
- case RA_COBALTTRAP:
- case RA_MAIZETRAP:
- case RA_VERDURETRAP:
- case RA_FIRINGTRAP:
- case RA_ICEBOUNDTRAP:
- val1 = 3500;
- break;
- case GS_DESPERADO:
- val1 = abs(layout->dx[i]);
- val2 = abs(layout->dy[i]);
- if (val1 < 2 || val2 < 2) { //Nearby cross, linear decrease with no diagonals
- if (val2 > val1) val1 = val2;
- if (val1) val1--;
- val1 = 36 -12*val1;
- } else //Diagonal edges
- val1 = 28 -4*val1 -4*val2;
- if (val1 < 1) val1 = 1;
- val2 = 0;
- break;
- case WM_REVERBERATION:
- val1 = 1 + skill_lv;
- break;
- case GN_WALLOFTHORN:
- val1 = 1000 * skill_lv; // Need official value. [LimitLine]
- break;
- default:
- if (group->state.song_dance&0x1)
- val2 = unit_flag&(UF_DANCE|UF_SONG); //Store whether this is a song/dance
- break;
+ switch( skill_id ) {
+ case MG_FIREWALL:
+ case NJ_KAENSIN:
+ val2=group->val2;
+ break;
+ case WZ_ICEWALL:
+ val1 = (skill_lv <= 1) ? 500 : 200 + 200*skill_lv;
+ val2 = map_getcell(src->m, ux, uy, CELL_GETTYPE);
+ break;
+ case HT_LANDMINE:
+ case MA_LANDMINE:
+ case HT_ANKLESNARE:
+ case HT_SHOCKWAVE:
+ case HT_SANDMAN:
+ case MA_SANDMAN:
+ case HT_FLASHER:
+ case HT_FREEZINGTRAP:
+ case MA_FREEZINGTRAP:
+ case HT_TALKIEBOX:
+ case HT_SKIDTRAP:
+ case MA_SKIDTRAP:
+ case HT_CLAYMORETRAP:
+ case HT_BLASTMINE:
+ case RA_ELECTRICSHOCKER:
+ case RA_CLUSTERBOMB:
+ case RA_MAGENTATRAP:
+ case RA_COBALTTRAP:
+ case RA_MAIZETRAP:
+ case RA_VERDURETRAP:
+ case RA_FIRINGTRAP:
+ case RA_ICEBOUNDTRAP:
+ val1 = 3500;
+ break;
+ case GS_DESPERADO:
+ val1 = abs(layout->dx[i]);
+ val2 = abs(layout->dy[i]);
+ if (val1 < 2 || val2 < 2) { //Nearby cross, linear decrease with no diagonals
+ if (val2 > val1) val1 = val2;
+ if (val1) val1--;
+ val1 = 36 -12*val1;
+ } else //Diagonal edges
+ val1 = 28 -4*val1 -4*val2;
+ if (val1 < 1) val1 = 1;
+ val2 = 0;
+ break;
+ case WM_REVERBERATION:
+ val1 = 1 + skill_lv;
+ break;
+ case GN_WALLOFTHORN:
+ val1 = 1000 * skill_lv; // Need official value. [LimitLine]
+ break;
+ default:
+ if (group->state.song_dance&0x1)
+ val2 = unit_flag&(UF_DANCE|UF_SONG); //Store whether this is a song/dance
+ break;
}
if (skill_get_unit_flag(skill_id) & UF_RANGEDSINGLEUNIT && i == (layout->count / 2))
val2 |= UF_RANGEDSINGLEUNIT; // center.