mpeg's ninja work

http://gpegon.free.fr/ea/ninja_08-07-06_mpeg.txt

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8160 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
Vicious 2006-08-07 15:12:05 +00:00
parent 8fa60b9249
commit 6cb68e6f4a
13 changed files with 114 additions and 166 deletions

View File

@ -4,6 +4,7 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
2006/08/07 2006/08/07
* mpeg's Ninja work [Vicious]
* Adjusted Battle_check_target so that alchemist summoned mobs are * Adjusted Battle_check_target so that alchemist summoned mobs are
targetted by everyone as long as 1. The top-level master is a player and 2. targetted by everyone as long as 1. The top-level master is a player and 2.
the actual attacker is not a mob-type. [Skotlex] the actual attacker is not a mob-type. [Skotlex]

View File

@ -1,7 +1,7 @@
// Job-specific Values Database // Job-specific Values Database
// //
// Structure of Database: // Structure of Database:
// JobID,Weight,HPFactor,HPMultiplicator,SPFactor,BareFist,Dagger,1HSword,2HSword,1HSpear,2HSpear,1HAxe,2HAxe,1HMace,2HMace(unused),Rod,Bow,Knuckle,Instrument,Whip,Book,Katar,Revolver,Rifle,Shotgun,Gatling Gun,Grenade Launcher // JobID,Weight,HPFactor,HPMultiplicator,SPFactor,BareFist,Dagger,1HSword,2HSword,1HSpear,2HSpear,1HAxe,2HAxe,1HMace,2HMace(unused),Rod,Bow,Knuckle,Instrument,Whip,Book,Katar,Revolver,Rifle,Shotgun,Gatling Gun,Grenade Launcher,Fuuma Shuriken
// //
// Novice // Novice
0, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 0, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
@ -53,8 +53,8 @@
23, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 23, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Gunslinger // Gunslinger
24, 27000,75 ,300 ,600, 400 ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 800 ,1200 ,200 ,1400 ,2000 24, 27000,75 ,300 ,600, 400 ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 800 ,1200 ,200 ,1400 ,2000
// Ninja // Ninja // Dagger is a bit faster than Fuuma Shuriken > temp value
25, 24000,110 ,500 ,400 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000, 500 25, 24000,60 ,700 ,400 ,400 ,500 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000, 550
// Novice High // Novice High
4001, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 4001, 20000,0 ,500 ,100 ,500 ,650 ,700 ,2000 ,2000 ,2000 ,800 ,2000 ,700 ,700 ,650 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000
// Swordman High // Swordman High

View File

@ -62,7 +62,7 @@
// Gunslinger // Gunslinger
24,5,6,0,6,0,5,0,0,0,5,5,6,2,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,0,0,6,1,0,0,5,0,0,0,0,0,1,0,0,0,5,0,0,0,0,1,6,4,0,0,5,0,0,0,2,3,0,5,6,1,0,0,0,0,0,0 24,5,6,0,6,0,5,0,0,0,5,5,6,2,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,0,0,6,1,0,0,5,0,0,0,0,0,1,0,0,0,5,0,0,0,0,1,6,4,0,0,5,0,0,0,2,3,0,5,6,1,0,0,0,0,0,0
// Ninja // Ninja
25,2,2,0,0,0,0,0,0,0,5,0,0,2,0,0,0,0,0,0,2,4,5,0,0,0,0,0,0,4,6,2,5,0,0,0,0,0,0,0,6,2,4,5,0,0,0,0,0,0,4,2,6,5,0,0,0,0,0,1,3,2,0,5,6,0,0,0,0,0,0 25,2,2,0,0,0,0,0,0,0,5,2,0,0,0,0,0,0,0,0,4,2,5,0,0,0,0,0,0,4,6,2,5,0,0,0,0,0,0,0,6,2,4,5,0,0,0,0,0,0,4,2,6,5,0,0,0,0,0,1,3,2,4,5,6,0,0,0,0,0,0
// Novice High // Novice High
4001,0,0,0,0,0,0,0,0,0,0 4001,0,0,0,0,0,0,0,0,0,0
// Swordman High // Swordman High

View File

