Bug Fixes

* Updated Pointpoint Attack to also have a chance to break Helm equips. (bugreport:8735)
* Fixed Feint Bomb stacking with Hiding and Stealth. (bugreport:8346)
* Updated the trigger area of Feint Bomb to be 3x3 and AoE is 5x5. (bugreport:8346)
* Fixed Chemical Protection not removing Strip effects. (bugreport:8746)
* Fixed Warg Strike's Warg requirement, reverted to misc attack, and ignores target's Flee. (bugreport:8732)
* Warg Bite and Warg Dash now ignore target's Flee.
* Corrected Epiclesis HP/SP recovery timer. (bugreport:8751)
* Fixed Crimson Moon not working with Epiclesis.
* Updated Spirit Sphere requirement for Gentle Touch - Cure to 1.
* Fixed Shield Boomerang not taking weapon element into account. (bugreport:8757)
* Homunculus skill re-use delay is no longer reset when vaporized.
* Lauda Agnus and Lauda Ramus can now be casted when the caster is not in a party.
* Cart Revolution will now always knock targets to the West (added config to disable). (bugreport:8753)
* Updated all non-3rd class skills cast times. (Hercules e2fdc3b)
* Corrected Prestige magic evasion formula. (bugreport:8737)
* Poem of Netherworld will now only effect enemies except in WoE. (bugreport:8771)
* Poem of Netherworld can be removed by Status Recovery and Lion Howling.
* Updated Deep Sleep, Crystalize, and Vacuum Extreme to use base status. (bugreport:8749)
* Self Destruction now ignores target's DEF cards.
* Fixed Raising Dragon not recovering SP. (bugreport:8769)
* Fixed Charm bonuses for Kagerou/Oboro. (bugreport:8319)
* Moved calculation for Chorus bonus.
* Fixed Over Brand damaging targets on the entire map. (bugreport:8736)
* Fixed Cast Ninja Spell not randomly picking a status ailment to cast on target. (bugreport:8774)
This commit is contained in:
aleos89 2014-03-17 11:37:36 -04:00
parent 0602234e4d
commit 79fbd3bc69
14 changed files with 679 additions and 464 deletions

View File

@ -18,7 +18,7 @@
// stat window (by default they don't crit)
// 0x020: Their Min-Matk is always the same as their max
// 0x040: Skill re-use delay is reset when they are vaporized.
hom_setting: 0xFFFF
hom_setting: 0x3D
// The rate a homunculus will get friendly by feeding it. (Note 2)
homunculus_friendly_rate: 100

View File

@ -302,3 +302,7 @@ taekwon_mission_mobname: 0
// Can a player Teleport on top of a Map Warp Portal? (Note 1)
// On official servers players have been unable to do so.
teleport_on_portal: no
// Is the knockback direction for Cart Revolution always West? (Note 1)
// On official servers it will knock the target always to the West. If disabled it will knock the target backwards.
cart_revo_knockback: yes

View File

@ -365,7 +365,7 @@
248,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, CR_TRUST,Faith
249,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_AUTOGUARD,Guard
250,3,6,1,0,0,0,5,1,no,0,0,0,weapon,5:6:7:8:9,0x0, CR_SHIELDCHARGE,Smite
251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang
251,3:5:7:9:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang
252,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect
253,-2,8,1,6,0,0,10,-2,no,0,0,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross
254,5,6,4,6,0x48,0,10,1,no,33,0x100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross
@ -885,8 +885,8 @@
2004,5,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0,0x0, RK_HUNDREDSPEAR,Hundred Spear
2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3,0x0, RK_WINDCUTTER,Wind Cutter
2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0,0x0, RK_IGNITIONBREAK,Ignition Break
2007,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, RK_DRAGONTRAINING,Dragon Training
2008,9,6,2,3,0x2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH,Dragon Breath
2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, RK_DRAGONTRAINING,Dragon Training
2008,9,6,2,3,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH,Dragon Breath
2009,0,6,4,0,0x3,3:4:5:6:7,5,1,no,0,0,0,none,0,0x0, RK_DRAGONHOWLING,Dragon Howling
2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RK_RUNEMASTERY,Rune Mastery
2011,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, RK_MILLENNIUMSHIELD,Millenium Shield
@ -992,9 +992,9 @@
2239,3,6,2,0,0x42,3,5,1,no,0,0x80,3,misc,0,0x2800, RA_CLUSTERBOMB,Cluster Bomb
2240,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x0, RA_WUGMASTERY,Warg Mastery
2241,0,6,4,0,0,0,3,1,no,0,0,0,none,0,0x2000, RA_WUGRIDER,Warg Rider
2242,0,6,4,-1,0x2,1,1,0,no,0,0,0,weapon,0,0x2000, RA_WUGDASH,Warg Dash
2243,9,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x2000, RA_WUGSTRIKE,Warg Strike
2244,9,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x80, RA_WUGBITE,Warg Bite
2242,0,6,4,-1,0x42,1,1,0,no,0,0,0,weapon,0,0x2000, RA_WUGDASH,Warg Dash
2243,9,6,1,0,0x40,0,5,1,no,0,0,0,misc,0,0x2000, RA_WUGSTRIKE,Warg Strike
2244,9,6,1,0,0x40,0,5,1,no,0,0,0,weapon,0,0x80, RA_WUGBITE,Warg Bite
2245,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RA_TOOTHOFWUG,Tooth of Warg
2246,0,6,4,0,0x2,3:4:5:6:7,5,1,no,0,0,0,weapon,0,0x0, RA_SENSITIVEKEEN,Sensitive Keen
2247,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x42, RA_CAMOUFLAGE,Camouflage
@ -1020,7 +1020,7 @@
2264,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_F_SIDESLIDE,Front-Side Slide
2265,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_B_SIDESLIDE,Back-Side Slide
2266,0,0,0,0,0,0,4,0,no,0,0,0,none,0,0x0, NC_MAINFRAME,Mainframe Restructure // Check me. Part of the code notes translated to "The amount of fuel have".
2267,0,6,4,-1,0x4A,2:3:4,3,1,no,0,0,0,misc,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2267,0,6,4,-1,0xCA,2:3:4,3,1,no,0,0,0,misc,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2268,0,6,4,0,0x1,0,4,1,yes,0,0,0,none,0,0x0, NC_SHAPESHIFT,Shape Shift
2269,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, NC_EMERGENCYCOOL,Emergency Cool
2270,0,6,4,0,0x3,7,1,1,yes,0,0,0,none,0,0x0, NC_INFRAREDSCAN,Infrared Scan
@ -1060,7 +1060,7 @@
2301,7,6,2,0,0x1,0,3,1,yes,0,0x20000,0,none,0,0x0, SC_CHAOSPANIC,Chaos Panic
2302,7,6,2,0,0x1,0,3,1,yes,0,0x20000,0,none,0,0x0, SC_MAELSTROM,Maelstrom
2303,7,6,2,0,0x1,3,3,1,yes,0,0,1,none,0,0x0, SC_BLOODYLUST,Bloody Lust
2304,0,6,4,-1,0,0,3,1,no,0,0,0,weapon,0,0x0, SC_FEINTBOMB,Feint Bomb
2304,0,6,4,-1,0,2,3,1,no,0,0,0,weapon,0,0x0, SC_FEINTBOMB,Feint Bomb
//****
// LG Royal Guard
@ -1074,7 +1074,7 @@
2314,1,6,1,-1,0,0,1,1,no,0,0,0,weapon,0,0x0, LG_RAGEBURST,Rage Burst
2315,0,6,4,0:6:0,0x2,0,3,1,yes,0,0,0,none,2:0:0,0x0, LG_SHIELDSPELL,Shield Spell
2316,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, LG_EXEEDBREAK,Exceed Break
2317,1,6,2,-1,0x2,0,5,1,yes,0,0,0,none,0,0x0, LG_OVERBRAND,Over Brand
2317,2,6,2,-1,0x2,0,5,1,yes,0,0,0,weapon,0,0x0, LG_OVERBRAND,Over Brand
2318,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, LG_PRESTIGE,Prestige
2319,0,6,4,0,0x3,3,5,1,no,0,0,0,weapon,0,0x0, LG_BANDING,Banding //CHECK Splash isnt needed right? Banding has its own UNIT ID.
2320,0,6,4,-1,0x2,3,5,1,yes,0,0,0,weapon,0,0x1000, LG_MOONSLASHER,Moon Slasher
@ -1135,7 +1135,7 @@
2416,0,6,1,-1,0,0,5,1,no,0,0,0,magic,0,0x0, WM_REVERBERATION_MAGIC,Reverberation Magic
2417,11,6,2,0,0x3,5,1,1,no,0,0,0,none,0,0x0, WM_DOMINION_IMPULSE,Dominion Impulse
2418,9,6,2,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, WM_SEVERE_RAINSTORM,Severe Rainstorm
2419,9,6,2,0,0x3,1,5,1,yes,0,0x80,5,none,0,0x0, WM_POEMOFNETHERWORLD,Poem of The Netherworld //CHECK May need to recode too.
2419,9,6,2,0,0x3,1,5,1,yes,0,0x80,5,none,0,0x0, WM_POEMOFNETHERWORLD,Poem of The Netherworld
2420,0,6,4,0,0x2,2:3:4:5:6,5,1,yes,0,0,0,none,0,0x0, WM_VOICEOFSIREN,Voice of Siren
2421,7,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, WM_DEADHILLHERE,Valley of Death
2422,0,6,4,0,0x3,5:6:7:8:9,5,1,yes,0,0,0,none,0,0x0, WM_LULLABY_DEEPSLEEP,Deep Sleep Lullaby

