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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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

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

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

View File

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

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

View File

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

View File

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