@ -885,20 +885,20 @@
525,1000,1000,0,0,0 525,1000,1000,0,0,0
//-- NJ_ZENYNAGE //-- NJ_ZENYNAGE
526,0,5000,0,0,0 526,0,5000,0,0,0
//-- NJ_TATAMIGAESHI //-- NJ_TATAMIGAESHI // Duration1 used for SC_TATAMIGAESHI and ground visual effect and Duration2 for "damage-can-be-done" duration
527,0,0,0,3000,3000 527,0,3000,0,3000,200 // ex> Skill will only hit during 200 first ticks (concretely do only 1 hit just after being casted)
//-- NJ_KASUMIKIRI // Delay unknown (if there is one) //-- NJ_KASUMIKIRI // Delay unknown (if there is one)
528,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0 528,0,0,0,30000:60000:90000:120000:150000:180000:210000:240000:270000:300000,0
//-- NJ_SHADOWJUMP // Delay unknown (if there is one) //-- NJ_SHADOWJUMP // Delay unknown (if there is one)
529,0,0,0,0,0 529,0,0,0,0,0
//-- NJ_KIRIKAGE // Seems to have no delay (English Translation Project) //-- NJ_KIRIKAGE // Seems to have no delay (English Translation Project)
530,0,0,0,0,0 530,0,0,0,0,0
//-- NJ_UTSUSEMI // Cast and Delay unknown (temp : NJ_NEN cast time) //-- NJ_UTSUSEMI
531,5000:4000:3000:2000:1000,0,0,20000:30000:40000:50000:60000,0 531,0,0,0,20000:30000:40000:50000:60000,0
//-- NJ_BUNSINJYUTSU // Cast and Delay unknown (temp : random cast :p) //-- NJ_BUNSINJYUTSU // Cast and Delay unknown (temp > random cast)
532,4000:3500:3000:2500:2000:3000:2500:2000:1500:1000,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0 532,4000:3500:3000:2500:2000:3000:2500:2000:1500:1000,0,0,60000:80000:100000:120000:140000:160000:180000:200000:220000:240000,0
//-- NJ_KOUENKA //-- NJ_KOUENKA // Should there really be a delay ?
534,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0 534,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,0
//-- NJ_KAENSIN //-- NJ_KAENSIN
535,6000:5500:5000:4500:4000:3500:3000:2500:2000:1500,1000,0,20000,0, 535,6000:5500:5000:4500:4000:3500:3000:2500:2000:1500,1000,0,20000,0,
@ -908,17 +908,17 @@
537,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0 537,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0
//-- NJ_SUITON //-- NJ_SUITON
538,3300:3200:3100:3000:2900:2800:2700:2600:2500:2400,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000 538,3300:3200:3100:3000:2900:2800:2700:2600:2500:2400,0,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000
//-- NJ_HYOUSYOURAKU //-- NJ_HYOUSYOURAKU // Cast time taken from jA (not reliable, must be checked)
539,3000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000 // converted from jAthena 539,3000,1000:1200:1400:1600:1800:2000:2200:2400:2600:2800,0,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000
//-- NJ_HUUJIN //-- NJ_HUUJIN
540,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0 540,700:1400:2100:2800:3500:4200:4900:5600:6300:7000,0,0,0,0
//-- NJ_RAIGEKISAI //-- NJ_RAIGEKISAI
541,3700:3400:3100:2800:2500,0,0,0,0 // not sure of cast but very litely to be correct (English Translation Project) 541,3700:3400:3100:2800:2500,0,0,0,0 // Not sure of cast but very litely to be correct (English Translation Project)
//-- NJ_KAMAITACHI //-- NJ_KAMAITACHI
542,3000,2000,0,0,0 // cast and delay unknown. temp values (I put the same as bakuenryu) 542,3000,2000,0,0,0 // Cast and delay unknown > temp values taken from NJ_BAKUENRYU
//-- NJ_NEN //-- NJ_NEN
543,5000:4000:3000:2000:1000,0,0,30000:45000:60000:75000:90000,30000:45000:60000:75000:90000 543,5000:4000:3000:2000:1000,0,0,30000:45000:60000:75000:90000,30000:45000:60000:75000:90000
//-- NJ_ISSEN // cast and delay unknown. temp values (same as MO_EXTREMITYFIST) //-- NJ_ISSEN // cast and delay unknown > temp values taken from MO_EXTREMITYFIST
544,4000:3500:3000:2500:2000:3000:2500:2000:1500:1000,0,0,0,0 544,4000:3500:3000:2500:2000:3000:2500:2000:1500:1000,0,0,0,0
//========================================== //==========================================

View File