View File

@ -663,7 +663,7 @@
2240,0,0,5,0,0,0,99,0,0,none,0,0,6124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Warg Mastery#
2241,0,0,2,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,0,0 //RA_WUGRIDER#Warg Rider#
2242,0,0,4,0,0,0,99,0,0,move_enable,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGDASH#Warg Dash#
2243,0,0,20:22:24:26:28,0,0,0,99,0,0,ridingwarg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Warg Strike#
2243,0,0,20:22:24:26: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,0,0 //RA_WUGSTRIKE#Warg Strike#
2244,0,0,40:42:44:46:48,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,0,0 //RA_WUGBITE#Warg Bite#
2246,0,0,12,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,0,0 //RA_SENSITIVEKEEN#Sensitive Keen#
@ -773,7 +773,7 @@
2342,0,0,1,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,0,0 //SR_CRESCENTELBOW_AUTOSPELL#Crescent Elbow Autospell#
2343,0,0,11:12:13:14:15:16:17:18:19:20,0,-11:-12:-13:-14:-15:-16:-17:-18:-19:-20,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GATEOFHELL#Gate of Hell#
2344,0,0,20:25:30:35: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,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
2345,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
2345,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
2346,0,0,40:50:60:70:80,-1:-2:-3:-4:-5,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,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
2347,0,0,40:50:60:70:80,-2:-4:-6:-8:-10,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
2348,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#

View File

@ -101,7 +101,7 @@
//706,0xfd, , 0, 0,1000,all, 0x000 //NPC_VENOMFOG
2044,0xca, , 0, 2,3000,all, 0x018 //AB_EPICLESIS
2044,0xca, , 0, 2,1000,all, 0x018 //AB_EPICLESIS
2032,0xe1, , 2, 0,1000,enemy, 0x018 //GC_POISONSMOKE
@ -126,13 +126,13 @@
2301,0xce, , 0, 2, -1,all, 0x200E //SC_CHAOSPANIC
2302,0xcf, , 0, 2, -1,enemy, 0x002 //SC_MAELSTROM
2303,0xd0, , 0, 2, -1,all, 0x2018 //SC_BLOODYLUST
2304,0xd1, , 0, 2,1000,enemy, 0x018 //SC_FEINTBOMB
2304,0xd1, , 0, 1,1000,enemy, 0x018 //SC_FEINTBOMB
2319,0xec, , 0, 3,5000,all, 0x000 //LG_BANDING
2414,0xda, , 0, 1,1000,enemy, 0x008 //WM_REVERBERATION
2418,0xdb, , 0, 5, 300,enemy, 0x800 //WM_SEVERE_RAINSTORM
2419,0xde, , 0, 1,1000,all, 0x014 //WM_POEMOFNETHERWORLD
2419,0xde, , 0, 1,1000,enemy, 0x014 //WM_POEMOFNETHERWORLD
2443,0xdc, , 0, 0,1000,enemy, 0x00A //SO_FIREWALK
2444,0xdd, , 0, 0,1000,enemy, 0x00A //SO_ELECTRICWALK

File diff suppressed because it is too large Load Diff

View File

