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)
|
||||
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
|
||||
motd_type: 0
|
||||
|
||||
|
@ -112,7 +112,8 @@
|
||||
102: Expanded Super Baby
|
||||
103: Kagerou
|
||||
104: Oboro
|
||||
105: Unknown Job
|
||||
105: Hanbok
|
||||
106: Unknown Job
|
||||
|
||||
//Auction
|
||||
200: Auction Manager
|
||||
|
@ -304,6 +304,7 @@ Option_Summer 0x40000
|
||||
Option_Wug 0x100000
|
||||
Option_Wugrider 0x200000
|
||||
Option_Hanbok 0x8000000
|
||||
Option_Mounting 0x10000000
|
||||
|
||||
bc_all 0
|
||||
bc_map 1
|
||||
@ -1288,6 +1289,8 @@ SC_MAGMA_FLOW 548
|
||||
SC_PYROCLASTIC 549
|
||||
SC_PARALYSIS 550
|
||||
SC_PAIN_KILLER 551
|
||||
SC_EXTREMITYFIST2 552
|
||||
SC_HANBOK 553
|
||||
|
||||
e_gasp 0
|
||||
e_what 1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -160,73 +160,73 @@
|
||||
// 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
|
||||
// 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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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)
|
||||
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
|
||||
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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -833,7 +833,7 @@ Resets a Star Gladiator's marked maps.
|
||||
|
||||
Changes your job.
|
||||
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")) {
|
||||
case 1:
|
||||
warp getarg(0),102,102;
|
||||
close;
|
||||
end;
|
||||
case 2:
|
||||
specialeffect2 313;
|
||||
percentheal 100,100;
|
||||
close;
|
||||
end;
|
||||
case 3:
|
||||
warp "prontera",156,179;
|
||||
close;
|
||||
end;
|
||||
}
|
||||
}
|
||||
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:
|
||||
return msg_txt(71);
|
||||
|
||||
case JOB_HANBOK:
|
||||
return msg_txt(105);
|
||||
|
||||
case JOB_NOVICE_HIGH:
|
||||
case JOB_SWORDMAN_HIGH:
|
||||
case JOB_MAGE_HIGH:
|
||||
@ -277,7 +280,7 @@ const char* job_name(int class_) {
|
||||
return msg_txt(103 - JOB_KAGEROU+class_);
|
||||
|
||||
default:
|
||||
return msg_txt(105);
|
||||
return msg_txt(106);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5598,7 +5598,6 @@ ACMD_FUNC(changelook)
|
||||
* Turns on/off Autotrade for a specific player
|
||||
*------------------------------------------*/
|
||||
ACMD_FUNC(autotrade) {
|
||||
int i;
|
||||
nullpo_retr(-1, sd);
|
||||
|
||||
if( map[sd->bl.m].flag.autotrade != battle_config.autotrade_mapflag ) {
|
||||
@ -8763,7 +8762,6 @@ ACMD_FUNC(cart) {
|
||||
|
||||
/* Channel System [Ind] */
|
||||
ACMD_FUNC(join){
|
||||
struct Channel *channel;
|
||||
char chname[CHAN_NAME_LENGTH], pass[CHAN_NAME_LENGTH];
|
||||
|
||||
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, },
|
||||
{ "xmas_ignorepalette", &battle_config.xmas_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_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, },
|
||||
|
@ -220,6 +220,7 @@ extern struct Battle_Config
|
||||
int wedding_ignorepalette; //[Skotlex]
|
||||
int xmas_ignorepalette; // [Valaris]
|
||||
int summer_ignorepalette; // [Zephyrus]
|
||||
int hanbok_ignorepalette;
|
||||
int natural_healhp_interval;
|
||||
int natural_healsp_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
|
||||
if( !db_size(channel->users) && !(flag&1) )
|
||||
if( !db_size(channel->users) && !(flag&1) && channel->type != CHAN_TYPE_PUBLIC )
|
||||
channel_delete(channel);
|
||||
|
||||
return 0;
|
||||
@ -1145,7 +1145,6 @@ int do_init_channel(void) {
|
||||
void do_final_channel(void) {
|
||||
DBIterator *iter;
|
||||
struct Channel *channel;
|
||||
struct guild *g;
|
||||
int i=0;
|
||||
|
||||
//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)
|
||||
{
|
||||
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;
|
||||
return;
|
||||
@ -2984,12 +2984,13 @@ void clif_changelook(struct block_list *bl,int type,int val)
|
||||
break;
|
||||
case LOOK_BASE:
|
||||
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;
|
||||
if (vd->cloth_color && (
|
||||
(vd->class_ == JOB_WEDDING && battle_config.wedding_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);
|
||||
break;
|
||||
@ -3012,7 +3013,8 @@ void clif_changelook(struct block_list *bl,int type,int val)
|
||||
if (val && (
|
||||
(vd->class_ == JOB_WEDDING && battle_config.wedding_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;
|
||||
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 )
|
||||
return;
|
||||
|
||||
if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER) )
|
||||
if( sd->sc.option&(OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK) )
|
||||
return;
|
||||
|
||||
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;
|
||||
|
||||
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;
|
||||
|
||||
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)
|
||||
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)
|
||||
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 SC_REPRODUCE:
|
||||
case SC_INVISIBILITY:
|
||||
case RA_CAMOUFLAGE:
|
||||
if (tsce) {
|
||||
i = status_change_end(bl, type, INVALID_TIMER);
|
||||
if( i )
|
||||
@ -5948,7 +5949,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
map_freeblock_unlock();
|
||||
return 0;
|
||||
}
|
||||
case RA_CAMOUFLAGE:
|
||||
i = sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
|
||||
if( 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;
|
||||
break;
|
||||
case HP_BASILICA:
|
||||
if( sc->data[SC_BASILICA] )
|
||||
status_change_end(src, SC_BASILICA, INVALID_TIMER); // Cancel Basilica
|
||||
else { // Create Basilica. Start SC on caster. Unit timer start SC on others.
|
||||
if( map_foreachinrange(skill_count_wos, src, 2, BL_MOB|BL_PC, src) ) {
|
||||
if( sd )
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
|
||||
return 1;
|
||||
if( sc->data[SC_BASILICA] ) {
|
||||
status_change_end(src, SC_BASILICA, INVALID_TIMER); // Cancel Basilica and return so requirement isn't consumed again
|
||||
return 0;
|
||||
} else { // Create Basilica. Start SC on caster. Unit timer start SC on others.
|
||||
if( map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) {
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL,0);
|
||||
return 0;
|
||||
}
|
||||
skill_clear_unitgroup(src);
|
||||
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 )
|
||||
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);
|
||||
|
||||
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] ) )
|
||||
return 0;
|
||||
|
||||
switch( skill_id ) { // Turn off check.
|
||||
case BS_MAXIMIZE: case NV_TRICKDEAD: case TF_HIDING: case AS_CLOAKING: case CR_AUTOGUARD:
|
||||
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 RA_WUGDASH: case KO_YAMIKUMO:
|
||||
if( sc && sc->data[status_skill2sc(skill_id)] )
|
||||
return 1;
|
||||
}
|
||||
//Checks if disabling skill - in which case no SP requirements are necessary
|
||||
if( sc && skill_disable_check(sc,skill_id))
|
||||
return 1;
|
||||
|
||||
// Check the skills that can be used while mounted on a warg
|
||||
if( pc_isridingwug(sd) ) {
|
||||
@ -12762,7 +12760,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
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) {
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,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)
|
||||
switch( skill_id ) {
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
@ -12832,8 +12830,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
// return 0;
|
||||
if( sc && (sc->data[SC_BLADESTOP] || sc->data[SC_CURSEDCIRCLE_ATKER]) )
|
||||
break;
|
||||
if( sc && sc->data[SC_COMBO] )
|
||||
{
|
||||
if( sc && sc->data[SC_COMBO] ) {
|
||||
switch(sc->data[SC_COMBO]->val1) {
|
||||
case MO_COMBOFINISH:
|
||||
case CH_TIGERFIST:
|
||||
@ -12843,33 +12840,27 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else if( !unit_can_move(&sd->bl) )
|
||||
{ //Placed here as ST_MOVE_ENABLE should not apply if rooted or on a combo. [Skotlex]
|
||||
else if( !unit_can_move(&sd->bl) ) { //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);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case TK_MISSION:
|
||||
if( (sd->class_&MAPID_UPPERMASK) != MAPID_TAEKWON )
|
||||
{// Cannot be used by Non-Taekwon classes
|
||||
if( (sd->class_&MAPID_UPPERMASK) != MAPID_TAEKWON ) { // Cannot be used by Non-Taekwon classes
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case TK_READYCOUNTER:
|
||||
case TK_READYDOWN:
|
||||
case TK_READYSTORM:
|
||||
case TK_READYTURN:
|
||||
case TK_JUMPKICK:
|
||||
if( (sd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER )
|
||||
{// Soul Linkers cannot use this skill
|
||||
if( (sd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER ) { // Soul Linkers cannot use this skill
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case TK_TURNKICK:
|
||||
case TK_STORMKICK:
|
||||
case TK_DOWNKICK:
|
||||
@ -12894,8 +12885,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
case BD_ADAPTATION:
|
||||
{
|
||||
int time;
|
||||
if(!(sc && sc->data[SC_DANCING]))
|
||||
{
|
||||
if(!(sc && sc->data[SC_DANCING])) {
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||
return 0;
|
||||
}
|
||||
@ -12910,28 +12900,22 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case SL_SMA:
|
||||
if(!(sc && sc->data[SC_SMA]))
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case HT_POWER:
|
||||
if(!(sc && sc->data[SC_COMBO] && sc->data[SC_COMBO]->val1 == AC_DOUBLE))
|
||||
return 0;
|
||||
break;
|
||||
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
@ -12960,10 +12944,29 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
}
|
||||
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_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);
|
||||
return 0;
|
||||
}
|
||||
@ -12995,8 +12998,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
break;
|
||||
//Auron insists we should implement SP consumption when you are not Soul Linked. [Skotlex]
|
||||
//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)
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_SP_INSUFFICIENT,0);
|
||||
else
|
||||
@ -13022,7 +13024,6 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case NJ_ISSEN:
|
||||
#ifdef RENEWAL
|
||||
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;
|
||||
}
|
||||
break;
|
||||
|
||||
case NJ_ZENYNAGE:
|
||||
case KO_MUCHANAGE:
|
||||
if(sd->status.zeny < require.zeny) {
|
||||
@ -13057,8 +13057,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
}
|
||||
break;
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
@ -13095,8 +13094,8 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
* Warlock
|
||||
**/
|
||||
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_LEVEL,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_SUMMONWB:
|
||||
case WL_SUMMONSTONE:
|
||||
if( sc )
|
||||
{
|
||||
if( sc ) {
|
||||
ARR_FIND(SC_SPHERE_1,SC_SPHERE_5+1,i,!sc->data[i]);
|
||||
if( i == SC_SPHERE_5+1 )
|
||||
{ // No more free slots
|
||||
if( i == SC_SPHERE_5+1 ) { // No more free slots
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_SUMMON,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);
|
||||
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);
|
||||
return 0;
|
||||
}
|
||||
@ -13390,7 +13387,7 @@ int skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_id
|
||||
}
|
||||
break;
|
||||
case ST_RIDINGWUG:
|
||||
if( !pc_isridingwug(sd) ){
|
||||
if( !pc_isridingwug(sd) ) {
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||
return 0;
|
||||
}
|
||||
@ -13709,15 +13706,9 @@ struct skill_condition skill_get_requirement(struct map_session_data* sd, uint16
|
||||
if( !sc->count )
|
||||
sc = NULL;
|
||||
|
||||
switch( skill_id )
|
||||
{ // Turn off check.
|
||||
case BS_MAXIMIZE: case NV_TRICKDEAD: case TF_HIDING: case AS_CLOAKING: case CR_AUTOGUARD:
|
||||
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;
|
||||
}
|
||||
//Checks if disabling skill - in which case no SP requirements are necessary
|
||||
if( sc && skill_disable_check(sc,skill_id) )
|
||||
return req;
|
||||
|
||||
idx = skill_get_index(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( !wall ) {
|
||||
if( sce->val1 < 3 ) //End camouflage.
|
||||
if( sce->val1 == 1 ) //End camouflage.
|
||||
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;
|
||||
@ -17658,6 +17646,41 @@ int skill_block_check(struct block_list *bl, sc_type type , uint16 skill_id) {
|
||||
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 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_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);
|
||||
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);
|
||||
// -- 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_ELECTRICSHOCKER , SC_ELECTRICSHOCKER , SI_ELECTRICSHOCKER , SCB_NONE );
|
||||
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_COBALTTRAP , 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_GRAVITATION] && sc->data[SC_GRAVITATION]->val3 == BCT_SELF)
|
||||
|| (sc->data[SC_CRYSTALIZE] && bl->type != BL_MOB)
|
||||
|| (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3
|
||||
&& !(sc->data[SC_CAMOUFLAGE]->val3&1))
|
||||
|| (sc->data[SC_CAMOUFLAGE] && sc->data[SC_CAMOUFLAGE]->val1 < 3)
|
||||
) {
|
||||
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 );
|
||||
if( sc->data[SC_MARSHOFABYSS] )
|
||||
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) );
|
||||
if( sc->data[SC__GROOMY] )
|
||||
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;
|
||||
else if (sd->sc.option&OPTION_XMAS)
|
||||
class_ = JOB_XMAS;
|
||||
else if (sd->sc.option&OPTION_HANBOK)
|
||||
class_ = JOB_HANBOK;
|
||||
else if (sd->sc.option&OPTION_RIDING) {
|
||||
switch (class_) { //Adapt class to a Mounted one.
|
||||
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_XMAS && battle_config.xmas_ignorepalette)
|
||||
|| (vd->class_==JOB_SUMMER && battle_config.summer_ignorepalette)
|
||||
|| (vd->class_ == JOB_HANBOK && battle_config.hanbok_ignorepalette)
|
||||
))
|
||||
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_XMAS:
|
||||
case SC_SUMMER:
|
||||
case SC_HANBOK:
|
||||
if (!vd) return 0;
|
||||
//Store previous values as they could be removed.
|
||||
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);
|
||||
clif_changelook(bl,LOOK_WEAPON,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);
|
||||
break;
|
||||
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_XMAS:
|
||||
case SC_SUMMER:
|
||||
case SC_HANBOK:
|
||||
clif_changelook(bl,LOOK_WEAPON,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);
|
||||
break;
|
||||
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:
|
||||
sc->option |= OPTION_SUMMER;
|
||||
break;
|
||||
case SC_HANBOK:
|
||||
sc->option |= OPTION_HANBOK;
|
||||
break;
|
||||
case SC_ORCISH:
|
||||
sc->option |= OPTION_ORCISH;
|
||||
break;
|
||||
@ -9170,6 +9177,7 @@ int status_change_clear(struct block_list* bl, int type) {
|
||||
case SC_MELTDOWN:
|
||||
case SC_XMAS:
|
||||
case SC_SUMMER:
|
||||
case SC_HANBOK:
|
||||
case SC_NOCHAT:
|
||||
case SC_FUSION:
|
||||
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_XMAS:
|
||||
case SC_SUMMER:
|
||||
case SC_HANBOK:
|
||||
if (!vd) break;
|
||||
if (sd)
|
||||
{ //Load data from sd->status.* as the stored values could have changed.
|
||||
//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);
|
||||
status_set_viewdata(bl, sd->status.class_);
|
||||
} else {
|
||||
@ -9772,6 +9781,9 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
|
||||
case SC_SUMMER:
|
||||
sc->option &= ~OPTION_SUMMER;
|
||||
break;
|
||||
case SC_HANBOK:
|
||||
sc->option &= ~OPTION_HANBOK;
|
||||
break;
|
||||
case SC_ORCISH:
|
||||
sc->option &= ~OPTION_ORCISH;
|
||||
break;
|
||||
@ -10480,12 +10492,27 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
|
||||
break;
|
||||
|
||||
case SC_CAMOUFLAGE:
|
||||
if(--(sce->val4) > 0){
|
||||
status_charge(bl,0,7 - sce->val1);
|
||||
sc_timer_next(1000 + tick, status_change_timer, bl->id, data);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
if (!status_charge(bl, 0, 7 - sce->val1))
|
||||
break;
|
||||
if (sd && --sce->val4 >= 0) {
|
||||
if (!(sce->val2 & 1)) {
|
||||
status->cri += sd->base_status.cri * 1 / 10; //+10% per second
|
||||
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:
|
||||
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_CURSEDCIRCLE_ATKER:
|
||||
case SC_CURSEDCIRCLE_TARGET:
|
||||
case SC_PUSH_CART:
|
||||
continue;
|
||||
|
||||
//Debuffs that can be removed.
|
||||
|
@ -649,11 +649,12 @@ typedef enum sc_type {
|
||||
SC_PARALYSIS,
|
||||
SC_PAIN_KILLER,
|
||||
|
||||
|
||||
#ifdef RENEWAL
|
||||
SC_EXTREMITYFIST2,
|
||||
#endif
|
||||
|
||||
SC_HANBOK,
|
||||
|
||||
SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
|
||||
} sc_type;
|
||||
|
||||
@ -1504,7 +1505,8 @@ enum {
|
||||
OPTION_DRAGON3 = 0x01000000,
|
||||
OPTION_DRAGON4 = 0x02000000,
|
||||
OPTION_DRAGON5 = 0x04000000,
|
||||
OPTION_MOUNTING = 0x08000000,
|
||||
OPTION_HANBOK = 0x08000000,
|
||||
OPTION_MOUNTING = 0X10000000,
|
||||
|
||||
#ifndef NEW_CARTS
|
||||
OPTION_CART1 = 0x00000008,
|
||||
|
Loading…
x
Reference in New Issue
Block a user