@ -4,7 +4,7 @@
// 03 hit (8- repeated hitting, 6- single-hit) // 03 hit (8- repeated hitting, 6- single-hit)
// 04 inf (0- passive, 1- enemy, 2- place, 4- self, 16- friend, 32- trap) // 04 inf (0- passive, 1- enemy, 2- place, 4- self, 16- friend, 32- trap)
// 05 pl attributes (0- nothing, 1- water, 2- earth, 3- fire, 4- wind, 5- poison, 6- saint, 7- darkness, 8- sense, 9- immortality) // 05 pl attributes (0- nothing, 1- water, 2- earth, 3- fire, 4- wind, 5- poison, 6- saint, 7- darkness, 8- sense, 9- immortality)
// 06 nk (0- normal skill, 1-no damage skill, 2-splash damage skill, 3-no damage area skill) // 06 nk (0- normal skill, 1-no damage skill, 2-splash damage skill, 3-no damage area skill, 4-splash and split damage skill)
// 07 splash/effect range (-1 for screen-wide) // 07 splash/effect range (-1 for screen-wide)
// 08 MaxLv // 08 MaxLv
// 09 Number of hits (when positive, damage is increased by hits, // 09 Number of hits (when positive, damage is increased by hits,
@ -31,7 +31,7 @@
8,0,6,4,0,1,0,10,1,no,0,0,0,weapon,0 //SM_ENDURE#Endure# 8,0,6,4,0,1,0,10,1,no,0,0,0,weapon,0 //SM_ENDURE#Endure#
9,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //MG_SRECOVERY#Increase SP Recovery# 9,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //MG_SRECOVERY#Increase SP Recovery#
10,0,6,4,3,3,3,1,1,yes,0,0,0,magic,0 //MG_SIGHT#Sight# 10,0,6,4,3,3,3,1,1,yes,0,0,0,magic,0 //MG_SIGHT#Sight#
11,9,6,1,8,0,1,10,1,yes,0,0,0,magic,0 //MG_NAPALMBEAT#Napalm Beat# 11,9,6,1,8,4,1,10,1,yes,0,0,0,magic,0 //MG_NAPALMBEAT#Napalm Beat#
12,9,8,2,8,1,0,10,1,yes,0,0,0,magic,0 //MG_SAFETYWALL#Safety Wall# 12,9,8,2,8,1,0,10,1,yes,0,0,0,magic,0 //MG_SAFETYWALL#Safety Wall#
13,9,8,1,8,0,0,10,1:1:2:2:3:3:4:4:5:5,yes,0,0,0,magic,0 //MG_SOULSTRIKE#Soul Strike# 13,9,8,1,8,0,0,10,1:1:2:2:3:3:4:4:5:5,yes,0,0,0,magic,0 //MG_SOULSTRIKE#Soul Strike#
14,9,8,1,1,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0 //MG_COLDBOLT#Cold Bolt# 14,9,8,1,1,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0 //MG_COLDBOLT#Cold Bolt#
@ -420,7 +420,7 @@
397,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0 //LK_SPIRALPIERCE#Spiral Pierce# 397,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0 //LK_SPIRALPIERCE#Spiral Pierce#
398,4,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //LK_HEADCRUSH#Traumatic Blow# 398,4,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //LK_HEADCRUSH#Traumatic Blow#
399,4,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //LK_JOINTBEAT#Vital Strike# 399,4,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //LK_JOINTBEAT#Vital Strike#
400,9,8,1,8,0,1,5,1:2:3:4:5,yes,0,0,0,magic,0 //HW_NAPALMVULCAN#Napalm Vulcan# 400,9,8,1,8,4,1,5,1:2:3:4:5,yes,0,0,0,magic,0 //HW_NAPALMVULCAN#Napalm Vulcan#
401,0,6,4,0,1,0,1,1,yes,0,0,0,none,0 //CH_SOULCOLLECT#Zen# 401,0,6,4,0,1,0,1,1,yes,0,0,0,none,0 //CH_SOULCOLLECT#Zen#
402,9,6,1,0,1,0,5,1,no,0,0,0,none,0 //PF_MINDBREAKER#Mind Breaker# 402,9,6,1,0,1,0,5,1,no,0,0,0,none,0 //PF_MINDBREAKER#Mind Breaker#
403,0,0,4,0,1,0,1,1,yes,0,0,0,magic,0 //PF_MEMORIZE#Foresight# 403,0,0,4,0,1,0,1,1,yes,0,0,0,magic,0 //PF_MEMORIZE#Foresight#
@ -546,9 +546,9 @@
522,0,0,0,0,0,0,10,1,no,0,0,0,weapon,0 //NJ_TOBIDOUGU#NJ_TOBIDOUGU# 522,0,0,0,0,0,0,10,1,no,0,0,0,weapon,0 //NJ_TOBIDOUGU#NJ_TOBIDOUGU#
523,9,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //NJ_SYURIKEN#NJ_SYURIKEN# 523,9,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //NJ_SYURIKEN#NJ_SYURIKEN#
524,9,8,1,-1,0,0,5,3,no,0,0,0,weapon,0 //NJ_KUNAI#NJ_KUNAI# 524,9,8,1,-1,0,0,5,3,no,0,0,0,weapon,0 //NJ_KUNAI#NJ_KUNAI#
525,9,8,1,-1,0,1,5,-1:-2:-3:-4:-5,yes,0,0,0,weapon,0 //NJ_HUUMA#NJ_HUUMA# 525,9,8,1,-1,4,1,5,-1:-2:-3:-4:-5,yes,0,0,0,weapon,0 //NJ_HUUMA#NJ_HUUMA#
526,9,6,1,0,0,0,10,1,no,0,0,0,misc,0 //NJ_ZENYNAGE#NJ_ZENYNAGE# 526,9,6,1,0,0,0,10,1,no,0,0,0,misc,0 //NJ_ZENYNAGE#NJ_ZENYNAGE#
527,0,6,4,3,0,0,5,1,no,0,0,0,weapon,3 //NJ_TATAMIGAESHI#NJ_TATAMIGAESHI# 527,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,3 //NJ_TATAMIGAESHI#NJ_TATAMIGAESHI#
528,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //NJ_KASUMIKIRI#NJ_KASUMIKIRI# 528,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0 //NJ_KASUMIKIRI#NJ_KASUMIKIRI#
529,7:9:11:13:15,6,2,0,1,0,5,1,no,0,0,0,none,0 //NJ_SHADOWJUMP#NJ_SHADOWJUMP# 529,7:9:11:13:15,6,2,0,1,0,5,1,no,0,0,0,none,0 //NJ_SHADOWJUMP#NJ_SHADOWJUMP#
530,-1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //NJ_KIRIKAGE#NJ_KIRIKAGE# 530,-1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0 //NJ_KIRIKAGE#NJ_KIRIKAGE#
@ -557,12 +557,12 @@
533,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //NJ_NINPOU#NJ_NINPOU# 533,0,0,0,0,0,0,10,0,no,0,0,0,none,0 //NJ_NINPOU#NJ_NINPOU#
534,9,8,1,3,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0 //NJ_KOUENKA#NJ_KOUENKA# 534,9,8,1,3,0,0,10,1:2:3:4:5:6:7:8:9:10,yes,0,0,0,magic,0 //NJ_KOUENKA#NJ_KOUENKA#
535,0,8,4,3,0,0,10,1,yes,0,0,0,magic,0 //NJ_KAENSIN#NJ_KAENSIN# 535,0,8,4,3,0,0,10,1,yes,0,0,0,magic,0 //NJ_KAENSIN#NJ_KAENSIN#
536,9,8,1,3,2,1,5,3,yes,0,0,0,magic,0 //NJ_BAKUENRYU#NJ_BAKUENRYU# 536,9,8,1,3,2,2,5,3,yes,0,0,0,magic,0 //NJ_BAKUENRYU#NJ_BAKUENRYU#
537,9,8,1,1,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,0 //NJ_HYOUSENSOU#NJ_HYOUSENSOU# 537,9,8,1,1,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0,0,magic,0 //NJ_HYOUSENSOU#NJ_HYOUSENSOU#
538,9,6,2,0,1,0,10,1,yes,0,0,0,magic,0 //NJ_SUITON#NJ_SUITON# 538,9,6,2,0,1,0,10,1,yes,0,0,0,magic,0 //NJ_SUITON#NJ_SUITON#
539,0,6,4,1,1,0,5,1,yes,0,0,0,magic,0 //NJ_HYOUSYOURAKU#NJ_HYOUSYOURAKU# 539,0,6,4,1,2,3,5,1,yes,0,0,0,magic,0 //NJ_HYOUSYOURAKU#NJ_HYOUSYOURAKU#
540,9,8,1,4,0,0,10,-1:-2:-2:-3:-3:-4:-4:-5:-5:-6,yes,0,0,0,magic,0 //NJ_HUUJIN#NJ_HUUJIN# 540,9,8,1,4,0,0,10,-1:-2:-2:-3:-3:-4:-4:-5:-5:-6,yes,0,0,0,magic,0 //NJ_HUUJIN#NJ_HUUJIN#
541,9,6,4,4,1,0,5,1,yes,0,0,0,magic,0 //NJ_RAIGEKISAI#NJ_RAIGEKISAI# 541,9,6,4,4,2,2:2:3:3:4,5,1,yes,0,0,0,magic,0 //NJ_RAIGEKISAI#NJ_RAIGEKISAI#
542,5:6:7:8:9,8,1,4,0,2,5,1,yes,0,0,0,magic,0 //NJ_KAMAITACHI#NJ_KAMAITACHI# 542,5:6:7:8:9,8,1,4,0,2,5,1,yes,0,0,0,magic,0 //NJ_KAMAITACHI#NJ_KAMAITACHI#
543,0,6,4,0,1,0,5,1,no,0,0,0,none,0 //NJ_NEN#NJ_NEN# 543,0,6,4,0,1,0,5,1,no,0,0,0,none,0 //NJ_NEN#NJ_NEN#
544,-2,6,1,0,0,0,10,1,yes,0,0,0,weapon,0 //NJ_ISSEN#NJ_ISSEN# 544,-2,6,1,0,0,0,10,1,yes,0,0,0,weapon,0 //NJ_ISSEN#NJ_ISSEN#

