From b898c9bc29a57b0bbd7c2317385ec26fe992bd10 Mon Sep 17 00:00:00 2001 From: Cydh Ramdh Date: Tue, 4 Aug 2020 22:04:30 +0700 Subject: [PATCH] Added "bonus2 bMagicSubDefEle,e,x;" (#4375) * "+x% magic damage reduction from enemy with defense element e" * Corrected random option script: RDMOPT_MDAMAGE_PROPERTY_element_USER * Fixes #1706: Fire Golem Card (27029) * Corrected Books of Apocalypse (1557) script * Applied bMagicSubDefEle bonus to some items --- db/re/item_combo_db.txt | 20 ++++++++-------- db/re/item_db.txt | 44 ++++++++++++++++++------------------ db/re/item_randomopt_db.txt | 20 ++++++++-------- doc/item_bonus.txt | 3 ++- src/map/battle.cpp | 2 +- src/map/map.hpp | 5 ++-- src/map/pc.cpp | 4 ++++ src/map/pc.hpp | 1 + src/map/script_constants.hpp | 2 +- src/map/status.cpp | 1 + 10 files changed, 55 insertions(+), 47 deletions(-) diff --git a/db/re/item_combo_db.txt b/db/re/item_combo_db.txt index 51ec0b9c68..d1b971e25e 100644 --- a/db/re/item_combo_db.txt +++ b/db/re/item_combo_db.txt @@ -1118,16 +1118,16 @@ 24168:24169:24345:24346:24423:24424,{ if ((getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)) >= 54) { bonus2 bIgnoreDefClassRate,Class_Normal,20; } } 24180:24181:24182:24183:24184:24185,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); bonus bAllStats,1; if(.@r>=45) { bonus bMaxHPrate,(.@r-60); bonus bNoWalkDelay; } } 24180:24181:24182:24183:24184:24321,{ .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); bonus bAllStats,1; if (.@r >= 45) { bonus bMaxHPrate,(.@r-60); bonus bNoWalkDelay; } } -24186:24198,{ bonus2 bSubEle,Ele_Neutral,2; } -24187:24199,{ bonus2 bSubEle,Ele_Dark,2; } -24188:24200,{ bonus2 bSubEle,Ele_Water,2; } -24189:24201,{ bonus2 bSubEle,Ele_Earth,2; } -24190:24202,{ bonus2 bSubEle,Ele_Fire,2; } -24191:24203,{ bonus2 bSubEle,Ele_Wind,2; } -24192:24204,{ bonus2 bSubEle,Ele_Poison,2; } -24193:24205,{ bonus2 bSubEle,Ele_Holy,2; } -24194:24206,{ bonus2 bSubEle,Ele_Ghost,2; } -24195:24207,{ bonus2 bSubEle,Ele_Undead,2; } +24186:24198,{ bonus2 bSubDefEle,Ele_Neutral,2; bonus2 bMagicSubDefEle,Ele_Neutral,2; } +24187:24199,{ bonus2 bSubDefEle,Ele_Dark,2; bonus2 bMagicSubDefEle,Ele_Dark,2; } +24188:24200,{ bonus2 bSubDefEle,Ele_Water,2; bonus2 bMagicSubDefEle,Ele_Water,2; } +24189:24201,{ bonus2 bSubDefEle,Ele_Earth,2; bonus2 bMagicSubDefEle,Ele_Earth,2; } +24190:24202,{ bonus2 bSubDefEle,Ele_Fire,2; bonus2 bMagicSubDefEle,Ele_Fire,2; } +24191:24203,{ bonus2 bSubDefEle,Ele_Wind,2; bonus2 bMagicSubDefEle,Ele_Wind,2; } +24192:24204,{ bonus2 bSubDefEle,Ele_Poison,2; bonus2 bMagicSubDefEle,Ele_Poison,2; } +24193:24205,{ bonus2 bSubDefEle,Ele_Holy,2; bonus2 bMagicSubDefEle,Ele_Holy,2; } +24194:24206,{ bonus2 bSubDefEle,Ele_Ghost,2; bonus2 bMagicSubDefEle,Ele_Ghost,2; } +24195:24207,{ bonus2 bSubDefEle,Ele_Undead,2; bonus2 bMagicSubDefEle,Ele_Undead,2; } 24196:24197,{ bonus bFlee,5; if(getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ARMOR)>=15) bonus bSpeedAddRate,3; } 24197:24320,{ bonus bFlee,5; if ((getequiprefinerycnt(EQI_SHADOW_ARMOR) + getequiprefinerycnt(EQI_SHADOW_SHOES)) >= 15) { bonus bSpeedRate,25; /* unknown value */ } } 24208:24209,{ bonus2 bExpAddRace,RC_All,((getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_SHIELD))>=15?10:1); } diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 4fbbebf519..26d7b7b633 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -914,7 +914,7 @@ 1554,Book_Of_Mother_Earth,Book of Mother Earth,5,35000,,750,90,,1,0,0x00410100,63,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Earth; },{},{} 1555,Book_Of_Blazing_Sun,Book of the Blazing Sun,5,35000,,750,90,,1,0,0x00410100,63,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Fire; },{},{} 1556,Book_Of_Gust_Of_Wind,Book of Gust of Wind,5,35000,,750,90,,1,0,0x00410100,63,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Wind; },{},{} -1557,Book_Of_The_Apocalypse,Book of the Apocalypse,5,60000,,800,120,,1,0,0x00410100,63,2,2,4,40,1,15,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEle,Ele_Holy,5; bonus2 bAddEle,Ele_Water,7; bonus2 bAddEle,Ele_Earth,7; bonus2 bAddEle,Ele_Fire,7; bonus2 bAddEle,Ele_Wind,7; },{},{} +1557,Book_Of_The_Apocalypse,Book of the Apocalypse,5,60000,,800,120,,1,0,0x00410100,63,2,2,4,40,1,15,{ bonus bAtkEle,Ele_Dark; bonus2 bSubDefEle,Ele_Holy,-5; bonus2 bAddEle,Ele_Water,7; bonus2 bAddEle,Ele_Earth,7; bonus2 bAddEle,Ele_Fire,7; bonus2 bAddEle,Ele_Wind,7; },{},{} 1558,Girl's_Diary,Girl's Diary,5,1500,,300,60,,1,1,0x00410100,63,2,2,4,40,1,15,{ bonus2 bAddDamageClass,1188,150; },{},{} 1559,Legacy_Of_Dragon,Legacy of Dragon,5,20,,700,130,,1,0,0x00410100,63,2,2,4,70,1,15,{ bonus bInt,3; bonus bIgnoreDefRace,RC_Dragon; bonus2 bSPGainRace,RC_Dragon,10; },{},{} 1560,Diary_Of_Great_Sage,Sage's Diary,5,20,,1100,100:120,,1,2,0x00410100,63,2,2,3,60,1,15,{ if(readparam(bStr)>=50) bonus bAspdRate,5; if(readparam(bInt)>=70) bonus bMatkRate,5; },{},{} @@ -1379,24 +1379,24 @@ 2155,Academy_Shield,Academy Shield,4,0,,1500,,3,,1,0xFFFFFFFE,63,2,32,,0,1,4,{},{},{} 2156,Bible_Of_Promise1,Bible of Promise(1st Vol.),4,20,,500,,10,,1,0x00000100,63,2,32,,110,1,5,{ bonus bMdef,2; skill "ALL_ODINS_POWER",1; },{},{} 2157,Insecticide,Pesticide,4,20,,100,,0,,0,0xFFFFFFFF,63,2,32,,0,1,3,{},{},{} -2158,Ramor_Shield_Undead,Ramorushirudo,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubEle,Ele_Undead,5; bonus2 bSubRace,RC_DemiHuman,-5; },{},{} -2159,Sharel_Shield,Sharerushirudo,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{},{},{} +2158,Ramor_Shield_Undead,Ramor Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubDefEle,Ele_Undead,5; bonus2 bMagicSubDefEle,Ele_Undead,5; bonus2 bSubRace,RC_DemiHuman,5; },{},{} +2159,Sharel_Shield,Sharel Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubDefEle,Ele_Fire,5; bonus2 bMagicSubDefEle,Ele_Fire,5; bonus2 bSubRace,RC_Demon,5; },{},{} 2160,Giant_Shield,Giant Shield,4,56000,,2800,,130,,1,0x00004082,63,2,32,,100,1,3,{ bonus2 bSubSize,Size_Large,5; if(getrefine()>=9){ bonus2 bSubSize,Size_Large,5; } },{},{} 2161,Geffenia_Book_Water,Geffenia Tomb of Water,4,56000,,1000,,30,,1,0x00000200,63,2,32,,100,1,5,{ bonus bMdef,2; bonus bInt,1; if(readparam(bInt)>=120){ bonus bMatk,10; bonus bMaxHP,800; } },{},{} 2162,Bible_Of_Promise2,Bible of Promise(2nd Vol.),4,20,,500,,20,,1,0x00000100,63,2,32,,140,1,5,{ bonus bMdef,5; skill "ALL_ODINS_POWER",2; bonus bHealPower,5; },{},{} -2163,Flow_Shield,Floor Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{},{},{} -2164,Sombre_Shield,Bull Son Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubDefEle,Ele_Dark,5; bonus2 bSubDefEle,Ele_Fire,5; },{},{} -2165,Sol_Shield,Sol Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{},{},{} +2163,Flow_Shield,Flow Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubDefEle,Ele_Water,5; bonus2 bMagicSubDefEle,Ele_Water,5; bonus2 bSubRace,RC_Brute,-5; },{},{} +2164,Sombre_Shield,Sombre Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubDefEle,Ele_Dark,5; bonus2 bMagicSubDefEle,Ele_Dark,5; bonus2 bSubRace,RC_Undead,-5; },{},{} +2165,Sol_Shield,Sol Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubDefEle,Ele_Earth,5; bonus2 bMagicSubDefEle,Ele_Earth,5; bonus2 bSubRace,RC_Plant,-5; },{},{} 2166,Exorcism_Bible_,Devil's Bible Drive,4,20,,600,,80,,1,0x00008100,63,2,32,,50,1,5,{ bonus bInt,1; },{},{} -2167,Poison_Shield,Poison Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{},{},{} +2167,Poison_Shield,Poison Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubDefEle,Ele_Poison,5; bonus2 bMagicSubDefEle,Ele_Poison,5; bonus2 bSubRace,RC_Plant,-5; },{},{} 2168,Immuned_Shield,Immune Shield,4,20,,700,,55,,1,0xFFFFFFFF,63,2,32,,1,1,4,{ .@r = getrefine(); if (.@r>=5) bonus2 bSubEle,Ele_Neutral,min(.@r,12)-4; if(.@r>6) bonus2 bSubEle,Ele_Neutral,5; if(.@r>8) { bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; bonus2 bSubEle,Ele_Earth,5; } },{},{} 2169,Kalasak,Kalasag,4,20,,400,,40,,0,0xFFFFFFFF,63,2,32,,1,1,1,{ bonus2 bSubClass,Class_Boss,getrefine()/3; },{},{} 2170,Bayani_Kalasak,Bayani Kalasag,4,20,,400,,40,,1,0xFFFFFFFF,63,2,32,,1,1,1,{ bonus2 bSubClass,Class_Boss,getrefine()/3; },{},{} 2171,Fox_Armguard,Fox Wrist Guard,4,40000,,200,,45,,1,0x02000000,63,2,32,,100,1,1,{ bonus bFlee,5; },{},{} 2172,Wolf_Armguard,Wolf Wrist Guard,4,45000,,250,,70,,1,0x02000000,63,2,32,,100,1,1,{ autobonus "{ bonus bBaseAtk,100; bonus bFlee,-50; }",20,5000,BF_WEAPON,"{ specialeffect2 EF_TEIHIT1; }"; },{},{} 2173,Crescent_Armguard,Crescent Wrist Guard,4,45000,,250,,45,,1,0x02000000,63,2,32,,100,1,1,{ bonus bDelayRate,-(getrefine()*2); },{},{} -2174,Lumiere_Shield,Lumiere Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{},{},{} -2175,Esprit_Shield,Spirit Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{},{},{} +2174,Lumiere_Shield,Lumiere Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubDefEle,Ele_Holy,5; bonus2 bMagicSubDefEle,Ele_Holy,5; bonus2 bSubRace,RC_Dragon,-5; },{},{} +2175,Esprit_Shield,Spirit Shield,4,20,,1300,,50,,1,0xFFFFFFFF,63,2,32,,65,1,3,{ bonus2 bSubDefEle,Ele_Ghost,5; bonus2 bMagicSubDefEle,Ele_Ghost,5; bonus2 bSubRace,RC_Angel,-5; },{},{} 2176,Dark_Book,Black Book,4,20,,500,,80,,1,0xFFFFFFFF,63,2,32,,65,1,5,{ bonus bMdef,5; .@r = getrefine(); bonus3 bAutoSpellWhenHit,"NPC_DRAGONFEAR",1,(.@r<=6)?(10):((.@r<=8)?(20):(30)); },{},{} 2177,Shield_Of_Death,Shield Of Death,4,20,,2000,,150,,1,0xFFFFFFFF,63,2,32,,90,1,3,{ bonus2 bAddClass,Class_Boss,2; bonus2 bMagicAddClass,Class_Boss,2; bonus2 bSubClass,Class_Normal,-10; },{},{} 2178,TE_Woe_Buckler,TE Woe Buckler,4,0,,0,,15,,0,0xFFFFFFFF,63,2,32,,40,1,2,{ bonus bMdef,15; bonus bMaxHP,100; bonus bMaxSP,100; bonus2 bSubRace,RC_Player_Human,15; },{},{} @@ -1816,7 +1816,7 @@ 2590,Buwaya_Cloth,Buwaya Sack Cloth,4,20,,200,,8,,0,0xFFFFFFFF,63,2,4,,1,1,0,{ .@r = getrefine(); bonus bHealPower2,.@r/3; bonus bAddItemHealRate,.@r/3; bonus2 bSubEle,Ele_Water,10; bonus2 bSubEle,Ele_Wind,10; bonus2 bSubEle,Ele_Earth,10; bonus2 bSubEle,Ele_Fire,10; },{},{} 2591,Bayani_Buwaya_Cloth,Bayani Buwaya Sack Cloth,4,20,,200,,8,,1,0xFFFFFFFF,63,2,4,,1,1,0,{ .@r = getrefine(); bonus bHealPower2,.@r; bonus bAddItemHealRate,.@r; bonus2 bSubEle,Ele_Water,10; bonus2 bSubEle,Ele_Wind,10; bonus2 bSubEle,Ele_Earth,10; bonus2 bSubEle,Ele_Fire,10; },{},{} 2592,Boss_Brownie_Manteau,Boss Brownie Manteau,4,20,,100,,3,,1,0xFFFFFFFF,63,2,4,,50,1,0,{},{},{} -2593,Flow_Manteau,Flow Manteau,4,20,,700,,20,,1,0xFFFFFFFF,63,2,4,,65,1,0,{},{},{} +2593,Flow_Manteau,Flow Manteau,4,20,,700,,20,,1,0xFFFFFFFF,63,2,4,,65,1,0,{ bonus2 bSubDefEle,Ele_Water,5; bonus2 bMagicSubDefEle,Ele_Water,5; bonus2 bSubRace,RC_Brute,-5; },{},{} 2594,Wrapping_Manteau,Wrapping Manteau,4,20,,100,,0,,1,0xFFFFFFFF,63,2,4,,0,1,0,{},{},{} 2597,Scarlet_Poncho,Scarlet Poncho,4,0,,500,,10,,1,0xFFFFFFFF,63,2,4,,,1,0,{ bonus bCritAtkRate,3; /* Confirm: The location. If the location is changed, also change the combo script! */ },{},{} 2598,Ramor_Manteau,Ramor Manteau,4,20,,700,,20,,1,0xFFFFFFFF,63,2,4,,65,1,0,{ bonus2 bSubRace,RC_Undead,5; bonus2 bSubRace,RC_DemiHuman,-5; /*Gold PC Room: bonus bFlee,20;*/ },{},{} @@ -11160,7 +11160,7 @@ 20592,C_Santa_Backpack,Costume Santa's Pocket,4,0,,0,,,,0,0xFFFFFFFF,63,2,8192,,1,0,70,{},{},{} 20600,Fantastic_Aura,Fantastic Aura,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,0,{ /*TODO: View ID*/ bonus bUnbreakableHelm; },{},{} 20700,Egir_Manteau,Egir Manteau,4,200000,,300,,10,,1,0xFFFFFFFF,63,2,4,,110,1,0,{ bonus bUnbreakableGarment; .@r = getrefine(); if (.@r > 10) .@r = 10; if (BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte) { bonus bFlee2,5+(.@r*2); } else if (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief) { bonus bShortWeaponDamageReturn,5+(.@r*2); } },{},{} -20701,Sol_Manteau,Sol Manteau,4,0,,700,,20,,1,0xFFFFFFFF,63,2,4,,65,1,0,{ bonus2 bSubEle,Ele_Earth,5; bonus2 bSubRace,RC_Fish,-5; },{},{} +20701,Sol_Manteau,Sol Manteau,4,0,,700,,20,,1,0xFFFFFFFF,63,2,4,,65,1,0,{ bonus2 bSubDefEle,Ele_Earth,5; bonus2 bMagicSubDefEle,Ele_Earth,5; bonus2 bSubRace,RC_Fish,-5; },{},{} 20702,TE_Woe_Muffler,TE Woe Muffler,4,0,,0,,5,,0,0xFFFFFFFF,63,2,4,,40,1,,{ bonus bMdef,5; bonus2 bAddRace,RC_Player_Human,5; bonus2 bMagicAddRace,RC_Player_Human,5; bonus2 bResEff,Eff_Freeze,25; },{},{} 20703,TE_Woe_Manteau,TE Woe Manteau,4,0,,0,,10,,0,0x000444A2,63,2,4,,40,1,,{ bonus2 bAddRace,RC_Player_Human,10; bonus2 bResEff,Eff_Freeze,25; },{},{} 20704,TE_Woe_Magic_Manteau,TE Woe Magic Manteau,4,0,,0,,5,,0,0x00818315,63,2,4,,40,1,,{ bonus2 bMagicAddRace,RC_Player_Human,10; bonus2 bResEff,Eff_Freeze,25; },{},{} @@ -11853,16 +11853,16 @@ 24195,S_Divine_Armor,Divine Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ .@r = getrefine(); bonus2 bAddEle,Ele_Undead,1+(.@r/2); bonus2 bMagicAddEle,Ele_Undead,1+(.@r/2); },{},{} 24196,S_Hasty_Shoes,Hasty Shadow Shoes,12,0,,0,,,,0,0xFFFFFFFF,63,2,524288,,1,1,,{ bonus bFlee,5+(getrefine()/2); },{},{} 24197,S_Hasty_Armor,Hasty Shadow Armor,12,0,,0,,,,0,0xFFFFFFFF,63,2,65536,,1,1,,{ bonus bFlee,5+(getrefine()/2); },{},{} -24198,S_Basis_Shield,Basis Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Neutral,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24199,S_Hallowed_Shield,Hallowed Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Dark,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24200,S_Saharic_Shield,Saharic Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Water,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24201,S_Underneath_Shield,Underneath Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Earth,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24202,S_Flam_Shield,Flame Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Fire,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24203,S_Windy_Shield,Windy Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Wind,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24204,S_Envenom_Shield,Envenom Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Poison,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24205,S_Damned_Shield,Damned Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Holy,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24206,S_Geist_Shield,Exorcism Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Ghost,(.@r<7)?1:((.@r<9)?2:3); },{},{} -24207,S_Divine_Shield,Divine Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); bonus2 bSubEle,Ele_Undead,(.@r<7)?1:((.@r<9)?2:3); },{},{} +24198,S_Basis_Shield,Basis Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Neutral,.@i; bonus2 bMagicSubDefEle,Ele_Neutral,.@i; },{},{} +24199,S_Hallowed_Shield,Hallowed Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Dark,.@i; bonus2 bMagicSubDefEle,Ele_Dark,.@i; },{},{} +24200,S_Saharic_Shield,Saharic Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Water,.@i; bonus2 bMagicSubDefEle,Ele_Water,.@i; },{},{} +24201,S_Underneath_Shield,Underneath Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Earth,.@i; bonus2 bMagicSubDefEle,Ele_Earth,.@i; },{},{} +24202,S_Flam_Shield,Flame Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Fire,.@i; bonus2 bMagicSubDefEle,Ele_Fire,.@i; },{},{} +24203,S_Windy_Shield,Windy Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Wind,.@i; bonus2 bMagicSubDefEle,Ele_Wind,.@i; },{},{} +24204,S_Envenom_Shield,Envenom Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Poison,.@i; bonus2 bMagicSubDefEle,Ele_Poison,.@i; },{},{} +24205,S_Damned_Shield,Damned Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Holy,.@i; bonus2 bMagicSubDefEle,Ele_Holy,.@i; },{},{} +24206,S_Geist_Shield,Exorcism Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Ghost,.@i; bonus2 bMagicSubDefEle,Ele_Ghost,.@i; },{},{} +24207,S_Divine_Shield,Divine Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,1,1,,{ .@r = getrefine(); .@i = (.@r<7)?1:((.@r<9)?2:3); bonus2 bSubDefEle,Ele_Undead,.@i; bonus2 bMagicSubDefEle,Ele_Undead,.@i; },{},{} 24208,S_Expert_Shoes,Expert Shadow Shoes,12,20,,100,,,,0,0xFFFFFFFF,63,2,524288,,150:175,1,,{ bonus2 bExpAddRace,RC_All,1; },{},{} 24209,S_Expert_Shield,Expert Shadow Shield,12,0,,0,,,,0,0xFFFFFFFF,63,2,262144,,150:175,1,,{ bonus2 bExpAddRace,RC_All,(getrefine()/4); },{},{} 24210,S_Beginner_Shoes,Beginner Shadow Shoes,12,20,,0,,,,0,0xFFFFFFFF,63,2,524288,,1:49,1,,{ bonus2 bExpAddRace,RC_All,getrefine(); },{},{} @@ -12342,7 +12342,7 @@ 27026,Fire_Condor_Card,Fire Condor Card,6,20,,10,,,,,0xFFFFFFFF,63,2,136,,,,,{ bonus2 bVariableCastRate,"MG_FIREBALL",-50; bonus2 bSkillAtk,"MG_FIREBALL",100; },{},{} 27027,Fire_Sandman_Card,Fire Sandman Card,6,20,,10,,,,,0xFFFFFFFF,63,2,16,,,,,{ bonus bDef,50; bonus2 bSubDefEle,Ele_Fire,10; },{},{} 27028,Fire_Frilldora_Card,Fire Frilldora Card,6,20,,10,,,,,0xFFFFFFFF,63,2,2,,,,,{ .@r = getrefine(); bonus2 bMagicAddEle,Ele_Earth,3+((.@r>=7)*5)+((.@r>=9)*7); },{},{} -27029,Fire_Golem_Card,Fire Golem Card,6,20,,10,,,,,0xFFFFFFFF,63,2,32,,,,,{ bonus2 bSubEle,Ele_Fire,20; bonus2 bAddEle,Ele_Fire,5; },{},{} +27029,Fire_Golem_Card,Fire Golem Card,6,20,,10,,,,,0xFFFFFFFF,63,2,32,,,,,{ bonus2 bSubDefEle,Ele_Fire,20; bonus2 bAddEle,Ele_Fire,5; },{},{} 27030,Fulbuk_Card,Firebug Card,6,20,,10,,,,,0xFFFFFFFF,63,2,769,,,,,{ bonus3 bAddEff,Eff_Burning,700,ATF_WEAPON|ATF_MAGIC; },{},{} 27081,Angry_Moonlight_Flower_Card,Angry Moonlight Flower Card,6,20,,10,,,,,,,,16,,,,,{ skill "PA_PRESSURE",4; },{},{} 27082,Angry_Nine_Tail_Card,Angry Nine Tail Card,6,20,,10,,,,,,,,16,,,,,{ .@val = 5; bonus bCritAtkRate,10; if (getrefine() >= 10) { .@val += 10; } bonus bCritical,.@val; },{},{} diff --git a/db/re/item_randomopt_db.txt b/db/re/item_randomopt_db.txt index 554bfc9e9f..fdfc32f186 100644 --- a/db/re/item_randomopt_db.txt +++ b/db/re/item_randomopt_db.txt @@ -57,25 +57,25 @@ RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_USER,{ bonus2 bSubDefEle,Ele_Ghost,getrandomo RDMOPT_DAMAGE_PROPERTY_TELEKINESIS_TARGET,{ bonus2 bAddEle,Ele_Ghost,getrandomoptinfo(ROA_VALUE); } RDMOPT_DAMAGE_PROPERTY_UNDEAD_USER,{ bonus2 bSubDefEle,Ele_Undead,getrandomoptinfo(ROA_VALUE); } RDMOPT_DAMAGE_PROPERTY_UNDEAD_TARGET,{ bonus2 bAddEle,Ele_Undead,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_NOTHING_USER,{ bonus3 bSubEle,Ele_Neutral,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_NOTHING_USER,{ bonus2 bMagicSubDefEle,Ele_Neutral,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_NOTHING_TARGET,{ bonus2 bMagicAddEle,Ele_Neutral,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_WATER_USER,{ bonus3 bSubEle,Ele_Water,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_WATER_USER,{ bonus2 bMagicSubDefEle,Ele_Water,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_WATER_TARGET,{ bonus2 bMagicAddEle,Ele_Water,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_GROUND_USER,{ bonus3 bSubEle,Ele_Earth,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_GROUND_USER,{ bonus2 bMagicSubDefEle,Ele_Earth,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_GROUND_TARGET,{ bonus2 bMagicAddEle,Ele_Earth,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_FIRE_USER,{ bonus3 bSubEle,Ele_Fire,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_FIRE_USER,{ bonus2 bMagicSubDefEle,Ele_Fire,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_FIRE_TARGET,{ bonus2 bMagicAddEle,Ele_Fire,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_WIND_USER,{ bonus3 bSubEle,Ele_Wind,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_WIND_USER,{ bonus2 bMagicSubDefEle,Ele_Wind,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_WIND_TARGET,{ bonus2 bMagicAddEle,Ele_Wind,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_POISON_USER,{ bonus3 bSubEle,Ele_Poison,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_POISON_USER,{ bonus2 bMagicSubDefEle,Ele_Poison,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_POISON_TARGET,{ bonus2 bMagicAddEle,Ele_Poison,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_SAINT_USER,{ bonus3 bSubEle,Ele_Holy,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_SAINT_USER,{ bonus2 bMagicSubDefEle,Ele_Holy,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_SAINT_TARGET,{ bonus2 bMagicAddEle,Ele_Holy,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_DARKNESS_USER,{ bonus3 bSubEle,Ele_Dark,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_DARKNESS_USER,{ bonus2 bMagicSubDefEle,Ele_Dark,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_DARKNESS_TARGET,{ bonus2 bMagicAddEle,Ele_Dark,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_TELEKINESIS_USER,{ bonus3 bSubEle,Ele_Ghost,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_TELEKINESIS_USER,{ bonus2 bMagicSubDefEle,Ele_Ghost,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_TELEKINESIS_TARGET,{ bonus2 bMagicAddEle,Ele_Ghost,getrandomoptinfo(ROA_VALUE); } -RDMOPT_MDAMAGE_PROPERTY_UNDEAD_USER,{ bonus3 bSubEle,Ele_Undead,getrandomoptinfo(ROA_VALUE),BF_MAGIC; } +RDMOPT_MDAMAGE_PROPERTY_UNDEAD_USER,{ bonus2 bMagicSubDefEle,Ele_Undead,getrandomoptinfo(ROA_VALUE); } RDMOPT_MDAMAGE_PROPERTY_UNDEAD_TARGET,{ bonus2 bMagicAddEle,Ele_Undead,getrandomoptinfo(ROA_VALUE); } RDMOPT_BODY_ATTR_NOTHING,{ bonus bDefEle,Ele_Neutral; } RDMOPT_BODY_ATTR_WATER,{ bonus bDefEle,Ele_Water; } diff --git a/doc/item_bonus.txt b/doc/item_bonus.txt index 89c5a809a8..f4b504a7ff 100644 --- a/doc/item_bonus.txt +++ b/doc/item_bonus.txt @@ -228,7 +228,8 @@ bonus3 bAddEle,e,x,bf; +x% physical damage against element e with trigger c bonus2 bMagicAddEle,e,x; +x% magical damage against element e bonus2 bSubEle,e,x; +x% damage reduction against attack element e bonus3 bSubEle,e,x,bf; +x% damage reduction against attack element e with trigger criteria bf -bonus2 bSubDefEle,e,x; +x% damage reduction from enemy with defense element e +bonus2 bSubDefEle,e,x; +x% physical damage reduction from enemy with defense element e +bonus2 bMagicSubDefEle,e,x; +x% magic damage reduction from enemy with defense element e bonus2 bAddRace,r,x; +x% physical damage against race r bonus2 bMagicAddRace,r,x; +x% magical damage against race r diff --git a/src/map/battle.cpp b/src/map/battle.cpp index b8a5874686..abef0c36e3 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -694,7 +694,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li ele_fix += it.rate; } if (s_defele != ELE_NONE) - ele_fix += tsd->subdefele[s_defele] + tsd->subdefele[ELE_ALL]; + ele_fix += tsd->magic_subdefele[s_defele] + tsd->magic_subdefele[ELE_ALL]; cardfix = cardfix * (100 - ele_fix) / 100; } cardfix = cardfix * (100 - tsd->subsize[sstatus->size] - tsd->subsize[SZ_ALL]) / 100; diff --git a/src/map/map.hpp b/src/map/map.hpp index 1d39a46b70..ccb1f8394c 100644 --- a/src/map/map.hpp +++ b/src/map/map.hpp @@ -504,8 +504,9 @@ enum _sp { SP_HP_VANISH_RACE_RATE, SP_SP_VANISH_RACE_RATE, SP_ABSORB_DMG_MAXHP, SP_SUB_SKILL, SP_SUBDEF_ELE, // 2074-2078 SP_STATE_NORECOVER_RACE, SP_CRITICAL_RANGEATK, SP_MAGIC_ADDRACE2, SP_IGNORE_MDEF_RACE2_RATE, // 2079-2082 SP_WEAPON_ATK_RATE, SP_WEAPON_MATK_RATE, SP_DROP_ADDRACE, SP_DROP_ADDCLASS, SP_NO_MADO_FUEL, // 2083-2087 - SP_IGNORE_DEF_CLASS_RATE, SP_REGEN_PERCENT_HP, SP_REGEN_PERCENT_SP, SP_SKILL_DELAY, SP_NO_WALK_DELAY, //2088-2093 - SP_LONG_SP_GAIN_VALUE, SP_LONG_HP_GAIN_VALUE, SP_SHORT_ATK_RATE, SP_MAGIC_SUBSIZE, SP_CRIT_DEF_RATE // 2094-2098 + SP_IGNORE_DEF_CLASS_RATE, SP_REGEN_PERCENT_HP, SP_REGEN_PERCENT_SP, SP_SKILL_DELAY, SP_NO_WALK_DELAY, //2088-2092 + SP_LONG_SP_GAIN_VALUE, SP_LONG_HP_GAIN_VALUE, SP_SHORT_ATK_RATE, SP_MAGIC_SUBSIZE, SP_CRIT_DEF_RATE, // 2093-2097 + SP_MAGIC_SUBDEF_ELE // 2098 }; enum _look { diff --git a/src/map/pc.cpp b/src/map/pc.cpp index e0318ee642..b7e4515eee 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -4239,6 +4239,10 @@ void pc_bonus2(struct map_session_data *sd,int type,int type2,int val) if (sd->state.lr_flag != 2) sd->dropaddclass[type2] += val; break; + case SP_MAGIC_SUBDEF_ELE: // bonus2 bMagicSubDefEle,e,x; + PC_BONUS_CHK_ELEMENT(type2, SP_MAGIC_SUBDEF_ELE); + sd->magic_subdefele[type2] += val; + break; default: if (current_equip_combo_pos > 0) { ShowWarning("pc_bonus2: unknown bonus type %d %d %d in a combo with item #%d\n", type, type2, val, sd->inventory_data[pc_checkequip( sd, current_equip_combo_pos )]->nameid); diff --git a/src/map/pc.hpp b/src/map/pc.hpp index 68e1bafacc..e85ee7bb8f 100644 --- a/src/map/pc.hpp +++ b/src/map/pc.hpp @@ -460,6 +460,7 @@ struct map_session_data { int ignore_mdef_by_race2[RC2_MAX]; int dropaddrace[RC_MAX]; int dropaddclass[CLASS_MAX]; + int magic_subdefele[ELE_MAX]; // zeroed arrays end here. std::vector autospell, autospell2, autospell3; diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 7637b1a08e..1393404a32 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -755,7 +755,7 @@ export_constant2("bLongHPGainValue",SP_LONG_HP_GAIN_VALUE); export_constant2("bMagicSubSize",SP_MAGIC_SUBSIZE); export_constant2("bCritDefRate",SP_CRIT_DEF_RATE); - + export_constant2("bMagicSubDefEle", SP_MAGIC_SUBDEF_ELE); /* equip indices */ export_constant(EQI_COMPOUND_ON); diff --git a/src/map/status.cpp b/src/map/status.cpp index eb18684b89..9359cd08f2 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -3845,6 +3845,7 @@ int status_calc_pc_sub(struct map_session_data* sd, enum e_status_calc_opt opt) + sizeof(sd->ignore_mdef_by_race2) + sizeof(sd->dropaddrace) + sizeof(sd->dropaddclass) + + sizeof(sd->magic_subdefele) ); memset (&sd->right_weapon.overrefine, 0, sizeof(sd->right_weapon) - sizeof(sd->right_weapon.atkmods));