summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Renewal.txt10
-rw-r--r--conf/battle/player.conf2
-rw-r--r--conf/char_athena.conf2
-rw-r--r--db/Changelog.txt10
-rw-r--r--db/const.txt31
-rw-r--r--db/item_db.txt38
-rw-r--r--db/item_delay.txt10
-rw-r--r--db/produce_db.txt29
-rw-r--r--db/refine_db.txt10
-rw-r--r--db/skill_cast_db.txt37
-rw-r--r--db/skill_db.txt26
-rw-r--r--db/skill_require_db.txt58
-rw-r--r--doc/3rd_job_notes.txt27
-rw-r--r--npc/jobs/3-1/archbishop.txt21
-rw-r--r--src/map/battle.c28
-rw-r--r--src/map/clif.c37
-rw-r--r--src/map/pc.c9
-rw-r--r--src/map/skill.c139
-rw-r--r--src/map/skill.h5
-rw-r--r--src/map/status.c104
-rw-r--r--src/map/status.h68
21 files changed, 480 insertions, 221 deletions
diff --git a/Changelog-Renewal.txt b/Changelog-Renewal.txt
index 6ae61d8c8..cdeeaf2e3 100644
--- a/Changelog-Renewal.txt
+++ b/Changelog-Renewal.txt
@@ -1,5 +1,15 @@
Date Added
+2011/09/30
+ * Rev. 14963 Just a slew of back-logged source updates. [L0ne_W0lf]
+ * Fixed skill_calc_heal applying heal bonuses only to AL_HEAL.
+ * Still working on updating the status window to display properly.
+ * Refine bonuses on armor now apply properly. (+1 additional bonus for every 4 refines.) Refining in general now goes up to 20.
+ * Criticals will now no longer ignore defense, but will still always hit.
+ * Converted m/def2 to a short, for testing status window update, will eventually need to surpass 32k. Good like this for now while we work on it.
+ * Cleaned up some minor things relating tot he arch bishop skill update.
+ * Applied some of the 30/08/2011 kRO updates to arch bishop skills.
+ * Added more SI_ Constants from newer clients to status.h.
2011/08/28
* Rev. 14948 Fixed Blessing crashing the server when used on monsters, monster weapon attack mechanics are currently unknown. [L0ne_W0lf]
* Updated conditions for UNT_EPICLESIS and AB_ADORAMUS (two cases of || to &&.)
diff --git a/conf/battle/player.conf b/conf/battle/player.conf
index 0dd5da163..005570c9c 100644
--- a/conf/battle/player.conf
+++ b/conf/battle/player.conf
@@ -101,7 +101,7 @@ max_baby_third_parameter: 108
// NOTE: does not affects skills and status effects like Mental Strength
// If weapon_defense_type is non-zero, it won't apply to max def.
// If magic_defense_type is non-zero, it won't apply to max mdef.
-max_def: 9999
+max_def: 32767
// Def to Def2 conversion bonus. If the armor def/mdef exceeds max_def,
// the remaining is converted to vit def/int mdef using this multiplier
diff --git a/conf/char_athena.conf b/conf/char_athena.conf
index 8e109f4da..512f3cb97 100644
--- a/conf/char_athena.conf
+++ b/conf/char_athena.conf
@@ -10,7 +10,7 @@ passwd: p1
// Server name, use alternative character such as ASCII 160 for spaces.
// NOTE: Do not use spaces in the name, or guild emblems won't work client-side!
-server_name: eAthena
+server_name: eAthenaRE
// Wisp name for server: used to send wisp from server to players (between 4 to 23 characters)
wisp_server_name: Server
diff --git a/db/Changelog.txt b/db/Changelog.txt
index f3b0b4423..f81d9acd0 100644
--- a/db/Changelog.txt
+++ b/db/Changelog.txt
@@ -9,6 +9,16 @@
13005 Angelic Wing Dagger: NEED INFO.
=======================
+2011/09/30
+ * Rev. 14963 Minor changes from kRO's 30/08/2011 maintainence, and general updates. [L0ne_W0lf]
+ * Added constants to the database for future updates.
+ * Updated Runestones and creation items.
+ * Added Runestone delays to item_delay.
+ * Added Runestones receipies to produce_db.
+ * Added dummy rates to refine_db.
+ * Added Rune Knight skills to skill_cast_db
+ * Updated Rune Knight skills, and Arch Bishop skills.
+ * Updated SP requirements in skill_require_db.
2011/08/26
* Rev. 14941 Several updates in relation to 3rd jobs. [L0ne_W0lf]
2011/08/10
diff --git a/db/const.txt b/db/const.txt
index f2d328118..397ef366e 100644
--- a/db/const.txt
+++ b/db/const.txt
@@ -252,6 +252,21 @@ EAJ_BABY_SOUL_LINKER 0x2207
Option_Wedding 0x1000
Option_Xmas 0x10000
Option_Summer 0x40000
+Option_Dragon1 0x80000
+Option_Wug 0x100000
+Option_Wugrider 0x200000
+Option_Madogear 0x400000
+Option_Dragon2 0x800000
+Option_Dragon3 0x1000000
+Option_Dragon4 0x2000000
+Option_Dragon5 0x4000000
+Option_Riding2 0x8000000
+
+DRAGON_GREEN 0
+DRAGON_BLACK 1
+DRAGON_WHITE 2
+DRAGON_BLUE 3
+DRAGON_RED 4
bc_all 0
bc_map 1
@@ -671,6 +686,8 @@ SC_CONFUSION 7
SC_BLIND 8
SC_BLEEDING 9
SC_DPOISON 10
+//SC_FEAR 11
+//SC_BURNING 12
SC_PROVOKE 20
SC_ENDURE 21
SC_TWOHANDQUICKEN 22
@@ -959,7 +976,7 @@ SC_PARTYFLEE 310
//SC_ENDURE_MDEF 311
//SC_ENCHANTBLADE 312
//SC_DEATHBOUND 313
-//SC_REFRESH 314
+//SC_REUSE_REFRESH 314
//SC_GIANTGROWTH 315
//SC_STONEHARDSKIN 316
//SC_VITALITYACTIVATION 317
@@ -2127,3 +2144,15 @@ IT_PETARMOR 8
IT_AMMO 10
IT_DELAYCONSUME 11
IT_CASH 18
+
+Runestone_Ordinary 12737
+Runestone_Quality 12734
+Runestone_Rare 12738
+Runestone_Ancient 12735
+Runestone_Mystic 12736
+
+Produce_Weaponlvl1 1
+Produce_Weaponlvl2 2
+Produce_Weaponlvl3 3
+Produce_Materials 21
+Produce_Runestone 24
diff --git a/db/item_db.txt b/db/item_db.txt
index 40664d379..71c5bdab5 100644
--- a/db/item_db.txt
+++ b/db/item_db.txt
@@ -115,10 +115,10 @@
609,Amulet,Amulet,2,100,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
610,Leaf_Of_Yggdrasil,Yggdrasil Leaf,11,4000,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "ALL_RESURRECTION",1; },{},{}
611,Spectacles,Magnifier,11,40,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "MC_IDENTIFY",1; },{},{}
-612,Portable_Furnace,Mini Furnace,2,150,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 21; },{},{}
-613,Iron_Hammer,Iron Hammer,2,1000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 1; },{},{}
-614,Golden_Hammer,Golden Hammer,2,3000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 2; },{},{}
-615,Oridecon_Hammer,Oridecon Hammer,2,5000,,400,,,,,0xFFFFFFFF,7,2,,,,,,{ produce 3; },{},{}
+612,Portable_Furnace,Mini Furnace,2,150,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Materials; },{},{}
+613,Iron_Hammer,Iron Hammer,2,1000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl1; },{},{}
+614,Golden_Hammer,Golden Hammer,2,3000,,300,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl2; },{},{}
+615,Oridecon_Hammer,Oridecon Hammer,2,5000,,400,,,,,0xFFFFFFFF,7,2,,,,,,{ produce Produce_Weaponlvl3; },{},{}
616,Old_Card_Album,Old Card Album,2,10000,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_CardAlbum),1; },{},{}
617,Old_Violet_Box,Old Purple Box,2,10000,,200,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_VioletBox),1; },{},{}
618,Worn_Out_Scroll,Worn Out Scroll,2,50,,20,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem groupranditem(IG_ScrollBox),1; },{},{}
@@ -2809,7 +2809,7 @@
//5477,Bro_Flag,Brazilian Flag Hat,5,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,30,1,474,{ skill "SM_BASH",1; },{},{}
//5478,Classic_Hat,Classic Hat,5,20,,500,,3,,0,0xFFFFFFFF,7,2,256,,0,1,475,{ bonus bStr,2; bonus bMaxHP,300; },{},{}
5479,Shaman's_Hair_Ornament,Shaman's Hair Decoration,5,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,30,1,476,{ bonus bMdef,3; bonus bMaxHP,50; bonus2 bSubEle,Ele_Neutral,5; if(isequipped(2777,2778)) { bonus bMaxHP,300; bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,5; } },{},{}
-5480,Bizofnil_Wing_Deco,Bijofnil Wings,5,20,,1000,,3,,0,0xFFFFFFFF,7,2,256,,30,1,477,{ bonus bAllStats,2; bonus3 bAutoSpell,"PR_IMPOSITIO",3,3; },{},{}
+5480,Bizofnil_Wing_Deco,Bijofnil Wings,5,20,,1000,,3,,0,0xFFFFFFFF,7,2,256,,30,1,477,{ bonus bAllStats,2; bonus3 bAutoSpell,"PR_IMPOSITIO",3,3; },{},{}
5481,Hermose_Cap,Hermode Cap,5,20,,1000,,1,,1,0xFFFFFFFF,7,2,256,,1,1,478,{ bonus bAspdRate,10; bonus bBaseAtk,-20; bonus bMatkRate,-10; },{},{}
5482,Dark_Knight_Mask,Dark Knight Mask,5,,,3000,,5,,0,0xFFFFFFFF,7,2,769,,80,1,479,{ bonus bStr,3; if(isequipped(2779,2780)) { bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; } },{},{}
5483,Odin_Mask,Odin Mask,5,20,,100,,1,,0,0xFFFFFFFF,7,2,513,,50,0,480,{ bonus bHit,-10; bonus2 bAddRace,RC_Demihuman,6; },{},{}
@@ -5309,20 +5309,20 @@
12722,Poison_Fever,Pyrexia,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12723,Poison_Laughing,Magic Mushroom,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12724,Poison_Fatigue,Venom Bleed,2,2,,20,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12725,Runstone_Nosiege,Nosiege Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12726,Runstone_Rhydo,Rhydo Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12727,Runstone_Verkana,Verkana Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12728,Runstone_Isia,Isia Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12729,Runstone_Asir,Asir Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12730,Runstone_Urj,Urj Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12731,Runstone_Turisus,Turisus Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12732,Runstone_Pertz,Pertz Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12733,Runstone_Hagalas,Hagalas Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12734,Runstone_Quality,Quality Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12735,Runstone_Ancient,Ancient Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12736,Runstone_Mystic,Mystic Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12737,Runstone_Ordinary,General Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
-12738,Runstone_Rare,Rare Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
+12725,Runstone_Nosiege,Nosiege Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_REFRESH",1; },{},{}
+12726,Runstone_Rhydo,Rydo Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_CRUSHSTRIKE",1; },{},{}
+12727,Runstone_Verkana,Verkana Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_MILLENNIUMSHIELD",1; },{},{}
+12728,Runstone_Isia,Isia Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_VITALITYACTIVATION",1; },{},{}
+12729,Runstone_Asir,Asir Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_FIGHTINGSPIRIT",1; },{},{}
+12730,Runstone_Urj,Urj Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_ABUNDANCE",1; },{},{}
+12731,Runstone_Turisus,Tursius Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_GIANTGROWTH",1; },{},{}
+12732,Runstone_Pertz,Pertz Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_STORMBLAST",1; },{},{}
+12733,Runstone_Hagalas,Hagalas Runestone,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_STONEHARDSKIN",1; },{},{}
+12734,Runstone_Quality,Quality Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Quality; */ },{},{}
+12735,Runstone_Ancient,Ancient Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Ancient; */ },{},{}
+12736,Runstone_Mystic,Mystic Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Mystic; */ },{},{}
+12737,Runstone_Ordinary,General Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Ordinary; */ },{},{}
+12738,Runstone_Rare,Rare Rough Runestone,2,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ /* produce Produce_Runestone,Runestone_Rare; */ },{},{}
12739,Snow_Flower,Snow Flowers,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12740,Inc_Str_Scroll,Amplification Scroll,2,1,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
12741,Inc_Int_Scroll,Intellect Amplification Scroll,2,1,,0,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
diff --git a/db/item_delay.txt b/db/item_delay.txt
index a0b1389bd..c3ebc47aa 100644
--- a/db/item_delay.txt
+++ b/db/item_delay.txt
@@ -14,3 +14,13 @@
12210,60000 //Bubble_Gum
14538,300000 //Glass_Of_Illusion
14586,180000 //Spark_Candy
+// Third Jobs
+// Rune Knight Runestones.
+12725,21600000 //Runstone_Nosiege
+12727,21600000 //Runstone_Verkana
+12728,18000000 //Runstone_Isia
+12729,18000000 //Runstone_Asir
+12730,18000000 //Runstone_Urj
+12731,18000000 //Runstone_Turisus
+12732,18000000 //Runstone_Pertz
+12733,18000000 //Runstone_Hagalas
diff --git a/db/produce_db.txt b/db/produce_db.txt
index cdd30f5cc..f24d1ba93 100644
--- a/db/produce_db.txt
+++ b/db/produce_db.txt
@@ -396,9 +396,32 @@
//==============================================
-//===== Third Class === ItemLV=24 ==================
+//===== Third Class === ItemLV=?? ==============
+
+//---- Rune Kight ------------------------------
+//--- Tursius Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Cobold_Hair 1, Claw_Of_Desert_Wolf 1
+12731,24,2010,1,7939,1,1034,1,7030,1
+//--- Isia Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Burning_Heart 1
+12728,24,2010,2,7939,1,7097,1
+//--- Pertz Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Tangled_Chain 1, Dragon_Canine 1
+12732,24,2010,3,7939,1,7938,1,7221,1,1035,1
+//--- Hagalas Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Round_Shell 1, Dragon's_Skin 1
+12733,24,2010,4,7939,1,1096,1,7123,1
+//--- Asir Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Ogre_Tooth 1
+12729,24,2010,5,7939,1,7938,1,7002,1
+//--- Urj Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Slender_Snake 1, Honey 1
+12730,24,2010,6,7939,1,1048,1,518,1
+//--- Rhydo Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Red_Gemstone 1
+12726,24,2010,7,7939,1,7938,1,716,1
+//--- Noseige Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Light_Granule 1, Broken_Armor_Piece 1, Old_Magic_Circle 1
+12725,24,2010,8,7939,2,7938,2,7069,1,618,1
+//--- Verkana Runestone <-- RK_RUNEMASTERY & Elder_Branch 1, Dullahan_Armor 1
+12727,24,2010,9,7939,1,7210,1
+//----------------------------------------------
-//----------------------------------------------------------------------------------------------------------------------------
+//---- Arch Bishop -----------------------------
//-- Ancilla <-- AB_ANCILLA & 1 Blue Gemstone
12333,22,2039,1,717,1
-//----------------------------------------------------------------------------------------------------------------------------
+//----------------------------------------------
+
+//==============================================
diff --git a/db/refine_db.txt b/db/refine_db.txt
index ee234dc6a..1626fa6d8 100644
--- a/db/refine_db.txt
+++ b/db/refine_db.txt
@@ -3,8 +3,8 @@
// Armor defense is done in percentage (ie 70 = .7 def)
// Weapons are whole numbers (ie 3 = 3 atk)
- 100, 200, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, // Armor
- 2, 3, 7, 100,100,100,100,100,100,100, 60, 40, 20, // Lv.1 Weapons
- 3, 5, 6, 100,100,100,100,100,100, 60, 40, 20, 20, // Lv.2 Weapons
- 5, 8, 5, 100,100,100,100,100, 60, 50, 20, 20, 20, // Lv.3 Weapons
- 7, 13, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, // Lv.4 Weapons
+ 100, 200, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Armor
+ 2, 3, 7, 100,100,100,100,100,100,100, 60, 40, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.1 Weapons
+ 3, 5, 6, 100,100,100,100,100,100, 60, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.2 Weapons
+ 5, 8, 5, 100,100,100,100,100, 60, 50, 20, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.3 Weapons
+ 7, 13, 4, 100,100,100,100, 60, 40, 40, 20, 20, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, // Lv.4 Weapons
diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt
index f21ee043f..d2fe73298 100644
--- a/db/skill_cast_db.txt
+++ b/db/skill_cast_db.txt
@@ -1051,6 +1051,43 @@
1019,2000,2000,1000,0,0,1800000,0
//==========================================
+//===== Rune Knight ========================
+//-- RK_ENCHANTBLADE
+2001,1000,0,0,0,0,300000,0
+//-- RK_SONICWAVE
+2002,0,0,1000,2000,0,0,0
+//-- RK_DEATHBOUND
+2003,0,0,2000,3000,0,2000,0
+//-- RK_HUNDREDSPEAR
+2004,1000,0,500,0,0,0,0
+//-- RK_WINDCUTTER - Duration1: Fear status duration
+2005,0,0,0,2000,0,15000,0
+//-- RK_IGNITIONBREAK
+2006,1000,0,0,2000,0,0,0
+
+//-- RK_DRAGONBREATH - Duration1: Burning status duration
+2008,0:0:0:1000:1000:1000:1500:1500:2000:2000,500,2000,0,0,10000,0
+//-- RK_DRAGONHOWLING - Duration1: FIT/FLEE Reduction duration; Duration2: Fear status duration
+2009,0,0,0,60000,0,15000,2000
+
+//-- RK_MILLENNIUMSHIELD
+2011,0,0,1000,0,0,30000,0
+//-- RK_CRUSHSTRIKE
+2012,0,1000,0,60000,0,120000,0
+//-- RK_REFRESH
+2013,0,1000,0,0,0,30000,0
+//-- RK_GIANTGROWTH
+2014,0,1000,0,0,0,300000,0
+//-- RK_STONEHARDSKIN
+2015,0,2000,0,0,0,300000,0
+//-- RK_VITALITYACTIVATION
+2016,0,0,0,0,0,300000,0
+//-- RK_STORMBLAST
+2017,2000,1000,0,0,0,0,0
+//-- RK_FIGHTINGSPIRIT
+2018,0,0,0,0,0,300000,0
+//-- RK_ABUNDANCE
+2019,0,0,0,0,0,300000,0
//===== Archbishop =========================
//-- AB_JUDEX
diff --git a/db/skill_db.txt b/db/skill_db.txt
index 0af1014d2..e67ab2ba6 100644
--- a/db/skill_db.txt
+++ b/db/skill_db.txt
@@ -664,26 +664,26 @@
1019,9,6,1,4,0x1,0,1,1,yes,0,0x1,0,magic,0, SA_ELEMENTWIND,Elemental Change Wind
// Third Job Skills
-2001,-1,6,16,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,RK_ENCHANTBLADE
-2002,7:8:9:10:11,6,1,0,0x04,0,5,1,yes,0,0,0,weapon,0, RK_SONICWAVE,RK_SONICWAVE
-2003,0,6,4,0,0x1,0,10,1,yes,0,0,0,weapon,0, RK_DEATHBOUND,RK_DEATHBOUND
-2004,-1,8,1,0,0,0,10,5,yes,0,0,0,weapon,0, RK_HUNDREDSPEAR,RK_HUNDREDSPEAR
-2005,-1,6,2,4,0x6,0,5,1,yes,0,0,0,weapon,3, RK_WINDCUTTER,RK_WINDCUTTER
-2006,0,6,4,0,0x6,0,5,1,no,0,0,0,weapon,0, RK_IGNITIONBREAK,RK_IGNITIONBREAK
+2001,-1,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, RK_ENCHANTBLADE,RK_ENCHANTBLADE
+2002,7:8:9:10:11,6,1,-1,0,0,5,1,yes,0,0,0,weapon,0, RK_SONICWAVE,RK_SONICWAVE
+2003,0,0,4,0,0x1,0,10,1,no,0,0,0,weapon,3, RK_DEATHBOUND,RK_DEATHBOUND
+2004,-1,8,1,-1,0,0,10,5,no,0,0,0,weapon,0, RK_HUNDREDSPEAR,RK_HUNDREDSPEAR
+2005,-1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3, RK_WINDCUTTER,RK_WINDCUTTER
+2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0, RK_IGNITIONBREAK,RK_IGNITIONBREAK
2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0, RK_DRAGONTRAINING,RK_DRAGONTRAINING
-2008,9,6,2,3,0x6,0,10,1,no,0,0,0,weapon,0, RK_DRAGONBREATH,RK_DRAGONBREATH
+2008,9,6,2,3,0xC0,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0, RK_DRAGONBREATH,RK_DRAGONBREATH
2009,0,6,4,0,0x1,0,5,1,yes,0,0,0,weapon,0, RK_DRAGONHOWLING,RK_DRAGONHOWLING
2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0, RK_RUNEMASTERY,RK_RUNEMASTERY
2011,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_MILLENNIUMSHIELD,RK_MILLENNIUMSHIELD
-2012,-1,6,1,0,0,0,1,1,no,0,0,0,weapon,0, RK_CRUSHSTRIKE,RK_CRUSHSTRIKE
+2012,-1,6,4 ,-1,0,0,1,1,no,0,0,0,weapon,0, RK_CRUSHSTRIKE,RK_CRUSHSTRIKE
2013,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_REFRESH,RK_REFRESH
2014,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_GIANTGROWTH,RK_GIANTGROWTH
2015,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_STONEHARDSKIN,RK_STONEHARDSKIN
2016,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_VITALITYACTIVATION,RK_VITALITYACTIVATION
-2017,0,6,4,0,0,0,1,1,no,0,0,0,weapon,0, RK_STORMBLAST,RK_STORMBLAST
-2018,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_FIGHTINGSPIRIT,RK_FIGHTINGSPIRIT
+2017,0,6,4,3,0x2,3,1,1,no,0,0,0,weapon,7, RK_STORMBLAST,RK_STORMBLAST
+2018,0,0,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_FIGHTINGSPIRIT,RK_FIGHTINGSPIRIT
2019,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, RK_ABUNDANCE,RK_ABUNDANCE
-2020,5:6:7:8:9,6,16,0,0x6,0,5,1,yes,0,0,0,weapon,0, RK_PHANTOMTHRUST,RK_PHANTOMTHRUST
+2020,5:6:7:8:9,6,16,-1,0,0,5,1,no,0,0,0,misc,0, RK_PHANTOMTHRUST,RK_PHANTOMTHRUST
2021,9,6,1,0,0x1,0,5,1,yes,0,0,0,none,0, GC_VENOMIMPRESS,GC_VENOMIMPRESS
2022,3,8,1,0,0,0,5,7,no,0,0,0,weapon,0, GC_CROSSIMPACT,GC_CROSSIMPACT
2023,3:4:5:6:7,6,1,0,0,0,5,1,no,0,0,0,weapon,0, GC_DARKILLUSION,GC_DARKILLUSION
@@ -701,7 +701,7 @@
2035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, GC_HALLUCINATIONWALK,GC_HALLUCINATIONWALK
2036,0,6,4,0,0,0,5,1,no,0,0,0,weapon,0, GC_ROLLINGCUTTER,GC_ROLLINGCUTTER
2037,7,8,1,0,0,0,5,1,no,0,0,0,weapon,0, GC_CROSSRIPPERSLASHER,GC_CROSSRIPPERSLASHER
-2038,11,8,1,6,0x2,3,5,-3,yes,0,0,0,magic,0, AB_JUDEX,Judex
+2038,11,8,1,6,0x2,2,5,-3,yes,0,0,0,magic,0, AB_JUDEX,Judex
2039,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0, AB_ANCILLA,Ancilla
2040,11,8,1,6,0,0,10,-10,yes,0,0,0,magic,0, AB_ADORAMUS,Adoramus
2041,0,6,4,0,0x3,3:7:15,3,1,yes,0,0,0,magic,0, AB_CLEMENTIA,Clementia
@@ -716,7 +716,7 @@
2050,11,6,16,6,0x1,0,1,1,yes,0,0,0,magic,0, AB_RENOVATIO,Renovatio
2051,11,6,16,6,0x1,0,5,1,yes,0,0,0,magic,0, AB_HIGHNESSHEAL,High Heal
2052,11,6,1,0,0x1,0,5,1,yes,0,0x600,0,magic,0, AB_CLEARANCE,Clearance
-2053,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0, AB_EXPIATIO,Exipatio
+2053,11,6,16,0,0x1,0,5,0,yes,0,0x1000,0,none,0, AB_EXPIATIO,Exipatio
2054,11,6,4,0,0x1,0,10,1,yes,0,0,0,none,0, AB_DUPLELIGHT,Duple Light
2055,11,6,1,0,0,0,10,1,yes,0,0,0,weapon,0, AB_DUPLELIGHT_MELEE,Duple Light (Melee)
2056,11,6,1,0,0,0,10,1,yes,0,0,0,magic,0, AB_DUPLELIGHT_MAGIC,Duple Light (Magic)
diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt
index 635f856e8..7903b8fd8 100644
--- a/db/skill_require_db.txt
+++ b/db/skill_require_db.txt
@@ -19,6 +19,9 @@
// explosionspirits = Requires Fury skill activated
// cartboost = Requires a Pushcart and Cart Boost skill activated
// shield = Requires a 0,shield equipped
+// dragon = requires Rune Knight dragon mount.
+// warg = requires Sniper Warg.
+// madogear = requires Mechanic Mado Gear.
5,0,0,8:8:8:8:8:15:15:15:15:15,0,0,0,0:1:2:3:4:5:6:7:8:9:10:12:13:14:15:16:17:18:19:20:21:22,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SM_BASH#バッシュ#
6,0,0,4:5:6:7:8:9:10:11:12:13,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SM_PROVOKE#プロボック#
@@ -462,6 +465,7 @@
2006,0,0,35:40:45:50:55,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_IGNITIONBREAK
2008,0,0,5:10:15:20:25:30:35:40:45:50,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH
2009,0,0,5:10:15:20:25:30:35:40:45:50,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING
+2012,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_CRUSHSTRIKE
2020,0,0,15:18:21:24:27,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_PHANTOMTHRUST
2021,0,0,12:16:20:24:28,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GC_VENOMIMPRESS
@@ -484,11 +488,11 @@
2038,0,0,30:33:36:39:42,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_JUDEX
2039,0,0,30,0,30,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ANCILLA
2040,0,0,22:28:34:40:46:52:58:64:70:76,0,0,0,99,0,0,none,0,717,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ADORAMUS
-2041,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CLEMENTIA
-2042,0,0,145:160:175,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CANTO
-2043,0,0,130:145:160,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CHEAL
+2041,0,0,280:320:360,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CLEMENTIA
+2042,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CANTO
+2043,0,0,200:220:240,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_CHEAL
2044,0,0,300,0,0,0,99,0,0,none,0,12333,1,523,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_EPICLESIS
-2045,0,0,60:70:80:90:100:110:120:130:140:150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_PRAEFATIO
+2045,0,0,90:100:110:120:130:140:150:160:170:180,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_PRAEFATIO
2046,0,0,35:38:41:44:47:50:53:56:59:62,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_ORATIO
2047,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_LAUDAAGNUS
2048,0,0,50:60:70:80,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_LAUDARAMUS
@@ -528,10 +532,10 @@
2238,0,0,35,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ELECTRICSHOCKER
2239,0,0,20,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_CLUSTERBOMB
2240,0,0,5,0,0,0,99,0,0,none,0,6124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY
-2241,0,0,20,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGRIDER
-2242,0,0,40,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGDASH
-2243,0,0,30:32:34:36:38,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE
-2244,0,0,40:44:46:48:50,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGBITE
+2241,0,0,20,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGRIDER
+2242,0,0,40,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGDASH
+2243,0,0,30:32:34:36:38,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE
+2244,0,0,40:44:46:48:50,0,0,0,99,0,0,warg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGBITE
2246,0,0,10,0,0,0,99,0,0,wolf,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_SENSITIVEKEEN
2247,0,0,40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_CAMOUFLAGE
2249,0,0,10,0,0,0,99,0,0,none,0,7940,1,990,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_MAGENTATRAP
@@ -541,25 +545,25 @@
2253,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP
2254,0,0,10,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP
-2256,0,0,3:6:9:12:15,0,0,0,99,0,0,gear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE
-2257,0,0,50,0,0,0,99,0,0,gear,0,1549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_PILEBUNKER
-2258,0,0,2,0,0,0,99,0,0,gear,0,6145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_VULCANARM
-2259,0,0,20,0,0,0,99,0,0,gear,0,2139,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER
-2260,0,0,20,0,0,0,99,0,0,gear,0,6147,1,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_COLDSLOWER
-2261,0,0,30:45:60,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ARMSCANNON
-2262,0,0,20:40:60,0,0,0,99,0,0,gear,0,2800,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ACCELERATION
-2263,0,0,25,0,0,0,99,0,0,gear,0,2801,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_HOVERING
-2264,0,0,20,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE
-2265,0,0,20,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE
-2267,0,0,200,0,0,0,99,0,0,gear,0,2802,0,6146,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION
-2268,0,0,100,0,0,0,99,0,0,gear,0,2803,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT
-2269,0,0,20,0,0,0,99,0,0,gear,0,2804,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL
-2270,0,0,45,0,0,0,99,0,0,gear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN
-2271,0,0,30,0,0,0,99,0,0,gear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ANALYZE
-2272,0,0,90,0,0,0,99,0,0,gear,0,2805,0,6146,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD
-2273,0,0,90,0,0,0,99,0,0,gear,0,2806,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER
-2274,0,0,100:150:200,0,0,0,99,0,0,gear,0,2808,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_STEALTHFIELD
-2275,0,0,25:30:35:40:45,0,0,0,99,0,0,gear,0,2807,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_REPAIR
+2256,0,0,3:6:9:12:15,0,0,0,99,0,0,madogear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_BOOSTKNUCKLE
+2257,0,0,50,0,0,0,99,0,0,madogear,0,1549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_PILEBUNKER
+2258,0,0,2,0,0,0,99,0,0,madogear,0,6145,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_VULCANARM
+2259,0,0,20,0,0,0,99,0,0,madogear,0,2139,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_FLAMELAUNCHER
+2260,0,0,20,0,0,0,99,0,0,madogear,0,6147,1,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_COLDSLOWER
+2261,0,0,30:45:60,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ARMSCANNON
+2262,0,0,20:40:60,0,0,0,99,0,0,madogear,0,2800,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ACCELERATION
+2263,0,0,25,0,0,0,99,0,0,madogear,0,2801,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_HOVERING
+2264,0,0,20,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_F_SIDESLIDE
+2265,0,0,20,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_B_SIDESLIDE
+2267,0,0,200,0,0,0,99,0,0,madogear,0,2802,0,6146,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SELFDESTRUCTION
+2268,0,0,100,0,0,0,99,0,0,madogear,0,2803,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_SHAPESHIFT
+2269,0,0,20,0,0,0,99,0,0,madogear,0,2804,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_EMERGENCYCOOL
+2270,0,0,45,0,0,0,99,0,0,madogear,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_INFRAREDSCAN
+2271,0,0,30,0,0,0,99,0,0,madogear,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_ANALYZE
+2272,0,0,90,0,0,0,99,0,0,madogear,0,2805,0,6146,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_MAGNETICFIELD
+2273,0,0,90,0,0,0,99,0,0,madogear,0,2806,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_NEUTRALBARRIER
+2274,0,0,100:150:200,0,0,0,99,0,0,madogear,0,2808,0,6146,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_STEALTHFIELD
+2275,0,0,25:30:35:40:45,0,0,0,99,0,0,madogear,0,2807,0,6146,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_REPAIR
2278,0,0,20:22:24:26:28,0,0,0,6:7:,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_AXEBOOMERANG
2279,0,0,10:12:14:16:18,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_POWERSWING
2280,20:40:60:80:100,0,18:20:22:24:26,0,0,0,6:7,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NC_AXETORNADO
diff --git a/doc/3rd_job_notes.txt b/doc/3rd_job_notes.txt
index 64b737eba..e8a79e238 100644
--- a/doc/3rd_job_notes.txt
+++ b/doc/3rd_job_notes.txt
@@ -42,7 +42,6 @@ GC_CROSSRIPPERSLASHER
== Archbishop =====================================================================================
AB_JUDEX
Working
- Damage is unnaturally high-- issue with pre-RE MATK formulae?
AB_ANCILLA
Working
AB_ADORAMUS
@@ -51,37 +50,46 @@ AB_ADORAMUS
Ugly hack to cancel out using gemstone in skill_get_requirement().
Should SC_BLIND/SC_ADORAMUS be removed by speed bosting effects?
Should effects cancel simultaneously?
- Damage is unnaturally high-- issue with pre-RE MATK formulae?
AB_CLEMENTIA
Working
+ Applied kRO update (30/08/2011)
+ SP cost has changed (280/320/360).
+ Based on your job level, it can add an additional 1 ~ 5 Str/Int/Dex.
Bug: Skill name and casting sprite animation should display only on caster
AB_CANTO
Working
+ Applied kRO update (30/08/2011)
+ SP cost is changed (200/220/240).
+ Based on your job level, it can add an additional 1 ~ 5 Agi.
Bug: Skill name and casting sprite animation should display only on caster
AB_CHEAL
Working
Bug: Skill name and casting sprite animation should display only on caster
AB_EPICLESIS
Working
- Need to fix SC effect on moving out of unit.
- What skills should have an inate immuity to this skill?
+ Need to fix SC effect on moving in/out of unit.
+ What status effects should cause immunity to this skill?
has skill_check_condition_castbegin case, check to see if it can be improved.
AB_PRAEFATIO
Working
+ Applied kRO update (30/08/2011)
+ SP cost is changed (80 + SkillLv * 10).
Bug: Skill name and casting sprite animation should display only on caster
AB_ORATIO
Working
- Ugly hack to display/remove SI_ on mobs.
+ Ugly hack to display/remove SI_ORATIO on mobs.
AB_LAUDAAGNUS
Working
Should +4+Skilllv luk apply to only those not cured from a status effect?
Check: Skill name and casting sprite animation should display only on caster?
- Should this skill fail if you are the only person in/online in a party?
+ Applied kRO update (21/09/2011)
+ * Now works when casting player is not in a party.
AB_LAUDARAMUS
Working
Should +4+Skilllv luk apply to only those not cured from a status effect?
Check: Skill name and casting sprite animation should display only on caster?
- Should this skill fail if you are the only person in/online in a party?
+ Applied kRO update (21/09/2011)
+ * Now works when casting player is not in a party.
AB_EUCHARISTICA
Working
AB_RENOVATIO
@@ -92,11 +100,14 @@ AB_CLEARANCE
Working
Check: Should Soul Linkers be inately immune?
Check list a second time to see what was missed.
+ Applied kRO update (30/08/2011)
+ * Now also removes the Critical Wounds status effect.
AB_EXPIATIO
Working
+ Applied kRO update (30/08/2011)
+ * Changed from self targeted to self and other players.
AB_DUPLELIGHT
Working
- Check success rate,
Is skill_addtimerskill the best way to implement the additional attacks?
AB_DUPLELIGHT_MELEE
Working
diff --git a/npc/jobs/3-1/archbishop.txt b/npc/jobs/3-1/archbishop.txt
index a01e06b69..976a66dfa 100644
--- a/npc/jobs/3-1/archbishop.txt
+++ b/npc/jobs/3-1/archbishop.txt
@@ -1,6 +1,23 @@
+//===== eAthena Script =======================================
+//= Arch Bishop Job Quest
+//===== By: ==================================================
+//= L0ne_W0lf
+//===== Current Version: =====================================
+//= 1.1
+//===== Compatible With: =====================================
+//= eAthena SVN
+//===== Description: =========================================
+//= [Aegis Conversion]
+//= Job change script fr Third class (Arch Bishop)
+//= Does not entirely support changing to Baby Third Class.
+//===== Additional Comments: =================================
+//= 1.0 First version.
+//= 1.1 Fixed class checks for arch bishops.
+//============================================================
+
prt_church,103,88,3 script Praying Minister#arch 60,{
if (BaseJob != Job_Priest) {
- if (BaseJob == job_Archbishop) {
+ if (Class == Job_Archbishop || Class == Job_Archbishop_H || Class == Job_Baby_Bishop) {
mes "[Praying Minister]";
mes "Ah! An Archbishop.";
mes "You have reached the state of light.";
@@ -819,7 +836,7 @@ job3_arch01,29,34,3 script Valkyrie#arch 403,{
end;
}
else {
- if (BaseJob != Job_Archbishop) {
+ if (Class != Job_Archbishop || Class != Job_Archbishop_H || Class != Job_Baby_Bishop) {
if (job_arch < 5) {
warp "odin_tem02",282,263;
end;
diff --git a/src/map/battle.c b/src/map/battle.c
index dfbda4ded..711310442 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -664,11 +664,6 @@ int battle_calc_gvg_damage(struct block_list *src,struct block_list *bl,int dama
case NJ_ZENYNAGE:
break;
default:
- /* Uncomment if you want god-mode Emperiums at 100 defense. [Kisuka]
- if (md && md->guardian_data) {
- damage -= damage * (md->guardian_data->castle->defense/100) * battle_config.castle_defense_rate/100;
- }
- */
if (flag & BF_SKILL) { //Skills get a different reduction than non-skills. [Skotlex]
if (flag&BF_WEAPON)
damage = damage * battle_config.gvg_weapon_damage_rate/100;
@@ -1194,7 +1189,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if (flag.cri)
{
wd.type = 0x0a;
- flag.idef = flag.idef2 = flag.hit = 1;
+ flag.hit = 1;
} else { //Check for Perfect Hit
if(sd && sd->perfect_hit > 0 && rand()%100 < sd->perfect_hit)
flag.hit = 1;
@@ -1775,7 +1770,8 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
skill_num != ASC_BREAKER &&
skill_num != ASC_METEORASSAULT &&
skill_num != AS_SPLASHER &&
- skill_num != AS_VENOMKNIFE)
+ skill_num != AS_VENOMKNIFE &&
+ skill_num != AS_GRIMTOOTH) // RE disabled Grimtooth carrying EDP.
ATK_ADDRATE(sc->data[SC_EDP]->val3);
}
@@ -1845,7 +1841,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo
if (!flag.idef || !flag.idef2)
{ //Defense reduction
short vit_def;
- signed char def1 = status_get_def(target); //Don't use tstatus->def1 due to skill timer reductions.
+ signed short def1 = status_get_def(target); //Don't use tstatus->def1 due to skill timer reductions.
short def2 = (short)tstatus->def2;
if( sc && sc->data[SC_EXPIATIO] )
@@ -2535,7 +2531,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
skillratio = skillratio * status_get_lv(src) / 100;
break;
case AB_ADORAMUS:
- skillratio += 400 + 100 * skill_lv; //Possible RE-Formula
+ skillratio += 100 * (skill_lv + 5);
if( status_get_lv(src) >= 100 )
skillratio = skillratio * status_get_lv(src) / 100;
break;
@@ -2567,7 +2563,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
}
if(!flag.imdef){
- char mdef = tstatus->mdef;
+ short mdef = tstatus->mdef;
int mdef2= tstatus->mdef2;
if(sd) {
i = sd->ignore_mdef[is_boss(target)?RC_BOSS:RC_NONBOSS];
@@ -3194,11 +3190,11 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
damage = wd.damage + wd.damage2;
if( damage > 0 && src != target )
{
- if(sc && sc->data[SC_DUPLELIGHT]) {
+ if( sc && sc->data[SC_DUPLELIGHT] ) {
int skilllv = sc->data[SC_DUPLELIGHT]->val1;
- if(rand()%100 < sc->data[SC_DUPLELIGHT]->val2)
+ if( rand()%100 < sc->data[SC_DUPLELIGHT]->val2 )
skill_addtimerskill(src,tick+status_get_adelay(src) / 2,target->id,0,0,AB_DUPLELIGHT_MELEE,skilllv,BF_WEAPON,flag);
- else if(rand()%100 < sc->data[SC_DUPLELIGHT]->val3)
+ else if( rand()%100 < sc->data[SC_DUPLELIGHT]->val3 )
skill_addtimerskill(src,tick+status_get_adelay(src) / 2,target->id,0,0,AB_DUPLELIGHT_MAGIC,skilllv,BF_MAGIC,flag);
}
@@ -3808,7 +3804,7 @@ static const struct _battle_data {
{ "max_baby_parameter", &battle_config.max_baby_parameter, 80, 10, 10000, },
{ "max_third_parameter", &battle_config.max_third_parameter, 120, 10, 10000, },
{ "max_baby_third_parameter", &battle_config.max_baby_third_parameter, 108, 10, 10000, },
- { "max_def", &battle_config.max_def, 9999, 0, INT_MAX, },
+ { "max_def", &battle_config.max_def, SHRT_MAX, 0, INT_MAX, },
{ "over_def_bonus", &battle_config.over_def_bonus, 0, 0, 1000, },
{ "skill_log", &battle_config.skill_log, BL_NUL, BL_NUL, BL_ALL, },
{ "battle_log", &battle_config.battle_log, 0, 0, 1, },
@@ -4108,8 +4104,8 @@ void battle_adjust_conf()
battle_config.max_walk_speed = 100*DEFAULT_WALK_SPEED/battle_config.max_walk_speed;
battle_config.max_cart_weight *= 10;
- if(battle_config.max_def > 9999 && !battle_config.weapon_defense_type) // added by [Skotlex]
- battle_config.max_def = 9999;
+ if(battle_config.max_def > SHRT_MAX && !battle_config.weapon_defense_type) // added by [Skotlex]
+ battle_config.max_def = SHRT_MAX;
if(battle_config.min_hitrate > battle_config.max_hitrate)
battle_config.min_hitrate = battle_config.max_hitrate;
diff --git a/src/map/clif.c b/src/map/clif.c
index 3278a80cd..ef48e6d60 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -2487,26 +2487,22 @@ int clif_updatestatus(struct map_session_data *sd,int type)
WFIFOL(fd,4)=sd->battle_status.amotion;
break;
case SP_ATK1:
- WFIFOL(fd,4)=sd->battle_status.batk +sd->battle_status.rhw.atk +sd->battle_status.lhw.atk;
+ WFIFOL(fd,4)=sd->battle_status.batk;
break;
case SP_DEF1:
- WFIFOL(fd,4)=sd->battle_status.def;
+ WFIFOL(fd,4)=sd->battle_status.def2;
break;
case SP_MDEF1:
- WFIFOL(fd,4)=sd->battle_status.mdef;
+ WFIFOL(fd,4)= sd->battle_status.mdef2;
break;
case SP_ATK2:
- WFIFOL(fd,4)=sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2;
+ WFIFOL(fd,4)=sd->battle_status.rhw.atk + sd->battle_status.rhw.atk2 + sd->battle_status.equipment_atk;
break;
case SP_DEF2:
- WFIFOL(fd,4)=sd->battle_status.def2;
+ WFIFOL(fd,4)=sd->battle_status.def;
break;
case SP_MDEF2:
- //negative check (in case you have something like Berserk active)
- len = sd->battle_status.mdef2 - (sd->battle_status.vit>>1);
- if (len < 0) len = 0;
- WFIFOL(fd,4)= len;
- len = 8;
+ WFIFOL(fd,4)=sd->battle_status.mdef;
break;
case SP_CRITICAL:
WFIFOL(fd,4)=sd->battle_status.cri/10;
@@ -2843,16 +2839,13 @@ int clif_initialstatus(struct map_session_data *sd)
WBUFB(buf,15)=pc_need_status_point(sd,SP_LUK,1);
WBUFW(buf,16) = sd->battle_status.batk;
- WBUFW(buf,18) = sd->battle_status.rhw.atk2 + sd->battle_status.lhw.atk2; //atk bonus
+ WBUFW(buf,18) = sd->battle_status.rhw.atk + sd->battle_status.lhw.atk2 + sd->battle_status.equipment_atk; //atk bonus
WBUFW(buf,20) = sd->weapon_matk + sd->battle_status.rhw.atk2 + sd->equipment_matk;
- WBUFW(buf,22) = sd->battle_status.matk_min;
- WBUFW(buf,24) = sd->battle_status.def; // def
- WBUFW(buf,26) = sd->battle_status.def2;
- WBUFW(buf,28) = sd->battle_status.mdef; // mdef
- fd = sd->battle_status.mdef2 - (sd->battle_status.vit>>1);
- if (fd < 0) fd = 0; //Negative check for Frenzy'ed characters.
- WBUFW(buf,30) = fd;
- fd = sd->fd;
+ WBUFW(buf,22) = sd->battle_status.status_matk;
+ WBUFW(buf,24) = sd->battle_status.def2;
+ WBUFW(buf,26) = sd->battle_status.def; // def
+ WBUFW(buf,28) = sd->battle_status.mdef2;
+ WBUFW(buf,30) = sd->battle_status.mdef; // mdef
WBUFW(buf,32) = sd->battle_status.hit;
WBUFW(buf,34) = sd->battle_status.flee;
WBUFW(buf,36) = sd->battle_status.flee2/10;
@@ -2872,8 +2865,14 @@ int clif_initialstatus(struct map_session_data *sd)
clif_updatestatus(sd,SP_ATTACKRANGE);
clif_updatestatus(sd,SP_ASPD);
+ clif_updatestatus(sd,SP_ATK1);
+ clif_updatestatus(sd,SP_ATK2);
clif_updatestatus(sd,SP_MATK1);
clif_updatestatus(sd,SP_MATK2);
+ clif_updatestatus(sd,SP_DEF1);
+ clif_updatestatus(sd,SP_DEF2);
+ clif_updatestatus(sd,SP_MDEF1);
+ clif_updatestatus(sd,SP_MDEF2);
return 0;
}
diff --git a/src/map/pc.c b/src/map/pc.c
index cd00e0ffc..1869372ae 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -1851,14 +1851,14 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
break;
case SP_BASE_ATK:
if(sd->state.lr_flag != 2) {
- bonus = status->batk + val;
- status->batk = cap_value(bonus, 0, USHRT_MAX);
+ bonus = status->equipment_atk + val;
+ status->equipment_atk = cap_value(bonus, 0, USHRT_MAX);
}
break;
case SP_DEF1:
if(sd->state.lr_flag != 2) {
bonus = status->def + val;
- status->def = cap_value(bonus, CHAR_MIN, CHAR_MAX);
+ status->def = cap_value(bonus, SHRT_MIN, SHRT_MAX);
}
break;
case SP_DEF2:
@@ -1870,7 +1870,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
case SP_MDEF1:
if(sd->state.lr_flag != 2) {
bonus = status->mdef + val;
- status->mdef = cap_value(bonus, CHAR_MIN, CHAR_MAX);
+ status->mdef = cap_value(bonus, SHRT_MIN, SHRT_MAX);
}
break;
case SP_MDEF2:
@@ -3652,6 +3652,7 @@ int pc_isUseitem(struct map_session_data *sd,int n)
//Not consumable item
if( item->type != IT_HEALING && item->type != IT_USABLE && item->type != IT_CASH )
return 0;
+ // This contradicts official behavior. Items with no scripts should be consumed regardless. [L0ne_W0lf]
if( !item->script ) //if it has no script, you can't really consume it!
return 0;
diff --git a/src/map/skill.c b/src/map/skill.c
index 9aac438d4..3f386bbb7 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -274,6 +274,7 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
struct map_session_data *tsd = map_id2sd(target->id);
struct status_change* sc;
struct status_data *status;
+ bool FullCalc = false;
status = status_get_status_data(src);
@@ -291,13 +292,14 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
hp = (skill_lv>6)?666:skill_lv*100;
break;
default:
+ FullCalc = true; // Enables full calculation, which adds heal variance.
if (skill_lv >= battle_config.max_heal_lv)
return battle_config.max_heal;
-
+
// iRO Wiki states as of 2011/08/22:
// heal = ( [(Base Level + INT) / 5] ?30 ) ?(Heal Level / 10) ?(1 + (Modifiers / 100)) + MATK
// fixme: Does not match up with iRO's heal, level 1 or level 10
- // with 219 mak + HP_MEDITATO, level 1 = 361; level 10 = 1839
+ // with 219 matk + HP_MEDITATO (10) (no gear), level 1 = 361; level 10 = 1839
if( skill_id == AB_HIGHNESSHEAL ) {
skill = pc_checkskill(sd,AL_HEAL);
if( skill < 0 )
@@ -314,47 +316,50 @@ int skill_calc_heal(struct block_list *src, struct block_list *target, int skill
mod += skill * 2;
else if( src->type == BL_HOM && (skill = merc_hom_checkskill(((TBL_HOM*)src), HLIF_BRAIN)) > 0 )
mod += skill * 2;
- if( sd && (skill = pc_skillheal_bonus(sd, skill_id)) )
- mod += skill;
- if( tsd && (skill = pc_skillheal2_bonus(tsd, skill_id)) )
- mod += skill;
+ break;
+ }
- sc = status_get_sc(target);
- if( sc && sc->count )
- {
- if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish]
- mod -= sc->data[SC_CRITICALWOUND]->val2;
- if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN )
- mod += sc->data[SC_INCHEALRATE]->val1; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
- }
+ // Increment skill and status based modifiers
+ if( sd && (skill = pc_skillheal_bonus(sd, skill_id)) )
+ mod += skill;
+ if( tsd && (skill = pc_skillheal2_bonus(tsd, skill_id)) )
+ mod += skill;
+
+ sc = status_get_sc(target);
+ if( sc && sc->count )
+ {
+ if( sc->data[SC_CRITICALWOUND] && heal ) // Critical Wound has no effect on offensive heal. [Inkfish]
+ mod -= sc->data[SC_CRITICALWOUND]->val2;
+ if( sc->data[SC_INCHEALRATE] && skill_id != NPC_EVILLAND && skill_id != BA_APPLEIDUN )
+ mod += sc->data[SC_INCHEALRATE]->val1; // Only affects Heal, Sanctuary and PotionPitcher.(like bHealPower) [Inkfish]
+// if( sc->data[SC_VITALITYACTIVATION] && heal && skill_id != BA_APPLEIDUN )
+// mod += sc->data[SC_VITALITYACTIVATION]->val2;
+ }
- // Adjust the HP recovered rate by adding all of the modifiers together.
- hp = hp * mod / 100;
+ // Adjust the HP recovered rate by adding all of the modifiers together.
+ hp = hp * mod / 100;
- // Get weapon level and weapon matk for variance calculations if it's a player.
- // Mobs have their own variance, we've assumed:
- // Weapon Level = 1
- // Weapom_Matk = ?
- // Need more information before that can be implemented.
- if( sd )
- {
- int matk = 0;
- int smatk = sd->battle_status.status_matk;
- int ematk = sd->equipment_matk;
- int wmatk = 0;
- int wlv = 1;
- int index = sd->equip_index[EQI_HAND_R];
-
- if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
- wlv = sd->inventory_data[index]->wlv;
+ // Get weapon level and weapon matk for variance calculations if it's a player.
+ // Mobs have their own variance, we've assumed:
+ // Weapon Level = 1
+ // Weapom_Matk = ?
+ // Need more information before that can be implemented.
+ if( sd && FullCalc)
+ {
+ int matk = 0;
+ int smatk = sd->battle_status.status_matk;
+ int ematk = sd->equipment_matk;
+ int wmatk = 0;
+ int wlv = 1;
+ int index = sd->equip_index[EQI_HAND_R];
- wmatk = (int)( sd->weapon_matk + ( (float)( ( rand() % 20 ) - 10 ) / 100 * wlv * sd->weapon_matk ) + ( sd->battle_status.rhw.atk2 ) );
- matk = ( smatk + wmatk + ematk );
+ if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
+ wlv = sd->inventory_data[index]->wlv;
- hp += matk;
- }
+ wmatk = (int)( sd->weapon_matk + ( (float)( ( rand() % 20 ) - 10 ) / 100 * wlv * sd->weapon_matk ) + ( sd->battle_status.rhw.atk2 ) );
+ matk = ( smatk + wmatk + ematk );
- break;
+ hp += matk;
}
// mercenaries only take half-effectiveness from heals.
@@ -5758,7 +5763,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case AB_CLEMENTIA: if( sd ) lv = pc_checkskill(sd,AL_BLESSING); break;
case AB_CANTO: if( sd ) lv = pc_checkskill(sd,AL_INCAGI); break;
}
- clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start(bl,type,100,lv,skill_get_time(skillid,skilllv)));
+ clif_skill_nodamage(bl, bl, skillid, skilllv,
+ sc_start4(bl,type,100,lv,0,sd?sd->status.job_level:0,0,skill_get_time(skillid,skilllv)));
}
else if( sd )
party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
@@ -5784,8 +5790,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
{
if( dstsd && dstsd->special_state.no_magic_damage )
break;
- clif_skill_nodamage(bl,bl,skillid,skilllv,1);
- clif_skill_nodamage(bl, bl, skillid, skilllv, sc_start4(bl, type, 100, skilllv, 0, 0, 1, skill_get_time(skillid, skilllv)));
+ clif_skill_nodamage(bl, bl, skillid, skilllv,
+ sc_start4(bl, type, 100, skilllv, 0, 0, 1, skill_get_time(skillid, skilllv)));
}
else
party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skillid, skilllv), src, skillid, skilllv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
@@ -5793,7 +5799,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case AB_ORATIO:
if (flag&1)
sc_start(bl, type, 40+skilllv*5, skilllv, skill_get_time(skillid, skilllv));
- else {
+ else
+ {
clif_skill_nodamage(src, bl, skillid, skilllv, 1);
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
@@ -5803,7 +5810,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
break;
case AB_LAUDAAGNUS:
case AB_LAUDARAMUS:
- if( flag&1 || sd == NULL )
+ if( (flag&1) || sd == NULL || sd->status.party_id == 0 )
{
if( tsc && (rand()%100 < 30+5*skilllv) )
{
@@ -5849,7 +5856,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
{
if (!tsc->data[i])
continue;
- //Initial list of status effects cancelled by Clearance. Does not contain third job status.
+ //Initial list of status effects NOT cancelled by Clearance.
switch (i) {
case SC_WEIGHT50: case SC_WEIGHT90: case SC_TWOHANDQUICKEN:
case SC_QUAGMIRE: case SC_SLOWPOISON: case SC_BENEDICTIO:
@@ -5882,7 +5889,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case SC_FOOD_VIT_CASH: case SC_FOOD_DEX_CASH: case SC_FOOD_INT_CASH:
case SC_FOOD_LUK_CASH: case SC_MERC_FLEEUP: case SC_MERC_ATKUP:
case SC_MERC_HPUP: case SC_MERC_SPUP: case SC_MERC_HITUP:
- case SC_SLOWCAST: case SC_CRITICALWOUND: case SC_SPEEDUP0:
+ case SC_SLOWCAST: /*case SC_CRITICALWOUND:*/ case SC_SPEEDUP0:
case SC_DEF_RATE: case SC_MDEF_RATE: case SC_INCHEALRATE:
case SC_S_LIFEPOTION: case SC_L_LIFEPOTION: case SC_INCCRI:
case SC_SPCOST_RATE: case SC_COMMONSC_RESIST: case SC_ELEMENTALCHANGE:
@@ -5899,9 +5906,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
case SC_INTOABYSS: case SC_SIEGFRIED: case SC_WHISTLE:
case SC_ASSNCROS: case SC_POEMBRAGI: case SC_APPLEIDUN:
case SC_HUMMING: case SC_DONTFORGETME: case SC_FORTUNE:
- case SC_SERVICE4U: case SC_EPICLESIS: case SC_PARTYFLEE:
+ case SC_SERVICE4U: case SC_PARTYFLEE: /*case SC_ANGEL_PROTECT:*/
+ case SC_EPICLESIS:
// not implemented
- //case SC_ANGEL_PROTECT: case SC_BUCHEDENOEL: case SC_POPECOOKIE:
+ //case SC_BUCHEDENOEL: case SC_POPECOOKIE:
//case SC_SAVAGE_STEAK: case SC_COCKTAIL_WARG_BLOOD: case SC_MINOR_BBQ:
//case SC_SIROMA_ICE_TEA: case SC_DROCERA_HERB_STEAMED: case SC_PUTTI_TAILS_NOODLES:
//case SC_CRIFOOD: case SC_STR_SCROLL: case SC_INT_SCROLL:
@@ -6800,9 +6808,9 @@ int skill_castend_pos2(struct block_list* src, int x, int y, int skillid, int sk
case AB_EPICLESIS:
if( skill_unitsetting(src, skillid, skilllv, x, y, 0) )
{
- int range = skill_get_splash(skillid,skilllv); // Use Splash Range.
+ i = skill_get_splash(skillid,skilllv); // Use Splash Range.
map_foreachinarea(skill_area_sub,
- src->m, x-range, y-range, x+range, y+range, BL_CHAR,
+ src->m, x-i, y-i, x+i, y+i, BL_CHAR,
src, ALL_RESURRECTION, 1, tick, flag|BCT_NOENEMY|1,
skill_castend_nodamage_id);
}
@@ -8024,7 +8032,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
//if( tsc->data[SC_BERSERK] )
// break;
- //Apply status effect if standing in unit, should cancel upon stepping out of skill_get_splash() area. [FIXME]
+ //FIXME: Apply status effect if standing in unit, should cancel upon stepping out of skill_get_splash() area.
if( tsc && !tsc->data[SC_EPICLESIS] )
sc_start(bl, type, 100, sg->skill_lv, skill_get_time(sg->skill_id,sg->skill_lv));
@@ -8955,6 +8963,26 @@ int skill_check_condition_castbegin(struct map_session_data* sd, short skill, sh
break;
clif_skill_fail(sd,skill,0,0);
return 0;
+ break;
+/*
+ case ST_DRAGON:
+ if(!pc_isdragon(sd)) {
+ clif_skill_fail(sd,skill,25,0);
+ return 0;
+ }
+ break;
+ case ST_WARG:
+ if(!pc_iswarg(sd)) {
+ clif_skill_fail(sd,skill,0,0);
+ return 0;
+ }
+ break;
+ case ST_MADOGEAR:
+ if(!pc_ismadogear(sd)) {
+ clif_skill_fail(sd,skill,33,0);
+ return 0;
+ }
+*/
}
if(require.mhp > 0 && get_percentage(status->hp, status->max_hp) > require.mhp) {
@@ -9057,14 +9085,6 @@ int skill_check_condition_castend(struct map_session_data* sd, short skill, shor
}
break;
}
- case AB_LAUDAAGNUS:
- case AB_LAUDARAMUS:
- if( !sd->status.party_id )
- {
- clif_skill_fail(sd,skill,0,0);
- return 0;
- }
- break;
}
status = &sd->battle_status;
@@ -9405,7 +9425,7 @@ int skill_castfix (struct block_list *bl, int skill_id, int skill_lv)
}
}
- //TODO: apply fixed cast rate modifiers via status effects.
+ // apply fixed cast rate modifiers via status effects.
if( !(skill_get_castnodex(skill_id, skill_lv)&2) && sc && sc->count )
{
if( sc->data[SC_AB_SECRAMENT] && sc->data[SC_AB_SECRAMENT]->val2 > max_fixedReduction )
@@ -12113,6 +12133,9 @@ static bool skill_parse_row_requiredb(char* split[], int columns, int current)
else if( strcmpi(split[10],"recover_weight_rate")==0 ) skill_db[i].state = ST_RECOV_WEIGHT_RATE;
else if( strcmpi(split[10],"move_enable")==0 ) skill_db[i].state = ST_MOVE_ENABLE;
else if( strcmpi(split[10],"water")==0 ) skill_db[i].state = ST_WATER;
+ else if( strcmpi(split[10],"dragon")==0 ) skill_db[i].state = ST_DRAGON;
+ else if( strcmpi(split[10],"warg")==0 ) skill_db[i].state = ST_WARG;
+ else if( strcmpi(split[10],"madogear")==0 ) skill_db[i].state = ST_MADOGEAR;
else skill_db[i].state = ST_NONE;
skill_split_atoi(split[11],skill_db[i].spiritball);
diff --git a/src/map/skill.h b/src/map/skill.h
index 73b3e9fd0..0cadd92d7 100644
--- a/src/map/skill.h
+++ b/src/map/skill.h
@@ -13,7 +13,7 @@ struct skill_unit_group;
struct status_change_entry;
#define MAX_SKILL_DB MAX_SKILL
-#define MAX_SKILL_PRODUCE_DB 150
+#define MAX_SKILL_PRODUCE_DB 170
#define MAX_PRODUCE_RESOURCE 12
#define MAX_SKILL_ARROW_DB 150
#define MAX_ARROW_RESOURCE 5
@@ -369,6 +369,9 @@ enum {
ST_RECOV_WEIGHT_RATE,
ST_MOVE_ENABLE,
ST_WATER,
+ ST_DRAGON,
+ ST_WARG,
+ ST_MADOGEAR
};
enum e_skill {
diff --git a/src/map/status.c b/src/map/status.c
index bfa6be76d..933d18690 100644
--- a/src/map/status.c
+++ b/src/map/status.c
@@ -1304,7 +1304,7 @@ int status_base_amotion_pc(struct map_session_data* sd, struct status_data* stat
static unsigned short status_base_atk(const struct block_list *bl, const struct status_data *status)
{
- int flag = 0, str, dex, dstr;
+ int flag = 0, str, dex, dstr, base;
if(!(bl->type&battle_config.enable_baseatk))
return 0;
@@ -1322,10 +1322,10 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct
flag = 1;
}
if (flag) {
- str = status->dex;
+ base =str = status->dex;
dex = status->str;
} else {
- str = status->str;
+ base = str = status->str;
dex = status->dex;
}
//Normally only players have base-atk, but homunc have a different batk
@@ -1334,7 +1334,7 @@ static unsigned short status_base_atk(const struct block_list *bl, const struct
dstr = str/10;
str += dstr*dstr;
if (bl->type == BL_PC)
- str+= dex/5 + status->luk/5;
+ str = (((TBL_PC*)bl)->status.base_level*10/4 + base*10 + dex*10/5 + status->luk*10/3)/10;
return cap_value(str, 0, USHRT_MAX);
}
@@ -1354,10 +1354,17 @@ void status_calc_misc(struct block_list *bl, struct status_data *status, int lev
status->matk_min = status_base_matk_min(status);
status->matk_max = status_base_matk_max(status);
- status->hit += 175 + status->dex + (unsigned short)floor((double)status->luk/3) + level; //Renewal calclation.
+ //Renewal calculation? HIT is currently coming up too high.
+ status->hit += 175 + status->dex + (unsigned short)floor((double)status->luk/3) + level;
status->flee += 100 + status->agi + level;
- status->def2 += status->vit;
- status->mdef2 += status->mdef;
+
+ // Values are still off by roughly 1~3 points. Getting there though.
+ status->def2 += (level*10/2 + status->vit*10/2 + status->agi*10/5)/10;
+ if( bl->type != BL_MOB )
+ status->mdef2 += (level*10/4 + status->int_*10 + status->vit*10/5 + status->dex*10/5)/10;
+ else
+ status->mdef2 = status->mdef; // Mobs use their mdef as their mdef2.
+
//Status MATK = floor(Base Level/4 + INT + INT/2 + DEX/5 + LUK/3)
status->status_matk = (unsigned short)floor((double)level/4 + (double)status->int_ + (double)status->int_/2 + (double)status->dex/5 + (double)status->luk/3);
@@ -1539,8 +1546,6 @@ int status_calc_mob_(struct mob_data* md, bool first)
status->max_sp += 200 * gc->defense;
status->hp = status->max_hp;
status->sp = status->max_sp;
- status->def += (gc->defense+2)/3;
- status->mdef += (gc->defense+2)/3;
}
}else{
status->max_hp += 1000 * gc->defense;
@@ -1963,7 +1968,11 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
}
}
else if(sd->inventory_data[index]->type == IT_ARMOR) {
- refinedef += sd->status.inventory[index].refine*refinebonus[0][0];
+ int r = sd->status.inventory[index].refine;
+ int per = 0, refine=(r>0)?1:0;
+ for(per=1; per<r; per++)
+ refine += (per/4) + 1;
+ refinedef += refine;
if(sd->inventory_data[index]->script) {
run_script(sd->inventory_data[index]->script,0,sd->bl.id,0);
if (!calculating) //Abort, run_script retriggered this. [Skotlex]
@@ -2296,13 +2305,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->def_rate = 0;
if(sd->def_rate != 100) {
i = status->def * sd->def_rate/100;
- status->def = cap_value(i, CHAR_MIN, CHAR_MAX);
+ status->def = cap_value(i, SHRT_MIN, SHRT_MAX);
}
if (!battle_config.weapon_defense_type && status->def > battle_config.max_def)
{
status->def2 += battle_config.over_def_bonus*(status->def -battle_config.max_def);
- status->def = (unsigned char)battle_config.max_def;
+ status->def = (unsigned short)battle_config.max_def;
}
// ----- EQUIPMENT-MDEF CALCULATION -----
@@ -2312,13 +2321,13 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
sd->mdef_rate = 0;
if(sd->mdef_rate != 100) {
i = status->mdef * sd->mdef_rate/100;
- status->mdef = cap_value(i, CHAR_MIN, CHAR_MAX);
+ status->mdef = cap_value(i, SHRT_MIN, SHRT_MAX);
}
if (!battle_config.magic_defense_type && status->mdef > battle_config.max_def)
{
status->mdef2 += battle_config.over_def_bonus*(status->mdef -battle_config.max_def);
- status->mdef = (signed char)battle_config.max_def;
+ status->mdef = (signed short)battle_config.max_def;
}
// ----- ASPD CALCULATION -----
@@ -2580,9 +2589,9 @@ static signed short status_calc_hit(struct block_list *,struct status_change *,i
static signed short status_calc_critical(struct block_list *,struct status_change *,int);
static signed short status_calc_flee(struct block_list *,struct status_change *,int);
static signed short status_calc_flee2(struct block_list *,struct status_change *,int);
-static signed char status_calc_def(struct block_list *,struct status_change *,int);
+static signed short status_calc_def(struct block_list *,struct status_change *,int);
static signed short status_calc_def2(struct block_list *,struct status_change *,int);
-static signed char status_calc_mdef(struct block_list *,struct status_change *,int);
+static signed short status_calc_mdef(struct block_list *,struct status_change *,int);
static signed short status_calc_mdef2(struct block_list *,struct status_change *,int);
static unsigned short status_calc_speed(struct block_list *,struct status_change *,int);
static short status_calc_aspd_rate(struct block_list *,struct status_change *,int);
@@ -2823,7 +2832,7 @@ void status_calc_bl_main(struct block_list *bl, enum scb_flag flag)
if(flag&SCB_LUK) {
status->luk = status_calc_luk(bl, sc, b_status->luk);
- flag|=SCB_BATK|SCB_CRI|SCB_FLEE2;
+ flag|=SCB_BATK|SCB_CRI|SCB_FLEE2|SCB_MATK;
}
if(flag&SCB_BATK && b_status->batk) {
@@ -3194,25 +3203,26 @@ void status_calc_bl_(struct block_list* bl, enum scb_flag flag, bool first)
clif_updatestatus(sd,SP_ASPD);
if(b_status.speed != status->speed)
clif_updatestatus(sd,SP_SPEED);
- if(b_status.rhw.atk != status->rhw.atk || b_status.lhw.atk != status->lhw.atk || b_status.batk != status->batk)
+ if(b_status.rhw.atk != status->rhw.atk || b_status.lhw.atk != status->lhw.atk || b_status.batk != status->batk
+ || b_status.rhw.atk2 != status->rhw.atk2 || b_status.lhw.atk2 != status->lhw.atk2 || b_status.equipment_atk != status->equipment_atk)
{
clif_updatestatus(sd,SP_ATK1);
+ clif_updatestatus(sd,SP_ATK2);
clif_updatestatus(sd,SP_MATK1);
}
- if(b_status.def != status->def)
+ if(b_status.def != status->def || b_status.def2 != status->def2)
+ {
clif_updatestatus(sd,SP_DEF1);
- if(b_status.rhw.atk2 != status->rhw.atk2 || b_status.lhw.atk2 != status->lhw.atk2)
- clif_updatestatus(sd,SP_ATK2);
- if(b_status.def2 != status->def2)
clif_updatestatus(sd,SP_DEF2);
+ }
if(b_status.flee2 != status->flee2)
clif_updatestatus(sd,SP_FLEE2);
if(b_status.cri != status->cri)
clif_updatestatus(sd,SP_CRITICAL);
if(b_status.matk_max != status->matk_max)
{
- clif_updatestatus(sd,SP_MATK1);
- clif_updatestatus(sd,SP_MATK2);
+ clif_updatestatus(sd,SP_MATK1);
+ clif_updatestatus(sd,SP_MATK2);
}
if(b_status.mdef != status->mdef || b_status.mdef2 != status->mdef2)
{
@@ -3708,10 +3718,10 @@ static signed short status_calc_flee2(struct block_list *bl, struct status_chang
return (short)cap_value(flee2,10,SHRT_MAX);
}
-static signed char status_calc_def(struct block_list *bl, struct status_change *sc, int def)
+static signed short status_calc_def(struct block_list *bl, struct status_change *sc, int def)
{
if(!sc || !sc->count)
- return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX);
+ return (signed short)cap_value(def,SHRT_MIN,SHRT_MAX);
if(sc->data[SC_BERSERK])
return 0;
@@ -3748,7 +3758,7 @@ static signed char status_calc_def(struct block_list *bl, struct status_change *
if (sc->data[SC_FLING])
def -= def * (sc->data[SC_FLING]->val2)/100;
- return (signed char)cap_value(def,CHAR_MIN,CHAR_MAX);
+ return (signed short)cap_value(def,SHRT_MIN,SHRT_MAX);
}
static signed short status_calc_def2(struct block_list *bl, struct status_change *sc, int def2)
@@ -3783,10 +3793,10 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change
return (short)cap_value(def2,1,SHRT_MAX);
}
-static signed char status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef)
+static signed short status_calc_mdef(struct block_list *bl, struct status_change *sc, int mdef)
{
if(!sc || !sc->count)
- return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX);
+ return (signed short)cap_value(mdef,SHRT_MIN,SHRT_MAX);
if(sc->data[SC_BERSERK])
return 0;
@@ -3807,7 +3817,7 @@ static signed char status_calc_mdef(struct block_list *bl, struct status_change
if(sc->data[SC_CONCENTRATION])
mdef += 1; //Skill info says it adds a fixed 1 Mdef point.
- return (signed char)cap_value(mdef,CHAR_MIN,CHAR_MAX);
+ return (signed short)cap_value(mdef,SHRT_MIN,SHRT_MAX);
}
static signed short status_calc_mdef2(struct block_list *bl, struct status_change *sc, int mdef2)
@@ -4288,7 +4298,7 @@ struct status_data *status_get_base_status(struct block_list *bl)
}
}
-signed char status_get_def(struct block_list *bl)
+signed short status_get_def(struct block_list *bl)
{
struct unit_data *ud;
struct status_data *status = status_get_status_data(bl);
@@ -4296,7 +4306,7 @@ signed char status_get_def(struct block_list *bl)
ud = unit_bl2ud(bl);
if (ud && ud->skilltimer != INVALID_TIMER)
def -= def * skill_get_castdef(ud->skillid)/100;
- return cap_value(def, CHAR_MIN, CHAR_MAX);
+ return cap_value(def, SHRT_MIN, SHRT_MAX);
}
unsigned short status_get_speed(struct block_list *bl)
@@ -4521,6 +4531,22 @@ void status_set_viewdata(struct block_list *bl, int class_)
class_ = JOB_BABY_CRUSADER2;
break;
}
+ /*
+ else
+ if (sd->sc.option&OPTION_DRAGON) // For completeness' sake. These aren't actually needed...except maybe in older clients.
+ switch (class_)
+ {
+ case JOB_RUNE_KNIGHT:
+ class_ = JOB_RUNE_KNIGHT2;
+ break;
+ case JOB_RUNE_KNIGHT_H:
+ class_ = JOB_RUNE_KNIGHT_H2;
+ break;
+ case JOB_BABY_RUNE:
+ class_ = JOB_BABY_RUNE2;
+ break;
+ }
+ */
sd->vd.class_ = class_;
clif_get_weapon_view(sd, &sd->vd.weapon, &sd->vd.shield);
sd->vd.head_top = sd->status.head_top;
@@ -5316,6 +5342,8 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
case SC_INCREASEAGI:
case SC_ADORAMUS:
val2 = 2 + val1; //Agi change
+ if (val3) //Canto Candidus: Add joblv/10 additional AGI (8/31/2011)
+ val2 += (val3/10);
break;
case SC_ENDURE:
val2 = 7; // Hit-count [Celest]
@@ -5365,14 +5393,14 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
break;
case SC_KYRIE:
val2 = status->max_hp * (val1 * 2 + 10) / 100; //%Max HP to absorb
- // val1 determines if status is casued by Kyrie or Praefatio,
+ // val4 determines if status is casued by Kyrie or Praefatio,
// as Praefatio blocks more hits than Kyrie Elesion.
- if( !val4 )
+ if( !val4 ) //== PR_KYRIE
val3 = (val1 / 2 + 5);
- else
+ else //== AB_PRAEFATIO
val3 = 6 + val1;
if( sd )
- val1 = min(val1,pc_checkskill(sd,PR_KYRIE)); // uses kill level to determine barrier health.
+ val1 = min(val1,pc_checkskill(sd,PR_KYRIE)); // use skill level to determine barrier health.
break;
case SC_MAGICPOWER:
//val1: Skill lv
@@ -5923,7 +5951,11 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val
break;
case SC_BLESSING:
if ((!undead_flag && status->race!=RC_DEMON) || bl->type == BL_PC)
+ {
val2 = val1;
+ if (val3) //Clementia: Add joblv/10 additional STR/INT/DEX (8/31/2011)
+ val2 += (val3/10);
+ }
else
val2 = 0; //0 -> Half stat.
break;
diff --git a/src/map/status.h b/src/map/status.h
index 4eeadef12..169d193ae 100644
--- a/src/map/status.h
+++ b/src/map/status.h
@@ -11,7 +11,7 @@ struct homun_data;
struct status_change;
//Use this to refer the max refinery level [Skotlex]
-#define MAX_REFINE 10
+#define MAX_REFINE 20
#define MAX_REFINE_BONUS 5
extern unsigned long StatusChangeFlagTable[];
@@ -330,7 +330,7 @@ typedef enum sc_type {
SC_FOOD_INT_CASH,
SC_FOOD_LUK_CASH,
//SC_MOVHASTE_INFINITY,
- SC_PARTYFLEE = 310 ,
+ SC_PARTYFLEE = 310,
//SC_ENDURE_MDEF, //311
// Third Jobs - Maintaining SI order for SCs.
@@ -933,6 +933,62 @@ enum si_type {
SI_WIND_INSIGNIA = 569,
SI_EARTH_INSIGNIA = 570,
SI_EQUIPED_FLOOR = 571,
+ SI_GUARDIAN_RECALL = 572,
+ SI_MORA_BUFF = 573,
+ SI_REUSE_LIMIT_G = 574,
+ SI_REUSE_LIMIT_H = 575,
+ SI_NEEDLE_OF_PARALYZE = 576,
+ SI_PAIN_KILLER = 577,
+ SI_G_LIFEPOTION = 578,
+ SI_VITALIZE_POTION = 579,
+ SI_LIGHT_OF_REGENE = 580,
+ SI_OVERED_BOOST = 581,
+ SI_SILENT_BREEZE = 582,
+ SI_ODINS_POWER = 583,
+ SI_STYLE_CHANGE = 584,
+ SI_SONIC_CLAW_POSTDELAY = 585,
+//--586-595 Unused
+ SI_SILVERVEIN_RUSH_POSTDELAY = 596,
+ SI_MIDNIGHT_FRENZY_POSTDELAY = 597,
+ SI_GOLDENE_FERSE = 598,
+ SI_ANGRIFFS_MODUS = 599,
+ SI_TINDER_BREAKER = 600,
+ SI_TINDER_BREAKER_POSTDELAY = 601,
+ SI_CBC = 602,
+ SI_CBC_POSTDELAY = 603,
+ SI_EQC = 604,
+ SI_MAGMA_FLOW = 605,
+ SI_GRANITIC_ARMOR = 606,
+ SI_PYROCLASTIC = 607,
+ SI_VOLCANIC_ASH = 608,
+ SI_SPIRITS_SAVEINFO1 = 609,
+ SI_SPIRITS_SAVEINFO2 = 610,
+ SI_MAGIC_CANDY = 611,
+//--612 skipped
+ SI_ALL_RIDING = 613,
+//--614 skipped
+ SI_MACRO = 615,
+ SI_MACRO_POSTDELAY = 616,
+ SI_BEER_BOTTLE_CAP = 617,
+ SI_OVERLAPEXPUP = 618,
+ SI_PC_IZ_DUN05 = 619,
+ SI_CRUSHSTRIKE = 620,
+ SI_MONSTER_TRANSFORM = 621,
+ SI_SIT = 622,
+ SI_ONAIR = 623,
+ SI_MTF_ASPD = 624,
+ SI_MTF_RANGEATK = 625,
+ SI_MTF_MATK = 626,
+ SI_MTF_MLEATKED = 627,
+ SI_MTF_CRIDAMAGE = 628,
+ SI_REUSE_LIMIT_MTF = 629,
+ SI_MACRO_PERMIT = 630,
+ SI_MACRO_PLAY = 631,
+ SI_SKF_CAST = 632,
+ SI_SKF_ASPD = 633,
+ SI_SKF_ATK = 634,
+ SI_SKF_MATK = 635,
+ SI_REWARD_PLUSONLYJOBEXP = 636,
*/
};
@@ -1133,20 +1189,18 @@ struct status_data {
max_hp, max_sp;
unsigned short
str, agi, vit, int_, dex, luk,
- batk,
+ batk, equipment_atk,
matk_min, matk_max, status_matk,
speed,
amotion, adelay, dmotion,
mode;
short
hit, flee, cri, flee2,
- def2, mdef2,
+ def, mdef, def2, mdef2,
aspd_rate;
unsigned char
def_ele, ele_lv,
size, race;
- signed char
- def, mdef;
struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon.
};
@@ -1259,7 +1313,7 @@ int status_get_lv(struct block_list *bl);
#define status_get_luk(bl) status_get_status_data(bl)->luk
#define status_get_hit(bl) status_get_status_data(bl)->hit
#define status_get_flee(bl) status_get_status_data(bl)->flee
-signed char status_get_def(struct block_list *bl);
+signed short status_get_def(struct block_list *bl);
#define status_get_mdef(bl) status_get_status_data(bl)->mdef
#define status_get_flee2(bl) status_get_status_data(bl)->flee2
#define status_get_def2(bl) status_get_status_data(bl)->def2