View File

@ -55,4 +55,4 @@
//Zone 2 - Jail //Zone 2 - Jail
421,64 //TK_JUMPKICK#Flying Side Kick# 421,64 //TK_JUMPKICK#Flying Side Kick#
426,64 //TK_HIGHJUMP#Taekwon Jump# 426,64 //TK_HIGHJUMP#Taekwon Jump#
529,64 //NJ_SHADOWJUMP#NJ_SHADOWJUMP#

View File

@ -678,10 +678,10 @@
25,525,5,522,5,524,5,0,0,0,0,0,0 //NJ_HUUMA#NJ_HUUMA# 25,525,5,522,5,524,5,0,0,0,0,0,0 //NJ_HUUMA#NJ_HUUMA#
25,526,10,522,10,525,5,0,0,0,0,0,0 //NJ_ZENYNAGE#NJ_ZENYNAGE# 25,526,10,522,10,525,5,0,0,0,0,0,0 //NJ_ZENYNAGE#NJ_ZENYNAGE#
25,527,5,0,0,0,0,0,0,0,0,0,0 //NJ_TATAMIGAESHI#NJ_TATAMIGAESHI# 25,527,5,0,0,0,0,0,0,0,0,0,0 //NJ_TATAMIGAESHI#NJ_TATAMIGAESHI#
25,528,10,0,0,0,0,0,0,0,0,0,0 //NJ_KASUMIKIRI#NJ_KASUMIKIRI# 25,528,10,529,1,0,0,0,0,0,0,0,0 //NJ_KASUMIKIRI#NJ_KASUMIKIRI#
25,529,10,0,0,0,0,0,0,0,0,0,0 //NJ_SHADOWJUMP#NJ_SHADOWJUMP# 25,529,10,527,1,0,0,0,0,0,0,0,0 //NJ_SHADOWJUMP#NJ_SHADOWJUMP#
25,530,5,0,0,0,0,0,0,0,0,0,0 //NJ_KIRIKAGE#NJ_KIRIKAGE# 25,530,5,528,5,0,0,0,0,0,0,0,0 //NJ_KIRIKAGE#NJ_KIRIKAGE#
25,531,5,0,0,0,0,0,0,0,0,0,0 //NJ_UTSUSEMI#NJ_UTSUSEMI# 25,531,5,529,5,0,0,0,0,0,0,0,0 //NJ_UTSUSEMI#NJ_UTSUSEMI#
25,532,10,531,4,530,3,543,1,0,0,0,0 //NJ_BUNSINJYUTSU#NJ_BUNSINJYUTSU# 25,532,10,531,4,530,3,543,1,0,0,0,0 //NJ_BUNSINJYUTSU#NJ_BUNSINJYUTSU#
25,533,10,0,0,0,0,0,0,0,0,0,0 //NJ_NINPOU#NJ_NINPOU# 25,533,10,0,0,0,0,0,0,0,0,0,0 //NJ_NINPOU#NJ_NINPOU#
25,534,10,533,1,0,0,0,0,0,0,0,0 //NJ_KOUENKA#NJ_KOUENKA# 25,534,10,533,1,0,0,0,0,0,0,0,0 //NJ_KOUENKA#NJ_KOUENKA#
@ -2174,4 +2174,4 @@
4049,471,3,452,1,0,0,0,0,0,0,0,0 //SL_SKE#Esk# 4049,471,3,452,1,0,0,0,0,0,0,0,0 //SL_SKE#Esk#
4049,472,3,447,1,0,0,0,0,0,0,0,0 //SL_SKA#Eska# 4049,472,3,447,1,0,0,0,0,0,0,0,0 //SL_SKA#Eska#
4049,494,5,451,1,0,0,0,0,0,0,0,0 //SL_HIGH#Spirit of Rebirth# 4049,494,5,451,1,0,0,0,0,0,0,0,0 //SL_HIGH#Spirit of Rebirth#
4049,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# 4049,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#

View File

