Added Ranger Camouflage official behavior
Updated Basilica to finally act more official - Related to bugreport:171 Small restructure of disabling skill checks - Fixes bugreport:7411 and bugreport:7577 Updated 3rd class weight limit bonuses to official (thanks Baalberith) - Fixes bugreport:7019 Some skill tree cleanup as ALL_INCCARRY and ALL_BUYING_STORE aren't necessary anymore Fixed Hanbok and Reins of Mount issue in newer clients (aleos) - Fixes bugreport:12622 Some small fixes to the MVP Arena script (aleos) - Fixes bugreport:7592 Fixed standard channels being removed (lighta) - Fixes bugreport:7590 Fixed some compiler warnings (lighta) - Fixes bugreport:7589 Attempt to fix disappearing carts on reboot (lighta) - Concerning bugreport:7591 git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17292 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
e39d49a6d2
commit
01b8e76e23
@ -105,6 +105,10 @@ xmas_ignorepalette: no
|
|||||||
// Set this to yes if your cloth palettes pack doesn't has Summer palettes (or has less than the other jobs)
|
// Set this to yes if your cloth palettes pack doesn't has Summer palettes (or has less than the other jobs)
|
||||||
summer_ignorepalette: no
|
summer_ignorepalette: no
|
||||||
|
|
||||||
|
// Do not display cloth colors for the Hanbok class?
|
||||||
|
// Set this to yes if your cloth palettes pack doesn't has Hanbok palettes (or has less than the other jobs)
|
||||||
|
hanbok_ignorepalette: no
|
||||||
|
|
||||||
// Set this to 1 if your clients have langtype problems and can't display motd properly
|
// Set this to 1 if your clients have langtype problems and can't display motd properly
|
||||||
motd_type: 0
|
motd_type: 0
|
||||||
|
|
||||||
|
@ -112,7 +112,8 @@
|
|||||||
102: Expanded Super Baby
|
102: Expanded Super Baby
|
||||||
103: Kagerou
|
103: Kagerou
|
||||||
104: Oboro
|
104: Oboro
|
||||||
105: Unknown Job
|
105: Hanbok
|
||||||
|
106: Unknown Job
|
||||||
|
|
||||||
//Auction
|
//Auction
|
||||||
200: Auction Manager
|
200: Auction Manager
|
||||||
|
@ -304,6 +304,7 @@ Option_Summer 0x40000
|
|||||||
Option_Wug 0x100000
|
Option_Wug 0x100000
|
||||||
Option_Wugrider 0x200000
|
Option_Wugrider 0x200000
|
||||||
Option_Hanbok 0x8000000
|
Option_Hanbok 0x8000000
|
||||||
|
Option_Mounting 0x10000000
|
||||||
|
|
||||||
bc_all 0
|
bc_all 0
|
||||||
bc_map 1
|
bc_map 1
|
||||||
@ -1288,6 +1289,8 @@ SC_MAGMA_FLOW 548
|
|||||||
SC_PYROCLASTIC 549
|
SC_PYROCLASTIC 549
|
||||||
SC_PARALYSIS 550
|
SC_PARALYSIS 550
|
||||||
SC_PAIN_KILLER 551
|
SC_PAIN_KILLER 551
|
||||||
|
SC_EXTREMITYFIST2 552
|
||||||
|
SC_HANBOK 553
|
||||||
|
|
||||||
e_gasp 0
|
e_gasp 0
|
||||||
e_what 1
|
e_what 1
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -160,73 +160,73 @@
|
|||||||
// Dark Collector
|
// Dark Collector
|
||||||
4052, 24000,75 ,500 ,700 ,450 ,525 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625, 0
|
4052, 24000,75 ,500 ,700 ,450 ,525 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,625 ,2000 ,2000 ,2000 ,2000 ,550 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 625, 0
|
||||||
// Rune Knight (Regular)
|
// Rune Knight (Regular)
|
||||||
4054, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4054, 35000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Warlock (Regular)
|
// Warlock (Regular)
|
||||||
4055, 24000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
|
4055, 30000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
|
||||||
// Ranger (Regular)
|
// Ranger (Regular)
|
||||||
4056, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
|
4056, 32000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
|
||||||
// Arch Bishop (Regular)
|
// Arch Bishop (Regular)
|
||||||
4057, 26000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
|
4057, 30000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
|
||||||
// Mechanic (Regular)
|
// Mechanic (Regular)
|
||||||
4058, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
4058, 38000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||||
// Guillotine Cross (Regular)
|
// Guillotine Cross (Regular)
|
||||||
4059, 24000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
4059, 32000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||||
// Rune Knight (Trans)
|
// Rune Knight (Trans)
|
||||||
4060, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4060, 35000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Warlock (Trans)
|
// Warlock (Trans)
|
||||||
4061, 24000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
|
4061, 30000,55 ,500 ,900 ,490 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,540
|
||||||
// Ranger (Trans)
|
// Ranger (Trans)
|
||||||
4062, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
|
4062, 32000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
|
||||||
// Arch Bishop (Trans)
|
// Arch Bishop (Trans)
|
||||||
4063, 26000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
|
4063, 30000,75 ,500 ,800 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,440 ,2000 ,640 ,2000 ,540 ,2000 ,2000 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590 ,540
|
||||||
// Mechanic (Trans)
|
// Mechanic (Trans)
|
||||||
4064, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
4064, 38000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||||
// Guillotine Cross (Trans)
|
// Guillotine Cross (Trans)
|
||||||
4065, 24000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
4065, 32000,110 ,500 ,400 ,440 ,460 ,690 ,2000 ,2000 ,2000 ,840 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,460 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530
|
||||||
// Royal Guard (Regular)
|
// Royal Guard (Regular)
|
||||||
4066, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4066, 35000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Sorcerer (Regular)
|
// Sorcerer (Regular)
|
||||||
4067, 24000,75 ,500 ,700 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490
|
4067, 30000,75 ,500 ,700 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490
|
||||||
// Minstrel (Regular)
|
// Minstrel (Regular)
|
||||||
4068, 27000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
4068, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||||
// Wanderer (Regular)
|
// Wanderer (Regular)
|
||||||
4069, 27000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
4069, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||||
// Sura (Regular)
|
// Sura (Regular)
|
||||||
4070, 26000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
|
4070, 30000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
|
||||||
// Genetic (Regular)
|
// Genetic (Regular)
|
||||||
4071, 30000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
4071, 32000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
||||||
// Shadow Chaser (Regular)
|
// Shadow Chaser (Regular)
|
||||||
4072, 24000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4072, 28000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Royal Guard (Trans)
|
// Royal Guard (Trans)
|
||||||
4073, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4073, 35000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Sorcerer (Trans)
|
// Sorcerer (Trans)
|
||||||
4074, 24000,75 ,500 ,700 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490
|
4074, 30000,75 ,500 ,700 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490 ,490
|
||||||
// Minstrel (Trans)
|
// Minstrel (Trans)
|
||||||
4075, 27000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
4075, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||||
// Wanderer (Trans)
|
// Wanderer (Trans)
|
||||||
4076, 27000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
4076, 32000,75 ,300 ,600 ,440 ,560 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,2000 ,2000 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,510
|
||||||
// Sura (Trans)
|
// Sura (Trans)
|
||||||
4077, 26000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
|
4077, 30000,90 ,650 ,470 ,420 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,470 ,470 ,520 ,2000 ,430 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,540 ,470
|
||||||
// Genetic (Trans)
|
// Genetic (Trans)
|
||||||
4078, 30000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
4078, 32000,90 ,500 ,400 ,440 ,540 ,480 ,2000 ,2000 ,2000 ,550 ,550 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480
|
||||||
// Shadow Chaser (Trans)
|
// Shadow Chaser (Trans)
|
||||||
4079, 24000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4079, 28000,85 ,500 ,500 ,440 ,470 ,510 ,2000 ,2000 ,2000 ,2030 ,2000 ,2000 ,2000 ,2000 ,510 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Rune Knight (Dragon) (Regular)
|
// Rune Knight (Dragon) (Regular)
|
||||||
4080, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4080, 35000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Rune Knight (Dragon) (Trans)
|
// Rune Knight (Dragon) (Trans)
|
||||||
4081, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4081, 35000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Royal Guard (Gryphon) (Regular)
|
// Royal Guard (Gryphon) (Regular)
|
||||||
4082, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4082, 35000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Royal Guard (Gryphon) (Trans)
|
// Royal Guard (Gryphon) (Trans)
|
||||||
4083, 28000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4083, 35000,110 ,700 ,470 ,440 ,510 ,490 ,530 ,540 ,540 ,520 ,560 ,480 ,480 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Ranger (Warg) (Regular)
|
// Ranger (Warg) (Regular)
|
||||||
4084, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
|
4084, 32000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
|
||||||
// Ranger (Warg) (Trans)
|
// Ranger (Warg) (Trans)
|
||||||
4085, 27000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
|
4085, 32000,85 ,500 ,400 ,440 ,540 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,530 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520
|
||||||
// Mechanic (Mado) (Regular)
|
// Mechanic (Mado) (Regular)
|
||||||
4086, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
4086, 38000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||||
// Mechanic (Mado) (Trans)
|
// Mechanic (Mado) (Trans)
|
||||||
4087, 30000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
4087, 38000,90 ,500 ,400 ,440 ,640 ,690 ,2000 ,2000 ,2000 ,490 ,520 ,520 ,520 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,500
|
||||||
// Baby Rune Knight
|
// Baby Rune Knight
|
||||||
4096, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
4096, 28000,150 ,500 ,300 ,440 ,540 ,560 ,590 ,620 ,560 ,620 ,640 ,490 ,490 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,490
|
||||||
// Baby Warlock
|
// Baby Warlock
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -833,7 +833,7 @@ Resets a Star Gladiator's marked maps.
|
|||||||
|
|
||||||
Changes your job.
|
Changes your job.
|
||||||
If no job is given, a list of all available jobs will be returned.
|
If no job is given, a list of all available jobs will be returned.
|
||||||
Note that jobs 22 (Wedding), 26 (Summer), and 27 (Christmas) are not available via @job.
|
Note that jobs 22 (Wedding), 26 (Summer), 27 (Christmas), and 28 (Hanbok) are not available via @job.
|
||||||
|
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
|
@ -76,14 +76,14 @@ function script Protector {
|
|||||||
switch(select(""+((getarg(0)=="")?"":"Harder Monsters")+":Heal:Exit")) {
|
switch(select(""+((getarg(0)=="")?"":"Harder Monsters")+":Heal:Exit")) {
|
||||||
case 1:
|
case 1:
|
||||||
warp getarg(0),102,102;
|
warp getarg(0),102,102;
|
||||||
close;
|
end;
|
||||||
case 2:
|
case 2:
|
||||||
specialeffect2 313;
|
specialeffect2 313;
|
||||||
percentheal 100,100;
|
percentheal 100,100;
|
||||||
close;
|
end;
|
||||||
case 3:
|
case 3:
|
||||||
warp "prontera",156,179;
|
warp "prontera",156,179;
|
||||||
close;
|
end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pvp_n_1-2,100,100,4 script MVP-Protector#01 727,{ callfunc "Protector","pvp_n_2-2"; }
|
pvp_n_1-2,100,100,4 script MVP-Protector#01 727,{ callfunc "Protector","pvp_n_2-2"; }
|
||||||
|
@ -111,6 +111,9 @@ const char* job_name(int class_) {
|
|||||||
case JOB_SUMMER:
|
case JOB_SUMMER:
|
||||||
return msg_txt(71);
|
return msg_txt(71);
|
||||||
|
|
||||||
|
case JOB_HANBOK:
|
||||||
|
return msg_txt(105);
|
||||||
|
|
||||||
case JOB_NOVICE_HIGH:
|
case JOB_NOVICE_HIGH:
|
||||||
case JOB_SWORDMAN_HIGH:
|
case JOB_SWORDMAN_HIGH:
|
||||||
case JOB_MAGE_HIGH:
|
case JOB_MAGE_HIGH:
|
||||||
@ -277,7 +280,7 @@ const char* job_name(int class_) {
|
|||||||
return msg_txt(103 - JOB_KAGEROU+class_);
|
return msg_txt(103 - JOB_KAGEROU+class_);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return msg_txt(105);
|
return msg_txt(106);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5598,7 +5598,6 @@ ACMD_FUNC(changelook)
|
|||||||
* Turns on/off Autotrade for a specific player
|
* Turns on/off Autotrade for a specific player
|
||||||
*------------------------------------------*/
|
*------------------------------------------*/
|
||||||
ACMD_FUNC(autotrade) {
|
ACMD_FUNC(autotrade) {
|
||||||
int i;
|
|
||||||
nullpo_retr(-1, sd);
|
nullpo_retr(-1, sd);
|
||||||
|
|
||||||
if( map[sd->bl.m].flag.autotrade != battle_config.autotrade_mapflag ) {
|
if( map[sd->bl.m].flag.autotrade != battle_config.autotrade_mapflag ) {
|
||||||
@ -8763,7 +8762,6 @@ ACMD_FUNC(cart) {
|
|||||||
|
|
||||||
/* Channel System [Ind] */
|
/* Channel System [Ind] */
|
||||||
ACMD_FUNC(join){
|
ACMD_FUNC(join){
|
||||||
struct Channel *channel;
|
|
||||||
char chname[CHAN_NAME_LENGTH], pass[CHAN_NAME_LENGTH];
|
char chname[CHAN_NAME_LENGTH], pass[CHAN_NAME_LENGTH];
|
||||||
|
|
||||||
if( !message || !*message || sscanf(message, "%s %s", chname, pass) < 1 ) {
|
if( !message || !*message || sscanf(message, "%s %s", chname, pass) < 1 ) {
|
||||||
|
@ -5677,6 +5677,7 @@ static const struct _battle_data {
|
|||||||
{ "wedding_ignorepalette", &battle_config.wedding_ignorepalette, 0, 0, 1, },
|
{ "wedding_ignorepalette", &battle_config.wedding_ignorepalette, 0, 0, 1, },
|
||||||
{ "xmas_ignorepalette", &battle_config.xmas_ignorepalette, 0, 0, 1, },
|
{ "xmas_ignorepalette", &battle_config.xmas_ignorepalette, 0, 0, 1, },
|
||||||
{ "summer_ignorepalette", &battle_config.summer_ignorepalette, 0, 0, 1, },
|
{ "summer_ignorepalette", &battle_config.summer_ignorepalette, 0, 0, 1, },
|
||||||
|
{ "hanbok_ignorepalette", &battle_config.hanbok_ignorepalette, 0, 0, 1, },
|
||||||
{ "natural_healhp_interval", &battle_config.natural_healhp_interval, 6000, NATURAL_HEAL_INTERVAL, INT_MAX, },
|
{ "natural_healhp_interval", &battle_config.natural_healhp_interval, 6000, NATURAL_HEAL_INTERVAL, INT_MAX, },
|
||||||
{ "natural_healsp_interval", &battle_config.natural_healsp_interval, 8000, NATURAL_HEAL_INTERVAL, INT_MAX, },
|
{ "natural_healsp_interval", &battle_config.natural_healsp_interval, 8000, NATURAL_HEAL_INTERVAL, INT_MAX, },
|
||||||
{ "natural_heal_skill_interval", &battle_config.natural_heal_skill_interval, 10000, NATURAL_HEAL_INTERVAL, INT_MAX, },
|
{ "natural_heal_skill_interval", &battle_config.natural_heal_skill_interval, 10000, NATURAL_HEAL_INTERVAL, INT_MAX, },
|
||||||
|
@ -220,6 +220,7 @@ extern struct Battle_Config
|
|||||||
int wedding_ignorepalette; //[Skotlex]
|
int wedding_ignorepalette; //[Skotlex]
|
||||||
int xmas_ignorepalette; // [Valaris]
|
int xmas_ignorepalette; // [Valaris]
|
||||||
int summer_ignorepalette; // [Zephyrus]
|
int summer_ignorepalette; // [Zephyrus]
|
||||||
|
int hanbok_ignorepalette;
|
||||||
int natural_healhp_interval;
|
int natural_healhp_interval;
|
||||||
int natural_healsp_interval;
|
int natural_healsp_interval;
|
||||||
int natural_heal_skill_interval;
|
int natural_heal_skill_interval;
|
||||||
|
@ -264,7 +264,7 @@ int channel_clean(struct Channel *channel, struct map_session_data *sd, int flag
|
|||||||
}
|
}
|
||||||
|
|
||||||
idb_remove(channel->users,sd->status.char_id); //remove user for channel user list
|
idb_remove(channel->users,sd->status.char_id); //remove user for channel user list
|
||||||
if( !db_size(channel->users) && !(flag&1) )
|
if( !db_size(channel->users) && !(flag&1) && channel->type != CHAN_TYPE_PUBLIC )
|
||||||
channel_delete(channel);
|
channel_delete(channel);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -1145,7 +1145,6 @@ int do_init_channel(void) {
|
|||||||
void do_final_channel(void) {
|
void do_final_channel(void) {
|
||||||
DBIterator *iter;
|
DBIterator *iter;
|
||||||
struct Channel *channel;
|
struct Channel *channel;
|
||||||
struct guild *g;
|
|
||||||
int i=0;
|
int i=0;
|
||||||
|
|
||||||
//delete all in remaining chan db
|
//delete all in remaining chan db
|
||||||
|
@ -844,7 +844,7 @@ void clif_clearunit_delayed(struct block_list* bl, clr_type type, unsigned int t
|
|||||||
|
|
||||||
void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, unsigned short *lhand)
|
void clif_get_weapon_view(struct map_session_data* sd, unsigned short *rhand, unsigned short *lhand)
|
||||||
{
|
{
|
||||||
if(sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER))
|
if(sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK))
|
||||||
{
|
{
|
||||||
*rhand = *lhand = 0;
|
*rhand = *lhand = 0;
|
||||||
return;
|
return;
|
||||||
@ -2984,12 +2984,13 @@ void clif_changelook(struct block_list *bl,int type,int val)
|
|||||||
break;
|
break;
|
||||||
case LOOK_BASE:
|
case LOOK_BASE:
|
||||||
vd->class_ = val;
|
vd->class_ = val;
|
||||||
if (vd->class_ == JOB_WEDDING || vd->class_ == JOB_XMAS || vd->class_ == JOB_SUMMER)
|
if (vd->class_ == JOB_WEDDING || vd->class_ == JOB_XMAS || vd->class_ == JOB_SUMMER || vd->class_ == JOB_HANBOK)
|
||||||
vd->weapon = vd->shield = 0;
|
vd->weapon = vd->shield = 0;
|
||||||
if (vd->cloth_color && (
|
if (vd->cloth_color && (
|
||||||
(vd->class_ == JOB_WEDDING && battle_config.wedding_ignorepalette) ||
|
(vd->class_ == JOB_WEDDING && battle_config.wedding_ignorepalette) ||
|
||||||
(vd->class_ == JOB_XMAS && battle_config.xmas_ignorepalette) ||
|
(vd->class_ == JOB_XMAS && battle_config.xmas_ignorepalette) ||
|
||||||
(vd->class_ == JOB_SUMMER && battle_config.summer_ignorepalette)
|
(vd->class_ == JOB_SUMMER && battle_config.summer_ignorepalette) ||
|
||||||
|
(vd->class_ == JOB_HANBOK && battle_config.hanbok_ignorepalette)
|
||||||
))
|
))
|
||||||
clif_changelook(bl,LOOK_CLOTHES_COLOR,0);
|
clif_changelook(bl,LOOK_CLOTHES_COLOR,0);
|
||||||
break;
|
break;
|
||||||
@ -3012,7 +3013,8 @@ void clif_changelook(struct block_list *bl,int type,int val)
|
|||||||
if (val && (
|
if (val && (
|
||||||
(vd->class_ == JOB_WEDDING && battle_config.wedding_ignorepalette) ||
|
(vd->class_ == JOB_WEDDING && battle_config.wedding_ignorepalette) ||
|
||||||
(vd->class_ == JOB_XMAS && battle_config.xmas_ignorepalette) ||
|
(vd->class_ == JOB_XMAS && battle_config.xmas_ignorepalette) ||
|
||||||
(vd->class_ == JOB_SUMMER && battle_config.summer_ignorepalette)
|
(vd->class_ == JOB_SUMMER && battle_config.summer_ignorepalette) ||
|
||||||
|
(vd->class_ == JOB_HANBOK && battle_config.hanbok_ignorepalette)
|
||||||
))
|
))
|
||||||
val = 0;
|
val = 0;
|
||||||
vd->cloth_color = val;
|
vd->cloth_color = val;
|
||||||
@ -9806,7 +9808,7 @@ void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type,
|
|||||||
if( pc_cant_act(sd) || sd->sc.option&OPTION_HIDE )
|
if( pc_cant_act(sd) || sd->sc.option&OPTION_HIDE )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER) )
|
if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( sd->sc.data[SC_BASILICA] || sd->sc.data[SC__SHADOWFORM] )
|
if( sd->sc.data[SC_BASILICA] || sd->sc.data[SC__SHADOWFORM] )
|
||||||
@ -10799,7 +10801,7 @@ void clif_parse_UseSkillToId(int fd, struct map_session_data *sd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER) )
|
if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( sd->sc.data[SC_BASILICA] && (skill_id != HP_BASILICA || sd->sc.data[SC_BASILICA]->val4 != sd->bl.id) )
|
if( sd->sc.data[SC_BASILICA] && (skill_id != HP_BASILICA || sd->sc.data[SC_BASILICA]->val4 != sd->bl.id) )
|
||||||
@ -10883,7 +10885,7 @@ static void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER) )
|
if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if( sd->sc.data[SC_BASILICA] && (skill_id != HP_BASILICA || sd->sc.data[SC_BASILICA]->val4 != sd->bl.id) )
|
if( sd->sc.data[SC_BASILICA] && (skill_id != HP_BASILICA || sd->sc.data[SC_BASILICA]->val4 != sd->bl.id) )
|
||||||
|
@ -7741,6 +7741,11 @@ int pc_setoption(struct map_session_data *sd,int type)
|
|||||||
else if (!(type&OPTION_SUMMER) && p_type&OPTION_SUMMER)
|
else if (!(type&OPTION_SUMMER) && p_type&OPTION_SUMMER)
|
||||||
new_look = -1;
|
new_look = -1;
|
||||||
|
|
||||||
|
if (type&OPTION_HANBOK && !(p_type&OPTION_HANBOK))
|
||||||
|
new_look = JOB_HANBOK;
|
||||||
|
else if (!(type&OPTION_HANBOK) && p_type&OPTION_HANBOK)
|
||||||
|
new_look = -1;
|
||||||
|
|
||||||
if (sd->disguise || !new_look)
|
if (sd->disguise || !new_look)
|
||||||
return 0; //Disguises break sprite changes
|
return 0; //Disguises break sprite changes
|
||||||
|
|
||||||
|
161
src/map/skill.c
161
src/map/skill.c
@ -5939,6 +5939,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
case LG_FORCEOFVANGUARD:
|
case LG_FORCEOFVANGUARD:
|
||||||
case SC_REPRODUCE:
|
case SC_REPRODUCE:
|
||||||
case SC_INVISIBILITY:
|
case SC_INVISIBILITY:
|
||||||
|
case RA_CAMOUFLAGE:
|
||||||
if (tsce) {
|
if (tsce) {
|
||||||
i = status_change_end(bl, type, INVALID_TIMER);
|
i = status_change_end(bl, type, INVALID_TIMER);
|
||||||
if( i )
|
if( i )
|
||||||
@ -5948,7 +5949,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
|||||||
map_freeblock_unlock();
|
map_freeblock_unlock();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
case RA_CAMOUFLAGE:
|
|
||||||
i = sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
|
i = sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
|
||||||
if( i )
|
if( i )
|
||||||
clif_skill_nodamage(src,bl,skill_id,( skill_id == LG_FORCEOFVANGUARD ) ? skill_lv : -1,i);
|
clif_skill_nodamage(src,bl,skill_id,( skill_id == LG_FORCEOFVANGUARD ) ? skill_lv : -1,i);
|
||||||
@ -9989,13 +9989,13 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
|||||||
flag|=1;
|
flag|=1;
|
||||||
break;
|
break;
|
||||||
case HP_BASILICA:
|
case HP_BASILICA:
|
||||||
if( sc->data[SC_BASILICA] )
|
if( sc->data[SC_BASILICA] ) {
|
||||||
status_change_end(src, SC_BASILICA, INVALID_TIMER); // Cancel Basilica
|
status_change_end(src, SC_BASILICA, INVALID_TIMER); // Cancel Basilica and return so requirement isn't consumed again
|
||||||
else { // Create Basilica. Start SC on caster. Unit timer start SC on others.
|
return 0;
|
||||||
if( map_foreachinrange(skill_count_wos, src, 2, BL_MOB|BL_PC, src) ) {
|
} else { // Create Basilica. Start SC on caster. Unit timer start SC on others.
|
||||||
if( sd )
|
if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) {
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
skill_clear_unitgroup(src);
|
skill_clear_unitgroup(src);
|
||||||
if( skill_unitsetting(src,skill_id,skill_lv,x,y,0) )
|
if( skill_unitsetting(src,skill_id,skill_lv,x,y,0) )
|
||||||
@ -11244,6 +11244,9 @@ static int skill_unit_onplace (struct skill_unit *src, struct block_list *bl, un
|
|||||||
if( skill_get_type(sg->skill_id) == BF_MAGIC && map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR) && sg->skill_id != SA_LANDPROTECTOR )
|
if( skill_get_type(sg->skill_id) == BF_MAGIC && map_getcell(bl->m, bl->x, bl->y, CELL_CHKLANDPROTECTOR) && sg->skill_id != SA_LANDPROTECTOR )
|
||||||
return 0; //AoE skills are ineffective. [Skotlex]
|
return 0; //AoE skills are ineffective. [Skotlex]
|
||||||
|
|
||||||
|
if( skill_get_inf2(sg->skill_id)&(INF2_SONG_DANCE|INF2_ENSEMBLE_SKILL) && map_getcell(bl->m, bl->x, bl->y, CELL_CHKBASILICA) )
|
||||||
|
return 0; //Songs don't work in Basilica
|
||||||
|
|
||||||
sc = status_get_sc(bl);
|
sc = status_get_sc(bl);
|
||||||
|
|
||||||
if (sc && 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 )
|
||||||
@ -12706,14 +12709,9 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
if( sc && ( sc->data[SC__SHADOWFORM] || sc->data[SC__IGNORANCE] ) )
|
if( sc && ( sc->data[SC__SHADOWFORM] || sc->data[SC__IGNORANCE] ) )
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
switch( skill_id ) { // Turn off check.
|
//Checks if disabling skill - in which case no SP requirements are necessary
|
||||||
case BS_MAXIMIZE: case NV_TRICKDEAD: case TF_HIDING: case AS_CLOAKING: case CR_AUTOGUARD:
|
if( sc && skill_disable_check(sc,skill_id))
|
||||||
case ML_AUTOGUARD: case CR_DEFENDER: case ML_DEFENDER: case ST_CHASEWALK: case PA_GOSPEL:
|
return 1;
|
||||||
case CR_SHRINK: case TK_RUN: case GS_GATLINGFEVER: case TK_READYCOUNTER: case TK_READYDOWN:
|
|
||||||
case TK_READYSTORM: case TK_READYTURN: case SG_FUSION: case RA_WUGDASH: case KO_YAMIKUMO:
|
|
||||||
if( sc && sc->data[status_skill2sc(skill_id)] )
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check the skills that can be used while mounted on a warg
|
// Check the skills that can be used while mounted on a warg
|
||||||
if( pc_isridingwug(sd) ) {
|
if( pc_isridingwug(sd) ) {
|
||||||
@ -12762,7 +12760,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(inf2&INF2_ENSEMBLE_SKILL){
|
else if(inf2&INF2_ENSEMBLE_SKILL) {
|
||||||
if (skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 1) {
|
if (skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 1) {
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
@ -12771,7 +12769,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
// perform skill-specific checks (and actions)
|
// perform skill-specific checks (and actions)
|
||||||
switch( skill_id ) {
|
switch( skill_id ) {
|
||||||
case SO_SPELLFIST:
|
case SO_SPELLFIST:
|
||||||
if(sd->skill_id_old != MG_FIREBOLT && sd->skill_id_old != MG_COLDBOLT && sd->skill_id_old != MG_LIGHTNINGBOLT){
|
if(sd->skill_id_old != MG_FIREBOLT && sd->skill_id_old != MG_COLDBOLT && sd->skill_id_old != MG_LIGHTNINGBOLT) {
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -12832,8 +12830,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
// return 0;
|
// return 0;
|
||||||
if( sc && (sc->data[SC_BLADESTOP] || sc->data[SC_CURSEDCIRCLE_ATKER]) )
|
if( sc && (sc->data[SC_BLADESTOP] || sc->data[SC_CURSEDCIRCLE_ATKER]) )
|
||||||
break;
|
break;
|
||||||
if( sc && sc->data[SC_COMBO] )
|
if( sc && sc->data[SC_COMBO] ) {
|
||||||
{
|
|
||||||
switch(sc->data[SC_COMBO]->val1) {
|
switch(sc->data[SC_COMBO]->val1) {
|
||||||
case MO_COMBOFINISH:
|
case MO_COMBOFINISH:
|
||||||
case CH_TIGERFIST:
|
case CH_TIGERFIST:
|
||||||
@ -12843,33 +12840,27 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if( !unit_can_move(&sd->bl) )
|
else if( !unit_can_move(&sd->bl) ) { //Placed here as ST_MOVE_ENABLE should not apply if rooted or on a combo. [Skotlex]
|
||||||
{ //Placed here as ST_MOVE_ENABLE should not apply if rooted or on a combo. [Skotlex]
|
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TK_MISSION:
|
case TK_MISSION:
|
||||||
if( (sd->class_&MAPID_UPPERMASK) != MAPID_TAEKWON )
|
if( (sd->class_&MAPID_UPPERMASK) != MAPID_TAEKWON ) { // Cannot be used by Non-Taekwon classes
|
||||||
{// Cannot be used by Non-Taekwon classes
|
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TK_READYCOUNTER:
|
case TK_READYCOUNTER:
|
||||||
case TK_READYDOWN:
|
case TK_READYDOWN:
|
||||||
case TK_READYSTORM:
|
case TK_READYSTORM:
|
||||||
case TK_READYTURN:
|
case TK_READYTURN:
|
||||||
case TK_JUMPKICK:
|
case TK_JUMPKICK:
|
||||||
if( (sd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER )
|
if( (sd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER ) { // Soul Linkers cannot use this skill
|
||||||
{// Soul Linkers cannot use this skill
|
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TK_TURNKICK:
|
case TK_TURNKICK:
|
||||||
case TK_STORMKICK:
|
case TK_STORMKICK:
|
||||||
case TK_DOWNKICK:
|
case TK_DOWNKICK:
|
||||||
@ -12894,8 +12885,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
case BD_ADAPTATION:
|
case BD_ADAPTATION:
|
||||||
{
|
{
|
||||||
int time;
|
int time;
|
||||||
if(!(sc && sc->data[SC_DANCING]))
|
if(!(sc && sc->data[SC_DANCING])) {
|
||||||
{
|
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -12910,28 +12900,22 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PR_BENEDICTIO:
|
case PR_BENEDICTIO:
|
||||||
if (skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 2)
|
if (skill_check_pc_partner(sd, skill_id, &skill_lv, 1, 0) < 2) {
|
||||||
{
|
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SL_SMA:
|
case SL_SMA:
|
||||||
if(!(sc && sc->data[SC_SMA]))
|
if(!(sc && sc->data[SC_SMA]))
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HT_POWER:
|
case HT_POWER:
|
||||||
if(!(sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == AC_DOUBLE))
|
if(!(sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == AC_DOUBLE))
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CG_HERMODE:
|
case CG_HERMODE:
|
||||||
if(!npc_check_areanpc(1,sd->bl.m,sd->bl.x,sd->bl.y,skill_get_splash(skill_id, skill_lv)))
|
if(!npc_check_areanpc(1,sd->bl.m,sd->bl.x,sd->bl.y,skill_get_splash(skill_id, skill_lv))) {
|
||||||
{
|
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -12960,10 +12944,29 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case HP_BASILICA:
|
||||||
|
if( !sc || (sc && !sc->data[SC_BASILICA])) {
|
||||||
|
if( sd ) {
|
||||||
|
int i,x,y,range = skill_get_unit_range(skill_id,skill_lv)+1;
|
||||||
|
int size = range*2+1;
|
||||||
|
for( i=0;i<size*size;i++ ) {
|
||||||
|
x = sd->bl.x+(i%size-range);
|
||||||
|
y = sd->bl.y+(i/size-range);
|
||||||
|
if( map_getcell(sd->bl.m,x,y,CELL_CHKWALL) ) {
|
||||||
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( map_foreachinrange(skill_count_wos, &sd->bl, range, BL_ALL, &sd->bl) ) {
|
||||||
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
case AM_TWILIGHT2:
|
case AM_TWILIGHT2:
|
||||||
case AM_TWILIGHT3:
|
case AM_TWILIGHT3:
|
||||||
if (!party_skill_check(sd, sd->status.party_id, skill_id, skill_lv))
|
if (!party_skill_check(sd, sd->status.party_id, skill_id, skill_lv)) {
|
||||||
{
|
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -12995,8 +12998,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
break;
|
break;
|
||||||
//Auron insists we should implement SP consumption when you are not Soul Linked. [Skotlex]
|
//Auron insists we should implement SP consumption when you are not Soul Linked. [Skotlex]
|
||||||
//Only invoke on skill begin cast (instant cast skill). [Kevin]
|
//Only invoke on skill begin cast (instant cast skill). [Kevin]
|
||||||
if( require.sp > 0 )
|
if( require.sp > 0 ) {
|
||||||
{
|
|
||||||
if (status->sp < (unsigned int)require.sp)
|
if (status->sp < (unsigned int)require.sp)
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_SP_INSUFFICIENT,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_SP_INSUFFICIENT,0);
|
||||||
else
|
else
|
||||||
@ -13022,7 +13024,6 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NJ_ISSEN:
|
case NJ_ISSEN:
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
if (status->hp < (status->hp/100)) {
|
if (status->hp < (status->hp/100)) {
|
||||||
@ -13038,7 +13039,6 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NJ_ZENYNAGE:
|
case NJ_ZENYNAGE:
|
||||||
case KO_MUCHANAGE:
|
case KO_MUCHANAGE:
|
||||||
if(sd->status.zeny < require.zeny) {
|
if(sd->status.zeny < require.zeny) {
|
||||||
@ -13057,8 +13057,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case AM_REST: //Can't vapo homun if you don't have an active homunc or it's hp is < 80%
|
case AM_REST: //Can't vapo homun if you don't have an active homunc or it's hp is < 80%
|
||||||
if (!merc_is_hom_active(sd->hd) || sd->hd->battle_status.hp < (sd->hd->battle_status.max_hp*80/100))
|
if (!merc_is_hom_active(sd->hd) || sd->hd->battle_status.hp < (sd->hd->battle_status.max_hp*80/100)) {
|
||||||
{
|
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -13095,8 +13094,8 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
* Warlock
|
* Warlock
|
||||||
**/
|
**/
|
||||||
case WL_COMET:
|
case WL_COMET:
|
||||||
if( skill_check_pc_partner(sd,skill_id,&skill_lv,1,0) <= 0 && ((i = pc_search_inventory(sd,require.itemid[0])) < 0 || sd->status.inventory[i].amount < require.amount[0]) )
|
if( skill_check_pc_partner(sd,skill_id,&skill_lv,1,0) <= 0
|
||||||
{
|
&& ((i = pc_search_inventory(sd,require.itemid[0])) < 0 || sd->status.inventory[i].amount < require.amount[0]) ) {
|
||||||
//clif_skill_fail(sd,skill_id,USESKILL_FAIL_NEED_ITEM,require.amount[0],require.itemid[0]);
|
//clif_skill_fail(sd,skill_id,USESKILL_FAIL_NEED_ITEM,require.amount[0],require.itemid[0]);
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
@ -13106,11 +13105,9 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
case WL_SUMMONBL:
|
case WL_SUMMONBL:
|
||||||
case WL_SUMMONWB:
|
case WL_SUMMONWB:
|
||||||
case WL_SUMMONSTONE:
|
case WL_SUMMONSTONE:
|
||||||
if( sc )
|
if( sc ) {
|
||||||
{
|
|
||||||
ARR_FIND(SC_SPHERE_1,SC_SPHERE_5+1,i,!sc->data[i]);
|
ARR_FIND(SC_SPHERE_1,SC_SPHERE_5+1,i,!sc->data[i]);
|
||||||
if( i == SC_SPHERE_5+1 )
|
if( i == SC_SPHERE_5+1 ) { // No more free slots
|
||||||
{ // No more free slots
|
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_SUMMON,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_SUMMON,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -13279,7 +13276,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
{
|
{
|
||||||
int ttype = skill_get_ele(skill_id, skill_lv);
|
int ttype = skill_get_ele(skill_id, skill_lv);
|
||||||
ARR_FIND(1, 5, i, sd->talisman[i] > 0 && i != ttype);
|
ARR_FIND(1, 5, i, sd->talisman[i] > 0 && i != ttype);
|
||||||
if( (i < 5 && i != ttype) || sd->talisman[ttype] >= 10 ){
|
if( (i < 5 && i != ttype) || sd->talisman[ttype] >= 10 ) {
|
||||||
clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0);
|
clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -13390,7 +13387,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ST_RIDINGWUG:
|
case ST_RIDINGWUG:
|
||||||
if( !pc_isridingwug(sd) ){
|
if( !pc_isridingwug(sd) ) {
|
||||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -13709,15 +13706,9 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16
|
|||||||
if( !sc->count )
|
if( !sc->count )
|
||||||
sc = NULL;
|
sc = NULL;
|
||||||
|
|
||||||
switch( skill_id )
|
//Checks if disabling skill - in which case no SP requirements are necessary
|
||||||
{ // Turn off check.
|
if( sc && skill_disable_check(sc,skill_id) )
|
||||||
case BS_MAXIMIZE: case NV_TRICKDEAD: case TF_HIDING: case AS_CLOAKING: case CR_AUTOGUARD:
|
return req;
|
||||||
case ML_AUTOGUARD: case CR_DEFENDER: case ML_DEFENDER: case ST_CHASEWALK: case PA_GOSPEL:
|
|
||||||
case CR_SHRINK: case TK_RUN: case GS_GATLINGFEVER: case TK_READYCOUNTER: case TK_READYDOWN:
|
|
||||||
case TK_READYSTORM: case TK_READYTURN: case SG_FUSION: case KO_YAMIKUMO:
|
|
||||||
if( sc && sc->data[status_skill2sc(skill_id)] )
|
|
||||||
return req;
|
|
||||||
}
|
|
||||||
|
|
||||||
idx = skill_get_index(skill_id);
|
idx = skill_get_index(skill_id);
|
||||||
if( idx == 0 ) // invalid skill id
|
if( idx == 0 ) // invalid skill id
|
||||||
@ -15197,13 +15188,10 @@ bool skill_check_camouflage(struct block_list *bl, struct status_change_entry *s
|
|||||||
|
|
||||||
if( sce ) {
|
if( sce ) {
|
||||||
if( !wall ) {
|
if( !wall ) {
|
||||||
if( sce->val1 < 3 ) //End camouflage.
|
if( sce->val1 == 1 ) //End camouflage.
|
||||||
status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
|
status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER);
|
||||||
else if( sce->val3&1 ) { //Remove wall bonus
|
|
||||||
sce->val3&=~1;
|
|
||||||
status_calc_bl(bl,SCB_SPEED);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
status_calc_bl(bl,SCB_SPEED);
|
||||||
}
|
}
|
||||||
|
|
||||||
return wall;
|
return wall;
|
||||||
@ -17658,6 +17646,41 @@ int skill_block_check(struct block_list *bl, sc_type type , uint16 skill_id) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Determines whether a skill is currently active or not
|
||||||
|
* Used for purposes of cancelling SP usage when disabling a skill
|
||||||
|
*/
|
||||||
|
int skill_disable_check(struct status_change *sc, uint16 skill_id)
|
||||||
|
{
|
||||||
|
switch( skill_id ){ // HP & SP Consumption Check
|
||||||
|
case BS_MAXIMIZE:
|
||||||
|
case NV_TRICKDEAD:
|
||||||
|
case TF_HIDING:
|
||||||
|
case AS_CLOAKING:
|
||||||
|
case GC_CLOAKINGEXCEED:
|
||||||
|
case ST_CHASEWALK:
|
||||||
|
case CR_DEFENDER:
|
||||||
|
case CR_SHRINK:
|
||||||
|
case CR_AUTOGUARD:
|
||||||
|
case ML_DEFENDER:
|
||||||
|
case ML_AUTOGUARD:
|
||||||
|
case PA_GOSPEL:
|
||||||
|
case GS_GATLINGFEVER:
|
||||||
|
case TK_READYCOUNTER:
|
||||||
|
case TK_READYDOWN:
|
||||||
|
case TK_READYSTORM:
|
||||||
|
case TK_READYTURN:
|
||||||
|
case TK_RUN:
|
||||||
|
case SG_FUSION:
|
||||||
|
case KO_YAMIKUMO:
|
||||||
|
case RA_WUGDASH:
|
||||||
|
case RA_CAMOUFLAGE:
|
||||||
|
if( sc->data[status_skill2sc(skill_id)] )
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int skill_get_elemental_type( uint16 skill_id , uint16 skill_lv ) {
|
int skill_get_elemental_type( uint16 skill_id , uint16 skill_lv ) {
|
||||||
int type = 0;
|
int type = 0;
|
||||||
|
|
||||||
|
@ -314,6 +314,7 @@ int skill_check_condition_castbegin(struct map_session_data *sd, uint16 skill_id
|
|||||||
int skill_check_condition_castend(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
|
int skill_check_condition_castend(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
|
||||||
int skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type);
|
int skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv, short type);
|
||||||
struct skill_condition skill_get_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
|
struct skill_condition skill_get_requirement(struct map_session_data *sd, uint16 skill_id, uint16 skill_lv);
|
||||||
|
int skill_disable_check(struct status_change *sc, uint16 skill_id);
|
||||||
|
|
||||||
int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, short* skill_lv, int range, int cast_flag);
|
int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, short* skill_lv, int range, int cast_flag);
|
||||||
// -- moonsoul (added skill_check_unit_cell)
|
// -- moonsoul (added skill_check_unit_cell)
|
||||||
|
@ -598,7 +598,7 @@ void initChangeTables(void) {
|
|||||||
set_sc( RA_FEARBREEZE , SC_FEARBREEZE , SI_FEARBREEZE , SCB_NONE );
|
set_sc( RA_FEARBREEZE , SC_FEARBREEZE , SI_FEARBREEZE , SCB_NONE );
|
||||||
set_sc( RA_ELECTRICSHOCKER , SC_ELECTRICSHOCKER , SI_ELECTRICSHOCKER , SCB_NONE );
|
set_sc( RA_ELECTRICSHOCKER , SC_ELECTRICSHOCKER , SI_ELECTRICSHOCKER , SCB_NONE );
|
||||||
set_sc( RA_WUGDASH , SC_WUGDASH , SI_WUGDASH , SCB_SPEED );
|
set_sc( RA_WUGDASH , SC_WUGDASH , SI_WUGDASH , SCB_SPEED );
|
||||||
set_sc( RA_CAMOUFLAGE , SC_CAMOUFLAGE , SI_CAMOUFLAGE , SCB_SPEED );
|
set_sc( RA_CAMOUFLAGE , SC_CAMOUFLAGE , SI_CAMOUFLAGE , SCB_CRI|SCB_SPEED|SCB_WATK|SCB_DEF );
|
||||||
add_sc( RA_MAGENTATRAP , SC_ELEMENTALCHANGE );
|
add_sc( RA_MAGENTATRAP , SC_ELEMENTALCHANGE );
|
||||||
add_sc( RA_COBALTTRAP , SC_ELEMENTALCHANGE );
|
add_sc( RA_COBALTTRAP , SC_ELEMENTALCHANGE );
|
||||||
add_sc( RA_MAIZETRAP , SC_ELEMENTALCHANGE );
|
add_sc( RA_MAIZETRAP , SC_ELEMENTALCHANGE );
|
||||||
@ -3574,8 +3574,7 @@ void status_calc_state( struct block_list *bl, struct status_change *sc, enum sc
|
|||||||
|| (sc->data[SC_BASILICA] && sc->data[SC_BASILICA]->val4 == bl->id) // Basilica caster cannot move
|
|| (sc->data[SC_BASILICA] && sc->data[SC_BASILICA]->val4 == bl->id) // Basilica caster cannot move
|
||||||
|| (sc->data[SC_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 == BCT_SELF)
|
|| (sc->data[SC_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 == BCT_SELF)
|
||||||
|| (sc->data[SC_CRYSTALIZE] && bl->type != BL_MOB)
|
|| (sc->data[SC_CRYSTALIZE] && bl->type != BL_MOB)
|
||||||
|| (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3
|
|| (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3)
|
||||||
&& !(sc->data[SC_CAMOUFLAGE]->val3&1))
|
|
||||||
) {
|
) {
|
||||||
sc->cant.move += ( start ? 1 : -1 );
|
sc->cant.move += ( start ? 1 : -1 );
|
||||||
}
|
}
|
||||||
@ -5230,7 +5229,7 @@ static unsigned short status_calc_speed(struct block_list *bl, struct status_cha
|
|||||||
val = max( val, 70 );
|
val = max( val, 70 );
|
||||||
if( sc->data[SC_MARSHOFABYSS] )
|
if( sc->data[SC_MARSHOFABYSS] )
|
||||||
val = max( val, 40 + 10 * sc->data[SC_MARSHOFABYSS]->val1 );
|
val = max( val, 40 + 10 * sc->data[SC_MARSHOFABYSS]->val1 );
|
||||||
if( sc->data[SC_CAMOUFLAGE] && (sc->data[SC_CAMOUFLAGE]->val3&1) == 0 )
|
if( sc->data[SC_CAMOUFLAGE] )
|
||||||
val = max( val, sc->data[SC_CAMOUFLAGE]->val1 < 3 ? 0 : 25 * (5 - sc->data[SC_CAMOUFLAGE]->val1) );
|
val = max( val, sc->data[SC_CAMOUFLAGE]->val1 < 3 ? 0 : 25 * (5 - sc->data[SC_CAMOUFLAGE]->val1) );
|
||||||
if( sc->data[SC__GROOMY] )
|
if( sc->data[SC__GROOMY] )
|
||||||
val = max( val, sc->data[SC__GROOMY]->val2);
|
val = max( val, sc->data[SC__GROOMY]->val2);
|
||||||
@ -6104,6 +6103,8 @@ void status_set_viewdata(struct block_list *bl, int class_)
|
|||||||
class_ = JOB_SUMMER;
|
class_ = JOB_SUMMER;
|
||||||
else if (sd->sc.option&OPTION_XMAS)
|
else if (sd->sc.option&OPTION_XMAS)
|
||||||
class_ = JOB_XMAS;
|
class_ = JOB_XMAS;
|
||||||
|
else if (sd->sc.option&OPTION_HANBOK)
|
||||||
|
class_ = JOB_HANBOK;
|
||||||
else if (sd->sc.option&OPTION_RIDING) {
|
else if (sd->sc.option&OPTION_RIDING) {
|
||||||
switch (class_) { //Adapt class to a Mounted one.
|
switch (class_) { //Adapt class to a Mounted one.
|
||||||
case JOB_KNIGHT:
|
case JOB_KNIGHT:
|
||||||
@ -6209,6 +6210,7 @@ void status_set_viewdata(struct block_list *bl, int class_)
|
|||||||
(vd->class_==JOB_WEDDING && battle_config.wedding_ignorepalette)
|
(vd->class_==JOB_WEDDING && battle_config.wedding_ignorepalette)
|
||||||
|| (vd->class_==JOB_XMAS && battle_config.xmas_ignorepalette)
|
|| (vd->class_==JOB_XMAS && battle_config.xmas_ignorepalette)
|
||||||
|| (vd->class_==JOB_SUMMER && battle_config.summer_ignorepalette)
|
|| (vd->class_==JOB_SUMMER && battle_config.summer_ignorepalette)
|
||||||
|
|| (vd->class_ == JOB_HANBOK && battle_config.hanbok_ignorepalette)
|
||||||
))
|
))
|
||||||
vd->cloth_color = 0;
|
vd->cloth_color = 0;
|
||||||
}
|
}
|
||||||
@ -7544,6 +7546,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|||||||
case SC_WEDDING:
|
case SC_WEDDING:
|
||||||
case SC_XMAS:
|
case SC_XMAS:
|
||||||
case SC_SUMMER:
|
case SC_SUMMER:
|
||||||
|
case SC_HANBOK:
|
||||||
if (!vd) return 0;
|
if (!vd) return 0;
|
||||||
//Store previous values as they could be removed.
|
//Store previous values as they could be removed.
|
||||||
val1 = vd->class_;
|
val1 = vd->class_;
|
||||||
@ -7553,7 +7556,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|||||||
unit_stop_attack(bl);
|
unit_stop_attack(bl);
|
||||||
clif_changelook(bl,LOOK_WEAPON,0);
|
clif_changelook(bl,LOOK_WEAPON,0);
|
||||||
clif_changelook(bl,LOOK_SHIELD,0);
|
clif_changelook(bl,LOOK_SHIELD,0);
|
||||||
clif_changelook(bl,LOOK_BASE,type==SC_WEDDING?JOB_WEDDING:type==SC_XMAS?JOB_XMAS:JOB_SUMMER);
|
clif_changelook(bl,LOOK_BASE,type==SC_WEDDING?JOB_WEDDING:type==SC_XMAS?JOB_XMAS:type==SC_SUMMER?JOB_SUMMER:JOB_HANBOK);
|
||||||
clif_changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color);
|
clif_changelook(bl,LOOK_CLOTHES_COLOR,vd->cloth_color);
|
||||||
break;
|
break;
|
||||||
case SC_NOCHAT:
|
case SC_NOCHAT:
|
||||||
@ -8796,9 +8799,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|||||||
case SC_WEDDING:
|
case SC_WEDDING:
|
||||||
case SC_XMAS:
|
case SC_XMAS:
|
||||||
case SC_SUMMER:
|
case SC_SUMMER:
|
||||||
|
case SC_HANBOK:
|
||||||
clif_changelook(bl,LOOK_WEAPON,0);
|
clif_changelook(bl,LOOK_WEAPON,0);
|
||||||
clif_changelook(bl,LOOK_SHIELD,0);
|
clif_changelook(bl,LOOK_SHIELD,0);
|
||||||
clif_changelook(bl,LOOK_BASE,type==SC_WEDDING?JOB_WEDDING:type==SC_XMAS?JOB_XMAS:JOB_SUMMER);
|
clif_changelook(bl,LOOK_BASE,type==SC_WEDDING?JOB_WEDDING:type==SC_XMAS?JOB_XMAS:type==SC_SUMMER?JOB_SUMMER:JOB_HANBOK);
|
||||||
clif_changelook(bl,LOOK_CLOTHES_COLOR,val4);
|
clif_changelook(bl,LOOK_CLOTHES_COLOR,val4);
|
||||||
break;
|
break;
|
||||||
case SC_KAAHI:
|
case SC_KAAHI:
|
||||||
@ -9008,6 +9012,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
|||||||
case SC_SUMMER:
|
case SC_SUMMER:
|
||||||
sc->option |= OPTION_SUMMER;
|
sc->option |= OPTION_SUMMER;
|
||||||
break;
|
break;
|
||||||
|
case SC_HANBOK:
|
||||||
|
sc->option |= OPTION_HANBOK;
|
||||||
|
break;
|
||||||
case SC_ORCISH:
|
case SC_ORCISH:
|
||||||
sc->option |= OPTION_ORCISH;
|
sc->option |= OPTION_ORCISH;
|
||||||
break;
|
break;
|
||||||
@ -9170,6 +9177,7 @@ int status_change_clear(struct block_list* bl, int type) {
|
|||||||
case SC_MELTDOWN:
|
case SC_MELTDOWN:
|
||||||
case SC_XMAS:
|
case SC_XMAS:
|
||||||
case SC_SUMMER:
|
case SC_SUMMER:
|
||||||
|
case SC_HANBOK:
|
||||||
case SC_NOCHAT:
|
case SC_NOCHAT:
|
||||||
case SC_FUSION:
|
case SC_FUSION:
|
||||||
case SC_EARTHSCROLL:
|
case SC_EARTHSCROLL:
|
||||||
@ -9319,11 +9327,12 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
|
|||||||
case SC_WEDDING:
|
case SC_WEDDING:
|
||||||
case SC_XMAS:
|
case SC_XMAS:
|
||||||
case SC_SUMMER:
|
case SC_SUMMER:
|
||||||
|
case SC_HANBOK:
|
||||||
if (!vd) break;
|
if (!vd) break;
|
||||||
if (sd)
|
if (sd)
|
||||||
{ //Load data from sd->status.* as the stored values could have changed.
|
{ //Load data from sd->status.* as the stored values could have changed.
|
||||||
//Must remove OPTION to prevent class being rechanged.
|
//Must remove OPTION to prevent class being rechanged.
|
||||||
sc->option &= type==SC_WEDDING?~OPTION_WEDDING:type==SC_XMAS?~OPTION_XMAS:~OPTION_SUMMER;
|
sc->option &= type==SC_WEDDING?~OPTION_WEDDING:type==SC_XMAS?~OPTION_XMAS:type==SC_SUMMER?~OPTION_SUMMER:~OPTION_HANBOK;
|
||||||
clif_changeoption(&sd->bl);
|
clif_changeoption(&sd->bl);
|
||||||
status_set_viewdata(bl, sd->status.class_);
|
status_set_viewdata(bl, sd->status.class_);
|
||||||
} else {
|
} else {
|
||||||
@ -9772,6 +9781,9 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
|
|||||||
case SC_SUMMER:
|
case SC_SUMMER:
|
||||||
sc->option &= ~OPTION_SUMMER;
|
sc->option &= ~OPTION_SUMMER;
|
||||||
break;
|
break;
|
||||||
|
case SC_HANBOK:
|
||||||
|
sc->option &= ~OPTION_HANBOK;
|
||||||
|
break;
|
||||||
case SC_ORCISH:
|
case SC_ORCISH:
|
||||||
sc->option &= ~OPTION_ORCISH;
|
sc->option &= ~OPTION_ORCISH;
|
||||||
break;
|
break;
|
||||||
@ -10480,12 +10492,27 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case SC_CAMOUFLAGE:
|
case SC_CAMOUFLAGE:
|
||||||
if(--(sce->val4) > 0){
|
if (!status_charge(bl, 0, 7 - sce->val1))
|
||||||
status_charge(bl,0,7 - sce->val1);
|
break;
|
||||||
sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
|
if (sd && --sce->val4 >= 0) {
|
||||||
return 0;
|
if (!(sce->val2 & 1)) {
|
||||||
}
|
status->cri += sd->base_status.cri * 1 / 10; //+10% per second
|
||||||
break;
|
if (status->cri > 1000) { //max 100%
|
||||||
|
status->cri = 1000;
|
||||||
|
sce->val2 |= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!(sce->val2 & 2)) {
|
||||||
|
status->def2 -= sd->base_status.def2 * 1 / 20; //-5% per second
|
||||||
|
if (status->def2 < 0) { //min 0
|
||||||
|
status->def2 = 0;
|
||||||
|
sce->val2 |= 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
status->rhw.atk += 30; //+30 per second
|
||||||
|
}
|
||||||
|
sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
|
||||||
|
return 0;
|
||||||
|
|
||||||
case SC__REPRODUCE:
|
case SC__REPRODUCE:
|
||||||
if(!status_charge(bl, 0, 1))
|
if(!status_charge(bl, 0, 1))
|
||||||
@ -10925,6 +10952,7 @@ int status_change_clear_buffs (struct block_list* bl, int type)
|
|||||||
case SC_ABUNDANCE:
|
case SC_ABUNDANCE:
|
||||||
case SC_CURSEDCIRCLE_ATKER:
|
case SC_CURSEDCIRCLE_ATKER:
|
||||||
case SC_CURSEDCIRCLE_TARGET:
|
case SC_CURSEDCIRCLE_TARGET:
|
||||||
|
case SC_PUSH_CART:
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
//Debuffs that can be removed.
|
//Debuffs that can be removed.
|
||||||
|
@ -649,11 +649,12 @@ typedef enum sc_type {
|
|||||||
SC_PARALYSIS,
|
SC_PARALYSIS,
|
||||||
SC_PAIN_KILLER,
|
SC_PAIN_KILLER,
|
||||||
|
|
||||||
|
|
||||||
#ifdef RENEWAL
|
#ifdef RENEWAL
|
||||||
SC_EXTREMITYFIST2,
|
SC_EXTREMITYFIST2,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
SC_HANBOK,
|
||||||
|
|
||||||
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
|
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
|
||||||
} sc_type;
|
} sc_type;
|
||||||
|
|
||||||
@ -1504,7 +1505,8 @@ enum {
|
|||||||
OPTION_DRAGON3 = 0x01000000,
|
OPTION_DRAGON3 = 0x01000000,
|
||||||
OPTION_DRAGON4 = 0x02000000,
|
OPTION_DRAGON4 = 0x02000000,
|
||||||
OPTION_DRAGON5 = 0x04000000,
|
OPTION_DRAGON5 = 0x04000000,
|
||||||
OPTION_MOUNTING = 0x08000000,
|
OPTION_HANBOK = 0x08000000,
|
||||||
|
OPTION_MOUNTING = 0X10000000,
|
||||||
|
|
||||||
#ifndef NEW_CARTS
|
#ifndef NEW_CARTS
|
||||||
OPTION_CART1 = 0x00000008,
|
OPTION_CART1 = 0x00000008,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user