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:
aleos89 2015-05-22 10:08:16 -04:00
parent 05e18fac67
commit ba1a1aec48
10 changed files with 186 additions and 161 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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