Bug Fixes
* Translated the Kagerou/Oboro skill names in the skill_db. * Added Critical Food type for newer items. * Water Barrier should only reduce Weapon ATK and Flee. * Illusion - Bewitch should not be able to move MVPs. * Spider Web will no longer be deleted when the target escapes from it. (bugreport:1358) * Adjusted Absorb Spirits to work in duels. (bugreport:4085) * Clementia, Canto Candidus, and Praefatio will now cast on the party even if someone is wearing a Holy-type armor. (bugreport:6835) * Masquerade - Gloomy will now remove a Homunculus who have less than 80% HP. (bugreport:8886) * Players under the effect of Illusion - Shock will now be able to move and attack. (bugreport:8903) * Deadly Infection should only pass Guillotine Cross poisons through the Shadow Chaser's attacks only. (bugreport:8968) * Unlimit now gives the proper statuses when reducing DEF and MDEF. (bugreport:9181) * Water Screen will now heal 1,000 HP every 10 seconds. (bugreport:9184) * Tinder Breaker will now properly lock targets. (bugreport:9202) * Corrected Weapon Blocking SP drain timer from every 3 seconds to 5 seconds. Moved Combo timer to skill_cast_db. (bugreport:9203) * Players under the influence of Kaite will receive a flat 400% more damage from melee attacks (renewal only). (bugreport:9231) * Release will now check the preserved skill's SP requirement before releasing. (bugreport:9333) * Fixes #417 - Charge Attack has a range of 14 cells and can do up to 500% damage. * Fixes #419 - Magnum Break should not hit hidden targets. * Fixes #421 - Tension Relax should only increase healing at 1x rate when overweight and 3x when not overweight. Also corrected icon getting removed after a few seconds while sitting. * Fixes #427 - Auto Guard will force a player to stand when being targeted to avoid client desync. * Fixes #436 - Corrected Super Novice Spirit not allowing any headgear to be equipped. * Fixes #438 - Soul Linker's Rebirth Spirit should have a fixed cast of 1 second.
This commit is contained in:
parent
05e18fac67
commit
ba1a1aec48
@ -1117,7 +1117,7 @@
|
||||
//-- GC_POISONINGWEAPON
|
||||
2027,0,1000,0,60000:120000:180000:240000:300000,300000,0
|
||||
//-- GC_WEAPONBLOCKING
|
||||
2028,0,2000,0,180000,0,0
|
||||
2028,0,2000,0,180000,2000,0
|
||||
//-- GC_COUNTERSLASH
|
||||
2029,0,2000,0,0,0,0
|
||||
//-- GC_WEAPONCRUSH
|
||||
|
@ -865,7 +865,7 @@
|
||||
|
||||
//****
|
||||
// 2nd Quest Skills
|
||||
1001,9,6,1,-1,0,0,1,1,no,0,0x1,0,weapon,0,0x0, KN_CHARGEATK,Charge Attack
|
||||
1001,14,6,1,-1,0,0,1,1,no,0,0x1,0,weapon,0,0x0, KN_CHARGEATK,Charge Attack
|
||||
1002,0,6,4,0,0x1,0,1,0,no,0,0x1,0,weapon,2,0x0, CR_SHRINK,Shrink
|
||||
1003,0,0,0,0,0,0,1,0,no,0,0x1,0,weapon,0,0x0, AS_SONICACCEL,Sonic Acceleration
|
||||
1004,9,8,1,0,0x8,0,1,1,no,0,0x1,0,weapon,0,0x0, AS_VENOMKNIFE,Throw Venom Knife
|
||||
@ -969,11 +969,11 @@
|
||||
2038,11,8,1,6,0x2,1,5,-3,yes,0,0,0,magic,0,0x0, AB_JUDEX,Judex
|
||||
2039,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0,0x0, AB_ANCILLA,Ancilla
|
||||
2040,11,8,1,6,0,0,10,-10,yes,0,0,0,magic,0,0x0, AB_ADORAMUS,Adoramus
|
||||
2041,0,6,4,6,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CLEMENTIA,Crementia
|
||||
2042,0,6,4,6,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CANTO,Canto Candidus
|
||||
2041,0,6,4,0,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CLEMENTIA,Crementia
|
||||
2042,0,6,4,0,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CANTO,Canto Candidus
|
||||
2043,0,6,4,6,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CHEAL,Coluceo Heal
|
||||
2044,11,6,2,6,0x1,0,5,1,yes,0,0,1,magic,0,0x0, AB_EPICLESIS,Epiclesis
|
||||
2045,0,6,4,6,0x3,15,10,1,yes,0,0,0,magic,0,0x0, AB_PRAEFATIO,Praefatio
|
||||
2045,0,6,4,0,0x3,15,10,1,yes,0,0,0,magic,0,0x0, AB_PRAEFATIO,Praefatio
|
||||
2046,0,6,4,6,0x3,15,10,1,yes,0,0,0,magic,0,0x0, AB_ORATIO,Oratio
|
||||
2047,0,6,4,6,0x3,15,4,1,yes,0,0,0,magic,0,0x0, AB_LAUDAAGNUS,Lauda Agnus
|
||||
2048,0,6,4,6,0x3,15,4,1,yes,0,0,0,magic,0,0x0, AB_LAUDARAMUS,Lauda Ramus
|
||||
@ -1263,35 +1263,35 @@
|
||||
|
||||
//****
|
||||
// Kagerou & Oboro
|
||||
3001,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x4, KO_YAMIKUMO,Yamikumo
|
||||
3001,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x4, KO_YAMIKUMO,Shadow Hiding
|
||||
3002,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, KO_RIGHT,Right Hand Mastery
|
||||
3003,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, KO_LEFT,Left Hand Mastery
|
||||
3004,3:4:5:6:7,8,1,-1,0,0,5,-2,no,0,0,0,weapon,0,0x0, KO_JYUMONJIKIRI,Cross Strike
|
||||
3005,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, KO_SETSUDAN,Soul Sever
|
||||
3006,7:8:9:10:11,6,2,-1,0x42,2,5,1,no,0,0,0,weapon,0,0x0, KO_BAKURETSU,Bakuretsu Kunai
|
||||
3007,5,6,4,-1,0x42,4:4:4:4:5,5,1,no,0,0,0,weapon,0,0x0, KO_HAPPOKUNAI,Happo Kunai
|
||||
3008,11,8,2,0,0x56,1:1:1:1:1:1:1:1:1:2,10,-10,no,0,0,0,misc,0,0x0, KO_MUCHANAGE,Mucha Nage
|
||||
3009,9:10:11:12:13,8,2,-1,0x2,3,5,2,no,0,0,0,weapon,0,0x0, KO_HUUMARANKA,Huuma Shuriken Ranka
|
||||
3004,3:4:5:6:7,8,1,-1,0,0,5,-2,no,0,0,0,weapon,0,0x0, KO_JYUMONJIKIRI,Cross Slash
|
||||
3005,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, KO_SETSUDAN,Soul Cutter
|
||||
3006,7:8:9:10:11,6,2,-1,0x42,2,5,1,no,0,0,0,weapon,0,0x0, KO_BAKURETSU,Kunai Explosion
|
||||
3007,0,6,4,-1,0x42,4:4:4:4:5,5,1,no,0,0,0,weapon,0,0x0, KO_HAPPOKUNAI,Kunai Splash
|
||||
3008,11,8,2,0,0x56,1:1:1:1:1:1:1:1:1:2,10,-10,no,0,0,0,misc,0,0x0, KO_MUCHANAGE,Rapid Throw
|
||||
3009,9:10:11:12:13,8,2,-1,0x2,3,5,2,no,0,0,0,weapon,0,0x0, KO_HUUMARANKA,Swirling Petal
|
||||
3010,3,6,4,0,0x52,0,5,1,no,0,0x80,0,weapon,0,0x10, KO_MAKIBISHI,Makibishi
|
||||
3011,0,6,4,0,0x1,0,5,0,yes,0,0,0,none,0,0x0, KO_MEIKYOUSISUI,Meikyo Shisui
|
||||
3012,0,6,4,0,0x1,0,5,0,no,0,0,1,none,3:4:5:6:7,0x0, KO_ZANZOU,Zanzou
|
||||
3013,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_KYOUGAKU,Kyougaku
|
||||
3014,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_JYUSATSU,Jyusatsu
|
||||
3015,0,6,4,3,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_KAHU_ENTEN,Kahu Enten
|
||||
3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_HYOUHU_HUBUKI,Hyouhu Hubuki
|
||||
3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_KAZEHU_SEIRAN,Kazehu Seiran
|
||||
3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_DOHU_KOUKAI,Dohu Koukai
|
||||
3019,11,6,1,0,0,0,1,1,no,0,0,0,magic,0,0x0, KO_KAIHOU,Technique Kaihou
|
||||
3020,7,6,2,0,0,0,1,1,yes,0,0,0,magic,0,0x0, KO_ZENKAI,Zenkai
|
||||
3021,5:6:7:8:9,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KO_GENWAKU,Genwaku
|
||||
3022,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_IZAYOI,Izayoi
|
||||
3023,0,6,4,0,0x3,2:3:4:5:6,5,0,no,0,0,0,none,0,0x0, KG_KAGEHUMI,Kagehumi
|
||||
3024,7,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KG_KYOMU,Kyomu
|
||||
3025,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KG_KAGEMUSYA,Kagemusha
|
||||
3026,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, OB_ZANGETSU,Zangetsu
|
||||
3027,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, OB_OBOROGENSOU,Oboro Gensou
|
||||
3028,1,6,4,0,0x2,3,1,1,no,0,0,0,weapon,0,0x0, OB_OBOROGENSOU_TRANSITION_ATK,Hazy Moonlight Illusion Transition Attack
|
||||
3029,7,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, OB_AKAITSUKI,Akaitsuki
|
||||
3011,0,6,4,0,0x1,0,5,0,yes,0,0,0,none,0,0x0, KO_MEIKYOUSISUI,Pure Soul
|
||||
3012,0,6,4,0,0x1,0,5,0,no,0,0,1,none,3:4:5:6:7,0x0, KO_ZANZOU,Illusion - Shadow
|
||||
3013,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_KYOUGAKU,Illusion - Shock
|
||||
3014,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_JYUSATSU,Illusion - Death
|
||||
3015,0,6,4,3,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_KAHU_ENTEN,Fire Charm
|
||||
3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_HYOUHU_HUBUKI,Ice Charm
|
||||
3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_KAZEHU_SEIRAN,Wind Charm
|
||||
3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_DOHU_KOUKAI,Earth Charm
|
||||
3019,11,6,1,0,0,0,1,1,no,0,0,0,magic,0,0x0, KO_KAIHOU,Release Ninja Spell
|
||||
3020,7,6,2,0,0,0,1,1,yes,0,0,0,magic,0,0x0, KO_ZENKAI,Cast Ninja Spell
|
||||
3021,5:6:7:8:9,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KO_GENWAKU,Illusion - Bewitch
|
||||
3022,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_IZAYOI,16th Night
|
||||
3023,0,6,4,0,0x3,2:3:4:5:6,5,0,no,0,0,0,none,0,0x0, KG_KAGEHUMI,Shadow Trampling
|
||||
3024,7,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KG_KYOMU,Empty Shadow
|
||||
3025,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KG_KAGEMUSYA,Shadow Warrior
|
||||
3026,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, OB_ZANGETSU,Distorted Crescent
|
||||
3027,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, OB_OBOROGENSOU,Moonlight Fantasy
|
||||
3028,1,6,4,0,0x2,3,1,1,no,0,0,0,weapon,0,0x0, OB_OBOROGENSOU_TRANSITION_ATK,Moonlight Fantasy Transition Attack
|
||||
3029,7,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, OB_AKAITSUKI,Ominous Moonlight
|
||||
|
||||
//****
|
||||
// Eclage Skills
|
||||
|
@ -8126,7 +8126,7 @@
|
||||
14618,AGI_Biscuit_Stick,Bar Cookie Of Agility,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_AGIFOOD,1800000,15; sc_start SC_FLEEFOOD,600000,rand(11,33); },{},{}
|
||||
14619,INT_Biscuit_Stick,Bar Cookie Of Intelligence,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INTFOOD,1800000,15; sc_start SC_INCMATKRATE,600000,rand(11,111); },{},{}
|
||||
14620,DEX_Biscuit_Stick,Bar Cookie Of Dexterity,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_DEXFOOD,1800000,15; sc_start SC_HITFOOD,600000,rand(11,33); },{},{}
|
||||
14621,LUK_Biscuit_Stick,Bar Cookie Of Lucky,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_LUKFOOD,1800000,15; sc_start SC_INCCRI,600000,rand(11,33); },{},{}
|
||||
14621,LUK_Biscuit_Stick,Bar Cookie Of Lucky,18,1,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_LUKFOOD,1800000,15; sc_start SC_CRIFOOD,600000,rand(11,33); },{},{}
|
||||
14623,Golden_Treasure_Box,Golden Treasure Box,18,10,,10,,,,0,0xFFFFFFFF,63,2,,,,,,{ /*Items*/ },{},{}
|
||||
14624,Blue_Scroll,Blue Scroll,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Blue_Scroll); },{},{}
|
||||
14626,Indigo_Scroll,Indigo Scroll,2,20,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Indigo_Scroll); },{},{}
|
||||
|
@ -818,7 +818,7 @@
|
||||
493,0,0,0,0,0,0,1000
|
||||
|
||||
//-- SL_HIGH
|
||||
494,0,0,0,150000:200000:250000:300000:350000,0,0,0
|
||||
494,0,0,0,150000:200000:250000:300000:350000,0,0,1000
|
||||
|
||||
//-- KN_ONEHAND
|
||||
495,0,0,0,300000,0,0,0
|
||||
@ -1125,7 +1125,7 @@
|
||||
//-- GC_POISONINGWEAPON
|
||||
2027,0,1000,0,60000:120000:180000:240000:300000,300000,0,-1
|
||||
//-- GC_WEAPONBLOCKING
|
||||
2028,0,2000,0,180000,0,0,-1
|
||||
2028,0,2000,0,180000,2000,0,-1
|
||||
//-- GC_COUNTERSLASH
|
||||
2029,0,2000,0,0,0,0,-1
|
||||
//-- GC_WEAPONCRUSH
|
||||
|
@ -865,7 +865,7 @@
|
||||
|
||||
//****
|
||||
// 2nd Quest Skills
|
||||
1001,9,6,1,-1,0,0,1,1,no,0,0x1,0,weapon,0,0x0, KN_CHARGEATK,Charge Attack
|
||||
1001,14,6,1,-1,0,0,1,1,no,0,0x1,0,weapon,0,0x0, KN_CHARGEATK,Charge Attack
|
||||
1002,0,6,4,0,0x1,0,1,0,no,0,0x1,0,weapon,2,0x0, CR_SHRINK,Shrink
|
||||
1003,0,0,0,0,0,0,1,0,no,0,0x1,0,weapon,0,0x0, AS_SONICACCEL,Sonic Acceleration
|
||||
1004,9,8,1,0,0x8,0,1,1,no,0,0x1,0,weapon,0,0x0, AS_VENOMKNIFE,Throw Venom Knife
|
||||
@ -969,11 +969,11 @@
|
||||
2038,11,8,1,6,0x2,1,5,-3,yes,0,0,0,magic,0,0x0, AB_JUDEX,Judex
|
||||
2039,0,6,4,0,0x1,0,1,1,yes,0,0,0,magic,0,0x0, AB_ANCILLA,Ancilla
|
||||
2040,11,8,1,6,0,0,10,-10,yes,0,0,0,magic,0,0x0, AB_ADORAMUS,Adoramus
|
||||
2041,0,6,4,6,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CLEMENTIA,Crementia
|
||||
2042,0,6,4,6,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CANTO,Canto Candidus
|
||||
2041,0,6,4,0,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CLEMENTIA,Crementia
|
||||
2042,0,6,4,0,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CANTO,Canto Candidus
|
||||
2043,0,6,4,6,0x3,3:7:15,3,1,yes,0,0,0,magic,0,0x0, AB_CHEAL,Coluceo Heal
|
||||
2044,11,6,2,6,0x1,0,5,1,yes,0,0,1,magic,0,0x0, AB_EPICLESIS,Epiclesis
|
||||
2045,0,6,4,6,0x3,15,10,1,yes,0,0,0,magic,0,0x0, AB_PRAEFATIO,Praefatio
|
||||
2045,0,6,4,0,0x3,15,10,1,yes,0,0,0,magic,0,0x0, AB_PRAEFATIO,Praefatio
|
||||
2046,0,6,4,6,0x3,15,10,1,yes,0,0,0,magic,0,0x0, AB_ORATIO,Oratio
|
||||
2047,0,6,4,6,0x3,15,4,1,yes,0,0,0,magic,0,0x0, AB_LAUDAAGNUS,Lauda Agnus
|
||||
2048,0,6,4,6,0x3,15,4,1,yes,0,0,0,magic,0,0x0, AB_LAUDARAMUS,Lauda Ramus
|
||||
@ -1266,35 +1266,35 @@
|
||||
|
||||
//****
|
||||
// Kagerou & Oboro
|
||||
3001,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x4, KO_YAMIKUMO,Yamikumo
|
||||
3001,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x4, KO_YAMIKUMO,Shadow Hiding
|
||||
3002,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, KO_RIGHT,Right Hand Mastery
|
||||
3003,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, KO_LEFT,Left Hand Mastery
|
||||
3004,3:4:5:6:7,8,1,-1,0,0,5,-2,no,0,0,0,weapon,0,0x0, KO_JYUMONJIKIRI,Cross Strike
|
||||
3005,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, KO_SETSUDAN,Soul Sever
|
||||
3006,7:8:9:10:11,6,2,-1,0x42,2,5,1,no,0,0,0,weapon,0,0x0, KO_BAKURETSU,Bakuretsu Kunai
|
||||
3007,0,6,4,-1,0x42,4:4:4:4:5,5,1,no,0,0,0,weapon,0,0x0, KO_HAPPOKUNAI,Happo Kunai
|
||||
3008,11,8,2,0,0x56,1:1:1:1:1:1:1:1:1:2,10,-10,no,0,0,0,misc,0,0x0, KO_MUCHANAGE,Mucha Nage
|
||||
3009,9:10:11:12:13,8,2,-1,0x2,3,5,2,no,0,0,0,weapon,0,0x0, KO_HUUMARANKA,Huuma Shuriken Ranka
|
||||
3004,3:4:5:6:7,8,1,-1,0,0,5,-2,no,0,0,0,weapon,0,0x0, KO_JYUMONJIKIRI,Cross Slash
|
||||
3005,2,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, KO_SETSUDAN,Soul Cutter
|
||||
3006,7:8:9:10:11,6,2,-1,0x42,2,5,1,no,0,0,0,weapon,0,0x0, KO_BAKURETSU,Kunai Explosion
|
||||
3007,0,6,4,-1,0x42,4:4:4:4:5,5,1,no,0,0,0,weapon,0,0x0, KO_HAPPOKUNAI,Kunai Splash
|
||||
3008,11,8,2,0,0x56,1:1:1:1:1:1:1:1:1:2,10,-10,no,0,0,0,misc,0,0x0, KO_MUCHANAGE,Rapid Throw
|
||||
3009,9:10:11:12:13,8,2,-1,0x2,3,5,2,no,0,0,0,weapon,0,0x0, KO_HUUMARANKA,Swirling Petal
|
||||
3010,3,6,4,0,0x52,0,5,1,no,0,0x80,0,weapon,0,0x10, KO_MAKIBISHI,Makibishi
|
||||
3011,0,6,4,0,0x1,0,5,0,yes,0,0,0,none,0,0x0, KO_MEIKYOUSISUI,Meikyo Shisui
|
||||
3012,0,6,4,0,0x1,0,5,0,no,0,0,1,none,3:4:5:6:7,0x0, KO_ZANZOU,Zanzou
|
||||
3013,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_KYOUGAKU,Kyougaku
|
||||
3014,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_JYUSATSU,Jyusatsu
|
||||
3015,0,6,4,3,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_KAHU_ENTEN,Kahu Enten
|
||||
3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_HYOUHU_HUBUKI,Hyouhu Hubuki
|
||||
3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_KAZEHU_SEIRAN,Kazehu Seiran
|
||||
3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_DOHU_KOUKAI,Dohu Koukai
|
||||
3019,11,6,1,0,0,0,1,1,no,0,0,0,magic,0,0x0, KO_KAIHOU,Technique Kaihou
|
||||
3020,7,6,2,0,0,0,1,1,yes,0,0,0,magic,0,0x0, KO_ZENKAI,Zenkai
|
||||
3021,5:6:7:8:9,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KO_GENWAKU,Genwaku
|
||||
3022,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_IZAYOI,Izayoi
|
||||
3023,0,6,4,0,0x3,2:3:4:5:6,5,0,no,0,0,0,none,0,0x0, KG_KAGEHUMI,Kagehumi
|
||||
3024,7,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KG_KYOMU,Kyomu
|
||||
3025,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KG_KAGEMUSYA,Kagemusha
|
||||
3026,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, OB_ZANGETSU,Zangetsu
|
||||
3027,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, OB_OBOROGENSOU,Oboro Gensou
|
||||
3028,1,6,4,0,0x2,3,1,1,no,0,0,0,weapon,0,0x0, OB_OBOROGENSOU_TRANSITION_ATK,Hazy Moonlight Illusion Transition Attack
|
||||
3029,7,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, OB_AKAITSUKI,Akaitsuki
|
||||
3011,0,6,4,0,0x1,0,5,0,yes,0,0,0,none,0,0x0, KO_MEIKYOUSISUI,Pure Soul
|
||||
3012,0,6,4,0,0x1,0,5,0,no,0,0,1,none,3:4:5:6:7,0x0, KO_ZANZOU,Illusion - Shadow
|
||||
3013,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_KYOUGAKU,Illusion - Shock
|
||||
3014,5,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_JYUSATSU,Illusion - Death
|
||||
3015,0,6,4,3,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_KAHU_ENTEN,Fire Charm
|
||||
3016,0,6,4,1,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_HYOUHU_HUBUKI,Ice Charm
|
||||
3017,0,6,4,4,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_KAZEHU_SEIRAN,Wind Charm
|
||||
3018,0,6,4,2,0x1,0,1,1,no,0,0,0,none,0,0x0, KO_DOHU_KOUKAI,Earth Charm
|
||||
3019,11,6,1,0,0,0,1,1,no,0,0,0,magic,0,0x0, KO_KAIHOU,Release Ninja Spell
|
||||
3020,7,6,2,0,0,0,1,1,yes,0,0,0,magic,0,0x0, KO_ZENKAI,Cast Ninja Spell
|
||||
3021,5:6:7:8:9,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KO_GENWAKU,Illusion - Bewitch
|
||||
3022,0,6,4,0,0x1,0,5,0,no,0,0,0,none,0,0x0, KO_IZAYOI,16th Night
|
||||
3023,0,6,4,0,0x3,2:3:4:5:6,5,0,no,0,0,0,none,0,0x0, KG_KAGEHUMI,Shadow Trampling
|
||||
3024,7,6,1,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KG_KYOMU,Empty Shadow
|
||||
3025,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, KG_KAGEMUSYA,Shadow Warrior
|
||||
3026,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, OB_ZANGETSU,Distorted Crescent
|
||||
3027,7,6,16,0,0x1,0,5,1,no,0,0,0,none,0,0x0, OB_OBOROGENSOU,Moonlight Fantasy
|
||||
3028,1,6,4,0,0x2,3,1,1,no,0,0,0,weapon,0,0x0, OB_OBOROGENSOU_TRANSITION_ATK,Moonlight Fantasy Transition Attack
|
||||
3029,7,6,1,0,0x1,0,5,0,no,0,0,0,none,0,0x0, OB_AKAITSUKI,Ominous Moonlight
|
||||
|
||||
//****
|
||||
// Eclage Skills
|
||||
|
@ -865,12 +865,12 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
if( sc->data[SC_SAFETYWALL] && (flag&(BF_SHORT|BF_MAGIC))==BF_SHORT ) {
|
||||
struct skill_unit_group* group = skill_id2group(sc->data[SC_SAFETYWALL]->val3);
|
||||
uint16 skill_id_val = sc->data[SC_SAFETYWALL]->val2;
|
||||
if (group) {
|
||||
d->dmg_lv = ATK_BLOCK;
|
||||
|
||||
if (group) {
|
||||
if (skill_id_val == MH_STEINWAND) {
|
||||
if (--group->val2 <= 0)
|
||||
skill_delunitgroup(group);
|
||||
d->dmg_lv = ATK_BLOCK;
|
||||
if( (group->val3 - damage) > 0 )
|
||||
group->val3 -= (int)cap_value(damage, INT_MIN, INT_MAX);
|
||||
else
|
||||
@ -878,6 +878,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
return 0;
|
||||
}
|
||||
//in RE, SW possesses a lifetime equal to group val2, (3x caster hp, or homon formula)
|
||||
d->dmg_lv = ATK_BLOCK;
|
||||
#ifdef RENEWAL
|
||||
if ( ( group->val2 - damage) > 0 ) {
|
||||
group->val2 -= (int)cap_value(damage, INT_MIN, INT_MAX);
|
||||
@ -908,12 +909,14 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
skill_blown(src,bl,skill_get_blewcount(skill_id,skill_lv),-1,0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( sc->data[SC_WEAPONBLOCKING] && flag&(BF_SHORT|BF_WEAPON) && rnd()%100 < sc->data[SC_WEAPONBLOCKING]->val2 ) {
|
||||
clif_skill_nodamage(bl,src,GC_WEAPONBLOCKING,1,1);
|
||||
clif_skill_nodamage(bl,src,GC_WEAPONBLOCKING,sc->data[SC_WEAPONBLOCKING]->val1,1);
|
||||
sc_start2(src,bl,SC_COMBO,100,GC_WEAPONBLOCKING,src->id,skill_get_time2(GC_WEAPONBLOCKING,sc->data[SC_WEAPONBLOCKING]->val1));
|
||||
d->dmg_lv = ATK_BLOCK;
|
||||
sc_start2(src,bl,SC_COMBO,100,GC_WEAPONBLOCKING,src->id,2000);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( (sce = sc->data[SC_AUTOGUARD]) && flag&BF_WEAPON && !(skill_get_nk(skill_id)&NK_NO_CARDFIX_ATK) && rnd()%100 < sce->val2 ) {
|
||||
int delay;
|
||||
struct status_change_entry *sce_d = sc->data[SC_DEVOTION];
|
||||
@ -926,6 +929,8 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
delay = 200;
|
||||
else
|
||||
delay = 100;
|
||||
if (sd && pc_issit(sd))
|
||||
pc_setstand(sd, true);
|
||||
if( sce_d && (d_bl = map_id2bl(sce_d->val1)) &&
|
||||
((d_bl->type == BL_MER && ((TBL_MER*)d_bl)->master && ((TBL_MER*)d_bl)->master->bl.id == bl->id) ||
|
||||
(d_bl->type == BL_PC && ((TBL_PC*)d_bl)->devotion[sce_d->val2] == bl->id)) &&
|
||||
@ -1002,6 +1007,11 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef RENEWAL // Flat +400% damage from melee
|
||||
if (sc->data[SC_KAITE] && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT)
|
||||
damage <<= 2;
|
||||
#endif
|
||||
|
||||
if( flag&BF_MAGIC && (sce=sc->data[SC_PRESTIGE]) && rnd()%100 < sce->val2) {
|
||||
clif_specialeffect(bl, 462, AREA); // Still need confirm it.
|
||||
return 0;
|
||||
@ -1269,7 +1279,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
}
|
||||
|
||||
if( sc->data[SC__DEADLYINFECT] && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT && damage > 0 && rnd()%100 < 30 + 10 * sc->data[SC__DEADLYINFECT]->val1 )
|
||||
status_change_spread(bl, src); // Deadly infect attacked side
|
||||
status_change_spread(bl, src, 1); // Deadly infect attacked side
|
||||
|
||||
} //End of target SC_ check
|
||||
|
||||
@ -1316,7 +1326,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
sc_start(src,bl,(enum sc_type)sc->data[SC_POISONINGWEAPON]->val2,100,sc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON, 1));
|
||||
|
||||
if( sc->data[SC__DEADLYINFECT] && (flag&(BF_SHORT|BF_MAGIC)) == BF_SHORT && damage > 0 && rnd()%100 < 30 + 10 * sc->data[SC__DEADLYINFECT]->val1 )
|
||||
status_change_spread(src, bl);
|
||||
status_change_spread(src, bl, 0);
|
||||
|
||||
if (sc->data[SC_STYLE_CHANGE] && sc->data[SC_STYLE_CHANGE]->val1 == MH_MD_FIGHTING) {
|
||||
TBL_HOM *hd = BL_CAST(BL_HOM,src); //when attacking
|
||||
@ -3509,10 +3519,19 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
|
||||
case NJ_KUNAI:
|
||||
skillratio += 200;
|
||||
break;
|
||||
case KN_CHARGEATK:
|
||||
{
|
||||
int k = (wd.miscflag-1)/3; //+100% every 3 cells of distance
|
||||
if( k > 2 ) k = 2; // ...but hard-limited to 300%.
|
||||
case KN_CHARGEATK: { // +100% every 3 cells of distance but hard-limited to 500%
|
||||
unsigned int k = wd.miscflag / 3;
|
||||
|
||||
if (k < 2)
|
||||
k = 0;
|
||||
else if (k > 1 && k < 3)
|
||||
k = 1;
|
||||
else if (k > 2 && k < 4)
|
||||
k = 2;
|
||||
else if (k > 3 && k < 5)
|
||||
k = 3;
|
||||
else
|
||||
k = 4;
|
||||
skillratio += 100 * k;
|
||||
}
|
||||
break;
|
||||
@ -7225,7 +7244,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
|
||||
return 0;
|
||||
if(((md->special_state.ai == AI_SPHERE || //Marine Spheres
|
||||
(md->special_state.ai == AI_FLORA && battle_config.summon_flora&1)) && s_bl->type == BL_PC && src->type != BL_MOB) || //Floras
|
||||
(md->special_state.ai == AI_ZANZOU && t_bl->id != s_bl->id) || //Zanzoe
|
||||
(md->special_state.ai == AI_ZANZOU && t_bl->id != s_bl->id) || //Zanzou
|
||||
(md->special_state.ai == AI_FAW && (t_bl->id != s_bl->id || (s_bl->type == BL_PC && src->type != BL_MOB)))
|
||||
){ //Targettable by players
|
||||
state |= BCT_ENEMY;
|
||||
|
@ -1037,7 +1037,7 @@ uint8 pc_isequip(struct map_session_data *sd,int n)
|
||||
if (sd->sc.data[SC_SPIRIT] && sd->sc.data[SC_SPIRIT]->val2 == SL_SUPERNOVICE) {
|
||||
//Spirit of Super Novice equip bonuses. [Skotlex]
|
||||
if (sd->status.base_level > 90 && item->equip & EQP_HELM)
|
||||
return ITEM_EQUIP_ACK_FAIL; //Can equip all helms
|
||||
return ITEM_EQUIP_ACK_OK; //Can equip all helms
|
||||
|
||||
if (sd->status.base_level > 96 && item->equip & EQP_ARMS && item->type == IT_WEAPON && item->wlv == 4)
|
||||
switch(item->look) { //In weapons, the look determines type of weapon.
|
||||
|
@ -1650,8 +1650,8 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
|
||||
case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
|
||||
case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
|
||||
case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
|
||||
case SC_SPIRIT: case SC_AUTOBERSERK:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_CRIFOOD:
|
||||
case SC_DANCING: case SC_SPIRIT: case SC_AUTOBERSERK:
|
||||
case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
|
||||
case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
|
||||
case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
|
||||
@ -4289,12 +4289,12 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
uint8 dir = map_calc_dir(bl, src->x, src->y);
|
||||
|
||||
// teleport to target (if not on WoE grounds)
|
||||
if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x, bl->y, 0, 1) )
|
||||
if (!map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x, bl->y, 0, 1))
|
||||
clif_blown(src);
|
||||
|
||||
// cause damage and knockback if the path to target was a straight one
|
||||
if( path )
|
||||
{
|
||||
if (path) {
|
||||
dist = cap_value(dist, 0, 9);
|
||||
skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, dist);
|
||||
skill_blown(src, bl, dist, dir, 0);
|
||||
//HACK: since knockback officially defaults to the left, the client also turns to the left... therefore,
|
||||
@ -4536,7 +4536,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
case MS_MAGNUM:
|
||||
if( flag&1 ) {
|
||||
//Damage depends on distance, so add it to flag if it is > 1
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag|distance_bl(src, bl));
|
||||
// Cannot hit hidden targets
|
||||
skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag|SD_ANIMATION|distance_bl(src, bl));
|
||||
}
|
||||
break;
|
||||
|
||||
@ -5059,6 +5060,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
if( !skill_check_condition_castbegin(sd, pres_skill_id, pres_skill_lv) )
|
||||
break;
|
||||
|
||||
// Get the requirement for the preserved skill
|
||||
skill_consume_requirement(sd, pres_skill_id, pres_skill_lv, 1);
|
||||
// SC_MAGICPOWER needs to switch states before any damage is actually dealt
|
||||
skill_toggle_magicpower(src, pres_skill_id);
|
||||
|
||||
@ -6514,12 +6517,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
|
||||
case MO_ABSORBSPIRITS:
|
||||
i = 0;
|
||||
if (dstsd && dstsd->spiritball && (sd == dstsd || map_flag_vs(src->m)) && ((dstsd->class_&MAPID_BASEMASK) != MAPID_GUNSLINGER || (dstsd->class_&MAPID_UPPERMASK) != MAPID_REBELLION))
|
||||
{ // split the if for readability, and included gunslingers in the check so that their coins cannot be removed [Reddozen]
|
||||
if (dstsd && (sd == dstsd || map_flag_vs(src->m) || (sd && sd->duel_group && sd->duel_group == dstsd->duel_group)) &&
|
||||
((dstsd->class_&MAPID_BASEMASK) != MAPID_GUNSLINGER || (dstsd->class_&MAPID_UPPERMASK) != MAPID_REBELLION)) { // split the if for readability, and included gunslingers in the check so that their coins cannot be removed [Reddozen]
|
||||
i = dstsd->spiritball * 7;
|
||||
pc_delspiritball(dstsd,dstsd->spiritball,0);
|
||||
} else if (dstmd && !(tstatus->mode&MD_BOSS) && rnd() % 100 < 20)
|
||||
{ // check if target is a monster and not a Boss, for the 20% chance to absorb 2 SP per monster's level [Reddozen]
|
||||
} else if (dstmd && !(tstatus->mode&MD_BOSS) && rnd() % 100 < 20) { // check if target is a monster and not a Boss, for the 20% chance to absorb 2 SP per monster's level [Reddozen]
|
||||
i = 2 * dstmd->level;
|
||||
mob_target(dstmd,src,0);
|
||||
}
|
||||
@ -7381,8 +7383,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
|
||||
case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
|
||||
case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
|
||||
case SC_EDP: case SC_AUTOBERSERK:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_CRIFOOD:
|
||||
case SC_DANCING: case SC_EDP: case SC_AUTOBERSERK:
|
||||
case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
|
||||
case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
|
||||
case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
|
||||
@ -8864,8 +8866,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case SC_STRFOOD: case SC_AGIFOOD: case SC_VITFOOD:
|
||||
case SC_INTFOOD: case SC_DEXFOOD: case SC_LUKFOOD:
|
||||
case SC_HITFOOD: case SC_FLEEFOOD: case SC_BATKFOOD:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_DANCING:
|
||||
case SC_SPIRIT: case SC_AUTOBERSERK:
|
||||
case SC_WATKFOOD: case SC_MATKFOOD: case SC_CRIFOOD:
|
||||
case SC_DANCING: case SC_SPIRIT: case SC_AUTOBERSERK:
|
||||
case SC_CARTBOOST: case SC_MELTDOWN: case SC_SAFETYWALL:
|
||||
case SC_SMA: case SC_SPEEDUP0: case SC_NOCHAT:
|
||||
case SC_ANKLE: case SC_SPIDERWEB: case SC_JAILED:
|
||||
@ -10122,8 +10124,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);
|
||||
clif_blown(src);
|
||||
sc_start(src,src,SC_CONFUSION,25,skill_lv,skill_get_time(skill_id,skill_lv));
|
||||
if (unit_movepos(bl,x,y,0,0)) {
|
||||
clif_skill_damage(bl,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, -1, 6);
|
||||
if (!is_boss(bl) && unit_movepos(bl,x,y,0,0)) {
|
||||
if( bl->type == BL_PC && pc_issit((TBL_PC*)bl))
|
||||
clif_sitting(bl); //Avoid sitting sync problem
|
||||
clif_blown(bl);
|
||||
@ -13585,16 +13586,6 @@ int skill_unit_onout(struct skill_unit *src, struct block_list *bl, unsigned int
|
||||
status_change_end(bl, type, INVALID_TIMER);
|
||||
break;
|
||||
|
||||
case UNT_SPIDERWEB:
|
||||
{
|
||||
struct block_list *target = map_id2bl(sg->val2);
|
||||
if (target && target==bl) {
|
||||
if (sce && sce->val3 == sg->group_id)
|
||||
status_change_end(bl, type, INVALID_TIMER);
|
||||
sg->limit = DIFF_TICK(tick,sg->tick)+1000;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case UNT_DISSONANCE:
|
||||
case UNT_UGLYDANCE: //Used for updating timers in song overlap instances
|
||||
{
|
||||
@ -13971,12 +13962,6 @@ int skill_check_pc_partner(struct map_session_data *sd, uint16 skill_id, uint16
|
||||
status_charge(&tsd->bl, 0, i);
|
||||
}
|
||||
break;
|
||||
case WM_GREAT_ECHO:
|
||||
for( i = 0; i < c; i++ ) {
|
||||
if( (tsd = map_id2sd(p_sd[i])) != NULL )
|
||||
status_zap(&tsd->bl,0,skill_get_sp(skill_id,*skill_lv)/c);
|
||||
}
|
||||
break;
|
||||
default: //Warning: Assuming Ensemble skills here (for speed)
|
||||
if( is_chorus )
|
||||
break;//Chorus skills are not to be parsed as ensambles
|
||||
|
123
src/map/status.c
123
src/map/status.c
@ -762,7 +762,7 @@ void initChangeTables(void)
|
||||
set_sc( EL_FIRE_CLOAK , SC_FIRE_CLOAK_OPTION , SI_FIRE_CLOAK_OPTION , SCB_ALL );
|
||||
set_sc( EL_WATER_SCREEN , SC_WATER_SCREEN_OPTION , SI_WATER_SCREEN_OPTION , SCB_NONE );
|
||||
set_sc( EL_WATER_DROP , SC_WATER_DROP_OPTION , SI_WATER_DROP_OPTION , SCB_ALL );
|
||||
set_sc( EL_WATER_BARRIER , SC_WATER_BARRIER , SI_WATER_BARRIER , SCB_MDEF|SCB_WATK|SCB_MATK|SCB_FLEE );
|
||||
set_sc( EL_WATER_BARRIER , SC_WATER_BARRIER , SI_WATER_BARRIER , SCB_WATK|SCB_FLEE );
|
||||
set_sc( EL_WIND_STEP , SC_WIND_STEP_OPTION , SI_WIND_STEP_OPTION , SCB_SPEED|SCB_FLEE );
|
||||
set_sc( EL_WIND_CURTAIN , SC_WIND_CURTAIN_OPTION , SI_WIND_CURTAIN_OPTION , SCB_ALL );
|
||||
set_sc( EL_ZEPHYR , SC_ZEPHYR , SI_ZEPHYR , SCB_FLEE );
|
||||
@ -853,8 +853,9 @@ void initChangeTables(void)
|
||||
StatusIconChangeTable[SC_INTFOOD] = SI_FOODINT;
|
||||
StatusIconChangeTable[SC_DEXFOOD] = SI_FOODDEX;
|
||||
StatusIconChangeTable[SC_LUKFOOD] = SI_FOODLUK;
|
||||
StatusIconChangeTable[SC_FLEEFOOD]= SI_FOODFLEE;
|
||||
StatusIconChangeTable[SC_FLEEFOOD] = SI_FOODFLEE;
|
||||
StatusIconChangeTable[SC_HITFOOD] = SI_FOODHIT;
|
||||
StatusIconChangeTable[SC_CRIFOOD] = SI_FOODCRI;
|
||||
StatusIconChangeTable[SC_MANU_ATK] = SI_MANU_ATK;
|
||||
StatusIconChangeTable[SC_MANU_DEF] = SI_MANU_DEF;
|
||||
StatusIconChangeTable[SC_SPL_ATK] = SI_SPL_ATK;
|
||||
@ -1042,8 +1043,9 @@ void initChangeTables(void)
|
||||
StatusChangeFlagTable[SC_INTFOOD] |= SCB_INT;
|
||||
StatusChangeFlagTable[SC_DEXFOOD] |= SCB_DEX;
|
||||
StatusChangeFlagTable[SC_LUKFOOD] |= SCB_LUK;
|
||||
StatusChangeFlagTable[SC_HITFOOD] |= SCB_HIT;
|
||||
StatusChangeFlagTable[SC_FLEEFOOD] |= SCB_FLEE;
|
||||
StatusChangeFlagTable[SC_HITFOOD] |= SCB_HIT;
|
||||
StatusChangeFlagTable[SC_CRIFOOD] |= SCB_CRI;
|
||||
StatusChangeFlagTable[SC_BATKFOOD] |= SCB_BATK;
|
||||
StatusChangeFlagTable[SC_WATKFOOD] |= SCB_WATK;
|
||||
StatusChangeFlagTable[SC_MATKFOOD] |= SCB_MATK;
|
||||
@ -1198,7 +1200,6 @@ void initChangeTables(void)
|
||||
StatusChangeStateTable[SC_CAMOUFLAGE] |= SCS_NOMOVE|SCS_NOMOVECOND;
|
||||
StatusChangeStateTable[SC_MEIKYOUSISUI] |= SCS_NOMOVE;
|
||||
StatusChangeStateTable[SC_KAGEHUMI] |= SCS_NOMOVE;
|
||||
StatusChangeStateTable[SC_KYOUGAKU] |= SCS_NOMOVE;
|
||||
StatusChangeStateTable[SC_PARALYSIS] |= SCS_NOMOVE;
|
||||
StatusChangeStateTable[SC_KINGS_GRACE] |= SCS_NOMOVE;
|
||||
StatusChangeStateTable[SC_VACUUM_EXTREME] |= SCS_NOMOVE;
|
||||
@ -4128,14 +4129,19 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
|
||||
sc->data[SC_OBLIVIONCURSE] || sc->data[SC_VITALITYACTIVATION])
|
||||
regen->flag &= ~RGN_SP;
|
||||
|
||||
if(sc->data[SC_TENSIONRELAX]) {
|
||||
regen->rate.hp += 200;
|
||||
if (regen->sregen)
|
||||
regen->sregen->rate.hp += 300;
|
||||
if (sc->data[SC_TENSIONRELAX]) {
|
||||
if (sc->data[SC_WEIGHT50] || sc->data[SC_WEIGHT90])
|
||||
regen->state.overweight = 0; // 1x HP regen
|
||||
else {
|
||||
regen->rate.hp += 200;
|
||||
if (regen->sregen)
|
||||
regen->sregen->rate.hp += 200;
|
||||
}
|
||||
}
|
||||
if (sc->data[SC_MAGNIFICAT]) {
|
||||
|
||||
if (sc->data[SC_MAGNIFICAT])
|
||||
regen->rate.sp += 100;
|
||||
}
|
||||
|
||||
if (sc->data[SC_REGENERATION]) {
|
||||
const struct status_change_entry *sce = sc->data[SC_REGENERATION];
|
||||
if (!sce->val4) {
|
||||
@ -5383,7 +5389,7 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
|
||||
if(sc->data[SC_MERC_ATKUP])
|
||||
watk += sc->data[SC_MERC_ATKUP]->val2;
|
||||
if(sc->data[SC_WATER_BARRIER])
|
||||
watk -= sc->data[SC_WATER_BARRIER]->val3;
|
||||
watk -= sc->data[SC_WATER_BARRIER]->val2;
|
||||
#ifndef RENEWAL
|
||||
if(sc->data[SC_NIBELUNGEN]) {
|
||||
if (bl->type != BL_PC)
|
||||
@ -5477,8 +5483,6 @@ static unsigned short status_calc_ematk(struct block_list *bl, struct status_cha
|
||||
matk += sc->data[SC_AQUAPLAY_OPTION]->val2;
|
||||
if(sc->data[SC_CHILLY_AIR_OPTION])
|
||||
matk += sc->data[SC_CHILLY_AIR_OPTION]->val2;
|
||||
if(sc->data[SC_WATER_BARRIER])
|
||||
matk -= sc->data[SC_WATER_BARRIER]->val3;
|
||||
if(sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3)
|
||||
matk += 50;
|
||||
if(sc->data[SC_ODINS_POWER])
|
||||
@ -5529,8 +5533,6 @@ static unsigned short status_calc_matk(struct block_list *bl, struct status_chan
|
||||
matk += sc->data[SC_CHILLY_AIR_OPTION]->val2;
|
||||
if (sc->data[SC_COOLER_OPTION])
|
||||
matk += sc->data[SC_COOLER_OPTION]->val2;
|
||||
if (sc->data[SC_WATER_BARRIER])
|
||||
matk -= sc->data[SC_WATER_BARRIER]->val3;
|
||||
if (sc->data[SC_FIRE_INSIGNIA] && sc->data[SC_FIRE_INSIGNIA]->val1 == 3)
|
||||
matk += 50;
|
||||
if (sc->data[SC_ODINS_POWER])
|
||||
@ -5580,6 +5582,8 @@ static signed short status_calc_critical(struct block_list *bl, struct status_ch
|
||||
|
||||
if (sc->data[SC_INCCRI])
|
||||
critical += sc->data[SC_INCCRI]->val1;
|
||||
if (sc->data[SC_CRIFOOD])
|
||||
critical += sc->data[SC_CRIFOOD]->val1;
|
||||
if (sc->data[SC_EXPLOSIONSPIRITS])
|
||||
critical += sc->data[SC_EXPLOSIONSPIRITS]->val2;
|
||||
if (sc->data[SC_FORTUNE])
|
||||
@ -5711,7 +5715,7 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
|
||||
if(sc->data[SC_MTF_HITFLEE])
|
||||
flee += sc->data[SC_MTF_HITFLEE]->val2;
|
||||
if( sc->data[SC_WATER_BARRIER] )
|
||||
flee -= sc->data[SC_WATER_BARRIER]->val3;
|
||||
flee -= sc->data[SC_WATER_BARRIER]->val2;
|
||||
if( sc->data[SC_C_MARKER] )
|
||||
flee -= sc->data[SC_C_MARKER]->val3;
|
||||
#ifdef RENEWAL
|
||||
@ -5808,8 +5812,6 @@ static defType status_calc_def(struct block_list *bl, struct status_change *sc,
|
||||
#endif
|
||||
if(sc->data[SC_DEFSET])
|
||||
return sc->data[SC_DEFSET]->val1;
|
||||
if(sc->data[SC_UNLIMIT])
|
||||
return 1;
|
||||
|
||||
if(sc->data[SC_DRUMBATTLE])
|
||||
def += sc->data[SC_DRUMBATTLE]->val3;
|
||||
@ -5899,8 +5901,6 @@ static signed short status_calc_def2(struct block_list *bl, struct status_change
|
||||
return 0;
|
||||
if(sc->data[SC_DEFSET])
|
||||
return sc->data[SC_DEFSET]->val1;
|
||||
if(sc->data[SC_UNLIMIT])
|
||||
return 1;
|
||||
|
||||
if(sc->data[SC_SUN_COMFORT])
|
||||
def2 += sc->data[SC_SUN_COMFORT]->val2;
|
||||
@ -5971,8 +5971,6 @@ static defType status_calc_mdef(struct block_list *bl, struct status_change *sc,
|
||||
#endif
|
||||
if(sc->data[SC_MDEFSET])
|
||||
return sc->data[SC_MDEFSET]->val1;
|
||||
if(sc->data[SC_UNLIMIT])
|
||||
return 1;
|
||||
|
||||
if(sc->data[SC_EARTH_INSIGNIA] && sc->data[SC_EARTH_INSIGNIA]->val1 == 3)
|
||||
mdef += 50;
|
||||
@ -5980,8 +5978,6 @@ static defType status_calc_mdef(struct block_list *bl, struct status_change *sc,
|
||||
mdef += (sc->data[SC_ENDURE]->val4 == 0) ? sc->data[SC_ENDURE]->val1 : 1;
|
||||
if(sc->data[SC_STONEHARDSKIN])
|
||||
mdef += sc->data[SC_STONEHARDSKIN]->val1;
|
||||
if(sc->data[SC_WATER_BARRIER])
|
||||
mdef += sc->data[SC_WATER_BARRIER]->val2;
|
||||
if(sc->data[SC_STONE] && sc->opt1 == OPT1_STONE)
|
||||
mdef += 25 * mdef / 100;
|
||||
if(sc->data[SC_FREEZE])
|
||||
@ -6027,8 +6023,6 @@ static signed short status_calc_mdef2(struct block_list *bl, struct status_chang
|
||||
return 90;
|
||||
if(sc->data[SC_MDEFSET])
|
||||
return sc->data[SC_MDEFSET]->val1;
|
||||
if(sc->data[SC_UNLIMIT])
|
||||
return 1;
|
||||
|
||||
if(sc->data[SC_MINDBREAKER])
|
||||
mdef2 -= mdef2 * sc->data[SC_MINDBREAKER]->val3/100;
|
||||
@ -8992,10 +8986,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
clif_sitting(&sd->bl);
|
||||
}
|
||||
val2 = 12; // SP cost
|
||||
val4 = 10000; // Decrease at 10secs intervals.
|
||||
val3 = tick/val4;
|
||||
tick_time = 10000; // Decrease at 10secs intervals.
|
||||
val3 = tick / tick_time;
|
||||
tick = -1; // Duration sent to the client should be infinite
|
||||
tick_time = val4; // [GodLesZ] tick time
|
||||
break;
|
||||
case SC_PARRYING:
|
||||
val2 = 20 + val1*3; // Block Chance
|
||||
@ -9502,8 +9495,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
break;
|
||||
case SC_WEAPONBLOCKING:
|
||||
val2 = 10 + 2 * val1; // Chance
|
||||
val4 = tick / 3000;
|
||||
tick_time = 3000; // [GodLesZ] tick time
|
||||
val4 = tick / 5000;
|
||||
tick_time = 5000; // [GodLesZ] tick time
|
||||
break;
|
||||
case SC_TOXIN:
|
||||
val4 = tick / 10000;
|
||||
@ -9627,7 +9620,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
if( pc_isridingwug(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_WUGRIDER);
|
||||
if( pc_isfalcon(sd) ) pc_setoption(sd, sd->sc.option&~OPTION_FALCON);
|
||||
if( sd->status.pet_id > 0 ) pet_menu(sd, 3);
|
||||
if( hom_is_active(sd->hd) ) hom_vaporize(sd,HOM_ST_REST);
|
||||
if( hom_is_active(sd->hd) ) hom_vaporize(sd, HOM_ST_ACTIVE);
|
||||
//if( sd->md ) mercenary_delete(sd->md,3); // Are Mercenaries removed? [aleos]
|
||||
}
|
||||
break;
|
||||
@ -9889,6 +9882,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
case SC_CIRCLE_OF_FIRE_OPTION:
|
||||
val2 = 300;
|
||||
break;
|
||||
case SC_WATER_SCREEN_OPTION:
|
||||
tick_time = 10000;
|
||||
break;
|
||||
case SC_FIRE_CLOAK_OPTION:
|
||||
case SC_WATER_DROP_OPTION:
|
||||
case SC_WIND_CURTAIN_OPTION:
|
||||
@ -9924,8 +9920,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
tick_time = val3; // [GodLesZ] tick time
|
||||
break;
|
||||
case SC_WATER_BARRIER:
|
||||
val2 = 40; // Increasement. Mdef1 ???
|
||||
val3 = 30; // Reductions. Atk2, Flee1, Matk1 ????
|
||||
val2 = 30; // Reductions. Atk2 and Flee1
|
||||
break;
|
||||
case SC_ZEPHYR:
|
||||
val2 = 25; // Flee.
|
||||
@ -10102,6 +10097,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
break;
|
||||
case SC_UNLIMIT:
|
||||
val2 = 50 * val1;
|
||||
status_change_start(bl, bl, SC_DEFSET, 10000, 1, 0, 0, 0, tick, SCSTART_NOTICKDEF);
|
||||
status_change_start(bl, bl, SC_MDEFSET, 10000, 1, 0, 0, 0, tick, SCSTART_NOTICKDEF);
|
||||
break;
|
||||
case SC_MONSTER_TRANSFORM:
|
||||
if( !mobdb_checkid(val1) )
|
||||
@ -10289,7 +10286,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
case SC_STUN:
|
||||
case SC_SLEEP:
|
||||
case SC_STONE:
|
||||
case SC_WHITEIMPRISON:
|
||||
case SC_DEEPSLEEP:
|
||||
case SC_CRYSTALIZE:
|
||||
if (sd && pc_issit(sd)) // Avoid sprite sync problems.
|
||||
pc_setstand(sd, true);
|
||||
case SC_TRICKDEAD:
|
||||
@ -10297,28 +10296,33 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
// Cancel cast when get status [LuzZza]
|
||||
if (battle_config.sc_castcancel&bl->type)
|
||||
unit_skillcastcancel(bl, 0);
|
||||
case SC_WHITEIMPRISON:
|
||||
// Fall through
|
||||
case SC_CURSEDCIRCLE_ATKER:
|
||||
unit_stop_attack(bl);
|
||||
// Fall through
|
||||
case SC_STOP:
|
||||
case SC_CONFUSION:
|
||||
case SC_CLOSECONFINE:
|
||||
case SC_CLOSECONFINE2:
|
||||
case SC_TINDER_BREAKER:
|
||||
case SC_TINDER_BREAKER2:
|
||||
case SC_SPIDERWEB:
|
||||
case SC_ELECTRICSHOCKER:
|
||||
case SC_BITE:
|
||||
case SC_THORNSTRAP:
|
||||
//case SC__CHAOS:
|
||||
case SC_CRYSTALIZE:
|
||||
case SC_CURSEDCIRCLE_ATKER:
|
||||
case SC_FEAR:
|
||||
case SC_NETHERWORLD:
|
||||
case SC_MEIKYOUSISUI:
|
||||
case SC_KYOUGAKU:
|
||||
case SC_PARALYSIS:
|
||||
case SC_MAGNETICFIELD:
|
||||
//case SC__CHAOS:
|
||||
unit_stop_walking(bl,1);
|
||||
break;
|
||||
case SC_CURSEDCIRCLE_TARGET:
|
||||
unit_stop_attack(bl);
|
||||
// Fall through
|
||||
case SC_ANKLE:
|
||||
case SC_SPIDERWEB:
|
||||
case SC_ELECTRICSHOCKER:
|
||||
case SC_MAGNETICFIELD:
|
||||
case SC_NETHERWORLD:
|
||||
if (!unit_blown_immune(bl,0x1))
|
||||
unit_stop_walking(bl,1);
|
||||
break;
|
||||
@ -11684,8 +11688,8 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
|
||||
break;
|
||||
|
||||
case SC_TENSIONRELAX:
|
||||
if(status->max_hp > status->hp && --(sce->val3) > 0) {
|
||||
sc_timer_next(sce->val4+tick, status_change_timer, bl->id, data);
|
||||
if(status->max_hp > status->hp && --(sce->val3) >= 0) {
|
||||
sc_timer_next(10000 + tick, status_change_timer, bl->id, data);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
@ -11979,7 +11983,7 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
|
||||
if( --(sce->val4) >= 0 ) {
|
||||
if( !status_charge(bl,0,3) )
|
||||
break;
|
||||
sc_timer_next(3000+tick,status_change_timer,bl->id,data);
|
||||
sc_timer_next(5000+tick,status_change_timer,bl->id,data);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
@ -12296,6 +12300,11 @@ int status_change_timer(int tid, unsigned int tick, int id, intptr_t data)
|
||||
sc_timer_next(sce->val3 + tick, status_change_timer, bl->id, data);
|
||||
return 0;
|
||||
|
||||
case SC_WATER_SCREEN_OPTION:
|
||||
status_heal(bl,1000,0,2);
|
||||
sc_timer_next(10000 + tick,status_change_timer,bl->id,data);
|
||||
return 0;
|
||||
|
||||
case SC_TEARGAS:
|
||||
if( --(sce->val4) >= 0 ) {
|
||||
struct block_list *src = map_id2bl(sce->val3);
|
||||
@ -12565,8 +12574,9 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
||||
case SC_INTFOOD:
|
||||
case SC_DEXFOOD:
|
||||
case SC_LUKFOOD:
|
||||
case SC_HITFOOD:
|
||||
case SC_FLEEFOOD:
|
||||
case SC_HITFOOD:
|
||||
case SC_CRIFOOD:
|
||||
case SC_BATKFOOD:
|
||||
case SC_WATKFOOD:
|
||||
case SC_MATKFOOD:
|
||||
@ -12704,9 +12714,10 @@ void status_change_clear_buffs (struct block_list* bl, int type)
|
||||
* Infect a user with status effects (SC_DEADLYINFECT)
|
||||
* @param src: Object initiating change on bl [PC|MOB|HOM|MER|ELEM]
|
||||
* @param bl: Object to change
|
||||
* @param type: 0 - Shadow Chaser attacking, 1 - Shadow Chaser being attacked
|
||||
* @return 1: Success 0: Fail
|
||||
*/
|
||||
int status_change_spread( struct block_list *src, struct block_list *bl )
|
||||
int status_change_spread(struct block_list *src, struct block_list *bl, bool type)
|
||||
{
|
||||
int i, flag = 0;
|
||||
struct status_change *sc = status_get_sc(src);
|
||||
@ -12730,11 +12741,14 @@ int status_change_spread( struct block_list *src, struct block_list *bl )
|
||||
switch( i ) {
|
||||
// Debuffs that can be spread.
|
||||
// NOTE: We'll add/delete SCs when we are able to confirm it.
|
||||
case SC_DEATHHURT:
|
||||
case SC_PARALYSE:
|
||||
if (type)
|
||||
continue;
|
||||
case SC_CURSE:
|
||||
case SC_SILENCE:
|
||||
case SC_CONFUSION:
|
||||
case SC_BLIND:
|
||||
//case SC_NOCHAT:
|
||||
case SC_HALLUCINATION:
|
||||
case SC_SIGNUMCRUCIS:
|
||||
case SC_DECREASEAGI:
|
||||
@ -12751,8 +12765,6 @@ int status_change_spread( struct block_list *src, struct block_list *bl )
|
||||
//case SC_BITE:
|
||||
case SC_FREEZING:
|
||||
case SC_VENOMBLEED:
|
||||
case SC_DEATHHURT:
|
||||
case SC_PARALYSE:
|
||||
if( sc->data[i]->timer != INVALID_TIMER ) {
|
||||
timer = get_timer(sc->data[i]->timer);
|
||||
if (timer == NULL || timer->func != status_change_timer || DIFF_TICK(timer->tick,tick) < 0)
|
||||
@ -12766,27 +12778,34 @@ int status_change_spread( struct block_list *src, struct block_list *bl )
|
||||
case SC_DPOISON:
|
||||
data.tick = sc->data[i]->val3 * 1000;
|
||||
break;
|
||||
case SC_FEAR:
|
||||
case SC_LEECHESEND:
|
||||
if (type)
|
||||
continue;
|
||||
case SC_FEAR:
|
||||
data.tick = sc->data[i]->val4 * 1000;
|
||||
break;
|
||||
case SC_BURNING:
|
||||
data.tick = sc->data[i]->val4 * 2000;
|
||||
break;
|
||||
case SC_PYREXIA:
|
||||
if (type)
|
||||
continue;
|
||||
//case SC_OBLIVIONCURSE: // Players are not affected by Oblivion Curse.
|
||||
data.tick = sc->data[i]->val4 * 3000;
|
||||
break;
|
||||
case SC_MAGICMUSHROOM:
|
||||
if (type)
|
||||
continue;
|
||||
data.tick = sc->data[i]->val4 * 4000;
|
||||
break;
|
||||
case SC_TOXIN:
|
||||
if (type)
|
||||
continue;
|
||||
case SC_BLEEDING:
|
||||
data.tick = sc->data[i]->val4 * 10000;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
break;
|
||||
}
|
||||
if( i ) {
|
||||
data.val1 = sc->data[i]->val1;
|
||||
|
@ -716,6 +716,8 @@ typedef enum sc_type {
|
||||
SC_MTF_PUMPKIN,
|
||||
SC_MTF_HITFLEE,
|
||||
|
||||
SC_CRIFOOD,
|
||||
|
||||
#ifdef RENEWAL
|
||||
SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
|
||||
#endif
|
||||
@ -2117,7 +2119,7 @@ void status_calc_regen_rate(struct block_list *bl, struct regen_data *regen, str
|
||||
bool status_check_skilluse(struct block_list *src, struct block_list *target, uint16 skill_id, int flag);
|
||||
int status_check_visibility(struct block_list *src, struct block_list *target);
|
||||
|
||||
int status_change_spread( struct block_list *src, struct block_list *bl );
|
||||
int status_change_spread(struct block_list *src, struct block_list *bl, bool type);
|
||||
|
||||
#ifndef RENEWAL
|
||||
unsigned short status_base_matk_min(const struct status_data* status);
|
||||
|
Loading…
x
Reference in New Issue
Block a user