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:
akinari1087 2013-04-25 03:27:40 +00:00
parent e39d49a6d2
commit 01b8e76e23
19 changed files with 206 additions and 445 deletions

View File

@ -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

View File

@ -112,7 +112,8 @@
102: Expanded Super Baby
103: Kagerou
104: Oboro
105: Unknown Job
105: Hanbok
106: Unknown Job
//Auction
200: Auction Manager

View File

@ -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

View File

@ -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

View File

@ -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.
---------------------------------------

View File

@ -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"; }

View File

@ -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);
}
}

View File

@ -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 ) {

View File

@ -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, },

View File

@ -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;

View File

@ -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

View File

@ -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) )

View File

@ -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

View File

@ -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;

View File

@ -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)

View File

@ -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.

View File

@ -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,