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!
This commit is contained in:
parent
24ecebcaf3
commit
652d77eb02
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -179,4 +179,3 @@
|
||||
2303,2048 //SC_BLOODYLUST
|
||||
2419,2048 //WM_POEMOFNETHERWORLD
|
||||
2482,2048 //GN_WALLOFTHORN
|
||||
2493,2048 //GN_SLINGITEM
|
||||
|
@ -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#
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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#
|
||||
|
@ -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"
|
||||
};
|
||||
|
@ -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"
|
||||
};
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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 ) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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<s_skill_db> 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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user