@ -365,7 +365,7 @@
248,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, CR_TRUST,Faith
249,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_AUTOGUARD,Guard
250,3,6,1,0,0,0,5,1,no,0,0,0,weapon,5:6:7:8:9,0x0, CR_SHIELDCHARGE,Smite
251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang
251,3:5:7:9:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, CR_SHIELDBOOMERANG,Shield Boomerang
252,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect
253,-2,8,1,6,0,0,10,-2,no,0,0,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross
254,5,6,4,6,0x48,0,10,1,no,33,0x100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross
@ -885,8 +885,8 @@
2004,5,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0,0x0, RK_HUNDREDSPEAR,Hundred Spear
2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3,0x0, RK_WINDCUTTER,Wind Cutter
2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0,0x0, RK_IGNITIONBREAK,Ignition Break
2007,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, RK_DRAGONTRAINING,Dragon Training
2008,9,6,2,3,0x2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH,Dragon Breath
2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, RK_DRAGONTRAINING,Dragon Training
2008,9,6,2,3,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH,Dragon Breath
2009,0,6,4,0,0x3,3:4:5:6:7,5,1,no,0,0,0,none,0,0x0, RK_DRAGONHOWLING,Dragon Howling
2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RK_RUNEMASTERY,Rune Mastery
2011,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, RK_MILLENNIUMSHIELD,Millenium Shield
@ -992,9 +992,9 @@
2239,3,6,2,0,0x42,3,5,1,no,0,0x80,3,misc,0,0x2800, RA_CLUSTERBOMB,Cluster Bomb
2240,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x0, RA_WUGMASTERY,Warg Mastery
2241,0,6,4,0,0,0,3,1,no,0,0,0,none,0,0x2000, RA_WUGRIDER,Warg Rider
2242,0,6,4,-1,0x2,1,1,0,no,0,0,0,weapon,0,0x2000, RA_WUGDASH,Warg Dash
2243,9,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x2000, RA_WUGSTRIKE,Warg Strike
2244,9,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x80, RA_WUGBITE,Warg Bite
2242,0,6,4,-1,0x42,1,1,0,no,0,0,0,weapon,0,0x2000, RA_WUGDASH,Warg Dash
2243,9,6,1,0,0x40,0,5,1,no,0,0,0,misc,0,0x2000, RA_WUGSTRIKE,Warg Strike
2244,9,6,1,0,0x40,0,5,1,no,0,0,0,weapon,0,0x80, RA_WUGBITE,Warg Bite
2245,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RA_TOOTHOFWUG,Tooth of Warg
2246,0,6,4,0,0x2,3:4:5:6:7,5,1,no,0,0,0,weapon,0,0x0, RA_SENSITIVEKEEN,Sensitive Keen
2247,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x42, RA_CAMOUFLAGE,Camouflage
@ -1020,7 +1020,7 @@
2264,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_F_SIDESLIDE,Front-Side Slide
2265,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_B_SIDESLIDE,Back-Side Slide
2266,0,0,0,0,0,0,4,0,no,0,0,0,none,0,0x0, NC_MAINFRAME,Mainframe Restructure // Check me. Part of the code notes translated to "The amount of fuel have".
2267,0,6,4,-1,0x4A,2:3:4,3,1,no,0,0,0,misc,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2267,0,6,4,-1,0xCA,2:3:4,3,1,no,0,0,0,misc,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2268,0,6,4,0,0x1,0,4,1,yes,0,0,0,none,0,0x0, NC_SHAPESHIFT,Shape Shift
2269,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, NC_EMERGENCYCOOL,Emergency Cool
2270,0,6,4,0,0x3,7,1,1,yes,0,0,0,none,0,0x0, NC_INFRAREDSCAN,Infrared Scan
@ -1060,7 +1060,7 @@
2301,7,6,2,0,0x1,0,3,1,yes,0,0x20000,0,none,0,0x0, SC_CHAOSPANIC,Chaos Panic
2302,7,6,2,0,0x1,0,3,1,yes,0,0x20000,0,none,0,0x0, SC_MAELSTROM,Maelstrom
2303,7,6,2,0,0x1,3,3,1,yes,0,0,1,none,0,0x0, SC_BLOODYLUST,Bloody Lust
2304,0,6,4,-1,0,0,3,1,no,0,0,0,weapon,0,0x0, SC_FEINTBOMB,Feint Bomb
2304,0,6,4,-1,0,2,3,1,no,0,0,0,weapon,0,0x0, SC_FEINTBOMB,Feint Bomb
//****
// LG Royal Guard
@ -1074,7 +1074,7 @@
2314,1,6,1,-1,0,0,1,1,no,0,0,0,weapon,0,0x0, LG_RAGEBURST,Rage Burst
2315,0,6,4,0:6:0,0x2,0,3,1,yes,0,0,0,none,2:0:0,0x0, LG_SHIELDSPELL,Shield Spell
2316,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, LG_EXEEDBREAK,Exceed Break
2317,1,6,2,-1,0x2,0,5,1,yes,0,0,0,none,0,0x0, LG_OVERBRAND,Over Brand
2317,2,6,2,-1,0x2,0,5,1,yes,0,0,0,weapon,0,0x0, LG_OVERBRAND,Over Brand
2318,0,6,4,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, LG_PRESTIGE,Prestige
2319,0,6,4,0,0x3,3,5,1,no,0,0,0,weapon,0,0x0, LG_BANDING,Banding //CHECK Splash isnt needed right? Banding has its own UNIT ID.
2320,0,6,4,-1,0x2,3,5,1,yes,0,0,0,weapon,0,0x1000, LG_MOONSLASHER,Moon Slasher
@ -1135,7 +1135,7 @@
2416,0,6,1,-1,0,0,5,1,no,0,0,0,magic,0,0x0, WM_REVERBERATION_MAGIC,Reverberation Magic
2417,11,6,2,0,0x3,5,1,1,no,0,0,0,none,0,0x0, WM_DOMINION_IMPULSE,Dominion Impulse
2418,9,6,2,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, WM_SEVERE_RAINSTORM,Severe Rainstorm
2419,9,6,2,0,0x3,1,5,1,yes,0,0x80,5,none,0,0x0, WM_POEMOFNETHERWORLD,Poem of The Netherworld //CHECK May need to recode too.
2419,9,6,2,0,0x3,1,5,1,yes,0,0x80,5,none,0,0x0, WM_POEMOFNETHERWORLD,Poem of The Netherworld
2420,0,6,4,0,0x2,2:3:4:5:6,5,1,yes,0,0,0,none,0,0x0, WM_VOICEOFSIREN,Voice of Siren
2421,7,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x0, WM_DEADHILLHERE,Valley of Death
2422,0,6,4,0,0x3,5:6:7:8:9,5,1,yes,0,0,0,none,0,0x0, WM_LULLABY_DEEPSLEEP,Deep Sleep Lullaby
@ -1304,7 +1304,7 @@
5001,1,8,1,-1,0,0,5,3,no,0,0,0,weapon,0,0x0, GC_DARKCROW,Dark Claw
5002,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, RA_UNLIMIT,Unlimited
5003,7,6,1,-1,0x2,4:5:6:7:8,5,1,no,0,0,0,weapon,0,0x0, GN_ILLUSIONDOPING,Illusion Doping
5004,9,6,2,1,0x2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
5004,9,6,2,1,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0,0x0, RK_LUXANIMA,Lux Anima
5006,1,6,2,3,0,0,5,1,no,0,0,3,misc,0,0x0, NC_MAGMA_ERUPTION,Magma Eruption
5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0,0x0, WM_FRIGG_SONG,Frigg's Song

View File

