From 00f4b25981be9632f662ff055bae81ad3d49694f Mon Sep 17 00:00:00 2001 From: L0ne_W0lf Date: Fri, 30 Sep 2011 19:54:58 +0000 Subject: * 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. * 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. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/branches/renewal@14964 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Renewal.txt | 10 ++++ conf/battle/player.conf | 2 +- conf/char_athena.conf | 2 +- db/Changelog.txt | 10 ++++ db/const.txt | 31 +++++++++- db/item_db.txt | 38 ++++++------ db/item_delay.txt | 10 ++++ db/produce_db.txt | 29 ++++++++- db/refine_db.txt | 10 ++-- db/skill_cast_db.txt | 37 ++++++++++++ db/skill_db.txt | 26 ++++----- db/skill_require_db.txt | 58 +++++++++--------- doc/3rd_job_notes.txt | 27 ++++++--- npc/jobs/3-1/archbishop.txt | 21 ++++++- src/map/battle.c | 28 ++++----- src/map/clif.c | 37 ++++++------ src/map/pc.c | 9 +-- src/map/skill.c | 139 ++++++++++++++++++++++++++------------------ src/map/skill.h | 5 +- src/map/status.c | 104 +++++++++++++++++++++------------ src/map/status.h | 68 +++++++++++++++++++--- 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; perinventory_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 -- cgit v1.2.3-60-g2f50