diff --git a/db/const.txt b/db/const.txt index 89a249c2b8..7ea74e1895 100644 --- a/db/const.txt +++ b/db/const.txt @@ -1737,7 +1737,8 @@ SC_QUEST_BUFF1 589 SC_QUEST_BUFF2 590 SC_QUEST_BUFF3 591 SC_ALL_RIDING 592 -SC_EXTREMITYFIST2 593 +SC_TEARGAS_SOB 593 +SC_EXTREMITYFIST2 594 //Status Icon SI_BLANK -1 diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt index bc9b90e9bc..ac68c675f1 100644 --- a/db/pre-re/skill_cast_db.txt +++ b/db/pre-re/skill_cast_db.txt @@ -1464,7 +1464,7 @@ //-- WM_DOMINION_IMPULSE 2417,0,1000,0,0,0,0 //-- WM_SEVERE_RAINSTORM -2418,1500:2000:2500:3000:3500,1000,0,900:1500:2100:2700:3000,0,5000:5500:6000:6500:7000 +2418,1500:2000:2500:3000:3500,1000,0,3300,0,5000:5500:6000:6500:7000 //-- WM_POEMOFNETHERWORLD 2419,3000,0,0,9000:11000:13000:15000:17000,8000:10000:12000:14000:16000,0 //-- WM_VOICEOFSIREN @@ -1572,7 +1572,7 @@ //-- GN_CRAZYWEED_ATK 2484,0,0,0,100,0,0 //-- GN_DEMONIC_FIRE -2485,3000:3500:4000:4500:5000,500,0,10000:12000:14000:16000:18000,8000:16000:24000:32000:40000,5000 +2485,3000:3500:4000:4500:5000,500,0,10000:0:16000:25000:0,8000:16000:24000:32000:40000,5000 //-- GN_FIRE_EXPANSION 2486,2000,500,0,0,0,0 //-- GN_FIRE_EXPANSION_SMOKE_POWDER @@ -1723,7 +1723,7 @@ //-- HLIF_AVOID 8002,0,35000,0,40000:35000:30000:25000:20000,0,0 //-- HLIF_CHANGE -8004,0,600000:900000:1200000,0,60000:120000:180000,0,0 +8004,0,600000:900000:1200000,0,60000:180000:300000,0,0 //-- HAMI_CASTLE 8005,0,0,0,0,60000:70000:80000:90000:129000,0 //-- HAMI_DEFENCE diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 7712edd4c8..d4788d4c82 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -59,7 +59,7 @@ // 0x0200- spell range affected by NJ_SHADOWJUMP // 0x0400- spell range affected by WL_RADIUS // 0x0800- spell range affected by RA_RESEARCHTRAP -// 0x1000- spell that can't be copied +// 0x1000- Spell that does not affect user that has NC_HOVERING active // 0x2000- spell that can be using while riding warg // 0x4000- spell that can't be used while in mado // 17 Name @@ -182,7 +182,7 @@ 89,9,6,2,1,0,0,10,1,yes,0,0x2000,0,magic,2,0x20, WZ_STORMGUST,Storm Gust 90,9,8,1,2,0,0,5,1:2:3:4:5,yes,0,0x2000,0,magic,0,0x20, WZ_EARTHSPIKE,Earth Spike 91,9,8,2,2,0,0,5,1:2:3:4:5,yes,0,0x2000,0,magic,0,0x20, WZ_HEAVENDRIVE,Heaven's Drive -92,9,6,2,2,0x1,0,5,1,yes,0,0,3,magic,0,0x20, WZ_QUAGMIRE,Quagmire +92,9,6,2,2,0x1,0,5,1,yes,0,0,3,magic,0,0x1020, WZ_QUAGMIRE,Quagmire 93,9,6,1,0,0x1,0,1,1,yes,0,0,0,magic,0,0x0, WZ_ESTIMATION,Sense //**** @@ -211,15 +211,15 @@ //**** // Hunter -115,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,6:7:8:9:10,0x2000, HT_SKIDTRAP,Skid Trap -116,3,6,2,2,0x42,1,5,1,no,0,0x80,0,misc,0,0x2800, HT_LANDMINE,Land Mine -117,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,0,0x2000, HT_ANKLESNARE,Ankle Snare -118,3,6,2,0,0x2,1,5,1,no,0,0x80,0,misc,0,0x2000, HT_SHOCKWAVE,Shockwave Trap -119,3,6,2,0,0x3,2,5,1,no,0,0x80,0,misc,0,0x2000, HT_SANDMAN,Sandman -120,3,6,2,0,0x3,1,5,1,no,0,0x80,0,misc,0,0x2000, HT_FLASHER,Flasher -121,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x2800, HT_FREEZINGTRAP,Freezing Trap -122,3,6,2,4,0x42,1,5,1,no,0,0x80,0,misc,0,0x2800, HT_BLASTMINE,Blast Mine -123,3,6,2,3,0x42,2,5,1,no,0,0x80,0,misc,0,0x2800, HT_CLAYMORETRAP,Claymore Trap +115,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,6:7:8:9:10,0x3000, HT_SKIDTRAP,Skid Trap +116,3,6,2,2,0x42,1,5,1,no,0,0x80,0,misc,0,0x3800, HT_LANDMINE,Land Mine +117,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,0,0x3000, HT_ANKLESNARE,Ankle Snare +118,3,6,2,0,0x2,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_SHOCKWAVE,Shockwave Trap +119,3,6,2,0,0x3,2,5,1,no,0,0x80,0,misc,0,0x3000, HT_SANDMAN,Sandman +120,3,6,2,0,0x3,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_FLASHER,Flasher +121,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x3800, HT_FREEZINGTRAP,Freezing Trap +122,3,6,2,4,0x42,1,5,1,no,0,0x80,0,misc,0,0x3800, HT_BLASTMINE,Blast Mine +123,3,6,2,3,0x42,2,5,1,no,0,0x80,0,misc,0,0x3800, HT_CLAYMORETRAP,Claymore Trap 124,2,6,32,0,0x1,0,1,1,no,0,0,0,misc,0,0x0, HT_REMOVETRAP,Remove Trap 125,3,6,2,0,0x1,0,1,1,no,0,0x80,0,misc,0,0x2000, HT_TALKIEBOX,Talkie Box 126,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, HT_BEASTBANE,Beast Bane @@ -361,7 +361,7 @@ 247,9,6,4,0,0x1,1,5,0,no,0,0,0,none,0,0x0, AM_RESURRECTHOMUN,Homunculus Resurrection //**** -// Creator +// Crusader 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 @@ -405,9 +405,9 @@ 282,9,6,16,4,0x1,0,5,1,yes,0,0xC00,0,magic,0,0x20, SA_LIGHTNINGLOADER,Endow Tornado 283,9,6,16,2,0x1,0,5,1,yes,0,0xC00,0,magic,0,0x20, SA_SEISMICWEAPON,Endow Quake 284,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, SA_DRAGONOLOGY,Dragonology -285,2,6,2,3,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SA_VOLCANO,Volcano -286,2,6,2,1,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SA_DELUGE,Deluge -287,2,6,2,4,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SA_VIOLENTGALE,Whirlwind +285,2,6,2,3,0x1,0,5,1,yes,0,0,0,magic,0,0x1020, SA_VOLCANO,Volcano +286,2,6,2,1,0x1,0,5,1,yes,0,0,0,magic,0,0x1020, SA_DELUGE,Deluge +287,2,6,2,4,0x1,0,5,1,yes,0,0,0,magic,0,0x1020, SA_VIOLENTGALE,Whirlwind 288,2,6,2,0,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SA_LANDPROTECTOR,Magnetic Earth 289,9,6,1,0,0x1,0:0:0:0:0:-1,5,1,yes,0,0xE00,0,magic,0,0x20, SA_DISPELL,Dispell 290,0,6,4,0,0x1,0,10,1,yes,0,0,0,magic,0,0x0, SA_ABRACADABRA,Hocus-pocus @@ -697,7 +697,7 @@ 481,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, HP_MANARECHARGE,Mana Recharge 482,0,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,0x0, PF_DOUBLECASTING,Double Casting 483,16,6,2,0,0x1,1:2:3:4:5,1,1,no,0,0,0,none,0,0x20, HW_GANBANTEIN,Ganbantein -484,9,6,2,2,0x91,0,5,1,yes,0,0x18000,0,misc,0,0x30, HW_GRAVITATION,Gravitation Field +484,9,6,2,2,0x91,0,5,1,yes,0,0x18000,0,misc,0,0x1030, HW_GRAVITATION,Gravitation Field 485,-2,6,1,-1,0x8,0,10,1,no,0,0,0,weapon,0,0x4000, WS_CARTTERMINATION,Cart Termination 486,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x4000, WS_OVERTHRUSTMAX,Maximum Power Thrust 487,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x8, CG_LONGINGFREEDOM,Longing for Freedom @@ -743,7 +743,7 @@ // Ninja 522,0,0,0,0,0,0,10,1,no,0,0,0,weapon,0,0x0, NJ_TOBIDOUGU,Shuriken Training 523,9,6,1,-1,0x40,0,10,1,no,0,0,0,weapon,0,0x0, NJ_SYURIKEN,Throw Shuriken -524,9,8,1,-1,0x40,0,5,3,no,0,0,0,weapon,0,0x0, NJ_KUNAI,Throw Kunai +524,9,8,1,-1,0x48,0,5,3,no,0,0,0,weapon,0,0x0, NJ_KUNAI,Throw Kunai 525,9,8,1,-1,0x6,1,5,-3:-3:-4:-4:-5,yes,0,0,0,weapon,0,0x0, NJ_HUUMA,Throw Huuma Shuriken 526,9,6,1,0,0x50,0,10,1,no,0,0x18000,0,misc,0,0x0, NJ_ZENYNAGE,Throw Zeny 527,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,3,0x0, NJ_TATAMIGAESHI,Improvised Defense @@ -757,7 +757,7 @@ 535,0,8,4,3,0,0,10,1,yes,0,0,0,magic,1,0x0, NJ_KAENSIN,Crimson Fire Formation 536,9,8,1,3,0x2,2,5,3,yes,0,0,0,magic,0,0x0, NJ_BAKUENRYU,Raging Fire Dragon 537,9,8,1,1,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,0,0x0, NJ_HYOUSENSOU,Spear of Ice -538,9,6,2,1,0x1,0,10,1,yes,0,0,0,magic,0,0x0, NJ_SUITON,Hidden Water +538,9,6,2,1,0x1,0,10,1,yes,0,0,0,magic,0,0x1000, NJ_SUITON,Hidden Water 539,0,6,4,1,0x2,3,5,1,yes,0,0,0,magic,0,0x0, NJ_HYOUSYOURAKU,Ice Meteor 540,9,8,1,4,0,0,10,1:2:2:3:3:4:4:5:5:6,yes,0,0,0,magic,0,0x0, NJ_HUUJIN,Wind Blade 541,9,6,4,4,0x2,2:2:3:3:4,5,1,yes,0,0,0,magic,0,0x0, NJ_RAIGEKISAI,Lightning Strike of Destruction @@ -886,11 +886,11 @@ 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,0xC2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0,0x0, RK_DRAGONBREATH,Dragon Breath +2008,9,6,2,3,0x2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,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 -2012,1,6,4,-1,0,0x8,1,1,yes,0,0,0,weapon,0,0x0, RK_CRUSHSTRIKE,Crush Strike +2012,1,6,4,-1,0,0,1,1,yes,0,0,0,weapon,0,0x0, RK_CRUSHSTRIKE,Crush Strike 2013,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_REFRESH,Refresh 2014,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_GIANTGROWTH,Giant Growth 2015,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_STONEHARDSKIN,Stone Hard Skin @@ -898,7 +898,7 @@ 2017,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,7,0x0, RK_STORMBLAST,Storm Blast 2018,0,6,4,0,0x3,-1,1,1,yes,0,0,0,none,0,0x0, RK_FIGHTINGSPIRIT,Fighting Spirit //CHECK Is this splash needed? 2019,9,6,4,6,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_ABUNDANCE,Abundance -2020,5:6:7:8:9,6,16,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RK_PHANTOMTHRUST,Phantom Thrust +2020,5:6:7:8:9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RK_PHANTOMTHRUST,Phantom Thrust //**** // WL Warlock @@ -947,7 +947,7 @@ 2027,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, GC_POISONINGWEAPON,Poisoning Weapon 2028,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, GC_WEAPONBLOCKING,Weapon Blocking 2029,0,6,4,-1,0x22,1,5,1,no,0,0,0,weapon,3,0x0, GC_COUNTERSLASH,Counter Slash -2030,-2,6,4,-1,0x1,0,5,1,no,0,0x200,0,weapon,0,0x0, GC_WEAPONCRUSH,Weapon Crush +2030,-2,6,4,-1,0,0,5,1,no,0,0x200,0,weapon,0,0x0, GC_WEAPONCRUSH,Weapon Crush 2031,1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, GC_VENOMPRESSURE,Venom Pressure 2032,5,6,2,0,0x1,0,5,1,yes,0,0,1,none,0,0x0, GC_POISONSMOKE,Poison Smoke 2033,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x40, GC_CLOAKINGEXCEED,Cloaking Exceed @@ -993,7 +993,7 @@ 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,-1,0,0,5,1,no,0,0,0,weapon,0,0x2000, RA_WUGSTRIKE,Warg Strike +2243,9,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0x2000, RA_WUGSTRIKE,Warg Strike 2244,9,6,1,-1,0,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 @@ -1077,7 +1077,7 @@ 2317,1,6,2,-1,0x2,5,5,1,yes,0,0,0,none,3:4:5:6:7,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,0x0, LG_MOONSLASHER,Moon Slasher +2320,0,6,4,-1,0x2,3,5,1,yes,0,0,0,weapon,0,0x1000, LG_MOONSLASHER,Moon Slasher 2321,1,8,2,6,0x2,5,5,-7,yes,0,0,0,weapon,0,0x0, LG_RAYOFGENESIS,Ray of Genesis 2322,0,6,16,0,0x3,1,5,1,yes,0,0,0,none,0,0x0, LG_PIETY,Piety 2323,0,8,4,2,0x2,1:1:2:2:3,5,-5,yes,0,0,0,weapon,0,0x0, LG_EARTHDRIVE,Earth Drive @@ -1090,14 +1090,14 @@ 2327,0,8,4,-1,0x2,2,5,-3,no,0,0,0,weapon,3,0x0, SR_SKYNETBLOW,Sky Net Blow 2328,0,6,4,-1,0x2,1:2:3:4:5,5,1,no,0,0,0,weapon,0,0x0, SR_EARTHSHAKER,Earth Shaker 2329,-2,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FALLENEMPIRE,Fallen Empire -2330,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon //CHECK Need to fix to be enemy targeted and also combo after Fallen Empire. -2331,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate +2330,-2,6,1,-1,0x2,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon +2331,1:2:3:3:4:4:5:5:6:7,6,1,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate 2332,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster 2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_CRESCENTELBOW,Crescent Elbow //CHECK Check the autospell ID. 2334,0,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0, SR_CURSEDCIRCLE,Cursed Circle 2335,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_LIGHTNINGWALK,Lightning Walk 2336,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6,0x0, SR_KNUCKLEARROW,Knuckle Arrow -2337,0,6,4,-1,0x2,2,1,1,yes,0,0,0,weapon,0,0x0, SR_WINDMILL,Windmill +2337,0,6,4,-1,0x2,2,1,1,yes,0,0,0,weapon,0,0x1000, SR_WINDMILL,Windmill 2338,0,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0, SR_RAISINGDRAGON,Raising Dragon 2339,0,0,0,0,0,0,5,1,no,0,0,0,none,0,0x0, SR_GENTLETOUCH,Gentle Touch 2340,0,6,4,0,0x3,2,1,1,no,0,0,0,none,0,0x0, SR_ASSIMILATEPOWER,Assimilate Power @@ -1154,8 +1154,8 @@ //**** // SO Sorcerer (statis blocking need to be confirmed) -2443,0,6,4,3,0,0,5,1,yes,0,0,8:10:12:14:16,magic,0,0x20, SO_FIREWALK,Fire Walk //CHECK Video and data shows each cell only hits once. -2444,0,6,4,4,0,0,5,1,yes,0,0,8:10:12:14:16,magic,0,0x20, SO_ELECTRICWALK,Electric Walk +2443,0,6,4,3,0,0,5,1,yes,0,0,8:10:12:14:16,magic,0,0x1020, SO_FIREWALK,Fire Walk //CHECK Video and data shows each cell only hits once. +2444,0,6,4,4,0,0,5,1,yes,0,0,8:10:12:14:16,magic,0,0x1020, SO_ELECTRICWALK,Electric Walk 2445,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x20, SO_SPELLFIST,Spell Fist 2446,9,6,2,2,0,0,5,-3,yes,0,0,0,magic,0,0x20, SO_EARTHGRAVE,Earth Grave 2447,9,6,2,1,0,0,5,-5,yes,0,0,0,magic,0,0x20, SO_DIAMONDDUST,Diamond Dust @@ -1164,7 +1164,7 @@ 2450,9,6,2,5,0,0,5,1,yes,0,0,0,magic,0,0x20, SO_CLOUD_KILL,Cloud Kill 2451,9,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x20, SO_STRIKING,Striking //CHECK Data shows a % for increased successful refine rate. Is this true? 2452,9,6,2,3,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SO_WARMER,Warmer -2453,9,6,2,0,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SO_VACUUM_EXTREME,Vacuum Extreme +2453,9,6,2,0,0x1,0,5,1,yes,0,0,0,magic,0,0x1020, SO_VACUUM_EXTREME,Vacuum Extreme 2454,9,6,1,4,0x2,1:1:2:2:3,5,1,yes,0,0,0,magic,0,0x20, SO_VARETYR_SPEAR,Varetyr Spear 2455,7:7:7:7:9,6,2,0,0x3,1:1:2:2:3,5,1,yes,0,0,0,magic,0,0x20, SO_ARRULLO,Arrullo 2456,0,6,4,0,0x1,0,4,1,yes,0,0,0,none,0,0x0, SO_EL_CONTROL,Spirit Control @@ -1195,7 +1195,7 @@ 2483,11,6,2,0,0x3,4,10,1,yes,0,0x2000,0,weapon,0,0x0, GN_CRAZYWEED,Crazy Weed 2484,0,6,2,2,0x2,2,10,1,no,0,0x2000,0,weapon,0,0x0, GN_CRAZYWEED_ATK,Crazy Weed Attack 2485,9,6,2,3,0,0,5,1,yes,0,0,0,magic,0,0x0, GN_DEMONIC_FIRE,Demonic Fire -2486,9,6,2,0,0,0,5,1,yes,0,0,0,none,0,0x0, GN_FIRE_EXPANSION,Fire Expansion //CHECK FIX ME!!!! Level 1 is reducing the damage. Should increase it by 50% +2486,9,6,2,0,0,0,5,1,yes,0,0,0,none,0,0x0, GN_FIRE_EXPANSION,Fire Expansion 2487,9,6,2,0,0,0,1,1,no,0,0,0,none,0,0x0, GN_FIRE_EXPANSION_SMOKE_POWDER,Fire Expansion Smoke Powder 2488,9,6,2,0,0,0,1,1,no,0,0,0,none,0,0x0, GN_FIRE_EXPANSION_TEAR_GAS,Fire Expansion Tear Gas 2489,11,6,1,0,0,0,10,1:2:3:4:5:6:7:8:9:10,no,0,0,0,weapon,0,0x0, GN_FIRE_EXPANSION_ACID,Fire Expansion Acid diff --git a/db/pre-re/skill_require_db.txt b/db/pre-re/skill_require_db.txt index d259c4ae26..102f4502a0 100644 --- a/db/pre-re/skill_require_db.txt +++ b/db/pre-re/skill_require_db.txt @@ -599,7 +599,7 @@ 2204,0,0,50:60:70:80:90,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 //WL_JACKFROST#Jack Frost# 2205,0,0,40:42:44:46:48,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 //WL_MARSHOFABYSS#Marsh of Abyss# 2206,0,0,100:120:140:160: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,0,0 //WL_RECOGNIZEDSPELL#Recognized Spell# -2207,0,0,32:34:36:38: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 //WL_SIENNAEXECRATE#Sienna Execrate# +2207,0,0,32:34:36:38:40,0,0,0,99,0,0,none,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SIENNAEXECRATE#Sienna Execrate# 2209,0,0,50:60:70:80:90,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 //WL_STASIS#Stasis# 2210,0,0,20:24:28:32:36,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 //WL_DRAINLIFE#Drain Life# @@ -758,8 +758,8 @@ 2327,0,0,8:9:10:11:12,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_SKYNETBLOW#Sky Net Blow# 2328,0,0,36:40:44:48:52,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_EARTHSHAKER#Earth Shaker# 2329,0,0,20:30:40:50:60,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire# -2330,0,0,1:2:3:4:5:6:7:8:9:10,-12:-14:-16:-18:-20:-22:-24:-26:-28:-30,-6:-7:-8:-9:-10:-11:-12:-13:-14:-15,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon# -2331,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_HELLGATE#Hell Gate# +2330,0,0,1:2:3:4:5:6:7:8:9:10,0,0,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon# +2331,0,0,1,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_HELLGATE#Hell Gate# 2332,0,0,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,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster# 2333,0,0,80,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow# 2334,0,0,40:60:80:100:120,-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_CURSEDCIRCLE#Cursed Circle# diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index 8eb560b75e..8878739827 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1482,7 +1482,7 @@ //-- WM_DOMINION_IMPULSE 2417,0,1000,0,0,0,0,-1 //-- WM_SEVERE_RAINSTORM -2418,1500:2000:2500:3000:3500,1000,0,900:1500:2100:2700:3000,0,5000:5500:6000:6500:7000,500 +2418,1500:2000:2500:3000:3500,1000,0,3300,0,5000:5500:6000:6500:7000,500 //-- WM_POEMOFNETHERWORLD 2419,3000,0,0,9000:11000:13000:15000:17000,8000:10000:12000:14000:16000,0,-1 //-- WM_VOICEOFSIREN @@ -1594,7 +1594,7 @@ //-- GN_CRAZYWEED_ATK 2484,0,0,0,100,0,0,-1 //-- GN_DEMONIC_FIRE -2485,3000:3500:4000:4500:5000,500,0,10000:12000:14000:16000:18000,8000:16000:24000:32000:40000,5000,-1 +2485,3000:3500:4000:4500:5000,500,0,10000:0:16000:25000:0,8000:16000:24000:32000:40000,5000,-1 //-- GN_FIRE_EXPANSION 2486,2000,500,0,0,0,0,-1 //-- GN_FIRE_EXPANSION_SMOKE_POWDER @@ -1763,7 +1763,7 @@ //-- HLIF_AVOID 8002,0,35000,0,40000:35000:30000:25000:20000,0,0,-1 //-- HLIF_CHANGE -8004,0,600000:900000:1200000,0,60000:120000:180000,0,0,-1 +8004,0,600000:900000:1200000,0,60000:180000:300000,0,0,-1 //-- HAMI_CASTLE 8005,0,0,0,0,60000:70000:80000:90000:129000,0,-1 //-- HAMI_DEFENCE diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 43a765a53d..c7a5a70bf2 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -59,7 +59,7 @@ // 0x0200- spell range affected by NJ_SHADOWJUMP // 0x0400- spell range affected by WL_RADIUS // 0x0800- spell range affected by RA_RESEARCHTRAP -// 0x1000- free +// 0x1000- Spell that does not affect user that has NC_HOVERING active // 0x2000- spell that can be using while riding warg // 0x4000- spell that can't be used while in mado // 17 Name @@ -182,7 +182,7 @@ 89,9,6,2,1,0,0,10,1,yes,0,0x2000,0,magic,2,0x20, WZ_STORMGUST,Storm Gust 90,9,8,1,2,0,0,5,1:2:3:4:5,yes,0,0x2000,0,magic,0,0x20, WZ_EARTHSPIKE,Earth Spike 91,9,8,2,2,0,0,5,1:2:3:4:5,yes,0,0x2000,0,magic,0,0x20, WZ_HEAVENDRIVE,Heaven's Drive -92,9,6,2,2,0x1,0,5,1,yes,0,0,3,magic,0,0x20, WZ_QUAGMIRE,Quagmire +92,9,6,2,2,0x1,0,5,1,yes,0,0,3,magic,0,0x1020, WZ_QUAGMIRE,Quagmire 93,9,6,1,0,0x1,0,1,1,yes,0,0,0,magic,0,0x0, WZ_ESTIMATION,Sense //**** @@ -211,15 +211,15 @@ //**** // Hunter -115,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,6:7:8:9:10,0x2000, HT_SKIDTRAP,Skid Trap -116,3,6,2,2,0x42,1,5,1,no,0,0x80,0,misc,0,0x2800, HT_LANDMINE,Land Mine -117,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,0,0x2000, HT_ANKLESNARE,Ankle Snare -118,3,6,2,0,0x2,1,5,1,no,0,0x80,0,misc,0,0x2000, HT_SHOCKWAVE,Shockwave Trap -119,3,6,2,0,0x3,2,5,1,no,0,0x80,0,misc,0,0x2000, HT_SANDMAN,Sandman -120,3,6,2,0,0x3,1,5,1,no,0,0x80,0,misc,0,0x2000, HT_FLASHER,Flasher -121,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x2800, HT_FREEZINGTRAP,Freezing Trap -122,3,6,2,4,0x42,1,5,1,no,0,0x80,0,misc,0,0x2800, HT_BLASTMINE,Blast Mine -123,3,6,2,3,0x42,2,5,1,no,0,0x80,0,misc,0,0x2800, HT_CLAYMORETRAP,Claymore Trap +115,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,6:7:8:9:10,0x3000, HT_SKIDTRAP,Skid Trap +116,3,6,2,2,0x42,1,5,1,no,0,0x80,0,misc,0,0x3800, HT_LANDMINE,Land Mine +117,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,0,0x3000, HT_ANKLESNARE,Ankle Snare +118,3,6,2,0,0x2,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_SHOCKWAVE,Shockwave Trap +119,3,6,2,0,0x3,2,5,1,no,0,0x80,0,misc,0,0x3000, HT_SANDMAN,Sandman +120,3,6,2,0,0x3,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_FLASHER,Flasher +121,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x3800, HT_FREEZINGTRAP,Freezing Trap +122,3,6,2,4,0x42,1,5,1,no,0,0x80,0,misc,0,0x3800, HT_BLASTMINE,Blast Mine +123,3,6,2,3,0x42,2,5,1,no,0,0x80,0,misc,0,0x3800, HT_CLAYMORETRAP,Claymore Trap 124,2,6,32,0,0x1,0,1,1,no,0,0,0,misc,0,0x0, HT_REMOVETRAP,Remove Trap 125,3,6,2,0,0x1,0,1,1,no,0,0x80,0,misc,0,0x2000, HT_TALKIEBOX,Talkie Box 126,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, HT_BEASTBANE,Beast Bane @@ -361,7 +361,7 @@ 247,9,6,4,0,0x1,1,5,0,no,0,0,0,none,0,0x0, AM_RESURRECTHOMUN,Homunculus Resurrection //**** -// Creator +// Crusader 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 @@ -405,9 +405,9 @@ 282,9,6,16,4,0x1,0,5,1,yes,0,0xC00,0,magic,0,0x20, SA_LIGHTNINGLOADER,Endow Tornado 283,9,6,16,2,0x1,0,5,1,yes,0,0xC00,0,magic,0,0x20, SA_SEISMICWEAPON,Endow Quake 284,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, SA_DRAGONOLOGY,Dragonology -285,2,6,2,3,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SA_VOLCANO,Volcano -286,2,6,2,1,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SA_DELUGE,Deluge -287,2,6,2,4,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SA_VIOLENTGALE,Whirlwind +285,2,6,2,3,0x1,0,5,1,yes,0,0,0,magic,0,0x1020, SA_VOLCANO,Volcano +286,2,6,2,1,0x1,0,5,1,yes,0,0,0,magic,0,0x1020, SA_DELUGE,Deluge +287,2,6,2,4,0x1,0,5,1,yes,0,0,0,magic,0,0x1020, SA_VIOLENTGALE,Whirlwind 288,2,6,2,0,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SA_LANDPROTECTOR,Magnetic Earth 289,9,6,1,0,0x1,0:0:0:0:0:-1,5,1,yes,0,0xE00,0,magic,0,0x20, SA_DISPELL,Dispell 290,0,6,4,0,0x1,0,10,1,yes,0,0,0,magic,0,0x0, SA_ABRACADABRA,Hocus-pocus @@ -697,7 +697,7 @@ 481,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, HP_MANARECHARGE,Mana Recharge 482,0,6,4,0,0x1,0,5,1,no,0,0,0,magic,0,0x0, PF_DOUBLECASTING,Double Casting 483,16,6,2,0,0x1,1:2:3:4:5,1,1,no,0,0,0,none,0,0x20, HW_GANBANTEIN,Ganbantein -484,9,6,2,2,0x91,0,5,1,yes,0,0x18000,0,misc,0,0x30, HW_GRAVITATION,Gravitation Field +484,9,6,2,2,0x91,0,5,1,yes,0,0x18000,0,misc,0,0x1030, HW_GRAVITATION,Gravitation Field 485,-2,6,1,-1,0x8,0,10,1,no,0,0,0,weapon,0,0x4000, WS_CARTTERMINATION,Cart Termination 486,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x4000, WS_OVERTHRUSTMAX,Maximum Power Thrust 487,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x8, CG_LONGINGFREEDOM,Longing for Freedom @@ -757,7 +757,7 @@ 535,0,8,4,3,0,0,10,1,yes,0,0,0,magic,1,0x0, NJ_KAENSIN,Crimson Fire Formation 536,9,8,1,3,0x2,2,5,3,yes,0,0,0,magic,0,0x0, NJ_BAKUENRYU,Raging Fire Dragon 537,9,8,1,1,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,0,0x0, NJ_HYOUSENSOU,Spear of Ice -538,9,6,2,1,0x1,0,10,1,yes,0,0,0,magic,0,0x0, NJ_SUITON,Hidden Water +538,9,6,2,1,0x1,0,10,1,yes,0,0,0,magic,0,0x1000, NJ_SUITON,Hidden Water 539,0,6,4,1,0x2,3,5,1,yes,0,0,0,magic,0,0x0, NJ_HYOUSYOURAKU,Ice Meteor 540,9,8,1,4,0,0,10,1:2:2:3:3:4:4:5:5:6,yes,0,0,0,magic,0,0x0, NJ_HUUJIN,Wind Blade 541,9,6,2,4,0x2,2:2:3:3:4,5,1,yes,0,0,0,magic,0,0x0, NJ_RAIGEKISAI,Lightning Strike of Destruction @@ -886,11 +886,11 @@ 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,0xC2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0,0x0, RK_DRAGONBREATH,Dragon Breath +2008,9,6,2,3,0x2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,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 -2012,1,6,4,-1,0,0x8,1,1,yes,0,0,0,weapon,0,0x0, RK_CRUSHSTRIKE,Crush Strike +2012,1,6,4,-1,0,0,1,1,yes,0,0,0,weapon,0,0x0, RK_CRUSHSTRIKE,Crush Strike 2013,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_REFRESH,Refresh 2014,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_GIANTGROWTH,Giant Growth 2015,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_STONEHARDSKIN,Stone Hard Skin @@ -898,7 +898,7 @@ 2017,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,7,0x0, RK_STORMBLAST,Storm Blast 2018,0,6,4,0,0x3,-1,1,1,yes,0,0,0,none,0,0x0, RK_FIGHTINGSPIRIT,Fighting Spirit //CHECK Is this splash needed? 2019,9,6,4,6,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_ABUNDANCE,Abundance -2020,5:6:7:8:9,6,16,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RK_PHANTOMTHRUST,Phantom Thrust +2020,5:6:7:8:9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RK_PHANTOMTHRUST,Phantom Thrust //**** // WL Warlock @@ -947,7 +947,7 @@ 2027,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, GC_POISONINGWEAPON,Poisoning Weapon 2028,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, GC_WEAPONBLOCKING,Weapon Blocking 2029,0,6,4,-1,0x22,1,5,1,no,0,0,0,weapon,3,0x0, GC_COUNTERSLASH,Counter Slash -2030,-2,6,4,-1,0x1,0,5,1,no,0,0x200,0,weapon,0,0x0, GC_WEAPONCRUSH,Weapon Crush +2030,-2,6,4,-1,0,0,5,1,no,0,0x200,0,weapon,0,0x0, GC_WEAPONCRUSH,Weapon Crush 2031,1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, GC_VENOMPRESSURE,Venom Pressure 2032,5,6,2,0,0x1,0,5,1,yes,0,0,1,none,0,0x0, GC_POISONSMOKE,Poison Smoke 2033,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x40, GC_CLOAKINGEXCEED,Cloaking Exceed @@ -993,7 +993,7 @@ 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,-1,0,0,5,1,no,0,0,0,weapon,0,0x2000, RA_WUGSTRIKE,Warg Strike +2243,9,6,1,-1,0x40,0,5,1,no,0,0,0,misc,0,0x2000, RA_WUGSTRIKE,Warg Strike 2244,9,6,1,-1,0,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 @@ -1077,7 +1077,7 @@ 2317,1,6,2,-1,0x2,5,5,1,yes,0,0,0,none,3:4:5:6:7,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,0x0, LG_MOONSLASHER,Moon Slasher +2320,0,6,4,-1,0x2,3,5,1,yes,0,0,0,weapon,0,0x1000, LG_MOONSLASHER,Moon Slasher 2321,1,8,2,6,0x2,5,5,-7,yes,0,0,0,weapon,0,0x0, LG_RAYOFGENESIS,Ray of Genesis 2322,0,6,16,0,0x3,1,5,1,yes,0,0,0,none,0,0x0, LG_PIETY,Piety 2323,0,8,4,2,0x2,1:1:2:2:3,5,-5,yes,0,0,0,weapon,0,0x0, LG_EARTHDRIVE,Earth Drive @@ -1090,14 +1090,14 @@ 2327,0,8,4,-1,0x2,2,5,-3,no,0,0,0,weapon,3,0x0, SR_SKYNETBLOW,Sky Net Blow 2328,0,6,4,-1,0x2,1:2:3:4:5,5,1,no,0,0,0,weapon,0,0x0, SR_EARTHSHAKER,Earth Shaker 2329,-2,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FALLENEMPIRE,Fallen Empire -2330,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon //CHECK Need to fix to be enemy targeted and also combo after Fallen Empire. -2331,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate +2330,-2,6,1,-1,0x2,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon +2331,1:2:3:3:4:4:5:5:6:7,6,1,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate 2332,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster 2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_CRESCENTELBOW,Crescent Elbow //CHECK Check the autospell ID. 2334,0,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0, SR_CURSEDCIRCLE,Cursed Circle 2335,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_LIGHTNINGWALK,Lightning Walk 2336,7:8:9:10:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,2:3:4:5:6,0x0, SR_KNUCKLEARROW,Knuckle Arrow -2337,0,6,4,-1,0x2,2,1,1,yes,0,0,0,weapon,0,0x0, SR_WINDMILL,Windmill +2337,0,6,4,-1,0x2,2,1,1,yes,0,0,0,weapon,0,0x1000, SR_WINDMILL,Windmill 2338,0,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0, SR_RAISINGDRAGON,Raising Dragon 2339,0,0,0,0,0,0,5,1,no,0,0,0,none,0,0x0, SR_GENTLETOUCH,Gentle Touch 2340,0,6,4,0,0x3,2,1,1,no,0,0,0,none,0,0x0, SR_ASSIMILATEPOWER,Assimilate Power @@ -1154,8 +1154,8 @@ //**** // SO Sorcerer (statis blocking need to be confirmed) -2443,0,6,4,3,0,0,5,1,yes,0,0,8:10:12:14:16,magic,0,0x20, SO_FIREWALK,Fire Walk //CHECK Video and data shows each cell only hits once. -2444,0,6,4,4,0,0,5,1,yes,0,0,8:10:12:14:16,magic,0,0x20, SO_ELECTRICWALK,Electric Walk +2443,0,6,4,3,0,0,5,1,yes,0,0,8:10:12:14:16,magic,0,0x1020, SO_FIREWALK,Fire Walk //CHECK Video and data shows each cell only hits once. +2444,0,6,4,4,0,0,5,1,yes,0,0,8:10:12:14:16,magic,0,0x1020, SO_ELECTRICWALK,Electric Walk 2445,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x20, SO_SPELLFIST,Spell Fist 2446,9,6,2,2,0,0,5,-3,yes,0,0,0,magic,0,0x20, SO_EARTHGRAVE,Earth Grave 2447,9,6,2,1,0,0,5,-5,yes,0,0,0,magic,0,0x20, SO_DIAMONDDUST,Diamond Dust @@ -1164,7 +1164,7 @@ 2450,9,6,2,5,0,0,5,1,yes,0,0,0,magic,0,0x20, SO_CLOUD_KILL,Cloud Kill 2451,9,6,16,0,0x1,0,5,1,yes,0,0,0,none,0,0x20, SO_STRIKING,Striking //CHECK Data shows a % for increased successful refine rate. Is this true? 2452,9,6,2,3,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SO_WARMER,Warmer -2453,9,6,2,0,0x1,0,5,1,yes,0,0,0,magic,0,0x20, SO_VACUUM_EXTREME,Vacuum Extreme +2453,9,6,2,0,0x1,0,5,1,yes,0,0,0,magic,0,0x1020, SO_VACUUM_EXTREME,Vacuum Extreme 2454,9,6,1,4,0x2,1:1:2:2:3,5,1,yes,0,0,0,magic,0,0x20, SO_VARETYR_SPEAR,Varetyr Spear 2455,7:7:7:7:9,6,2,0,0x3,1:1:2:2:3,5,1,yes,0,0,0,magic,0,0x20, SO_ARRULLO,Arrullo 2456,0,6,4,0,0x1,0,4,1,yes,0,0,0,none,0,0x0, SO_EL_CONTROL,Spirit Control @@ -1195,7 +1195,7 @@ 2483,11,6,2,0,0x3,4,10,1,yes,0,0x0,0,weapon,0,0x1, GN_CRAZYWEED,Crazy Weed 2484,0,6,2,2,0x2,2,10,1,no,0,0x0,0,weapon,0,0x1, GN_CRAZYWEED_ATK,Crazy Weed Attack 2485,9,6,2,3,0,0,5,1,yes,0,0,0,magic,0,0x0, GN_DEMONIC_FIRE,Demonic Fire -2486,9,6,2,0,0,0,5,1,yes,0,0,0,none,0,0x0, GN_FIRE_EXPANSION,Fire Expansion //CHECK FIX ME!!!! Level 1 is reducing the damage. Should increase it by 50% +2486,9,6,2,0,0,0,5,1,yes,0,0,0,none,0,0x0, GN_FIRE_EXPANSION,Fire Expansion 2487,9,6,2,0,0,0,1,1,no,0,0,0,none,0,0x0, GN_FIRE_EXPANSION_SMOKE_POWDER,Fire Expansion Smoke Powder 2488,9,6,2,0,0,0,1,1,no,0,0,0,none,0,0x0, GN_FIRE_EXPANSION_TEAR_GAS,Fire Expansion Tear Gas 2489,11,6,1,0,0,0,10,1:2:3:4:5:6:7:8:9:10,no,0,0,0,weapon,0,0x0, GN_FIRE_EXPANSION_ACID,Fire Expansion Acid @@ -1303,7 +1303,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,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 +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 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 diff --git a/db/re/skill_require_db.txt b/db/re/skill_require_db.txt index 5646ee7ab4..20065d5aa1 100644 --- a/db/re/skill_require_db.txt +++ b/db/re/skill_require_db.txt @@ -599,7 +599,7 @@ 2204,0,0,50:60:70:80:90,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 //WL_JACKFROST#Jack Frost# 2205,0,0,40:42:44:46:48,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 //WL_MARSHOFABYSS#Marsh of Abyss# 2206,0,0,100:120:140:160: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,0,0 //WL_RECOGNIZEDSPELL#Recognized Spell# -2207,0,0,32:34:36:38: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 //WL_SIENNAEXECRATE#Sienna Execrate# +2207,0,0,32:34:36:38:40,0,0,0,99,0,0,none,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_SIENNAEXECRATE#Sienna Execrate# 2209,0,0,50:60:70:80:90,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 //WL_STASIS#Stasis# 2210,0,0,20:24:28:32:36,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 //WL_DRAINLIFE#Drain Life# @@ -758,8 +758,8 @@ 2327,0,0,8:9:10:11:12,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_SKYNETBLOW#Sky Net Blow# 2328,0,0,36:40:44:48:52,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_EARTHSHAKER#Earth Shaker# 2329,0,0,20:30:40:50:60,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE#Fallen Empire# -2330,0,0,1:2:3:4:5:6:7:8:9:10,-12:-14:-16:-18:-20:-22:-24:-26:-28:-30,-6:-7:-8:-9:-10:-11:-12:-13:-14:-15,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon# -2331,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_HELLGATE#Hell Gate# +2330,0,0,1:2:3:4:5:6:7:8:9:10,0,0,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_TIGERCANNON#Tiger Cannon# +2331,0,0,1,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_HELLGATE#Hell Gate# 2332,0,0,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,0,0 //SR_RAMPAGEBLASTER#Rampage Blaster# 2333,0,0,80,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW#Crescent Elbow# 2334,0,0,40:60:80:100:120,-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_CURSEDCIRCLE#Cursed Circle# diff --git a/src/map/battle.c b/src/map/battle.c index 39bc3723d6..e4c3313488 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1039,6 +1039,13 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam damage >>= 2; //75% reduction } + if( sc->data[SC_SMOKEPOWDER] ) { + if( (flag&(BF_SHORT|BF_WEAPON)) == (BF_SHORT|BF_WEAPON) ) + damage -= 15 * damage / 100; // 15% reduction to physical melee attacks + else if( (flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON) ) + damage -= 50 * damage / 100; // 50% reduction to physical ranged attacks + } + // Compressed code, fixed by map.h [Epoque] if (src->type == BL_MOB) { int i; @@ -2605,7 +2612,7 @@ struct Damage battle_calc_skill_base_damage(struct Damage wd, struct block_list } #else case NJ_ISSEN: - wd.damage = 40*sstatus->str +skill_lv*(sstatus->hp/10 + 35); + wd.damage = 40 * sstatus->str + (8 / 100) * skill_lv * sstatus->hp; wd.damage2 = 0; break; case LK_SPIRALPIERCE: @@ -3137,6 +3144,11 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s skillratio += 20*(skill_lv-1); #endif break; +#ifdef RENEWAL + case NJ_KUNAI: + skillratio *= 3; // 3x300% ATK + break; +#endif case NJ_HUUMA: skillratio += 50 + 150*skill_lv; break; @@ -3458,10 +3470,10 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s case SR_TIGERCANNON:// ATK [((Caster consumed HP + SP) / 4) x Caster Base Level / 100] % { int hp = (int64)status_get_max_hp(src) * (10 + 2 * skill_lv) / 100, - sp = (int64)status_get_max_sp(src) * (6 + skill_lv) / 100; + sp = (int64)status_get_max_sp(src) * (5 + 1 * skill_lv) / 100; skillratio = ((int64)hp+sp) / 4; if( sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == SR_FALLENEMPIRE ) // ATK [((Caster consumed HP + SP) / 2) x Caster Base Level / 100] % - skillratio = (int64)hp+sp / 2; + skillratio = ((int64)hp+sp) / 2; RE_LVL_DMOD(100); } break; @@ -4851,10 +4863,10 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list if( skill_id == SO_PSYCHIC_WAVE ) { if( sc && sc->count ) { - if( sc->data[SC_HEATER_OPTION] ) s_ele = sc->data[SC_HEATER_OPTION]->val4; - else if( sc->data[SC_COOLER_OPTION] ) s_ele = sc->data[SC_COOLER_OPTION]->val4; + if( sc->data[SC_HEATER_OPTION] ) s_ele = sc->data[SC_HEATER_OPTION]->val3; + else if( sc->data[SC_COOLER_OPTION] ) s_ele = sc->data[SC_COOLER_OPTION]->val3; else if( sc->data[SC_BLAST_OPTION] ) s_ele = sc->data[SC_BLAST_OPTION]->val3; - else if( sc->data[SC_CURSED_SOIL_OPTION] ) s_ele = sc->data[SC_CURSED_SOIL_OPTION]->val4; + else if( sc->data[SC_CURSED_SOIL_OPTION] ) s_ele = sc->data[SC_CURSED_SOIL_OPTION]->val3; } } @@ -5219,7 +5231,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list skillratio = 60 * skill_lv; RE_LVL_DMOD(100); if( sc && sc->data[SC_HEATER_OPTION] ) - skillratio += sc->data[SC_HEATER_OPTION]->val3; + skillratio += sd ? sd->status.job_level / 2 : 0; break; case SO_ELECTRICWALK: skillratio = 60 * skill_lv; @@ -5231,33 +5243,23 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list skillratio = ( 200 * ((sd) ? pc_checkskill(sd, SA_SEISMICWEAPON) : skill_get_max(SA_SEISMICWEAPON)) + sstatus->int_ * skill_lv ); RE_LVL_DMOD(100); if( sc && sc->data[SC_CURSED_SOIL_OPTION] ) - skillratio += sc->data[SC_CURSED_SOIL_OPTION]->val2; + skillratio += sd ? sd->status.job_level * 5 : 0; break; case SO_DIAMONDDUST: skillratio = ( 200 * ((sd) ? pc_checkskill(sd, SA_FROSTWEAPON) : skill_get_max(SA_FROSTWEAPON)) + sstatus->int_ * skill_lv ); RE_LVL_DMOD(100); if( sc && sc->data[SC_COOLER_OPTION] ) - skillratio += sc->data[SC_COOLER_OPTION]->val3; + skillratio += sd ? sd->status.job_level * 5 : 0; break; case SO_POISON_BUSTER: skillratio += 900 + 300 * skill_lv; RE_LVL_DMOD(120); if( sc && sc->data[SC_CURSED_SOIL_OPTION] ) - skillratio += sc->data[SC_CURSED_SOIL_OPTION]->val2; + skillratio += sd ? sd->status.job_level * 5 : 0; break; case SO_PSYCHIC_WAVE: skillratio = skill_lv * 70 + (sstatus->int_ * 3); RE_LVL_DMOD(100); - if( sc ){ - if( sc->data[SC_HEATER_OPTION] ) - skillratio += sc->data[SC_HEATER_OPTION]->val3; - else if(sc->data[SC_COOLER_OPTION] ) - skillratio += sc->data[SC_COOLER_OPTION]->val3; - else if(sc->data[SC_BLAST_OPTION] ) - skillratio += sc->data[SC_BLAST_OPTION]->val2; - else if(sc->data[SC_CURSED_SOIL_OPTION] ) - skillratio += sc->data[SC_CURSED_SOIL_OPTION]->val3; - } break; case SO_VARETYR_SPEAR: //MATK [{( Endow Tornado skill level x 50 ) + ( Caster INT x Varetyr Spear Skill level )} x Caster Base Level / 100 ] % skillratio = status_get_int(src) * skill_lv + ((sd) ? pc_checkskill(sd, SA_LIGHTNINGLOADER) * 50 : skill_get_max(SA_LIGHTNINGLOADER)); @@ -5269,13 +5271,13 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list skillratio = skill_lv * 40; RE_LVL_DMOD(100); if( sc && sc->data[SC_CURSED_SOIL_OPTION] ) - skillratio += sc->data[SC_CURSED_SOIL_OPTION]->val2; + skillratio += sd ? sd->status.job_level : 0; break; case GN_DEMONIC_FIRE: if( skill_lv > 20) // Fire expansion Lv.2 - skillratio += 110 + 20 * (skill_lv - 20) + status_get_int(src) * 3; // Need official INT bonus. [LimitLine] + skillratio += 110 + 20 * (skill_lv - 20) + status_get_int(src) * 10; else if( skill_lv > 10 ) // Fire expansion Lv.1 - skillratio += 110 + 20 * (skill_lv - 10) / 2; + skillratio += 110 + 20 * (skill_lv - 10) + status_get_int(src) + ((sd) ? sd->status.job_level : 50); else skillratio += 110 + 20 * skill_lv; break; @@ -5390,9 +5392,8 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list if(ad.damage<1) ad.damage=1; - else if(sc){//only applies when hit - // TODO: there is another factor that contribute with the damage and need to be formulated. [malufett] - switch(skill_id){ + else if(sc) { //only applies when hit + switch(skill_id) { case MG_LIGHTNINGBOLT: case MG_THUNDERSTORM: case MG_FIREBOLT: @@ -5401,8 +5402,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list case MG_FROSTDIVER: case WZ_EARTHSPIKE: case WZ_HEAVENDRIVE: - if(sc->data[SC_GUST_OPTION] || sc->data[SC_PETROLOGY_OPTION] - || sc->data[SC_PYROTECHNIC_OPTION] || sc->data[SC_AQUAPLAY_OPTION]) + if(sc->data[SC_GUST_OPTION] || sc->data[SC_PETROLOGY_OPTION] || sc->data[SC_PYROTECHNIC_OPTION] || sc->data[SC_AQUAPLAY_OPTION]) ad.damage += (6 + sstatus->int_/4) + max(sstatus->dex-10,0)/30; break; } @@ -5613,6 +5613,11 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * if (tsd) md.damage>>=1; #endif break; +#ifndef RENEWAL + case NJ_KUNAI: + md.damage = 90; // 3x90 unreducable, unavoidable, and neutral damage. + break; +#endif case NJ_ZENYNAGE: case KO_MUCHANAGE: md.damage = skill_get_zeny(skill_id ,skill_lv); @@ -6448,6 +6453,20 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t } } + if( sd && sc && (sc->data[SC_TROPIC_OPTION] || sc->data[SC_CHILLY_AIR_OPTION] || sc->data[SC_WILD_STORM_OPTION] || sc->data[SC_UPHEAVAL_OPTION]) ) + { // Autocast one Bolt depending on status change. + int skill_id = 0; + if( sc->data[SC_TROPIC_OPTION] ) skill_id = sc->data[SC_TROPIC_OPTION]->val3; + else if( sc->data[SC_CHILLY_AIR_OPTION] ) skill_id = sc->data[SC_CHILLY_AIR_OPTION]->val3; + else if( sc->data[SC_WILD_STORM_OPTION] ) skill_id = sc->data[SC_WILD_STORM_OPTION]->val2; + else if( sc->data[SC_UPHEAVAL_OPTION] ) skill_id = sc->data[SC_UPHEAVAL_OPTION]->val2; + + sd->state.autocast = 1; + if( skill_id && rand()%100 < (sd->status.job_level / 2) ) + skill_castend_damage_id(src, target, skill_id, (int)floor(sd->status.job_level / 10), tick, flag); + sd->state.autocast = 0; + } + if (wd.flag & BF_WEAPON && src != target && damage > 0) { if (battle_config.left_cardfix_to_right) battle_drain(sd, target, wd.damage, wd.damage, tstatus->race, tstatus->class_); diff --git a/src/map/elemental.c b/src/map/elemental.c index fbd6f331d3..827b4f445d 100644 --- a/src/map/elemental.c +++ b/src/map/elemental.c @@ -77,13 +77,13 @@ int elemental_create(struct map_session_data *sd, int class_, unsigned int lifet i = db->status.size+1; // summon level //[(Caster's Max HP/ 3 ) + (Caster's INT x 10 )+ (Caster's Job Level x 20 )] x [(Elemental Summon Level + 2) / 3] - ele.hp = ele.max_hp = (sd->battle_status.max_hp/3 + sd->battle_status.int_*10 + sd->status.job_level) * ((i + 2) / 3); + ele.hp = ele.max_hp = (sd->battle_status.max_hp/3 + sd->battle_status.int_*10 + sd->status.job_level*20) * ((i + 2) / 3); //Caster's Max SP /4 ele.sp = ele.max_sp = sd->battle_status.max_sp/4; //Caster's [ Max SP / (18 / Elemental Summon Skill Level) 1- 100 ] ele.atk = (sd->battle_status.max_sp / (18 / i) * 1 - 100); //Caster's [ Max SP / (18 / Elemental Summon Skill Level) ] - ele.atk2 = sd->battle_status.max_sp / 18; + ele.atk2 = sd->battle_status.max_sp / (18 / i); //Caster's HIT + (Caster's Base Level) ele.hit = sd->battle_status.hit + sd->status.base_level; //[Elemental Summon Skill Level x (Caster's INT / 2 + Caster's DEX / 4)] diff --git a/src/map/itemdb.h b/src/map/itemdb.h index 5da8736b5f..d8a71d1643 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -428,7 +428,7 @@ struct item_data* itemdb_exists(int nameid); #define itemdb_viewid(n) (itemdb_search(n)->view_id) #define itemdb_autoequip(n) (itemdb_search(n)->flag.autoequip) #define itemdb_is_rune(n) ((n >= ITEMID_NAUTHIZ && n <= ITEMID_HAGALAZ) || n == ITEMID_LUX_ANIMA) -#define itemdb_is_element(n) (n >= ITEMID_CRYSTAL_BLUE && n <= ITEMID_YELLOW_LIVE) +#define itemdb_is_element(n) (n >= ITEMID_SCARLET_PTS && n <= ITEMID_SCARLET_PTS) #define itemdb_is_spellbook(n) (n >= ITEMID_MAGIC_BOOK_FB && n <= ITEMID_MAGIC_BOOK_DL) #define itemdb_is_poison(n) (n >= ITEMID_PARALYSE && n <= ITEMID_VENOMBLEED) #define itemid_isgemstone(id) ( (id) >= ITEMID_YELLOW_GEMSTONE && (id) <= ITEMID_BLUE_GEMSTONE ) diff --git a/src/map/skill.c b/src/map/skill.c index 6e47515390..85221ad78a 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1465,7 +1465,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint case SO_DIAMONDDUST: rate = 5 + 5 * skill_lv; if( sc && sc->data[SC_COOLER_OPTION] ) - rate += rate * sc->data[SC_COOLER_OPTION]->val2 / 100; + rate += sd ? sd->status.job_level / 5 : 0; sc_start(src,bl, SC_CRYSTALIZE, rate, skill_lv, skill_get_time2(skill_id, skill_lv)); break; case SO_VARETYR_SPEAR: @@ -2740,6 +2740,10 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * sp = sp/((skill_lv|1)*(skill_lv|1)); //Estimate SP cost of a single water-ball status_heal(bl, 0, sp, 2); } + if( (dmg.damage || dmg.damage2) && tsc && tsc->data[SC_HALLUCINATIONWALK] && rand()%100 < tsc->data[SC_HALLUCINATIONWALK]->val3 ) { + dmg.damage = dmg.damage2 = 0; + dmg.dmg_lv = ATK_MISS; + } } damage = dmg.damage + dmg.damage2; @@ -3900,7 +3904,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case CG_ARROWVULCAN: case HW_MAGICCRASHER: case ITM_TOMAHAWK: - case MO_TRIPLEATTACK: case CH_CHAINCRUSH: case CH_TIGERFIST: case PA_SHIELDCHAIN: // Shield Chain @@ -3968,7 +3971,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NC_PILEBUNKER: case NC_COLDSLOWER: case NC_ARMSCANNON: - if (sd) pc_overheat(sd,1); + if (sd) pc_overheat(sd, 1); + case MO_TRIPLEATTACK: case RK_WINDCUTTER: skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag|SD_ANIMATION); break; @@ -5029,7 +5033,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0); break; } - map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id); + map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_damage_id); } break; @@ -8910,10 +8914,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SC_UNLUCKY: case SC_WEAKNESS: if( !(tsc && tsc->data[type]) ) { - //((rand(myDEX / 12, myDEX / 4) + myJobLevel + 10 * skLevel) + myLevel / 10) - (targetLevel / 10 + targetLUK / 10 + (targetMaxWeight - targetWeight) / 1000 + rand(targetAGI / 6, targetAGI / 3)) - int rate = rnd_value(sstatus->dex/12,sstatus->dex/4) + 10*skill_lv + (sd?sd->status.job_level:0) + status_get_lv(src)/10 - - status_get_lv(bl)/10 - tstatus->luk/10 - (dstsd?(dstsd->max_weight-dstsd->weight)/10000:0) - rnd_value(tstatus->agi/6,tstatus->agi/3); - rate = cap_value(rate, skill_lv+sstatus->dex/20, 100); + int rate = status_get_lv(src) / 10 + rnd_value(sstatus->dex / 12, sstatus->dex / 4) + ( sd ? sd->status.job_level : 50 ) + 10 * skill_lv + - (status_get_lv(bl) / 10 + rnd_value(tstatus->agi / 6, tstatus->agi / 3) + tstatus->luk / 10 + ( dstsd ? (dstsd->max_weight / 10 - dstsd->weight / 10 ) / 100 : 0)); + rate = cap_value(rate, skill_lv + sstatus->dex / 20, 100); clif_skill_nodamage(src,bl,skill_id,0,sc_start(src,bl,type,rate,skill_lv,skill_get_time(skill_id,skill_lv))); } else if( sd ) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); @@ -8921,9 +8924,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SC_IGNORANCE: if( !(tsc && tsc->data[type]) ) { - int rate = rnd_value(sstatus->dex/12,sstatus->dex/4) + 10*skill_lv + (sd?sd->status.job_level:0) + status_get_lv(src)/10 - - status_get_lv(bl)/10 - tstatus->luk/10 - (dstsd?(dstsd->max_weight-dstsd->weight)/10000:0) - rnd_value(tstatus->agi/6,tstatus->agi/3); - rate = cap_value(rate, skill_lv+sstatus->dex/20, 100); + int rate = status_get_lv(src) / 10 + rnd_value(sstatus->dex / 12, sstatus->dex / 4) + ( sd ? sd->status.job_level : 50 ) + 10 * skill_lv + - (status_get_lv(bl) / 10 + rnd_value(tstatus->agi / 6, tstatus->agi / 3) + tstatus->luk / 10 + ( dstsd ? (dstsd->max_weight / 10 - dstsd->weight / 10 ) / 100 : 0)); + rate = cap_value(rate, skill_lv + sstatus->dex / 20, 100); if (clif_skill_nodamage(src,bl,skill_id,0,sc_start(src,bl,type,rate,skill_lv,skill_get_time(skill_id,skill_lv)))) { int sp = 100 * skill_lv; if( dstmd ) sp = dstmd->level * 2; @@ -11778,6 +11781,7 @@ 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. + case WM_SEVERE_RAINSTORM: if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) return NULL; break; @@ -11789,7 +11793,6 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill break; case SO_VACUUM_EXTREME: range++; - break; case GN_WALLOFTHORN: if( flag&1 ) @@ -11999,11 +12002,11 @@ static int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, un sc = status_get_sc(bl); - if (sc && (sc->data[SC_HOVERING] - || (sc->option&OPTION_HIDE && sg->skill_id != WZ_HEAVENDRIVE && sg->skill_id != WL_EARTHSTRAIN ) - )) + if (sc && sc->option&OPTION_HIDE && sg->skill_id != WZ_HEAVENDRIVE && sg->skill_id != WL_EARTHSTRAIN) return 0; //Hidden characters are immune to AoE skills except to these. [Skotlex] - //Under hovering characters are immune to trap and ground target skills. + + if (sc && sc->data[SC_HOVERING] && skill_get_inf3(sg->skill_id)&INF3_NO_EFF_HOVERING) + return 0; // Under Hovering characters are immune to trap and ground target skills. type = status_skill2sc(sg->skill_id); sce = (sc && type != -1)?sc->data[type]:NULL; @@ -12215,13 +12218,13 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns tsd = BL_CAST(BL_PC, bl); tsc = status_get_sc(bl); - if ( tsc && tsc->data[SC_HOVERING] ) - return 0; //Under hovering characters are immune to trap and ground target skills. - tstatus = status_get_status_data(bl); type = status_skill2sc(sg->skill_id); skill_id = sg->skill_id; + if (tsc && tsc->data[SC_HOVERING] && skill_get_inf3(skill_id)&INF3_NO_EFF_HOVERING) + return 0; // Under Hovering characters are immune to trap and ground target skills. + if (sg->interval == -1) { switch (sg->unit_id) { case UNT_ANKLESNARE: //These happen when a trap is splash-triggered by multiple targets on the same cell. @@ -12711,7 +12714,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) && ss != bl && battle_check_target(&src->bl, bl, BCT_PARTY) > 0 ) { + if( !(status_get_mode(bl)&MD_BOSS) && ss != bl && battle_check_target(&src->bl, bl, BCT_NOPARTY) > 0 ) { if( !(tsc && tsc->data[type]) ){ sc_start(ss, bl, type, 100, sg->skill_lv, skill_get_time2(sg->skill_id,sg->skill_lv)); sg->limit = DIFF_TICK(tick,sg->tick); @@ -12744,25 +12747,22 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns case 1: case 2: default: - sc_start(ss, bl, SC_BURNING, 4 + 4 * sg->skill_lv, sg->skill_lv, - skill_get_time2(sg->skill_id, sg->skill_lv)); - skill_attack(skill_get_type(sg->skill_id), ss, &src->bl, bl, - sg->skill_id, sg->skill_lv + 10 * sg->val2, tick, 0); + sc_start(ss, bl, SC_BURNING, 4 + 4 * sg->skill_lv, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); + skill_attack(skill_get_type(sg->skill_id), ss, &src->bl, bl, sg->skill_id, sg->skill_lv + 10 * sg->val2, tick, 0); break; case 3: - skill_attack(skill_get_type(CR_ACIDDEMONSTRATION), ss, &src->bl, bl, - CR_ACIDDEMONSTRATION, ((sd) ? pc_checkskill(sd, CR_ACIDDEMONSTRATION) : skill_get_max(CR_ACIDDEMONSTRATION)), tick, 0); + skill_attack(skill_get_type(CR_ACIDDEMONSTRATION), ss, &src->bl, bl, CR_ACIDDEMONSTRATION, ((sd) ? pc_checkskill(sd, CR_ACIDDEMONSTRATION) : skill_get_max(CR_ACIDDEMONSTRATION)), tick, 0); break; } } break; case UNT_FIRE_EXPANSION_SMOKE_POWDER: - sc_start(ss, bl, status_skill2sc(GN_FIRE_EXPANSION_SMOKE_POWDER), 100, sg->skill_lv, 1000); + sc_start(ss, bl, status_skill2sc(GN_FIRE_EXPANSION_SMOKE_POWDER), 100, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); break; case UNT_FIRE_EXPANSION_TEAR_GAS: - sc_start(ss, bl, status_skill2sc(GN_FIRE_EXPANSION_TEAR_GAS), 100, sg->skill_lv, 1000); + sc_start(ss, bl, status_skill2sc(GN_FIRE_EXPANSION_TEAR_GAS), 100, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv)); break; case UNT_HELLS_PLANT: @@ -12818,15 +12818,18 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns break; case UNT_VACUUM_EXTREME: - {// TODO: official behavior in gvg area. [malufett] + { int sec = sg->limit - DIFF_TICK(tick, sg->tick); int range = skill_get_unit_range(sg->skill_id, sg->skill_lv); + if( tsc && tsc->data[SC_HALLUCINATIONWALK] ) // Don't affect the target if Hallucination Walk is active + break; + if( tsc && !tsc->data[type] && - distance_xy(src->bl.x, src->bl.y, bl->x, bl->y) <= range)// don't consider outer bounderies + distance_xy(src->bl.x, src->bl.y, bl->x, bl->y) <= range) // Don't consider outer boundaries sc_start(ss, bl, type, 100, sg->skill_lv, sec); - if( unit_is_walking(bl) && // wait until target stop walking + if( unit_is_walking(bl) && // Wait until the target has stopped walking ( tsc && tsc->data[type] && tsc->data[type]->val4 >= tsc->data[type]->val3-range )) break; @@ -12834,18 +12837,23 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns break; if( unit_is_walking(bl) && - distance_xy(src->bl.x, src->bl.y, bl->x, bl->y) > range )// going outside of boundaries? then force it to stop + distance_xy(src->bl.x, src->bl.y, bl->x, bl->y) > range ) // Going outside of boundary? Then force target to stop unit_stop_walking(bl,1); if( !unit_is_walking(bl) && - distance_xy(src->bl.x, src->bl.y, bl->x, bl->y) <= range && // only snap if the target is inside the range or - src->bl.x != bl->x && src->bl.y != bl->y){// diagonal position parallel to VE's center - unit_movepos(bl, src->bl.x, src->bl.y, 0, 0); - clif_fixpos(bl); + distance_xy(src->bl.x, src->bl.y, bl->x, bl->y) <= range && // Only snap if the target is inside the range or + src->bl.x != bl->x && src->bl.y != bl->y) { // at a diagonal position parallel to Vacuum Extreme's center + unit_movepos(bl, src->bl.x, src->bl.y, 0, 0); + clif_fixpos(bl); } } break; + case UNT_BANDING: + if( battle_check_target(&src->bl, bl, BCT_ENEMY) > 0 && !(status_get_mode(bl)&MD_BOSS) && !(tsc && tsc->data[SC_BANDING_DEFENCE]) ) + sc_start(ss, bl, SC_BANDING_DEFENCE, (status_get_lv(src) / 5) + (sg->skill_lv * 5) - (status_get_agi(bl) / 10), 90, skill_get_time2(sg->skill_id, sg->skill_lv)); + break; + case UNT_FIRE_MANTLE: if( battle_check_target(&src->bl, bl, BCT_ENEMY) > 0 ) skill_attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); @@ -13900,7 +13908,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i } break; /** - * Guilotine Cross + * Guillotine Cross **/ case GC_HALLUCINATIONWALK: if( sc && (sc->data[SC_HALLUCINATIONWALK] || sc->data[SC_HALLUCINATIONWALK_POSTDELAY]) ) { @@ -14198,7 +14206,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i if (!pc_checkequip2(sd,reqeqit,EQI_ACC_L,EQI_MAX)) { char output[128]; //clif_skill_fail(sd, skill_id, USESKILL_FAIL_NEED_EQUIPMENT, reqeqit); - sprintf(output,"need to put on [%d] in order to use.",reqeqit); + sprintf(output,"Please equip with a %d.",reqeqit); // Officially, some Mechanic skills failure message displays this rather than just "Skill has failed." clif_colormes(sd,color_table[COLOR_RED],output); return false; } @@ -14302,7 +14310,7 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id, int maxcount = (skill_id==AM_CANNIBALIZE)? 6-skill_lv : skill_get_maxcount(skill_id,skill_lv); int mob_class = (skill_id==AM_CANNIBALIZE)? summons[skill_lv-1] :MOBID_MARINE_SPHERE; if(battle_config.land_skill_limit && maxcount>0 && (battle_config.land_skill_limit&BL_PC)) { - i = map_foreachinmap(skill_check_condition_mob_master_sub ,sd->bl.m, BL_MOB, sd->bl.id, mob_class, skill_id, &c); + i = map_foreachinmap(skill_check_condition_mob_master_sub, sd->bl.m, BL_MOB, sd->bl.id, mob_class, skill_id, &c); if(c >= maxcount || (skill_id==AM_CANNIBALIZE && c != i && battle_config.summon_flora&2)) { //Fails when: exceed max limit. There are other plant types already out. @@ -14784,8 +14792,8 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16 req.sp -= req.sp * (5 + 5 * pc_checkskill(sd,SO_EL_SYMPATHY)) / 100; break; case SO_PSYCHIC_WAVE: - if( sc && sc->data[SC_BLAST_OPTION] ) - req.sp += req.sp * 150 / 100; + if( sc && (sc->data[SC_HEATER_OPTION] || sc->data[SC_COOLER_OPTION] || sc->data[SC_CURSED_SOIL_OPTION] || sc->data[SC_BLAST_OPTION]) ) + req.sp += req.sp * 50 / 100; break; } @@ -16766,9 +16774,12 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap) break; case UNT_FEINTBOMB: { - struct block_list *src = map_id2bl(group->src_id); - if( src ) + struct block_list *src = map_id2bl(group->src_id); + struct status_change *sc; + if (src && (sc = status_get_sc(src)) != NULL && sc->data[SC_HIDING]) { // 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_HIDING, INVALID_TIMER); + } skill_delunit(unit); break; } @@ -16777,8 +16788,7 @@ static int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap) { struct block_list *src = map_id2bl(group->src_id); struct status_change *sc; - if( !src || (sc = status_get_sc(src)) == NULL || !sc->data[SC_BANDING] ) - { + if( !src || (sc = status_get_sc(src)) == NULL || !sc->data[SC_BANDING] ) { skill_delunit(unit); break; } @@ -17874,7 +17884,7 @@ int skill_magicdecoy(struct map_session_data *sd, int nameid) { return 0; } - md = mob_once_spawn_sub(&sd->bl, sd->bl.m, x, y, sd->status.name, class_, "", SZ_SMALL, AI_NONE); + md = mob_once_spawn_sub(&sd->bl, sd->bl.m, x, y, sd->status.name, class_, "", SZ_SMALL, AI_NONE); if( md ) { struct unit_data *ud = unit_bl2ud(&md->bl); md->master_id = sd->bl.id; @@ -17939,6 +17949,7 @@ int skill_spellbook (struct map_session_data *sd, int nameid) { return 1; } + int skill_select_menu(struct map_session_data *sd,uint16 skill_id) { int id, lv, prob, aslvl = 0; nullpo_ret(sd); @@ -17948,18 +17959,18 @@ int skill_select_menu(struct map_session_data *sd,uint16 skill_id) { status_change_end(&sd->bl,SC_STOP,INVALID_TIMER); } - if( skill_id >= GS_GLITTERING || skill_get_type(skill_id) != BF_MAGIC || - (id = sd->status.skill[skill_id].id) == 0 || sd->status.skill[skill_id].flag != SKILL_FLAG_PLAGIARIZED ) { + if( !(skill_get_inf2(sd->status.skill[skill_id].id)&INF2_AUTOSHADOWSPELL) || (id = sd->status.skill[skill_id].id) == 0 || sd->status.skill[skill_id].flag != SKILL_FLAG_PLAGIARIZED ) { clif_skill_fail(sd,SC_AUTOSHADOWSPELL,0,0); return 0; } lv = (aslvl + 1) / 2; // The level the skill will be autocasted lv = min(lv,sd->status.skill[skill_id].lv); - prob = (aslvl == 10) ? 15 : (30 - 2 * aslvl); // Probability at level 10 was increased to 15. + prob = (aslvl >= 10) ? 15 : (30 - 2 * aslvl); // Probability at level 10 was increased to 15. sc_start4(&sd->bl,&sd->bl,SC__AUTOSHADOWSPELL,100,id,lv,prob,0,skill_get_time(SC_AUTOSHADOWSPELL,aslvl)); return 0; } + int skill_elementalanalysis(struct map_session_data* sd, int n, uint16 skill_lv, unsigned short* item_list) { int i; diff --git a/src/map/skill.h b/src/map/skill.h index 98ac35e072..2e03fdef8d 100644 --- a/src/map/skill.h +++ b/src/map/skill.h @@ -86,7 +86,7 @@ enum e_skill_inf3 { INF3_EFF_SHADOWJUMP = 0x0200, // spell range affected by NJ_SHADOWJUMP INF3_EFF_RADIUS = 0x0400, // spell range affected by WL_RADIUS INF3_EFF_RESEARCHTRAP = 0x0800, // spell range affected by RA_RESEARCHTRAP - //INF3_ = 0x1000, // free + INF3_NO_EFF_HOVERING = 0x1000, // Spell that does not affect user that has SC_HOVERING active INF3_USABLE_WARG = 0x2000, // spell that can be use while riding warg INF3_DIS_MADO = 0x4000, // spell that can't be used while in mado //... add other spell list option here diff --git a/src/map/status.c b/src/map/status.c index 8e52f42921..4b2988aaac 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -2644,8 +2644,6 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) { bonus += sc->data[SC_SERVICE4U]->val2; if(sc->data[SC_MERC_SPUP]) bonus += sc->data[SC_MERC_SPUP]->val2; - if(sc->data[SC_RAISINGDRAGON]) - bonus += (2 + sc->data[SC_RAISINGDRAGON]->val1); if(sc->data[SC_LIFE_FORCE_F]) bonus += sc->data[SC_LIFE_FORCE_F]->val1; } @@ -3886,7 +3884,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; @@ -3897,7 +3894,7 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str sc->data[SC_MAXIMIZEPOWER] || #endif ( (bl->type == BL_PC && ((TBL_PC*)bl)->class_&MAPID_UPPERMASK) == MAPID_MONK && - (sc->data[SC_EXTREMITYFIST] || (sc->data[SC_EXPLOSIONSPIRITS] && (!sc->data[SC_SPIRIT] || sc->data[SC_SPIRIT]->val2 != SL_MONK))) + (sc->data[SC_EXTREMITYFIST] || ((sc->data[SC_EXPLOSIONSPIRITS] || sc->data[SC_RAISINGDRAGON]) && (!sc->data[SC_SPIRIT] || sc->data[SC_SPIRIT]->val2 != SL_MONK))) ) ) // No natural SP regen regen->flag &=~RGN_SP; @@ -5199,6 +5196,8 @@ static unsigned short status_calc_ematk(struct block_list *bl, struct status_cha matk += sc->data[SC_MATKFOOD]->val1; if(sc->data[SC_MANA_PLUS]) matk += sc->data[SC_MANA_PLUS]->val1; + if(sc->data[SC_COOLER_OPTION]) + matk += sc->data[SC_COOLER_OPTION]->val2; if(sc->data[SC_AQUAPLAY_OPTION]) matk += sc->data[SC_AQUAPLAY_OPTION]->val2; if(sc->data[SC_CHILLY_AIR_OPTION]) @@ -8397,9 +8396,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty else val4 |= battle_config.monster_cloak_check_type&7; break; + case SC_SIGHTBLASTER: + tick = -1; // Duration sent to the client should be infinite case SC_SIGHT: /* splash status */ case SC_RUWACH: - case SC_SIGHTBLASTER: val3 = skill_get_splash(val2, val1); // Val2 should bring the skill-id. val2 = tick/250; tick_time = 10; // [GodLesZ] tick time @@ -8936,6 +8936,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty /* Arch Bishop */ case SC_RENOVATIO: val4 = tick / 5000; + tick = -1; // Duration sent to the client should be infinite tick_time = 5000; break; case SC_SECRAMENT: @@ -8947,6 +8948,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_WEAPONBLOCKING: val2 = 10 + 2 * val1; // Chance val4 = tick / 3000; + tick = -1; // Duration sent to the client should be infinite tick_time = 3000; // [GodLesZ] tick time break; case SC_TOXIN: @@ -9047,6 +9049,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val2 = 50 - 10 * val1; // ASPD val3 = 20 * val1; // CRITICAL val4 = tick / 1000; + tick = -1; // Duration sent to the client should be infinite tick_time = 1000; // [GodLesZ] tick time break; case SC__ENERVATION: @@ -9205,6 +9208,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val2 = 15 + 5 * val1; // Reflect amount val3 = val1*5 + 25; // Number of reflects val4 = tick/1000; // Number of SP cycles (duration) + tick = -1; // Duration sent to the client should be infinite tick_time = 1000; // [GodLesZ] tick time break; case SC_FORCEOFVANGUARD: // This is not the official way to handle it but I think we should use it. [pakpil] @@ -9229,6 +9233,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val1 += (10 * pc_checkskill(sd,CR_DEFENDER)) * (status_get_lv(bl) / 100); break; case SC_BANDING: + tick = -1; // Duration sent to the client should be infinite tick_time = 5000; // [GodLesZ] tick time break; case SC_MAGNETICFIELD: @@ -9241,6 +9246,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val3 = (sd?sd->status.job_level:50); } val4 = tick / 5000; + tick = -1; // Duration sent to the client should be infinite tick_time = 5000; // [GodLesZ] tick time status_change_clear_buffs(bl,3); // Remove buffs/debuffs break; @@ -9274,25 +9280,26 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val4 = ( status_get_vit(src)/4 ) * val1; // STAT DEF increase: [(Caster VIT / 4) x Skill Level] } break; + case SC_PYROTECHNIC_OPTION: + val2 = 60; + break; case SC_HEATER_OPTION: - val2 = 120; // !TODO: Watk. Renewal (Atk2) - val3 = 33; // % Increase effects. - val4 = 3; // Change into fire element. + val2 = 120; // Watk. Renewal (Atk2) + val3 = ELE_FIRE; // Change into fire element. break; case SC_TROPIC_OPTION: - val2 = 180; // !TODO: Watk. Renewal (Atk2) + val2 = 180; // Watk. Renewal (Atk2) val3 = MG_FIREBOLT; break; case SC_AQUAPLAY_OPTION: val2 = 40; break; case SC_COOLER_OPTION: - val2 = 80; // % Freezing chance - val3 = 33; // % increased damage - val4 = 1; // Change into water elemet + val2 = 80; + val3 = ELE_WATER; // Change into water element. break; case SC_CHILLY_AIR_OPTION: - val2 = 120; // !TODO: Matk. Renewal (Matk1) + val2 = 120; // Matk. Renewal (Matk1) val3 = MG_COLDBOLT; break; case SC_WIND_STEP_OPTION: @@ -9300,7 +9307,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty break; case SC_BLAST_OPTION: val2 = 20; - val3 = ELE_WIND; + val3 = ELE_WIND; // Change into wind element. break; case SC_WILD_STORM_OPTION: val2 = MG_LIGHTNINGBOLT; @@ -9311,8 +9318,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty break; case SC_CURSED_SOIL_OPTION: val2 = 10; //HP rate bonus - val3 = 33; - val4 = 2; + val3 = ELE_EARTH; // Change into earth element. break; case SC_UPHEAVAL_OPTION: val2 = WZ_EARTHSPIKE; @@ -9324,7 +9330,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_WATER_DROP_OPTION: case SC_WIND_CURTAIN_OPTION: case SC_STONE_SHIELD_OPTION: - val2 = 20; // Elemental modifier. Not confirmed. + val2 = 100; // Elemental modifier. break; case SC_CIRCLE_OF_FIRE: case SC_FIRE_CLOAK: @@ -9342,7 +9348,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val3 = 20; // Reductions. Atk2, Flee1, Matk1 ???? break; case SC_ZEPHYR: - val2 = 22; // Flee. + val2 = 25; // Flee. break; case SC_TIDAL_WEAPON: val2 = 20; // Increase Elemental's attack. @@ -9354,6 +9360,16 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_POWER_OF_GAIA: val2 = 20; //HP rate bonus break; + case SC_TEARGAS: + val3 = status_get_max_hp(bl) * 5 / 100; // Drain 5% HP + val4 = tick / 2000; + tick_time = 2000; + sc_start(src, bl, SC_TEARGAS_SOB, 100, 0, 1|2|8); // Sob Emoticon + break; + case SC_TEARGAS_SOB: + val4 = tick / 3000; + tick_time = 3000; + break; case SC_MELON_BOMB: case SC_BANANA_BOMB: val1 = 15; @@ -9371,6 +9387,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val3 = val1 * 2; case SC_IZAYOI: val2 = tick/1000; + if( type == SC_IZAYOI ) + tick = -1; // Duration sent to the client should be infinite tick_time = 1000; break; case SC_ZANGETSU: @@ -9465,11 +9483,13 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val2 = 6 - val1; tick_time = 1000; val4 = tick / tick_time; + tick = -1; // Duration sent to the client should be infinite break; case SC_KINGS_GRACE: val2 = 3 + val1; //HP Recover rate tick_time = 1000; val4 = tick / tick_time; + tick = -1; // Duration sent to the client should be infinite break; case SC_TELEKINESIS_INTENSE: val2 = 10 * val1; // sp consum / casttime reduc % @@ -9484,6 +9504,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val3 = 1000 + 100 * val1; // healing tick_time = 10000; val4 = tick / tick_time; + tick = -1; // Duration sent to the client should be infinite break; case SC_FLASHCOMBO: val2 = (20 * val1) + 20; // atk bonus @@ -11589,6 +11610,18 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data) sc_timer_next(2000 + tick, status_change_timer, bl->id, data); return 0; + case SC_TEARGAS: + if(!status_charge(bl, 0, sce->val3)) + break; // Not enough HP to continue. + sc_timer_next(2000 + tick, status_change_timer, bl->id, data); + break; + case SC_TEARGAS_SOB: + if( --(sce->val4) >= 0 ) { + clif_emotion(bl, E_SOB); + sc_timer_next(3000 + tick, status_change_timer, bl->id, data); + return 0; + } + break; case SC_STOMACHACHE: if( --(sce->val4) > 0 ) { status_charge(bl,0,sce->val2); // Reduce 8 every 10 seconds. diff --git a/src/map/status.h b/src/map/status.h index 7f8abb3b31..0a33db4c7c 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -697,6 +697,8 @@ typedef enum sc_type { SC_ALL_RIDING, + SC_TEARGAS_SOB, + #ifdef RENEWAL SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled #endif diff --git a/src/map/unit.c b/src/map/unit.c index f9bd899a23..c4a2b478d7 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -2194,7 +2194,7 @@ static int unit_attack_timer(int tid, unsigned int tick, int id, intptr_t data) * &2: Cancel only if skill is cancellable * @return Success(1); Fail(0); */ -int unit_skillcastcancel(struct block_list *bl,int type) +int unit_skillcastcancel(struct block_list *bl, char type) { struct map_session_data *sd = NULL; struct unit_data *ud = unit_bl2ud( bl); @@ -2232,7 +2232,7 @@ int unit_skillcastcancel(struct block_list *bl,int type) ud->skilltimer = INVALID_TIMER; - if( sd && pc_checkskill(sd,SA_FREECAST) > 0 ) + if( sd && (pc_checkskill(sd,SA_FREECAST) > 0 || skill_id == LG_EXEEDBREAK) ) status_calc_bl(&sd->bl, SCB_SPEED); if( sd ) { diff --git a/src/map/unit.h b/src/map/unit.h index e21d557f0d..e92991140d 100644 --- a/src/map/unit.h +++ b/src/map/unit.h @@ -115,7 +115,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, uint16 skill_id, uint16 skill_lv, int casttime, int castcancel); // Cancel unit cast -int unit_skillcastcancel(struct block_list *bl,int type); +int unit_skillcastcancel(struct block_list *bl, char type); int unit_counttargeted(struct block_list *bl); int unit_set_target(struct unit_data* ud, int target_id);