@ -663,7 +663,7 @@
2240,0,0,5,0,0,0,99,0,0,none,0,0,6124,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGMASTERY#Warg Mastery#
2241,0,0,2,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,0,0 //RA_WUGRIDER#Warg Rider#
2242,0,0,4,0,0,0,99,0,0,move_enable,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGDASH#Warg Dash#
2243,0,0,20:22:24:26:28,0,0,0,99,0,0,ridingwarg,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RA_WUGSTRIKE#Warg Strike#
2243,0,0,20:22:24:26: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,0,0 //RA_WUGSTRIKE#Warg Strike#
2244,0,0,40:42:44:46:48,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,0,0 //RA_WUGBITE#Warg Bite#
2246,0,0,12,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,0,0 //RA_SENSITIVEKEEN#Sensitive Keen#
@ -773,7 +773,7 @@
2342,0,0,1,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,0,0 //SR_CRESCENTELBOW_AUTOSPELL#Crescent Elbow Autospell#
2343,0,0,11:12:13:14:15:16:17:18:19:20,0,-11:-12:-13:-14:-15:-16:-17:-18:-19:-20,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GATEOFHELL#Gate of Hell#
2344,0,0,20:25:30:35: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,0,0 //SR_GENTLETOUCH_QUIET#Gentle Touch - Quiet#
2345,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
2345,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CURE#Gentle Touch - Cure#
2346,0,0,40:50:60:70:80,-1:-2:-3:-4:-5,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,0,0 //SR_GENTLETOUCH_ENERGYGAIN#Gentle Touch - Energy Gain#
2347,0,0,40:50:60:70:80,-2:-4:-6:-8:-10,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_CHANGE#Gentle Touch - Change#
2348,0,0,40:50:60:70:80,0,0,0,99,0,0,none,0,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_GENTLETOUCH_REVITALIZE#Gentle Touch - Revitalize#

View File

@ -128,13 +128,13 @@
2301,0xce, , 0, 2, -1,all, 0x200E //SC_CHAOSPANIC
2302,0xcf, , 0, 2, -1,enemy, 0x002 //SC_MAELSTROM
2303,0xd0, , 0, 2, -1,all, 0x2018 //SC_BLOODYLUST
2304,0xd1, , 0, 2,1000,enemy, 0x018 //SC_FEINTBOMB
2304,0xd1, , 0, 1,1000,enemy, 0x018 //SC_FEINTBOMB
2319,0xec, , 0, 3,5000,all, 0x000 //LG_BANDING
2414,0xda, , 0, 1,1000,enemy, 0x008 //WM_REVERBERATION
2418,0xdb, , 0, 5, 300,enemy, 0x800 //WM_SEVERE_RAINSTORM
2419,0xde, , 0, 1,1000,all, 0x014 //WM_POEMOFNETHERWORLD
2419,0xde, , 0, 1,1000,enemy, 0x014 //WM_POEMOFNETHERWORLD
2443,0xdc, , 0, 0,1000,enemy, 0x00A //SO_FIREWALK
2444,0xdd, , 0, 0,1000,enemy, 0x00A //SO_ELECTRICWALK

View File

