diff --git a/db/job_db2.txt b/db/job_db2.txt index 97e34ddc6b..ef1b4edbda 100644 --- a/db/job_db2.txt +++ b/db/job_db2.txt @@ -237,9 +237,9 @@ 4082,0,3,4,1,4,5,0,0,3,0,4,0,1,5,0,6,0,0,4,5,0,0,2,4,0,4,3,0,0,1,5,0,6,2,0,0,4,4,0,1,3,3,0,5,1,4,0,1,5,0 // Royal Guard (Gryphon) (Trans) 4083,0,3,4,1,4,5,0,0,3,0,4,0,1,5,0,6,0,0,4,5,0,0,2,4,0,4,3,0,0,1,5,0,6,2,0,0,4,4,0,1,3,3,0,5,1,4,0,1,5,0 -// Ranger (Waug) (Regular) +// Ranger (Warg) (Regular) 4084,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2 -// Ranger (Waug) (Trans) +// Ranger (Warg) (Trans) 4085,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2 // Mechanic (Mado) (Regular) 4086,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0 @@ -275,7 +275,7 @@ 4109,4,4,5,3,4,0,0,0,0,1,1,4,4,3,5,0,0,0,5,2,2,4,3,5,0,0,0,0,0,4,5,3,1,0,0,0,0,0,4,5,2,0,0,5,3,4,6,6,6,4 // Baby Royal Guard (Gryphon) 4110,0,3,4,1,4,5,0,0,3,0,4,0,1,5,0,6,0,0,4,5,0,0,2,4,0,4,3,0,0,1,5,0,6,2,0,0,4,4,0,1,3,3,0,5,1,4,0,1,5,0 -// Baby Ranger (Waug) +// Baby Ranger (Warg) 4111,5,4,4,2,0,0,2,5,4,0,0,3,3,3,0,0,5,2,0,0,4,3,5,0,0,1,1,0,0,5,2,3,0,0,0,4,4,4,2,0,0,0,2,5,2,0,0,0,4,2 // Baby Mechanic (Mado) 4112,6,1,0,0,1,0,6,2,5,4,0,0,4,6,0,0,2,0,3,3,4,5,0,0,3,6,0,0,3,0,1,1,3,6,0,0,4,4,0,0,0,3,3,1,1,0,0,5,2,0 diff --git a/db/pre-re/job_db1.txt b/db/pre-re/job_db1.txt index 87ece7a51f..d25f0891a5 100644 --- a/db/pre-re/job_db1.txt +++ b/db/pre-re/job_db1.txt @@ -229,9 +229,9 @@ 4082, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 // Royal Guard (Gryphon) (Trans) 4083, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 -// Ranger (Waug) (Regular) +// Ranger (Warg) (Regular) 4084, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 -// Ranger (Waug) (Trans) +// Ranger (Warg) (Trans) 4085, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 // Mechanic (Mado) (Regular) 4086, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,650 ,650 ,675 ,675 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 @@ -267,7 +267,7 @@ 4109, 28000,150 ,500 ,300 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 // Baby Royal Guard (Gryphon) 4110, 28000,110 ,700 ,470 ,400 ,500 ,500 ,550 ,600 ,600 ,700 ,700 ,650 ,700 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 -// Baby Ranger (Waug) +// Baby Ranger (Warg) 4111, 27000,85 ,500 ,400 ,400 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,600 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 // Baby Mechanic (Mado) 4112, 30000,90 ,500 ,400 ,400 ,600 ,650 ,2000 ,2000 ,2000 ,650 ,650 ,675 ,675 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 diff --git a/db/pre-re/skill_tree.txt b/db/pre-re/skill_tree.txt index 7cd30f961b..f1954a2bc8 100644 --- a/db/pre-re/skill_tree.txt +++ b/db/pre-re/skill_tree.txt @@ -4151,7 +4151,7 @@ 4083,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive# 4083,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit# 4083,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration# -//Ranger (Waug) (Regular) +//Ranger (Warg) (Regular) 4084,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 4084,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid# 4084,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye# @@ -4204,7 +4204,7 @@ 4084,2252,1,2248,1,0,0,0,0,0,0,0,0 //RA_VERDURETRAP#Verdure Trap# 4084,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Firing Trap# 4084,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Icebound Trap# -//Ranger (Waug) (Trans) +//Ranger (Warg) (Trans) 4085,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 4085,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid# 4085,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye# @@ -5232,7 +5232,7 @@ 4110,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive# 4110,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit# 4110,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration# -//Baby Ranger (Waug) +//Baby Ranger (Warg) 4111,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 4111,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid# 4111,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye# diff --git a/db/re/job_db1.txt b/db/re/job_db1.txt index 767621cac7..ef035063af 100644 --- a/db/re/job_db1.txt +++ b/db/re/job_db1.txt @@ -219,9 +219,9 @@ 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 // 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 -// Ranger (Waug) (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 -// Ranger (Waug) (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 // 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 @@ -257,7 +257,7 @@ 4109, 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 Royal Guard (Gryphon) 4110, 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 -// Baby Ranger (Waug) +// Baby Ranger (Warg) 4111, 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 // Baby Mechanic (Mado) 4112, 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 diff --git a/db/re/skill_tree.txt b/db/re/skill_tree.txt index 0353c263ee..b8b1cb86b6 100644 --- a/db/re/skill_tree.txt +++ b/db/re/skill_tree.txt @@ -4151,7 +4151,7 @@ 4083,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive# 4083,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit# 4083,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration# -//Ranger (Waug) (Regular) +//Ranger (Warg) (Regular) 4084,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 4084,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid# 4084,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye# @@ -4204,7 +4204,7 @@ 4084,2252,1,2248,1,0,0,0,0,0,0,0,0 //RA_VERDURETRAP#Verdure Trap# 4084,2253,5,2237,1,0,0,0,0,0,0,0,0 //RA_FIRINGTRAP#Firing Trap# 4084,2254,5,2237,1,0,0,0,0,0,0,0,0 //RA_ICEBOUNDTRAP#Icebound Trap# -//Ranger (Waug) (Trans) +//Ranger (Warg) (Trans) 4085,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 4085,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid# 4085,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye# @@ -5232,7 +5232,7 @@ 4110,2323,5,2311,3,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive# 4110,2324,5,2318,3,2319,3,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit# 4110,2325,5,2315,3,2321,4,2322,5,0,0,0,0 //LG_INSPIRATION#Inspiration# -//Baby Ranger (Waug) +//Baby Ranger (Warg) 4111,1,9,0,0,0,0,0,0,0,0,0,0 //NV_BASIC#Basic Skill# 4111,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid# 4111,43,10,0,0,0,0,0,0,0,0,0,0 //AC_OWL#Owl's Eye# diff --git a/doc/ea_job_system.txt b/doc/ea_job_system.txt index 16508a9020..0491e38822 100644 --- a/doc/ea_job_system.txt +++ b/doc/ea_job_system.txt @@ -84,7 +84,7 @@ If we had used addition, we would have gotten a completely different result. The EAJL (eA Job Level) constants ------------------------------------------------------------------------------- - There are a few constants which can be used to filter out and make job comparisons easier. The comparisons involve eA job IDs, not classic job IDs, using the eaclass() command explained in the next section. + There are a few constants which can be used to filter out and make job comparisons easier. The comparisons involve eA job IDs, not classic job IDs, using the eaclass() command explained in the next section. set @eac, eaclass(); diff --git a/npc/cities/ayothaya.txt b/npc/cities/ayothaya.txt index abba768667..cf3c2fb2ed 100644 --- a/npc/cities/ayothaya.txt +++ b/npc/cities/ayothaya.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= MasterOfMuppets //===== Current Version: ===================================== -//= 1.8 +//= 1.9 //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= @@ -13,6 +13,7 @@ //= 1.6 Rescripted to Aegis 10.3 standards. [L0ne_W0lf] //= 1.7 Fixed character's anme bugs [Lupus] //= 1.8 Moved Alberta NPC to pre-re/re paths. [Euphy] +//= 1.9 Updated Renewal warp coordinates. //============================================================ // Ayothaya Transportation NPC @@ -93,9 +94,9 @@ ayothaya,152,68,1 script Aibakthing#ayo2 843,{ mes "You will be welcome to come back whenever you please. I hope that we will see each other again sometime soon. Thank you~"; close2; if (checkre(0)) - warp "alberta",238,22; - else warp "alberta",235,45; + else + warp "alberta",238,22; end; } mes "[Aibakthing]"; diff --git a/npc/quests/eye_of_hellion.txt b/npc/quests/eye_of_hellion.txt index 7ad4c4e323..c27a3ae4c5 100644 --- a/npc/quests/eye_of_hellion.txt +++ b/npc/quests/eye_of_hellion.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= MasterOfMuppets //===== Current Version: ===================================== -//= 1.9 +//= 2.0 //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= @@ -21,6 +21,7 @@ //= 1.7 Corrected reminants from aegis conversion. [L0en_w0lf] //= 1.8 Replaced effect numerics with constants. [L0ne_W0lf] //= 1.9 Removed duplicate text. [Kisuka] +//= 2.0 Updated EXP rewards. //============================================================ morocc_in,116,101,3 script Old Scholar Tyus#hellion 735,3,3,{ @@ -547,7 +548,7 @@ morocc_in,116,101,3 script Old Scholar Tyus#hellion 735,3,3,{ set HELLIONQ,69; getitem 2658,1; //Nile_Rose_ getitem 603,1; //Old_Blue_Box - getexp 120000,0; + getexp 1200000,0; next; mes "[Sir Chilias'Tyus]"; mes "Thank you, kind"; @@ -614,7 +615,7 @@ morocc_in,116,101,3 script Old Scholar Tyus#hellion 735,3,3,{ delitem 7332,1; //Slate set HELLIONQ,70; getitem 2658,1; //Nile_Rose_ - getexp 100000,0; + getexp 1000000,0; next; mes "[Sir Chilias'Tyus]"; mes "Thank you, kind"; diff --git a/npc/quests/first_class/tu_sword.txt b/npc/quests/first_class/tu_sword.txt index 6ae1d7c08c..c3f7b2b1c3 100644 --- a/npc/quests/first_class/tu_sword.txt +++ b/npc/quests/first_class/tu_sword.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= Fix up by Jukka //===== Current Version: ===================================== -//= 1.4 +//= 1.5 //===== Compatible With: ===================================== //= rAthena SVN (Testet in Trunk 88xx) //===== Description: ========================================= @@ -15,6 +15,7 @@ //= 1.2 Fixed a typo on NPC name. [SinSloth] //= 1.3 Fixed experience gains to match upcoming rate adjustments. [SinSloth] //= 1.4 Misc. updates. [L0ne_W0lf] +//= 1.5 Added Renewal Izlude coordinates. //============================================================ // Shurank @@ -1006,7 +1007,10 @@ geffen,154,143,3 script Dequ'ee 734,{ set tu_swordman, 21; changequest 8226,8227; close2; - warp "izlude",35,78; + if (checkre(0)) + warp "izlude",127,100; + else + warp "izlude",35,78; end; } if(tu_swordman == 19){ @@ -2116,7 +2120,10 @@ geffen,154,143,3 script Dequ'ee 734,{ mes "of yourself,"; mes "brave Swordman."; next; - warp "izlude",35,78; + if (checkre(0)) + warp "izlude",127,100; + else + warp "izlude",35,78; close; } case 2: diff --git a/npc/quests/quests_13_1.txt b/npc/quests/quests_13_1.txt index 148abeb7f7..f0594b76a7 100644 --- a/npc/quests/quests_13_1.txt +++ b/npc/quests/quests_13_1.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== -//= 2.6a +//= 2.7 //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= @@ -45,6 +45,7 @@ //= 2.5a Minor fixes. [Euphy] //= 2.6 Disabled "Ash Vacuum Warper" as it's no longer in iRO. [Euphy] //= 2.6a Added 'npcskill' command. [Euphy] +//= 2.7 Updated EXP rewards. //============================================================ // Onward to the New World @@ -294,7 +295,10 @@ prt_castle,83,67,5 script Recruiter for the Brave 109,{ next; changequest 10064,10065; set ep13_ryu,9; - getexp 66000,21000; + if (checkre(0)) + getexp 66000,21000; + else + getexp 660000,210000; mes "[Recruiter]"; mes "Just go there!"; mes "And listen carefully"; @@ -1940,7 +1944,10 @@ moc_fild22b,230,197,5 script Munkenro#2 967,{ next; completequest 10078; set ep13_ryu,100; - getexp 66000,21000; + if (checkre(0)) + getexp 66000,21000; + else + getexp 660000,210000; mes "[Munkenro]"; mes "I will let you go there."; mes "Let me know once you are ready."; @@ -2833,7 +2840,10 @@ mid_camp,261,284,4 script Instructor#ep13bs 405,{ set ep13_newbs,100; getitem 617,1; //Old_Violet_Box getitem 12322,5; //Chocolate_Pie - getexp 100000,10000; + if (checkre(0)) + getexp 100000,10000; + else + getexp 1000000,100000; completequest 11100; close; } @@ -4363,7 +4373,10 @@ mid_camp,188,254,3 script Monster Scholar#ep13 883,{ mes "I hope you'll make yourself known in Ash Vacuum with your great accomplishments."; set ep13_animal,15; completequest 2157; - getexp 150000,0; + if (checkre(0)) + getexp 100000,0; + else + getexp 1500000,0; close; } else { @@ -4461,7 +4474,10 @@ mid_camp,188,254,3 script Monster Scholar#ep13 883,{ mes "- You pat his shoulder gently, it's worrying that Rumis is not able to return to his country. -"; set ep13_animal,100; delitem 6033,1; //Horn_Of_Tendrilion - getexp 100000,0; + if (checkre(0)) + getexp 50000,0; + else + getexp 1000000,0; close; } else { @@ -5293,7 +5309,10 @@ mid_camp,212,237,5 script Camp Guard Captain#man1 852,{ mes "I'll discuss this more with the expedition management."; mes "Thank you for your valuable information."; completequest 2158; - getexp 70000,0; + if (checkre(0)) + getexp 90000,0; + else + getexp 900000,0; close; } else if (checkquest(2158) == -1) { @@ -5302,28 +5321,6 @@ mid_camp,212,237,5 script Camp Guard Captain#man1 852,{ mes "Sorry to bother you."; close; } - else if (checkquest(2158) == 2) { - if (checkquest(2159) == 1) { - mes "- You report your encounter with a tree giant in the Manuk area to the guard captain. -"; - next; - mes "[Captain]"; - mes "That sounds very important."; - mes "It's too early to say this, but we might have to dispatch an investigation group to the area."; - next; - mes "[Captain]"; - mes "I'll discuss this more with the expedition management."; - mes "Thank you for your valuable information."; - completequest 2159; - getexp 70000,0; - close; - } - else { - mes "["+strcharinfo(0)+"]"; - mes "Oh, nothing."; - mes "Sorry to bother you."; - close; - } - } else { if (checkquest(2159) == 1) { mes "- You report your encounter with a tree giant in the Manuk area to the guard captain. -"; @@ -5336,7 +5333,10 @@ mid_camp,212,237,5 script Camp Guard Captain#man1 852,{ mes "I'll discuss this more with the expedition management."; mes "Thank you for your valuable information."; completequest 2159; - getexp 70000,0; + if (checkre(0)) + getexp 90000,0; + else + getexp 900000,0; close; } else { @@ -5762,7 +5762,10 @@ OnTouch: mes "- You feel so refreshed and light, as you drink the tea that the Official offered. -"; specialeffect2 EF_ABSORBSPIRITS; set ep13_1_rhea,100; - getexp 30000,10000; + if (checkre(0)) + getexp 80000,3000; + else + getexp 300000,10000; completequest 8210; next; mes "[United Research Official]"; @@ -7579,7 +7582,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{ next; delitem 579,50; //Delicious_Fish set ep13_alba,6; - getexp 8000,3000; + if (checkre(0)) + getexp 8000,3000; + else + getexp 80000,30000; erasequest 7042; setquest 7047; mes "^4d4dff You have received 8,000 EXP"; @@ -7612,7 +7618,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{ delitem 7198,30; //Great_Leaf delitem 7188,30; //Browny_Root set ep13_alba,6; - getexp 9000,4000; + if (checkre(0)) + getexp 9000,4000; + else + getexp 90000,40000; erasequest 7043; setquest 7047; mes "^4d4dff You have received 9,000 EXP"; @@ -7650,7 +7659,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{ delitem 528,20; //Monster's_Feed delitem 537,30; //Pet_Food set ep13_alba,6; - getexp 8000,3000; + if (checkre(0)) + getexp 8000,3000; + else + getexp 80000,30000; erasequest 7044; setquest 7047; mes "^4d4dff You have received 8,000 EXP"; @@ -7685,7 +7697,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{ delitem 517,50; //Meat delitem 537,30; //Pet_Food set ep13_alba,6; - getexp 8000,3000; + if (checkre(0)) + getexp 8000,3000; + else + getexp 80000,30000; erasequest 7045; setquest 7047; mes "^4d4dff You have received 8,000 EXP"; @@ -7717,7 +7732,10 @@ mid_camp,143,306,5 script Breeder Taab#ep13_alba 946,{ next; delitem 6020,30; //Fur set ep13_alba,6; - getexp 8000,3000; + if (checkre(0)) + getexp 8000,3000; + else + getexp 80000,30000; erasequest 7046; setquest 7047; mes "^4d4dff You have received 8,000 EXP"; @@ -8024,7 +8042,7 @@ function Catwarp; close; } } - else if ((ep13_yong1 > 39) && (ep13_yong1 < 200)) { + else if ((ep13_yong1 > 39) && (ep13_yong1 < 100)) { mes "[Cat Hand Agent]"; mes "Cat Trading's available services are as followed."; mes "For additional services, please consult Agent Gyaruk."; @@ -8469,7 +8487,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{ mes "You've brough Pieces of Fish!"; mes "GOOD JOB!"; delitem 6039,10; //Piece_Of_Fish - getexp 3000,0; + getexp 20000,0; set ep13_yong1,10; setquest 12060; next; @@ -8489,7 +8507,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{ mes "You've brough Pieces of Fish!"; mes "GOOD JOB!"; delitem 6039,10; //Piece_Of_Fish - getexp 1500,0; + getexp 15000,0; setquest 12060; set ep13_yong1,ep13_yong1+1; next; @@ -8510,7 +8528,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{ mes "You've brough Pieces of Fish!"; mes "GOOD JOB!"; delitem 6039,10; //Piece_Of_Fish - getexp 1500,0; + getexp 15000,0; setquest 12060; set ep13_yong1,ep13_yong1+1; next; @@ -8530,7 +8548,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{ mes "You've brough Pieces of Fish!"; mes "GOOD JOB!"; delitem 6039,10; //Piece_Of_Fish - getexp 1500,0; + getexp 15000,0; setquest 12060; set ep13_yong1,ep13_yong1+1; next; @@ -8552,7 +8570,7 @@ mid_camp,69,144,0 script Ferocious Gorurug 421,{ mes "You've brough Pieces of Fish!"; mes "GOOD JOB!"; delitem 6039,10; //Piece_Of_Fish - getexp 1500,0; + getexp 15000,0; setquest 12060; set ep13_yong1,ep13_yong1+1; next; @@ -8716,7 +8734,7 @@ mid_camp,88,100,55 script Cat Hand Mining Agent 876,{ mes "Thank you for collecting minerals for me."; next; delitem 6048,3; //Unidentified_Mineral - getexp 3000,0; + getexp 20000,0; setquest 12062; set ep13_yong1,ep13_yong1+1; select("I'm freezing! Take them quickly."); @@ -9231,7 +9249,10 @@ mid_campin,90,121,5 script Hibba Agip 459,{ mes "And please take this small reward."; mes "Thank you for your help so far."; next; - getexp 3750000,0; + if (checkre(0)) + getexp 30000,0; + else + getexp 2500000,0; getitem 12110,3; //First_Aid_Kit set ep13_1_edq,14; completequest 3094; @@ -11627,7 +11648,10 @@ mid_campin,68,185,3 script Pursuit Party Leader#1 803,{ mes "[Echinacea]"; mes "Keep up the good work assisting the explorers in this camp."; set mao_morocc2,100; - getexp 120000,20000; + if (checkre(0)) + getexp 120000,20000; + else + getexp 1200000,200000; getitem 617,1; //Old_Violet_Box completequest 7036; close; @@ -12004,7 +12028,10 @@ mid_camp,199,311,7 script Mr. Kidd#ep13_dan01 884,{ delitem 6029,1; //Morocc_Tracing_Log delitem 6027,1; //Crystal_Of_Feardoom set mao_morocc2,10; - getexp 20000,1000; + if (checkre(0)) + getexp 20000,1000; + else + getexp 200000,10000; changequest 7018,7019; close2; } diff --git a/npc/quests/quests_13_2.txt b/npc/quests/quests_13_2.txt index f2c64d2d8d..c3ca8b458e 100644 --- a/npc/quests/quests_13_2.txt +++ b/npc/quests/quests_13_2.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== -//= 2.4a +//= 2.5 //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= @@ -14,7 +14,7 @@ //= Daily Quests: //= - Bradium Collection //= - Laphine Craftsman -//= - Drago Egg Collection (npc includes 'Wanted' quest) +//= - Draco Egg Collection (npc includes 'Wanted' quest) //= Otherworld language //= Daily Quests: //= - Midgard Ore @@ -43,6 +43,7 @@ //= 2.3 Fixed EF_Wind not showing. (bugreport:5149) [Masao] //= 2.4 Optimized (6000+ lines reduced!). [Euphy] //= 2.4a Fixed an invisible NPC clashing with a warp portal. [Euphy] +//= 2.5 Updated EXP rewards. //============================================================ // Cat Hand Addition. @@ -2452,7 +2453,10 @@ spl_in02,236,92,5 script Arc#ep13md_l02 447,{ mes "I'm sorry this is all I can give you for now."; set ep13_mdrama,27; getitem 6081,25; //Splendide_Coin - getexp 120000,10000; + if (checkre(0)) + getexp 120000,10000; + else + getexp 1200000,100000; completequest 7071; close; } @@ -2771,7 +2775,10 @@ manuk,252,116,3 script Manuk Galtun#ep13_2day 450,{ completequest 7074; completequest 7075; set ep13_2_days01,2; - getexp 50000,30000; + if (checkre(0)) + getexp 50000,30000; + else + getexp 500000,300000; getitem 6080,10; //Manuk_Coin close; } @@ -2805,7 +2812,7 @@ manuk,252,116,3 script Manuk Galtun#ep13_2day 450,{ // Daily Quests // - Bradium Collection // - Laphine Craftsman -// - Drago Egg Collection (npc includes 'Wanted' quest) +// - Draco Egg Collection (NPC includes 'Wanted' quest) //============================================================ man_in01,378,276,3 script Manuk Engineer#ep13_2 453,{ if (checkweight(1201,2) == 0) { @@ -2845,7 +2852,7 @@ man_in01,378,276,3 script Manuk Engineer#ep13_2 453,{ delitem 6090,20; //Purified_Bradium erasequest 7079; setquest 7080; - getexp 4000,4000; + getexp 40000,40000; getitem 6080,3; //Manuk_Coin close; } @@ -2954,7 +2961,7 @@ spl_in01,97,313,3 script Laphine Craftsman#ep13 446,{ delitem 6075,15; //Crystalized_Teardrop erasequest 7081; setquest 7082; - getexp 3000,3000; + getexp 30000,30000; getitem 6081,3; //Splendide_Coin close; } @@ -3159,7 +3166,7 @@ mid_camp,146,306,3 script Pet Breeder#ep13_eden01 982,{ erasequest 7077; setquest 7078; set ep13_2_dayegg,2; - getexp 4000,4000; + getexp 40000,40000; getitem 6081,1; //Splendide_Coin getitem 6080,1; //Manuk_Coin close; @@ -3739,7 +3746,10 @@ mid_camp,197,237,3 script Schwartzvalt Mechanic#1 869,{ mes "I hope this ring would be a big help for your journey through the other world."; completequest 8253; set ep13_2_rhea,100; - getexp 100000,30000; + if (checkre(0)) + getexp 200000,5000; + else + getexp 1000000,300000; getitem 2782,1; //Ring_Of_Wise_King close; } @@ -4832,8 +4842,9 @@ man_in01,372,221,5 script Scientist#lifeguard 449,{ delitem 6077,.@stone_chk; //Rough_Mineral delitem 6078,.@stoneelse_chk; //Stone_Fragments delitem 6076,1; //Portable_Toolbox - getitem 6080,2; //Manuk_Coin - getexp 0,70000; + getitem 6080,3; //Manuk_Coin + if (checkre(0) == 0) + getexp 0,700000; changequest 2179+(ep13_2_tre-2),2182; set ep13_2_tre,100; close; @@ -5699,8 +5710,9 @@ spl_in01,30,324,3 script High Laphine#grenouille 446,{ mes "If you have something to talk to me about, come to me whenever. Nice to meet you, human from Rune Midgard."; set ep13_2_tre1,6; changequest 2185,2186; - getitem 6081,2; //Splendide_Coin - getexp 0,70000; + getitem 6081,3; //Splendide_Coin + if (checkre(0) == 0) + getexp 0,700000; close; } else { diff --git a/npc/re/guides/guides_izlude.txt b/npc/re/guides/guides_izlude.txt index b3f4cd4b06..ff651f25d9 100644 --- a/npc/re/guides/guides_izlude.txt +++ b/npc/re/guides/guides_izlude.txt @@ -3,15 +3,16 @@ //===== By: ================================================== //= L0ne_W0lf //===== Current Version: ===================================== -//= 1.1 +//= 1.2 //===== Compatible With: ===================================== -//= rAthena SVN +//= rAthena SVN //===== Description: ========================================= //= [Official Conversion] //= Guides for the city of Izlude //===== Additional Comments: ================================= //= 1.0 First version, Renewal guide. //= 1.1 Updated to match the new Izlude Map. [Masao] +//= 1.2 Added Renewal Izlude viewpoint coordinates. //============================================================ - script Guide#01izlude::GuideIzlude -1,{ @@ -35,7 +36,7 @@ mes "on Byalan Island since it is"; mes "filled with dreadful monsters."; mes "Would you like to check any other locations?"; - viewpoint 1,200,180,0,0xFF0000; + viewpoint 1,197,205,0,0xFF0000; next; break; case 2: @@ -45,7 +46,7 @@ mes "Let me mark its location"; mes "on your mini-map."; mes "Would you like to check any other locations?"; - viewpoint 1,145,39,1,0x0A82FF; + viewpoint 1,204,75,1,0x0A82FF; next; break; case 3: @@ -64,7 +65,7 @@ mes "Let me mark the location of the ^006400Tool Shop^000000"; mes "on your mini-map."; mes "Would you like to check any other locations?"; - viewpoint 1,148,148,3,0xAAFF00; + viewpoint 1,160,125,3,0xAAFF00; next; break; case 5: @@ -72,7 +73,7 @@ mes "Let me mark the location of the ^7F3300Weapon & Armor Shop^000000"; mes "on your mini-map."; mes "Would you like to check any other locations?"; - viewpoint 1,114,149,4,0xD2691E; + viewpoint 1,109,182,4,0xD2691E; next; break; case 6: @@ -81,7 +82,7 @@ mes "Let me mark its location"; mes "on your mini-map."; mes "Would you like to check any other locations?"; - viewpoint 1,52,140,5,0xDA70D6; + viewpoint 1,52,172,5,0xDA70D6; next; break; case 7: @@ -89,7 +90,7 @@ mes "Let me mark the location of the ^B9062FSwordsman Association^000000"; mes "on your mini-map."; mes "Would you like to check any other locations?"; - viewpoint 1,214,130,6,0xFF0000; + viewpoint 1,212,161,6,0xFF0000; next; break; case 8: @@ -109,7 +110,7 @@ mes "the Swordsman Guild building."; mes "Let me mark his location on your mini-map."; mes "Would you like to check any other locations?"; - viewpoint 1,52,140,7,0x0A82FF; + viewpoint 1,131,148,7,0x0A82FF; next; break; case 2: @@ -118,7 +119,7 @@ mes "^FF5400Kafra Employee^000000"; mes "on your mini-map."; mes "Would you like to check any other locations?"; - viewpoint 1,134,88,8,0xFF5400; + viewpoint 1,128,148,8,0xFF5400; next; break; case 3: @@ -127,7 +128,7 @@ mes "^8B4513Jawaii^000000, the paradise of newlyweds,"; mes "please speak to the ^B9062FNewlywed Helper^000000."; mes "Would you like to check any other locations?"; - viewpoint 1,171,185,9,0xFF0000; + viewpoint 1,102,150,9,0xFF0000; next; break; case 4: @@ -137,7 +138,7 @@ mes "Let me mark his location"; mes "on your mini-map."; mes "Would you like to check any other locations?"; - viewpoint 1,171,130,10,0xD2691E; + viewpoint 1,158,130,10,0xD2691E; next; break; case 5: @@ -146,7 +147,7 @@ mes "^0000FFMercenary Goods Merchant^000000"; mes "on your mini-map."; mes "Would you like to check any other locations?"; - viewpoint 1,48,137,11,0xDA70D6; + viewpoint 1,56,169,11,0xDA70D6; next; break; case 6: diff --git a/npc/re/mobs/fields/ayothaya.txt b/npc/re/mobs/fields/ayothaya.txt index 896435a202..bb2e0e6fe4 100644 --- a/npc/re/mobs/fields/ayothaya.txt +++ b/npc/re/mobs/fields/ayothaya.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= Athena (1.0) //===== Current Version: ===================================== -//= 1.5 +//= 1.6 //===== Compatible With: ===================================== //= Any Athena Version //===== Additional Comments: ================================= @@ -12,6 +12,7 @@ //= 1.3 Removed Choco [Lupus] //= 1.4 Official kRO 10.1 spawns [Playtester] //= 1.5 Updated to Renewal Spawns [Kisuka] +//= 1.6 Renewal spawn update. //============================================================ //================================================== @@ -20,7 +21,7 @@ ayo_fild01,0,0,0,0 monster Smokie 1056,30,5000,0,0 ayo_fild01,0,0,0,0 monster Coco 1104,30,5000,0,0 ayo_fild01,0,0,0,0 monster Yoyo 1057,30,5000,0,0 -ayo_fild01,0,0,0,0 monster Green Plant 1080,10,5000,0,0 +ayo_fild01,0,0,0,0 monster Green Plant 1080,10,10000,0,0 //================================================== // ayo_fild02 - Ayothaya Field @@ -28,4 +29,4 @@ ayo_fild01,0,0,0,0 monster Green Plant 1080,10,5000,0,0 ayo_fild02,0,0,0,0 monster Yoyo 1057,45,5000,0,0 ayo_fild02,0,0,0,0 monster Leaf Cat 1586,35,5000,0,0 ayo_fild02,0,0,0,0 monster Kraben 1587,5,5000,0,0 -ayo_fild02,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0 +ayo_fild02,0,0,0,0 monster Yellow Plant 1081,10,10000,0,0 diff --git a/npc/re/mobs/fields/brasilis.txt b/npc/re/mobs/fields/brasilis.txt index 923fa6ccc8..15e9646a2d 100644 --- a/npc/re/mobs/fields/brasilis.txt +++ b/npc/re/mobs/fields/brasilis.txt @@ -11,7 +11,7 @@ //============================================================ //================================================== -// bra_fild01 +// bra_fild01 - Brasilis Field //================================================== bra_fild01,0,0,0,0 monster Curupira 2074,50,5000,0,0 bra_fild01,0,0,0,0 monster Dokebi 1110,10,5000,0,0 diff --git a/npc/re/mobs/fields/louyang.txt b/npc/re/mobs/fields/louyang.txt index fd645faf35..2dce16fb97 100644 --- a/npc/re/mobs/fields/louyang.txt +++ b/npc/re/mobs/fields/louyang.txt @@ -3,13 +3,14 @@ //===== By: ================================================== //= Evera/Lorri //===== Current Version: ===================================== -//= 1.3 +//= 1.4 //===== Compatible With: ===================================== //= Any Athena Version //===== Additional Comments: ================================= //= 1.1 updated by MasterOfMuppets //= 1.2 Official kRO 10.1 spawns [Playtester] //= 1.3 Updated to Renewal Spawns [Kisuka] +//= 1.4 Renewal spawn update. //============================================================ //================================================== @@ -19,4 +20,4 @@ lou_fild01,0,0,0,0 monster Mi Gao 1516,40,5000,0,0 lou_fild01,0,0,0,0 monster Mantis 1139,19,5000,0,0 lou_fild01,0,0,0,0 monster Geographer 1368,19,5000,0,0 lou_fild01,0,0,0,0 monster Black Mushroom 1084,5,5000,0,0 -lou_fild01,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0 +lou_fild01,0,0,0,0 monster Yellow Plant 1081,10,10000,0,0 diff --git a/npc/re/mobs/fields/malaya.txt b/npc/re/mobs/fields/malaya.txt index 908bf16fd2..e9b590d491 100644 --- a/npc/re/mobs/fields/malaya.txt +++ b/npc/re/mobs/fields/malaya.txt @@ -3,27 +3,28 @@ //===== By: ================================================== //= Chilly //===== Current Version: ===================================== -//= 1.0 +//= 1.1 //===== Compatible With: ===================================== //= rAthena SVN //===== Description: ========================================= //= Official kRO monster spawns //===== Additional Comments: ================================= //= 1.0 First Release +//= 1.1 Renewal spawn update. //============================================================ //================================================== // ma_fild01 - Barrio Maligawa //================================================== -ma_fild01,0,0,0,0 monster Tikbalang 2313,70,0,0,0 -ma_fild01,0,0,0,0 monster Tiyanak 2314,50,0,0,0 -ma_fild01,0,0,0,0 monster Jejeling 2316,30,0,0,0 +ma_fild01,0,0,0,0 monster Tikbalang 2313,50,0,0,0 +ma_fild01,0,0,0,0 monster Tiyanak 2314,40,0,0,0 +ma_fild01,0,0,0,0 monster Jejeling 2316,20,0,0,0 //================================================== // ma_fild02 - Malaya Forest //================================================== -ma_fild02,0,0,0,0 monster Bungisngis 2309,70,0,0,0 -ma_fild02,0,0,0,0 monster Engkanto 2310,50,0,0,0 +ma_fild02,0,0,0,0 monster Bungisngis 2309,40,0,0,0 +ma_fild02,0,0,0,0 monster Engkanto 2310,15,0,0,0 ma_fild02,0,0,0,0 monster Mangkukulam 2312,20,0,0,0 ma_fild02,0,0,0,0 monster Jejeling 2316,10,0,0,0 -ma_fild02,0,0,0,0 monster Wakwak 2315,10,0,0,0 +ma_fild02,0,0,0,0 monster Wakwak 2315,25,0,0,0 diff --git a/npc/re/mobs/fields/moscovia.txt b/npc/re/mobs/fields/moscovia.txt index 1edaf04641..8f65bf222a 100644 --- a/npc/re/mobs/fields/moscovia.txt +++ b/npc/re/mobs/fields/moscovia.txt @@ -3,12 +3,13 @@ //===== By: ================================================== //= Athena (1.0) //===== Current Version: ===================================== -//= 1.1 +//= 1.2 //===== Compatible With: ===================================== //= Any Athena Version //===== Additional Comments: ================================= //= 1.0 Added spawns [Playtester] //= 1.1 Updated to Renewal Spawns [Kisuka] +//= 1.2 Renewal spawn update. //============================================================ //================================================== @@ -18,5 +19,5 @@ mosk_fild02,0,0,0,0 monster Side Winder 1037,40,5000,0,0 mosk_fild02,0,0,0,0 monster Argiope 1099,30,5000,0,0 mosk_fild02,0,0,0,0 monster Mantis 1139,10,5000,0,0 mosk_fild02,0,0,0,0 monster Geographer 1368,5,5000,0,0 -mosk_fild02,0,0,0,0 monster Yellow Plant 1081,5,5000,0,0 +mosk_fild02,0,0,0,0 monster Yellow Plant 1081,5,10000,0,0 mosk_fild02,0,0,0,0 monster White Plant 1082,5,10000,0,0 diff --git a/npc/re/mobs/fields/prontera.txt b/npc/re/mobs/fields/prontera.txt index c2c2d7852b..5b4a37309f 100644 --- a/npc/re/mobs/fields/prontera.txt +++ b/npc/re/mobs/fields/prontera.txt @@ -51,7 +51,7 @@ prt_fild03,0,0,0,0 monster Choco 1214,1,5000,0,0 prt_fild03,296,58,15,15 monster Green Plant 1080,5,180000,90000,1 prt_fild03,296,58,15,15 monster Blue Plant 1079,2,900000,450000,1 prt_fild03,307,75,5,5 monster Green Plant 1080,5,360000,180000,1 -prt_fild03,0,0,0,0 monster Green Plant 1080,5,360000,180000,1 +prt_fild03,147,219,5,5 monster Green Plant 1080,5,360000,180000,1 prt_fild03,148,107,5,5 monster Green Plant 1080,5,360000,180000,1 //================================================== @@ -77,7 +77,7 @@ prt_fild05,208,37,10,10 monster Blue Plant 1079,1,900000,450000,1 prt_fild06,0,0,0,0 monster Fabre 1007,140,5000,0,0 prt_fild06,0,0,0,0 monster Poring 1002,30,5000,0,0 prt_fild06,0,0,0,0 monster Lunatic 1063,30,5000,0,0 -//prt_fild06,222,30,40,10 monster Green Plant 1080,15,900000,450000,1 // Commented the Line since those Plants can't spawn anyway. Maybe Gravity will fix it someday... [Masao] +prt_fild06,222,30,40,10 monster Green Plant 1080,15,900000,450000,1 //================================================== // prt_fild07 - Prontera Field diff --git a/npc/re/mobs/fields/rachel.txt b/npc/re/mobs/fields/rachel.txt index 92708aa5e1..286bfda3ab 100644 --- a/npc/re/mobs/fields/rachel.txt +++ b/npc/re/mobs/fields/rachel.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= Athena (1.0) //===== Current Version: ===================================== -//= 1.4 +//= 1.5 //===== Compatible With: ===================================== //= Any Athena Version //===== Additional Comments: ================================= @@ -12,6 +12,7 @@ //= 1.2 More accurate spawns [Playtester] //= 1.3 Corrected MVP spawn variance. [L0ne_W0lf] //= 1.4 Updated to Renewal Spawns [Kisuka] +//= 1.5 Renewal spawn update. //============================================================ //================================================== @@ -93,8 +94,8 @@ ra_fild08,0,0,0,0 monster Anopheles 1627,10,5000,0,0 ra_fild12,0,0,0,0 monster Roween 1782,130,5000,0,0 ra_fild12,0,0,0,0 monster Anopheles 1627,30,5000,0,0 ra_fild12,0,0,0,0 monster Baby Desert Wolf 1107,15,5000,0,0 -ra_fild12,0,0,0,0 monster Yellow Plant 1081,15,5000,0,1 -ra_fild12,0,0,0,0 monster Red Plant 1078,5,5000,0,1 +ra_fild12,0,0,0,0 monster Yellow Plant 1081,15,10000,0,1 +ra_fild12,0,0,0,0 monster Red Plant 1078,5,10000,0,1 //================================================== // ra_fild13 - Disabled on Renewal diff --git a/npc/re/mobs/fields/umbala.txt b/npc/re/mobs/fields/umbala.txt index 85c4dafb8f..9f76da9fb4 100644 --- a/npc/re/mobs/fields/umbala.txt +++ b/npc/re/mobs/fields/umbala.txt @@ -56,4 +56,3 @@ um_fild04,0,0,0,0 monster Wooden Golem 1497,10,5000,0,0 um_fild04,0,0,0,0 monster Choco 1214,2,5000,0,0 um_fild04,0,0,0,0 monster Red Plant 1078,5,180000,90000,1 um_fild04,0,0,0,0 monster Yellow Plant 1081,5,180000,90000,1 -um_fild01,0,0,0,0 monster Shining Plant 1083,1,180000,90000,1 diff --git a/npc/re/mobs/fields/veins.txt b/npc/re/mobs/fields/veins.txt index 0ab4ecf588..646668292b 100644 --- a/npc/re/mobs/fields/veins.txt +++ b/npc/re/mobs/fields/veins.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= $ephiroth //===== Current Version: ===================================== -//= 1.8 +//= 1.9 //===== Compatible With: ===================================== //= Any Athena Version //===== Additional Comments: ================================= @@ -16,6 +16,7 @@ //= 1.6 Even more accurate spawns [Playtester] //= 1.7 Corrected MVP spawn variance. [Gepard] //= 1.8 Updated to Renewal Spawns. [Kisuka] +//= 1.9 Renewal spawn update. //============================================================ //================================================== @@ -38,8 +39,8 @@ ve_fild02,0,0,0,0 monster Drosera 1781,130,5000,0,0 ve_fild02,0,0,0,0 monster Muscipular 1780,20,5000,0,0 ve_fild02,0,0,0,0 monster Galion 1783,10,5000,0,0 ve_fild02,120,55,50,50 boss_monster Atroce 1785,1,21600000,600000,0 -ve_fild02,0,0,0,0 monster Red Plant 1078,10,5000,0,0 -ve_fild02,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0 +ve_fild02,0,0,0,0 monster Red Plant 1078,10,10000,0,0 +ve_fild02,0,0,0,0 monster Yellow Plant 1081,10,10000,0,0 //================================================== // ve_fild03 - Veins Field @@ -47,8 +48,8 @@ ve_fild02,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0 ve_fild03,0,0,0,0 monster Magmaring 1836,130,5000,0,0 ve_fild03,0,0,0,0 monster Muscipular 1780,35,5000,0,0 ve_fild03,0,0,0,0 monster Drosera 1781,35,5000,0,0 -ve_fild03,200,212,114,60 monster Red Plant 1078,10,0,0,0 -ve_fild03,0,0,0,0 monster Yellow Plant 1081,10,0,0,0 +ve_fild03,200,212,114,60 monster Red Plant 1078,10,10000,0,0 +ve_fild03,0,0,0,0 monster Yellow Plant 1081,10,10000,0,0 //================================================== // ve_fild04 - Veins Field @@ -56,6 +57,7 @@ ve_fild03,0,0,0,0 monster Yellow Plant 1081,10,0,0,0 ve_fild04,0,0,0,0 monster Muscipular 1780,100,5000,0,0 ve_fild04,0,0,0,0 monster Drosera 1781,50,5000,0,0 ve_fild04,0,0,0,0 monster Galion 1783,20,5000,0,0 +ve_fild04,0,0,0,0 monster Yellow Plant 1081,10,10000,0,0 ve_fild04,288,273,4,4 monster Blue Plant 1079,3,660000,0,0 //================================================== @@ -65,7 +67,7 @@ ve_fild04,288,273,4,4 monster Blue Plant 1079,3,660000,0,0 //================================================== // ve_fild06 - Veins Field - No spawns on Renewal //================================================== -ve_fild06,0,0,0,0 monster Shining Plant 1083,1,5000,0,0 +//ve_fild06,0,0,0,0 monster Shining Plant 1083,1,5000,0,0 //================================================== // ve_fild07 - Veins Field diff --git a/npc/re/mobs/fields/yuno.txt b/npc/re/mobs/fields/yuno.txt index b5ea8aea23..74696b7ecb 100644 --- a/npc/re/mobs/fields/yuno.txt +++ b/npc/re/mobs/fields/yuno.txt @@ -3,7 +3,7 @@ //===== By: ================================================== //= Athena (1.0) //===== Current Version: ===================================== -//= 2.0 +//= 2.1 //===== Compatible With: ===================================== //= Any Athena Version //===== Additional Comments: ================================= @@ -21,6 +21,7 @@ //= 1.8 Added kRO 10.1 spawns where they fit [Playtester] //= 1.9 More accurate spawns [Playtester] //= 2.0 Updated spawns to renewal. [L0ne_W0lf] +//= 2.1 Renewal spawn update. //============================================================ //================================================== @@ -84,8 +85,8 @@ yuno_fild04,0,0,0,0 monster Green Plant 1080,10,1800000,900000,1 yuno_fild06,0,0,0,0 monster Sleeper 1386,80,5000,0,0 yuno_fild06,0,0,0,0 monster Geographer 1368,20,5000,0,0 yuno_fild06,0,0,0,0 monster Red Plant 1078,10,5000,0,0 -yuno_fild06,0,0,0,0 monster Yellow Plant 1081,10,5000,0,0 -yuno_fild06,0,0,0,0 monster Green Plant 1080,10,5000,0,0 +yuno_fild06,0,0,0,0 monster Yellow Plant 1081,10,10000,0,0 +yuno_fild06,0,0,0,0 monster Green Plant 1080,10,10000,0,0 //================================================== // yuno_fild07 - El Mes Gorge (Valley of Abyss) diff --git a/npc/re/quests/quests_dicastes.txt b/npc/re/quests/quests_dicastes.txt index 779e8f2185..016ef2b447 100644 --- a/npc/re/quests/quests_dicastes.txt +++ b/npc/re/quests/quests_dicastes.txt @@ -6688,6 +6688,7 @@ man_in01,315,52,3 script Guard Captain Avalanche 450,{ mes "[Avalanche]"; mes "Always take care of yourself at all times."; mes "Haha.. but then you humans are very strong."; + close; } dic_in01,42,264,3 script Adventurer Clerk#ep133 453,{ diff --git a/src/map/battle.c b/src/map/battle.c index b467999874..48ff9e4778 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -211,6 +211,7 @@ struct delay_damage { uint16 skill_id; enum damage_lv dmg_lv; unsigned short attack_type; + bool additional_effects; }; int battle_delay_damage_sub(int tid, unsigned int tick, int id, intptr_t data) { @@ -233,7 +234,7 @@ int battle_delay_damage_sub(int tid, unsigned int tick, int id, intptr_t data) { { map_freeblock_lock(); status_fix_damage(src, target, dat->damage, dat->delay); - if( dat->attack_type && !status_isdead(target) ) + if( dat->attack_type && !status_isdead(target) && dat->additional_effects ) skill_additional_effect(src,target,dat->skill_id,dat->skill_lv,dat->attack_type,dat->dmg_lv,tick); if( dat->dmg_lv > ATK_BLOCK && dat->attack_type ) skill_counter_additional_effect(src,target,dat->skill_id,dat->skill_lv,dat->attack_type,tick); @@ -251,7 +252,7 @@ int battle_delay_damage_sub(int tid, unsigned int tick, int id, intptr_t data) { return 0; } -int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src, struct block_list *target, int attack_type, uint16 skill_id, uint16 skill_lv, int damage, enum damage_lv dmg_lv, int ddelay) +int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src, struct block_list *target, int attack_type, uint16 skill_id, uint16 skill_lv, int damage, enum damage_lv dmg_lv, int ddelay, bool additional_effects) { struct delay_damage *dat; struct status_change *sc; @@ -266,7 +267,7 @@ int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src, if ( !battle_config.delay_battle_damage || amotion <= 1 ) { map_freeblock_lock(); status_fix_damage(src, target, damage, ddelay); // We have to seperate here between reflect damage and others [icescope] - if( attack_type && !status_isdead(target) ) + if( attack_type && !status_isdead(target) && additional_effects ) skill_additional_effect(src, target, skill_id, skill_lv, attack_type, dmg_lv, gettick()); if( dmg_lv > ATK_BLOCK && attack_type ) skill_counter_additional_effect(src, target, skill_id, skill_lv, attack_type, gettick()); @@ -283,6 +284,7 @@ int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src, dat->dmg_lv = dmg_lv; dat->delay = ddelay; dat->distance = distance_bl(src, target)+10; //Attack should connect regardless unless you teleported. + dat->additional_effects = additional_effects; if (src->type != BL_PC && amotion > 1000) amotion = 1000; //Aegis places a damage-delay cap of 1 sec to non player attacks. [Skotlex] @@ -4679,7 +4681,7 @@ int battle_damage_area( struct block_list *bl, va_list ap) { if( src->type == BL_PC ) battle_drain((TBL_PC*)src, bl, damage, damage, status_get_race(bl), is_boss(bl)); if( amotion ) - battle_delay_damage(tick, amotion,src,bl,0,CR_REFLECTSHIELD,0,damage,ATK_DEF,0); + battle_delay_damage(tick, amotion,src,bl,0,CR_REFLECTSHIELD,0,damage,ATK_DEF,0,true); else status_fix_damage(src,bl,damage,0); clif_damage(bl,bl,tick,amotion,dmotion,damage,1,ATK_BLOCK,0); @@ -4916,7 +4918,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t } map_freeblock_lock(); - battle_delay_damage(tick, wd.amotion, src, target, wd.flag, 0, 0, damage, wd.dmg_lv, wd.dmotion); + battle_delay_damage(tick, wd.amotion, src, target, wd.flag, 0, 0, damage, wd.dmg_lv, wd.dmotion, true); if( tsc ) { if( tsc->data[SC_DEVOTION] ) { struct status_change_entry *sce = tsc->data[SC_DEVOTION]; @@ -5044,7 +5046,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t if (rdamage > 0 && !(tsc && tsc->data[SC_REFLECTDAMAGE])) { //By sending attack type "none" skill_additional_effect won't be invoked. [Skotlex] if(tsd && src != target) battle_drain(tsd, src, rdamage, rdamage, sstatus->race, is_boss(src)); - battle_delay_damage(tick, wd.amotion, target, src, 0, CR_REFLECTSHIELD, 0, rdamage, ATK_DEF, rdelay); + battle_delay_damage(tick, wd.amotion, target, src, 0, CR_REFLECTSHIELD, 0, rdamage, ATK_DEF, rdelay, true); } if (tsc) { diff --git a/src/map/battle.h b/src/map/battle.h index 7f3c22832e..970a268819 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -61,7 +61,7 @@ enum { // Flag of the final calculation BF_SKILLMASK= 0x0f00, }; -int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src, struct block_list *target, int attack_type, uint16 skill_id, uint16 skill_lv, int damage, enum damage_lv dmg_lv, int ddelay); +int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src, struct block_list *target, int attack_type, uint16 skill_id, uint16 skill_lv, int damage, enum damage_lv dmg_lv, int ddelay, bool additional_effects); // Summary normal attack treatment (basic attack) enum damage_lv battle_weapon_attack( struct block_list *bl,struct block_list *target,unsigned int tick,int flag); diff --git a/src/map/map.c b/src/map/map.c index d60561b8b7..4a1383f7a2 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -3319,8 +3319,8 @@ void map_reloadnpc_sub(char *cfgName) if (strcmpi(w1, "npc") == 0) npc_addsrcfile(w2); - else if( strcmpi( w1, "delnpc" ) == 0 ) - npc_delsrcfile( w2 ); + else if (strcmpi(w1, "delnpc") == 0) + npc_delsrcfile(w2); else if (strcmpi(w1, "import") == 0) map_reloadnpc_sub(w2); else diff --git a/src/map/pc.c b/src/map/pc.c index 9946c5efc4..9714f2a64f 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -2014,601 +2014,601 @@ int pc_bonus(struct map_session_data *sd,int type,int val) status = &sd->base_status; switch(type){ - case SP_STR: - case SP_AGI: - case SP_VIT: - case SP_INT: - case SP_DEX: - case SP_LUK: - if(sd->state.lr_flag != 2) - sd->param_bonus[type-SP_STR]+=val; - break; - case SP_ATK1: - if(!sd->state.lr_flag) { - bonus = status->rhw.atk + val; - status->rhw.atk = cap_value(bonus, 0, USHRT_MAX); - } - else if(sd->state.lr_flag == 1) { - bonus = status->lhw.atk + val; - status->lhw.atk = cap_value(bonus, 0, USHRT_MAX); - } - break; - case SP_ATK2: - if(!sd->state.lr_flag) { - bonus = status->rhw.atk2 + val; - status->rhw.atk2 = cap_value(bonus, 0, USHRT_MAX); - } - else if(sd->state.lr_flag == 1) { - bonus = status->lhw.atk2 + val; - status->lhw.atk2 = cap_value(bonus, 0, USHRT_MAX); - } - break; - case SP_BASE_ATK: - if(sd->state.lr_flag != 2) { -//#ifdef RENEWAL -// sd->bonus.eatk += val; -//#else - bonus = status->batk + val; - status->batk = cap_value(bonus, 0, USHRT_MAX); -//#endif - } - break; - case SP_DEF1: - if(sd->state.lr_flag != 2) { - bonus = status->def + val; -#ifdef RENEWAL - status->def = cap_value(bonus, SHRT_MIN, SHRT_MAX); -#else - status->def = cap_value(bonus, CHAR_MIN, CHAR_MAX); -#endif - } - break; - case SP_DEF2: - if(sd->state.lr_flag != 2) { - bonus = status->def2 + val; - status->def2 = cap_value(bonus, SHRT_MIN, SHRT_MAX); - } - break; - case SP_MDEF1: - if(sd->state.lr_flag != 2) { - bonus = status->mdef + val; -#ifdef RENEWAL - status->mdef = cap_value(bonus, SHRT_MIN, SHRT_MAX); -#else - status->mdef = cap_value(bonus, CHAR_MIN, CHAR_MAX); -#endif - if( sd->state.lr_flag == 3 ) {//Shield, used for royal guard - sd->bonus.shieldmdef += bonus; - } - } - break; - case SP_MDEF2: - if(sd->state.lr_flag != 2) { - bonus = status->mdef2 + val; - status->mdef2 = cap_value(bonus, SHRT_MIN, SHRT_MAX); - } - break; - case SP_HIT: - if(sd->state.lr_flag != 2) { - bonus = status->hit + val; - status->hit = cap_value(bonus, SHRT_MIN, SHRT_MAX); - } else - sd->bonus.arrow_hit+=val; - break; - case SP_FLEE1: - if(sd->state.lr_flag != 2) { - bonus = status->flee + val; - status->flee = cap_value(bonus, SHRT_MIN, SHRT_MAX); - } - break; - case SP_FLEE2: - if(sd->state.lr_flag != 2) { - bonus = status->flee2 + val*10; - status->flee2 = cap_value(bonus, SHRT_MIN, SHRT_MAX); - } - break; - case SP_CRITICAL: - if(sd->state.lr_flag != 2) { - bonus = status->cri + val*10; - status->cri = cap_value(bonus, SHRT_MIN, SHRT_MAX); - } else - sd->bonus.arrow_cri += val*10; - break; - case SP_ATKELE: - if(val >= ELE_MAX) { - ShowError("pc_bonus: SP_ATKELE: Invalid element %d\n", val); + case SP_STR: + case SP_AGI: + case SP_VIT: + case SP_INT: + case SP_DEX: + case SP_LUK: + if(sd->state.lr_flag != 2) + sd->param_bonus[type-SP_STR]+=val; break; - } - switch (sd->state.lr_flag) - { - case 2: - switch (sd->status.weapon) { - case W_BOW: - case W_REVOLVER: - case W_RIFLE: - case W_GATLING: - case W_SHOTGUN: - case W_GRENADE: - //Become weapon element. - status->rhw.ele=val; - break; - default: //Become arrow element. - sd->bonus.arrow_ele=val; - break; + case SP_ATK1: + if(!sd->state.lr_flag) { + bonus = status->rhw.atk + val; + status->rhw.atk = cap_value(bonus, 0, USHRT_MAX); + } + else if(sd->state.lr_flag == 1) { + bonus = status->lhw.atk + val; + status->lhw.atk = cap_value(bonus, 0, USHRT_MAX); } break; - case 1: - status->lhw.ele=val; + case SP_ATK2: + if(!sd->state.lr_flag) { + bonus = status->rhw.atk2 + val; + status->rhw.atk2 = cap_value(bonus, 0, USHRT_MAX); + } + else if(sd->state.lr_flag == 1) { + bonus = status->lhw.atk2 + val; + status->lhw.atk2 = cap_value(bonus, 0, USHRT_MAX); + } break; + case SP_BASE_ATK: + if(sd->state.lr_flag != 2) { + //#ifdef RENEWAL + // sd->bonus.eatk += val; + //#else + bonus = status->batk + val; + status->batk = cap_value(bonus, 0, USHRT_MAX); + //#endif + } + break; + case SP_DEF1: + if(sd->state.lr_flag != 2) { + bonus = status->def + val; + #ifdef RENEWAL + status->def = cap_value(bonus, SHRT_MIN, SHRT_MAX); + #else + status->def = cap_value(bonus, CHAR_MIN, CHAR_MAX); + #endif + } + break; + case SP_DEF2: + if(sd->state.lr_flag != 2) { + bonus = status->def2 + val; + status->def2 = cap_value(bonus, SHRT_MIN, SHRT_MAX); + } + break; + case SP_MDEF1: + if(sd->state.lr_flag != 2) { + bonus = status->mdef + val; + #ifdef RENEWAL + status->mdef = cap_value(bonus, SHRT_MIN, SHRT_MAX); + #else + status->mdef = cap_value(bonus, CHAR_MIN, CHAR_MAX); + #endif + if( sd->state.lr_flag == 3 ) {//Shield, used for royal guard + sd->bonus.shieldmdef += bonus; + } + } + break; + case SP_MDEF2: + if(sd->state.lr_flag != 2) { + bonus = status->mdef2 + val; + status->mdef2 = cap_value(bonus, SHRT_MIN, SHRT_MAX); + } + break; + case SP_HIT: + if(sd->state.lr_flag != 2) { + bonus = status->hit + val; + status->hit = cap_value(bonus, SHRT_MIN, SHRT_MAX); + } else + sd->bonus.arrow_hit+=val; + break; + case SP_FLEE1: + if(sd->state.lr_flag != 2) { + bonus = status->flee + val; + status->flee = cap_value(bonus, SHRT_MIN, SHRT_MAX); + } + break; + case SP_FLEE2: + if(sd->state.lr_flag != 2) { + bonus = status->flee2 + val*10; + status->flee2 = cap_value(bonus, SHRT_MIN, SHRT_MAX); + } + break; + case SP_CRITICAL: + if(sd->state.lr_flag != 2) { + bonus = status->cri + val*10; + status->cri = cap_value(bonus, SHRT_MIN, SHRT_MAX); + } else + sd->bonus.arrow_cri += val*10; + break; + case SP_ATKELE: + if(val >= ELE_MAX) { + ShowError("pc_bonus: SP_ATKELE: Invalid element %d\n", val); + break; + } + switch (sd->state.lr_flag) + { + case 2: + switch (sd->status.weapon) { + case W_BOW: + case W_REVOLVER: + case W_RIFLE: + case W_GATLING: + case W_SHOTGUN: + case W_GRENADE: + //Become weapon element. + status->rhw.ele=val; + break; + default: //Become arrow element. + sd->bonus.arrow_ele=val; + break; + } + break; + case 1: + status->lhw.ele=val; + break; + default: + status->rhw.ele=val; + break; + } + break; + case SP_DEFELE: + if(val >= ELE_MAX) { + ShowError("pc_bonus: SP_DEFELE: Invalid element %d\n", val); + break; + } + if(sd->state.lr_flag != 2) + status->def_ele=val; + break; + case SP_MAXHP: + if(sd->state.lr_flag == 2) + break; + val += (int)status->max_hp; + //Negative bonuses will underflow, this will be handled in status_calc_pc through casting + //If this is called outside of status_calc_pc, you'd better pray they do not underflow and end with UINT_MAX max_hp. + status->max_hp = (unsigned int)val; + break; + case SP_MAXSP: + if(sd->state.lr_flag == 2) + break; + val += (int)status->max_sp; + status->max_sp = (unsigned int)val; + break; + #ifndef RENEWAL_CAST + case SP_VARCASTRATE: + #endif + case SP_CASTRATE: + if(sd->state.lr_flag != 2) + sd->castrate+=val; + break; + case SP_MAXHPRATE: + if(sd->state.lr_flag != 2) + sd->hprate+=val; + break; + case SP_MAXSPRATE: + if(sd->state.lr_flag != 2) + sd->sprate+=val; + break; + case SP_SPRATE: + if(sd->state.lr_flag != 2) + sd->dsprate+=val; + break; + case SP_ATTACKRANGE: + switch (sd->state.lr_flag) { + case 2: + switch (sd->status.weapon) { + case W_BOW: + case W_REVOLVER: + case W_RIFLE: + case W_GATLING: + case W_SHOTGUN: + case W_GRENADE: + status->rhw.range += val; + } + break; + case 1: + status->lhw.range += val; + break; + default: + status->rhw.range += val; + break; + } + break; + case SP_SPEED_RATE: //Non stackable increase + if(sd->state.lr_flag != 2) + sd->bonus.speed_rate = min(sd->bonus.speed_rate, -val); + break; + case SP_SPEED_ADDRATE: //Stackable increase + if(sd->state.lr_flag != 2) + sd->bonus.speed_add_rate -= val; + break; + case SP_ASPD: //Raw increase + if(sd->state.lr_flag != 2) + sd->bonus.aspd_add -= 10*val; + break; + case SP_ASPD_RATE: //Stackable increase - Made it linear as per rodatazone + if(sd->state.lr_flag != 2) + #ifndef RENEWAL_ASPD + status->aspd_rate -= 10*val; + #else + status->aspd_rate2 += val; + #endif + break; + case SP_HP_RECOV_RATE: + if(sd->state.lr_flag != 2) + sd->hprecov_rate += val; + break; + case SP_SP_RECOV_RATE: + if(sd->state.lr_flag != 2) + sd->sprecov_rate += val; + break; + case SP_CRITICAL_DEF: + if(sd->state.lr_flag != 2) + sd->bonus.critical_def += val; + break; + case SP_NEAR_ATK_DEF: + if(sd->state.lr_flag != 2) + sd->bonus.near_attack_def_rate += val; + break; + case SP_LONG_ATK_DEF: + if(sd->state.lr_flag != 2) + sd->bonus.long_attack_def_rate += val; + break; + case SP_DOUBLE_RATE: + if(sd->state.lr_flag == 0 && sd->bonus.double_rate < val) + sd->bonus.double_rate = val; + break; + case SP_DOUBLE_ADD_RATE: + if(sd->state.lr_flag == 0) + sd->bonus.double_add_rate += val; + break; + case SP_MATK_RATE: + if(sd->state.lr_flag != 2) + sd->matk_rate += val; + break; + case SP_IGNORE_DEF_ELE: + if(val >= ELE_MAX) { + ShowError("pc_bonus: SP_IGNORE_DEF_ELE: Invalid element %d\n", val); + break; + } + if(!sd->state.lr_flag) + sd->right_weapon.ignore_def_ele |= 1<state.lr_flag == 1) + sd->left_weapon.ignore_def_ele |= 1<state.lr_flag) + sd->right_weapon.ignore_def_race |= 1<state.lr_flag == 1) + sd->left_weapon.ignore_def_race |= 1<state.lr_flag != 2) + sd->bonus.atk_rate += val; + break; + case SP_MAGIC_ATK_DEF: + if(sd->state.lr_flag != 2) + sd->bonus.magic_def_rate += val; + break; + case SP_MISC_ATK_DEF: + if(sd->state.lr_flag != 2) + sd->bonus.misc_def_rate += val; + break; + case SP_IGNORE_MDEF_RATE: + if(sd->state.lr_flag != 2) { + sd->ignore_mdef[RC_NONBOSS] += val; + sd->ignore_mdef[RC_BOSS] += val; + } + break; + case SP_IGNORE_MDEF_ELE: + if(val >= ELE_MAX) { + ShowError("pc_bonus: SP_IGNORE_MDEF_ELE: Invalid element %d\n", val); + break; + } + if(sd->state.lr_flag != 2) + sd->bonus.ignore_mdef_ele |= 1<state.lr_flag != 2) + sd->bonus.ignore_mdef_race |= 1<state.lr_flag != 2 && sd->bonus.perfect_hit < val) + sd->bonus.perfect_hit = val; + break; + case SP_PERFECT_HIT_ADD_RATE: + if(sd->state.lr_flag != 2) + sd->bonus.perfect_hit_add += val; + break; + case SP_CRITICAL_RATE: + if(sd->state.lr_flag != 2) + sd->critical_rate+=val; + break; + case SP_DEF_RATIO_ATK_ELE: + if(val >= ELE_MAX) { + ShowError("pc_bonus: SP_DEF_RATIO_ATK_ELE: Invalid element %d\n", val); + break; + } + if(!sd->state.lr_flag) + sd->right_weapon.def_ratio_atk_ele |= 1<state.lr_flag == 1) + sd->left_weapon.def_ratio_atk_ele |= 1<= RC_MAX) { + ShowError("pc_bonus: SP_DEF_RATIO_ATK_RACE: Invalid race %d\n", val); + break; + } + if(!sd->state.lr_flag) + sd->right_weapon.def_ratio_atk_race |= 1<state.lr_flag == 1) + sd->left_weapon.def_ratio_atk_race |= 1<state.lr_flag != 2) + sd->hit_rate += val; + break; + case SP_FLEE_RATE: + if(sd->state.lr_flag != 2) + sd->flee_rate += val; + break; + case SP_FLEE2_RATE: + if(sd->state.lr_flag != 2) + sd->flee2_rate += val; + break; + case SP_DEF_RATE: + if(sd->state.lr_flag != 2) + sd->def_rate += val; + break; + case SP_DEF2_RATE: + if(sd->state.lr_flag != 2) + sd->def2_rate += val; + break; + case SP_MDEF_RATE: + if(sd->state.lr_flag != 2) + sd->mdef_rate += val; + break; + case SP_MDEF2_RATE: + if(sd->state.lr_flag != 2) + sd->mdef2_rate += val; + break; + case SP_RESTART_FULL_RECOVER: + if(sd->state.lr_flag != 2) + sd->special_state.restart_full_recover = 1; + break; + case SP_NO_CASTCANCEL: + if(sd->state.lr_flag != 2) + sd->special_state.no_castcancel = 1; + break; + case SP_NO_CASTCANCEL2: + if(sd->state.lr_flag != 2) + sd->special_state.no_castcancel2 = 1; + break; + case SP_NO_SIZEFIX: + if(sd->state.lr_flag != 2) + sd->special_state.no_sizefix = 1; + break; + case SP_NO_MAGIC_DAMAGE: + if(sd->state.lr_flag == 2) + break; + val+= sd->special_state.no_magic_damage; + sd->special_state.no_magic_damage = cap_value(val,0,100); + break; + case SP_NO_WEAPON_DAMAGE: + if(sd->state.lr_flag == 2) + break; + val+= sd->special_state.no_weapon_damage; + sd->special_state.no_weapon_damage = cap_value(val,0,100); + break; + case SP_NO_MISC_DAMAGE: + if(sd->state.lr_flag == 2) + break; + val+= sd->special_state.no_misc_damage; + sd->special_state.no_misc_damage = cap_value(val,0,100); + break; + case SP_NO_GEMSTONE: + if(sd->state.lr_flag != 2) + sd->special_state.no_gemstone = 1; + break; + case SP_INTRAVISION: // Maya Purple Card effect allowing to see Hiding/Cloaking people [DracoRPG] + if(sd->state.lr_flag != 2) { + sd->special_state.intravision = 1; + clif_status_load(&sd->bl, SI_INTRAVISION, 1); + } + break; + case SP_NO_KNOCKBACK: + if(sd->state.lr_flag != 2) + sd->special_state.no_knockback = 1; + break; + case SP_SPLASH_RANGE: + if(sd->bonus.splash_range < val) + sd->bonus.splash_range = val; + break; + case SP_SPLASH_ADD_RANGE: + sd->bonus.splash_add_range += val; + break; + case SP_SHORT_WEAPON_DAMAGE_RETURN: + if(sd->state.lr_flag != 2) + sd->bonus.short_weapon_damage_return += val; + break; + case SP_LONG_WEAPON_DAMAGE_RETURN: + if(sd->state.lr_flag != 2) + sd->bonus.long_weapon_damage_return += val; + break; + case SP_MAGIC_DAMAGE_RETURN: //AppleGirl Was Here + if(sd->state.lr_flag != 2) + sd->bonus.magic_damage_return += val; + break; + case SP_ALL_STATS: // [Valaris] + if(sd->state.lr_flag!=2) { + sd->param_bonus[SP_STR-SP_STR]+=val; + sd->param_bonus[SP_AGI-SP_STR]+=val; + sd->param_bonus[SP_VIT-SP_STR]+=val; + sd->param_bonus[SP_INT-SP_STR]+=val; + sd->param_bonus[SP_DEX-SP_STR]+=val; + sd->param_bonus[SP_LUK-SP_STR]+=val; + } + break; + case SP_AGI_VIT: // [Valaris] + if(sd->state.lr_flag!=2) { + sd->param_bonus[SP_AGI-SP_STR]+=val; + sd->param_bonus[SP_VIT-SP_STR]+=val; + } + break; + case SP_AGI_DEX_STR: // [Valaris] + if(sd->state.lr_flag!=2) { + sd->param_bonus[SP_AGI-SP_STR]+=val; + sd->param_bonus[SP_DEX-SP_STR]+=val; + sd->param_bonus[SP_STR-SP_STR]+=val; + } + break; + case SP_PERFECT_HIDE: // [Valaris] + if(sd->state.lr_flag!=2) + sd->special_state.perfect_hiding=1; + break; + case SP_UNBREAKABLE: + if(sd->state.lr_flag!=2) + sd->bonus.unbreakable += val; + break; + case SP_UNBREAKABLE_WEAPON: + if(sd->state.lr_flag != 2) + sd->bonus.unbreakable_equip |= EQP_WEAPON; + break; + case SP_UNBREAKABLE_ARMOR: + if(sd->state.lr_flag != 2) + sd->bonus.unbreakable_equip |= EQP_ARMOR; + break; + case SP_UNBREAKABLE_HELM: + if(sd->state.lr_flag != 2) + sd->bonus.unbreakable_equip |= EQP_HELM; + break; + case SP_UNBREAKABLE_SHIELD: + if(sd->state.lr_flag != 2) + sd->bonus.unbreakable_equip |= EQP_SHIELD; + break; + case SP_UNBREAKABLE_GARMENT: + if(sd->state.lr_flag != 2) + sd->bonus.unbreakable_equip |= EQP_GARMENT; + break; + case SP_UNBREAKABLE_SHOES: + if(sd->state.lr_flag != 2) + sd->bonus.unbreakable_equip |= EQP_SHOES; + break; + case SP_CLASSCHANGE: // [Valaris] + if(sd->state.lr_flag !=2) + sd->bonus.classchange=val; + break; + case SP_LONG_ATK_RATE: + if(sd->state.lr_flag != 2) //[Lupus] it should stack, too. As any other cards rate bonuses + sd->bonus.long_attack_atk_rate+=val; + break; + case SP_BREAK_WEAPON_RATE: + if(sd->state.lr_flag != 2) + sd->bonus.break_weapon_rate+=val; + break; + case SP_BREAK_ARMOR_RATE: + if(sd->state.lr_flag != 2) + sd->bonus.break_armor_rate+=val; + break; + case SP_ADD_STEAL_RATE: + if(sd->state.lr_flag != 2) + sd->bonus.add_steal_rate+=val; + break; + case SP_DELAYRATE: + if(sd->state.lr_flag != 2) + sd->delayrate+=val; + break; + case SP_CRIT_ATK_RATE: + if(sd->state.lr_flag != 2) + sd->bonus.crit_atk_rate += val; + break; + case SP_NO_REGEN: + if(sd->state.lr_flag != 2) + sd->regen.state.block|=val; + break; + case SP_UNSTRIPABLE_WEAPON: + if(sd->state.lr_flag != 2) + sd->bonus.unstripable_equip |= EQP_WEAPON; + break; + case SP_UNSTRIPABLE: + case SP_UNSTRIPABLE_ARMOR: + if(sd->state.lr_flag != 2) + sd->bonus.unstripable_equip |= EQP_ARMOR; + break; + case SP_UNSTRIPABLE_HELM: + if(sd->state.lr_flag != 2) + sd->bonus.unstripable_equip |= EQP_HELM; + break; + case SP_UNSTRIPABLE_SHIELD: + if(sd->state.lr_flag != 2) + sd->bonus.unstripable_equip |= EQP_SHIELD; + break; + case SP_HP_DRAIN_VALUE: + if(!sd->state.lr_flag) { + sd->right_weapon.hp_drain[RC_NONBOSS].value += val; + sd->right_weapon.hp_drain[RC_BOSS].value += val; + } + else if(sd->state.lr_flag == 1) { + sd->left_weapon.hp_drain[RC_NONBOSS].value += val; + sd->left_weapon.hp_drain[RC_BOSS].value += val; + } + break; + case SP_SP_DRAIN_VALUE: + if(!sd->state.lr_flag) { + sd->right_weapon.sp_drain[RC_NONBOSS].value += val; + sd->right_weapon.sp_drain[RC_BOSS].value += val; + } + else if(sd->state.lr_flag == 1) { + sd->left_weapon.sp_drain[RC_NONBOSS].value += val; + sd->left_weapon.sp_drain[RC_BOSS].value += val; + } + break; + case SP_SP_GAIN_VALUE: + if(!sd->state.lr_flag) + sd->bonus.sp_gain_value += val; + break; + case SP_HP_GAIN_VALUE: + if(!sd->state.lr_flag) + sd->bonus.hp_gain_value += val; + break; + case SP_MAGIC_SP_GAIN_VALUE: + if(!sd->state.lr_flag) + sd->bonus.magic_sp_gain_value += val; + break; + case SP_MAGIC_HP_GAIN_VALUE: + if(!sd->state.lr_flag) + sd->bonus.magic_hp_gain_value += val; + break; + case SP_ADD_HEAL_RATE: + if(sd->state.lr_flag != 2) + sd->bonus.add_heal_rate += val; + break; + case SP_ADD_HEAL2_RATE: + if(sd->state.lr_flag != 2) + sd->bonus.add_heal2_rate += val; + break; + case SP_ADD_ITEM_HEAL_RATE: + if(sd->state.lr_flag != 2) + sd->bonus.itemhealrate2 += val; + break; + case SP_EMATK: + if(sd->state.lr_flag != 2) + sd->bonus.ematk += val; + break; + case SP_FIXCASTRATE: + if(sd->state.lr_flag != 2) + sd->bonus.fixcastrate -= val; + break; + case SP_ADD_FIXEDCAST: + if(sd->state.lr_flag != 2) + sd->bonus.add_fixcast += val; + break; + #ifdef RENEWAL_CAST + case SP_VARCASTRATE: + if(sd->state.lr_flag != 2) + sd->bonus.varcastrate -= val; + break; + case SP_ADD_VARIABLECAST: + if(sd->state.lr_flag != 2) + sd->bonus.add_varcast += val; + break; + #endif default: - status->rhw.ele=val; + ShowWarning("pc_bonus: unknown type %d %d !\n",type,val); break; - } - break; - case SP_DEFELE: - if(val >= ELE_MAX) { - ShowError("pc_bonus: SP_DEFELE: Invalid element %d\n", val); - break; - } - if(sd->state.lr_flag != 2) - status->def_ele=val; - break; - case SP_MAXHP: - if(sd->state.lr_flag == 2) - break; - val += (int)status->max_hp; - //Negative bonuses will underflow, this will be handled in status_calc_pc through casting - //If this is called outside of status_calc_pc, you'd better pray they do not underflow and end with UINT_MAX max_hp. - status->max_hp = (unsigned int)val; - break; - case SP_MAXSP: - if(sd->state.lr_flag == 2) - break; - val += (int)status->max_sp; - status->max_sp = (unsigned int)val; - break; -#ifndef RENEWAL_CAST - case SP_VARCASTRATE: -#endif - case SP_CASTRATE: - if(sd->state.lr_flag != 2) - sd->castrate+=val; - break; - case SP_MAXHPRATE: - if(sd->state.lr_flag != 2) - sd->hprate+=val; - break; - case SP_MAXSPRATE: - if(sd->state.lr_flag != 2) - sd->sprate+=val; - break; - case SP_SPRATE: - if(sd->state.lr_flag != 2) - sd->dsprate+=val; - break; - case SP_ATTACKRANGE: - switch (sd->state.lr_flag) { - case 2: - switch (sd->status.weapon) { - case W_BOW: - case W_REVOLVER: - case W_RIFLE: - case W_GATLING: - case W_SHOTGUN: - case W_GRENADE: - status->rhw.range += val; - } - break; - case 1: - status->lhw.range += val; - break; - default: - status->rhw.range += val; - break; - } - break; - case SP_SPEED_RATE: //Non stackable increase - if(sd->state.lr_flag != 2) - sd->bonus.speed_rate = min(sd->bonus.speed_rate, -val); - break; - case SP_SPEED_ADDRATE: //Stackable increase - if(sd->state.lr_flag != 2) - sd->bonus.speed_add_rate -= val; - break; - case SP_ASPD: //Raw increase - if(sd->state.lr_flag != 2) - sd->bonus.aspd_add -= 10*val; - break; - case SP_ASPD_RATE: //Stackable increase - Made it linear as per rodatazone - if(sd->state.lr_flag != 2) -#ifndef RENEWAL_ASPD - status->aspd_rate -= 10*val; -#else - status->aspd_rate2 += val; -#endif - break; - case SP_HP_RECOV_RATE: - if(sd->state.lr_flag != 2) - sd->hprecov_rate += val; - break; - case SP_SP_RECOV_RATE: - if(sd->state.lr_flag != 2) - sd->sprecov_rate += val; - break; - case SP_CRITICAL_DEF: - if(sd->state.lr_flag != 2) - sd->bonus.critical_def += val; - break; - case SP_NEAR_ATK_DEF: - if(sd->state.lr_flag != 2) - sd->bonus.near_attack_def_rate += val; - break; - case SP_LONG_ATK_DEF: - if(sd->state.lr_flag != 2) - sd->bonus.long_attack_def_rate += val; - break; - case SP_DOUBLE_RATE: - if(sd->state.lr_flag == 0 && sd->bonus.double_rate < val) - sd->bonus.double_rate = val; - break; - case SP_DOUBLE_ADD_RATE: - if(sd->state.lr_flag == 0) - sd->bonus.double_add_rate += val; - break; - case SP_MATK_RATE: - if(sd->state.lr_flag != 2) - sd->matk_rate += val; - break; - case SP_IGNORE_DEF_ELE: - if(val >= ELE_MAX) { - ShowError("pc_bonus: SP_IGNORE_DEF_ELE: Invalid element %d\n", val); - break; - } - if(!sd->state.lr_flag) - sd->right_weapon.ignore_def_ele |= 1<state.lr_flag == 1) - sd->left_weapon.ignore_def_ele |= 1<state.lr_flag) - sd->right_weapon.ignore_def_race |= 1<state.lr_flag == 1) - sd->left_weapon.ignore_def_race |= 1<state.lr_flag != 2) - sd->bonus.atk_rate += val; - break; - case SP_MAGIC_ATK_DEF: - if(sd->state.lr_flag != 2) - sd->bonus.magic_def_rate += val; - break; - case SP_MISC_ATK_DEF: - if(sd->state.lr_flag != 2) - sd->bonus.misc_def_rate += val; - break; - case SP_IGNORE_MDEF_RATE: - if(sd->state.lr_flag != 2) { - sd->ignore_mdef[RC_NONBOSS] += val; - sd->ignore_mdef[RC_BOSS] += val; - } - break; - case SP_IGNORE_MDEF_ELE: - if(val >= ELE_MAX) { - ShowError("pc_bonus: SP_IGNORE_MDEF_ELE: Invalid element %d\n", val); - break; - } - if(sd->state.lr_flag != 2) - sd->bonus.ignore_mdef_ele |= 1<state.lr_flag != 2) - sd->bonus.ignore_mdef_race |= 1<state.lr_flag != 2 && sd->bonus.perfect_hit < val) - sd->bonus.perfect_hit = val; - break; - case SP_PERFECT_HIT_ADD_RATE: - if(sd->state.lr_flag != 2) - sd->bonus.perfect_hit_add += val; - break; - case SP_CRITICAL_RATE: - if(sd->state.lr_flag != 2) - sd->critical_rate+=val; - break; - case SP_DEF_RATIO_ATK_ELE: - if(val >= ELE_MAX) { - ShowError("pc_bonus: SP_DEF_RATIO_ATK_ELE: Invalid element %d\n", val); - break; - } - if(!sd->state.lr_flag) - sd->right_weapon.def_ratio_atk_ele |= 1<state.lr_flag == 1) - sd->left_weapon.def_ratio_atk_ele |= 1<= RC_MAX) { - ShowError("pc_bonus: SP_DEF_RATIO_ATK_RACE: Invalid race %d\n", val); - break; - } - if(!sd->state.lr_flag) - sd->right_weapon.def_ratio_atk_race |= 1<state.lr_flag == 1) - sd->left_weapon.def_ratio_atk_race |= 1<state.lr_flag != 2) - sd->hit_rate += val; - break; - case SP_FLEE_RATE: - if(sd->state.lr_flag != 2) - sd->flee_rate += val; - break; - case SP_FLEE2_RATE: - if(sd->state.lr_flag != 2) - sd->flee2_rate += val; - break; - case SP_DEF_RATE: - if(sd->state.lr_flag != 2) - sd->def_rate += val; - break; - case SP_DEF2_RATE: - if(sd->state.lr_flag != 2) - sd->def2_rate += val; - break; - case SP_MDEF_RATE: - if(sd->state.lr_flag != 2) - sd->mdef_rate += val; - break; - case SP_MDEF2_RATE: - if(sd->state.lr_flag != 2) - sd->mdef2_rate += val; - break; - case SP_RESTART_FULL_RECOVER: - if(sd->state.lr_flag != 2) - sd->special_state.restart_full_recover = 1; - break; - case SP_NO_CASTCANCEL: - if(sd->state.lr_flag != 2) - sd->special_state.no_castcancel = 1; - break; - case SP_NO_CASTCANCEL2: - if(sd->state.lr_flag != 2) - sd->special_state.no_castcancel2 = 1; - break; - case SP_NO_SIZEFIX: - if(sd->state.lr_flag != 2) - sd->special_state.no_sizefix = 1; - break; - case SP_NO_MAGIC_DAMAGE: - if(sd->state.lr_flag == 2) - break; - val+= sd->special_state.no_magic_damage; - sd->special_state.no_magic_damage = cap_value(val,0,100); - break; - case SP_NO_WEAPON_DAMAGE: - if(sd->state.lr_flag == 2) - break; - val+= sd->special_state.no_weapon_damage; - sd->special_state.no_weapon_damage = cap_value(val,0,100); - break; - case SP_NO_MISC_DAMAGE: - if(sd->state.lr_flag == 2) - break; - val+= sd->special_state.no_misc_damage; - sd->special_state.no_misc_damage = cap_value(val,0,100); - break; - case SP_NO_GEMSTONE: - if(sd->state.lr_flag != 2) - sd->special_state.no_gemstone = 1; - break; - case SP_INTRAVISION: // Maya Purple Card effect allowing to see Hiding/Cloaking people [DracoRPG] - if(sd->state.lr_flag != 2) { - sd->special_state.intravision = 1; - clif_status_load(&sd->bl, SI_INTRAVISION, 1); - } - break; - case SP_NO_KNOCKBACK: - if(sd->state.lr_flag != 2) - sd->special_state.no_knockback = 1; - break; - case SP_SPLASH_RANGE: - if(sd->bonus.splash_range < val) - sd->bonus.splash_range = val; - break; - case SP_SPLASH_ADD_RANGE: - sd->bonus.splash_add_range += val; - break; - case SP_SHORT_WEAPON_DAMAGE_RETURN: - if(sd->state.lr_flag != 2) - sd->bonus.short_weapon_damage_return += val; - break; - case SP_LONG_WEAPON_DAMAGE_RETURN: - if(sd->state.lr_flag != 2) - sd->bonus.long_weapon_damage_return += val; - break; - case SP_MAGIC_DAMAGE_RETURN: //AppleGirl Was Here - if(sd->state.lr_flag != 2) - sd->bonus.magic_damage_return += val; - break; - case SP_ALL_STATS: // [Valaris] - if(sd->state.lr_flag!=2) { - sd->param_bonus[SP_STR-SP_STR]+=val; - sd->param_bonus[SP_AGI-SP_STR]+=val; - sd->param_bonus[SP_VIT-SP_STR]+=val; - sd->param_bonus[SP_INT-SP_STR]+=val; - sd->param_bonus[SP_DEX-SP_STR]+=val; - sd->param_bonus[SP_LUK-SP_STR]+=val; - } - break; - case SP_AGI_VIT: // [Valaris] - if(sd->state.lr_flag!=2) { - sd->param_bonus[SP_AGI-SP_STR]+=val; - sd->param_bonus[SP_VIT-SP_STR]+=val; - } - break; - case SP_AGI_DEX_STR: // [Valaris] - if(sd->state.lr_flag!=2) { - sd->param_bonus[SP_AGI-SP_STR]+=val; - sd->param_bonus[SP_DEX-SP_STR]+=val; - sd->param_bonus[SP_STR-SP_STR]+=val; - } - break; - case SP_PERFECT_HIDE: // [Valaris] - if(sd->state.lr_flag!=2) - sd->special_state.perfect_hiding=1; - break; - case SP_UNBREAKABLE: - if(sd->state.lr_flag!=2) - sd->bonus.unbreakable += val; - break; - case SP_UNBREAKABLE_WEAPON: - if(sd->state.lr_flag != 2) - sd->bonus.unbreakable_equip |= EQP_WEAPON; - break; - case SP_UNBREAKABLE_ARMOR: - if(sd->state.lr_flag != 2) - sd->bonus.unbreakable_equip |= EQP_ARMOR; - break; - case SP_UNBREAKABLE_HELM: - if(sd->state.lr_flag != 2) - sd->bonus.unbreakable_equip |= EQP_HELM; - break; - case SP_UNBREAKABLE_SHIELD: - if(sd->state.lr_flag != 2) - sd->bonus.unbreakable_equip |= EQP_SHIELD; - break; - case SP_UNBREAKABLE_GARMENT: - if(sd->state.lr_flag != 2) - sd->bonus.unbreakable_equip |= EQP_GARMENT; - break; - case SP_UNBREAKABLE_SHOES: - if(sd->state.lr_flag != 2) - sd->bonus.unbreakable_equip |= EQP_SHOES; - break; - case SP_CLASSCHANGE: // [Valaris] - if(sd->state.lr_flag !=2) - sd->bonus.classchange=val; - break; - case SP_LONG_ATK_RATE: - if(sd->state.lr_flag != 2) //[Lupus] it should stack, too. As any other cards rate bonuses - sd->bonus.long_attack_atk_rate+=val; - break; - case SP_BREAK_WEAPON_RATE: - if(sd->state.lr_flag != 2) - sd->bonus.break_weapon_rate+=val; - break; - case SP_BREAK_ARMOR_RATE: - if(sd->state.lr_flag != 2) - sd->bonus.break_armor_rate+=val; - break; - case SP_ADD_STEAL_RATE: - if(sd->state.lr_flag != 2) - sd->bonus.add_steal_rate+=val; - break; - case SP_DELAYRATE: - if(sd->state.lr_flag != 2) - sd->delayrate+=val; - break; - case SP_CRIT_ATK_RATE: - if(sd->state.lr_flag != 2) - sd->bonus.crit_atk_rate += val; - break; - case SP_NO_REGEN: - if(sd->state.lr_flag != 2) - sd->regen.state.block|=val; - break; - case SP_UNSTRIPABLE_WEAPON: - if(sd->state.lr_flag != 2) - sd->bonus.unstripable_equip |= EQP_WEAPON; - break; - case SP_UNSTRIPABLE: - case SP_UNSTRIPABLE_ARMOR: - if(sd->state.lr_flag != 2) - sd->bonus.unstripable_equip |= EQP_ARMOR; - break; - case SP_UNSTRIPABLE_HELM: - if(sd->state.lr_flag != 2) - sd->bonus.unstripable_equip |= EQP_HELM; - break; - case SP_UNSTRIPABLE_SHIELD: - if(sd->state.lr_flag != 2) - sd->bonus.unstripable_equip |= EQP_SHIELD; - break; - case SP_HP_DRAIN_VALUE: - if(!sd->state.lr_flag) { - sd->right_weapon.hp_drain[RC_NONBOSS].value += val; - sd->right_weapon.hp_drain[RC_BOSS].value += val; - } - else if(sd->state.lr_flag == 1) { - sd->left_weapon.hp_drain[RC_NONBOSS].value += val; - sd->left_weapon.hp_drain[RC_BOSS].value += val; - } - break; - case SP_SP_DRAIN_VALUE: - if(!sd->state.lr_flag) { - sd->right_weapon.sp_drain[RC_NONBOSS].value += val; - sd->right_weapon.sp_drain[RC_BOSS].value += val; - } - else if(sd->state.lr_flag == 1) { - sd->left_weapon.sp_drain[RC_NONBOSS].value += val; - sd->left_weapon.sp_drain[RC_BOSS].value += val; - } - break; - case SP_SP_GAIN_VALUE: - if(!sd->state.lr_flag) - sd->bonus.sp_gain_value += val; - break; - case SP_HP_GAIN_VALUE: - if(!sd->state.lr_flag) - sd->bonus.hp_gain_value += val; - break; - case SP_MAGIC_SP_GAIN_VALUE: - if(!sd->state.lr_flag) - sd->bonus.magic_sp_gain_value += val; - break; - case SP_MAGIC_HP_GAIN_VALUE: - if(!sd->state.lr_flag) - sd->bonus.magic_hp_gain_value += val; - break; - case SP_ADD_HEAL_RATE: - if(sd->state.lr_flag != 2) - sd->bonus.add_heal_rate += val; - break; - case SP_ADD_HEAL2_RATE: - if(sd->state.lr_flag != 2) - sd->bonus.add_heal2_rate += val; - break; - case SP_ADD_ITEM_HEAL_RATE: - if(sd->state.lr_flag != 2) - sd->bonus.itemhealrate2 += val; - break; - case SP_EMATK: - if(sd->state.lr_flag != 2) - sd->bonus.ematk += val; - break; - case SP_FIXCASTRATE: - if(sd->state.lr_flag != 2) - sd->bonus.fixcastrate -= val; - break; - case SP_ADD_FIXEDCAST: - if(sd->state.lr_flag != 2) - sd->bonus.add_fixcast += val; - break; -#ifdef RENEWAL_CAST - case SP_VARCASTRATE: - if(sd->state.lr_flag != 2) - sd->bonus.varcastrate -= val; - break; - case SP_ADD_VARIABLECAST: - if(sd->state.lr_flag != 2) - sd->bonus.add_varcast += val; - break; -#endif - default: - ShowWarning("pc_bonus: unknown type %d %d !\n",type,val); - break; } return 0; } @@ -6854,39 +6854,138 @@ int pc_readparam(struct map_session_data* sd,int type) nullpo_ret(sd); switch(type) { - case SP_SKILLPOINT: val = sd->status.skill_point; break; - case SP_STATUSPOINT: val = sd->status.status_point; break; - case SP_ZENY: val = sd->status.zeny; break; - case SP_BASELEVEL: val = sd->status.base_level; break; - case SP_JOBLEVEL: val = sd->status.job_level; break; - case SP_CLASS: val = sd->status.class_; break; - case SP_BASEJOB: val = pc_mapid2jobid(sd->class_&MAPID_UPPERMASK, sd->status.sex); break; //Base job, extracting upper type. - case SP_UPPER: val = sd->class_&JOBL_UPPER?1:(sd->class_&JOBL_BABY?2:0); break; - case SP_BASECLASS: val = pc_mapid2jobid(sd->class_&MAPID_BASEMASK, sd->status.sex); break; //Extract base class tree. [Skotlex] - case SP_SEX: val = sd->status.sex; break; - case SP_WEIGHT: val = sd->weight; break; - case SP_MAXWEIGHT: val = sd->max_weight; break; - case SP_BASEEXP: val = sd->status.base_exp; break; - case SP_JOBEXP: val = sd->status.job_exp; break; - case SP_NEXTBASEEXP: val = pc_nextbaseexp(sd); break; - case SP_NEXTJOBEXP: val = pc_nextjobexp(sd); break; - case SP_HP: val = sd->battle_status.hp; break; - case SP_MAXHP: val = sd->battle_status.max_hp; break; - case SP_SP: val = sd->battle_status.sp; break; - case SP_MAXSP: val = sd->battle_status.max_sp; break; - case SP_STR: val = sd->status.str; break; - case SP_AGI: val = sd->status.agi; break; - case SP_VIT: val = sd->status.vit; break; - case SP_INT: val = sd->status.int_; break; - case SP_DEX: val = sd->status.dex; break; - case SP_LUK: val = sd->status.luk; break; - case SP_KARMA: val = sd->status.karma; break; - case SP_MANNER: val = sd->status.manner; break; - case SP_FAME: val = sd->status.fame; break; - case SP_KILLERRID: val = sd->killerrid; break; - case SP_KILLEDRID: val = sd->killedrid; break; - case SP_CRITICAL: val = sd->battle_status.cri/10; break; - case SP_ASPD: val = (2000-sd->battle_status.amotion)/10; break; + case SP_SKILLPOINT: val = sd->status.skill_point; break; + case SP_STATUSPOINT: val = sd->status.status_point; break; + case SP_ZENY: val = sd->status.zeny; break; + case SP_BASELEVEL: val = sd->status.base_level; break; + case SP_JOBLEVEL: val = sd->status.job_level; break; + case SP_CLASS: val = sd->status.class_; break; + case SP_BASEJOB: val = pc_mapid2jobid(sd->class_&MAPID_UPPERMASK, sd->status.sex); break; //Base job, extracting upper type. + case SP_UPPER: val = sd->class_&JOBL_UPPER?1:(sd->class_&JOBL_BABY?2:0); break; + case SP_BASECLASS: val = pc_mapid2jobid(sd->class_&MAPID_BASEMASK, sd->status.sex); break; //Extract base class tree. [Skotlex] + case SP_SEX: val = sd->status.sex; break; + case SP_WEIGHT: val = sd->weight; break; + case SP_MAXWEIGHT: val = sd->max_weight; break; + case SP_BASEEXP: val = sd->status.base_exp; break; + case SP_JOBEXP: val = sd->status.job_exp; break; + case SP_NEXTBASEEXP: val = pc_nextbaseexp(sd); break; + case SP_NEXTJOBEXP: val = pc_nextjobexp(sd); break; + case SP_HP: val = sd->battle_status.hp; break; + case SP_MAXHP: val = sd->battle_status.max_hp; break; + case SP_SP: val = sd->battle_status.sp; break; + case SP_MAXSP: val = sd->battle_status.max_sp; break; + case SP_STR: val = sd->status.str; break; + case SP_AGI: val = sd->status.agi; break; + case SP_VIT: val = sd->status.vit; break; + case SP_INT: val = sd->status.int_; break; + case SP_DEX: val = sd->status.dex; break; + case SP_LUK: val = sd->status.luk; break; + case SP_KARMA: val = sd->status.karma; break; + case SP_MANNER: val = sd->status.manner; break; + case SP_FAME: val = sd->status.fame; break; + case SP_KILLERRID: val = sd->killerrid; break; + case SP_KILLEDRID: val = sd->killedrid; break; + case SP_CRITICAL: val = sd->battle_status.cri/10; break; + case SP_ASPD: val = (2000-sd->battle_status.amotion)/10; break; + case SP_BASE_ATK: val = sd->battle_status.batk; break; + case SP_DEF1: val = sd->battle_status.def; break; + case SP_DEF2: val = sd->battle_status.def2; break; + case SP_MDEF1: val = sd->battle_status.mdef; break; + case SP_MDEF2: val = sd->battle_status.mdef2; break; + case SP_HIT: val = sd->battle_status.hit; break; + case SP_FLEE1: val = sd->battle_status.flee; break; + case SP_FLEE2: val = sd->battle_status.flee2; break; + case SP_DEFELE: val = sd->battle_status.def_ele; break; +#ifndef RENEWAL_CAST + case SP_VARCASTRATE: +#endif + case SP_CASTRATE: + val = sd->castrate+=val; + break; + case SP_MAXHPRATE: val = sd->hprate; break; + case SP_MAXSPRATE: val = sd->sprate; break; + case SP_SPRATE: val = sd->dsprate; break; + case SP_SPEED_RATE: val = sd->bonus.speed_rate; break; + case SP_SPEED_ADDRATE: val = sd->bonus.speed_add_rate; break; + case SP_ASPD_RATE: +#ifndef RENEWAL_ASPD + val = sd->battle_status.aspd_rate; +#else + val = sd->battle_status.aspd_rate2; +#endif + break; + case SP_HP_RECOV_RATE: val = sd->hprecov_rate; break; + case SP_SP_RECOV_RATE: val = sd->sprecov_rate; break; + case SP_CRITICAL_DEF: val = sd->bonus.critical_def; break; + case SP_NEAR_ATK_DEF: val = sd->bonus.near_attack_def_rate; break; + case SP_LONG_ATK_DEF: val = sd->bonus.long_attack_def_rate; break; + case SP_DOUBLE_RATE: val = sd->bonus.double_rate; break; + case SP_DOUBLE_ADD_RATE: val = sd->bonus.double_add_rate; break; + case SP_MATK_RATE: val = sd->matk_rate; break; + case SP_ATK_RATE: val = sd->bonus.atk_rate; break; + case SP_MAGIC_ATK_DEF: val = sd->bonus.magic_def_rate; break; + case SP_MISC_ATK_DEF: val = sd->bonus.misc_def_rate; break; + case SP_PERFECT_HIT_RATE:val = sd->bonus.perfect_hit; break; + case SP_PERFECT_HIT_ADD_RATE: val = sd->bonus.perfect_hit_add; break; + case SP_CRITICAL_RATE: val = sd->critical_rate; break; + case SP_HIT_RATE: val = sd->hit_rate; break; + case SP_FLEE_RATE: val = sd->flee_rate; break; + case SP_FLEE2_RATE: val = sd->flee2_rate; break; + case SP_DEF_RATE: val = sd->def_rate; break; + case SP_DEF2_RATE: val = sd->def2_rate; break; + case SP_MDEF_RATE: val = sd->mdef_rate; break; + case SP_MDEF2_RATE: val = sd->mdef2_rate; break; + case SP_RESTART_FULL_RECOVER: val = sd->special_state.restart_full_recover?1:0; break; + case SP_NO_CASTCANCEL: val = sd->special_state.no_castcancel?1:0; break; + case SP_NO_CASTCANCEL2: val = sd->special_state.no_castcancel2?1:0; break; + case SP_NO_SIZEFIX: val = sd->special_state.no_sizefix?1:0; break; + case SP_NO_MAGIC_DAMAGE: val = sd->special_state.no_magic_damage; break; + case SP_NO_WEAPON_DAMAGE:val = sd->special_state.no_weapon_damage; break; + case SP_NO_MISC_DAMAGE: val = sd->special_state.no_misc_damage; break; + case SP_NO_GEMSTONE: val = sd->special_state.no_gemstone?1:0; break; + case SP_INTRAVISION: val = sd->special_state.intravision?1:0; break; + case SP_NO_KNOCKBACK: val = sd->special_state.no_knockback?1:0; break; + case SP_SPLASH_RANGE: val = sd->bonus.splash_range; break; + case SP_SPLASH_ADD_RANGE:val = sd->bonus.splash_add_range; break; + case SP_SHORT_WEAPON_DAMAGE_RETURN: val = sd->bonus.short_weapon_damage_return; break; + case SP_LONG_WEAPON_DAMAGE_RETURN: val = sd->bonus.long_weapon_damage_return; break; + case SP_MAGIC_DAMAGE_RETURN: val = sd->bonus.magic_damage_return; break; + case SP_PERFECT_HIDE: val = sd->special_state.perfect_hiding?1:0; break; + case SP_UNBREAKABLE: val = sd->bonus.unbreakable; break; + case SP_UNBREAKABLE_WEAPON: val = (sd->bonus.unbreakable_equip&EQP_WEAPON)?1:0; break; + case SP_UNBREAKABLE_ARMOR: val = (sd->bonus.unbreakable_equip&EQP_ARMOR)?1:0; break; + case SP_UNBREAKABLE_HELM: val = (sd->bonus.unbreakable_equip&EQP_HELM)?1:0; break; + case SP_UNBREAKABLE_SHIELD: val = (sd->bonus.unbreakable_equip&EQP_SHIELD)?1:0; break; + case SP_UNBREAKABLE_GARMENT: val = (sd->bonus.unbreakable_equip&EQP_GARMENT)?1:0; break; + case SP_UNBREAKABLE_SHOES: val = (sd->bonus.unbreakable_equip&EQP_SHOES)?1:0; break; + case SP_CLASSCHANGE: val = sd->bonus.classchange; break; + case SP_LONG_ATK_RATE: val = sd->bonus.long_attack_atk_rate; break; + case SP_BREAK_WEAPON_RATE: val = sd->bonus.break_weapon_rate; break; + case SP_BREAK_ARMOR_RATE: val = sd->bonus.break_armor_rate; break; + case SP_ADD_STEAL_RATE: val = sd->bonus.add_steal_rate; break; + case SP_DELAYRATE: val = sd->delayrate; break; + case SP_CRIT_ATK_RATE: val = sd->bonus.crit_atk_rate; break; + case SP_UNSTRIPABLE_WEAPON: val = (sd->bonus.unstripable_equip&EQP_WEAPON)?1:0; break; + case SP_UNSTRIPABLE: + case SP_UNSTRIPABLE_ARMOR: + val = (sd->bonus.unstripable_equip&EQP_ARMOR)?1:0; + break; + case SP_UNSTRIPABLE_HELM: val = (sd->bonus.unstripable_equip&EQP_HELM)?1:0; break; + case SP_UNSTRIPABLE_SHIELD: val = (sd->bonus.unstripable_equip&EQP_SHIELD)?1:0; break; + case SP_SP_GAIN_VALUE: val = sd->bonus.sp_gain_value; break; + case SP_HP_GAIN_VALUE: val = sd->bonus.hp_gain_value; break; + case SP_MAGIC_SP_GAIN_VALUE: val = sd->bonus.magic_sp_gain_value; break; + case SP_MAGIC_HP_GAIN_VALUE: val = sd->bonus.magic_hp_gain_value; break; + case SP_ADD_HEAL_RATE: val = sd->bonus.add_heal_rate; break; + case SP_ADD_HEAL2_RATE: val = sd->bonus.add_heal2_rate; break; + case SP_ADD_ITEM_HEAL_RATE: val = sd->bonus.itemhealrate2; break; + case SP_EMATK: val = sd->bonus.ematk; break; + case SP_FIXCASTRATE: val = sd->bonus.fixcastrate; break; + case SP_ADD_FIXEDCAST: val = sd->bonus.add_fixcast; break; +#ifdef RENEWAL_CAST + case SP_VARCASTRATE: val = sd->bonus.varcastrate; break; + case SP_ADD_VARIABLECAST:val = sd->bonus.add_varcast; break; +#endif } return val; diff --git a/src/map/script.c b/src/map/script.c index 82b05af5ce..aa79d923e4 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -7344,10 +7344,10 @@ BUILDIN_FUNC(strnpcinfo) // aegis->athena slot position conversion table -static unsigned int equip[] = {EQP_HEAD_TOP,EQP_ARMOR,EQP_HAND_L,EQP_HAND_R,EQP_GARMENT,EQP_SHOES,EQP_ACC_L,EQP_ACC_R,EQP_HEAD_MID,EQP_HEAD_LOW}; +static unsigned int equip[] = {EQP_HEAD_TOP,EQP_ARMOR,EQP_HAND_L,EQP_HAND_R,EQP_GARMENT,EQP_SHOES,EQP_ACC_L,EQP_ACC_R,EQP_HEAD_MID,EQP_HEAD_LOW,EQP_COSTUME_HEAD_LOW,EQP_COSTUME_HEAD_MID,EQP_COSTUME_HEAD_TOP}; /*========================================== - * GetEquipID(Pos); Pos: 1-10 + * GetEquipID(Pos); Pos: 1-13 *------------------------------------------*/ BUILDIN_FUNC(getequipid) { diff --git a/src/map/skill.c b/src/map/skill.c index 7cd52214a2..378e0f8876 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2191,6 +2191,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds struct map_session_data *sd, *tsd; int type,damage,rdamage=0; int8 rmdamage=0;//magic reflected + bool additional_effects = true; if(skill_id > 0 && !skill_lv) return 0; @@ -2271,7 +2272,8 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds sc->data[SC_SPIRIT]->val3 = skill_id; sc->data[SC_SPIRIT]->val4 = dsrc->id; } - } + } else if( type != 2 ) /* Kaite bypasses */ + additional_effects = false; /** * Official Magic Reflection Behavior : damage reflected depends on gears caster wears, not target @@ -2617,7 +2619,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds { //Instant damage if( !sc || (!sc->data[SC_DEVOTION] && skill_id != CR_REFLECTSHIELD) ) status_fix_damage(src,bl,damage,dmg.dmotion); //Deal damage before knockback to allow stuff like firewall+storm gust combo. - if( !status_isdead(bl) ) + if( !status_isdead(bl) && additional_effects ) skill_additional_effect(src,bl,skill_id,skill_lv,dmg.flag,dmg.dmg_lv,tick); if( damage > 0 ) //Counter status effects [Skotlex] skill_counter_additional_effect(src,bl,skill_id,skill_lv,dmg.flag,tick); @@ -2691,10 +2693,9 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds //Delayed damage must be dealt after the knockback (it needs to know actual position of target) if (dmg.amotion) - battle_delay_damage(tick, dmg.amotion,src,bl,dmg.flag,skill_id,skill_lv,damage,dmg.dmg_lv,dmg.dmotion); + battle_delay_damage(tick, dmg.amotion,src,bl,dmg.flag,skill_id,skill_lv,damage,dmg.dmg_lv,dmg.dmotion, additional_effects); - if( sc && sc->data[SC_DEVOTION] && skill_id != PA_PRESSURE ) - { + if( sc && sc->data[SC_DEVOTION] && skill_id != PA_PRESSURE ) { struct status_change_entry *sce = sc->data[SC_DEVOTION]; struct block_list *d_bl = map_id2bl(sce->val1); @@ -2706,8 +2707,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds if(!rmdamage){ clif_damage(d_bl,d_bl, gettick(), 0, 0, damage, 0, 0, 0); status_fix_damage(NULL,d_bl, damage, 0); - } - else{//Reflected magics are done directly on the target not on paladin + } else {//Reflected magics are done directly on the target not on paladin //This check is only for magical skill. //For BF_WEAPON skills types track var rdamage and function battle_calc_return_damage clif_damage(bl,bl, gettick(), 0, 0, damage, 0, 0, 0); @@ -2749,7 +2749,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds map_foreachinshootrange(battle_damage_area,bl,skill_get_splash(LG_REFLECTDAMAGE,1),BL_CHAR,tick,bl,dmg.amotion,sstatus->dmotion,rdamage,tstatus->race); } else { if( dmg.amotion ) - battle_delay_damage(tick, dmg.amotion,bl,src,0,CR_REFLECTSHIELD,0,rdamage,ATK_DEF,0); + battle_delay_damage(tick, dmg.amotion,bl,src,0,CR_REFLECTSHIELD,0,rdamage,ATK_DEF,0,additional_effects); else status_fix_damage(bl,src,rdamage,0); clif_damage(src,src,tick, dmg.amotion,0,rdamage,1,4,0); // in aegis damage reflected is shown in single hit.