@ -87,10 +87,8 @@
430,0x86, , 0, 1, 500,enemy, 0x000 //SG_STAR_WARM 430,0x86, , 0, 1, 500,enemy, 0x000 //SG_STAR_WARM
484,0xb8, , 2, 0,1000,enemy, 0x808 //HW_GRAVITATION 484,0xb8, , 2, 0,1000,enemy, 0x808 //HW_GRAVITATION
488,0xb9, , 3, 0, -1,all, 0x200 //CG_HERMODE 488,0xb9, , 3, 0, -1,all, 0x200 //CG_HERMODE
527,0xba, , -1, 0,2500,enemy, 0x000 //NJ_TATAMIGAESHI 516,0xba, , 0, 3, 100,enemy, 0x000 //GS_DESPERADO
535,0xbd, , 2, 0, 100,enemy, 0x008 //NJ_KAENSIN
541,0x86,,0,2:2:3:3:4,1000,enemy,0x000 //NJ_RAIGEKISAI
538,0xbb,,1:1:1:2:2:2:3:3:3:4,0,-1,all,0x002 //NJ_SUITON
516,0xbc, , 0, 3, 100,enemy, 0x000 //GS_DESPERADO
521,0xc2, , 0, 1,1000,enemy, 0x006 //GS_GROUNDDRIFT 521,0xc2, , 0, 1,1000,enemy, 0x006 //GS_GROUNDDRIFT
539,0x86, , 0, 3,1000,enemy, 0x000 //NJ_HYOUSYOURAKU 527,0xbc, , -1, 0,2500,enemy, 0x000 //NJ_TATAMIGAESHI
535,0xbd, , -1, 0, 200,enemy, 0x008 //NJ_KAENSIN
538,0xbb,,1:1:1:2:2:2:3:3:3:4,0,-1,all,0x000 //NJ_SUITON

View File