@ -402,23 +402,6 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
break;
}
} //end tsc check
if (src && src->type == BL_PC) {
TBL_PC *sd = BL_CAST(BL_PC,src);
int s;
ARR_FIND(1, 6, s, sd->talisman[s] > 0);
if( s < 5 && atk_elem == s )
ratio += sd->talisman[s] * 2; // +2% custom value
}
if( target && target->type == BL_PC ) {
TBL_PC *tsd = BL_CAST(BL_PC, target);
int t;
ARR_FIND(1, 6, t, tsd->talisman[t] > 0);
if( t < 5 && atk_elem == t )
DAMAGE_SUBRATE(tsd->talisman[t] * 3) // -3% custom value
}
return (int64)damage*ratio/100;
}
@ -3758,17 +3741,7 @@ static int battle_calc_skill_constant_addition(struct Damage wd, struct block_li
struct status_change *tsc = status_get_sc(target);
struct status_data *sstatus = status_get_status_data(src);
struct status_data *tstatus = status_get_status_data(target);
int atk = 0, chorusbonus = 0;
// Minstrel/Wanderer number check for chorus skills.
// Bonus remains 0 unless 3 or more Minstrels/Wanderers are in the party.
if( sd && sd->status.party_id ) {
chorusbonus = party_foreachsamemap(party_sub_count_class, sd, MAPID_THIRDMASK, MAPID_MINSTRELWANDERER);
if( chorusbonus > 7 )
chorusbonus = 5; // Maximum effect possible from 7 or more Minstrels/Wanderers
else if( chorusbonus > 2 )
chorusbonus = chorusbonus - 2; // Effect bonus from additional Minstrels/Wanderers if not above the max possible.
}
int atk = 0;
//Constant/misc additions from skills
switch (skill_id) {
@ -3805,8 +3778,6 @@ static int battle_calc_skill_constant_addition(struct Damage wd, struct block_li
case RA_WUGBITE:
if(sd)
atk = (30*pc_checkskill(sd, RA_TOOTHOFWUG));
if( sc && sc->data[SC_DANCEWITHWUG] )
atk += skill_lv * 10 * chorusbonus; // Dance With Wug Bonus. ATK = [(Skill Level x 10) x Number of Maestro/Wanderer in party(Maximum of 7)] %
break;
case SR_GATEOFHELL:
atk = (status_get_max_hp(src) - status_get_hp(src));
@ -3866,9 +3837,45 @@ static int battle_calc_skill_constant_addition(struct Damage wd, struct block_li
*/
struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, uint16 skill_id)
{
struct map_session_data *sd = BL_CAST(BL_PC, src);
struct status_change *sc = status_get_sc(src);
int chorusbonus = 0, type;
if( sd ) {
// Minstrel/Wanderer number check for chorus skills.
// Bonus remains 0 unless 3 or more Minstrels/Wanderers are in the party.
if( sd->status.party_id ) {
chorusbonus = party_foreachsamemap(party_sub_count_class, sd, MAPID_THIRDMASK, MAPID_MINSTRELWANDERER);
if( chorusbonus > 7 )
chorusbonus = 5; // Maximum effect possible from 7 or more Minstrels/Wanderers
else if( chorusbonus > 2 )
chorusbonus = chorusbonus - 2; // Effect bonus from additional Minstrels/Wanderers if not above the max possible.
}
// Kagerou/Oboro Earth Charm effect +15% wATK
ARR_FIND(1, 6, type, sd->talisman[type] > 0);
if( type == 2 ) {
ATK_ADDRATE(wd.damage, wd.damage2, 15 * sd->talisman[type]);
#ifdef RENEWAL
ATK_ADDRATE(wd.weaponAtk, wd.weaponAtk2, 15 * sd->talisman[type]);
#endif
}
}
//The following are applied on top of current damage and are stackable.
if ( sc ) {
if( sc->data[SC_DANCEWITHWUG] ) {
ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_DANCEWITHWUG]->val1 * 2 * chorusbonus);
#ifdef RENEWAL
ATK_ADDRATE(wd.equipAtk, wd.equipAtk2, sc->data[SC_DANCEWITHWUG]->val1 * 2 * chorusbonus);
#endif
if( skill_id == RA_WUGSTRIKE || skill_id == RA_WUGBITE || skill_id == RA_WUGDASH ) {
ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_DANCEWITHWUG]->val1 * 10 * chorusbonus);
#ifdef RENEWAL
RE_ALLATK_ADDRATE(wd, sc->data[SC_DANCEWITHWUG]->val1 * 10 * chorusbonus);
#endif
}
}
#ifndef RENEWAL
if( sc->data[SC_TRUESIGHT] )
ATK_ADDRATE(wd.damage, wd.damage2, 2*sc->data[SC_TRUESIGHT]->val1);
@ -3980,11 +3987,20 @@ struct Damage battle_calc_defense_reduction(struct Damage wd, struct block_list
#endif
if( sd ) {
int i = sd->ignore_def_by_race[tstatus->race] + sd->ignore_def_by_race[RC_ALL];
int type;
if( i ) {
if( i > 100 ) i = 100;
def1 -= def1 * i / 100;
def2 -= def2 * i / 100;
}
//Kagerou/Oboro Earth Charm effect +5% eDEF
ARR_FIND(1, 6, type, sd->talisman[type] > 0);
if( type == 2 ) {
short i = 5 * sd->talisman[type];
def1 = (def1 * (100 + i)) / 100;
}
}
if( sc && sc->data[SC_EXPIATIO] ){
@ -7399,6 +7415,7 @@ static const struct _battle_data {
{ "feature.warp_suggestions", &battle_config.warp_suggestions_enabled, 0, 0, 1, },
{ "taekwon_mission_mobname", &battle_config.taekwon_mission_mobname, 0, 0, 2, },
{ "teleport_on_portal", &battle_config.teleport_on_portal, 0, 0, 1, },
{ "cart_revo_knockback", &battle_config.cart_revo_knockback, 1, 0, 1, },
};
#ifndef STATS_OPT_OUT
/**

View File

@ -537,6 +537,7 @@ extern struct Battle_Config
int warp_suggestions_enabled;
int taekwon_mission_mobname;
int teleport_on_portal;
int cart_revo_knockback;
} battle_config;
void do_init_battle(void);

View File

@ -105,6 +105,11 @@ int firewall_unit_pos;
int icewall_unit_pos;
int earthstrain_unit_pos;
int firerain_unit_pos;
struct s_skill_nounit_layout skill_nounit_layout[MAX_SKILL_UNIT_LAYOUT];
int overbrand_nounit_pos;
int overbrand_brandish_nounit_pos;
//early declaration
int skill_block_check(struct block_list *bl, enum sc_type type, uint16 skill_id);
static int skill_check_unit_range (struct block_list *bl, int x, int y, uint16 skill_id, uint16 skill_lv);
@ -801,6 +806,17 @@ struct s_skill_unit_layout* skill_get_unit_layout (uint16 skill_id, uint16 skill
return &skill_unit_layout[0]; // default 1x1 layout
}
struct s_skill_nounit_layout* skill_get_nounit_layout(uint16 skill_id, uint16 skill_lv, struct block_list* src, int x, int y, int dir)
{
if( skill_id == LG_OVERBRAND )
return &skill_nounit_layout[overbrand_nounit_pos + dir];
else if( skill_id == LG_OVERBRAND_BRANDISH )
return &skill_nounit_layout[overbrand_brandish_nounit_pos + dir];
ShowError("skill_get_nounit_layout: unknown no-unit layout for skill %d (level %d)\n", skill_id, skill_lv);
return &skill_nounit_layout[0];
}
/*==========================================
* Add effect to skill when hit succesfully target
*------------------------------------------*/
@ -1373,17 +1389,22 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
sc_start(src,bl, SC_STUN, 30 + 8 * skill_lv + (status_get_dex(src) / 10) + (status_get_lv(src) / 4), skill_lv, skill_get_time(skill_id,skill_lv));
break;
case LG_PINPOINTATTACK:
rate = 30 + (((5 * ((sd) ? pc_checkskill(sd,LG_PINPOINTATTACK) : skill_lv)) + (status_get_agi(src) + status_get_lv(src))) / 10);
rate = 30 + 5 * ((sd) ? pc_checkskill(sd,LG_PINPOINTATTACK) : skill_lv) + (status_get_agi(src) + status_get_lv(src)) / 10;
switch( skill_lv ) {
case 1:
sc_start2(src,bl,SC_BLEEDING,rate,skill_lv,src->id,skill_get_time(skill_id,skill_lv));
break;
case 2:
if( dstsd && dstsd->spiritball && rnd()%100 < rate )
pc_delspiritball(dstsd, dstsd->spiritball, 0);
skill_break_equip(src, bl, EQP_HELM, rate * 100, BCT_ENEMY);
break;
default:
skill_break_equip(src,bl,(skill_lv == 3) ? EQP_SHIELD : (skill_lv == 4) ? EQP_ARMOR : EQP_WEAPON,rate * 100,BCT_ENEMY);
case 3:
skill_break_equip(src, bl, EQP_SHIELD, rate * 100, BCT_ENEMY);
break;
case 4:
skill_break_equip(src, bl, EQP_ARMOR, rate * 100, BCT_ENEMY);
break;
case 5:
skill_break_equip(src, bl, EQP_WEAPON, rate * 100, BCT_ENEMY);
break;
}
break;
@ -3042,7 +3063,10 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
case WL_CRIMSONROCK:
dir = map_calc_dir(bl,skill_area_temp[4],skill_area_temp[5]);
break;
case MC_CARTREVOLUTION:
if (battle_config.cart_revo_knockback)
dir = 2; // Official servers push target to the West
break;
}
//blown-specific handling
switch( skill_id ) {
@ -3753,14 +3777,12 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
skill_unitsetting(src,skl->skill_id,skl->skill_lv,skl->x,skl->y,(skl->type<<16)|skl->flag);
break;
case LG_OVERBRAND_BRANDISH: {
short x2 = src->x, y2 = src->y, x = x2, y = y2;
switch(skl->type) {
case 0: case 1: case 7: x2 += 4; x -= 4; y2 += 4; break;
case 3: case 4: case 5: x2 += 4; x -= 4; y -= 4; break;
case 2: y2 += 4; y -= 4; x -= 4; break;
case 6: y2 += 4; y -= 4; x2 += 4; break;
}
map_foreachinarea(skill_area_sub, src->m, x, y, x2, y2, BL_CHAR, src, skl->skill_id, skl->skill_lv, tick, skl->flag|BCT_ENEMY|SD_ANIMATION|1, skill_castend_damage_id);
int x = src->x, y = src->y;
int i, dir = map_calc_dir(src,x,y);
struct s_skill_nounit_layout *layout = skill_get_nounit_layout(skl->skill_id,skl->skill_lv,src,x,y,dir);
for( i = 0; i < layout->count; i++ )
map_foreachincell(skill_area_sub,src->m,x+layout->dx[i],y+layout->dy[i],BL_CHAR,src,skl->skill_id,skl->skill_lv,tick,skl->flag|BCT_ENEMY|SD_ANIMATION|1,skill_castend_damage_id);
}
break;
case RL_FIRE_RAIN: {
@ -5090,6 +5112,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
status_change_end(bl, SC_RUSHWINDMILL, INVALID_TIMER);
status_change_end(bl, SC_ECHOSONG, INVALID_TIMER);
status_change_end(bl, SC_HARMONIZE, INVALID_TIMER);
status_change_end(bl, SC_NETHERWORLD, INVALID_TIMER);
status_change_end(bl, SC_VOICEOFSIREN, INVALID_TIMER);
status_change_end(bl, SC_DEEPSLEEP, INVALID_TIMER);
status_change_end(bl, SC_SIRCLEOFNATURE, INVALID_TIMER);
@ -6460,12 +6483,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
clif_skill_nodamage(src,bl,skill_id,skill_lv,i);
break;
case TF_HIDING:
case ST_CHASEWALK: {
struct status_change* sc = status_get_sc(src);
if( sc && sc->data[SC__FEINTBOMB] )
status_change_end(bl, SC__FEINTBOMB, INVALID_TIMER);
}
case ST_CHASEWALK:
case KO_YAMIKUMO:
if (tsce)
{
@ -6646,6 +6664,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
status_change_end(bl, SC_SLEEP, INVALID_TIMER);
status_change_end(bl, SC_STUN, INVALID_TIMER);
status_change_end(bl, SC_WHITEIMPRISON, INVALID_TIMER);
status_change_end(bl, SC_NETHERWORLD, INVALID_TIMER);
}
//Is this equation really right? It looks so... special.
if(battle_check_undead(tstatus->race,tstatus->def_ele))
@ -7016,6 +7035,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case AM_CP_HELM:
{
unsigned int equip[] = {EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HEAD_TOP};
enum sc_type scid = (sc_type)(SC_STRIPWEAPON + (skill_id - AM_CP_WEAPON));
if( sd && ( bl->type != BL_PC || ( dstsd && pc_checkequip(dstsd,equip[skill_id - AM_CP_WEAPON]) < 0 ) ) ){
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
@ -7023,6 +7043,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
return 0;
}
status_change_end(bl, scid, INVALID_TIMER);
clif_skill_nodamage(src,bl,skill_id,skill_lv,
sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
}
@ -7770,6 +7791,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
for (i = 0; i < 4; i++) {
if( bl->type != BL_PC || ( dstsd && pc_checkequip(dstsd,equip[i]) < 0 ) )
continue;
status_change_end(bl, (sc_type)(SC_STRIPWEAPON + i), INVALID_TIMER);
sc_start(src,bl,(sc_type)(SC_CP_WEAPON + i),100,skill_lv,skilltime);
s++;
}
@ -8524,7 +8546,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
break;
case AB_LAUDAAGNUS:
if( flag&1 || sd == NULL ) {
if( flag&1 || sd == NULL || !sd->status.party_id ) {
if( tsc && (tsc->data[SC_FREEZE] || tsc->data[SC_STONE] || tsc->data[SC_BLIND] ||
tsc->data[SC_BURNING] || tsc->data[SC_FREEZING] || tsc->data[SC_CRYSTALIZE])) {
// Success Chance: (40 + 10 * Skill Level) %
@ -8544,7 +8566,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
break;
case AB_LAUDARAMUS:
if( flag&1 || sd == NULL ) {
if( flag&1 || sd == NULL || !sd->status.party_id ) {
if( tsc && (tsc->data[SC_SLEEP] || tsc->data[SC_STUN] || tsc->data[SC_MANDRAGORA] || tsc->data[SC_SILENCE] || tsc->data[SC_DEEPSLEEP]) ){
// Success Chance: (40 + 10 * Skill Level) %
if( rnd()%100 > 40+10*skill_lv ) break;
@ -11182,15 +11204,11 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
break;
case LG_OVERBRAND: {
uint8 dir = map_calc_dir(src, x, y);
uint8 x2 = x = src->x, y2 = y = src->y;
switch(dir) {
case 0: case 1: case 7: x2++; x--; y2 += 7; break;
case 3: case 4: case 5: x2++; x--; y -= 7; break;
case 2: y2++; y--; x -= 7; break;
case 6: y2++; y--; x2 += 7; break;
}
map_foreachinarea(skill_area_sub, src->m, x, y, x2, y2, BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_ANIMATION|1, skill_castend_damage_id);
int dir = map_calc_dir(src,x,y);
struct s_skill_nounit_layout *layout = skill_get_nounit_layout(skill_id,skill_lv,src,x,y,dir);
for( i = 0; i < layout->count; i++ )
map_foreachincell(skill_area_sub,src->m,x+layout->dx[i],y+layout->dy[i],BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|SD_ANIMATION|1,skill_castend_damage_id);
skill_addtimerskill(src,gettick() + status_get_amotion(src),0,0,0,LG_OVERBRAND_BRANDISH,skill_lv,dir,flag);
}
break;
@ -11919,6 +11937,8 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill
interval = limit;
val2 = 1;
case WM_POEMOFNETHERWORLD: // Can't be placed on top of Land Protector.
if( skill_id == WM_POEMOFNETHERWORLD && map_flag_gvg2(src->m) )
target = BCT_ALL;
case WM_SEVERE_RAINSTORM:
case SO_WATER_INSIGNIA:
case SO_FIRE_INSIGNIA:
@ -12804,9 +12824,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
break;
case UNT_EPICLESIS:
if( bl->type == BL_PC && !battle_check_undead(tstatus->race, tstatus->def_ele) && tstatus->race != RC_DEMON )
{
if( ++sg->val2 % 3 == 0 ) {
if( bl->type == BL_PC && !battle_check_undead(tstatus->race, tstatus->def_ele) && tstatus->race != RC_DEMON ) {
int hp, sp;
switch( sg->skill_lv ) {
case 1: case 2: hp = 3; sp = 2; break;
@ -12815,11 +12833,14 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
}
hp = tstatus->max_hp * hp / 100;
sp = tstatus->max_sp * sp / 100;
if (tsc && tsc->data[SC_AKAITSUKI] && hp)
hp = ~hp + 1;
status_heal(bl, hp, sp, 3);
sc_start(ss, bl, type, 100, sg->skill_lv, (sg->interval * 3) + 100);
}
sc_start(ss, bl, type, 100, sg->skill_lv, sg->interval + 100);
sg->val2++;
// Reveal hidden players every 5 seconds.
if( sg->val2 % 5 == 0 ) {
if( sg->val2 >= 5 ) {
sg->val2 = 0;
// Doesn't remove Invisibility or Chase Walk.
status_change_end(bl,SC_HIDING,INVALID_TIMER);
status_change_end(bl,SC_CLOAKING,INVALID_TIMER);
@ -12857,7 +12878,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
skill_attack(BF_WEAPON,ss,&src->bl,bl,WM_SEVERE_RAINSTORM_MELEE,sg->skill_lv,tick,0);
break;
case UNT_NETHERWORLD:
if( !(status_get_mode(bl)&MD_BOSS) ) {
if( !(status_get_mode(bl)&MD_BOSS) || (!map_flag_gvg2(ss->m) && battle_check_target(&src->bl,bl,BCT_PARTY) < 0) ) {
if( !(tsc && tsc->data[type]) )
sc_start(ss, bl, type, 100, sg->skill_lv, skill_get_time2(sg->skill_id,sg->skill_lv));
}
@ -12983,23 +13004,42 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
if( battle_check_target(&src->bl,bl,BCT_ENEMY) > 0 ) {
switch( sg->unit_id ) {
case UNT_ZENKAI_WATER:
sc_start(ss, bl, SC_CRYSTALIZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
switch (rnd()%2 + 1) {
case 1:
sc_start(ss, bl, SC_FREEZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
break;
case 2:
sc_start(ss, bl, SC_FREEZING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
break;
}
break;
case UNT_ZENKAI_LAND:
switch (rnd()%2 + 1) {
case 1:
sc_start(ss, bl, SC_STONE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
break;
case 2:
sc_start(ss, bl, SC_POISON, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
break;
}
break;
case UNT_ZENKAI_FIRE:
sc_start(ss, bl, SC_BURNING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
break;
case UNT_ZENKAI_WIND:
sc_start(ss, bl, SC_SILENCE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
switch (rnd()%3 + 1) {
case 1:
sc_start(ss, bl, SC_SLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
break;
case 2:
sc_start(ss, bl, SC_SILENCE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
break;
case 3:
sc_start(ss, bl, SC_DEEPSLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
break;
}
break;
}
} else
sc_start2(ss, bl,type,100,sg->val1,sg->val2,skill_get_time2(sg->skill_id, sg->skill_lv));
break;
@ -16927,7 +16967,7 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap)
struct status_change *sc;
if (src && (sc = status_get_sc(src)) != NULL && sc->data[SC__FEINTBOMB]) { // Copycat explodes if caster is still hidden.
map_foreachinrange(skill_area_sub, &group->unit->bl, unit->range, splash_target(src), src, SC_FEINTBOMB, group->skill_lv, tick, BCT_ENEMY|SD_ANIMATION|1, skill_castend_damage_id);
status_change_end(src, SC__FEINTBOMB, INVALID_TIMER);
status_change_end(bl, SC__FEINTBOMB, INVALID_TIMER);
}
skill_delunit(unit);
}
@ -18808,6 +18848,172 @@ void skill_init_unit_layout (void) {
}
void skill_init_nounit_layout (void) {
int i, pos = 0;
memset(skill_nounit_layout,0,sizeof(skill_nounit_layout));
overbrand_nounit_pos = pos;
for( i = 0; i < 8; i++ ) {
if( i&1 ) {
skill_nounit_layout[pos].count = 33;
if( i&2 ) {
if( i&4 ) { // 7
int dx[] = { 5, 6, 7, 5, 6, 4, 5, 6, 4, 5, 3, 4, 5, 3, 4, 2, 3, 4, 2, 3, 1, 2, 3, 1, 2, 0, 1, 2, 0, 1,-1, 0, 1};
int dy[] = { 7, 6, 5, 6, 5, 6, 5, 4, 5, 4, 5, 4, 3, 4, 3, 4, 3, 2, 3, 2, 3, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0,-1};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
} else { // 3
int dx[] = {-5,-6,-7,-5,-6,-4,-5,-6,-4,-5,-3,-4,-5,-3,-4,-2,-3,-4,-2,-3,-1,-2,-3,-1,-2, 0,-1,-2, 0,-1, 1, 0,-1};
int dy[] = {-7,-6,-5,-6,-5,-6,-5,-4,-5,-4,-5,-4,-3,-4,-3,-4,-3,-2,-3,-2,-3,-2,-1,-2,-1,-2,-1, 0,-1, 0,-1, 0, 1};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
}
} else {
if( i&4 ) { // 5
int dx[] = { 7, 6, 5, 6, 5, 6, 5, 4, 5, 4, 5, 4, 3, 4, 3, 4, 3, 2, 3, 2, 3, 2, 1, 2, 1, 2, 1, 0, 1, 0, 1, 0,-1};
int dy[] = {-5,-6,-7,-5,-6,-4,-5,-6,-4,-5,-3,-4,-5,-3,-4,-2,-3,-4,-2,-3,-1,-2,-3,-1,-2, 0,-1,-2, 0,-1, 1, 0,-1};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
} else { // 1
int dx[] = {-7,-6,-5,-6,-5,-6,-5,-4,-5,-4,-5,-4,-3,-4,-3,-4,-3,-2,-3,-2,-3,-2,-1,-2,-1,-2,-1, 0,-1, 0,-1, 0, 1};
int dy[] = { 5, 6, 7, 5, 6, 4, 5, 6, 4, 5, 3, 4, 5, 3, 4, 2, 3, 4, 2, 3, 1, 2, 3, 1, 2, 0, 1, 2, 0, 1,-1, 0, 1};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
}
}
} else {
skill_nounit_layout[pos].count = 21;
if( i&2 ) {
if( i&4 ) { // 6
int dx[] = { 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6};
int dy[] = { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
} else { // 2
int dx[] = {-6,-5,-4,-3,-2,-1, 0,-6,-5,-4,-3,-2,-1, 0,-6,-5,-4,-3,-2,-1, 0};
int dy[] = { 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,-1,-1,-1,-1,-1,-1,-1};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
}
} else {
if( i&4 ) { // 4
int dx[] = {-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1};
int dy[] = { 0, 0, 0,-1,-1,-1,-2,-2,-2,-3,-3,-3,-4,-4,-4,-5,-5,-5,-6,-6,-6};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
} else { // 0
int dx[] = {-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1};
int dy[] = { 6, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
}
}
}
pos++;
}
overbrand_brandish_nounit_pos = pos;
for( i = 0; i < 8; i++ ) {
if( i&1 ) {
skill_nounit_layout[pos].count = 74;
if( i&2 ) {
if( i&4 ) { // 7
int dx[] = {-2,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8,-2,-1, 0, 1, 2, 3, 4, 5, 6, 7,
-3,-2,-1, 0, 1, 2, 3, 4, 5, 6, 7,-3,-2,-1,-0, 1, 2, 3, 4, 5, 6,
-4,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6,-4,-3,-2,-1,-0, 1, 2, 3, 4, 5,
-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5};
int dy[] = { 8, 7, 6, 5, 4, 3, 2, 1, 0,-1,-2, 7, 6, 5, 4, 3, 2, 1, 0,-1,-2,
7, 6, 5, 4, 3, 2, 1, 0,-1,-2,-3, 6, 5, 4, 3, 2, 1, 0,-1,-2,-3,
6, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,
5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
} else { // 3
int dx[] = { 2, 1, 0,-1,-2,-3,-4,-5,-6,-7,-8, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7,
3, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7, 3, 2, 1, 0,-1,-2,-3,-4,-5,-6,
4, 3, 2, 1, 0,-1,-2,-3,-4,-5,-6, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5,
5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5};
int dy[] = {-8,-7,-6,-5,-4,-3,-2,-1, 0, 1, 2,-7,-6,-5,-4,-3,-2,-1, 0, 1, 2,
-7,-6,-5,-4,-3,-2,-1, 0, 1, 2, 3,-6,-5,-4,-3,-2,-1, 0, 1, 2, 3,
-6,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4,
-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
}
} else {
if( i&4 ) { // 5
int dx[] = { 8, 7, 6, 5, 4, 3, 2, 1, 0,-1,-2, 7, 6, 5, 4, 3, 2, 1, 0,-1,-2,
7, 6, 5, 4, 3, 2, 1, 0,-1,-2,-3, 6, 5, 4, 3, 2, 1, 0,-1,-2,-3,
6, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,
5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5};
int dy[] = { 2, 1, 0,-1,-2,-3,-4,-5,-6,-7,-8, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7,
3, 2, 1, 0,-1,-2,-3,-4,-5,-6,-7, 3, 2, 1, 0,-1,-2,-3,-4,-5,-6,
4, 3, 2, 1, 0,-1,-2,-3,-4,-5,-6, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5,
5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
} else { // 1
int dx[] = {-8,-7,-6,-5,-4,-3,-2,-1, 0, 1, 2,-7,-6,-5,-4,-3,-2,-1, 0, 1, 2,
-7,-6,-5,-4,-3,-2,-1, 0, 1, 2, 3,-6,-5,-4,-3,-2,-1, 0, 1, 2, 3,
-6,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4,
-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5};
int dy[] = {-2,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8,-2,-1, 0, 1, 2, 3, 4, 5, 6, 7,
-3,-2,-1, 0, 1, 2, 3, 4, 5, 6, 7,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6,
-4,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5,
-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
}
}
} else {
skill_nounit_layout[pos].count = 44;
if( i&2 ) {
if( i&4 ) { // 6
int dx[] = { 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3};
int dy[] = { 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0,-1,-1,-1,-1,-2,-2,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4,-5,-5,-5,-5};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
} else { // 2
int dx[] = {-3,-2,-1, 0,-3,-2,-1, 0,-3,-2,-1, 0,-3,-2,-1, 0,-3,-2,-1, 0,-3,-2,-1, 0,-3,-2,-1, 0,-3,-2,-1, 0,-3,-2,-1, 0,-3,-2,-1, 0,-3,-2,-1, 0};
int dy[] = { 5, 5, 5, 5, 4, 4, 4, 4, 3, 3, 3, 3, 2, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0,-1,-1,-1,-1,-2,-2,-2,-2,-3,-3,-3,-3,-4,-4,-4,-4,-5,-5,-5,-5};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
}
} else {
if( i&4 ) { // 4
int dx[] = { 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5, 5, 4, 3, 2, 1, 0,-1,-2,-3,-4,-5};
int dy[] = {-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-3,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
} else { // 0
int dx[] = {-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5};
int dy[] = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
memcpy(skill_nounit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_nounit_layout[pos].dy,dy,sizeof(dy));
}
}
}
pos++;
}
}
int skill_block_check(struct block_list *bl, sc_type type , uint16 skill_id) {
int inf = 0;
int inf3 = 0;
@ -19508,6 +19714,7 @@ static void skill_readdb(void) {
}
skill_init_unit_layout();
skill_init_nounit_layout();
}
void skill_reload (void) {

View File

@ -188,6 +188,12 @@ struct s_skill_unit_layout {
int dy[MAX_SKILL_UNIT_COUNT];
};
struct s_skill_nounit_layout {
int count;
int dx[MAX_SKILL_UNIT_COUNT];
int dy[MAX_SKILL_UNIT_COUNT];
};
#define MAX_SKILLTIMERSKILL 15
struct skill_timerskill {
int timer;

View File

@ -3885,7 +3885,6 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
|| sc->data[SC_TRICKDEAD]
|| sc->data[SC_BLEEDING]
|| sc->data[SC_MAGICMUSHROOM]
|| sc->data[SC_RAISINGDRAGON]
|| sc->data[SC_SATURDAYNIGHTFEVER]
) // No regen
regen->flag = 0;
@ -3918,11 +3917,6 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
} else
regen->flag&=~sce->val4; // Remove regen as specified by val4
}
if (sc->data[SC_EPICLESIS]) {
regen->rate.hp += sc->data[SC_EPICLESIS]->val3;
regen->rate.sp += sc->data[SC_EPICLESIS]->val4;
}
if(sc->data[SC_GT_REVITALIZE]) {
regen->hp = cap_value(regen->hp*sc->data[SC_GT_REVITALIZE]->val3/100, 1, SHRT_MAX);
regen->state.walk= 1;
@ -6942,7 +6936,7 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
/// Example: 25% -> sc_def2=2000 -> 5%; 2500ms -> tick_def2=2000 -> 500ms
int sc_def2 = 0, tick_def2 = 0;
struct status_data *status, *status_src;
struct status_data *status, *status_src, *b_status;
struct status_change *sc;
struct map_session_data *sd;
@ -6987,6 +6981,7 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
sd = BL_CAST(BL_PC,bl);
status = status_get_status_data(bl);
status_src = status_get_status_data(src);
b_status = status_get_base_status(bl);
sc = status_get_sc(bl);
if( sc && !sc->count )
sc = NULL;
@ -7058,9 +7053,9 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
sc_def = status->agi*50;
break;
case SC_DEEPSLEEP:
sc_def = status->int_*50;
sc_def = b_status->int_*50;
tick_def = 0; // Linear reduction instead
tick_def2 = (status->int_ + status_get_lv(bl))*50; // kRO balance update lists this formula
tick_def2 = (b_status->int_ + status_get_lv(bl))*50; // kRO balance update lists this formula
break;
case SC_MAGICMIRROR:
case SC_ARMORCHANGE:
@ -7102,10 +7097,10 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
tick_def2 = status->agi*100;
break;
case SC_CRYSTALIZE:
tick_def2 = status->vit*100;
tick_def2 = b_status->vit*100;
break;
case SC_VACUUM_EXTREME:
tick_def2 = status->str*50;
tick_def2 = b_status->str*50;
break;
case SC_MANDRAGORA:
sc_def = (status->vit + status->luk)*20;
@ -9252,7 +9247,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
}
break;
case SC_PRESTIGE:
val2 = (status->int_ + status->luk) * (val1 / 20) * (status_get_lv(bl) / 200) + val1; // Chance to evade magic damage.
val2 = (status->int_ + status->luk) * val1 / 20 * status_get_lv(bl) / 200 + val1; // Chance to evade magic damage.
val1 *= 15; // Defence added
if( sd )
val1 += (10 * pc_checkskill(sd,CR_DEFENDER)) * (status_get_lv(bl) / 100);
@ -9551,24 +9546,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
break;
case SC_EPICLESIS:
val2 = 5 * val1; //HP rate bonus
switch (val1) { //! FIXME, looks so weird!
//val3: HP regen rate bonus
//val4: SP regen rate bonus
case 1:
case 2:
val3 = 3; //HP regen rate bonus
val4 = 2; //SP regen rate bonus
break;
case 3:
case 4:
val3 = 4; //HP regen rate bonus
val4 = 3; //SP regen rate bonus
break;
case 5:
val3 = 5; //HP regen rate bonus
val4 = 4; //SP regen rate bonus
break;
}
break;
/* Rebellion */
@ -10607,8 +10584,7 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
break;
case SC_RAISINGDRAGON:
if( sd && sce->val2 && !pc_isdead(sd) ) {
int i;
i = min(sd->spiritball,5);
int i = min(sd->spiritball,5);
pc_delspiritball(sd, sd->spiritball, 0);
status_change_end(bl, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
while( i > 0 ) {