From 652d77eb0287a13fca25d47eb5317de1b538fe87 Mon Sep 17 00:00:00 2001 From: Aleos Date: Wed, 25 Mar 2020 13:26:26 -0400 Subject: [PATCH] Job Improvement Project - Genetic (#3284) * Fixes #2571. * Updates Homunculus skills from kRO maintenance: http://ro.gnjoy.com/news/update/View.asp?seq=218&curpage=1 * Updates Genetic skills from kRO maintenance: http://ro.gnjoy.com/news/update/View.asp?seq=246&curpage=1 Thanks to @Tokeiburu, @Badarosk0, @Balferian, and @Haydrich! --- conf/battle/homunc.conf | 7 +- db/homun_skill_tree.txt | 20 +- db/pre-re/skill_db.yml | 56 +-- db/pre-re/skill_nocast_db.txt | 1 - db/pre-re/skill_tree.txt | 6 - db/re/exp_homun.txt | 325 ++++++++------- db/re/produce_db.txt | 72 ++-- db/re/skill_db.yml | 730 +++++++++++++++++++++------------- db/re/skill_nocast_db.txt | 5 - db/re/skill_tree.txt | 8 - src/map/battle.cpp | 105 ++--- src/map/battle.hpp | 1 + src/map/homunculus.cpp | 4 +- src/map/itemdb.hpp | 13 +- src/map/map.cpp | 2 + src/map/mob.cpp | 13 +- src/map/script.cpp | 4 + src/map/script_constants.hpp | 1 + src/map/skill.cpp | 200 ++-------- src/map/status.cpp | 60 +-- src/map/status.hpp | 2 + src/map/unit.cpp | 1 + 22 files changed, 811 insertions(+), 825 deletions(-) diff --git a/conf/battle/homunc.conf b/conf/battle/homunc.conf index acf42ce933..8338fe68b2 100644 --- a/conf/battle/homunc.conf +++ b/conf/battle/homunc.conf @@ -50,7 +50,7 @@ homunculus_auto_vapor: 80 homunculus_max_level: 99 // Max level for Homunculus S -homunculus_S_max_level: 150 +homunculus_S_max_level: 175 // Growth level for Homunculus S // This is the level at which homunculus S can use their growth tables @@ -70,3 +70,8 @@ homunculus_autofeed_always: yes // You will only receive items if 'homunculus_autoloot' is activated, // otherwise they will be dropped on the ground as usual. hom_idle_no_share: no + +// The rate at which homunculus gain experience from kills. (Note 2) +// Only applies to renewal mode. +// Official: 10% +homunculus_exp_gain: 10 diff --git a/db/homun_skill_tree.txt b/db/homun_skill_tree.txt index 01afb4988a..ae44218702 100644 --- a/db/homun_skill_tree.txt +++ b/db/homun_skill_tree.txt @@ -89,31 +89,31 @@ //Eira 6048,8022,5,128,0,0,0,0,0,0,0,0,0,0,0 //MH_LIGHT_OF_REGENE 6048,8023,5,114,0,0,0,0,0,0,0,0,0,0,0 //MH_OVERED_BOOST -6048,8024,5,106,0,0,0,0,0,0,0,0,0,0,0 //MH_ERASER_CUTTER -6048,8025,5,121,0,0,0,0,0,0,0,0,0,0,0 //MH_XENO_SLASHER +6048,8024,10,106,0,0,0,0,0,0,0,0,0,0,0 //MH_ERASER_CUTTER +6048,8025,10,121,0,0,0,0,0,0,0,0,0,0,0 //MH_XENO_SLASHER 6048,8026,5,137,0,0,0,0,0,0,0,0,0,0,0 //MH_SILENT_BREEZE //Bayeri -6049,8031,5,105,0,0,0,0,0,0,0,0,0,0,0 //MH_STAHL_HORN +6049,8031,10,105,0,0,0,0,0,0,0,0,0,0,0 //MH_STAHL_HORN 6049,8032,5,112,0,0,0,0,0,0,0,0,0,0,0 //MH_GOLDENE_FERSE 6049,8033,5,121,0,0,0,0,0,0,0,0,0,0,0 //MH_STEINWAND -6049,8034,5,138,0,0,0,0,0,0,0,0,0,0,0 //MH_HEILIGE_STANGE +6049,8034,10,138,0,0,0,0,0,0,0,0,0,0,0 //MH_HEILIGE_STANGE 6049,8035,5,130,0,0,0,0,0,0,0,0,0,0,0 //MH_ANGRIFFS_MODUS //Sera 6050,8018,5,132,0,0,0,0,0,0,0,0,0,0,0 //MH_SUMMON_LEGION -6050,8019,5,105,0,0,0,0,0,0,0,0,0,0,0 //MH_NEEDLE_OF_PARALYZE +6050,8019,10,105,0,0,0,0,0,0,0,0,0,0,0 //MH_NEEDLE_OF_PARALYZE 6050,8020,5,116,0,0,0,0,0,0,0,0,0,0,0 //MH_POISON_MIST -6050,8021,5,123,0,0,0,0,0,0,0,0,0,0,0 //MH_PAIN_KILLER +6050,8021,10,123,0,0,0,0,0,0,0,0,0,0,0 //MH_PAIN_KILLER //Dieter 6051,8039,5,122,0,0,0,0,0,0,0,0,0,0,0 //MH_MAGMA_FLOW 6051,8040,5,116,0,0,0,0,0,0,0,0,0,0,0 //MH_GRANITIC_ARMOR -6051,8041,5,109,0,0,0,0,0,0,0,0,0,0,0 //MH_LAVA_SLIDE -6051,8042,5,131,0,0,0,0,0,0,0,0,0,0,0 //MH_PYROCLASTIC +6051,8041,10,109,0,0,0,0,0,0,0,0,0,0,0 //MH_LAVA_SLIDE +6051,8042,10,131,0,0,0,0,0,0,0,0,0,0,0 //MH_PYROCLASTIC 6051,8043,5,102,0,0,0,0,0,0,0,0,0,0,0 //MH_VOLCANIC_ASH //Elanor 6052,8027,1,100,0,0,0,0,0,0,0,0,0,0,0 //MH_STYLE_CHANGE 6052,8028,5,100,0,0,0,0,0,0,0,0,0,0,0 //MH_SONIC_CRAW -6052,8029,5,114,0,0,0,0,0,0,0,0,0,0,0 //MH_SILVERVEIN_RUSH -6052,8030,5,128,0,0,0,0,0,0,0,0,0,0,0 //MH_MIDNIGHT_FRENZY +6052,8029,10,114,0,0,0,0,0,0,0,0,0,0,0 //MH_SILVERVEIN_RUSH +6052,8030,10,128,0,0,0,0,0,0,0,0,0,0,0 //MH_MIDNIGHT_FRENZY 6052,8036,5,100,0,0,0,0,0,0,0,0,0,0,0 //MH_TINDER_BREAKER 6052,8037,5,112,0,0,0,0,0,0,0,0,0,0,0 //MH_CBC 6052,8038,5,133,0,0,0,0,0,0,0,0,0,0,0 //MH_EQC diff --git a/db/pre-re/skill_db.yml b/db/pre-re/skill_db.yml index fd49f775ab..e3fdc5b649 100644 --- a/db/pre-re/skill_db.yml +++ b/db/pre-re/skill_db.yml @@ -27355,24 +27355,10 @@ Body: ItemCost: - Item: Mandragora_Flowerpot Amount: 1 - - Id: 2493 - Name: GN_SLINGITEM - Description: Sling Item - MaxLevel: 1 - TargetType: Support - DamageFlags: - NoDamage: true - Flags: - NoTargetSelf: true - Range: 11 - Hit: Single - HitCount: 1 - Cooldown: 1000 - Requires: - SpCost: 4 - Ammo: - Throwweapon: true - AmmoAmount: 1 +# - Id: 2493 # Removed on kRO +# Name: GN_SLINGITEM +# Description: Sling Item +# MaxLevel: 1 - Id: 2494 Name: GN_CHANGEMATERIAL Description: Change Material @@ -27399,21 +27385,10 @@ Body: Amount: 5 - Level: 2 Amount: 40 - - Id: 2496 - Name: GN_MAKEBOMB - Description: Create Bomb - MaxLevel: 2 - TargetType: Self - DamageFlags: - NoDamage: true - Hit: Single - HitCount: 1 - Requires: - SpCost: - - Level: 1 - Amount: 5 - - Level: 2 - Amount: 40 +# - Id: 2496 # Removed on kRO +# Name: GN_MAKEBOMB +# Description: Create Bomb +# MaxLevel: 2 - Id: 2497 Name: GN_S_PHARMACY Description: Special Pharmacy @@ -27425,17 +27400,10 @@ Body: HitCount: 1 Requires: SpCost: 12 - - Id: 2498 - Name: GN_SLINGITEM_RANGEMELEEATK - Description: Sling Item Attack - MaxLevel: 1 - Type: Weapon - TargetType: Attack - Range: 11 - Hit: Single - HitCount: 1 - Requires: - SpCost: 1 +# - Id: 2498 # Removed on kRO +# Name: GN_SLINGITEM_RANGEMELEEATK +# Description: Sling Item Attack +# MaxLevel: 1 - Id: 2533 Name: ALL_ODINS_RECALL Description: Odin's Recall diff --git a/db/pre-re/skill_nocast_db.txt b/db/pre-re/skill_nocast_db.txt index 5081ede917..f0bcf50c4c 100644 --- a/db/pre-re/skill_nocast_db.txt +++ b/db/pre-re/skill_nocast_db.txt @@ -179,4 +179,3 @@ 2303,2048 //SC_BLOODYLUST 2419,2048 //WM_POEMOFNETHERWORLD 2482,2048 //GN_WALLOFTHORN -2493,2048 //GN_SLINGITEM diff --git a/db/pre-re/skill_tree.txt b/db/pre-re/skill_tree.txt index d55daacf14..8ac125d3ca 100644 --- a/db/pre-re/skill_tree.txt +++ b/db/pre-re/skill_tree.txt @@ -3403,10 +3403,8 @@ 4071,2486,5,2485,3,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION#Fire Expansion# 4071,2490,5,2480,3,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT#Hell's Plant# 4071,2492,5,2490,3,0,0,0,0,0,0,0,0 //GN_MANDRAGORA#Howling of Mandragora# -4071,2493,1,2494,1,0,0,0,0,0,0,0,0 //GN_SLINGITEM#Sling Item# 4071,2494,1,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL#Change Material# 4071,2495,2,2497,1,0,0,0,0,0,0,0,0 //GN_MIX_COOKING#Mix Cooking# -4071,2496,2,2495,1,0,0,0,0,0,0,0,0 //GN_MAKEBOMB#Create Bomb# 4071,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4071,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4071,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# @@ -3847,10 +3845,8 @@ 4078,2486,5,2485,3,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION#Fire Expansion# 4078,2490,5,2480,3,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT#Hell's Plant# 4078,2492,5,2490,3,0,0,0,0,0,0,0,0 //GN_MANDRAGORA#Howling of Mandragora# -4078,2493,1,2494,1,0,0,0,0,0,0,0,0 //GN_SLINGITEM#Sling Item# 4078,2494,1,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL#Change Material# 4078,2495,2,2497,1,0,0,0,0,0,0,0,0 //GN_MIX_COOKING#Mix Cooking# -4078,2496,2,2495,1,0,0,0,0,0,0,0,0 //GN_MAKEBOMB#Create Bomb# 4078,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4078,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4078,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# @@ -5056,10 +5052,8 @@ 4107,2486,5,2485,3,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION#Fire Expansion# 4107,2490,5,2480,3,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT#Hell's Plant# 4107,2492,5,2490,3,0,0,0,0,0,0,0,0 //GN_MANDRAGORA#Howling of Mandragora# -4107,2493,1,2494,1,0,0,0,0,0,0,0,0 //GN_SLINGITEM#Sling Item# 4107,2494,1,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL#Change Material# 4107,2495,2,2497,1,0,0,0,0,0,0,0,0 //GN_MIX_COOKING#Mix Cooking# -4107,2496,2,2495,1,0,0,0,0,0,0,0,0 //GN_MAKEBOMB#Create Bomb# 4107,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4107,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4107,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# diff --git a/db/re/exp_homun.txt b/db/re/exp_homun.txt index b9238737cf..26f1146f7a 100644 --- a/db/re/exp_homun.txt +++ b/db/re/exp_homun.txt @@ -1,151 +1,176 @@ // Homunculus Experience Tables -347 -545 -891 -1485 -2178 -3168 -3762 -4158 -4505 -4900 -5390 -5880 -5978 -6223 -6566 -7203 -7840 -8232 -8624 -8924 -9409 -9991 -10670 -11446 -12610 -13580 -14550 -15520 -16490 -17460 -18430 -19400 -20370 -21340 -22504 -23280 -25220 -26675 -28130 -28800 -30240 -31680 -32640 -34560 -36000 -36480 -38400 -40320 -42720 -45120 -47040 -48960 -50880 -52800 -54720 -56640 -59040 -60480 -62400 -64320 -66240 -67200 -70080 -73920 -76800 -80640 -84480 -87360 -91200 -104500 -121600 -133000 -147250 -154850 -161500 -171000 -178600 -185250 -190000 -218500 -247000 -285000 -332500 -380000 -456000 -522500 -570000 -646000 -712500 -855000 -950000 -1140000 -1425000 -1710000 -1995000 -2280000 -2660000 -3135000 -3800000 -4124000 -4260000 -4462000 -4527000 -4779000 -4921000 -4984000 -5118000 -5353000 -5438000 -5507000 -5610000 -5776000 -5867000 -6000000 -6116000 -6241000 -6373000 -6498000 -6639000 -6720000 -6907000 -7025000 -7105000 -7264000 -7454000 -7611000 -7688000 -7735000 -7940000 -8020000 -8198000 -8318000 -8376000 -8469000 -8528000 -8573000 -8650000 -8701000 -8769000 -8814000 -8820000 -8826000 -8838000 -8887000 -8905000 -8916000 -8922000 -8966000 -9094000 -0 +50 +110 +180 +260 +350 +630 +950 +1310 +1710 +2150 +3180 +4300 +5510 +6810 +8200 +10800 +13560 +16480 +19560 +22800 +28090 +33630 +39420 +45460 +51750 +61150 +70910 +81030 +91510 +102350 +117580 +133300 +149510 +166210 +183400 +206480 +230200 +254560 +279560 +305200 +338450 +372510 +407380 +443060 +479550 +525590 +572630 +620670 +669710 +719750 +781500 +844460 +908630 +974010 +1040600 +1121280 +1203400 +1286960 +1371960 +1458400 +1561530 +1666350 +1772860 +1881060 +1990950 +2120350 +2251710 +2385030 +2520310 +2657550 +2817340 +2979380 +3143670 +3310210 +3479000 +3673600 +3870760 +4070480 +4272760 +4477600 +4711730 +4948750 +5188660 +5431460 +5677150 +5955830 +6237750 +6522910 +6811310 +7102950 +7431500 +7763660 +8099430 +8438810 +8781800 +9165840 +9553880 +9945920 +10350000 +10462000 +10580000 +10700000 +10826000 +10980000 +11150000 +11334000 +11520000 +11712000 +11906000 +12108000 +12317000 +12530000 +12745000 +12968000 +13193000 +13420000 +13653000 +13890000 +14130000 +14374200 +14620000 +14870000 +15123200 +15378000 +15638000 +15900000 +16164000 +16430000 +16698000 +16970000 +17245000 +17523000 +17804000 +18090000 +18380000 +18675000 +18974000 +19280000 +19588000 +19900000 +20215000 +20534000 +20854200 +21180000 +21509500 +21847000 +22197000 +22558000 +22930000 +23320000 +24500000 +25750000 +26750000 +28000000 +29000000 +30250000 +31250000 +32500000 +33500000 +34750000 +36250000 +38050000 +40210000 +42800000 +47982500 +50572500 +53680000 +57410000 +61887500 +70842500 +75320000 +80692500 +87140000 +94875000 +0 diff --git a/db/re/produce_db.txt b/db/re/produce_db.txt index 415d4edde5..427caead60 100644 --- a/db/re/produce_db.txt +++ b/db/re/produce_db.txt @@ -616,67 +616,69 @@ //-- Petti Tail Noodle <-- GN_MIX_COOKING Lv1, Mix Cook Book, 1 Melange Pot, 2 Petti Tail, 1 Fine Noodle, 1 Cool Gravy 245,12434,27,2495,1,11022,0,6248,1,6260,2,6261,1,6262,1 -//---- Create Bomb --- ItemLV=28 --------------- -//-- Apple Bomb <-- GN_MAKEBOMB Lv1, Apple Bomb CB, 1 Apple, 1 Scell, 1 Detonator, 1 Gun Powder -246,13260,28,2496,1,6279,0,512,1,911,1,1051,1,6244,1 -//-- Coconut Bomb <-- GN_MAKEBOMB Lv1, Coconut Bomb CB, 1 Detonator, 1 Coconut Fruit, 2 Gun Powder -247,13261,28,2496,1,6281,0,1051,1,6263,1,6244,2 -//-- Melon Bomb <-- GN_MAKEBOMB Lv1, Melon Bomb CB, 1 Sticky Mucus, 1 Detonator, 2 Gun Powder, 1 Melon -248,13262,28,2496,1,6282,0,938,1,1051,1,6244,2,6264,1 -//-- Pineapple Bomb <-- GN_MAKEBOMB Lv1, Pinepple Bomb CB, 1 Cactus Needle, 1 Detonator, 3 Gun Powder, 1 Pineapple -249,13263,28,2496,1,6280,0,952,1,1051,1,6244,3,6265,1 -//-- Banana Bomb <-- GN_MAKEBOMB Lv1, Banana Bomb CB, 1 Banana, 1 Detonator, 4 Gun Powder, 1 Mould Powder -250,13264,28,2496,1,6283,0,513,1,1051,1,6244,4,7001,1 +//---- Create Bomb --- ItemLV=28 --------------- Removed skill (free slot) //---- Special Pharmacy --- ItemLV=29 ---------- //-- Seed Of Horny Plant <-- GN_S_PHARMACY Lv1, Plant Genetic Grow, 10 Prickly Fruit -251,6210,29,2497,1,6284,0,576,10 +246,6210,29,2497,1,6284,0,576,10 //-- Bloodsuck Plant Seed <-- GN_S_PHARMACY Lv1, Plant Genetic Grow, 10 Root Of Maneater -252,6211,29,2497,1,6284,0,1033,10 +247,6211,29,2497,1,6284,0,1033,10 //-- Bomb Mushroom Spore <-- GN_S_PHARMACY Lv1, Plant Genetic Grow, 10 Mushroom Spore, 2 Gun Powder, 5 Poison Spore -253,6212,29,2497,1,6284,0,921,10,6244,2,7033,5 +248,6212,29,2497,1,6284,0,921,10,6244,2,7033,5 //-- HP Increase Potion (Small) <-- GN_S_PHARMACY Lv1, Increase Stamina Study, 10 White Herb, 5 Monster's Feed, 10 Empty Bottle, 1 Hot Sauce -254,12422,29,2497,1,11023,0,509,10,528,5,713,10,7455,1 +249,12422,29,2497,1,11023,0,509,10,528,5,713,10,7455,1 //-- HP Increase Potion (Medium) <-- GN_S_PHARMACY Lv1, Increase Stamina Study, 10 Yellow Herb, 10 White Herb, 10 Empty Bottle, 1 Hot Sauce -255,12423,29,2497,1,11023,0,508,10,509,10,713,10,7455,1 +250,12423,29,2497,1,11023,0,508,10,509,10,713,10,7455,1 //-- HP Increase Potion (Large) <-- GN_S_PHARMACY Lv1, Increase Stamina Study, 15 White Herb, 3 Fruit Of Mastela, 1 Holy Water, 10 Empty Bottle, 1 Hot Sauce -256,12424,29,2497,1,11023,0,509,15,522,3,523,1,713,10,7455,1 +251,12424,29,2497,1,11023,0,509,15,522,3,523,1,713,10,7455,1 //-- SP Increase Potion (Small) <-- GN_S_PHARMACY Lv1, Vital Drink CB, 10 Grape, 10 Lemon, 10 Empty Bottle, 1 Sweet Sauce -257,12425,29,2497,1,11024,0,514,10,568,10,713,10,7453,1 +252,12425,29,2497,1,11024,0,514,10,568,10,713,10,7453,1 //-- SP Increase Potion (Medium) <-- GN_S_PHARMACY Lv1, Vital Drink CB, 10 Blue Herb, 10 Honey, 10 Empty Bottle, 1 Sweet Sauce -258,12426,29,2497,1,11024,0,510,10,518,10,713,10,7453,1 +253,12426,29,2497,1,11024,0,510,10,518,10,713,10,7453,1 //-- SP Increase Potion (Large) <-- GN_S_PHARMACY Lv1, Vital Drink CB, 15 Blue Herb, 10 Royal Jelly, 10 Empty Bottle, 1 Sweet Sauce -259,12427,29,2497,1,11024,0,510,15,526,10,713,10,7453,1 +254,12427,29,2497,1,11024,0,510,15,526,10,713,10,7453,1 //-- Enrich White Potion Z <-- GN_S_PHARMACY Lv1, Quality Potion Book, 20 White Potion, 10 White Herb, 1 Alchol, 10 Empty Cylinder -260,12428,29,2497,1,6285,0,504,20,509,10,970,1,1092,10 +255,12428,29,2497,1,6285,0,504,20,509,10,970,1,1092,10 //-- Vitata 500 <-- GN_S_PHARMACY Lv1, Quality Potion Book, 10 Blue Herb, 10 Grape, 10 Honey, 10 Empty Cylinder -261,12436,29,2497,1,6285,0,510,10,514,10,518,10,1092,10 +256,12436,29,2497,1,6285,0,510,10,514,10,518,10,1092,10 //-- Enrich Celermine Juice <-- GN_S_PHARMACY Lv1, Quality Potion Book, 5 Center Potion, 5 Awakening Potion, 10 Empty Cylinder, 5 Hot Sauce -262,12437,29,2497,1,6285,0,645,5,656,5,1092,10,7455,5 +257,12437,29,2497,1,6285,0,645,5,656,5,1092,10,7455,5 //-- Cure Free <-- GN_S_PHARMACY Lv1, Quality Potion Book, 20 Green Herb, 1 Fruit Of Mastela, 5 Panacea, 1 Leaf Of Yggdrasil, 10 Empty Cylinder -263,12475,29,2497,1,6285,0,511,20,522,1,525,5,610,1,1092,10 +258,12475,29,2497,1,6285,0,511,20,522,1,525,5,610,1,1092,10 +//-- Golden X <-- GN_S_PHARMACY Lvl, 10 Empty Testtube, 10 Yggdrasilberry, 5 Gold +//259,100231,29,2497,1,1092,10,607,10,969,5 +//-- Red Herb Activator <-- GN_S_PHARMACY Lvl, 10 Empty Testtube, 45 Red Herb, 5 Yggdrasil Seed +//260,100232,29,2497,1,1092,10,507,45,608,5 +//-- Blue Herb Activator <-- GN_S_PHARMACY Lvl, 10 Empty Testtube, 15 Blue Herb, 5 Yggdrasil Seed +//261,100233,29,2497,1,1092,10,510,15,608,5 +//-- Concentrated Red Syrup Potion <-- GN_S_PHARMACY Lvl, 10 Empty Testtube, 10 Empty Potion Bottle, 15 Red Syrup +//262,1100003,29,2497,1,1092,10,1093,10,11621,15 +//-- Concentrated Blue Syrup Potion <-- GN_S_PHARMACY Lvl, 10 Empty Testtube, 10 Empty Potion Bottle, 15 Blue Syrup +//263,1100004,29,2497,1,1092,10,1093,10,11624,15 +//-- Concentrated Golden Syrup Potion <-- GN_S_PHARMACY Lvl, 10 Empty Testtube, 10 Empty Potion Bottle, 15 White Syrup, 15 Yellow Syrup +//264,1100005,29,2497,1,1092,10,1093,10,11623,15,11622,15 //=============================================== //--------------------LEVEL 30----------- // Novice Red Potion (569) <-- 2 Red Herbs, 1 Apple -264,569,30,0,0,11058,0,507,2,512,1 +265,569,30,0,0,11058,0,507,2,512,1 // Novice Magnifier (12325) <-- 3 Fine-grained Trunk, 1 Jellopy -265,12325,30,0,0,11058,0,1066,3,909,1 +266,12325,30,0,0,11058,0,1066,3,909,1 // Novice Fly Wing (12323) <-- 2 Fluffs, 2 Feathers, 2 Jellopies -266,12323,30,0,0,11058,0,914,2,949,2,909,2 +267,12323,30,0,0,11058,0,914,2,949,2,909,2 // Novice Cutter (13040) <-- 10 Shells, 10 Worm Peelings, 1 Phracon -267,13040,30,0,0,11058,0,935,10,955,10,1010,1 +268,13040,30,0,0,11058,0,935,10,955,10,1010,1 // Little Unripe Apple (12846) <-- 1 Apple, 1 Green Herb -268,12846,30,0,0,11058,0,512,1,511,1 +269,12846,30,0,0,11058,0,512,1,511,1 // Four Leaf Clover (706) <-- 200 Clovers, 200 Sticky Mucus -269,706,30,0,0,11058,0,705,200,938,200 +270,706,30,0,0,11058,0,705,200,938,200 // Banana Juice (532) <-- 1 Banana, 1 Milk -270,532,30,0,0,11058,0,513,1,519,1 +271,532,30,0,0,11058,0,513,1,519,1 // Apple Juice (531) <-- 1 Apple, 1 Milk -271,531,30,0,0,11058,0,512,1,519,1 +272,531,30,0,0,11058,0,512,1,519,1 // Carrot Juice (534) <-- 1 Carrot, 1 Milk -272,534,30,0,0,11058,0,515,1,519,1 +273,534,30,0,0,11058,0,515,1,519,1 // Grape Juice (533) <-- 1 Grape, 1 Milk -273,533,30,0,0,11058,0,514,1,519,1 +274,533,30,0,0,11058,0,514,1,519,1 // Unripe Apple (619) <-- 10 Sticky Mucus, 20 Green Herbs, 10 Apples -274,619,30,0,0,11058,0,938,10,511,20,512,10 +275,619,30,0,0,11058,0,938,10,511,20,512,10 diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 25f0481b53..623cbb5cc6 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -13584,11 +13584,8 @@ Body: Name: CR_ACIDDEMONSTRATION Description: Acid Demonstration MaxLevel: 10 - Type: Misc + Type: Weapon TargetType: Attack - DamageFlags: - IgnoreDefense: true - IgnoreFlee: true Range: 9 Hit: Multi_Hit HitCount: @@ -13615,32 +13612,19 @@ Body: Element: Weapon CastCancel: true AfterCastActDelay: 1000 + Cooldown: 150 FixedCastTime: 1000 Requires: - SpCost: 30 + SpCost: 50 ItemCost: - Item: Fire_Bottle Amount: 1 - Item: Acid_Bottle Amount: 1 - - Id: 491 - Name: CR_CULTIVATION - Description: Plant Cultivation - MaxLevel: 2 - TargetType: Ground - DamageFlags: - NoDamage: true - Range: 1 - Hit: Single - HitCount: 1 - Duration1: 300000 - Requires: - SpCost: 10 - ItemCost: - - Item: Mushroom_Spore - Amount: 1 - - Item: Stem - Amount: 1 +# - Id: 491 # Removed on kRO +# Name: CR_CULTIVATION +# Description: Plant Cultivation +# MaxLevel: 2 - Id: 492 Name: ITEM_ENCHANTARMS Description: Weapon Enchantment @@ -27902,10 +27886,11 @@ Body: Type: Weapon TargetType: Attack DamageFlags: + NoDamage: true Splash: true Range: 11 - Hit: Single - HitCount: 3 + Hit: Multi_Hit + HitCount: 2 Element: Weapon SplashArea: - Level: 1 @@ -27934,7 +27919,7 @@ Body: CastCancel: true CastTime: 1500 AfterCastActDelay: 500 - Duration1: 2000 + Duration1: 500 Cooldown: 5000 FixedCastTime: -1 Requires: @@ -28100,10 +28085,31 @@ Body: Flags: TargetTrap: true IgnoreLandProtector: true - Hit: Single - HitCount: 1 - Element: Earth + Hit: Multi_Hit + HitCount: 2 + Element: Weapon SplashArea: 2 + ActiveInstance: + - Level: 1 + Max: 5 + - Level: 2 + Max: 6 + - Level: 3 + Max: 6 + - Level: 4 + Max: 7 + - Level: 5 + Max: 7 + - Level: 6 + Max: 8 + - Level: 7 + Max: 8 + - Level: 8 + Max: 9 + - Level: 9 + Max: 9 + - Level: 10 + Max: 10 CopyFlags: Skill: Reproduce: true @@ -28303,28 +28309,11 @@ Body: Name: GN_HELLS_PLANT Description: Hell's Plant MaxLevel: 5 - Type: Misc - TargetType: Ground + TargetType: Self DamageFlags: NoDamage: true - Splash: true - Flags: - IsTrap: true - Range: 9 Hit: Single HitCount: 1 - SplashArea: 1 - ActiveInstance: - - Level: 1 - Max: 2 - - Level: 2 - Max: 3 - - Level: 3 - Max: 4 - - Level: 4 - Max: 5 - - Level: 5 - Max: 6 CopyFlags: Skill: Reproduce: true @@ -28343,15 +28332,15 @@ Body: AfterCastActDelay: 500 Duration1: - Level: 1 - Time: 14000 + Time: 60000 - Level: 2 - Time: 21000 + Time: 90000 - Level: 3 - Time: 28000 + Time: 120000 - Level: 4 - Time: 35000 + Time: 150000 - Level: 5 - Time: 42000 + Time: 180000 FixedCastTime: -1 Requires: SpCost: @@ -28370,17 +28359,14 @@ Body: Amount: 1 Unit: Id: Hells_Plant - Range: 1 - Interval: 1000 + Range: 2 + Interval: 300 # !TODO: Confirm interval Target: Enemy - Flag: - NoReiteration: true - RemovedByFireRain: true - Id: 2491 Name: GN_HELLS_PLANT_ATK Description: Hell's Plant Attack MaxLevel: 5 - Type: Misc + Type: Weapon TargetType: Attack DamageFlags: IgnoreElement: true @@ -28391,9 +28377,6 @@ Body: Skill: Reproduce: true Duration1: 20000 - FixedCastTime: -1 - Requires: - SpCost: 1 - Id: 2492 Name: GN_MANDRAGORA Description: Howling of Mandragora @@ -28446,25 +28429,10 @@ Body: ItemCost: - Item: Mandragora_Flowerpot Amount: 1 - - Id: 2493 - Name: GN_SLINGITEM - Description: Sling Item - MaxLevel: 1 - TargetType: Support - DamageFlags: - NoDamage: true - Flags: - NoTargetSelf: true - Range: 11 - Hit: Single - HitCount: 1 - Cooldown: 1000 - FixedCastTime: -1 - Requires: - SpCost: 4 - Ammo: - Throwweapon: true - AmmoAmount: 1 +# - Id: 2493 # Removed on kRO +# Name: GN_SLINGITEM +# Description: Sling Item +# MaxLevel: 1 - Id: 2494 Name: GN_CHANGEMATERIAL Description: Change Material @@ -28491,21 +28459,10 @@ Body: Amount: 5 - Level: 2 Amount: 40 - - Id: 2496 - Name: GN_MAKEBOMB - Description: Create Bomb - MaxLevel: 2 - TargetType: Self - DamageFlags: - NoDamage: true - Hit: Single - HitCount: 1 - Requires: - SpCost: - - Level: 1 - Amount: 5 - - Level: 2 - Amount: 40 +# - Id: 2496 # Removed on kRO +# Name: GN_MAKEBOMB +# Description: Create Bomb +# MaxLevel: 2 - Id: 2497 Name: GN_S_PHARMACY Description: Special Pharmacy @@ -28517,17 +28474,10 @@ Body: HitCount: 1 Requires: SpCost: 12 - - Id: 2498 - Name: GN_SLINGITEM_RANGEMELEEATK - Description: Sling Item Attack - MaxLevel: 1 - Type: Weapon - TargetType: Attack - Range: 11 - Hit: Single - HitCount: 1 - Requires: - SpCost: 1 +# - Id: 2498 # Removed on kRO +# Name: GN_SLINGITEM_RANGEMELEEATK +# Description: Sling Item Attack +# MaxLevel: 1 - Id: 2533 Name: ALL_ODINS_RECALL Description: Odin's Recall @@ -33992,9 +33942,11 @@ Body: - Id: 8019 Name: MH_NEEDLE_OF_PARALYZE Description: Needle of Paralyze - MaxLevel: 5 + MaxLevel: 10 Type: Weapon TargetType: Attack + DamageFlags: + IgnoreDefense: true Range: 5 Hit: Single HitCount: 1 @@ -34003,47 +33955,86 @@ Body: - Level: 1 Time: 1000 - Level: 2 - Time: 1100 + Time: 1000 - Level: 3 - Time: 1200 + Time: 1000 - Level: 4 - Time: 1300 + Time: 1100 - Level: 5 - Time: 1400 - AfterCastActDelay: 2000 + Time: 1100 + - Level: 6 + Time: 1100 + - Level: 7 + Time: 1200 + - Level: 8 + Time: 1200 + - Level: 9 + Time: 1200 + - Level: 10 + Time: 1300 Duration1: - Level: 1 Time: 12000 - Level: 2 - Time: 14000 + Time: 12000 - Level: 3 - Time: 16000 + Time: 12000 - Level: 4 - Time: 18000 + Time: 14000 - Level: 5 - Time: 20000 + Time: 14000 + - Level: 6 + Time: 14000 + - Level: 7 + Time: 16000 + - Level: 8 + Time: 16000 + - Level: 9 + Time: 16000 + - Level: 10 + Time: 18000 FixedCastTime: - Level: 1 Time: 500 - Level: 2 - Time: 400 + Time: 500 - Level: 3 - Time: 300 + Time: 500 - Level: 4 - Time: 200 + Time: 400 - Level: 5 - Time: 100 + Time: 400 + - Level: 6 + Time: 400 + - Level: 7 + Time: 300 + - Level: 8 + Time: 300 + - Level: 9 + Time: 300 + - Level: 10 + Time: 200 Requires: SpCost: - Level: 1 - Amount: 48 + Amount: 42 - Level: 2 - Amount: 60 + Amount: 48 - Level: 3 - Amount: 72 + Amount: 54 - Level: 4 - Amount: 84 + Amount: 60 - Level: 5 + Amount: 66 + - Level: 6 + Amount: 72 + - Level: 7 + Amount: 78 + - Level: 8 + Amount: 84 + - Level: 9 + Amount: 90 + - Level: 10 Amount: 96 - Id: 8020 Name: MH_POISON_MIST @@ -34113,46 +34104,76 @@ Body: - Id: 8021 Name: MH_PAIN_KILLER Description: Pain Killer - MaxLevel: 5 + MaxLevel: 10 TargetType: Support DamageFlags: NoDamage: true - Range: 1 + Range: 5 Hit: Single HitCount: 1 CastTime: - Level: 1 Time: 1000 - Level: 2 - Time: 1200 + Time: 1100 - Level: 3 - Time: 1400 + Time: 1200 - Level: 4 - Time: 1600 + Time: 1300 - Level: 5 + Time: 1400 + - Level: 6 + Time: 1500 + - Level: 7 + Time: 1600 + - Level: 8 + Time: 1700 + - Level: 9 Time: 1800 + - Level: 10 + Time: 1900 Duration1: - Level: 1 - Time: 20000 - - Level: 2 Time: 30000 - - Level: 3 + - Level: 2 Time: 40000 - - Level: 4 + - Level: 3 Time: 50000 - - Level: 5 + - Level: 4 Time: 60000 + - Level: 5 + Time: 70000 + - Level: 6 + Time: 80000 + - Level: 7 + Time: 90000 + - Level: 8 + Time: 100000 + - Level: 9 + Time: 110000 + - Level: 10 + Time: 120000 FixedCastTime: - Level: 1 Time: 1000 - Level: 2 - Time: 800 + Time: 900 - Level: 3 - Time: 600 + Time: 800 - Level: 4 - Time: 400 + Time: 700 - Level: 5 + Time: 600 + - Level: 6 + Time: 500 + - Level: 7 + Time: 400 + - Level: 8 + Time: 300 + - Level: 9 Time: 200 + - Level: 10 + Time: 100 Requires: SpCost: - Level: 1 @@ -34165,6 +34186,16 @@ Body: Amount: 60 - Level: 5 Amount: 64 + - Level: 6 + Amount: 68 + - Level: 7 + Amount: 72 + - Level: 8 + Amount: 76 + - Level: 9 + Amount: 80 + - Level: 10 + Amount: 84 - Id: 8022 Name: MH_LIGHT_OF_REGENE Description: Light of Regene @@ -34219,7 +34250,7 @@ Body: HitCount: 1 CastTime: - Level: 1 - Time: 800 + Time: 100 - Level: 2 Time: 700 - Level: 3 @@ -34265,36 +34296,36 @@ Body: - Id: 8024 Name: MH_ERASER_CUTTER Description: Eraser Cutter - MaxLevel: 5 + MaxLevel: 10 Type: Magic TargetType: Attack + DamageFlags: + IgnoreDefense: true Range: 7 Hit: Multi_Hit HitCount: -6 - Element: - - Level: 1 - Element: Wind - - Level: 2 - Element: Neutral - - Level: 3 - Element: Wind - - Level: 4 - Element: Neutral - - Level: 5 - Element: Wind CastCancel: true CastTime: - Level: 1 - Time: 1000 + Time: 1500 - Level: 2 Time: 1500 - Level: 3 - Time: 2000 + Time: 1500 - Level: 4 - Time: 2500 + Time: 2000 - Level: 5 + Time: 2000 + - Level: 6 + Time: 2000 + - Level: 7 + Time: 2500 + - Level: 8 + Time: 2500 + - Level: 9 + Time: 2500 + - Level: 10 Time: 3000 - AfterCastActDelay: 2000 FixedCastTime: -1 Requires: SpCost: @@ -34308,65 +34339,95 @@ Body: Amount: 40 - Level: 5 Amount: 45 + - Level: 6 + Amount: 50 + - Level: 7 + Amount: 55 + - Level: 8 + Amount: 60 + - Level: 9 + Amount: 65 + - Level: 10 + Amount: 70 - Id: 8025 Name: MH_XENO_SLASHER Description: Xeno Slasher - MaxLevel: 5 + MaxLevel: 10 Type: Magic TargetType: Ground DamageFlags: Splash: true + IgnoreDefense: true Range: 7 Hit: Multi_Hit HitCount: -6 - Element: - - Level: 1 - Element: Wind - - Level: 2 - Element: Neutral - - Level: 3 - Element: Wind - - Level: 4 - Element: Neutral - - Level: 5 - Element: Wind + Element: Wind SplashArea: - Level: 1 - Area: 2 + Area: 1 - Level: 2 - Area: 2 + Area: 1 - Level: 3 - Area: 3 + Area: 1 - Level: 4 - Area: 3 + Area: 2 - Level: 5 + Area: 2 + - Level: 6 + Area: 2 + - Level: 7 + Area: 3 + - Level: 8 + Area: 3 + - Level: 9 + Area: 3 + - Level: 10 Area: 4 CastTime: - Level: 1 - Time: 1500 + Time: 1700 - Level: 2 - Time: 2500 + Time: 1900 - Level: 3 - Time: 3500 + Time: 2100 - Level: 4 - Time: 4500 + Time: 2300 - Level: 5 - Time: 5500 - AfterCastActDelay: 5000 + Time: 2500 + - Level: 6 + Time: 2700 + - Level: 7 + Time: 2900 + - Level: 8 + Time: 3100 + - Level: 9 + Time: 3300 + - Level: 10 + Time: 3500 Duration1: 500 Duration2: 120000 FixedCastTime: 500 Requires: SpCost: - Level: 1 - Amount: 90 + Amount: 85 - Level: 2 - Amount: 100 + Amount: 90 - Level: 3 - Amount: 110 + Amount: 95 - Level: 4 - Amount: 120 + Amount: 100 - Level: 5 + Amount: 105 + - Level: 6 + Amount: 110 + - Level: 7 + Amount: 115 + - Level: 8 + Amount: 120 + - Level: 9 + Amount: 125 + - Level: 10 Amount: 130 Unit: Id: Dummyskill @@ -34391,12 +34452,6 @@ Body: Size: 0 - Level: 10 Size: 0 - - Level: 11 - Size: 0 - - Level: 12 - Size: 0 - - Level: 13 - Size: 0 Interval: 1000 Target: Enemy Flag: @@ -34478,7 +34533,6 @@ Body: Hit: Single HitCount: 1 AfterCastActDelay: 1000 - FixedCastTime: 500 Requires: SpCost: 35 - Id: 8028 @@ -34489,10 +34543,10 @@ Body: TargetType: Attack Flags: NoTargetSelf: true - Range: 1 - Hit: Multi_Hit + Range: 3 + Hit: Single HitCount: 1 - AfterCastActDelay: 1000 + Cooldown: 1000 FixedCastTime: -1 Requires: SpCost: @@ -34510,111 +34564,131 @@ Body: - Id: 8029 Name: MH_SILVERVEIN_RUSH Description: Silver Bain Rush - MaxLevel: 5 + MaxLevel: 10 Type: Weapon TargetType: Self Flags: NoTargetSelf: true - Range: 1 + Range: 3 Hit: Single HitCount: 1 Duration1: 5000 - Cooldown: 2000 + Cooldown: 1500 FixedCastTime: -1 Requires: SpCost: - Level: 1 - Amount: 10 + Amount: 17 - Level: 2 - Amount: 15 + Amount: 19 - Level: 3 - Amount: 20 + Amount: 21 - Level: 4 - Amount: 25 + Amount: 23 - Level: 5 - Amount: 30 + Amount: 25 + - Level: 6 + Amount: 27 + - Level: 7 + Amount: 29 + - Level: 8 + Amount: 31 + - Level: 9 + Amount: 33 + - Level: 10 + Amount: 35 SpiritSphereCost: 1 - Id: 8030 Name: MH_MIDNIGHT_FRENZY Description: Midnight Frenzy - MaxLevel: 5 + MaxLevel: 10 Type: Weapon TargetType: Self Flags: NoTargetSelf: true - Range: 1 + Range: 3 Hit: Single HitCount: 1 Duration1: 10000 - Cooldown: 2000 + Cooldown: 1500 FixedCastTime: -1 Requires: SpCost: - Level: 1 - Amount: 8 + Amount: 18 - Level: 2 - Amount: 16 + Amount: 21 - Level: 3 Amount: 24 - Level: 4 - Amount: 32 + Amount: 27 - Level: 5 - Amount: 40 - SpiritSphereCost: 2 + Amount: 30 + - Level: 6 + Amount: 33 + - Level: 7 + Amount: 36 + - Level: 8 + Amount: 39 + - Level: 9 + Amount: 42 + - Level: 10 + Amount: 45 + SpiritSphereCost: 1 - Id: 8031 Name: MH_STAHL_HORN Description: Steel Horn - MaxLevel: 5 + MaxLevel: 10 Type: Weapon TargetType: Attack Range: - Level: 1 Size: 5 - Level: 2 - Size: 6 + Size: 5 - Level: 3 - Size: 7 + Size: 6 - Level: 4 - Size: 8 + Size: 6 - Level: 5 + Size: 7 + - Level: 6 + Size: 7 + - Level: 7 + Size: 8 + - Level: 8 + Size: 8 + - Level: 9 + Size: 9 + - Level: 10 Size: 9 Hit: Single HitCount: 1 Knockback: 3 - CastTime: - - Level: 1 - Time: 800 - - Level: 2 - Time: 600 - - Level: 3 - Time: 400 - - Level: 4 - Time: 200 - AfterCastActDelay: 3000 Duration1: 5000 - FixedCastTime: - - Level: 1 - Time: 200 - - Level: 2 - Time: 400 - - Level: 3 - Time: 600 - - Level: 4 - Time: 800 - - Level: 5 - Time: 1000 + FixedCastTime: 500 Requires: SpCost: - Level: 1 - Amount: 40 + Amount: 43 - Level: 2 - Amount: 45 + Amount: 46 - Level: 3 - Amount: 50 + Amount: 49 - Level: 4 - Amount: 55 + Amount: 52 - Level: 5 - Amount: 60 + Amount: 55 + - Level: 6 + Amount: 58 + - Level: 7 + Amount: 61 + - Level: 8 + Amount: 64 + - Level: 9 + Amount: 67 + - Level: 10 + Amount: 70 - Id: 8032 Name: MH_GOLDENE_FERSE Description: Golden Heel @@ -34702,11 +34776,12 @@ Body: - Id: 8034 Name: MH_HEILIGE_STANGE Description: Holy Pole - MaxLevel: 5 + MaxLevel: 10 Type: Magic TargetType: Attack DamageFlags: Splash: true + IgnoreDefense: true Range: 9 Hit: Single HitCount: 1 @@ -34722,6 +34797,16 @@ Body: Area: 1 - Level: 5 Area: 2 + - Level: 6 + Area: 2 + - Level: 7 + Area: 2 + - Level: 8 + Area: 2 + - Level: 9 + Area: 3 + - Level: 10 + Area: 3 CastTime: - Level: 1 Time: 200 @@ -34733,30 +34818,59 @@ Body: Time: 800 - Level: 5 Time: 1000 - AfterCastActDelay: 5000 + - Level: 6 + Time: 1200 + - Level: 7 + Time: 1400 + - Level: 8 + Time: 1600 + - Level: 9 + Time: 1800 + - Level: 10 + Time: 2000 FixedCastTime: - Level: 1 - Time: 1800 + Time: 2000 - Level: 2 - Time: 1600 + Time: 1800 - Level: 3 - Time: 1400 + Time: 1600 - Level: 4 - Time: 1200 + Time: 1400 - Level: 5 + Time: 1200 + - Level: 6 Time: 1000 + - Level: 7 + Time: 800 + - Level: 8 + Time: 600 + - Level: 9 + Time: 400 + - Level: 10 + Time: 200 Requires: SpCost: - Level: 1 - Amount: 60 + Amount: 48 - Level: 2 - Amount: 68 + Amount: 54 - Level: 3 - Amount: 76 + Amount: 60 - Level: 4 - Amount: 84 + Amount: 66 - Level: 5 - Amount: 100 + Amount: 72 + - Level: 6 + Amount: 78 + - Level: 7 + Amount: 84 + - Level: 8 + Amount: 90 + - Level: 9 + Amount: 96 + - Level: 10 + Amount: 102 - Id: 8035 Name: MH_ANGRIFFS_MODUS Description: Attack Mode @@ -34865,7 +34979,7 @@ Body: Name: MH_EQC Description: Eternal Quick Combo MaxLevel: 5 - Type: Misc + Type: Weapon TargetType: Self Flags: NoTargetSelf: true @@ -34942,7 +35056,7 @@ Body: - Level: 4 Time: 500 - Level: 5 - Time: -1 + Time: 0 Requires: SpCost: - Level: 1 @@ -34993,7 +35107,7 @@ Body: - Id: 8041 Name: MH_LAVA_SLIDE Description: Lava Slide - MaxLevel: 5 + MaxLevel: 10 Type: Weapon TargetType: Ground DamageFlags: @@ -35007,39 +35121,69 @@ Body: - Level: 1 Time: 5000 - Level: 2 - Time: 4500 + Time: 5000 - Level: 3 - Time: 4000 + Time: 5000 - Level: 4 - Time: 3500 + Time: 4500 - Level: 5 - Time: 3000 + Time: 4500 + - Level: 6 + Time: 4500 + - Level: 7 + Time: 4000 + - Level: 8 + Time: 4000 + - Level: 9 + Time: 4000 + - Level: 10 + Time: 3500 AfterCastActDelay: 1000 Duration1: - Level: 1 - Time: 12000 + Time: 8000 - Level: 2 - Time: 14000 + Time: 10000 - Level: 3 - Time: 16000 + Time: 12000 - Level: 4 - Time: 18000 + Time: 14000 - Level: 5 + Time: 16000 + - Level: 6 + Time: 18000 + - Level: 7 Time: 20000 + - Level: 8 + Time: 22000 + - Level: 9 + Time: 24000 + - Level: 10 + Time: 26000 Duration2: 20000 FixedCastTime: 1000 Requires: SpCost: - Level: 1 - Amount: 30 - - Level: 2 - Amount: 35 - - Level: 3 Amount: 40 - - Level: 4 + - Level: 2 Amount: 45 - - Level: 5 + - Level: 3 Amount: 50 + - Level: 4 + Amount: 55 + - Level: 5 + Amount: 60 + - Level: 6 + Amount: 65 + - Level: 7 + Amount: 70 + - Level: 8 + Amount: 75 + - Level: 9 + Amount: 80 + - Level: 10 + Amount: 85 Unit: Id: Lava_Slide Layout: @@ -35048,27 +35192,21 @@ Body: - Level: 2 Size: 1 - Level: 3 - Size: 2 + Size: 1 - Level: 4 Size: 2 - Level: 5 - Size: 3 + Size: 2 - Level: 6 - Size: 0 + Size: 2 - Level: 7 - Size: 0 + Size: 3 - Level: 8 - Size: 0 + Size: 3 - Level: 9 - Size: 0 + Size: 3 - Level: 10 - Size: 0 - - Level: 11 - Size: 0 - - Level: 12 - Size: 0 - - Level: 13 - Size: 0 + Size: 4 Interval: 2000 Target: Enemy Flag: @@ -35078,7 +35216,7 @@ Body: - Id: 8042 Name: MH_PYROCLASTIC Description: Pyroclastic - MaxLevel: 5 + MaxLevel: 10 TargetType: Self DamageFlags: NoDamage: true @@ -35096,18 +35234,38 @@ Body: Time: 2500 - Level: 5 Time: 3000 + - Level: 6 + Time: 3500 + - Level: 7 + Time: 4000 + - Level: 8 + Time: 4500 + - Level: 9 + Time: 5000 + - Level: 10 + Time: 5500 AfterCastActDelay: 1000 Duration1: - Level: 1 Time: 60000 - Level: 2 - Time: 90000 + Time: 80000 - Level: 3 - Time: 120000 + Time: 100000 - Level: 4 - Time: 150000 + Time: 120000 - Level: 5 + Time: 140000 + - Level: 6 + Time: 160000 + - Level: 7 Time: 180000 + - Level: 8 + Time: 200000 + - Level: 9 + Time: 220000 + - Level: 10 + Time: 240000 FixedCastTime: 200 Requires: SpCost: @@ -35121,6 +35279,16 @@ Body: Amount: 44 - Level: 5 Amount: 52 + - Level: 6 + Amount: 56 + - Level: 7 + Amount: 60 + - Level: 8 + Amount: 64 + - Level: 9 + Amount: 66 + - Level: 10 + Amount: 70 - Id: 8043 Name: MH_VOLCANIC_ASH Description: Volcanic Ash diff --git a/db/re/skill_nocast_db.txt b/db/re/skill_nocast_db.txt index 2342350964..8416237b93 100644 --- a/db/re/skill_nocast_db.txt +++ b/db/re/skill_nocast_db.txt @@ -56,7 +56,6 @@ 395,4 //CG_MOONLIT 409,4 //WE_CALLPARENT 410,4 //WE_CALLBABY -491,4 //CR_CULTIVATION 530,4 //NJ_KIRIKAGE 691,4 //CASH_ASSUMPTIO 2284,4 //SC_FATALMENACE @@ -79,7 +78,6 @@ 395,8 //CG_MOONLIT 409,8 //WE_CALLPARENT 410,8 //WE_CALLBABY -491,8 //CR_CULTIVATION 411,8 //TK_RUN 426,8 //TK_HIGHJUMP 427,8 //SG_FEEL @@ -132,7 +130,6 @@ 409,16 // WE_CALLPARENT 410,16 // WE_CALLBABY 426,16 // TK_HIGHJUMP -491,16 // CR_CULTIVATION 529,16 // NJ_SHADOWJUMP // 530,16 // NJ_KIRIKAGE 691,16 // CASH_ASSUMPTIO @@ -219,11 +216,9 @@ //---------------------------------------------------------------------------- 232,2048 //AM_CANNIBALIZE 233,2048 //AM_SPHEREMINE -491,2048 //CR_CULTIVATION 1013,2048 //BS_GREED 2419,2048 //WM_POEMOFNETHERWORLD 2482,2048 //GN_WALLOFTHORN -2493,2048 //GN_SLINGITEM //---------------------------------------------------------------------------- // Zone 8 - WOE:TE Dungeons diff --git a/db/re/skill_tree.txt b/db/re/skill_tree.txt index e63ea3e225..a75eb1237d 100644 --- a/db/re/skill_tree.txt +++ b/db/re/skill_tree.txt @@ -1266,7 +1266,6 @@ 4019,478,10,231,5,0,0,0,0,0,0,0,0 //CR_SLIMPITCHER#Aid Condensed Potion# 4019,479,5,234,5,235,5,236,5,237,5,0,0 //CR_FULLPROTECTION#Full Protection# 4019,490,10,229,5,230,5,0,0,0,0,0,0 //CR_ACIDDEMONSTRATION#Acid Demonstration# -4019,491,2,0,0,0,0,0,0,0,0,0,0 //CR_CULTIVATION#Cultivation# 4019,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# 4019,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher# 4019,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1# @@ -3434,10 +3433,8 @@ 4071,2486,5,2485,3,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION#Fire Expansion# 4071,2490,5,2480,3,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT#Hell's Plant# 4071,2492,5,2490,3,0,0,0,0,0,0,0,0 //GN_MANDRAGORA#Howling of Mandragora# -4071,2493,1,2494,1,0,0,0,0,0,0,0,0 //GN_SLINGITEM#Sling Item# 4071,2494,1,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL#Change Material# 4071,2495,2,2497,1,0,0,0,0,0,0,0,0 //GN_MIX_COOKING#Mix Cooking# -4071,2496,2,2495,1,0,0,0,0,0,0,0,0 //GN_MAKEBOMB#Create Bomb# 4071,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4071,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4071,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# @@ -3860,7 +3857,6 @@ 4078,478,10,231,5,0,0,0,0,0,0,0,0 //CR_SLIMPITCHER#Aid Condensed Potion# 4078,479,5,234,5,235,5,236,5,237,5,0,0 //CR_FULLPROTECTION#Full Protection# 4078,490,10,229,5,230,5,0,0,0,0,0,0 //CR_ACIDDEMONSTRATION#Acid Demonstration# -4078,491,2,0,0,0,0,0,0,0,0,0,0 //CR_CULTIVATION#Cultivation# 4078,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby# 4078,446,1,0,0,0,0,0,0,0,0,0,0 //AM_BERSERKPITCHER#Berserk Pitcher# 4078,496,1,228,10,0,0,0,0,0,0,0,0 //AM_TWILIGHT1#Twilight Alchemy 1# @@ -3880,10 +3876,8 @@ 4078,2486,5,2485,3,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION#Fire Expansion# 4078,2490,5,2480,3,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT#Hell's Plant# 4078,2492,5,2490,3,0,0,0,0,0,0,0,0 //GN_MANDRAGORA#Howling of Mandragora# -4078,2493,1,2494,1,0,0,0,0,0,0,0,0 //GN_SLINGITEM#Sling Item# 4078,2494,1,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL#Change Material# 4078,2495,2,2497,1,0,0,0,0,0,0,0,0 //GN_MIX_COOKING#Mix Cooking# -4078,2496,2,2495,1,0,0,0,0,0,0,0,0 //GN_MAKEBOMB#Create Bomb# 4078,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4078,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4078,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# @@ -5102,10 +5096,8 @@ 4107,2486,5,2485,3,0,0,0,0,0,0,0,0 //GN_FIRE_EXPANSION#Fire Expansion# 4107,2490,5,2480,3,0,0,0,0,0,0,0,0 //GN_HELLS_PLANT#Hell's Plant# 4107,2492,5,2490,3,0,0,0,0,0,0,0,0 //GN_MANDRAGORA#Howling of Mandragora# -4107,2493,1,2494,1,0,0,0,0,0,0,0,0 //GN_SLINGITEM#Sling Item# 4107,2494,1,0,0,0,0,0,0,0,0,0,0 //GN_CHANGEMATERIAL#Change Material# 4107,2495,2,2497,1,0,0,0,0,0,0,0,0 //GN_MIX_COOKING#Mix Cooking# -4107,2496,2,2495,1,0,0,0,0,0,0,0,0 //GN_MAKEBOMB#Create Bomb# 4107,2497,10,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 4107,5003,5,2497,1,0,0,0,0,0,0,0,0 //GN_ILLUSIONDOOPING#Hallucination Drug# 4107,5014,5,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE#Full Throttle# diff --git a/src/map/battle.cpp b/src/map/battle.cpp index d69a541168..bdf00579fc 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -1046,7 +1046,7 @@ bool battle_check_sc(struct block_list *src, struct block_list *target, struct s status_change_end(target, SC_SAFETYWALL, INVALID_TIMER); } - if (sc->data[SC_NEUTRALBARRIER] && ((d->flag&(BF_LONG|BF_MAGIC)) == BF_LONG || skill_id == CR_ACIDDEMONSTRATION)) { + if (sc->data[SC_NEUTRALBARRIER] && (d->flag&(BF_LONG|BF_MAGIC)) == BF_LONG) { d->dmg_lv = ATK_MISS; return false; } @@ -1350,7 +1350,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam if (sc->data[SC_DEFENDER] && skill_id != NJ_ZENYNAGE && skill_id != KO_MUCHANAGE && #ifdef RENEWAL - ((flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON) || skill_id == CR_ACIDDEMONSTRATION || skill_id == GN_FIRE_EXPANSION_ACID)) + ((flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON) || skill_id == GN_FIRE_EXPANSION_ACID)) #else (flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON)) #endif @@ -3876,6 +3876,13 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * skillratio += 100 + 50 * skill_lv; #endif break; +#ifdef RENEWAL + case CR_ACIDDEMONSTRATION: + skillratio += -100 + 200 * skill_lv + sstatus->int_ + sstatus->vit; // !TODO: Confirm status bonus + if (target->type == BL_PC) + skillratio /= 2; + break; +#endif case CG_ARROWVULCAN: #ifdef RENEWAL skillratio += 400 + 100 * skill_lv; @@ -4405,47 +4412,26 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * } break; case GN_CARTCANNON: - // ATK [{( Cart Remodeling Skill Level x 50 ) x ( INT / 40 )} + ( Cart Cannon Skill Level x 60 )] % - skillratio += -100 + 60 * skill_lv + ((sd) ? pc_checkskill(sd, GN_REMODELING_CART) : 1) * 50 * status_get_int(src) / 40; + // ATK [{( INT / (6 - ( Cart Remodeling Skill Level ) )} + ( Cart Cannon Skill Level x 350 )] % + skillratio += -100 + 350 * skill_lv + sstatus->int_ / (6 - (sd ? pc_checkskill(sd, GN_REMODELING_CART) : 1)); + RE_LVL_DMOD(100); break; case GN_SPORE_EXPLOSION: - skillratio += -100 + 150 * skill_lv + 200 + status_get_int(src); + if (wd->miscflag & 2048) + skillratio += 200; // Target + skillratio += -100 + 180 * skill_lv + sstatus->int_; RE_LVL_DMOD(100); break; case GN_WALLOFTHORN: skillratio += 10 * skill_lv; break; case GN_CRAZYWEED_ATK: - skillratio += 400 + 100 * skill_lv; + skillratio += -100 + 700 + 100 * skill_lv; + RE_LVL_DMOD(100); break; - case GN_SLINGITEM_RANGEMELEEATK: - if( sd ) { - switch( sd->itemid ) { - case ITEMID_APPLE_BOMB: - skillratio += 200 + status_get_str(src) + status_get_dex(src); - break; - case ITEMID_COCONUT_BOMB: - case ITEMID_PINEAPPLE_BOMB: - skillratio += 700 + status_get_str(src) + status_get_dex(src); - break; - case ITEMID_MELON_BOMB: - skillratio += 400 + status_get_str(src) + status_get_dex(src); - break; - case ITEMID_BANANA_BOMB: - skillratio += 777 + status_get_str(src) + status_get_dex(src); - break; - case ITEMID_BLACK_LUMP: - skillratio += -100 + (status_get_str(src) + status_get_agi(src) + status_get_dex(src)) / 3; - break; - case ITEMID_BLACK_HARD_LUMP: - skillratio += -100 + (status_get_str(src) + status_get_agi(src) + status_get_dex(src)) / 2; - break; - case ITEMID_VERY_HARD_LUMP: - skillratio += -100 + status_get_str(src) + status_get_agi(src) + status_get_dex(src); - break; - } - RE_LVL_DMOD(100); - } + case GN_HELLS_PLANT_ATK: + skillratio += -100 + 500 * skill_lv + sstatus->int_ * (10 - (sd ? pc_checkskill(sd, AM_CANNIBALIZE) : 0)); // !TODO: Confirm INT and Cannibalize bonus + RE_LVL_DMOD(100); break; // Physical Elemantal Spirits Attack Skills case EL_CIRCLE_OF_FIRE: @@ -4503,28 +4489,22 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * skillratio += -100 + 20 * skill_lv; break; case MH_NEEDLE_OF_PARALYZE: - skillratio += 600 + 100 * skill_lv; + skillratio += -100 + 300 * skill_lv * status_get_lv(src) / 100 + sstatus->dex; // !TODO: Confirm Base Level and DEX bonus break; case MH_STAHL_HORN: - skillratio += 400 + 100 * skill_lv * status_get_lv(src) / 150; + skillratio += 900 + 100 * skill_lv * status_get_lv(src) / 150 + sstatus->vit; // !TODO: Confirm VIT bonus break; case MH_LAVA_SLIDE: skillratio += -100 + 70 * skill_lv; break; case MH_SONIC_CRAW: - skillratio += -100 + 40 * skill_lv * status_get_lv(src) / 150; + skillratio += -100 + 60 * skill_lv * status_get_lv(src) / 150; break; case MH_SILVERVEIN_RUSH: - skillratio += -100 + 150 * skill_lv * status_get_lv(src) / 100; + skillratio += -100 + 250 * skill_lv * status_get_lv(src) / 100 + sstatus->str; // !TODO: Confirm STR bonus break; case MH_MIDNIGHT_FRENZY: - skillratio += -100 + 300 * skill_lv * status_get_lv(src) / 150; - break; - case MH_TINDER_BREAKER: - skillratio += -100 + (100 * skill_lv + 3 * status_get_str(src)) * status_get_lv(src) / 120; - break; - case MH_CBC: - skillratio += 300 * skill_lv + 4 * status_get_lv(src); + skillratio += -100 + 350 * skill_lv * status_get_lv(src) / 150 + sstatus->str; // !TODO: Confirm STR bonus break; case MH_MAGMA_FLOW: skillratio += -100 + (100 * skill_lv + 3 * status_get_lv(src)) * status_get_lv(src) / 120; @@ -5746,7 +5726,16 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl } else ATK_ADD(wd.damage, wd.damage2, (sstatus->sp * (1 + skill_lv * 2 / 10)) + 10 * status_get_lv(src)); } - break; + break; + case MH_TINDER_BREAKER: + ATK_ADD(wd.damage, wd.damage2, 2500 * skill_lv + status_get_lv(src)); // !TODO: Confirm base level bonus + break; + case MH_CBC: + ATK_ADD(wd.damage, wd.damage2, 4000 * skill_lv + status_get_lv(src)); // !TODO: Confirm base level bonus + break; + case MH_EQC: + ATK_ADD(wd.damage, wd.damage2, 6000 * skill_lv + status_get_lv(src)); // !TODO: Confirm base level bonus + break; } if(sd) { @@ -5799,7 +5788,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl switch(skill_id) { case NJ_ISSEN: case ASC_BREAKER: - case CR_ACIDDEMONSTRATION: case GN_FIRE_EXPANSION_ACID: break; //These skills will do a card fix later default: @@ -5820,7 +5808,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl switch (skill_id) { case MC_CARTREVOLUTION: case MO_INVESTIGATE: - case CR_ACIDDEMONSTRATION: case SR_GATEOFHELL: case GN_FIRE_EXPANSION_ACID: case KO_BAKURETSU: @@ -5882,7 +5869,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl switch (skill_id) { case NJ_ISSEN: case ASC_BREAKER: - case CR_ACIDDEMONSTRATION: case GN_FIRE_EXPANSION_ACID: return wd; //These skills will do a GVG fix later default: @@ -6481,17 +6467,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list skillratio += 1100; break; case MH_ERASER_CUTTER: - skillratio += 400 + 100 * skill_lv + (skill_lv%2 > 0 ? 0 : 300); - break; case MH_XENO_SLASHER: - if(skill_lv%2) - skillratio += 350 + 50 * skill_lv; //500:600:700 - else - skillratio += 400 + 100 * skill_lv; //700:900 + skillratio += -100 + 350 * skill_lv * status_get_lv(src) / 100 + sstatus->int_; // !TODO: Confirm Base Level and INT bonus break; case MH_HEILIGE_STANGE: - skillratio += 400 + 250 * skill_lv; - skillratio = (skillratio * status_get_lv(src)) / 150; + skillratio += -100 + 1000 + 250 * skill_lv * status_get_lv(src) / 150 + sstatus->vit; // !TODO: Confirm VIT bonus break; case MH_POISON_MIST: skillratio += -100 + 40 * skill_lv * status_get_lv(src) / 100; @@ -6548,7 +6528,6 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list } #ifdef RENEWAL switch(skill_id) { // These skills will do a card fix later - case CR_ACIDDEMONSTRATION: case ASC_BREAKER: break; default: @@ -6686,7 +6665,6 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list #ifdef RENEWAL switch(skill_id) { case ASC_BREAKER: - case CR_ACIDDEMONSTRATION: return ad; //These skills will do a GVG fix later } #endif @@ -6886,7 +6864,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * md.damage = 0; } break; - case CR_ACIDDEMONSTRATION: case GN_FIRE_EXPANSION_ACID: #ifdef RENEWAL // Official Renewal formula [helvetica] @@ -6979,19 +6956,12 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * case GN_THORNS_TRAP: md.damage = 100 + 200 * skill_lv + status_get_int(src); break; - case GN_HELLS_PLANT_ATK: - //[{( Hell Plant Skill Level x Casters Base Level ) x 10 } + {( Casters INT x 7 ) / 2 } x { 18 + ( Casters Job Level / 4 )] x ( 5 / ( 10 - Summon Flora Skill Level )) - md.damage = skill_lv * status_get_lv(src) * 10 + status_get_int(src) * 7 / 2 * (18 + (sd ? sd->status.job_level : 0) / 4) * 5 / (10 - (sd ? pc_checkskill(sd, AM_CANNIBALIZE) : 0)); - break; case RL_B_TRAP: // kRO 2014-02-12: Damage: Caster's DEX, Target's current HP, Skill Level md.damage = status_get_dex(src) * 10 + (skill_lv * 3 * status_get_hp(target)) / 100; if (status_bl_has_mode(target, MD_STATUS_IMMUNE)) md.damage /= 10; break; - case MH_EQC: - md.damage = max(tstatus->hp - sstatus->hp, 0); - break; case NPC_MAXPAIN_ATK: if (ssc && ssc->data[SC_MAXPAIN]) md.damage = ssc->data[SC_MAXPAIN]->val2; @@ -8907,6 +8877,7 @@ static const struct _battle_data { { "hom_idle_no_share", &battle_config.hom_idle_no_share, 0, 0, INT_MAX, }, { "devotion_standup_fix", &battle_config.devotion_standup_fix, 1, 0, 1, }, { "feature.bgqueue", &battle_config.feature_bgqueue, 1, 0, 1, }, + { "homunculus_exp_gain", &battle_config.homunculus_exp_gain, 10, 0, 100, }, #include "../custom/battle_config_init.inc" }; diff --git a/src/map/battle.hpp b/src/map/battle.hpp index 2964fb2795..48adb7317f 100644 --- a/src/map/battle.hpp +++ b/src/map/battle.hpp @@ -673,6 +673,7 @@ struct Battle_Config int hom_idle_no_share; int devotion_standup_fix; int feature_bgqueue; + int homunculus_exp_gain; #include "../custom/battle_config_struct.inc" }; diff --git a/src/map/homunculus.cpp b/src/map/homunculus.cpp index 1ab2cd3e49..2a035ff777 100644 --- a/src/map/homunculus.cpp +++ b/src/map/homunculus.cpp @@ -1606,7 +1606,7 @@ void read_homunculus_expdb(void) if (fp == NULL) { if (i != 0) continue; - ShowError("Can't read %s\n",line); + ShowError("read_homunculus_expdb: Can't read %s\n",line); return; } while (fgets(line, sizeof(line), fp) && j < MAX_LEVEL) { @@ -1618,7 +1618,7 @@ void read_homunculus_expdb(void) break; } if (hexptbl[MAX_LEVEL - 1]) { // Last permitted level have to be 0! - ShowWarning("read_hexptbl: Reached max level in %s [%d]. Remaining lines were not read.\n ",path,MAX_LEVEL); + ShowWarning("read_homunculus_expdb: Reached max level in %s [%d]. Remaining lines were not read.\n ",path,MAX_LEVEL); hexptbl[MAX_LEVEL - 1] = 0; } fclose(fp); diff --git a/src/map/itemdb.hpp b/src/map/itemdb.hpp index 546d4ef14c..b9d4277c93 100644 --- a/src/map/itemdb.hpp +++ b/src/map/itemdb.hpp @@ -176,21 +176,10 @@ enum genetic_item_list ITEMID_VITATA500, ITEMID_CONCENTRATED_CEROMAIN_SOUP, ITEMID_CURE_FREE = 12475, - ITEMID_APPLE_BOMB = 13260, - ITEMID_COCONUT_BOMB, - ITEMID_MELON_BOMB, - ITEMID_PINEAPPLE_BOMB, - ITEMID_BANANA_BOMB, - ITEMID_BLACK_LUMP, + ITEMID_BLACK_LUMP = 13265, ITEMID_BLACK_HARD_LUMP, ITEMID_VERY_HARD_LUMP, ITEMID_MYSTERIOUS_POWDER, - ITEMID_HP_INC_POTS_TO_THROW = 13275, - ITEMID_HP_INC_POTM_TO_THROW, - ITEMID_HP_INC_POTL_TO_THROW, - ITEMID_SP_INC_POTS_TO_THROW, - ITEMID_SP_INC_POTM_TO_THROW, - ITEMID_SP_INC_POTL_TO_THROW, }; ///Guillotine Cross diff --git a/src/map/map.cpp b/src/map/map.cpp index 0f196201ba..30747e0b45 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -489,6 +489,8 @@ int map_moveblock(struct block_list *bl, int x1, int y1, t_tick tick) skill_unit_move_unit_group(skill_id2group(sc->data[SC_WARM]->val4), bl->m, x1-x0, y1-y0); if (sc->data[SC_BANDING]) skill_unit_move_unit_group(skill_id2group(sc->data[SC_BANDING]->val4), bl->m, x1-x0, y1-y0); + if (sc->data[SC_HELLS_PLANT]) + skill_unit_move_unit_group(skill_id2group(sc->data[SC_HELLS_PLANT]->val4), bl->m, x1-x0, y1-y0); if (sc->data[SC_NEUTRALBARRIER_MASTER]) skill_unit_move_unit_group(skill_id2group(sc->data[SC_NEUTRALBARRIER_MASTER]->val2), bl->m, x1-x0, y1-y0); diff --git a/src/map/mob.cpp b/src/map/mob.cpp index ccc310e037..b230aacedf 100644 --- a/src/map/mob.cpp +++ b/src/map/mob.cpp @@ -2607,7 +2607,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) base_exp = (unsigned int)cap_value(exp, 1, UINT_MAX); } - if (map_getmapflag(m, MF_NOJOBEXP) || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost. + if (map_getmapflag(m, MF_NOJOBEXP) || !md->db->job_exp +#ifndef RENEWAL + || md->dmglog[i].flag == MDLF_HOMUN // Homun earned job-exp is always lost. +#endif + ) job_exp = 0; else { double exp = apply_rate2(md->db->job_exp, per, 1); @@ -2648,8 +2652,13 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) flag = 0; } } - if(base_exp && md->dmglog[i].flag == MDLF_HOMUN) //tmpsd[i] is null if it has no homunc. +#ifdef RENEWAL + if (base_exp && tmpsd[i] && tmpsd[i]->hd) + hom_gainexp(tmpsd[i]->hd, base_exp * battle_config.homunculus_exp_gain / 100); // Homunculus only receive 10% of EXP +#else + if (base_exp && md->dmglog[i].flag == MDLF_HOMUN) //tmpsd[i] is null if it has no homunc. hom_gainexp(tmpsd[i]->hd, base_exp); +#endif if(flag) { if(base_exp || job_exp) { if( md->dmglog[i].flag != MDLF_PET || battle_config.pet_attack_exp_to_master ) { diff --git a/src/map/script.cpp b/src/map/script.cpp index 17181a6c16..28f59bfd7f 100644 --- a/src/map/script.cpp +++ b/src/map/script.cpp @@ -10415,6 +10415,10 @@ BUILDIN_FUNC(getexp) job = (int) cap_value(job * bonus, 0, INT_MAX); pc_gainexp(sd, NULL, base, job, 1); +#ifdef RENEWAL + if (base && sd->hd) + hom_gainexp(sd->hd, base * battle_config.homunculus_exp_gain / 100); // Homunculus only receive 10% of EXP +#endif return SCRIPT_CMD_SUCCESS; } diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 352dde1699..16e405d0e8 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -1575,6 +1575,7 @@ export_constant(SC_USE_SKILL_SP_SHA); export_constant(SC_SP_SHA); export_constant(SC_SOULCURSE); + export_constant(SC_HELLS_PLANT); #ifdef RENEWAL export_constant(SC_EXTREMITYFIST2); #endif diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 5c830427e9..1e1c99e459 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -446,8 +446,6 @@ unsigned short skill_dummy2skill_id(unsigned short skill_id) { return GN_CRAZYWEED; case GN_HELLS_PLANT_ATK: return GN_HELLS_PLANT; - case GN_SLINGITEM_RANGEMELEEATK: - return GN_SLINGITEM; case RL_R_TRIP_PLUSATK: return RL_R_TRIP; case NPC_MAXPAIN_ATK: @@ -1869,31 +1867,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case SO_VARETYR_SPEAR: sc_start(src,bl, SC_STUN, 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv)); break; - case GN_SLINGITEM_RANGEMELEEATK: - if( sd ) { - switch( sd->itemid ) { // Starting SCs here instead of do it in skill_additional_effect to simplify the code. - case ITEMID_COCONUT_BOMB: - sc_start(src,bl, SC_STUN, 5 + sd->status.job_level / 2, skill_lv, 1000 * sd->status.job_level / 3); - sc_start2(src,bl, SC_BLEEDING, 3 + sd->status.job_level / 2, skill_lv, src->id, 1000 * status_get_lv(src) / 4 + sd->status.job_level / 3); - break; - case ITEMID_MELON_BOMB: - sc_start4(src, bl, SC_MELON_BOMB, 100, skill_lv, 20 + sd->status.job_level, 10 + sd->status.job_level / 2, 0, 1000 * status_get_lv(src) / 4); - break; - case ITEMID_BANANA_BOMB: - { - uint16 duration = (battle_config.banana_bomb_duration ? battle_config.banana_bomb_duration : 1000 * sd->status.job_level / 4); - - sc_start(src,bl, SC_BANANA_BOMB_SITDOWN, status_get_lv(src) + sd->status.job_level + sstatus->dex / 6 - status_get_lv(bl) - tstatus->agi / 4 - tstatus->luk / 5, skill_lv, duration); - sc_start(src,bl, SC_BANANA_BOMB, 100, skill_lv, 30000); - break; - } - } - sd->itemid = -1; - } - break; case GN_HELLS_PLANT_ATK: - sc_start(src,bl, SC_STUN, 20 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv)); - sc_start2(src,bl, SC_BLEEDING, 5 + 5 * skill_lv, skill_lv, src->id,skill_get_time2(skill_id, skill_lv)); + sc_start(src,bl, SC_STUN, 20 + 10 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv)); + sc_start2(src,bl, SC_BLEEDING, 5 + 5 * skill_lv, skill_lv, src->id,skill_get_time(skill_id, skill_lv)); break; case EL_WIND_SLASH: // Non confirmed rate. sc_start2(src,bl, SC_BLEEDING, 25, skill_lv, src->id, skill_get_time(skill_id,skill_lv)); @@ -1934,23 +1910,13 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 } break; case MH_LAVA_SLIDE: - sc_start4(src,bl, SC_BURNING, 10 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time2(skill_id, skill_lv)); + sc_start4(src,bl, SC_BURNING, 5 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time2(skill_id, skill_lv)); break; case MH_STAHL_HORN: - sc_start(src,bl, SC_STUN, (20 + 4 * (skill_lv-1)), skill_lv, skill_get_time(skill_id, skill_lv)); + sc_start(src,bl, SC_STUN, 20 + 2 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv)); break; case MH_NEEDLE_OF_PARALYZE: - sc_start(src,bl, SC_PARALYSIS, 40 + (5*skill_lv), skill_lv, skill_get_time(skill_id, skill_lv)); - break; - case MH_SILVERVEIN_RUSH: - sc_start4(src,bl,SC_STUN,20 + (5*skill_lv),skill_lv,src->id,0,0,skill_get_time(skill_id,skill_lv)); - break; - case MH_MIDNIGHT_FRENZY: - { - TBL_HOM *hd = BL_CAST(BL_HOM,src); - int spiritball = (hd?hd->homunculus.spiritball:1); - sc_start4(src,bl,SC_FEAR,spiritball*(10+2*skill_lv),skill_lv,src->id,0,0,skill_get_time(skill_id,skill_lv)); - } + sc_start(src,bl, SC_PARALYSIS, 30 + 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv)); break; case MH_XENO_SLASHER: sc_start4(src, bl, SC_BLEEDING, skill_lv, skill_lv, src->id, 0, 0, skill_get_time2(skill_id, skill_lv)); @@ -3579,12 +3545,6 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * else // the central target doesn't display an animation dmg.dmotion = clif_skill_damage(dsrc,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, DMG_SPLASH); // needs -2(!) as skill level break; - case GN_SPORE_EXPLOSION: - if (flag&SD_ANIMATION) - dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, NV_BASIC, -1, DMG_SPLASH); - else - dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, -2, DMG_SPLASH); - break; case WL_HELLINFERNO: case SR_EARTHSHAKER: dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,1,skill_id,-2,DMG_SINGLE); @@ -3632,15 +3592,13 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list * case EL_HURRICANE_ATK: case KO_BAKURETSU: case GN_CRAZYWEED_ATK: + case GN_HELLS_PLANT_ATK: case SU_SV_ROOTTWIST_ATK: dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,skill_id,-1,DMG_SPLASH); break; case GN_FIRE_EXPANSION_ACID: dmg.dmotion = clif_skill_damage(dsrc, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, CR_ACIDDEMONSTRATION, skill_lv, DMG_MULTI_HIT); break; - case GN_SLINGITEM_RANGEMELEEATK: - dmg.dmotion = clif_skill_damage(src,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,GN_SLINGITEM,-2,DMG_SINGLE); - break; case EL_STONE_RAIN: dmg.dmotion = clif_skill_damage(dsrc,bl,tick,dmg.amotion,dmg.dmotion,damage,dmg.div_,skill_id,-1,(flag&1)?DMG_MULTI_HIT:DMG_SPLASH); break; @@ -3967,7 +3925,6 @@ static int skill_check_unit_range_sub(struct block_list *bl, va_list ap) case NPC_REVERBERATION: case WM_REVERBERATION: case GN_THORNS_TRAP: - case GN_HELLS_PLANT: case RL_B_TRAP: case SC_ESCAPE: //Non stackable on themselves and traps (including venom dust which does not has the trap inf2 set) @@ -4044,7 +4001,6 @@ static int skill_check_unit_range2 (struct block_list *bl, int x, int y, uint16 range = 2; break; case SC_MANHOLE: - case GN_HELLS_PLANT: range = 0; break; default: { @@ -4844,6 +4800,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NPC_PETRIFYATTACK: case NPC_CURSEATTACK: case NPC_SLEEPATTACK: +#ifdef RENEWAL + case CR_ACIDDEMONSTRATION: +#endif case LK_AURABLADE: case LK_SPIRALPIERCE: case ML_SPIRALPIERCE: @@ -4905,7 +4864,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case SR_GENTLETOUCH_QUIET: case WM_SEVERE_RAINSTORM_MELEE: case WM_GREAT_ECHO: - case GN_SLINGITEM_RANGEMELEEATK: case KO_SETSUDAN: case RL_MASS_SPIRAL: case RL_BANISHING_BUSTER: @@ -5228,6 +5186,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if( skill_area_temp[1] != bl->id && !inf2[INF2_ISNPC] ) sflag |= SD_ANIMATION; // original target gets no animation (as well as all NPC skills) + switch (skill_id) { + case GN_SPORE_EXPLOSION: + if (flag&2 && skill_area_temp[1] == bl->id) + sflag |= 2048; // Flag for main target + break; + } + // If a enemy player is standing next to a mob when splash Es- skill is casted, the player won't get hurt. if ((skill_id == SP_SHA || skill_id == SP_SWHOO) && !battle_config.allow_es_magic_pc && bl->type != BL_MOB) break; @@ -5293,7 +5258,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint //SD_LEVEL -> Forced splash damage for Auto Blitz-Beat -> count targets //special case: Venom Splasher uses a different range for searching than for splashing if( flag&SD_LEVEL || skill_get_nk(skill_id, NK_SPLASHSPLIT) ) - skill_area_temp[0] = map_foreachinallrange(skill_area_sub, bl, (skill_id == AS_SPLASHER || skill_id == GN_SPORE_EXPLOSION)?1:skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill_area_sub_count); + skill_area_temp[0] = map_foreachinallrange(skill_area_sub, bl, (skill_id == AS_SPLASHER)?1:skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill_area_sub_count); // recursive invocation of skill_castend_damage_id() with flag|1 map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), starget, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id); @@ -5574,8 +5539,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case SN_FALCONASSAULT: #ifndef RENEWAL case PA_PRESSURE: -#endif case CR_ACIDDEMONSTRATION: +#endif case TF_THROWSTONE: #ifdef RENEWAL case ASC_BREAKER: @@ -5584,7 +5549,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case GS_FLING: case NJ_ZENYNAGE: case GN_THORNS_TRAP: - case GN_HELLS_PLANT_ATK: case RL_B_TRAP: skill_attack(BF_MISC,src,src,bl,skill_id,skill_lv,tick,flag); break; @@ -6223,16 +6187,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case MH_CBC: case MH_EQC: { - int duration = 0; TBL_HOM *hd = BL_CAST(BL_HOM,src); - duration = max(skill_lv,(status_get_str(src)/7 - status_get_str(bl)/10))*1000; //Yommy formula + int duration = max(skill_lv, (status_get_str(src) / 7 - status_get_str(bl) / 10)) * 1000; //Yommy formula if (skill_id == MH_TINDER_BREAKER && unit_movepos(src, bl->x, bl->y, 1, 1)) { clif_blown(src); clif_skill_poseffect(src,skill_id,skill_lv,bl->x,bl->y,tick); - } else if (skill_id == MH_EQC && status_bl_has_mode(bl, MD_STATUS_IMMUNE)) { - clif_skill_fail(hd->master, skill_id, USESKILL_FAIL_TOTARGET, 0); - break; } clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start4(src,bl,status_skill2sc(skill_id),100,skill_lv,src->id,0,0,duration)); @@ -11090,7 +11050,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case GN_SPORE_EXPLOSION: clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); - sc_start4(src, bl, type, 100, skill_lv, skill_id, src->id, skill_get_time(skill_id, skill_lv), skill_get_time(skill_id, skill_lv)); + skill_castend_damage_id(src, bl, skill_id, skill_lv, tick, flag|1|2); // First attack to target + sc_start4(src, bl, type, 100, skill_lv, skill_id, src->id, 0, skill_get_time(skill_id, skill_lv)); break; case GN_MANDRAGORA: if( flag&1 ) { @@ -11109,63 +11070,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui clif_skill_nodamage(src,src,skill_id,skill_lv,1); } break; - case GN_SLINGITEM: - if( sd ) { - int ammo_id; - - i = sd->equip_index[EQI_AMMO]; - if( i < 0 ) - break; // No ammo. - ammo_id = sd->inventory_data[i]->nameid; - if( ammo_id <= 0 ) - break; - sd->itemid = ammo_id; - if( itemdb_group_item_exists(IG_BOMB, ammo_id) ) { - if(battle_check_target(src,bl,BCT_ENEMY) > 0) {// Only attack if the target is an enemy. - if( ammo_id == ITEMID_PINEAPPLE_BOMB ) - map_foreachincell(skill_area_sub,bl->m,bl->x,bl->y,BL_CHAR,src,GN_SLINGITEM_RANGEMELEEATK,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id); - else - skill_attack(BF_WEAPON,src,src,bl,GN_SLINGITEM_RANGEMELEEATK,skill_lv,tick,flag); - } else //Otherwise, it fails, shows animation and removes items. - clif_skill_fail(sd,GN_SLINGITEM_RANGEMELEEATK,USESKILL_FAIL,0); - } else if (itemdb_group_item_exists(IG_THROWABLE, ammo_id)) { - switch (ammo_id) { - case ITEMID_HP_INC_POTS_TO_THROW: // MaxHP +(500 + Thrower BaseLv * 10 / 3) and heals 1% MaxHP - sc_start2(src, bl, SC_PROMOTE_HEALTH_RESERCH, 100, 2, 1, 500000); - status_percent_heal(bl, 1, 0); - break; - case ITEMID_HP_INC_POTM_TO_THROW: // MaxHP +(1500 + Thrower BaseLv * 10 / 3) and heals 2% MaxHP - sc_start2(src, bl, SC_PROMOTE_HEALTH_RESERCH, 100, 2, 2, 500000); - status_percent_heal(bl, 2, 0); - break; - case ITEMID_HP_INC_POTL_TO_THROW: // MaxHP +(2500 + Thrower BaseLv * 10 / 3) and heals 5% MaxHP - sc_start2(src, bl, SC_PROMOTE_HEALTH_RESERCH, 100, 2, 3, 500000); - status_percent_heal(bl, 5, 0); - break; - case ITEMID_SP_INC_POTS_TO_THROW: // MaxSP +(Thrower BaseLv / 10 - 5)% and recovers 2% MaxSP - sc_start2(src, bl, SC_ENERGY_DRINK_RESERCH, 100, 2, 1, 500000); - status_percent_heal(bl, 0, 2); - break; - case ITEMID_SP_INC_POTM_TO_THROW: // MaxSP +(Thrower BaseLv / 10)% and recovers 4% MaxSP - sc_start2(src, bl, SC_ENERGY_DRINK_RESERCH, 100, 2, 2, 500000); - status_percent_heal(bl, 0, 4); - break; - case ITEMID_SP_INC_POTL_TO_THROW: // MaxSP +(Thrower BaseLv / 10 + 5)% and recovers 8% MaxSP - sc_start2(src, bl, SC_ENERGY_DRINK_RESERCH, 100, 2, 3, 500000); - status_percent_heal(bl, 0, 8); - break; - default: - if (dstsd) - run_script(sd->inventory_data[i]->script, 0, dstsd->bl.id, fake_nd->bl.id); - break; - } - } - } - clif_skill_nodamage(src,bl,skill_id,skill_lv,1); - clif_skill_nodamage(src,bl,skill_id,skill_lv,1);// This packet is received twice actually, I think it is to show the animation. - break; case GN_MIX_COOKING: - case GN_MAKEBOMB: case GN_S_PHARMACY: if( sd ) { int qty = 1; @@ -11173,7 +11078,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui sd->skill_lv_old = skill_lv; if( skill_id != GN_S_PHARMACY && skill_lv > 1 ) qty = 10; - clif_cooking_list(sd,(skill_id - GN_MIX_COOKING) + 27,skill_id,qty,skill_id==GN_MAKEBOMB?5:6); + clif_cooking_list(sd,(skill_id - GN_MIX_COOKING) + 27,skill_id,qty,6); clif_skill_nodamage(src,bl,skill_id,skill_lv,1); } break; @@ -11412,8 +11317,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui struct block_list *s_bl = battle_get_master(src); if(s_bl) sc_start(src, s_bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)); sc_start2(src, src, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv)); - hd->homunculus.intimacy = hom_intimacy_grade2intimacy(HOMGRADE_NEUTRAL); //change to neutral - if(sd) clif_send_homdata(sd, SP_INTIMATE, hd->homunculus.intimacy/100); //refresh intimacy info skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv)); } break; @@ -12523,7 +12426,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case SO_PSYCHIC_WAVE: case SO_VACUUM_EXTREME: case GN_THORNS_TRAP: - case GN_HELLS_PLANT: case SO_EARTHGRAVE: case SO_DIAMONDDUST: case SO_FIRE_INSIGNIA: @@ -13070,6 +12972,12 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui } break; + case GN_HELLS_PLANT: + skill_clear_unitgroup(src); + if ((sg = skill_unitsetting(src, skill_id, skill_lv, src->x, src->y, 0)) != nullptr) + sc_start4(src, src, type, 100, skill_lv, 0, 0, sg->group_id, skill_get_time(skill_id, skill_lv)); + break; + case SO_FIREWALK: case SO_ELECTRICWALK: if( sc && sc->data[type] ) @@ -13512,9 +13420,6 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_ break; case WZ_QUAGMIRE: //The target changes to "all" if used in a gvg map. [Skotlex] case AM_DEMONSTRATION: - case GN_HELLS_PLANT: - if( skill_id == GN_HELLS_PLANT && map_getcell(src->m, x, y, CELL_CHKLANDPROTECTOR) ) - return NULL; if (battle_config.vs_traps_bctall && (src->type&battle_config.vs_traps_bctall) && map_flag_vs(src->m)) target = BCT_ALL; break; @@ -14913,12 +14818,8 @@ int skill_unit_onplace_timer(struct skill_unit *unit, struct block_list *bl, t_t break; case UNT_HELLS_PLANT: - if ((tsc && tsc->data[SC__MANHOLE]) || status_isimmune(bl)) - break; if( battle_check_target(&unit->bl,bl,BCT_ENEMY) > 0 ) skill_attack(skill_get_type(GN_HELLS_PLANT_ATK), ss, &unit->bl, bl, GN_HELLS_PLANT_ATK, sg->skill_lv, tick, SCSTART_NONE); - if( ss != bl) // The caster is the only one who can step on the Plants without destroying them - sg->limit = DIFF_TICK(tick, sg->tick) + 100; break; case UNT_ZEPHYR: @@ -15646,7 +15547,6 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i } break; case GN_MIX_COOKING: - case GN_MAKEBOMB: case GN_S_PHARMACY: case GN_CHANGEMATERIAL: if( sd->menuskill_id != skill_id ) @@ -16673,7 +16573,6 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id, } break; case GN_MIX_COOKING: - case GN_MAKEBOMB: case GN_S_PHARMACY: case GN_CHANGEMATERIAL: if( sd->menuskill_id != skill_id ) @@ -18325,7 +18224,7 @@ static int skill_cell_overlap(struct block_list *bl, va_list ap) std::shared_ptr skill = skill_db.find(unit->group->skill_id); //It deletes everything except traps and barriers - if ((!skill->inf2[INF2_ISTRAP] && !skill->inf2[INF2_IGNORELANDPROTECTOR]) || unit->group->skill_id == WZ_FIREPILLAR || unit->group->skill_id == GN_HELLS_PLANT) { + if ((!skill->inf2[INF2_ISTRAP] && !skill->inf2[INF2_IGNORELANDPROTECTOR]) || unit->group->skill_id == WZ_FIREPILLAR) { if (skill->unit_flag[UF_RANGEDSINGLEUNIT]) { if (unit->val2&(1 << UF_RANGEDSINGLEUNIT)) skill_delunitgroup(unit->group); @@ -19146,11 +19045,15 @@ int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int li case SG_SUN_WARM: case SG_MOON_WARM: case SG_STAR_WARM: + case LG_BANDING: + case GN_HELLS_PLANT: { - struct status_change *sc = NULL; - if( (sc = status_get_sc(src)) != NULL && sc->data[SC_WARM] ) { - sc->data[SC_WARM]->val4 = 0; - status_change_end(src, SC_WARM, INVALID_TIMER); + status_change *sc = status_get_sc(src); + sc_type type = status_skill2sc(group->skill_id); + + if (sc && sc->data[type]) { + sc->data[type]->val4 = 0; + status_change_end(src, type, INVALID_TIMER); } } break; @@ -19176,15 +19079,6 @@ int skill_delunitgroup_(struct skill_unit_group *group, const char* file, int li } } break; - case LG_BANDING: - { - struct status_change *sc = NULL; - if( (sc = status_get_sc(src)) && sc->data[SC_BANDING] ) { - sc->data[SC_BANDING]->val4 = 0; - status_change_end(src,SC_BANDING,INVALID_TIMER); - } - } - break; } if (src->type==BL_PC && group->state.ammo_consume) @@ -20058,7 +19952,7 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh } while( j >= 0 && x > 0 ); } - if ((equip = (itemdb_isequip(nameid) && skill_id != GN_CHANGEMATERIAL && skill_id != GN_MAKEBOMB ))) + if ((equip = (itemdb_isequip(nameid) && skill_id != GN_CHANGEMATERIAL ))) wlv = itemdb_wlv(nameid); if (!equip) { @@ -20201,7 +20095,6 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh case ITEMID_SP_INCREASE_POTION_MEDIUM: difficulty += 15; break; - case ITEMID_BANANA_BOMB: case ITEMID_HP_INCREASE_POTION_MEDIUM: case ITEMID_SP_INCREASE_POTION_LARGE: case ITEMID_VITATA500: @@ -20231,7 +20124,6 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh make_per = 10000; } break; - case GN_MAKEBOMB: case GN_MIX_COOKING: { int difficulty = 30 + rnd()%120; // Random number between (30 ~ 150) @@ -20240,25 +20132,14 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh qty = ~(5 + rnd()%5) + 1; switch(nameid){// difficulty factor - case ITEMID_APPLE_BOMB: - difficulty += 5; - break; - case ITEMID_COCONUT_BOMB: - case ITEMID_MELON_BOMB: - difficulty += 10; - break; case ITEMID_SAVAGE_FULL_ROAST: case ITEMID_COCKTAIL_WARG_BLOOD: case ITEMID_MINOR_STEW: case ITEMID_SIROMA_ICED_TEA: case ITEMID_DROSERA_HERB_SALAD: case ITEMID_PETITE_TAIL_NOODLES: - case ITEMID_PINEAPPLE_BOMB: difficulty += 15; break; - case ITEMID_BANANA_BOMB: - difficulty += 20; - break; } if( make_per >= 30 && make_per > difficulty) @@ -20381,7 +20262,7 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh tmp_item.amount = 0; for (i = 0; i < qty; i++) { //Apply quantity modifiers. - if ((skill_id == GN_MIX_COOKING || skill_id == GN_MAKEBOMB || skill_id == GN_S_PHARMACY) && make_per > 1) { + if ((skill_id == GN_MIX_COOKING || skill_id == GN_S_PHARMACY) && make_per > 1) { tmp_item.amount = qty; break; } @@ -20484,7 +20365,7 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0,0); } } - if (skill_id == GN_MIX_COOKING || skill_id == GN_MAKEBOMB || skill_id == GN_S_PHARMACY) { + if (skill_id == GN_MIX_COOKING || skill_id == GN_S_PHARMACY) { clif_produceeffect(sd,6,nameid); clif_misceffect(&sd->bl,5); clif_msg_skill(sd,skill_id,ITEM_PRODUCE_SUCCESS); @@ -20548,7 +20429,6 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh clif_msg_skill(sd,skill_id,ITEM_PRODUCE_FAIL); } break; - case GN_MAKEBOMB: case GN_S_PHARMACY: case GN_CHANGEMATERIAL: clif_produceeffect(sd,7,nameid); diff --git a/src/map/status.cpp b/src/map/status.cpp index fa6a6e3da6..8e3961fa7c 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -962,6 +962,7 @@ void initChangeTables(void) set_sc( GN_SPORE_EXPLOSION , SC_SPORE_EXPLOSION , EFST_SPORE_EXPLOSION, SCB_NONE ); set_sc( GN_FIRE_EXPANSION_SMOKE_POWDER , SC_SMOKEPOWDER , EFST_FIRE_EXPANSION_SMOKE_POWDER, SCB_FLEE ); set_sc( GN_FIRE_EXPANSION_TEAR_GAS , SC_TEARGAS , EFST_FIRE_EXPANSION_TEAR_GAS , SCB_HIT|SCB_FLEE ); + add_sc( GN_HELLS_PLANT , SC_HELLS_PLANT ); set_sc( GN_MANDRAGORA , SC_MANDRAGORA , EFST_MANDRAGORA , SCB_INT ); set_sc_with_vfx( GN_ILLUSIONDOPING , SC_ILLUSIONDOPING , EFST_ILLUSIONDOPING , SCB_HIT ); @@ -1622,8 +1623,6 @@ void initChangeTables(void) StatusChangeStateTable[SC_STOP] |= SCS_NOMOVE; StatusChangeStateTable[SC_CLOSECONFINE] |= SCS_NOMOVE; StatusChangeStateTable[SC_CLOSECONFINE2] |= SCS_NOMOVE; - StatusChangeStateTable[SC_TINDER_BREAKER] |= SCS_NOMOVE; - StatusChangeStateTable[SC_TINDER_BREAKER2] |= SCS_NOMOVE; StatusChangeStateTable[SC_MADNESSCANCEL] |= SCS_NOMOVE; #ifndef RENEWAL StatusChangeStateTable[SC_GRAVITATION] |= SCS_NOMOVE|SCS_NOMOVECOND; @@ -6760,8 +6759,6 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change return cap_value(flee,1,SHRT_MAX); if(sc->data[SC_OVERED_BOOST]) //Should be final and unmodifiable by any means return sc->data[SC_OVERED_BOOST]->val2; - if(sc->data[SC_TINDER_BREAKER] || sc->data[SC_TINDER_BREAKER2]) - return 1; // 1 = min flee // Fixed value if(sc->data[SC_INCFLEE]) @@ -6828,6 +6825,8 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change flee -= flee * (40 + 10 * sc->data[SC_SATURDAYNIGHTFEVER]->val1) / 100; if( sc->data[SC_WIND_STEP_OPTION] ) flee += flee * sc->data[SC_WIND_STEP_OPTION]->val2 / 100; + if( sc->data[SC_TINDER_BREAKER] || sc->data[SC_TINDER_BREAKER2] ) + flee -= flee * 50 / 100; if( sc->data[SC_ZEPHYR] ) flee += sc->data[SC_ZEPHYR]->val2; if(sc->data[SC_ASH]) @@ -6916,7 +6915,7 @@ static defType status_calc_def(struct block_list *bl, struct status_change *sc, if(sc->data[SC_ODINS_POWER]) def -= 20 * sc->data[SC_ODINS_POWER]->val1; if( sc->data[SC_ANGRIFFS_MODUS] ) - def -= 30 + 20 * sc->data[SC_ANGRIFFS_MODUS]->val1; + def -= 20 + 10 * sc->data[SC_ANGRIFFS_MODUS]->val1; if(sc->data[SC_STONEHARDSKIN]) def += sc->data[SC_STONEHARDSKIN]->val1; if(sc->data[SC_STONE] && sc->opt1 == OPT1_STONE) @@ -10668,21 +10667,19 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty status_zap(bl, status->hp-1, val2?0:status->sp); return 1; break; - case SC_TINDER_BREAKER2: case SC_CLOSECONFINE2: { struct block_list *src2 = val2?map_id2bl(val2):NULL; struct status_change *sc2 = src2?status_get_sc(src2):NULL; - enum sc_type type2 = ((type == SC_TINDER_BREAKER2)?SC_TINDER_BREAKER:SC_CLOSECONFINE); - struct status_change_entry *sce2 = sc2?sc2->data[type2]:NULL; + struct status_change_entry *sce2 = sc2?sc2->data[SC_CLOSECONFINE]:NULL; if (src2 && sc2) { if (!sce2) // Start lock on caster. - sc_start4(src2,src2,type2,100,val1,1,0,0,tick+1000); + sc_start4(src2,src2,SC_CLOSECONFINE,100,val1,1,0,0,tick+1000); else { // Increase count of locked enemies and refresh time. (sce2->val2)++; delete_timer(sce2->timer, status_change_timer); - sce2->timer = add_timer(gettick()+tick+1000, status_change_timer, src2->id, type2); + sce2->timer = add_timer(gettick()+tick+1000, status_change_timer, src2->id, SC_CLOSECONFINE); } } else // Status failed. return 0; @@ -11553,7 +11550,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty break; case SC_ANGRIFFS_MODUS: val2 = 50 + 20 * val1; // atk bonus - val3 = 40 + 20 * val1; // Flee reduction. + val3 = 25 + 10 * val1; // Flee reduction. val4 = tick/1000; // hp/sp reduction timer tick_time = 1000; break; @@ -11563,8 +11560,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val4 = 2 + 2 * val1; // Chance of holy attack break; case SC_OVERED_BOOST: - val2 = 300 + 40*val1; // flee bonus - val3 = 179 + 2*val1; // aspd bonus + val2 = 400 + 40 * val1; // flee bonus + val3 = 180 + 2 * val1; // aspd bonus val4 = 50; // def reduc % break; case SC_GRANITIC_ARMOR: @@ -12130,8 +12127,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_CONFUSION: case SC_CLOSECONFINE: case SC_CLOSECONFINE2: - case SC_TINDER_BREAKER: - case SC_TINDER_BREAKER2: case SC_BITE: case SC_THORNSTRAP: case SC_MEIKYOUSISUI: @@ -12879,10 +12874,6 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const status_damage(NULL,bl,damage,0,0,1,0); } break; - case SC_PYROCLASTIC: - if(bl->type == BL_PC) - skill_break_equip(bl,bl,EQP_WEAPON,10000,BCT_SELF); - break; case SC_RUN: { struct unit_data *ud = unit_bl2ud(bl); @@ -13030,19 +13021,16 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const skill_castend_damage_id(src, bl, sce->val2, sce->val1, gettick(), SD_LEVEL ); } break; - case SC_TINDER_BREAKER2: case SC_CLOSECONFINE2:{ struct block_list *src = sce->val2?map_id2bl(sce->val2):NULL; struct status_change *sc2 = src?status_get_sc(src):NULL; - enum sc_type type2 = ((type==SC_CLOSECONFINE2)?SC_CLOSECONFINE:SC_TINDER_BREAKER); - if (src && sc2 && sc2->data[type2]) { + if (src && sc2 && sc2->data[SC_CLOSECONFINE]) { // If status was already ended, do nothing. // Decrease count - if (type==SC_TINDER_BREAKER2 || (--(sc2->data[type2]->val1) <= 0)) // No more holds, free him up. - status_change_end(src, type2, INVALID_TIMER); + if (--(sc2->data[SC_CLOSECONFINE]->val1) <= 0) // No more holds, free him up. + status_change_end(src, SC_CLOSECONFINE, INVALID_TIMER); } } - case SC_TINDER_BREAKER: case SC_CLOSECONFINE: if (sce->val2 > 0) { // Caster has been unlocked... nearby chars need to be unlocked. @@ -13113,6 +13101,8 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const break; case SC_WARM: case SC__MANHOLE: + case SC_BANDING: + case SC_HELLS_PLANT: if (sce->val4) { // Clear the group. struct skill_unit_group* group = skill_id2group(sce->val4); sce->val4 = 0; @@ -13206,14 +13196,6 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const skill_delunitgroup(group); } break; - case SC_BANDING: - if(sce->val4) { - struct skill_unit_group *group = skill_id2group(sce->val4); - sce->val4 = 0; - if( group ) // Might have been cleared before status ended, e.g. land protector - skill_delunitgroup(group); - } - break; case SC_CURSEDCIRCLE_ATKER: if( sce->val2 ) // Used the default area size cause there is a chance the caster could knock back and can't clear the target. map_foreachinallrange(status_change_timer_sub, bl, AREA_SIZE + 3, BL_CHAR, bl, sce, SC_CURSEDCIRCLE_TARGET, gettick()); @@ -13962,7 +13944,6 @@ TIMER_FUNC(status_change_timer){ break; case SC_SPLASHER: - case SC_SPORE_EXPLOSION: // Custom Venom Splasher countdown timer // if (sce->val4 % 1000 == 0) { // char timer[10]; @@ -14670,16 +14651,13 @@ int status_change_timer_sub(struct block_list* bl, va_list ap) } } break; - case SC_TINDER_BREAKER: - case SC_CLOSECONFINE:{ - enum sc_type type2 = ((type==SC_CLOSECONFINE)?SC_CLOSECONFINE2:SC_TINDER_BREAKER2); + case SC_CLOSECONFINE: // Lock char has released the hold on everyone... - if (tsc && tsc->data[type2] && tsc->data[type2]->val2 == src->id) { - tsc->data[type2]->val2 = 0; - status_change_end(bl, type2, INVALID_TIMER); + if (tsc && tsc->data[SC_CLOSECONFINE2] && tsc->data[SC_CLOSECONFINE2]->val2 == src->id) { + tsc->data[SC_CLOSECONFINE2]->val2 = 0; + status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER); } break; - } case SC_CURSEDCIRCLE_TARGET: if( tsc && tsc->data[SC_CURSEDCIRCLE_TARGET] && tsc->data[SC_CURSEDCIRCLE_TARGET]->val2 == src->id ) { clif_bladestop(bl, tsc->data[SC_CURSEDCIRCLE_TARGET]->val2, 0); diff --git a/src/map/status.hpp b/src/map/status.hpp index f83e1dc254..134398596d 100644 --- a/src/map/status.hpp +++ b/src/map/status.hpp @@ -920,6 +920,8 @@ enum sc_type : int16 { SC_SP_SHA, SC_SOULCURSE, + SC_HELLS_PLANT, + #ifdef RENEWAL SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled #endif diff --git a/src/map/unit.cpp b/src/map/unit.cpp index f7979fd734..a6a7cafd3b 100644 --- a/src/map/unit.cpp +++ b/src/map/unit.cpp @@ -2932,6 +2932,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file, status_change_end(bl, SC_CAMOUFLAGE, INVALID_TIMER); status_change_end(bl, SC_NEUTRALBARRIER_MASTER, INVALID_TIMER); status_change_end(bl, SC_STEALTHFIELD_MASTER, INVALID_TIMER); + status_change_end(bl, SC_HELLS_PLANT, INVALID_TIMER); status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER); status_change_end(bl, SC__MANHOLE, INVALID_TIMER); status_change_end(bl, SC_VACUUM_EXTREME, INVALID_TIMER);