@ -314,7 +314,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
rand()%100 < sc->data[SC_KAUPE].val2 && rand()%100 < sc->data[SC_KAUPE].val2 &&
(src->type == BL_PC || !skill_num)) (src->type == BL_PC || !skill_num))
{ //Kaupe only blocks all skills of players. { //Kaupe only blocks all skills of players.
clif_skill_nodamage(bl,bl,SL_KAUPE,1,1); clif_specialeffect(bl, 462, AREA);
if (--sc->data[SC_KAUPE].val3 <= 0) //We make it work like Safety Wall, even though it only blocks 1 time. if (--sc->data[SC_KAUPE].val3 <= 0) //We make it work like Safety Wall, even though it only blocks 1 time.
status_change_end(bl, SC_KAUPE, -1); status_change_end(bl, SC_KAUPE, -1);
return 0; return 0;
@ -322,7 +322,7 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
if(sc->data[SC_UTSUSEMI].timer != -1 && !skill_num) if(sc->data[SC_UTSUSEMI].timer != -1 && !skill_num)
{ {
clif_skill_nodamage(bl,bl,NJ_UTSUSEMI,1,1); clif_specialeffect(bl, 462, AREA);
skill_blown (src, bl, sc->data[SC_UTSUSEMI].val3); skill_blown (src, bl, sc->data[SC_UTSUSEMI].val3);
if (--sc->data[SC_UTSUSEMI].val2 <= 0) if (--sc->data[SC_UTSUSEMI].val2 <= 0)
status_change_end(bl, SC_UTSUSEMI, -1); status_change_end(bl, SC_UTSUSEMI, -1);
@ -331,7 +331,6 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
if(sc->data[SC_BUNSINJYUTSU].timer != -1 && (flag&(BF_WEAPON|BF_MISC)) ) if(sc->data[SC_BUNSINJYUTSU].timer != -1 && (flag&(BF_WEAPON|BF_MISC)) )
{ {
clif_skill_nodamage(bl,bl,NJ_BUNSINJYUTSU,1,1);
if (--sc->data[SC_BUNSINJYUTSU].val2 <= 0) if (--sc->data[SC_BUNSINJYUTSU].val2 <= 0)
status_change_end(bl, SC_BUNSINJYUTSU, -1); status_change_end(bl, SC_BUNSINJYUTSU, -1);
return 0; return 0;
@ -2347,8 +2346,8 @@ struct Damage battle_calc_magic_attack(
case NJ_KOUENKA: case NJ_KOUENKA:
skillratio -= 10; skillratio -= 10;
break; break;
case NJ_HUUJIN: case NJ_KAENSIN:
skillratio += 50 + 50*skill_lv; // extrapolation from a vid (unsure) skillratio -= 40; // extrapolation from a vid (seems correct +/- 10%)
break; break;
case NJ_BAKUENRYU: case NJ_BAKUENRYU:
skillratio += 50*(skill_lv-1); // recorrected after calculation from vids skillratio += 50*(skill_lv-1); // recorrected after calculation from vids
@ -2361,6 +2360,9 @@ struct Damage battle_calc_magic_attack(
case NJ_HYOUSYOURAKU: case NJ_HYOUSYOURAKU:
skillratio += 50*skill_lv; // recorrected after calculation from vids skillratio += 50*skill_lv; // recorrected after calculation from vids
break; break;
case NJ_HUUJIN:
skillratio += 50 + 50*skill_lv; // extrapolation from a vid (unsure)
break;
case NJ_RAIGEKISAI: case NJ_RAIGEKISAI:
skillratio += 60 + 40*skill_lv; // idem skillratio += 60 + 40*skill_lv; // idem
break; break;

View File

@ -1827,11 +1827,12 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
if (attack_type&BF_MAGIC) { if (attack_type&BF_MAGIC) {
if(sc && sc->data[SC_KAITE].timer != -1 && (dmg.damage || dmg.damage2) if(sc && sc->data[SC_KAITE].timer != -1 && (dmg.damage || dmg.damage2)
&& !(sstatus->mode&MD_BOSS) && (sd || status_get_lv(dsrc) <= 80) && !(sstatus->mode&MD_BOSS) && (src->type == BL_PC || status_get_lv(src) <= 80) )
) { //Works on players or mobs with level under 80. { //Works on players or mobs with level under 80.
clif_skill_nodamage(bl,bl,SL_KAITE,sc->data[SC_KAITE].val1,1); clif_specialeffect(bl, 438, AREA);
if (--sc->data[SC_KAITE].val2 <= 0) if (--sc->data[SC_KAITE].val2 <= 0)
status_change_end(bl, SC_KAITE, -1); status_change_end(bl, SC_KAITE, -1);
clif_skill_nodamage(bl,src,skillid,skilllv,1);
bl = src; //Just make the skill attack yourself @.@ bl = src; //Just make the skill attack yourself @.@
sc = status_get_sc(bl); sc = status_get_sc(bl);
tsd = (bl->type == BL_PC)?(TBL_PC*)bl:NULL; tsd = (bl->type == BL_PC)?(TBL_PC*)bl:NULL;
@ -2010,7 +2011,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
if (ud && ud->skilltarget == bl->id) if (ud && ud->skilltarget == bl->id)
dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, skillid, (lv!=0)?lv:skilllv, type); dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, skillid, (lv!=0)?lv:skilllv, type);
else else
dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion, damage, dmg.div_, skillid, -1, 5); //TODO: Check whether it's better to send -1 in skilllv or also send 0 as skillid, maybe even change this to a clif_damage packet? dmg.dmotion = clif_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,8,dmg.damage2); // can't know why 8, but it works for all skills...
break; break;
} }
case PA_GOSPEL: //Should look like Holy Cross [Skotlex] case PA_GOSPEL: //Should look like Holy Cross [Skotlex]
@ -2081,7 +2082,10 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds
//Only knockback if it's still alive, otherwise a "ghost" is left behind. [Skotlex] //Only knockback if it's still alive, otherwise a "ghost" is left behind. [Skotlex]
if (dmg.blewcount > 0 && !status_isdead(bl)) if (dmg.blewcount > 0 && !status_isdead(bl))
skill_blown(dsrc,bl,dmg.blewcount); {
if ( skillid != NJ_TATAMIGAESHI ) skill_blown(dsrc,bl,dmg.blewcount);
else skill_blown(src,bl,dmg.blewcount);
}
//Delayed damage must be dealt after the knockback (it needs to know actual position of target) //Delayed damage must be dealt after the knockback (it needs to know actual position of target)
if (dmg.amotion) if (dmg.amotion)
@ -2824,40 +2828,39 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
break; break;
//Splash attack skills. //Splash attack skills.
case AS_SPLASHER:
if ( (flag&1) && bl->id != skill_area_temp[1] )
{
skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, 1);
break;
}
case AS_GRIMTOOTH: case AS_GRIMTOOTH:
case MC_CARTREVOLUTION: case MC_CARTREVOLUTION:
case NPC_SPLASHATTACK: case NPC_SPLASHATTACK:
case AC_SHOWER: //Targetted skill implementation. case AC_SHOWER:
case MG_NAPALMBEAT:
case MG_FIREBALL:
case HW_NAPALMVULCAN:
case HT_BLITZBEAT:
case NJ_HUUMA:
case NJ_BAKUENRYU: case NJ_BAKUENRYU:
if(flag&1){ if (flag & 1) { //Invoked from map_foreachinarea, skill_area_temp[0] holds number of targets to divide damage by.
if(bl->id!=skill_area_temp[1]){ skill_attack(skill_get_type(skillid), src, src, bl, skillid, skilllv, tick, skill_area_temp[0]);
skill_attack(skill_get_type(skillid),src,src,bl,skillid,skilllv,tick,
0x0500);
}
} else { } else {
skill_area_temp[1]=bl->id; if ( skillid == NJ_BAKUENRYU ) clif_skill_nodamage(src,bl,skillid,skilllv,1);
skill_area_temp[0] = 0;
skill_area_temp[1] = bl->id;
if ( (skill_get_nk(skillid)&NK_SPLASHSPLIT) || (skillid==HT_BLITZBEAT && flag&0xf00000) ) //Warning, 0x100000 is currently BCT_NEUTRAL, so don't mix it when asking for the enemy. [Skotlex]
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
src, skillid, skilllv, tick, flag|BCT_ENEMY, skill_area_sub_count);
map_foreachinrange(skill_area_sub, bl, map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR, skill_get_splash(skillid, skilllv), BL_CHAR,
src,skillid,skilllv,tick, flag|BCT_ENEMY|1, src, skillid, skilllv, tick, flag|BCT_ENEMY|1,
skill_castend_damage_id); skill_castend_damage_id);
//Skill-attack at the end in case it has knockback. [Skotlex]
skill_attack(skill_get_type(skillid),src,src,bl,skillid,skilllv,tick,0);
} }
break; break;
case AS_SPLASHER:
if (flag & 1) { //Invoked from map_foreachinarea, skill_area_temp[0] holds number of targets to divide damage by.
if (bl->id != skill_area_temp[0])
skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, 1);
} else {
skill_area_temp[0] = bl->id;
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
src, skillid, skilllv, tick, BCT_ENEMY|1,
skill_castend_damage_id);
skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, 0);
}
break;
case SM_MAGNUM: case SM_MAGNUM:
if(flag&1) if(flag&1)
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
@ -3020,56 +3023,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, flag); skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, flag);
break; break;
case MG_NAPALMBEAT:
case MG_FIREBALL:
if (flag & 1) {
if (bl->id == skill_area_temp[1])
break;
if(skillid == MG_FIREBALL) //Store distance.
skill_area_temp[0] = distance_blxy(bl, skill_area_temp[2], skill_area_temp[3]);
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick, skill_area_temp[0]| 0x0500);
} else {
skill_area_temp[0]=0;
skill_area_temp[1]=bl->id;
switch (skillid) {
case MG_NAPALMBEAT:
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv),BL_CHAR,
src,skillid,skilllv,tick,flag|BCT_ENEMY,
skill_area_sub_count);
break;
case MG_FIREBALL:
skill_area_temp[2]=bl->x;
skill_area_temp[3]=bl->y;
break;
}
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick, skill_area_temp[0]);
map_foreachinrange(skill_area_sub,bl,
skill_get_splash(skillid, skilllv),BL_CHAR,
src,skillid,skilllv,tick, flag|BCT_ENEMY|1,
skill_castend_damage_id);
}
break;
case HW_NAPALMVULCAN: // Fixed By SteelViruZ
if (flag & 1) {
if (bl->id != skill_area_temp[1])
skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, skill_area_temp[0]);
} else {
skill_area_temp[0] = 0;
skill_area_temp[1] = bl->id;
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
src, skillid, skilllv, tick, flag|BCT_ENEMY,
skill_area_sub_count);
skill_attack(BF_MAGIC, src, src, bl, skillid, skilllv, tick, skill_area_temp[0]);
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
src, skillid, skilllv, tick, flag|BCT_ENEMY|1,
skill_castend_damage_id);
}
break;
case SL_STIN: case SL_STIN:
case SL_STUN: case SL_STUN:
case SL_SMA: case SL_SMA:
@ -3080,22 +3033,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
} }
skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag); skill_attack(BF_MAGIC,src,src,bl,skillid,skilllv,tick,flag);
break; break;
case HT_BLITZBEAT:
if (flag & 1) { //Invoked from map_foreachinarea, skill_area_temp[0] holds number of targets to divide damage by.
skill_attack(BF_MISC, src, src, bl, skillid, skilllv, tick, skill_area_temp[0]);
} else {
skill_area_temp[0] = 0;
if (flag & 0xf00000) //Warning, 0x100000 is currently BCT_NEUTRAL, so don't mix it when asking for the enemy. [Skotlex]
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
src, skillid, skilllv, tick, BCT_ENEMY, skill_area_sub_count);
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
src, skillid, skilllv, tick, BCT_ENEMY|1,
skill_castend_damage_id);
}
break;
case NPC_DARKBREATH: case NPC_DARKBREATH:
clif_emotion(src,7); clif_emotion(src,7);
@ -3162,33 +3099,18 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, int
skill_castend_damage_id); skill_castend_damage_id);
} }
break; break;
case NJ_HUUMA:
if (flag & 1) {
skill_attack(BF_WEAPON, src, src, bl, skillid, skilllv, tick, skill_area_temp[0]);
} else {
skill_area_temp[0] = 0;
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
src, skillid, skilllv, tick, flag|BCT_ENEMY,
skill_area_sub_count);
map_foreachinrange(skill_area_sub, bl,
skill_get_splash(skillid, skilllv), BL_CHAR,
src, skillid, skilllv, tick, flag|BCT_ENEMY|1,
skill_castend_damage_id);
}
break;
case NJ_KASUMIKIRI: case NJ_KASUMIKIRI:
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
sc_start(src,SC_HIDING,100,skilllv,skill_get_time(skillid,skilllv)); sc_start(src,SC_HIDING,100,skilllv,skill_get_time(skillid,skilllv));
break; break;
case NJ_KIRIKAGE: case NJ_KIRIKAGE:
status_change_end(src, SC_HIDING, -1); {
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag); int dir = map_calc_dir(src,bl->x,bl->y);
if (unit_movepos(src, bl->x, bl->y, 0, 0)) status_change_end(src, SC_HIDING, -1);
{ //FIXME: Why are you sending a packet to LIE about where the character is? skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
//If you want to place yourself adjacent to the target, do the proper coding..? if (unit_movepos(src, bl->x - dirx[dir], bl->y - diry[dir], 0, 0)) // fixed... sorry for this o_O
int dir = unit_getdir(src); clif_slide(src,bl->x - dirx[dir],bl->y - diry[dir]);
clif_slide(src,src->x - dirx[dir],src->y - diry[dir]);
} }
break; break;
case NJ_ISSEN: case NJ_ISSEN:
@ -4065,6 +3987,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
skill_castend_damage_id); skill_castend_damage_id);
break; break;
case NJ_HYOUSYOURAKU:
case NJ_RAIGEKISAI:
clif_skill_nodamage(src,bl,skillid,skilllv,1);
case WZ_FROSTNOVA: case WZ_FROSTNOVA:
map_foreachinrange(skill_attack_area, src, map_foreachinrange(skill_attack_area, src,
skill_get_splash(skillid, skilllv), BL_CHAR, skill_get_splash(skillid, skilllv), BL_CHAR,
@ -6706,7 +6631,7 @@ struct skill_unit_group *skill_unitsetting (struct block_list *src, int skillid,
if (sd) val1 = sd->status.child; if (sd) val1 = sd->status.child;
break; break;
case NJ_KAENSIN: case NJ_KAENSIN:
skill_clear_group(src, 4); //Delete previous Kaensins skill_clear_group(src, 1); //Delete previous Kaensins
val2 = (skilllv+1)/2 + 4; val2 = (skilllv+1)/2 + 4;
break; break;
@ -7231,6 +7156,17 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
} }
case UNT_TATAMIGAESHI: case UNT_TATAMIGAESHI:
{
struct skill_unit_group *sug; // better name needed :D
if ( (sug = map_find_skill_unit_oncell(bl,bl->x,bl->y,NJ_TATAMIGAESHI,NULL)->group) != NULL )
{
if ( DIFF_TICK(gettick(), sug->tick) <= skill_get_time2(sg->skill_id, sg->skill_lv) )
skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
}
break;
}
case UNT_DEMONSTRATION: case UNT_DEMONSTRATION:
skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0); skill_attack(BF_WEAPON,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
break; break;
@ -9207,11 +9143,8 @@ int skill_clear_group (struct block_list *bl, int flag)
case SA_VIOLENTGALE: case SA_VIOLENTGALE:
case SA_LANDPROTECTOR: case SA_LANDPROTECTOR:
case NJ_SUITON: case NJ_SUITON:
if (flag&1)
group[count++]= ud->skillunit[i];
break;
case NJ_KAENSIN: case NJ_KAENSIN:
if (flag&4) if (flag&1)
group[count++]= ud->skillunit[i]; group[count++]= ud->skillunit[i];
break; break;
default: default:
@ -9322,11 +9255,15 @@ int skill_landprotector (struct block_list *bl, va_list ap)
case SA_VOLCANO: case SA_VOLCANO:
case SA_DELUGE: case SA_DELUGE:
case SA_VIOLENTGALE: case SA_VIOLENTGALE:
case NJ_SUITON:
case NJ_KAENSIN:
switch (unit->group->skill_id) switch (unit->group->skill_id)
{ //These override each other. { //These override each other.
case SA_VOLCANO: case SA_VOLCANO:
case SA_DELUGE: case SA_DELUGE:
case SA_VIOLENTGALE: case SA_VIOLENTGALE:
case NJ_SUITON:
case NJ_KAENSIN:
(*alive) = 0; (*alive) = 0;
return 1; return 1;
} }
@ -10856,6 +10793,15 @@ void skill_init_unit_layout (void)
memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy)); memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
break; break;
} }
case NJ_KAENSIN:
{
static const int dx[] = {-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,};
static const int dy[] = { 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 0, 0, 0, 0,-1,-1,-1,-1,-1,-2,-2,-2,-2,-2,};
skill_unit_layout[pos].count = 24;
memcpy(skill_unit_layout[pos].dx,dx,sizeof(dx));
memcpy(skill_unit_layout[pos].dy,dy,sizeof(dy));
break;
}
case NJ_TATAMIGAESHI: case NJ_TATAMIGAESHI:
{ {
//Level 1 (count 4, cross of 3x3) //Level 1 (count 4, cross of 3x3)

View File

@ -23,7 +23,8 @@
//Constants to identify a skill's nk value. //Constants to identify a skill's nk value.
//The NK value applies only to non INF_GROUND_SKILL skills. //The NK value applies only to non INF_GROUND_SKILL skills.
#define NK_NO_DAMAGE 0x1 #define NK_NO_DAMAGE 0x1
#define NK_SPLASH 0x2 #define NK_SPLASH (0x2|0x4) // 0x4 = splash & split
#define NK_SPLASHSPLIT 0x4
//A skill with 3 would be no damage + splash: area of effect. //A skill with 3 would be no damage + splash: area of effect.
//Constants to identify a skill's inf2 value. //Constants to identify a skill's inf2 value.
#define INF2_QUEST_SKILL 1 #define INF2_QUEST_SKILL 1
@ -938,9 +939,9 @@ enum {
UNT_SPIDERWEB, UNT_SPIDERWEB,
UNT_GRAVITATION, UNT_GRAVITATION,
UNT_HERMODE, UNT_HERMODE,
UNT_TATAMIGAESHI, //0xba //Temporary setting until correct value is found. UNT_DESPERADO, //0xba //Temporary setting until correct value is found.
UNT_SUITON = 0xbb, UNT_SUITON = 0xbb,
UNT_DESPERADO, //NJ_TATAMIGAESHI is 0xbc as well? UNT_TATAMIGAESHI,
UNT_KAENSIN, UNT_KAENSIN,
//0xbe, 0xc0, 0xc1 //Maybe the other elements of Ground Drift? //0xbe, 0xc0, 0xc1 //Maybe the other elements of Ground Drift?
UNT_GROUNDDRIFT = 0xc2, UNT_GROUNDDRIFT = 0xc2,

View File

@ -357,7 +357,7 @@ void initChangeTables(void) {
add_sc(NJ_HYOUSYOURAKU, SC_FREEZE); add_sc(NJ_HYOUSYOURAKU, SC_FREEZE);
set_sc(NJ_NEN, SC_NEN, SI_NEN, SCB_STR|SCB_INT); set_sc(NJ_NEN, SC_NEN, SI_NEN, SCB_STR|SCB_INT);
set_sc(NJ_UTSUSEMI, SC_UTSUSEMI, SI_UTSUSEMI,SCB_NONE); set_sc(NJ_UTSUSEMI, SC_UTSUSEMI, SI_UTSUSEMI,SCB_NONE);
set_sc(NJ_BUNSINJYUTSU, SC_BUNSINJYUTSU, SI_BLANK, SCB_NONE); set_sc(NJ_BUNSINJYUTSU, SC_BUNSINJYUTSU, SI_BUNSINJYUTSU, SCB_NONE);
set_sc(CR_SHRINK, SC_SHRINK, SI_SHRINK, SCB_NONE); set_sc(CR_SHRINK, SC_SHRINK, SI_SHRINK, SCB_NONE);
set_sc(RG_CLOSECONFINE, SC_CLOSECONFINE2, SI_CLOSECONFINE2, SCB_NONE); set_sc(RG_CLOSECONFINE, SC_CLOSECONFINE2, SI_CLOSECONFINE2, SCB_NONE);
set_sc(RG_CLOSECONFINE, SC_CLOSECONFINE, SI_CLOSECONFINE, SCB_FLEE); set_sc(RG_CLOSECONFINE, SC_CLOSECONFINE, SI_CLOSECONFINE, SCB_FLEE);

View File

@ -395,7 +395,7 @@ enum {
SI_GATLINGFEVER = 204, SI_GATLINGFEVER = 204,
SI_TKREST = 205, // 205 = Gloria again (but TK- Happy State looks like it) SI_TKREST = 205, // 205 = Gloria again (but TK- Happy State looks like it)
SI_UTSUSEMI = 206, SI_UTSUSEMI = 206,
// 207 = crash (corresponds to SI_BUNSINJYUTSU). Must be fixed. SI_BUNSINJYUTSU = 207,
SI_NEN = 208, SI_NEN = 208,
SI_ADJUSTMENT = 209, SI_ADJUSTMENT = 209,
SI_ACCURACY = 210 SI_ACCURACY = 210