* Added AEGIS 'CLASS_' enum
- Removed RC_BOSS, RC_NONBOSS, RC_NONDEMIHUMAN. - Added CLASS_NORMAL, CLASS_BOSS, CLASS_GUARDIAN enum. - Added CLASS_ALL, RC_ALL, ELE_ALL, SZ_ALL. - Item bonuses 'bAddDefClass' and 'bAddMdefClass' replaced by 'bAddDefMonster' and 'bAddMdefMonster'. - Item bonuses 'bIgnoreMdefRate' and 'bIgnoreDefRate' replaced by 'bIgnoreMdefRaceRate' and 'bIgnoreDefRaceRate'. - Added new item bonuses: bIgnoreDefClass, bIgnoreMdefRaceRate, bDefRatioAtkClass, bAddClass, bSubClass, bMagicAddClass, bWeaponComaClass, bHpDrainValueClass, bSpDrainValueClass, bIgnoreMdefClassRate. - Updated doc/item_bonus.txt - Updated db/re/level_penalty.txt & 'pc_level_penalty_mod' function. - Updated 'battle_calc_cardfix' function. - 'md->class_' replaced by 'md->mob_id'
This commit is contained in:
parent
12007fef7e
commit
dae81222a8
30
db/const.txt
30
db/const.txt
@ -521,8 +521,8 @@ bGetZenyNum 1041
|
||||
bAddGetZenyNum 1042
|
||||
bAddDamageClass 1043
|
||||
bAddMagicDamageClass 1044
|
||||
bAddDefClass 1045
|
||||
bAddMdefClass 1046
|
||||
bAddDefMonster 1045
|
||||
bAddMdefMonster 1046
|
||||
bAddMonsterDropItem 1047
|
||||
bDefRatioAtkEle 1048
|
||||
bDefRatioAtkRace 1049
|
||||
@ -561,8 +561,8 @@ bWeaponAtkRate 1082
|
||||
bDelayrate 1083
|
||||
bHPDrainRateRace 1084
|
||||
bSPDrainRateRace 1085
|
||||
bIgnoreMdefRate 1086
|
||||
bIgnoreDefRate 1087
|
||||
bIgnoreMdefRaceRate 1086
|
||||
bIgnoreDefRaceRate 1087
|
||||
bSkillHeal2 1088
|
||||
bAddEffOnSkill 1089
|
||||
bHealPower 1090
|
||||
@ -634,6 +634,17 @@ bSetDefRace 2059
|
||||
bSetMDefRace 2060
|
||||
bHPVanishRate 2061
|
||||
|
||||
bIgnoreDefClass 2062
|
||||
bIgnoreMdefRaceRate 2063
|
||||
bDefRatioAtkClass 2064
|
||||
bAddClass 2065
|
||||
bSubClass 2066
|
||||
bMagicAddClass 2067
|
||||
bWeaponComaClass 2068
|
||||
bHpDrainValueClass 2069
|
||||
bSpDrainValueClass 2070
|
||||
bIgnoreMdefClassRate 2071
|
||||
|
||||
EQI_HEAD_TOP 1
|
||||
EQI_ARMOR 2
|
||||
EQI_HAND_L 3
|
||||
@ -694,6 +705,7 @@ Ele_Holy 6
|
||||
Ele_Dark 7
|
||||
Ele_Ghost 8
|
||||
Ele_Undead 9
|
||||
Ele_All 10
|
||||
|
||||
RC_Formless 0
|
||||
RC_Undead 1
|
||||
@ -705,9 +717,12 @@ RC_Demon 6
|
||||
RC_DemiHuman 7
|
||||
RC_Angel 8
|
||||
RC_Dragon 9
|
||||
RC_Boss 10
|
||||
RC_NonBoss 11
|
||||
RC_NonDemiHuman 12
|
||||
RC_All 10
|
||||
|
||||
Class_Normal 0
|
||||
Class_Boss 1
|
||||
Class_Guardian 2
|
||||
Class_All 3
|
||||
|
||||
RC2_None 0
|
||||
RC2_Goblin 1
|
||||
@ -720,6 +735,7 @@ RC2_Ninja 6
|
||||
Size_Small 0
|
||||
Size_Medium 1
|
||||
Size_Large 2
|
||||
Size_All 3
|
||||
|
||||
BF_WEAPON 0x0001
|
||||
BF_MAGIC 0x0002
|
||||
|
@ -5,9 +5,9 @@
|
||||
|
||||
1166:2527,{ bonus2 bAddRace,RC_Dragon,5; }
|
||||
1420:2115,{ bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",2,5; }
|
||||
1420:2133,{ bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bDef,2; }
|
||||
1421:2133,{ bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bDef,2; }
|
||||
1422:2133,{ bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bDef,2; }
|
||||
1420:2133,{ bonus2 bAddClass,Class_All,4; bonus bDef,2; }
|
||||
1421:2133,{ bonus2 bAddClass,Class_All,4; bonus bDef,2; }
|
||||
1422:2133,{ bonus2 bAddClass,Class_All,4; bonus bDef,2; }
|
||||
1428:2115,{ bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",2,5; }
|
||||
1472:2677,{ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getequiprefinerycnt(EQI_HEAD_TOP); }
|
||||
1472:2711,{ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getequiprefinerycnt(EQI_HAND_R); }
|
||||
@ -69,20 +69,20 @@
|
||||
//2369:2428:2533:5306,{ bonus2 bSubRace,RC_DemiHuman,10; bonus bMaxHPrate,20; bonus2 bResEff,Eff_Freeze,10000; skill "WZ_FIREPILLAR",10; }
|
||||
2371:2522,{ bonus bAgi,5; bonus bFlee,10; }
|
||||
2371:2523,{ bonus bAgi,5; bonus bFlee,10; }
|
||||
2374:2729,{ bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; }
|
||||
2375:2729,{ bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; }
|
||||
2376:2435:2538,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bVit,3; bonus bMaxHPRate,12; bonus bHealpower2,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus2 bHPRegenRate,600,1000; }",5,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }
|
||||
2377:2435:2538,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bStr,3; bonus bMaxHPRate,12; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AL_HEAL",10; bonus bUnbreakableArmor,0; }
|
||||
2378:2435:2538,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bAgi,3; bonus bMaxHPRate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }
|
||||
2379:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
|
||||
2380:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bCastrate,"AL_HOLYLIGHT",-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
|
||||
2381:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
|
||||
2382:2437:2540,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
|
||||
2374:2729,{ bonus2 bAddClass,Class_All,3; bonus bMatkRate,3; }
|
||||
2375:2729,{ bonus2 bAddClass,Class_All,3; bonus bMatkRate,3; }
|
||||
2376:2435:2538,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bVit,3; bonus bMaxHPRate,12; bonus bHealpower2,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus2 bHPRegenRate,600,1000; }",5,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }
|
||||
2377:2435:2538,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bStr,3; bonus bMaxHPRate,12; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AL_HEAL",10; bonus bUnbreakableArmor,0; }
|
||||
2378:2435:2538,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bAgi,3; bonus bMaxHPRate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }
|
||||
2379:2436:2539,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
|
||||
2380:2436:2539,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bCastrate,"AL_HOLYLIGHT",-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
|
||||
2381:2436:2539,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
|
||||
2382:2437:2540,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
|
||||
2387:2440:2744,{ bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus bCastrate,-3; bonus bDelayrate,-15; }
|
||||
2390:2749,{ bonus bFlee2,5; }
|
||||
2394:2444:2549,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSkillHeal2,"AM_POTIONPITCHER",3; bonus2 bSkillHeal2,"AL_HEAL",3; bonus2 bSkillHeal2,"PR_SANCTUARY",3; }
|
||||
2394:2444:2549,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSkillHeal2,"AM_POTIONPITCHER",3; bonus2 bSkillHeal2,"AL_HEAL",3; bonus2 bSkillHeal2,"PR_SANCTUARY",3; }
|
||||
2399:2553,{ bonus bAgi,5; bonus bFlee,15; }
|
||||
2408:2655,{ bonus bBaseAtk,50; bonus2 bAddDefClass,1196,20; bonus2 bAddDefClass,1197,20; }
|
||||
2408:2655,{ bonus bBaseAtk,50; bonus2 bAddDefMonster,1196,20; bonus2 bAddDefMonster,1197,20; }
|
||||
2424:2528,{ bonus bHPrecovRate,5; bonus bMaxHPrate,10; }
|
||||
2425:2529,{ bonus bFlee,10; }
|
||||
2425:2530,{ bonus bFlee,10; }
|
||||
@ -108,14 +108,14 @@
|
||||
2626:2786,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
|
||||
2678:2679,{ bonus4 bAutoSpell,"MO_EXTREMITYFIST",1,3,1; bonus3 bAutoSpell,"PR_LEXAETERNA",1,20; bonus3 bAutoSpell,"AS_SONICBLOW",5,50; bonus3 bAutoSpell,"MO_INVESTIGATE",5,20; bonus3 bAutoSpell,"ASC_METEORASSAULT",2,50; }
|
||||
//2679:2792,{ bonus4 bAutoSpell,"MO_EXTREMITYFIST",1,3,1; bonus3 bAutoSpell,"PR_LEXAETERNA",1,20; bonus3 bAutoSpell,"AS_SONICBLOW",5,50; bonus3 bAutoSpell,"MO_INVESTIGATE",5,20; bonus3 bAutoSpell,"ASC_METEORASSAULT",2,50; }
|
||||
2720:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2721:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2722:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2723:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2724:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2725:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2720:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2721:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2722:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2723:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2724:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2725:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2726:2727,{ bonus bUseSPrate,-25; }
|
||||
2733:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2733:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2777:2778:5479,{ bonus bMaxHP,300; bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,5; }
|
||||
2779:2780:5482,{ bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; }
|
||||
2779:2780:5577,{ bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; }
|
||||
|
@ -482,7 +482,7 @@
|
||||
1129,Flamberge,Flamberge,5,60000,,1500,150,,1,0,0x00004080,7,2,2,3,27,1,2,{},{},{}
|
||||
1130,Nagan,Nagan,5,20,,500,120,,1,0,0x000654E2,7,2,2,4,40,1,2,{ skill "TF_DOUBLE",5; bonus bDoubleRate,25; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
|
||||
1131,Ice_Falchon,Ice Falchion,5,20,,600,100,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Water; bonus2 bAddEff,Eff_Freeze,500; bonus2 bAddEff2,Eff_Freeze,10; skill "MG_COLDBOLT",3; bonus3 bAutoSpell,"MG_COLDBOLT",3,100; },{},{}
|
||||
1132,Edge,Edge,5,20,,700,115,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus2 bAddEff,Eff_Curse,30; bonus2 bWeaponComaRace,RC_NonBoss,10; },{},{}
|
||||
1132,Edge,Edge,5,20,,700,115,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus2 bAddEff,Eff_Curse,30; bonus2 bWeaponComaClass,Class_Normal,10; },{},{}
|
||||
1133,Fire_Brand,Fireblend,5,20,,500,100,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Fire; skill "MG_FIREBOLT",3; bonus3 bAutoSpell,"MG_FIREBOLT",3,100; },{},{}
|
||||
1134,Scissores_Sword,Caesar's Sword,5,20,,700,140,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus2 bAddRace,RC_Plant,25; bonus bIgnoreDefRace,RC_Plant; },{},{}
|
||||
1135,Cutlas,Cutlus,5,20,,900,150,,1,0,0x000654E2,7,2,2,4,40,1,2,{ skill "SM_BASH",5; bonus bStr,2; bonus bDef,1; },{},{}
|
||||
@ -490,7 +490,7 @@
|
||||
1137,Excalibur,Excalibur,5,20,,1200,150,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus bInt,5; bonus bLuk,10; bonus bDex,-1; bonus bAtkEle,Ele_Holy; },{},{}
|
||||
1138,Mysteltainn_,Mysteltainn,5,20,,1000,170,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEle,Ele_Ghost,15; bonus3 bAutoSpell,"MG_STONECURSE",3,100; bonus2 bAddEff,Eff_Stone,10; bonus bDex,3; },{},{}
|
||||
1139,Tale_Fing_,Tirfing,5,20,,1000,200,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Dark; bonus2 bHPLossRate,35,10000; },{},{}
|
||||
1140,Byeorrun_Gum,Byeollungum,5,20,,900,150,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus2 bSubRace,RC_NonBoss,-10; bonus2 bAddRace,RC_Boss,50; bonus bAllStats,2; },{},{}
|
||||
1140,Byeorrun_Gum,Byeollungum,5,20,,900,150,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus2 bSubClass,Class_Normal,-10; bonus2 bAddClass,Class_Boss,50; bonus bAllStats,2; },{},{}
|
||||
1141,Immaterial_Sword,Immaterial Sword,5,20,,900,140,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Ghost; bonus2 bSPVanishRate,30,30; bonus bSPDrainValue,-1; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1142,Jewel_Sword,Jeweled Sword,5,20,,2200,104,,1,0,0x000654E2,7,2,2,3,68,1,2,{ bonus2 bAddMonsterDropItemGroup,IG_Jewel,100; },{},{}
|
||||
1143,Gaia_Sword,Gaia Sword,5,20,,2500,140,,1,0,0x000654E2,7,2,2,3,74,1,2,{ bonus2 bAddMonsterDropItemGroup,IG_Ore,30; },{},{}
|
||||
@ -527,7 +527,7 @@
|
||||
1174,Executioner_C,Executioner,5,2,,0,190,,1,0,0x00004082,7,2,34,4,0,0,3,{ bonus bIgnoreDefRace,RC_DemiHuman; bonus2 bAddRace,RC_DemiHuman,20; bonus2 bSubRace,RC_DemiHuman,-10; bonus bAtkEle,Ele_Dark; },{},{}
|
||||
1175,Altas_Weapon,Atlas Weapon,5,20,,3500,200,,1,1,0x00004082,2,2,34,4,55,1,3,{ bonus bCritical,10; if(readparam(bStr)>=80) bonus bBreakArmorRate,500; },{},{}
|
||||
1176,Muscle_Cutter,Muscle Cutter,5,20,,2200,160,,1,2,0x00004082,2,2,34,4,55,1,3,{ bonus2 bAddEff,Eff_Bleeding,800; bonus3 bAutoSpell,"AL_DECAGI",1,30; },{},{}
|
||||
1177,Muramash,Muramash,5,20,,0,120,,1,0,0x00004082,7,2,34,1,0,0,3,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
1177,Muramash,Muramash,5,20,,0,120,,1,0,0x00004082,7,2,34,1,0,0,3,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
1178,Schweizersabel_,Schweizersabel,5,20,,1600,160,,1,2,0x00004082,7,2,34,4,48,1,3,{ bonus bAtkEle,Ele_Wind; bonus bDef,1; bonus3 bAutoSpell,"MG_LIGHTNINGBOLT",3,100; },{},{}
|
||||
1179,Executioner__,Executioner,5,20,,2200,155,,1,1,0x00004082,7,2,34,4,48,1,3,{ bonus bIgnoreDefRace,RC_DemiHuman; bonus2 bAddRace,RC_DemiHuman,20; bonus2 bSubRace,RC_DemiHuman,-10; bonus bAtkEle,Ele_Dark; },{},{}
|
||||
1180,Dragon_Slayer_,Dragon Slayer,5,20,,1300,150,,1,2,0x00004082,7,2,34,4,48,1,3,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddRace,RC_Dragon,15; },{},{}
|
||||
@ -535,12 +535,12 @@
|
||||
1182,Bloody_Eater,Bloody Eater,5,20,,1200,200,,1,2,0x00004082,2,2,34,4,50,1,3,{ bonus bAtkEle,Ele_Ghost; autobonus "{ bonus bCritical,100; bonus bBaseAtk,50; }",1,5000,0,"{ specialeffect2 EF_FIRESPLASHHIT; }"; bonus bHPGainValue,100; },{},{}
|
||||
1183,BF_Two_Handed_Sword1,Brave Assaulter's Katzbalger,5,20,,0,200,,1,0,0x00004082,7,2,34,3,80,1,3,{ bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1184,BF_Two_Handed_Sword2,Valorous Assaulter's Katzbalger,5,20,,0,200,,1,0,0x00004082,7,2,34,3,80,1,3,{ bonus bCritical,20; bonus2 bAddRace,RC_DemiHuman,55; bonus bCritAtkRate,20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1185,Violet_Fear,Violet Fear,5,20,,2200,275,,1,2,0x00004082,2,2,34,4,80,1,3,{ bonus3 bAutoSpell,"WZ_METEOR",3,30; bonus3 bAutoSpell,"WZ_FROSTNOVA",5,50; autobonus "{ bonus bIgnoreDefRace,RC_NonBoss; }",50,5000; },{},{}
|
||||
1185,Violet_Fear,Violet Fear,5,20,,2200,275,,1,2,0x00004082,2,2,34,4,80,1,3,{ bonus3 bAutoSpell,"WZ_METEOR",3,30; bonus3 bAutoSpell,"WZ_FROSTNOVA",5,50; autobonus "{ bonus bIgnoreDefClass,Class_Normal; }",50,5000; },{},{}
|
||||
1186,Death_Guidance,Death Guidance,5,20,,2000,200,,1,2,0x00004082,2,2,34,4,70,1,3,{ bonus bStr,5; bonus bAgi,2; bonus bFlee2,20; bonus3 bAutoSpell,"NPC_HELLPOWER",1,10; bonus4 bAutoSpell,"NPC_HELLPOWER",1,10,0; if( getrefine()>8 ) bonus3 bAutoSpell,"NPC_VAMPIRE_GIFT",2,20; else bonus3 bAutoSpell,"NPC_VAMPIRE_GIFT",1,20; },{},{}
|
||||
1187,Krieger_Twohand_Sword1,Glorious Claymore,5,20,,0,220,,1,0,0x00004082,7,2,34,4,80,1,3,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { bonus3 bAutoSpell,"LK_CONCENTRATION",getskilllv("LK_CONCENTRATION")>1?getskilllv("LK_CONCENTRATION"):1,30; bonus3 bAutoSpell,"LK_AURABLADE",getskilllv("LK_AURABLADE")>1?getskilllv("LK_AURABLADE"):1,30; } },{},{}
|
||||
1188,Veteran_Sword,Veteran Sword,5,10000,,2000,180,,1,1,0x00004082,7,2,34,4,80,1,3,{ if(getskilllv("SM_BASH")==10) { bonus2 bSkillAtk,"SM_BASH",50; } if(getskilllv("KN_BOWLINGBASH")==10) { bonus2 bSkillAtk,"KN_BOWLINGBASH",50; } bonus bStr,1; bonus bDex,1; },{},{}
|
||||
1189,Krasnaya,Krasnaya,5,20,,3800,200,,2,3,0x00004082,2,2,34,2,50,1,3,{ if(readparam(bStr)>=95) { bonus bBaseAtk,20; } },{},{}
|
||||
1190,Claymore_C,Claymore,5,0,,0,220,,1,0,0x00004080,7,2,34,3,1,0,3,{ bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
1190,Claymore_C,Claymore,5,0,,0,220,,1,0,0x00004080,7,2,34,3,1,0,3,{ bonus2 bAddSize,Size_All,40; },{},{}
|
||||
// Daggers
|
||||
1201,Knife,Knife,5,50,,400,17,,1,3,0xFE9F7EEF,7,2,2,1,1,1,1,{},{},{}
|
||||
1202,Knife_,Knife,5,50,,400,17,,1,4,0xFE9F7EEF,7,2,2,1,1,1,1,{},{},{}
|
||||
@ -571,7 +571,7 @@
|
||||
1227,Weeder_Knife,Weeder Knife,5,20,,400,80,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bIgnoreDefRace,RC_Plant; bonus2 bAddRace,RC_Plant,15; bonus2 bSubRace,RC_Plant,15; },{},{}
|
||||
1228,Combat_Knife,Combat Knife,5,20,,400,80,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bIgnoreDefRace,RC_DemiHuman; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bSubRace,RC_Demon,-10; },{},{}
|
||||
1229,Mama's_Knife,Kitchen Knife,5,20,,500,75,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bCritical,30; bonus3 bAddMonsterDropItem,517,RC_Brute,5000; },{},{}
|
||||
1230,House_Auger,Ice Pick,5,20,,600,80,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bDefRatioAtkRace,RC_Boss; bonus bDefRatioAtkRace,RC_NonBoss; },{},{}
|
||||
1230,House_Auger,Ice Pick,5,20,,600,80,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bDefRatioAtkClass,Class_All; },{},{}
|
||||
1231,Bazerald,Bazerald,5,20,,500,70,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bAtkEle,Ele_Fire; bonus bInt,5; bonus bMatkRate,10; },{},{}
|
||||
1232,Assasin_Dagger,Assassin Dagger,5,20,,600,140,,1,0,0x00001000,7,2,2,4,36,1,1,{ bonus bMaxHPrate,20; bonus bMaxSPrate,15; bonus bAspdRate,2; bonus bAtkEle,Ele_Dark; },{},{}
|
||||
1233,Exercise,Exorciser,5,20,,700,90,,1,0,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bIgnoreDefRace,RC_Demon; bonus2 bSubRace,RC_Demon,5; bonus2 bSubRace,RC_DemiHuman,-10; },{},{}
|
||||
@ -614,7 +614,7 @@
|
||||
1269,Inverse_Scale,Inverse Scale,5,20,,1500,140,,1,0,0x00001000,2,2,34,4,55,1,16,{ bonus bAtkEle,Ele_Holy; bonus3 bAutoSpell,"NPC_DRAGONFEAR",1,30; },{},{}
|
||||
1270,Drill_Katar,Drill Katar,5,20,,1400,110,,1,1,0x00001000,2,2,34,4,55,1,16,{ bonus bHit,30; bonus3 bAutoSpell,"ST_FULLSTRIP",1,150; },{},{}
|
||||
1271,Blood_Tears,Blood Tears,5,20,,1700,120,,1,2,0x00001000,2,2,34,4,55,1,16,{ if(getrefine()>=9){ bonus3 bAutoSpell,"NPC_WIDEBLEEDING",2,30; } else bonus3 bAutoSpell,"NPC_WIDEBLEEDING",1,30; },{},{}
|
||||
1272,Scratcher,Scratcher,5,20,,0,120,,1,0,0x00001000,7,2,34,1,0,0,16,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
1272,Scratcher,Scratcher,5,20,,0,120,,1,0,0x00001000,7,2,34,1,0,0,16,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
1273,Bloody_Roar_C,Refined Bloody Roar,5,1,,0,148,,1,0,0x00001000,7,2,34,4,0,0,16,{ bonus bIgnoreDefRace,RC_DemiHuman; bonus bFlee,-160; bonus bFlee2,-160; },{},{}
|
||||
1274,Unholy_Touch_C,Refined Unholy Touch,5,1,,0,179,,1,0,0x00001000,7,2,34,4,0,0,16,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEff,Eff_Curse,5000; bonus bCritical,-1; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1275,Katar_Of_Cold_Icicle_,Katar of Frozen Icicle,5,45000,,1200,105,,1,3,0x00001000,7,2,34,3,55,1,16,{ bonus bAtkEle,Ele_Water; bonus2 bAddEff,Eff_Freeze,500; },{},{}
|
||||
@ -628,7 +628,7 @@
|
||||
1283,Katar_Of_Speed,Katar Of Speed,5,20,,0,175,,1,0,0x00001000,7,2,34,4,0,0,16,{ bonus2 bSkillAtk,"AS_SONICBLOW",25; bonus bAspdRate,3; },{},{}
|
||||
1284,Krishna,Krishna,5,20,,1200,120,,1,2,0x00001000,2,2,34,3,50,1,16,{ bonus2 bSkillAtk,"AS_GRIMTOOTH",10; if(getskilllv("AS_SONICBLOW")) { bonus3 bAutoSpell,"AS_SONICBLOW",getskilllv("AS_SONICBLOW"),5; }else{ bonus3 bAutoSpell,"AS_SONICBLOW",1,5; } },{},{}
|
||||
1285,Cakram,Chakram,5,20,,1000,130,,1,2,0x00001000,2,2,34,3,50,1,16,{ if(getskilllv("AS_KATAR")==10) { bonus bHit,10; } bonus2 bSkillAtk,"ASC_METEORASSAULT",20; },{},{}
|
||||
1286,Jamadhar_C,Jamadhar,5,0,,0,200,,1,0,0x00001000,7,2,34,3,1,0,16,{ bonus bUnbreakableWeapon,0; bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
1286,Jamadhar_C,Jamadhar,5,0,,0,200,,1,0,0x00001000,7,2,34,3,1,0,16,{ bonus bUnbreakableWeapon,0; bonus2 bAddSize,Size_All,40; },{},{}
|
||||
// 1-Handed Axes
|
||||
1301,Axe,Axe,5,500,,800,38,,1,3,0x000654E3,7,2,2,1,3,1,6,{},{},{}
|
||||
1302,Axe_,Axe,5,500,,800,38,,1,4,0x000654E3,7,2,2,1,3,1,6,{},{},{}
|
||||
@ -641,7 +641,7 @@
|
||||
1309,Orcish_Axe_,Orcish Axe,5,20,,1500,75,,1,4,0x000654E3,7,2,2,3,3,1,6,{},{},{}
|
||||
1310,Krieger_Onehand_Axe1,Glorious Cleaver,5,20,,0,130,,1,0,0x000444A2,7,2,2,4,80,1,6,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus bAspdRate,5; bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,50; bonus4 bAutoSpellOnSkill,"MC_MAMMONITE","NPC_CRITICALWOUND",2,200; } },{},{}
|
||||
1311,Vecer_Axe,Vecer Axe,5,20,,1500,140,,1,2,0x000444A2,2,2,2,3,50,1,6,{ if(readparam(bLuk)>=90) { bonus bBaseAtk,20; } if(readparam(bDex)>=90) { bonus bCritical,5; } if(readparam(bDex)>=90||readparam(bLuk)>=90) { bonus2 bSkillAtk,"MC_MAMMONITE",15; } },{},{}
|
||||
1312,Orcish_Axe_C,Orcish Axe,5,0,,0,110,,1,0,0x000654E3,7,2,2,3,1,0,6,{ bonus2 bAddSize,Size_Small,70; bonus2 bAddSize,Size_Medium,70; bonus2 bAddSize,Size_Large,70; },{},{}
|
||||
1312,Orcish_Axe_C,Orcish Axe,5,0,,0,110,,1,0,0x000654E3,7,2,2,3,1,0,6,{ bonus2 bAddSize,Size_All,70; },{},{}
|
||||
1313,Tourist_Axe,Tourist Axe,5,0,,500,77,,1,0,0x000654E3,7,2,2,1,1,0,6,{ bonus bStr,2; },{},{}
|
||||
1314,F_Tomahawk_C,Tomahawk,5,2,,0,200,,1,0,0x000444A2,7,2,34,4,0,0,7,{ bonus bAtkEle,Ele_Wind; },{},{}
|
||||
1315,F_Right_Epsilon_C,Light Epsilon,5,1,,0,229,,1,0,0x000444A2,7,2,34,4,1,0,7,{ bonus bAtkEle,Ele_Holy; bonus bStr,10; },{},{}
|
||||
@ -683,7 +683,7 @@
|
||||
1385,Bradium_Stonehammer,Bradium Stone Hammer,5,20,,2700,210,,1,0,0x000444A2,2,2,34,4,75,1,7,{ bonus3 bAddEffOnSkill,"BS_HAMMERFALL",Eff_Stun,500+(200*getrefine()); },{},{}
|
||||
1386,Doom_Slayer_I,Doom Slayer,5,0,,0,20,,1,0,0x000444A2,7,2,34,4,0,0,7,{ if(readparam(bStr)>=95){ bonus bBaseAtk,400; bonus2 bAddEff,Eff_Stun,3000; bonus bAspdRate,-25; bonus bUseSPrate,100; bonus bBreakArmorRate,500; } },{},{}
|
||||
1387,Giant_Axe,Giant Axe,5,20,,4000,330,,1,1,0x000444A2,2,2,34,3,50,1,7,{ bonus2 bSkillAtk,"WS_CARTTERMINATION",15; if(readparam(bStr)>=95) { bonus bHit,10; bonus bAspdRate,3; } },{},{}
|
||||
1388,Two_Handed_Axe_C,Two-Handed Axe,5,0,,0,220,,1,0,0x000444A2,7,2,34,3,1,0,7,{ bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
1388,Two_Handed_Axe_C,Two-Handed Axe,5,0,,0,220,,1,0,0x000444A2,7,2,34,3,1,0,7,{ bonus2 bAddSize,Size_All,40; },{},{}
|
||||
1389,E_Tomahawk_C,Tomahawk,5,2,,0,200,,1,0,0x000444A2,7,2,34,4,0,0,7,{ bonus bAtkEle,Ele_Wind; },{},{}
|
||||
1390,E_Right_Epsilon_C,Light Epsilon,5,1,,0,229,,1,0,0x000444A2,7,2,34,4,1,0,7,{ bonus bAtkEle,Ele_Holy; bonus bStr,10; },{},{}
|
||||
// 1-Handed Spears
|
||||
@ -701,7 +701,7 @@
|
||||
1412,Lance__,Lance,5,60000,,2500,185,,3,0,0x00004082,7,2,34,3,33,1,5,{},{},{}
|
||||
1413,Gungnir,Gungnir,5,20,,500,120,,3,0,0x00004082,7,2,2,4,4,1,4,{ bonus bAtkEle,Ele_Wind; bonus bPerfectHitRate,25; bonus bHit,30; },{},{}
|
||||
1414,Gelerdria,Gelerdria,5,20,,700,145,,3,0,0x00004082,7,2,2,4,48,1,4,{ bonus bAtkEle,Ele_Earth; bonus bMaxHP,800; bonus bMaxSP,-50; },{},{}
|
||||
1415,Skewer,Brocca,5,20,,850,100,,3,0,0x00004082,7,2,2,4,48,1,4,{ bonus bIgnoreDefRace,RC_NonBoss; bonus2 bAddEle,Ele_Neutral,25; },{},{}
|
||||
1415,Skewer,Brocca,5,20,,850,100,,3,0,0x00004082,7,2,2,4,48,1,4,{ bonus bIgnoreDefClass,Class_Normal; bonus2 bAddEle,Ele_Neutral,25; },{},{}
|
||||
1416,Tjungkuletti,Tjungkuletti,5,20,,1000,95,,3,0,0x00004082,7,2,2,4,48,1,4,{ bonus bSPDrainValue,1; bonus bSPGainValue,5; },{},{}
|
||||
1417,Pole_Axe,Pole Axe,5,20,,3800,160,,3,1,0x00004082,7,2,2,3,71,1,4,{ bonus bStr,1; bonus bInt,2; bonus bDex,1; },{},{}
|
||||
1418,Gungnir_,Gungnir,5,20,,500,120,,3,2,0x00004082,7,2,2,4,4,1,4,{ bonus bAtkEle,Ele_Wind; bonus bPerfectHitRate,25; bonus bHit,30; },{},{}
|
||||
@ -709,14 +709,14 @@
|
||||
1420,Long_Horn,Long Horn,5,20,,1000,150,,3,1,0x00004082,2,2,2,4,65,1,4,{ bonus bAtkEle,Ele_Holy; bonus2 bAddEff,Eff_Bleeding,500; skill "TF_DETOXIFY",1; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1421,Battle_Hook,Battle Hook,5,20,,900,140,,3,1,0x00004082,2,2,2,4,65,1,4,{ bonus2 bAddEff,Eff_Stun,500; bonus2 bAddRace,RC_DemiHuman,20; skill "KN_PIERCE",3; },{},{}
|
||||
1422,Hunting_Spear,Hunting Spear,5,20,,4200,180,,3,1,0x00004082,2,2,2,4,60,1,4,{ bonus bIgnoreDefRace,RC_Brute; bonus3 bAddMonsterDropItem,517,RC_Brute,1000; bonus3 bAutoSpell,"LK_JOINTBEAT",3,100; },{},{}
|
||||
1423,Pole_XO,Pole XO,5,20,,0,120,,3,0,0x00004082,7,2,2,1,0,0,4,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
1424,Skewer_C,Refined Brocca,5,1,,0,149,,3,0,0x00004082,7,2,2,4,0,0,4,{ bonus bIgnoreDefRace,RC_NonBoss; bonus2 bAddSize,Size_Medium,20; },{},{}
|
||||
1423,Pole_XO,Pole XO,5,20,,0,120,,3,0,0x00004082,7,2,2,1,0,0,4,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
1424,Skewer_C,Refined Brocca,5,1,,0,149,,3,0,0x00004082,7,2,2,4,0,0,4,{ bonus bIgnoreDefClass,Class_Normal; bonus2 bAddSize,Size_Medium,20; },{},{}
|
||||
1425,BF_Spear1,Assaulter Spear,5,20,,0,60,,3,0,0x00004082,7,2,2,3,80,1,4,{ bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(BaseJob==Job_Crusader) bonus bAspdRate,20; },{},{}
|
||||
1426,Krieger_Onehand_Spear1,Glorious Spear,5,20,,0,130,,3,0,0x00004082,7,2,2,4,80,1,4,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus bAspdRate,10; } if(getrefine()>8) { if(BaseJob==Job_Knight) bonus4 bAutoSpellOnSkill,"KN_PIERCE","NPC_CRITICALWOUND",2,200; else if(BaseJob==Job_Crusader) bonus3 bAutoSpell,"PA_PRESSURE",5,100; } },{},{}
|
||||
1427,Spear_Of_Excellent,Spear Of Excellent,5,20,,0,160,,3,0,0x00004082,7,2,2,3,0,0,4,{ bonus2 bSkillAtk,"SM_MAGNUM",25; bonus bStr,2; },{},{}
|
||||
1428,Long_Horn_M,Long Horn,5,20,,1000,150,,3,1,0x00004082,2,2,2,4,65,1,4,{ bonus bAtkEle,Ele_Holy; bonus2 bAddEff,Eff_Bleeding,500; skill "TF_DETOXIFY",1; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1429,Hunting_Spear_M,Hunting Spear,5,20,,4200,180,,3,1,0x00004082,2,2,2,4,60,1,4,{ bonus bIgnoreDefRace,RC_Brute; bonus3 bAddMonsterDropItem,517,RC_Brute,1000; bonus3 bAutoSpell,"LK_JOINTBEAT",3,500; },{},{}
|
||||
1430,Pike_C,Pike,5,0,,0,74,,3,0,0x00004082,7,2,2,1,1,0,4,{ bonus2 bAddSize,Size_Small,70; bonus2 bAddSize,Size_Medium,70; bonus2 bAddSize,Size_Large,70; },{},{}
|
||||
1430,Pike_C,Pike,5,0,,0,74,,3,0,0x00004082,7,2,2,1,1,0,4,{ bonus2 bAddSize,Size_All,70; },{},{}
|
||||
1431,F_Pole_Axe_C,Pole Axe,5,1,,4800,195,,3,0,0x00004082,7,2,2,3,1,0,4,{ bonus bStr,1; bonus bInt,2; bonus bDex,1; },{},{}
|
||||
1432,E_Pole_Axe_C,Pole Axe,5,1,,4800,195,,3,0,0x00004082,7,2,2,3,1,0,4,{ bonus bStr,1; bonus bInt,2; bonus bDex,1; },{},{}
|
||||
// 2-Handed Spears
|
||||
@ -739,27 +739,27 @@
|
||||
1467,Bill_Guisarme,Bill Guisarme,5,20,,1000,183,,3,0,0x00004082,7,2,34,4,48,1,5,{ bonus2 bAddRace,RC_Brute,10; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
|
||||
1468,Zephyrus,Zephyrus,5,20,,2000,170,,3,0,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Wind; bonus2 bAddEff,Eff_Silence,200; bonus3 bAutoSpell,"MG_THUNDERSTORM",3,100; },{},{}
|
||||
1469,Longinus's_Spear,Longinus's Spear,5,20,,2500,180,,3,0,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Dark; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Angel,10; },{},{}
|
||||
1470,Brionac,Brionac,5,20,,3000,190,,3,0,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Holy; skill "AL_HEAL",5; bonus3 bAutoSpell,"MG_SOULSTRIKE",3,100; bonus2 bAddRace,RC_Boss,5; },{},{}
|
||||
1470,Brionac,Brionac,5,20,,3000,190,,3,0,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Holy; skill "AL_HEAL",5; bonus3 bAutoSpell,"MG_SOULSTRIKE",3,100; bonus2 bAddClass,Class_Boss,5; },{},{}
|
||||
1471,Hell_Fire,Hellfire,5,20,,3500,200,,3,0,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Fire; bonus3 bAutoSpell,"MG_FIREBALL",3,100; bonus bStr,3; },{},{}
|
||||
// 2-Handed Staffs
|
||||
1472,Staff_Of_Soul,Soul Staff,5,20,,1400,25,,1,0,0x00810204,7,2,34,3,73,1,10,{ bonus bInt,5; bonus bAgi,2; bonus bMatkRate,15; },{},{}
|
||||
1473,Wizardy_Staff,Wizardry Staff,5,20,,2400,120,,1,0,0x00810204,7,2,34,4,90,1,10,{ bonus bInt,6; bonus bDex,2; bonus bMatkRate,15; },{},{}
|
||||
// 2-Handed Spears
|
||||
1474,Gae_Bolg,Gae Bolg,5,20,,2000,160,,3,0,0x00004082,7,2,34,4,60,1,5,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddRace,RC_Boss,10; },{},{}
|
||||
1474,Gae_Bolg,Gae Bolg,5,20,,2000,160,,3,0,0x00004082,7,2,34,4,60,1,5,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddClass,Class_Boss,10; },{},{}
|
||||
1475,Horseback_Lance,Equestrian's Spear,5,20,,3700,200,,4,0,0x00004082,7,2,34,4,75,1,5,{},{},{}
|
||||
1476,Crescent_Scythe_,Crescent Scythe,5,20,,2500,180,,3,1,0x00004082,7,2,34,4,48,1,5,{ bonus bCritical,30; bonus bHit,10; },{},{}
|
||||
1477,Spectral_Spear,Spectral Spear,5,20,,2000,170,,3,0,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus2 bAddEff2,Eff_Confusion,1000; bonus bHPGainValue,50; },{},{}
|
||||
1478,Ahlspiess,Ahlspiess,5,20,,1000,120,,3,0,0x00004080,7,2,34,4,65,1,5,{ bonus bIgnoreDefRace,RC_NonBoss; bonus bIgnoreDefRace,RC_Boss; bonus2 bAddRace,RC_DemiHuman,10; bonus3 bAutoSpell,"KN_PIERCE",5,30; },{},{}
|
||||
1478,Ahlspiess,Ahlspiess,5,20,,1000,120,,3,0,0x00004080,7,2,34,4,65,1,5,{ bonus bIgnoreDefClass,Class_Normal; bonus bIgnoreDefClass,Class_Boss; bonus2 bAddRace,RC_DemiHuman,10; bonus3 bAutoSpell,"KN_PIERCE",5,30; },{},{}
|
||||
1479,Spectral_Spear_,Spectral Spear,5,20,,2000,170,,3,1,0x00004082,7,2,34,4,75,1,5,{ bonus2 bAddEle,Ele_Dark,20; bonus2 bAddRace,RC_Demon,20; bonus2 bAddRace,RC_Undead,20; bonus2 bSubEle,Ele_Dark,10; bonus2 bSubRace,RC_Demon,10; bonus2 bSubRace,RC_Undead,10; bonus2 bAddEff2,Eff_Confusion,1000; bonus bHPGainValue,50; },{},{}
|
||||
1480,Gae_Bolg_,Gae Bolg,5,20,,2000,160,,3,2,0x00004082,7,2,34,4,60,1,5,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddRace,RC_Boss,10; },{},{}
|
||||
1480,Gae_Bolg_,Gae Bolg,5,20,,2000,160,,3,2,0x00004082,7,2,34,4,60,1,5,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddClass,Class_Boss,10; },{},{}
|
||||
1481,Zephyrus_,Zephyrus,5,20,,2000,170,,3,3,0x00004082,7,2,34,4,48,1,5,{ bonus bAtkEle,Ele_Wind; bonus2 bAddEff,Eff_Silence,200; bonus3 bAutoSpell,"MG_THUNDERSTORM",3,100; },{},{}
|
||||
1482,BF_Lance1,Assaulter Lance,5,,,0,160,,3,0,0x00004082,7,2,34,3,80,1,5,{ bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,25; bonus bIgnoreDefRace,RC_DemiHuman; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1483,Ivory_Lance,Ivory Lance,5,20,,1000,160,,3,1,0x00004082,2,2,34,3,50,1,5,{ bonus bAgi,2; bonus bAspdRate,3; bonus2 bAddEff,Eff_Bleeding,300; bonus3 bAutoSpell,"LK_JOINTBEAT",1,100; skill "KN_SPEARSTAB",5; },{},{}
|
||||
1484,Cardo,Cardo,5,20,,5600,150,,3,1,0x00000080,2,2,34,4,70,1,5,{ bonus bAspdRate,-10; bonus bDef,getrefine()/2; },{},{}
|
||||
1485,Battle_Fork,Battle Fork,5,20,,700,112,,3,4,0x00004082,2,2,34,2,50,1,5,{},{},{}
|
||||
1486,Krieger_Twohand_Spear1,Glorious Lance,5,20,,0,220,,3,0,0x00004082,7,2,34,4,80,1,5,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { if(BaseJob==Job_Knight) bonus4 bAutoSpellOnSkill,"KN_PIERCE","NPC_CRITICALWOUND",2,200; else if(BaseJob==Job_Crusader) bonus3 bAutoSpell,"PA_PRESSURE",5,200; } },{},{}
|
||||
1487,Lance_C,Lance,5,0,,0,220,,3,0,0x00004082,7,2,34,3,1,0,5,{ bonus2 bAddSize,Size_Small,50; bonus2 bAddSize,Size_Medium,50; bonus2 bAddSize,Size_Large,50; },{},{}
|
||||
1488,Ahlspiess_C,Ahlspiess,5,20,,0,135,,3,0,0x00004080,7,2,34,4,1,1,5,{ bonus bIgnoreDefRace,RC_NonBoss; bonus bIgnoreDefRace,RC_Boss; bonus2 bAddRace,RC_DemiHuman,10; bonus3 bAutoSpell,"KN_PIERCE",5,30; },{},{}
|
||||
1487,Lance_C,Lance,5,0,,0,220,,3,0,0x00004082,7,2,34,3,1,0,5,{ bonus2 bAddSize,Size_All,50; },{},{}
|
||||
1488,Ahlspiess_C,Ahlspiess,5,20,,0,135,,3,0,0x00004080,7,2,34,4,1,1,5,{ bonus bIgnoreDefClass,Class_Normal; bonus bIgnoreDefClass,Class_Boss; bonus2 bAddRace,RC_DemiHuman,10; bonus3 bAutoSpell,"KN_PIERCE",5,30; },{},{}
|
||||
// Maces
|
||||
1501,Club,Club,5,120,,700,23,,1,3,0x0004C5B3,7,2,2,1,2,1,8,{},{},{}
|
||||
1502,Club_,Club,5,120,,700,23,,1,4,0x0004C5B3,7,2,2,1,2,1,8,{},{},{}
|
||||
@ -796,7 +796,7 @@
|
||||
1533,Warrior_Balmung,Warrior's Balmung,5,20,,1000,170,,1,0,0xFFFFFFFF,7,2,2,4,48,1,8,{ bonus bAllStats,5; },{},{}
|
||||
1534,Spanner_C,Wrench,5,2,,0,150,,1,0,0x00008110,7,2,2,3,0,0,8,{ bonus2 bAddEff,Eff_Blind,100; bonus2 bAddEff,Eff_Stun,100; bonus2 bAddEff,Eff_Poison,100; bonus2 bAddEff,Eff_Freeze,100; },{},{}
|
||||
1535,Hollgrehenn_Hammer,Hollgrehenn's Hammer,5,4444,,44,4,,1,1,0x0004C5B2,7,2,2,4,44,1,8,{ bonus bBreakArmorRate,100; bonus bBreakWeaponRate,100; if(readparam(bStr)>=44) { bonus bBaseAtk,44; } },{},{}
|
||||
1536,Good_Morning_Star,Good Morning Star,5,20,,0,120,,1,0,0x0004C5B2,7,2,2,1,0,0,8,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
1536,Good_Morning_Star,Good Morning Star,5,20,,0,120,,1,0,0x0004C5B2,7,2,2,1,0,0,8,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
1537,Quadrille_C,Refined Quadrille,5,1,,0,193,,1,0,0x00008110,7,2,2,4,0,0,8,{ bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Demon,40; bonus2 bAddRace,RC_Undead,40; },{},{}
|
||||
1538,Spike_,Spike,5,20,,700,85,,1,2,0x00008110,7,2,2,4,40,1,8,{ bonus bCritical,40; bonus bDefRate,-67; bonus bDef2Rate,-67; },{},{}
|
||||
1539,Golden_Mace_,Golden Mace,5,20,,800,110,,1,2,0x00008110,7,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus bUnbreakableWeapon,0; },{},{}
|
||||
@ -826,7 +826,7 @@
|
||||
1563,Diary_Of_Great_Sage_C,Sage's Diary,5,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{ bonus bMatkRate,20; bonus bAspdRate,5; },{},{}
|
||||
1564,Encyclopedia,Encyclopedia,5,20,,2000,110,,1,2,0x00410100,7,2,2,3,70,1,15,{ bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); },{},{}
|
||||
1565,Death_Note,Ledger of Death,5,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
|
||||
1566,Diary_Of_Great_Basil,Diary Of Great Basil,5,20,,0,120,,1,0,0x00410100,7,2,2,1,0,0,15,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
1566,Diary_Of_Great_Basil,Diary Of Great Basil,5,20,,0,120,,1,0,0x00410100,7,2,2,1,0,0,15,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
1567,Hardback_C,Refined Hardcover Book,5,1,,0,168,,1,0,0x00410100,7,2,2,4,0,0,15,{ bonus bStr,5; bonus bDex,2; bonus bMatkRate,20; },{},{}
|
||||
1568,Book_Of_Billows_,Book of Billows,5,35000,,750,90,,1,3,0x00410100,7,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Water; },{},{}
|
||||
1569,Book_Of_Mother_Earth_,Book of Mother Earth,5,35000,,750,90,,1,3,0x00410100,7,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Earth; },{},{}
|
||||
@ -835,16 +835,16 @@
|
||||
1572,Principles_Of_Magic,Principles of Magic,5,20,,300,60,,1,2,0x00410100,7,2,2,3,60,1,15,{ bonus bMatkRate,20; bonus bInt,3; bonus bSPrecovRate,5; },{},{}
|
||||
1573,Ancient_Magic,Ancient Magic,5,20,,700,30,,1,2,0x00410100,7,2,2,3,70,1,15,{ bonus bMatkRate,15; },{},{}
|
||||
1574,BF_Book1,Brave Battle Strategy Book,5,20,,0,90,,1,0,0x00410100,7,2,2,3,80,1,15,{ bonus bStr,2; bonus bInt,1; bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1575,BF_Book2,Valorous Battle Strategy Book,5,20,,0,90,,1,0,0x00410100,7,2,2,3,80,1,15,{ bonus bStr,2; bonus bInt,1; bonus bMatkRate,15; bonus2 bIgnoreMDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1575,BF_Book2,Valorous Battle Strategy Book,5,20,,0,90,,1,0,0x00410100,7,2,2,3,80,1,15,{ bonus bStr,2; bonus bInt,1; bonus bMatkRate,15; bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1576,Krieger_Book1,Glorious Tablet,5,20,,0,90,,1,0,0x00410100,7,2,2,4,80,1,15,{ bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; },{},{}
|
||||
1577,Krieger_Book2,Glorious Apocalypse,5,20,,0,90,,1,0,0x00410100,7,2,2,4,80,1,15,{ bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus2 bIgnoreDefRate,RC_DemiHuman,5; if(getrefine()>8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; } },{},{}
|
||||
1578,Book_Of_Prayer,Book Of Prayer,5,20,,0,140,,1,0,0x00410100,7,2,2,3,0,0,15,{ bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10; },{},{}
|
||||
1579,Death_Note_M,Book of the Dead,5,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
|
||||
1580,Encyclopedia_C,Giant Encyclopedia,5,0,,0,145,,1,0,0x00410100,7,2,2,3,0,0,15,{ bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
1580,Encyclopedia_C,Giant Encyclopedia,5,0,,0,145,,1,0,0x00410100,7,2,2,3,0,0,15,{ bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,Size_All,40; },{},{}
|
||||
1581,F_Diary_Of_Great_Sage_C,Diary Of Great Sage,5,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{},{},{}
|
||||
1582,E_Diary_Of_Great_Sage_C,Diary Of Great Sage,5,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{},{},{}
|
||||
// GM Weapon
|
||||
1599,Angra_Manyu,Angra Manyu,5,1,,10,200,,2,0,0xFFFFFFFF,7,2,2,1,1,1,8,{ bonus bAllStats,50; bonus bBaseAtk,3800; bonus bMatkRate,200; bonus2 bHPDrainRate,1000,100; bonus2 bSPDrainRate,1000,20; bonus bHealPower,200; bonus2 bAddRace,RC_NonBoss,100; bonus2 bAddRace,RC_Boss,100; skill "WZ_STORMGUST",10; Skill "WZ_METEOR",10; Skill "WZ_VERMILION",10; skill "GM_SANDMAN",1; },{},{}
|
||||
1599,Angra_Manyu,Angra Manyu,5,1,,10,200,,2,0,0xFFFFFFFF,7,2,2,1,1,1,8,{ bonus bAllStats,50; bonus bBaseAtk,3800; bonus bMatkRate,200; bonus2 bHPDrainRate,1000,100; bonus2 bSPDrainRate,1000,20; bonus bHealPower,200; bonus2 bAddClass,Class_All,100; skill "WZ_STORMGUST",10; Skill "WZ_METEOR",10; Skill "WZ_VERMILION",10; skill "GM_SANDMAN",1; },{},{}
|
||||
// Staffs
|
||||
1601,Rod,Rod,5,50,,400,15,,1,3,0x00818315,7,2,2,1,1,1,10,{ bonus bMatkRate,15; },{},{}
|
||||
1602,Rod_,Rod,5,50,,400,15,,1,4,0x00818315,7,2,2,1,1,1,10,{ bonus bMatkRate,15; },{},{}
|
||||
@ -871,25 +871,25 @@
|
||||
1623,Mighty_Staff_C,Mighty Staff,5,1,,0,165,,1,0,0x00818314,7,2,2,3,1,0,10,{ bonus bStr,10; bonus bInt,4; bonus bMatkRate,20; bonus bSPDrainValue,-1; },{},{}
|
||||
1624,Lich_Bone_Wand,Lich's Bone Wand,5,20,,800,60,,1,2,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,1; bonus bDex,1; bonus bAtkEle,Ele_Undead; bonus bMatkRate,20; bonus3 bAutoSpellWhenHit,"NPC_WIDECURSE",5,10+getrefine(); if(getrefine()>=9){ bonus bMatkRate,3; bonus bMaxSP,300; } },{},{}
|
||||
1625,Healing_Staff,Healing Staff,5,20,,400,10,,1,0,0x00008110,7,2,2,3,55,1,10,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bHealPower,(getrefine()*3/2); },{},{}
|
||||
1626,Piercing_Staff,Piercing Staff,5,20,,500,80,,1,0,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,4; bonus bMatkRate,15; bonus bIgnoreMdefRate,10+getrefine(); },{},{}
|
||||
1627,Staffy,Staffy,5,20,,0,40,,1,0,0x00818314,7,2,2,1,0,0,10,{ bonus bMatkRate,15; bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
1626,Piercing_Staff,Piercing Staff,5,20,,500,80,,1,0,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,4; bonus bMatkRate,15; bonus2 bIgnoreMdefClassRate,Class_Normal,10+getrefine(); bonus2 bIgnoreMdefClassRate,Class_Boss,10+getrefine(); },{},{}
|
||||
1627,Staffy,Staffy,5,20,,0,40,,1,0,0x00818314,7,2,2,1,0,0,10,{ bonus bMatkRate,15; bonus2 bAddClass,Class_All,50; },{},{}
|
||||
1628,Survival_Rod_C,Refined Survivor's Rod,5,1,,0,71,,1,0,0x00818314,7,2,2,3,0,0,10,{ bonus bDex,4; bonus bMatkRate,20; bonus bMaxHP,500; },{},{}
|
||||
1629,Walking_Stick,Gentleman's Staff,5,20,,500,40,,1,1,0x00818314,7,2,2,4,50,1,10,{ bonus bMatkRate,15; bonus bDex,1; },{},{}
|
||||
1630,Release_Of_Wish,Release of Wish,5,20,,500,30,,1,0,0x00810204,7,2,2,3,50,1,10,{ bonus bMatkRate,15; bonus bInt,3; bonus bHealPower,5; autobonus "{ bonus2 bSPRegenRate,100,2000; bonus2 bHPRegenRate,50,2000; }",10,10000,BF_MAGIC,"{ specialeffect2 EF_HEAL; }"; },{},{}
|
||||
1631,Holy_Stick,Holy Stick,5,20,,500,50,,1,1,0x00008100,7,2,2,4,70,1,10,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus2 bCastrate,"AL_HOLYLIGHT",-25; bonus2 bCastrate,"PR_TURNUNDEAD",-25; bonus2 bCastrate,"PR_MAGNUS",-25; },{},{}
|
||||
1632,BF_Staff1,Warlock's Magic Wand,5,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bInt,4; bonus bDex,3; bonus bMatkRate,15; bonus2 bIgnoreMdefRate,RC_DemiHuman,25; bonus3 bAddEff,Eff_Stun,500,ATF_SKILL; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1632,BF_Staff1,Warlock's Magic Wand,5,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bInt,4; bonus bDex,3; bonus bMatkRate,15; bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,25; bonus3 bAddEff,Eff_Stun,500,ATF_SKILL; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1633,BF_Staff2,Warlock's Battle Wand,5,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bInt,3; bonus bDex,3; bonus bMatkRate,15; bonus2 bMagicAddRace,RC_DemiHuman,15; bonus3 bAddEff,Eff_Stun,500,ATF_SKILL; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1634,BF_Staff3,Strong Recovery Wand,5,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bMatkRate,15; bonus bHealPower,14; bonus2 bSPRegenRate,5,10000; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1635,BF_Staff4,Speedy Recovery Wand,5,20,,0,70,,1,0,0x00818314,7,2,2,3,80,1,10,{ bonus bInt,3; bonus bDex,2; bonus bMatkRate,15; bonus bDelayRate,-15; bonus2 bSPRegenRate,5,10000; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1636,Thorn_Staff,Thorn Staff of Darkness,5,20,,700,60,,1,0,0x00018314,2,2,2,4,75,1,10,{ bonus bInt,3; bonus bDex,3; bonus bMatkRate,20; bonus bIgnoreMdefRate,getrefine(); bonus bDelayRate,-(getrefine()*3/2); },{},{}
|
||||
1636,Thorn_Staff,Thorn Staff of Darkness,5,20,,700,60,,1,0,0x00018314,2,2,2,4,75,1,10,{ bonus bInt,3; bonus bDex,3; bonus bMatkRate,20; bonus2 bIgnoreMdefClassRate,Class_Normal,getrefine(); bonus2 bIgnoreMdefClassRate,Class_Boss,getrefine(); bonus bDelayRate,-(getrefine()*3/2); },{},{}
|
||||
1637,Eraser,Eraser,5,20,,500,80,,1,0,0x00018314,2,2,2,4,70,1,10,{ bonus bMatkRate,20; bonus bInt,3; bonus bDex,2; bonus bSPrecovRate,8; if( getrefine()>9 ) bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",3,5,BF_MAGIC,0; else bonus5 bAutoSpell,"NPC_WIDESOULDRAIN",1,5,BF_MAGIC,0; },{},{}
|
||||
1638,Healing_Staff_C,Staff Of Healing,5,20,,0,10,,1,0,0x00008110,7,2,2,3,1,0,10,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bHealPower,(getrefine()*3/2); },{},{}
|
||||
1639,N_Rod,Novice Rod,5,0,,0,15,,1,3,0x00818315,7,2,2,1,1,0,10,{ bonus bMatkRate,16; },{},{}
|
||||
1640,Krieger_Onehand_Staff1,Glorious Arc Wand,5,20,,0,70,,1,0,0x00818314,7,2,2,4,80,1,10,{ bonus2 bMagicAddRace,RC_DemiHuman,15; bonus2 bIgnoreMdefRate,RC_DemiHuman,25 + ((getrefine()>5) ? 5 : 0); bonus bUnbreakableWeapon,0; if(getrefine()>8) { bonus bCastrate,-5; bonus bDelayRate,-5; bonus bMatkRate,5; } },{},{}
|
||||
1641,Krieger_Onehand_Staff2,Glorious Cure Wand,5,20,,0,70,,1,0,0x00818314,7,2,2,4,80,1,10,{ bonus bHealPower,14; bonus bDelayRate,-10; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bIgnoreMdefRate,RC_DemiHuman,5; bonus bHealPower,5+(getrefine()-5)*2; } if(getrefine()>8) bonus5 bAutoSpellOnSkill,"AL_HEAL","AL_HEAL",10,100,1; if(getrefine()>9) { bonus bHealPower,10; } },{},{}
|
||||
1640,Krieger_Onehand_Staff1,Glorious Arc Wand,5,20,,0,70,,1,0,0x00818314,7,2,2,4,80,1,10,{ bonus2 bMagicAddRace,RC_DemiHuman,15; bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,25 + ((getrefine()>5) ? 5 : 0); bonus bUnbreakableWeapon,0; if(getrefine()>8) { bonus bCastrate,-5; bonus bDelayRate,-5; bonus bMatkRate,5; } },{},{}
|
||||
1641,Krieger_Onehand_Staff2,Glorious Cure Wand,5,20,,0,70,,1,0,0x00818314,7,2,2,4,80,1,10,{ bonus bHealPower,14; bonus bDelayRate,-10; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,5; bonus bHealPower,5+(getrefine()-5)*2; } if(getrefine()>8) bonus5 bAutoSpellOnSkill,"AL_HEAL","AL_HEAL",10,100,1; if(getrefine()>9) { bonus bHealPower,10; } },{},{}
|
||||
1642,Staff_Of_Darkness,Staff Of Darkness,5,20,,0,100,,1,0,0x00818314,7,2,2,2,0,0,10,{ bonus bCastrate,-5; bonus bMatkRate,15; bonus bInt,2; },{},{}
|
||||
1643,Dead_Tree_Cane,Dead Tree Cane,5,20,,100,100,,1,0,0x00818314,7,2,2,4,70,1,10,{ bonus bMatk,15; bonus bInt,4; if(getrefine()>5) { bonus bInt,getrefine()-5; bonus bMaxHP,-200; bonus bMaxSP,-100; } },{},{}
|
||||
1644,Piercing_Staff_M,Staff of Piercing,5,20,,500,80,,1,0,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,4; bonus bMatkRate,15; bonus bIgnoreMdefRate,10+getrefine(); },{},{}
|
||||
1644,Piercing_Staff_M,Staff of Piercing,5,20,,500,80,,1,0,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,4; bonus bMatkRate,15; bonus2 bIgnoreMdefClassRate,Class_Normal,10+getrefine(); bonus2 bIgnoreMdefClassRate,Class_Boss,10+getrefine(); },{},{}
|
||||
1645,Lich_Bone_Wand_M,Lich's Bone Wand,5,20,,800,60,,1,2,0x00018314,2,2,2,3,70,1,10,{ bonus bInt,1; bonus bDex,1; bonus bAtkEle,Ele_Undead; bonus bMatkRate,20; bonus3 bAutoSpellWhenHit,"NPC_WIDECURSE",5,10+getrefine(); if(getrefine()>=9){ bonus bMatkRate,3; bonus bMaxSP,300; } },{},{}
|
||||
1646,La'cryma_Stick,La'cryma Stick,5,20,,500,30,,1,2,0x00010204,2,2,2,3,50,1,10,{ bonus bInt,4; bonus bMatkRate,15; bonus bMdef,getrefine(); bonus2 bSkillAtk,"WZ_STORMGUST",getrefine(); if(getrefine()>9) bonus2 bCastrate,"WZ_STORMGUST",-8; },{},{}
|
||||
1647,Croce_Staff,Croce Staff,5,20,,500,30,,1,1,0x00008110,2,2,2,3,50,1,10,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bInt,4; bonus4 bAutoSpellOnSkill,"AL_HEAL","AL_BLESSING",getskilllv("AL_BLESSING")>1?getskilllv("AL_BLESSING"):1,20; },{},{}
|
||||
@ -928,7 +928,7 @@
|
||||
1732,Earth_Bow,Earth Bow,5,20,,1400,105,,5,1,0x000A0808,7,2,34,3,55,1,11,{},{},{}
|
||||
1733,Gust_Bow,Gust Bow,5,20,,1400,95,,5,1,0x000A0808,7,2,34,3,55,1,11,{},{},{}
|
||||
1734,Orc_Archer_Bow,Orc Archer Bow,5,20,,1600,120,,5,0,0x000A0808,7,2,34,4,65,1,11,{ bonus2 bAddMonsterDropItem,1753,200; },{},{}
|
||||
1735,Kkakkung,Kkakkung,5,20,,0,120,,5,0,0x000A0848,7,2,34,1,1,0,11,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
1735,Kkakkung,Kkakkung,5,20,,0,120,,5,0,0x000A0848,7,2,34,1,1,0,11,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
1736,Double_Bound,Double Bound,5,20,,900,70,,5,3,0x00000800,2,2,34,3,70,1,11,{ bonus3 bAutoSpell,"AC_DOUBLE",GetSkillLv("AC_DOUBLE"),10; },{},{}
|
||||
1737,Ixion_Wing,Ixion Wings,5,20,,300,135,,5,1,0x00000800,2,2,34,4,70,1,11,{ autobonus "{ bonus bAspdRate,7; }",10+(getrefine()*2),7000,BF_WEAPON,"{ specialeffect2 EF_HASTEUP; }"; bonus2 bAddSkillBlow,"AC_CHARGEARROW",3; },{},{}
|
||||
1738,BF_Bow1,Valorous Battle CrossBow,5,0,,0,100,,5,0,0x000A0848,7,2,34,3,80,1,11,{ bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
@ -992,7 +992,7 @@
|
||||
1826,Krieger_Knuckle1,Glorious Claw,5,20,,0,30,,1,0,0x00008100,7,2,2,4,80,1,12,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { bonus3 bAutoSpell,"MO_INVESTIGATE",5,(getrefine()*10-50); bonus3 bAutoSpell,"AL_DECAGI",1,(getrefine()*10-50); } },{},{}
|
||||
1827,Krieger_Knuckle2,Glorious Fist,5,20,,0,30,,1,0,0x00008100,7,2,2,4,80,1,12,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { bonus2 bCastrate,"MO_EXTREMITYFIST",-100; bonus4 bautospellonskill,"MO_EXPLOSIONSPIRITS","CH_SOULCOLLECT",1,1000; } },{},{}
|
||||
1828,Monk_Knuckle,Monk Knuckle,5,20,,0,150,,1,0,0x00008100,7,2,2,4,0,0,12,{ bonus bInt,2; bonus2 bSkillAtk,"MO_FINGEROFFENSIVE",25; },{},{}
|
||||
1829,Fist_C,Fist,5,0,,0,150,,1,0,0x00008100,7,2,2,3,1,0,12,{ bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
1829,Fist_C,Fist,5,0,,0,150,,1,0,0x00008100,7,2,2,3,1,0,12,{ bonus2 bAddSize,Size_All,40; },{},{}
|
||||
// Instruments
|
||||
1901,Violin,Violin,5,4000,,700,50,,1,3,0x00080000,7,1,2,1,2,1,13,{},{},{}
|
||||
1902,Violin_,Violin,5,4000,,700,50,,1,4,0x00080000,7,1,2,1,2,1,13,{},{},{}
|
||||
@ -1014,7 +1014,7 @@
|
||||
1918,Oriental_Lute,Oriental Lute,5,20,,1200,150,,1,0,0x00080000,7,1,2,4,65,1,13,{ bonus2 bSkillAtk,"CG_ARROWVULCAN",10; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; },{},{}
|
||||
1919,Base_Guitar,Bass Guitar,5,20,,1500,130,,1,1,0x00080000,2,1,2,3,70,1,13,{ bonus bSPGainValue,3; bonus4 bAutoSpellWhenHit,"WZ_HEAVENDRIVE",3,30,1; bonus3 bAutoSpell,"NPC_WIDECONFUSE",2,100; },{},{}
|
||||
1920,Berserk_Guitar,Berserk Guitar,5,20,,1800,10,,1,0,0x00080000,2,1,2,4,70,1,13,{ bonus bAspdRate,100; bonus bHPrecovRate,-100; bonus2 bHPLossRate,50,5000; bonus bDex,-readparam(bDex); },{},{}
|
||||
1921,Guh_Moon_Gom,Gun Moon Gom,5,20,,0,120,,1,0,0x00080000,7,1,2,1,0,0,13,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
1921,Guh_Moon_Gom,Gun Moon Gom,5,20,,0,120,,1,0,0x00080000,7,1,2,1,0,0,13,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
1922,Oriental_Lute_,Oriental Lute,5,20,,1200,150,,1,2,0x00080000,7,1,2,4,65,1,13,{ bonus2 bSkillAtk,"CG_ARROWVULCAN",10; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; },{},{}
|
||||
1923,BF_Instrument1,Valorous Battlefield Guitar,5,20,,0,50,,1,0,0x00080000,7,1,2,3,80,1,13,{ bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1924,BF_Instrument2,Brave Battlefield Guitar,5,20,,0,50,,1,0,0x00080000,7,1,2,3,80,1,13,{ bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bSkillAtk,"CG_ARROWVULCAN",20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
@ -1022,7 +1022,7 @@
|
||||
1926,Harp_Of_Nepenthes,Harp of Nepenthes,5,20,,1000,120,,1,2,0x00080000,2,1,2,4,60,1,13,{ bonus bInt,2; if( getrefine()>9 ) { bonus3 bAddEffOnSkill,"BA_MUSICALSTRIKE",Eff_Stun,2000; } else { bonus3 bAddEffOnSkill,"BA_MUSICALSTRIKE",Eff_Stun,1000; } },{},{}
|
||||
1927,Krieger_Instrument1,Glorious Guitar,5,20,,0,50,,1,0,0x00080000,7,1,2,4,80,1,13,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100; },{},{}
|
||||
1928,Berserk_Guitar_I,Spirited Guitar,5,0,,0,40,,1,0,0x00080000,2,1,2,4,0,0,13,{ bonus bAspdRate,100; bonus bHPrecovRate,-100; bonus2 bHPLossRate,50,5000; bonus bDex,-readparam(bDex); },{},{}
|
||||
1929,Guitar_C,Guitar,5,0,,0,177,,1,0,0x00080000,7,1,2,3,1,0,13,{ bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
1929,Guitar_C,Guitar,5,0,,0,177,,1,0,0x00080000,7,1,2,3,1,0,13,{ bonus2 bAddSize,Size_All,40; },{},{}
|
||||
// Whips
|
||||
1950,Rope,Rope,5,2500,,400,45,,2,3,0x00080000,7,0,2,1,3,1,14,{},{},{}
|
||||
1951,Rope_,Rope,5,2500,,400,45,,2,4,0x00080000,7,0,2,1,3,1,14,{},{},{}
|
||||
@ -1049,7 +1049,7 @@
|
||||
1972,Electric_Eel,Electric Eel,5,20,,2000,100,,2,2,0x00080000,2,0,2,4,70,1,14,{ bonus bAtkEle,Ele_Wind; bonus bInt,2; bonus bAgi,2; bonus3 bAutoSpell,"WZ_JUPITEL",3,20; if(getrefine()>0) bonus3 bAutoSpell,"CG_ARROWVULCAN",getrefine(),50; },{},{}
|
||||
1973,Sea_Witch_Foot,Sea Witch's Foot,5,20,,1500,110,,2,1,0x00080000,2,0,2,4,70,1,14,{ bonus bSPGainValue,5; bonus4 bAutoSpellWhenHit,"WZ_FROSTNOVA",3,50,1; bonus3 bAutoSpell,"NPC_WIDESILENCE",2,100; },{},{}
|
||||
1974,Carrot_Whip,Carrot Whip,5,20,,1300,185,,2,0,0x00080000,2,0,2,4,70,1,14,{ if(getrefine()>0) bonus3 bAutoSpell,"AL_INCAGI",getrefine(),10; },{},{}
|
||||
1975,Queen_Is_Whip,Queen Is Whip,5,20,,0,120,,2,0,0x00080000,7,0,2,1,0,0,14,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
1975,Queen_Is_Whip,Queen Is Whip,5,20,,0,120,,2,0,0x00080000,7,0,2,1,0,0,14,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
1976,Queen's_Whip_,Queen's Whip,5,20,,1100,150,,2,2,0x00080000,7,0,2,4,65,1,14,{ bonus2 bSkillAtk,"CG_ARROWVULCAN",10; bonus2 bSkillAtk,"DC_THROWARROW",10; },{},{}
|
||||
1977,BF_Whip1,Valorous Battle Lariat,5,20,,0,50,,2,0,0x00080000,7,0,2,3,80,1,14,{ bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
1978,BF_Whip2,Brave Battle Lariat,5,20,,0,50,,2,0,0x00080000,7,0,2,3,80,1,14,{ bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bSkillAtk,"CG_ARROWVULCAN",20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
@ -1057,11 +1057,11 @@
|
||||
1980,Whip_Of_Balance,Whip of Balance,5,20,,700,110,,2,3,0x00080000,2,0,2,3,70,1,14,{ bonus bAgi,2; bonus bDex,3; bonus2 bAddSkillBlow,"DC_THROWARROW",2; bonus2 bAddSkillBlow,"CG_ARROWVULCAN",3; },{},{}
|
||||
1981,Krieger_Whip1,Glorious Lariat,5,20,,0,50,,2,0,0x00080000,7,0,2,4,80,1,14,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100; },{},{}
|
||||
1982,Phenomena_Whip,Phenomena Whip,5,20,,0,160,,2,0,0x00080000,7,0,2,4,0,0,14,{ bonus bDex,2; bonus2 bSkillAtk,"DC_THROWARROW",25; },{},{}
|
||||
1983,Rante_C,Rante Whip,5,0,,0,170,,2,0,0x00080000,7,0,2,3,1,0,14,{ bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
1983,Rante_C,Rante Whip,5,0,,0,170,,2,0,0x00080000,7,0,2,3,1,0,14,{ bonus2 bAddSize,Size_All,40; },{},{}
|
||||
// Additional 2-Handed Staffs
|
||||
2000,Destruction_Rod,Staff of Destruction,5,20,,2500,130,,1,1,0x00000200,2,2,34,4,80,1,23,{ bonus bMatkRate,25+getrefine()/2; bonus bInt,3; bonus bAgi,10; bonus bUseSPrate,(getrefine()*2); bonus3 bAutoSpellWhenHit,"WZ_JUPITEL",5,(getrefine()*20); bonus2 bCastrate,"HW_MAGICPOWER",-50; },{},{}
|
||||
2001,Divine_Cross,Divine Cross,5,20,,1500,120,,1,0,0x00008100,7,2,34,4,70,1,23,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15; bonus bDex,4; bonus2 bSubRace,RC_Demon,15; bonus2 bSubRace,RC_Undead,15; },{},{}
|
||||
2002,Krieger_Twohand_Staff1,Glorious Destruction Staff,5,20,,0,70,,1,0,0x00018314,7,2,34,4,80,1,23,{ bonus bMatkRate,getrefine(); bonus2 bMagicAddRace,RC_DemiHuman,15; bonus2 bIgnoreMdefRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bMagicAddRace,RC_DemiHuman,(getrefine()-5)*2; bonus2 bIgnoreMdefRate,RC_DemiHuman,5+(getrefine()-5)*2; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,"WZ_STORMGUST","MG_SAFETYWALL",10,200,1; bonus5 bAutoSpellOnSkill,"WZ_METEOR","MG_SAFETYWALL",10,200,1; bonus5 bAutoSpellOnSkill,"WZ_VERMILION","MG_SAFETYWALL",10,200,1; } },{},{}
|
||||
2002,Krieger_Twohand_Staff1,Glorious Destruction Staff,5,20,,0,70,,1,0,0x00018314,7,2,34,4,80,1,23,{ bonus bMatkRate,getrefine(); bonus2 bMagicAddRace,RC_DemiHuman,15; bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bMagicAddRace,RC_DemiHuman,(getrefine()-5)*2; bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,5+(getrefine()-5)*2; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,"WZ_STORMGUST","MG_SAFETYWALL",10,200,1; bonus5 bAutoSpellOnSkill,"WZ_METEOR","MG_SAFETYWALL",10,200,1; bonus5 bAutoSpellOnSkill,"WZ_VERMILION","MG_SAFETYWALL",10,200,1; } },{},{}
|
||||
2003,Destruction_Rod_M,Staff of Destruction,5,20,,2500,130,,1,1,0x00000200,2,2,34,4,80,1,23,{ bonus bMatkRate,25+getrefine()/2; bonus bInt,3; bonus bAgi,10; bonus bUseSPrate,(getrefine()*2); bonus3 bAutoSpellWhenHit,"WZ_JUPITEL",5,(getrefine()*20); bonus2 bCastrate,"HW_MAGICPOWER",-50; },{},{}
|
||||
2004,Kronos,Kronos,5,20,,1000,30,,1,0,0x00010204,2,2,34,4,50,1,23,{ bonus bMatkRate,20; bonus bInt,3+(getrefine()/2); bonus bMaxHP,300+(50*getrefine()/2); autobonus "{ bonus bMatkRate,12; bonus buseSPRate,20; }",1,5000,BF_MAGIC,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
|
||||
2005,Dea_Staff,Dea Staff,5,20,,1000,30,,1,1,0x00008110,2,2,34,3,50,1,23,{ bonus bAtkEle,Ele_Holy; bonus bMatkRate,15+getrefine()/2; bonus bInt,6; bonus bVit,2; autobonus3 "{ }",20,1000,"AL_HEAL","{ specialeffect2 EF_MAGICALATTHIT; heal 0,200; }"; },{},{}
|
||||
@ -1094,13 +1094,13 @@
|
||||
2124,Thorny_Buckler,Thorny Buckler,4,20,,1000,,5,,1,0xFFFFFFFE,2,2,32,,55,1,2,{ bonus bMdef,2; },{},{}
|
||||
2125,Strong_Shield,Strong Shield,4,20,,2500,,4,,1,0xFFFFFFFE,2,2,32,,75,1,4,{ bonus bNoKnockback,0; bonus2 bSubEle,Ele_Neutral,-20; bonus2 bSubEle,Ele_Fire,-20; bonus2 bSubEle,Ele_Water,-20; bonus2 bSubEle,Ele_Wind,-20; bonus2 bSubEle,Ele_Earth,-20; bonus2 bSubEle,Ele_Dark,-20; bonus2 bSubEle,Ele_Holy,-20; bonus2 bSubEle,Ele_Ghost,-20; },{},{}
|
||||
2126,Guyak_Shield,Guyak Shield,4,20,,700,,3,,0,0xFFFFFFFE,7,2,32,,75,1,2,{ bonus bMdef,3; },{},{}
|
||||
2127,Secular_Mission,Secular Mission,4,20,,0,,10,,0,0xFFFFFFFF,7,2,32,,0,0,4,{ bonus2 bSubRace,RC_NonBoss,25; bonus2 bSubRace,RC_Boss,25; },{},{}
|
||||
2127,Secular_Mission,Secular Mission,4,20,,0,,10,,0,0xFFFFFFFF,7,2,32,,0,0,4,{ bonus2 bSubClass,Class_All,25; },{},{}
|
||||
2128,Herald_Of_GOD_,Sacred Mission,4,128000,,1600,,5,,1,0x00004000,7,2,32,,83,1,4,{ bonus bVit,3; bonus bInt,2; bonus bMdef,3; bonus bUnbreakableShield,0; },{},{}
|
||||
2129,Exorcism_Bible,Exorcism Bible,4,20,,600,,5,,0,0x00008100,7,2,32,,50,1,5,{ bonus bHPrecovRate,3; bonus bSPrecovRate,3; bonus bInt,1; },{},{}
|
||||
2130,Cross_Shield,Cross Shield,4,20,,2000,,6,,1,0x00004000,7,2,32,,80,1,4,{ bonus bStr,1; bonus2 bSkillAtk,"PA_SHIELDCHAIN",30; bonus2 bSkillAtk,"CR_SHIELDBOOMERANG",30; bonus bUseSPrate,10; },{},{}
|
||||
2131,Magic_Study_Vol1,Magic Bible Vol1,4,20,,1000,,2,,1,0x00810204,2,2,32,,70,1,5,{ bonus bMdef,3; bonus bInt,2; bonus2 bAddEffWhenHit,Eff_Stun,1000; },{},{}
|
||||
2132,Shelter_Resistance,Shell Of Resistance,4,20,,0,,9,,0,0xFFFFFFFF,2,2,32,,0,0,2,{ bonus2 bSubEle,Ele_Neutral,20; bonus2 bSubEle,Ele_Water,20; bonus2 bSubEle,Ele_Earth,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Wind,20; bonus2 bSubEle,Ele_Poison,20; bonus2 bSubEle,Ele_Holy,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Ghost,20; bonus2 bSubEle,Ele_Undead,20; bonus bShortWeaponDamageReturn,1; },{},{}
|
||||
2133,Tournament_Shield,Tournament Shield,4,20,,1000,,5,,1,0x00004082,2,2,32,,50,1,4,{ bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1; if( Class==Job_Lord_Knight ) bonus bAspdRate,-5; },{},{}
|
||||
2133,Tournament_Shield,Tournament Shield,4,20,,1000,,5,,1,0x00004082,2,2,32,,50,1,4,{ bonus2 bAddClass,Class_All,1; if( Class==Job_Lord_Knight ) bonus bAspdRate,-5; },{},{}
|
||||
2134,Shield_Of_Naga,Shield of Naga,4,20,,500,,3,,1,0x00CFFF80,2,2,32,,70,1,2,{ bonus bMdef,3; autobonus2 "{ bonus bShortWeaponDamageReturn,(getrefine()*3); }",10,5000,BF_WEAPON,"{ specialeffect2 EF_GUARD; }"; },{},{}
|
||||
2135,Shadow_Guard,Shadow Guard,4,20,,800,,4,,1,0x00020000,2,2,32,,70,1,2,{},{},{}
|
||||
2136,Cracked_Buckler,Cracked Buckler,4,0,,0,,5,,0,0xFFFFFFFF,7,2,32,,0,0,2,{ bonus bAgi,2; bonus2 bAddEle,Ele_Neutral,-10; bonus3 bAutoSpellWhenHit,"PR_KYRIE",1,50; bonus bMdef,1; },{},{}
|
||||
@ -1293,7 +1293,7 @@
|
||||
2380,Medic_Robe,Medic's Robe,4,10,,0,,3,,1,0x00008110,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; },{},{}
|
||||
2381,Elite_Archer_Suit,Elite Archer Suit,4,10,,0,,3,,1,0x00080808,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; },{},{}
|
||||
2382,Elite_Shooter_Suit,Elite Shooter Suit,4,10,,0,,3,,1,0x41000000,7,2,16,,80,1,0,{ bonus bMaxHP,150; bonus bMdef,2; bonus2 bSubRace,RC_DemiHuman,2; },{},{}
|
||||
2383,Brynhild,Brynhild,4,20,,400,,10,,0,0xFFFFFFFF,7,2,16,,94,0,0,{ bonus bMdef,10; bonus bMaxHP,20*BaseLevel; bonus bMaxSP,5*BaseLevel; bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; bonus bMatkRate,10; bonus bUnbreakableArmor,0; bonus bNoKnockback,0; },{},{}
|
||||
2383,Brynhild,Brynhild,4,20,,400,,10,,0,0xFFFFFFFF,7,2,16,,94,0,0,{ bonus bMdef,10; bonus bMaxHP,20*BaseLevel; bonus bMaxSP,5*BaseLevel; bonus2 bAddClass,Class_All,10; bonus bMatkRate,10; bonus bUnbreakableArmor,0; bonus bNoKnockback,0; },{},{}
|
||||
2384,Spritual_Tunic,Spiritual Tunic,4,20,,0,,10,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bMaxHP,800; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSubEle,Ele_Earth,20; bonus2 bSubEle,Ele_Fire,20; bonus2 bSubEle,Ele_Wind,20; bonus2 bSubEle,Ele_Poison,20; bonus2 bSubEle,Ele_Holy,20; bonus2 bSubEle,Ele_Dark,20; bonus2 bSubEle,Ele_Ghost,20; bonus2 bSubEle,Ele_Undead,20; },{},{}
|
||||
2385,Recuperative_Armor,Recuperative Armor,4,20,,0,,12,,0,0xFFFFFFFF,7,2,16,,0,0,0,{ bonus bNoRegen,1; bonus bNoRegen,2; bonus bHPGainValue,60; bonus bSPGainValue,6; bonus bMagicHPGainValue,60; bonus bMagicSPGainValue,6; },{},{ heal 0,-100; }
|
||||
2386,Chameleon_Armor,Chameleon Armor,4,20,,1700,,5,,0,0x00CFFF80,2,2,16,,70,1,0,{ bonus bMaxHP,(BaseLevel*7); bonus bMaxSP,(BaseLevel/2); autobonus2 "{ bonus bNoMagicDamage,100; }",10,2000,BF_MAGIC,"{ specialeffect2 EF_ENERGYCOAT; }"; if( BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte ) bonus bMdef,5; else if( BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief ) bonus bDef,3; },{},{}
|
||||
@ -1462,7 +1462,7 @@
|
||||
2641,Fashionable_Sack,Fashion Hip Sack,4,20,,700,,0,,0,0x00040420,7,2,136,,50,0,0,{ bonus bStr,2; },{},{}
|
||||
2642,Serin's_Gold_Ring,Serin's Gold Ring,4,20,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
|
||||
2643,Serin's_Gold_Ring_,Serin's Gold Ring,4,45000,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
|
||||
2644,The_Sign_,The Sign,4,2,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; },{},{}
|
||||
2644,The_Sign_,The Sign,4,2,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; },{},{}
|
||||
2645,Moonlight_Ring,Moonlight Ring,4,40000,,200,,0,,0,0x02021040,7,2,136,,60,0,0,{ bonus bMdef,2; },{},{}
|
||||
2646,Bunch_Of_Carnation,Bunch of Carnations,4,2,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bAllStats,3; },{},{}
|
||||
2647,Nile_Rose,Nile Rose,4,2,,100,,0,,1,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bMaxHP,10; },{},{}
|
||||
@ -1538,12 +1538,12 @@
|
||||
2717,Pocket_Watch_,Pocket Watch,4,20,,200,,0,,0,0x00810204,7,2,136,,80,0,0,{},{},{}
|
||||
2718,Lunatic_Brooch,Lunatic Brooch,4,20,,200,,0,,1,0x00080808,7,2,136,,65,0,0,{},{},{}
|
||||
2719,Iron_Wrist,Iron Wrist,4,20,,700,,1,,0,0x000444A2,7,2,136,,50,0,0,{ bonus2 bSkillAtk,"SM_BASH",6; bonus2 bSkillAtk,"MC_MAMMONITE",6; },{},{}
|
||||
2720,Medal_Swordman,Medal of Honor,4,20,,0,,1,,0,0x00404082,7,2,136,,70,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus bHit,10; bonus bMaxHP,500; bonus bMaxSP,50; bonus3 bAddEff,Eff_Stun,100,ATF_SHORT; },{},{}
|
||||
2721,Medal_Thief,Medal of Honor,4,20,,0,,1,,0,0x02021040,7,2,136,,70,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus bFlee,10; bonus bMaxHP,300; bonus bMaxSP,80; bonus3 bAddEff,Eff_Poison,100,ATF_SHORT; },{},{}
|
||||
2722,Medal_Acolyte,Medal of Honor,4,20,,0,,1,,0,0x00008110,7,2,136,,70,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus bMdef,6; bonus bMaxHP,600; bonus3 bAddEff,Eff_Silence,100,ATF_SHORT; },{},{}
|
||||
2723,Medal_Mage,Medal of Honor,4,20,,0,,1,,0,0x00810204,7,2,136,,70,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus bMdef,6; bonus bMaxHP,600; bonus2 bAddEffWhenHit,Eff_Stone,100; },{},{}
|
||||
2724,Medal_Archer,Medal of Honor,4,20,,0,,1,,0,0x00080808,7,2,136,,70,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus bCritical,10; bonus bMaxHP,300; bonus bMaxSP,80; bonus3 bAddEff,Eff_Blind,100,ATF_LONG; },{},{}
|
||||
2725,Medal_Merchant,Medal of Honor,4,20,,0,,1,,0,0x00040420,7,2,136,,70,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus bAspdRate,10; bonus bMaxHP,500; bonus bMaxSP,50; bonus3 bAddEff,Eff_Curse,100,ATF_SHORT; },{},{}
|
||||
2720,Medal_Swordman,Medal of Honor,4,20,,0,,1,,0,0x00404082,7,2,136,,70,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus bHit,10; bonus bMaxHP,500; bonus bMaxSP,50; bonus3 bAddEff,Eff_Stun,100,ATF_SHORT; },{},{}
|
||||
2721,Medal_Thief,Medal of Honor,4,20,,0,,1,,0,0x02021040,7,2,136,,70,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus bFlee,10; bonus bMaxHP,300; bonus bMaxSP,80; bonus3 bAddEff,Eff_Poison,100,ATF_SHORT; },{},{}
|
||||
2722,Medal_Acolyte,Medal of Honor,4,20,,0,,1,,0,0x00008110,7,2,136,,70,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus bMdef,6; bonus bMaxHP,600; bonus3 bAddEff,Eff_Silence,100,ATF_SHORT; },{},{}
|
||||
2723,Medal_Mage,Medal of Honor,4,20,,0,,1,,0,0x00810204,7,2,136,,70,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus bMdef,6; bonus bMaxHP,600; bonus2 bAddEffWhenHit,Eff_Stone,100; },{},{}
|
||||
2724,Medal_Archer,Medal of Honor,4,20,,0,,1,,0,0x00080808,7,2,136,,70,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus bCritical,10; bonus bMaxHP,300; bonus bMaxSP,80; bonus3 bAddEff,Eff_Blind,100,ATF_LONG; },{},{}
|
||||
2725,Medal_Merchant,Medal of Honor,4,20,,0,,1,,0,0x00040420,7,2,136,,70,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus bAspdRate,10; bonus bMaxHP,500; bonus bMaxSP,50; bonus3 bAddEff,Eff_Curse,100,ATF_SHORT; },{},{}
|
||||
2726,Icarus_Wing,Icarus Wings,4,20,,100,,0,,0,0x00000800,2,2,136,,70,0,0,{ bonus bMaxSP,50; bonus bDex,3; },{},{}
|
||||
2727,Bowman_Scarf,Bowman Scarf,4,20,,200,,0,,0,0x00000800,2,2,136,,70,0,0,{ bonus bMaxSP,50; bonus bDex,3; },{},{}
|
||||
2728,Cursed_Hand,Cursed Hand,4,20,,50,,0,,1,0xFFFFFFFE,7,2,136,,80,0,0,{ bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,30; bonus bHit,10; bonus bHPrecovRate,20; },{},{}
|
||||
@ -1551,14 +1551,14 @@
|
||||
2730,Morroc_Seal,Seal of Continental Guard,4,20,,50,,0,,1,0xFFFFFFFE,7,2,136,,80,0,0,{ bonus bMaxHP,50; bonus bAspdRate,3; },{},{}
|
||||
2731,Morroc_Charm_Stone,Rune Spellstone,4,20,,50,,0,,1,0xFFFFFFFE,7,2,136,,80,0,0,{ bonus bMaxSP,50; bonus bCastRate,-1; },{},{}
|
||||
2732,Morroc_Ring,Death Loop,4,20,,50,,0,,1,0xFFFFFFFE,7,2,136,,80,0,0,{ bonus bCritical,5; },{},{}
|
||||
2733,Medal_Gunner,Sheriff Badge,4,20,,0,,1,,0,0x41000000,7,2,136,,70,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus bCritical,10; bonus bMaxHP,300; bonus bMaxSP,80; bonus3 bAddEff,Eff_Blind,100,ATF_LONG; },{},{}
|
||||
2733,Medal_Gunner,Sheriff Badge,4,20,,0,,1,,0,0x41000000,7,2,136,,70,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus bCritical,10; bonus bMaxHP,300; bonus bMaxSP,80; bonus3 bAddEff,Eff_Blind,100,ATF_LONG; },{},{}
|
||||
2734,Directive_A,Directive,4,0,,0,,1,,0,0x00000001,7,2,136,,0,0,0,{},{},{}
|
||||
2735,Directive_B,Directive,4,0,,0,,1,,0,0x00000001,7,2,136,,0,0,0,{},{},{}
|
||||
2736,Navel_Ring,Navel Ring,4,20,,100,,0,,0,0xFFFFFFFE,7,2,136,,75,0,0,{ bonus bDex,3; bonus bLuk,3; bonus bMdef,2; },{},{}
|
||||
2737,Foot_Ring,Foot Ring,4,20,,150,,0,,0,0xFFFFFFFE,7,2,136,,75,0,0,{ bonus bVit,3; bonus bMaxHPRate,10; },{},{}
|
||||
2738,Shiny_Coin,Shiny Coin,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddRace,RC_NonBoss,6; bonus2 bAddRace,RC_Boss,6; bonus bMatkRate,6; },{},{}
|
||||
2739,Ordinary_Coin,Ordinary Coin,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; },{},{}
|
||||
2740,Rusty_Coin,Rusty Coin,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; },{},{}
|
||||
2738,Shiny_Coin,Shiny Coin,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddClass,Class_All,6; bonus bMatkRate,6; },{},{}
|
||||
2739,Ordinary_Coin,Ordinary Coin,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; },{},{}
|
||||
2740,Rusty_Coin,Rusty Coin,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus2 bAddClass,Class_All,3; bonus bMatkRate,3; },{},{}
|
||||
2741,All_In_One_Ring,All In One Ring,4,20,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bAllStats,1; bonus bNoCastCancel,0; bonus bCastRate,10; skill "AL_HEAL",1; skill "AL_TELEPORT",1; },{},{}
|
||||
//2742,Lucky_Clip,Lucky Clip,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
|
||||
2743,Angelic_Ring,Angelic Ring,4,20,,100,,0,,0,0x00CFFF80,2,2,136,,70,0,0,{ bonus bInt,2; bonus bDex,1; bonus bMdef,2; autobonus3 "{ bonus bHealPower,20; }",50,3000,"AL_HEAL"; autobonus3 "{ bonus bHealPower,20; }",50,3000,"AM_POTIONPITCHER"; autobonus3 "{ bonus bHealPower,20; }",50,3000,"PR_SANCTUARY"; },{},{}
|
||||
@ -1570,7 +1570,7 @@
|
||||
2749,Linen_Glove,Linen Glove,4,20,,120,,1,,1,0x00CFFF80,2,2,136,,90,0,0,{ bonus bMdef,2; bonus bAgi,2; bonus bDex,1; },{},{}
|
||||
//2750,Summer_Night_Dream,Summer Night Dream,4,20,,0,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{},{},{}
|
||||
2751,Academy_Badge,Academy Of Badge,4,0,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ if(BaseLevel<80) { bonus bMaxHP,400; bonus bMaxSP,200; } },{},{}
|
||||
2752,Praxinus_C,Praccsinos,4,2,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkrate,5; },{},{}
|
||||
2752,Praxinus_C,Praccsinos,4,2,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bAddClass,Class_All,5; bonus bMatkrate,5; },{},{}
|
||||
2753,Beholder_Ring,Beholder Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_Formless,15; },{},{}
|
||||
2754,Hallow_Ring,Hallow Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_undead,15; },{},{}
|
||||
2755,Clamorous_Ring,Clamorous Ring,4,0,,0,,0,,0,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus2 bExpAddRace,RC_Brute,15; },{},{}
|
||||
@ -1607,16 +1607,16 @@
|
||||
2786,Spiritual_Ring_M,Spiritual Ring,4,20,,100,,0,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bInt,2; bonus bDex,1; },{},{}
|
||||
2787,Waterdrop_Brooch,Waterdrop Brooch,4,20,,200,,0,,1,0xFFFFFFFE,2,2,136,,75,0,0,{ bonus2 bSubEle,Ele_Water,5; bonus bMaxHP,80; bonus bMdef,2; },{},{}
|
||||
2788,Bradium_Earing,Bradium Earring,4,20,,200,,0,,1,0xFFFFFFFE,2,2,136,,60,0,0,{ bonus bMatkRate,2; bonus bInt,1; bonus bDex,1; },{},{}
|
||||
2789,Bradium_Ring,Bradium Ring,4,20,,200,,0,,1,0xFFFFFFFE,2,2,136,,60,0,0,{ bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bStr,1; bonus bVit,1; },{},{}
|
||||
2789,Bradium_Ring,Bradium Ring,4,20,,200,,0,,1,0xFFFFFFFE,2,2,136,,60,0,0,{ bonus2 bAddClass,Class_All,2; bonus bStr,1; bonus bVit,1; },{},{}
|
||||
2790,Bradium_Brooch,Bradium Brooch,4,20,,200,,0,,1,0xFFFFFFFE,2,2,136,,60,0,0,{ bonus bFlee,4; bonus bAspdRate,2; bonus bAgi,1; },{},{}
|
||||
2791,Just_Got_Fish,Fresh Fish,4,20,,500,,0,,1,0xFFFFFFFF,7,2,136,,1,0,0,{ bonus bHit,3; },{},{}
|
||||
//2792,Ring_Of_Flame_Lord_I,Ring of Flame Lord,4,0,,0,,0,,0,0x00CFFF80,2,2,136,,0,0,0,{ bonus bStr,2; bonus bVit,1; bonus bBaseAtk,15; bonus2 bSubEle,Ele_Fire,10; bonus3 bAutoSpell,"CH_SOULCOLLECT",1,30; bonus3 bAutoSpell,"MO_EXPLOSIONSPIRITS",1,10; bonus3 bAutoSpell,"PA_PRESSURE",2,30; bonus3 bAutoSpell,"MG_FIREBALL",1,150; bonus3 bAutoSpell,"KN_BOWLINGBASH",5,20; },{},{}
|
||||
//2793,Ring_Of_Resonance_I,Ring of Resonance,4,0,,0,,2,,0,0x00CFFF80,2,2,136,,0,0,0,{ bonus bAgi,2; bonus bVit,1; bonus bMdef,2; bonus4 bAutoSpellWhenHit,"WZ_QUAGMIRE",1,50,0; bonus3 bAutoSpellWhenHit,"AS_SPLASHER",10,20; bonus3 bAutoSpellWhenHit,"AL_HEAL",10,30; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",3,20; bonus3 bAutoSpellWhenHit,"CG_TAROTCARD",5,20; },{},{}
|
||||
2794,Magic_Stone_Ring,Magic Stone Ring,4,0,,0,,0,,1,0x00004082,7,2,136,,99,0,0,{ bonus bStr,2; },{},{}
|
||||
2795,Green_Apple_Ring,Green Apple Ring,4,0,,0,,0,,0,0xFFFFFFFE,7,2,136,,99,0,0,{ bonus bAllStats,6; if(JobLevel <30) { bonus bAllStats,(JobLevel/5); } },{},{}
|
||||
2796,Magical_Stone,Rocks,4,0,,200,,0,,0,0x00810204,7,2,136,,99,0,0,{ bonus2 bAddDamageClass,2047,10; bonus2 bAddDefClass,2048,-10; bonus3 bAddClassDropItem,6152,2047,70; },{},{}
|
||||
2797,Magical_Stone_,Rocks,4,0,,200,,0,,0,0x00810204,7,2,136,,99,0,0,{ bonus2 bAddDamageClass,2049,10; bonus2 bAddDefClass,2050,-10; bonus3 bAddClassDropItem,6151,2049,70; },{},{}
|
||||
2798,Will_Of_Exhausted_Angel,Will Of Exhausted Angel,4,0,,200,,0,,0,0x00008100,7,2,136,,99,0,0,{ if(strcharinfo(3)=="job3_arch02") { bonus2 bAddDefClass,1761,50; bonus2 bAddDefClass,1762,50; } },{},{}
|
||||
2796,Magical_Stone,Rocks,4,0,,200,,0,,0,0x00810204,7,2,136,,99,0,0,{ bonus2 bAddDamageClass,2047,10; bonus2 bAddDefMonster,2048,-10; bonus3 bAddClassDropItem,6152,2047,70; },{},{}
|
||||
2797,Magical_Stone_,Rocks,4,0,,200,,0,,0,0x00810204,7,2,136,,99,0,0,{ bonus2 bAddDamageClass,2049,10; bonus2 bAddDefMonster,2050,-10; bonus3 bAddClassDropItem,6151,2049,70; },{},{}
|
||||
2798,Will_Of_Exhausted_Angel,Will Of Exhausted Angel,4,0,,200,,0,,0,0x00008100,7,2,136,,99,0,0,{ if(strcharinfo(3)=="job3_arch02") { bonus2 bAddDefMonster,1761,50; bonus2 bAddDefMonster,1762,50; } },{},{}
|
||||
2799,Kuirpenring,Kuirpenring,4,0,,100,,0,,1,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bMdef,1; },{},{}
|
||||
2819,Swordman_Manual,Swordsman Manual,4,0,,100,,0,,0,0x00000001,7,2,136,,1,0,0,{ bonus bMaxSP,100; skill "SM_BASH",1; skill "SM_PROVOKE",1; skill "SM_MAGNUM",1; },{},{}
|
||||
2820,Thief_Manual,Thief Manual,4,0,,100,,0,,0,0x00000001,7,2,136,,1,0,0,{ bonus bMaxSP,100; skill "TF_DOUBLE",3; bonus bDoubleRate,15; skill "TF_STEAL",1; skill "TF_HIDING",1; skill "TF_POISON",1; },{},{}
|
||||
@ -1765,7 +1765,7 @@
|
||||
4137,Drake_Card,Drake Card,6,20,,10,,,,,,,,2,,,,,{ bonus bNoSizeFix,0; },{},{}
|
||||
4138,Anubis_Card,Anubis Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubRace,RC_Angel,30; },{},{}
|
||||
4139,Joker_Card,Joker Card,6,20,,10,,,,,,,,136,,,,,{ skill "TF_STEAL",1; },{},{}
|
||||
4140,Knight_Of_Abyss_Card,Abysmal Knight Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace,RC_Boss,25; },{},{}
|
||||
4140,Knight_Of_Abyss_Card,Abysmal Knight Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddClass,Class_Boss,25; },{},{}
|
||||
4141,Evil_Druid_Card,Evil Druid Card,6,20,,10,,,,,,,,16,,,,,{ bonus bDefEle,Ele_Undead; bonus bInt,1; bonus bDef,1; },{},{}
|
||||
4142,Doppelganger_Card,Doppelganger Card,6,20,,10,,,,,,,,2,,,,,{ bonus bAspdRate,10; },{},{}
|
||||
4143,Orc_Hero_Card,Orc Hero Card,6,20,,10,,,,,,,,769,,,,,{ bonus bVit,3; bonus2 bResEff,Eff_Stun,10000; },{},{}
|
||||
@ -1837,7 +1837,7 @@
|
||||
4209,Violy_Card,Violy Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"BA_FROSTJOKER",1+4*(getskilllv("BA_FROSTJOKER")==5),20; },{},{}
|
||||
4210,Wander_Man_Card,Wanderer Card,6,20,,10,,,,,,,,4,,,,,{ if(!isequipped(4172,4257,4230,4272)) bonus3 bAutoSpell,"RG_INTIMIDATE",1,20; if(BaseClass==Job_Thief) bonus bFlee,20; },{},{}
|
||||
4211,Vocal_Card,Vocal Card,6,20,,10,,,,,,,,4,,,,,{ bonus bMdef,3; },{},{}
|
||||
4212,Bon_Gun_Card,Bongun Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"SM_BASH",1,20; bonus2 bAddSkillBlow,"SM_BASH",5; bonus2 bAddDefClass,1026,-100; },{},{}
|
||||
4212,Bon_Gun_Card,Bongun Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"SM_BASH",1,20; bonus2 bAddSkillBlow,"SM_BASH",5; bonus2 bAddDefMonster,1026,-100; },{},{}
|
||||
4213,Brilight_Card,Brilight Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Silence,600; },{},{}
|
||||
4214,Bloody_Murderer_Card,Bloody Murderer Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,10; bonus2 bCriticalAddRace,RC_Insect,7; },{},{}
|
||||
4215,Blazzer_Card,Blazer Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddMonsterDropItemGroup,IG_Food,600; },{},{}
|
||||
@ -1878,7 +1878,7 @@
|
||||
4250,Executioner_Card,Executioner Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubSize,Size_Large,25; bonus bDef,1; },{},{}
|
||||
4251,Elder_Card,Elder Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace2,5,40; },{},{}
|
||||
4252,Alligator_Card,Alligator Card,6,20,,10,,,,,,,,136,,,,,{ bonus bLongAtkDef,5; },{},{}
|
||||
4253,Alice_Card,Alice Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubRace,RC_Boss,40; bonus2 bSubRace,RC_NonBoss,-40; },{},{}
|
||||
4253,Alice_Card,Alice Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubClass,Class_Boss,40; bonus2 bSubClass,Class_Normal,-40; },{},{}
|
||||
4254,Tirfing_Card,Ogretooth Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubSize,Size_Medium,25; bonus bDef,1; },{},{}
|
||||
4255,Orc_Lady_Card,Orc Lady Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace2,3,30; },{},{}
|
||||
4256,Orc_Archer_Card,Orc Archer Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12034,RC_DemiHuman,100; },{},{}
|
||||
@ -1888,7 +1888,7 @@
|
||||
4260,Wootan_Shooter_Card,Wootan Shooter Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDef,1; bonus2 bResEff,Eff_Confusion,2000; },{},{}
|
||||
4261,Wootan_Fighter_Card,Wootan Fighter Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDef,1; bonus2 bResEff,Eff_Bleeding,2000; },{},{}
|
||||
4262,Evil_Cloud_Hermit_Card,Cloud Hermit Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12029,RC_Plant,100; },{},{}
|
||||
4263,Incant_Samurai_Card,Samurai Spector Card,6,20,,10,,,,,,,,2,,,,,{ bonus bIgnoreDefRace,RC_NonBoss; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000; },{},{ if((Hp <= 999) && !getmapflag(strcharinfo(3),mf_pvp) && !getmapflag(strcharinfo(3),mf_pvp_noparty) && !getmapflag(strcharinfo(3),mf_pvp_noguild)) { heal (1-Hp),0; } else { heal -999,0; } }
|
||||
4263,Incant_Samurai_Card,Samurai Spector Card,6,20,,10,,,,,,,,2,,,,,{ bonus bIgnoreDefClass,Class_Normal; bonus bHPrecovRate,-100; bonus2 bHPLossRate,666,10000; },{},{ if((Hp <= 999) && !getmapflag(strcharinfo(3),mf_pvp) && !getmapflag(strcharinfo(3),mf_pvp_noparty) && !getmapflag(strcharinfo(3),mf_pvp_noguild)) { heal (1-Hp),0; } else { heal -999,0; } }
|
||||
4264,Wind_Ghost_Card,Wind Ghost Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"WZ_JUPITEL",3+7*(getskilllv("WZ_JUPITEL")==10),20; },{},{}
|
||||
4265,Li_Me_Mang_Ryang_Card,Jing Guai Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12033,RC_Angel,100; },{},{}
|
||||
4266,Eclipse_Card,Eclipse Card,6,20,,10,,,,,,,,4,,,,,{ bonus bVit,1; },{},{}
|
||||
@ -1901,7 +1901,7 @@
|
||||
4273,Shellfish_Card,Shell Fish Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus2 bAddDamageClass,1073,30; },{},{}
|
||||
4274,Zombie_Master_Card,Zombie Master Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPGainRace,RC_Undead,5; },{},{ heal 0,-5; }
|
||||
4275,Zombie_Prisoner_Card,Zombie Prisoner Card,6,20,,10,,,,,,,,64,,,,,{ bonus2 bSubRace,RC_Undead,-20; bonus2 bExpAddRace,RC_Undead,10; },{},{}
|
||||
4276,Lord_Of_Death_Card,Lord of The Dead Card,6,20,,10,,,,,,,,2,,,,,{ bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bWeaponComaRace,RC_NonBoss,1; },{},{}
|
||||
4276,Lord_Of_Death_Card,Lord of The Dead Card,6,20,,10,,,,,,,,2,,,,,{ bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bWeaponComaClass,Class_Normal,1; },{},{}
|
||||
4277,Zherlthsh_Card,Zealotus Card,6,20,,10,,,,,,,,32,,,,,{ bonus bLuk,2; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; bonus2 bSkillAtk,"DC_THROWARROW",10; },{},{}
|
||||
4278,Gibbet_Card,Gibbet Card,6,20,,10,,,,,,,,769,,,,,{ if(getrefine()<6) bonus bMdef,5; },{},{}
|
||||
4279,Deleter_Card,Earth Deleter Card,6,20,,10,,,,,,,,16,,,,,{ bonus bSPrecovRate,-100; bonus bSPGainValue,10; },{},{ heal 0,-100; }
|
||||
@ -1930,7 +1930,7 @@
|
||||
4302,Tao_Gunka_Card,Tao Gunka Card,6,20,,10,,,,,,,,16,,,,,{ bonus bMaxHPrate,100; bonus bDef,-50; bonus bMdef,-50; },{},{}
|
||||
4303,Whisper_Boss_Card,Giant Whisper Card,6,20,,10,,,,,,,,4,,,,,{ bonus bFlee,10; if(readparam(bStr)>=80) bonus bBaseAtk,20; if(readparam(bVit)>=80) bonus bMaxHPrate,3; if(readparam(bLuk)>=80) bonus bCritical,3; },{},{}
|
||||
4304,Tamruan_Card,Tamruan Card,6,20,,10,,,,,,,,32,,,,,{ bonus bDef,2; bonus2 bSkillAtk,"CR_SHIELDCHARGE",10; bonus2 bSkillAtk,"CR_SHIELDBOOMERANG",10; },{},{}
|
||||
4305,Turtle_General_Card,Turtle General Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddRace,RC_NonBoss,20; bonus2 bAddRace,RC_Boss,20; bonus3 bAutoSpell,"SM_MAGNUM",10,30; },{},{}
|
||||
4305,Turtle_General_Card,Turtle General Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bAddClass,Class_All,20; bonus3 bAutoSpell,"SM_MAGNUM",10,30; },{},{}
|
||||
4306,Toad_Card,Toad Card,6,20,,10,,,,,,,,4,,,,,{ bonus bFlee2,1; },{},{}
|
||||
4307,Kind_Of_Beetle_Card,Beetle King Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPGainRace,RC_Fish,5; },{},{ heal 0,-5; }
|
||||
4308,Tri_Joint_Card,Tri Joint Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPGainRace,RC_Formless,5; },{},{ heal 0,-5; }
|
||||
@ -1990,7 +1990,7 @@
|
||||
4362,Harword_Card,Howard Alt-Eisen Card,6,20,,10,,,,,,,,2,,,,,{ bonus bAspdRate,-5; bonus bHit,30; },{},{}
|
||||
4363,B_Magaleta_Card,High Priest Card,6,20,,10,,,,,,,,16,,,,,{ bonus5 bAutoSpellWhenHit,"HP_ASSUMPTIO",1,50,BF_WEAPON|BF_MAGIC,0; },{},{}
|
||||
4364,Magaleta_Card,Margaretha Sorin Card,6,20,,10,,,,,,,,769,,,,,{ bonus bInt,1; bonus5 bAutoSpellWhenHit,"PR_LEXDIVINA",5,150,BF_MAGIC,1; },{},{}
|
||||
4365,B_Katrinn_Card,High Wizard Card,6,20,,10,,,,,,,,769,,,,,{ bonus bIgnoreMDefRace,RC_NonBoss; bonus bCastrate,100; bonus bSPrecovRate,-100; },{},{ heal 0,-2000; }
|
||||
4365,B_Katrinn_Card,High Wizard Card,6,20,,10,,,,,,,,769,,,,,{ bonus bIgnoreMDefClass,Class_Normal; bonus bCastrate,100; bonus bSPrecovRate,-100; },{},{ heal 0,-2000; }
|
||||
4366,Katrinn_Card,Kathryne Keyron Card,6,20,,10,,,,,,,,769,,,,,{ bonus bCastrate,getrefine()*-1; if(getrefine()>=9) { bonus bMatkRate,2; } },{},{}
|
||||
4367,B_Shecil_Card,Sniper Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bHpDrainRate,50,20; bonus bHPrecovRate,-10; },{},{}
|
||||
4368,Shecil_Card,Cecil Damon Card,6,20,,10,,,,,,,,2,,,,,{ bonus bAspdRate,5; bonus bHit,-30; },{},{}
|
||||
@ -1999,7 +1999,7 @@
|
||||
4371,Archdam_Card,Archdam Card,6,20,,10,,,,,,,,16,,,,,{ bonus bBaseAtk,10; bonus bCastrate,20; },{},{}
|
||||
4372,Bacsojin_Card,White Lady Card,6,20,,10,,,,,,,,769,,,,,{ bonus bHealPower,30; bonus bUseSPrate,15; },{},{}
|
||||
4373,Chung_E_Card,Green Maiden Card,6,20,,10,,,,,,,,4,,,,,{ bonus bLuk,getrefine()-5; bonus bCritical,getrefine(); },{},{}
|
||||
4374,Apocalips_H_Card,Vesper Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDex,2; bonus2 bIgnoreMdefRate,RC_Boss,30; },{},{}
|
||||
4374,Apocalips_H_Card,Vesper Card,6,20,,10,,,,,,,,769,,,,,{ bonus bDex,2; bonus2 bIgnoreMdefClass,Class_Boss,30; },{},{}
|
||||
4375,Orc_Baby_Card,Orc Baby Card,6,20,,10,,,,,,,,4,,,,,{ if(getrefine()>=9) { bonus2 bSubEle,Ele_Neutral,15; bonus bFlee,15; } else { bonus2 bSubEle,Ele_Neutral,10; bonus bFlee,10; } },{},{}
|
||||
4376,Lady_Tanee_Card,Lady Tanee Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMaxHPrate,-40; bonus bMaxSPrate,50; bonus2 bAddMonsterDropItem,513,200; bonus2 bAddItemHealRate,513,100; },{},{}
|
||||
4377,Green_Iguana_Card,Grove Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAddMonsterDropItem,12063,RC_Formless,50; },{},{}
|
||||
@ -2024,7 +2024,7 @@
|
||||
4396,Tha_Odium_Card,Odium of Thanatos Card,6,20,,10,,,,,,,,64,,,,,{ bonus bAgi,getrefine()-5; },{},{}
|
||||
4397,Tha_Despero_Card,Despero of Thanatos Card,6,20,,10,,,,,,,,32,,,,,{ bonus bInt,getrefine()-6; },{},{}
|
||||
4398,Tha_Dolor_Card,Dolor of Thanatos Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bMagicAddRace,RC_Angel,10; },{},{}
|
||||
4399,Thanatos_Card,Memory of Thanatos Card,6,20,,10,,,,,,,,2,,,,,{ bonus bDefRatioAtkRace,RC_Boss; bonus bDefRatioAtkRace,RC_NonBoss; bonus bSPDrainValue,-1; bonus bDef,-30; bonus bFlee,-30; },{},{}
|
||||
4399,Thanatos_Card,Memory of Thanatos Card,6,20,,10,,,,,,,,2,,,,,{ bonus bDefRatioAtkClass,Class_All; bonus bSPDrainValue,-1; bonus bDef,-30; bonus bFlee,-30; },{},{}
|
||||
4400,Aliza_Card,Aliza Card,6,20,,10,,,,,,,,16,,,,,{ bonus3 bAutoSpellWhenHit,"DC_WINKCHARM",1,50+50*(BaseJob==Job_Dancer); },{},{}
|
||||
4401,Alicel_Card,Alicel Card,6,20,,10,,,,,,,,16,,,,,{ bonus bFlee,10; bonus bDef,-5; },{},{}
|
||||
4402,Aliot_Card,Aliot Card,6,20,,10,,,,,,,,4,,,,,{ if(BaseClass==Job_Swordman||BaseClass==Job_Merchant||BaseClass==Job_Thief) { bonus bStr,2; bonus bMaxHPrate,5; } if(BaseClass==Job_Mage||BaseClass==Job_Archer||BaseClass==Job_Acolyte) { bonus bInt,2; bonus bMaxSPrate,5; } },{},{}
|
||||
@ -2032,13 +2032,13 @@
|
||||
4404,Skogul_Card,Skogul Card,6,20,,10,,,,,,,,16,,,,,{ bonus3 bAddEffWhenHit,Eff_Bleeding,3000,ATF_TARGET|ATF_SELF; },{},{}
|
||||
4405,Frus_Card,Frus Card,6,20,,10,,,,,,,,16,,,,,{ bonus bMagicDamageReturn,getrefine()*2; if(BaseClass==Job_Mage) bonus bMdef,3; },{},{}
|
||||
4406,Skeggiold_Card,Skeggiold Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bMagicAddRace,RC_Demon,2; },{},{}
|
||||
4407,Randgris_Card,Randgris Card,6,20,,10,,,,,,,,2,,,,,{ bonus bUnbreakableWeapon,0; bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; bonus3 bAutoSpell,"SA_DISPELL",1,50; },{},{}
|
||||
4407,Randgris_Card,Randgris Card,6,20,,10,,,,,,,,2,,,,,{ bonus bUnbreakableWeapon,0; bonus2 bAddClass,Class_All,10; bonus3 bAutoSpell,"SA_DISPELL",1,50; },{},{}
|
||||
4408,Gloom_Under_Night_Card,Gloom Under Night Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEle,Ele_Holy,40; bonus2 bAddEle,Ele_Dark,40; bonus2 bAddRace,RC_Angel,40; bonus2 bAddRace,RC_Demon,40; },{},{}
|
||||
4409,Agav_Card,Agav Card,6,20,,10,,,,,,,,16,,,,,{ bonus bMatkRate,5; bonus bDef,-10; if(BaseClass==Job_Mage) bonus bMaxSP,100; },{},{}
|
||||
4410,Echio_Card,Echio Card,6,20,,10,,,,,,,,16,,,,,{ bonus bBaseAtk,15; if(BaseClass==Job_Swordman) bonus bMaxHP,500; },{},{}
|
||||
4411,Vanberk_Card,Vanberk Card,6,20,,10,,,,,,,,769,,,,,{ bonus bStr,2; autobonus "{ bonus bCritical,100; }",5,5000,0,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
|
||||
4412,Isilla_Card,Isilla Card,6,20,,10,,,,,,,,769,,,,,{ bonus bInt,2; autobonus "{ bonus bCastrate,-50; bonus bFlee,30; }",50,5000,BF_MAGIC,"{ specialeffect2 EF_SUFFRAGIUM; }"; },{},{}
|
||||
4413,Hodremlin_Card,Hodremlin Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubSize,Size_Small,15; bonus2 bSubSize,Size_Medium,15; bonus2 bSubSize,Size_Large,15; autobonus2 "{ bonus bFlee2,30; }",3,10000,BF_WEAPON|BF_MAGIC,"{ specialeffect2 EF_WIND; }"; },{},{}
|
||||
4413,Hodremlin_Card,Hodremlin Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubSize,Size_All,15; autobonus2 "{ bonus bFlee2,30; }",3,10000,BF_WEAPON|BF_MAGIC,"{ specialeffect2 EF_WIND; }"; },{},{}
|
||||
4414,Seeker_Card,Seeker Card,6,20,,10,,,,,,,,32,,,,,{ skill "MG_STONECURSE",1; bonus2 bResEff,Eff_Stone,3000; bonus bMdef,10; },{},{}
|
||||
4415,Snowier_Card,Snowier Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddMonsterDropItem,536,2000; bonus2 bAddItemHealRate,536,100; },{},{}
|
||||
4416,Siroma_Card,Siroma Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bSkillAtk,"MG_COLDBOLT",25; bonus2 bCastrate,"MG_COLDBOLT",-25; },{},{}
|
||||
@ -2051,7 +2051,7 @@
|
||||
4423,Galion_Card,Galion Card,6,20,,10,,,,,,,,136,,,,,{ bonus bHit,5; bonus2 bAddEle,Ele_Water,5; },{},{}
|
||||
4424,Stapo_Card,Stapo Card,6,20,,10,,,,,,,,136,,,,,{ skill "TF_PICKSTONE",1; skill "TF_THROWSTONE",1; },{},{}
|
||||
4425,Atroce_Card,Atroce Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,25; autobonus "{ bonus bAspdRate,100; }",5,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
|
||||
4426,Byorgue_Card,Byorgue Card,6,20,,10,,,,,,,,16,,,,,{ if(BaseJob==Job_Rogue) { bonus bMatkRate,10; bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; } },{},{}
|
||||
4426,Byorgue_Card,Byorgue Card,6,20,,10,,,,,,,,16,,,,,{ if(BaseJob==Job_Rogue) { bonus bMatkRate,10; bonus2 bAddClass,Class_All,10; } },{},{}
|
||||
4427,Sword_Guardian_Card,Sword Guardian Card,6,20,,10,,,,,,,,2,,,,,{ if(getiteminfo(getequipid(EQI_HAND_R),11)==2||getiteminfo(getequipid(EQI_HAND_R),11)==3) { bonus bHit,5; bonus bCritical,5; bonus2 bSkillAtk,62,25; } },{},{}
|
||||
4428,Bow_Guardian_Card,Bow Guardian Card,6,20,,10,,,,,,,,2,,,,,{ if(getiteminfo(getequipid(EQI_HAND_R),11)==11) { bonus bHit,5; bonus bCritical,5; bonus2 bSkillAtk,47,50; } },{},{}
|
||||
4429,Salamander_Card,Salamander Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSkillAtk,"WZ_FIREPILLAR",40; bonus2 bSkillAtk,"WZ_METEOR",40; },{},{}
|
||||
@ -2065,7 +2065,7 @@
|
||||
4437,Hell_Poodle_Card,Hell Poodle Card,6,20,,10,,,,,,,,136,,,,,{ bonus bHit,1; bonus2 bAddItemHealRate,517,100; bonus3 bAddEff,Eff_Bleeding,50,ATF_SHORT; },{},{}
|
||||
4438,Banshee_Card,Banshee Card,6,20,,10,,,,,,,,769,,,,,{ if(BaseClass==Job_Mage){ bonus bMaxSP,100; bonus bMaxHP,-100; bonus2 bSkillAtk,"MG_NAPALMBEAT",20; bonus2 bSkillAtk,"MG_SOULSTRIKE",20; bonus2 bSkillAtk,"HW_NAPALMVULCAN",20; } },{},{}
|
||||
4439,Flame_Skull_Card,Flame Skull Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bResEff,Eff_Blind,3000; bonus2 bResEff,Eff_Stun,3000; bonus2 bResEff,Eff_Curse,3000; bonus2 bResEff,Eff_Stone,3000; bonus2 bAddEffWhenHit,Eff_Blind,500; bonus2 bAddEffWhenHit,Eff_Stun,500; bonus2 bAddEffWhenHit,Eff_Curse,500; bonus2 bAddEffWhenHit,Eff_Stone,500; },{},{}
|
||||
4440,Necromancer_Card,Necromancer Card,6,20,,10,,,,,,,,2,,,,,{ if(getiteminfo(getequipid(EQI_HAND_R),11)==10) { bonus bInt,1; bonus bIgnoreMdefRate,2; } },{},{}
|
||||
4440,Necromancer_Card,Necromancer Card,6,20,,10,,,,,,,,2,,,,,{ if(getiteminfo(getequipid(EQI_HAND_R),11)==10) { bonus bInt,1; bonus2 bIgnoreMdefClassRate,Class_Normal,2; bonus2 bIgnoreMdefClassRate,Class_Boss,2; } },{},{}
|
||||
4441,Fallen_Bishop_Card,Fallen Bishop Hibram Card,6,20,,10,,,,,,,,64,,,,,{ bonus bMatkRate,10; bonus bMaxSPrate,-50; bonus2 bMagicAddRace,RC_Angel,50; bonus2 bMagicAddRace,RC_DemiHuman,50; },{},{}
|
||||
4442,Tatacho_Card,Tatacho Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubEle,Ele_Neutral,20; bonus2 bAddEle,Ele_Neutral,5; },{},{}
|
||||
4443,Aqua_Elemental_Card,Aqua Elemental Card,6,20,,10,,,,,,,,32,,,,,{ bonus2 bSubEle,Ele_Water,20; bonus2 bAddEle,Ele_Water,5; },{},{}
|
||||
@ -2146,8 +2146,8 @@
|
||||
4763,Evasion12,FLEE+12,6,20,,10,,,,,,,,16,,,,,{ bonus bFlee,12; },{},{}
|
||||
4764,Critical5,CRI+5,6,20,,10,,,,,,,,16,,,,,{ bonus bCritical,5; },{},{}
|
||||
4765,Critical7,CRI+7,6,20,,10,,,,,,,,16,,,,,{ bonus bCritical,7; },{},{}
|
||||
4766,Atk2,ATK+2%,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; },{},{}
|
||||
4767,Atk3,ATK+3%,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; },{},{}
|
||||
4766,Atk2,ATK+2%,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddClass,Class_All,2; },{},{}
|
||||
4767,Atk3,ATK+3%,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddClass,Class_All,3; },{},{}
|
||||
4768,Str1_J,STR+1,6,20,,10,,,,,,,,16,,,,,{},{},{}
|
||||
4769,Str2_J,STR+2,6,20,,10,,,,,,,,16,,,,,{},{},{}
|
||||
4770,Str3_J,STR+3,6,20,,10,,,,,,,,16,,,,,{},{},{}
|
||||
@ -2378,7 +2378,7 @@
|
||||
5208,Rideword_Hat,Rideword Hat,4,20,,300,,2,,1,0xFFFFFFFE,7,2,256,,40,1,262,{ bonus2 bHPDrainRate,50,8; bonus2 bSPDrainRate,10,4; bonus2 bHPLossRate,10,5000; },{},{}
|
||||
5209,Yellow_Baseball_Cap,Love Dad Cap,4,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,0,1,263,{},{},{}
|
||||
5210,Flying_Angel,Flapping Angel Wing,4,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,10,1,264,{ bonus bCastrate,-3; bonus bAspdRate,3; bonus bInt,1; bonus bAgi,1; },{},{}
|
||||
5211,Dress_Hat,Dress Hat,4,0,,200,,2,,1,0xFFFFFFFF,7,2,256,,20,1,265,{ bonus bMdef,7; bonus bStr,1; bonus bInt,1; bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bMAtkRate,2; bonus bHealPower,5; if(getrefine()>=7) { bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1; bonus bMAtkRate,1; bonus bHealPower,1; } },{},{}
|
||||
5211,Dress_Hat,Dress Hat,4,0,,200,,2,,1,0xFFFFFFFF,7,2,256,,20,1,265,{ bonus bMdef,7; bonus bStr,1; bonus bInt,1; bonus2 bAddClass,Class_All,2; bonus bMAtkRate,2; bonus bHealPower,5; if(getrefine()>=7) { bonus2 bAddClass,Class_All,1; bonus bMAtkRate,1; bonus bHealPower,1; } },{},{}
|
||||
5212,Satellite_Hairband,Satellite Hairband,4,0,,1000,,3,,1,0xFFFFFFFF,7,2,256,,30,1,266,{ bonus bMaxHP,50; bonus bMaxSP,10; skill "AL_RUWACH",1; },{},{ sc_end SC_RUWACH; }
|
||||
5213,Black_Bunny_Band,Sheila Hairnet,4,0,,200,,2,,0,0xFFFFFFFF,7,2,256,,1,1,267,{ bonus bAgi,2; bonus bMdef,3; },{},{}
|
||||
5214,Moonlight_Flower_Hat,Moonlight Flower Hat,4,0,,200,,3,,0,0xFFFFFFFF,7,2,768,,1,1,268,{ bonus bDex,2; bonus3 bAutoSpell,"AL_INCAGI",1,50; },{},{}
|
||||
@ -2438,7 +2438,7 @@
|
||||
5268,Lord_Circlet_C,Grand Circlet,4,1,,0,,10,,0,0xFFFFFFFE,7,2,256,,1,0,93,{ bonus bStr,3; bonus bInt,3; bonus bLuk,3; bonus bMdef,4; },{},{}
|
||||
5269,Flying_Angel_,Flapping Angel Wing,4,20,,300,,1,,0,0xFFFFFFFF,7,2,256,,10,1,264,{ bonus bInt,1; bonus bAgi,1; bonus bAspdRate,3; bonus bSpeedRate,25; },{},{}
|
||||
5270,Fallen_Leaves_,Autumn Leaves,4,20,,100,,1,,1,0xFFFFFFFF,7,2,256,,0,1,241,{ bonus bFlee2,5; },{},{}
|
||||
5271,Chinese_Crown_,Phoenix Crown,4,20,,500,,4,,1,0xFFFFFFFF,7,2,768,,0,1,221,{ bonus bMdef,3; bonus2 bSubRace,RC_Boss,getrefine(); },{},{}
|
||||
5271,Chinese_Crown_,Phoenix Crown,4,20,,500,,4,,1,0xFFFFFFFF,7,2,768,,0,1,221,{ bonus bMdef,3; bonus2 bSubClass,Class_Boss,getrefine(); },{},{}
|
||||
5272,Tongue_Mask_,Tongue Mask,4,20,,100,,2,,0,0xFFFFFFFF,7,2,513,,0,0,253,{ bonus3 bAutoSpell,"SM_PROVOKE",5,50; },{},{}
|
||||
5273,Happy_Wig,Happy Wig,4,20,,100,,1,,0,0xFFFFFFFF,7,2,768,,0,1,305,{ bonus bSpeedRate,25; bonus bDef,4; skill "TF_HIDING",1; },{},{ sc_end SC_HIDING; }
|
||||
5274,Shiny_Wig,Shiny Wig,4,20,,100,,1,,0,0xFFFFFFFF,7,2,768,,0,1,306,{ bonus bSpeedRate,25; bonus bDef,4; skill "TF_HIDING",1; },{},{ sc_end SC_HIDING; }
|
||||
@ -2492,7 +2492,7 @@
|
||||
5322,Scarf,Kerchief,4,20,,100,,2,,0,0xFFFFFFFF,7,2,256,,24,1,343,{ bonus bMdef,2; bonus bFlee,5; },{},{}
|
||||
5323,Misstrance_Crown,Misstrance Crown,4,20,,0,,10,,0,0xFFFFFFFF,7,2,256,,0,0,165,{ bonus bAllStats,2; },{},{}
|
||||
5324,Little_Angel_Doll,Little Angel Doll,4,20,,300,,2,,0,0xFFFFFFFF,7,2,256,,10,1,344,{ bonus bDex,3; bonus4 bAutoSpellWhenHit,"CR_GRANDCROSS",3,30,0; },{},{}
|
||||
5325,Robo_Eye,Robo Eye,4,20,,200,,2,,0,0xFFFFFFFF,7,2,512,,10,0,345,{ bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bMatkRate,2; bonus bDex,1; },{},{}
|
||||
5325,Robo_Eye,Robo Eye,4,20,,200,,2,,0,0xFFFFFFFF,7,2,512,,10,0,345,{ bonus2 bAddClass,Class_All,2; bonus bMatkRate,2; bonus bDex,1; },{},{}
|
||||
5326,Masquerade_C,Masquerade C,4,1,,0,,1,,0,0xFFFFFFFF,7,2,512,,0,0,78,{ bonus2 bAddRace,RC_DemiHuman,7; },{},{}
|
||||
5327,Orc_Hero_Helm_C,Refined Helmet of Orc Hero,4,1,,0,,10,,0,0xFFFFFFFE,7,2,768,,0,0,178,{ bonus bStr,5; bonus bVit,3; },{},{}
|
||||
5328,Evil_Wing_Ears_C,Evil Wing Ears C,4,1,,0,,2,,0,0xFFFFFFFF,7,2,512,,0,0,152,{ bonus bStr,1; },{},{}
|
||||
@ -2530,7 +2530,7 @@
|
||||
5360,Whikebain_Ears,Hyuke's Black Cat Ears,4,20,,200,,2,,0,0xFFFFFFFF,7,2,256,,45,1,368,{ bonus bFlee,10; bonus bCritical,3; bonus bCritAtkRate,10; bonus bDefRate,-50; bonus bDef2Rate,-50; },{},{}
|
||||
5361,Gang_Scarf,Gangster Scarf,4,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,60,0,369,{ bonus bBaseAtk,5; if(BaseJob==Job_Rogue) skill "RG_GANGSTER",1; },{},{}
|
||||
5362,Ninja_Scroll,Ninja Scroll,4,20,,200,,0,,0,0xFFFFFFFF,7,2,1,,60,0,370,{ bonus bMatkRate,1; },{},{}
|
||||
5363,Helm_Of_Abyss,Helm Of Abyss,4,20,,1000,,2,,1,0x000654E2,7,2,256,,70,1,371,{ bonus2 bSubRace,RC_DemiHuman,-10; bonus2 bSubRace,RC_Boss,10; },{},{}
|
||||
5363,Helm_Of_Abyss,Helm Of Abyss,4,20,,1000,,2,,1,0x000654E2,7,2,256,,70,1,371,{ bonus2 bSubRace,RC_DemiHuman,-10; bonus2 bSubClass,Class_Boss,10; },{},{}
|
||||
5364,Dark_Snake_Lord_Hat,Evil Snake Lord Hat,4,20,,500,,2,,1,0xFFFFFFFF,7,2,256,,60,1,372,{ bonus bStr,1; bonus bInt,1; bonus bAgi,2; },{},{}
|
||||
5365,Fried_Egg,Magnolia Hat,4,20,,100,,3,,1,0xFFFFFFFF,7,2,256,,1,0,373,{ bonus2 bResEff,Eff_Stun,500; skill "HT_FLASHER",1; },{},{}
|
||||
5366,Hat_0f_King,Love Dad Bandana,4,20,,200,,3,,0,0xFFFFFFFF,7,2,256,,0,1,374,{ bonus bAllStats,5; },{},{}
|
||||
@ -2585,7 +2585,7 @@
|
||||
5415,Poring_Cake_Cap,Poring Cake Hat,4,20,,1000,,5,,0,0xFFFFFFFF,7,2,256,,40,1,417,{ bonus bMdef,5; bonus bCritical,5; bonus bFlee,5; bonus bFlee2,5; bonus bAspdRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; },{},{}
|
||||
5416,Beer_Cap,Beer Hat,4,20,,600,,2,,0,0xFFFFFFFE,7,2,256,,18,1,418,{ bonus bFlee2,5; skill "SM_RECOVERY",3; skill "MG_SRECOVERY",3; },{},{}
|
||||
5417,Crown_Parrot,Crown Parrots,4,20,,200,,1,,1,0xFFFFFFFF,7,2,256,,0,0,419,{ bonus bInt,1; bonus2 bResEff,Eff_Silence,10000; bonus3 bAutoSpell,"DC_SCREAM",1,50; },{},{}
|
||||
5418,Soldier_Hat,Legionnaire Hat,4,20,,400,,4,,1,0xFFFFFFFF,7,2,256,,0,1,420,{ bonus bStr,1; bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bUseSPrate,10; },{},{}
|
||||
5418,Soldier_Hat,Legionnaire Hat,4,20,,400,,4,,1,0xFFFFFFFF,7,2,256,,0,1,420,{ bonus bStr,1; bonus2 bAddClass,Class_All,3; bonus bUseSPrate,10; },{},{}
|
||||
5419,Evolved_Leaf,Leaves Of Grass,4,20,,100,,0,,0,0xFFFFFFFF,7,2,1,,0,0,57,{ bonus bVit,1; bonus2 bSubRace,RC_Plant,5; },{},{}
|
||||
5420,Mask_Of_Ifrit,Mask Of Ifrit,4,,,0,,8,,0,0xFFFFFFFE,7,2,769,,70,0,421,{ bonus bStr,1; bonus bInt,1; bonus bMdef,5; bonus2 bSubEle,Ele_Fire,10; bonus2 bSubEle,Ele_Water,-10; skill "MG_SIGHT",1; bonus3 bAutoSpellWhenHit,"WZ_METEOR",3,50; bonus3 bAutoSpell,"MG_FIREBOLT",3,50; },{},{ sc_end SC_SIGHT; }
|
||||
5421,Ifrit's_Ear,Ears Of Ifrit,4,20,,0,,0,,0,0xFFFFFFFE,7,2,512,,70,0,422,{ bonus bStr,1; bonus bMdef,3; bonus2 bSkillAtk,"MG_FIREBOLT",2; bonus2 bSkillAtk,"WZ_FIREPILLAR",2; bonus2 bSkillAtk,"WZ_METEOR",2; bonus2 bSkillAtk,"SM_BASH",2; bonus2 bSkillAtk,"SM_MAGNUM",2; bonus2 bSkillAtk,"KN_PIERCE",2; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,-5; },{},{}
|
||||
@ -2621,7 +2621,7 @@
|
||||
5451,Dragonhelm_Gold,RWC 2008 Dragon Helm Gold,4,20,,2500,,7,,1,0xFFFFFFFF,7,2,256,,1,0,452,{ bonus bAspdRate,10; bonus bAllStats,3; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
|
||||
5452,Dragonhelm_Silver,RWC 2008 Dragon Helm Silver,4,20,,2500,,5,,1,0xFFFFFFFF,7,2,256,,1,0,453,{ bonus bAspdRate,7; bonus bAllStats,2; bonus2 bAddRace,RC_DemiHuman,3; },{},{}
|
||||
5453,Dragonhelm_Copper,RWC 2008 Dragon Helm Copper,4,20,,2500,,0,,1,0xFFFFFFFF,7,2,256,,1,0,454,{ bonus bAspdRate,5; bonus bAllStats,2; bonus2 bAddRace,RC_DemiHuman,1; },{},{}
|
||||
5454,Dog_Cap_,Puppy Hat,4,20,,500,,3,,1,0xFFFFFFFF,7,2,256,,0,1,234,{ bonus bStr,1; bonus bInt,1; autobonus "{ bonus bCritical,100; }",10,3000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; autobonus "{ bonus bIgnoreMdefRate,100; }",10,3000,BF_MAGIC,"{ specialeffect2 EF_MAGICALATTHIT; }"; },{},{}
|
||||
5454,Dog_Cap_,Puppy Hat,4,20,,500,,3,,1,0xFFFFFFFF,7,2,256,,0,1,234,{ bonus bStr,1; bonus bInt,1; autobonus "{ bonus bCritical,100; }",10,3000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; autobonus "{ bonus2 bIgnoreMdefClassRate,Class_Normal,100; bonus2 bIgnoreMdefClassRate,Class_Boss,100; }",10,3000,BF_MAGIC,"{ specialeffect2 EF_MAGICALATTHIT; }"; },{},{}
|
||||
5455,Geographer_Band_,Decorative Geographer,4,20,,500,,1,,1,0xFFFFFFFF,7,2,256,,0,1,238,{ bonus bInt,1; bonus3 bAutoSpell,"AL_HEAL",5,50; bonus3 bAutoSpellWhenHit,"AL_HEAL",5,30; },{},{}
|
||||
5456,Vacation_Hat_,Summer Hat,4,20,,200,,0,,1,0xFFFFFFFF,7,2,256,,0,1,315,{ bonus bVit,5; bonus bHPrecovRate,20; bonus bSPrecovRate,15; },{},{}
|
||||
5457,Spring_Rabbit_Hat,Moon Rabbit Hat,4,20,,300,,2,,1,0xFFFFFFFF,7,2,256,,1,1,455,{ bonus bAgi,3; bonus bBaseAtk,5; bonus bMatkRate,5; if(getrefine()>4) { bonus bBaseAtk,getrefine()-4; bonus bMatkRate,getrefine()-4; } },{},{}
|
||||
@ -2657,7 +2657,7 @@
|
||||
5487,J_Poringcake_Hat,Poring Cake Hat,4,20,,500,,1,,0,0xFFFFFFFF,7,2,256,,0,1,417,{ bonus bLuk,2; },{},{}
|
||||
5488,J_Twin_Santahat,Twin Santa Hat,4,20,,100,,1,,0,0xFFFFFFFF,7,2,256,,0,1,390,{ bonus bLuk,1; bonus bMdef,1; },{},{}
|
||||
5489,Love_Daddy,Love Daddy Hat,4,20,,100,,0,,0,0xFFFFFFFF,7,2,256,,0,1,484,{ bonus bDex,2; },{},{}
|
||||
5490,Anubis_Helm,Anubis Helm,4,20,,0,,3,,0,0xFFFFFFFF,7,2,256,,70,0,485,{ bonus bMdef,5; bonus2 bSubRace,RC_Boss,10; bonus bHealpower2,10; bonus bAddItemHealRate,10; },{},{}
|
||||
5490,Anubis_Helm,Anubis Helm,4,20,,0,,3,,0,0xFFFFFFFF,7,2,256,,70,0,485,{ bonus bMdef,5; bonus2 bSubClass,Class_Boss,10; bonus bHealpower2,10; bonus bAddItemHealRate,10; },{},{}
|
||||
5491,Hat_Of_Outlaw,Bandit Hat,4,20,,800,,3,,1,0xFFFFFFFF,7,2,256,,0,1,486,{ bonus bStr,2; bonus2 bSubEle,Ele_Fire, 10; },{},{}
|
||||
5492,Boy's_Cap_I,Student Cap,4,0,,0,,5,,0,0xFFFFFFFE,7,2,256,,0,0,102,{ bonus bMdef,3; bonus2 bAddRace,RC_DemiHuman,5; },{},{}
|
||||
5493,Ulle_Cap_I,Ulle's Cap,4,0,,0,,3,,0,0xFFFFFFFE,7,2,256,,0,0,254,{ bonus bDex,2; bonus bAgi,1; },{},{}
|
||||
@ -2687,7 +2687,7 @@
|
||||
5517,Hawk_Eyes02,Hawk Eyes,4,10,,100,,0,,0,0x00080808,7,2,512,,60,0,23,{ bonus bDex,1; },{},{}
|
||||
5518,L_Magestic_Goat2,Gigantic Majestic Goat,4,20,,800,,5,,0,0xFFFFFFFF,7,2,256,,50,1,513,{ bonus2 bSubRace,RC_DemiHuman,12; bonus bBaseAtk,(JobLevel*2)/7; },{},{}
|
||||
5519,Peacock_Feather,Peacock Feather,4,20,,800,,4,,1,0xFFFFFFFF,7,2,256,,1,1,514,{ bonus bInt,2; },{},{}
|
||||
5520,Rabbit_Earplug,Rabbit Earplugs,4,,,400,,0,,1,0xFFFFFFFF,7,2,768,,1,1,515,{ bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bMatkRate,4; },{},{}
|
||||
5520,Rabbit_Earplug,Rabbit Earplugs,4,,,400,,0,,1,0xFFFFFFFF,7,2,768,,1,1,515,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; },{},{}
|
||||
5521,Angry_Mouth_C,Angry Mouth,4,0,,0,,0,,0,0xFFFFFFFF,7,2,1,,0,0,194,{ bonus bDelayRate,-3; },{},{}
|
||||
5522,Fanta_Zero_Lemon_Hat,Fanta Zero Lemon Hat,4,20,,100,,4,,1,0xFFFFFFFF,7,2,256,,0,1,516,{},{},{}
|
||||
5523,Sakura_Mist_Hat,Sakura Mist Hat,4,20,,100,,4,,1,0xFFFFFFFF,7,2,256,,0,1,517,{ bonus bDex,1; },{},{}
|
||||
@ -2734,7 +2734,7 @@
|
||||
5564,Crown_Of_Deceit,Crown of Deceit,4,20,,300,,3,,1,0xFFFFFFFF,7,2,768,,85,1,544,{ bonus bInt,4; bonus bCastRate,-10; },{},{}
|
||||
5565,Dragon_Arhat_Mask,Dragon Arhat Mask,4,0,,0,,5,,0,0xFFFFFFFF,7,2,513,,1,0,545,{ bonus2 bAddRace,RC_DemiHuman,10; },{},{}
|
||||
5566,Tiger_Arhat_Mask,Tiger Arhat Mask,4,0,,0,,1,,0,0xFFFFFFFF,7,2,513,,1,0,546,{ bonus2 bAddRace,RC_DemiHuman,2; },{},{}
|
||||
5567,Bright_Fury,Bright Fury,4,20,,300,,1,,1,0xFFFFFFFF,7,2,256,,1,1,548,{ bonus bStr,1; bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bAspdRate,2; },{},{}
|
||||
5567,Bright_Fury,Bright Fury,4,20,,300,,1,,1,0xFFFFFFFF,7,2,256,,1,1,548,{ bonus bStr,1; bonus2 bAddClass,Class_All,2; bonus bAspdRate,2; },{},{}
|
||||
5568,Rabbit_Bonnet,Rabbit Bonnet,4,20,,1000,,1,,1,0xFFFFFFFF,7,2,768,,0,1,549,{ bonus bInt,2; },{},{}
|
||||
5569,Gemini_Diadem,Gemini Diadem,4,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,70,1,550,{ bonus bAgi,2; bonus bMatkRate,2; if(getrefine()>6) { bonus bMdef,7; bonus bMAtkRate,8; bonus2 bSubEle,Ele_Wind,5; } },{},{}
|
||||
5570,Gemini_Crown,Gemini Crown,4,20,,300,,4,,0,0xFFFFFFFF,7,2,256,,70,1,551,{ bonus bAgi,2; bonus bBaseAtk,2; bonus bMdef,5; if(getrefine()>6) { bonus bDef,1; bonus bMatk,15; bonus bFlee,10; bonus2 bSubEle,Ele_Wind,5; } },{},{}
|
||||
@ -2857,7 +2857,7 @@
|
||||
5687,Viking_Helm_Repl,Orc Helm,4,20,,100,,5,,0,0xFFFFFFFF,7,2,256,,1,1,86,{},{},{}
|
||||
//5688,2009_Love_Dad,2009 Love Dad,4,20,,100,,3,,0,0xFFFFFFFF,7,2,256,,1,1,611,{ bonus bVit,2; },{},{}
|
||||
//5689,Queen_Ant_Diadem,Queen Ant Diadem,4,20,,300,,1,,1,0xFFFFFFFF,7,2,256,,75,1,612,{},{},{}
|
||||
5690,Red_Wing_Hat,Red Wing Hat,4,20,,600,,2,,1,0xFFFFFFFF,7,2,256,,50,1,613,{ if(getrefine()>6) { bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bMatkRate,2; } if(getrefine()>8) { bonus2 bAddRace,RC_NonBoss,2; bonus2 bAddRace,RC_Boss,2; bonus bMatkRate,2; } },{},{}
|
||||
5690,Red_Wing_Hat,Red Wing Hat,4,20,,600,,2,,1,0xFFFFFFFF,7,2,256,,50,1,613,{ if(getrefine()>6) { bonus2 bAddClass,Class_All,2; bonus bMatkRate,2; } if(getrefine()>8) { bonus2 bAddClass,Class_All,2; bonus bMatkRate,2; } },{},{}
|
||||
5691,Catain_Bandanna,Sailor's Bandana,4,20,,10,,1,,0,0xFFFFFFFF,7,2,256,,1,1,542,{ bonus bDex,1; bonus2 bSubEle,Ele_Poison,20; },{},{}
|
||||
5692,Sea_Cat_Hat,Sea Cat Hat,4,20,,10,,1,,0,0xFFFFFFFF,7,2,256,,1,1,539,{ bonus bDex,1; },{},{}
|
||||
//5693,No_Fear_Underware,No Fear Underwear,4,0,,0,,10,,0,0xFFFFFFFF,7,2,256,,20,0,30,{ bonus bStr,1; bonus bInt,1; bonus bDex,1; },{},{}
|
||||
@ -2987,7 +2987,7 @@
|
||||
5818,Carnival_Hat,Carnival Hat,4,0,,0,,6,,0,0xFFFFFFFF,7,2,256,,0,1,505,{ bonus bAllStats, 3; },{},{}
|
||||
5819,Carnival_Circlet,Carnival Circlet,4,0,,0,,6,,0,0xFFFFFFFF,7,2,256,,0,1,506,{ bonus bAllStats, 3; },{},{}
|
||||
//5820,Black_Elven_Ears,Black Elven Ears,4,10,,100,,2,,0,0xFFFFFFFF,7,2,512,,0,0,498,{},{},{}
|
||||
5821,Gold_Tulip_Hairpin,Gold Tulip Hairpin,4,10,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,499,{ bonus2 bExpAddRace,RC_Boss,5; bonus2 bExpAddRace,RC_NonBoss,5; },{},{}
|
||||
5821,Gold_Tulip_Hairpin,Gold Tulip Hairpin,4,10,,100,,2,,0,0xFFFFFFFF,7,2,256,,0,1,499,{ bonus2 bExpAddClass,Class_All,5; },{},{}
|
||||
5822,Love_Chick_Hat,Love Chick Hat,4,10000,,100,,4,,0,0xFFFFFFFF,7,2,256,,0,1,500,{ bonus bLuk,4; bonus bMaxHP,100; bonus bMaxSP,100; bonus2 bSubRace,RC_DemiHuman,7; bonus2 bSubRace,RC_Undead,7; },{},{}
|
||||
//5823,Love_Arrow,Love Arrow,4,5000,,100,,1,,0,0xFFFFFFFF,7,2,136,,0,0,0,{ bonus bDex,5; bonus bAgi,5; },{},{}
|
||||
5824,Fools_Day_Hat,Fools Day Hat,4,20,,300,,6,,1,0xFFFFFFFF,7,2,256,,30,1,265,{},{},{}
|
||||
@ -4951,7 +4951,7 @@
|
||||
12402,29Fruit,29Fruit,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 5,5; },{},{}
|
||||
12403,Lucky_Egg2,Lucky Egg2,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
|
||||
12404,Acti_Potion,Acti Potion,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
|
||||
12405,Underripe_Yggseed,Underripe Yggseed,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 30,30; skilleffect "AL_BLESSING",0; sc_start SC_BLESSING,140000,5; },{},{}
|
||||
12405,Underripe_Yggseed,Underripe Yggseed,2,20,,50,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
|
||||
12406,Psychic_ArmorS,Psychic ArmorS,2,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
|
||||
12407,PCBang_Coupon_Box,PCBang Coupon Box,2,0,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
|
||||
12408,Leaf_Cat_Ball,Leaf Cat Ball,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ pet 2081; },{},{}
|
||||
@ -5327,7 +5327,7 @@
|
||||
13014,Hakujin,Hakujin,5,20,,800,120,,1,0,0x02000000,7,2,2,3,42,1,1,{ bonus bInt,2; bonus3 bAutoSpell,"AL_HEAL",1,10; },{},{}
|
||||
13015,Hakujin_,Hakujin,5,20,,800,120,,1,1,0x02000000,7,2,2,3,42,1,1,{ bonus bInt,2; bonus3 bAutoSpell,"AL_HEAL",1,10; },{},{}
|
||||
13016,Poison_Knife_,Poison Knife,5,20,,800,64,,1,2,0x028F5EEE,7,2,2,3,65,1,1,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,3000; },{},{}
|
||||
13017,House_Auger_,Ice Pick,5,20,,600,70,,1,1,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bDefRatioAtkRace,RC_Boss; bonus bDefRatioAtkRace,RC_NonBoss; },{},{}
|
||||
13017,House_Auger_,Ice Pick,5,20,,600,70,,1,1,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bDefRatioAtkClass,Class_All; },{},{}
|
||||
13018,Sucsamad_,Sucsamad,5,20,,800,140,,1,1,0x028F5EEE,7,2,2,4,36,1,1,{ bonus2 bAddEle,Ele_Earth,10; bonus2 bAddEle,Ele_Wind,10; bonus bUnbreakableWeapon,0; },{},{}
|
||||
13019,Ginnungagap_,Ginnungagap,5,20,,700,148,,1,1,0xFE9F7EEF,7,2,2,4,70,1,1,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEff,Eff_Blind,500; bonus2 bAddEff2,Eff_Blind,50; },{},{}
|
||||
13020,Warrior_Balmung_,Warrior's Balmung,5,20,,1000,170,,1,0,0xFFFFFFFF,7,2,2,4,48,1,1,{ bonus bAllStats,5; },{},{}
|
||||
@ -5339,7 +5339,7 @@
|
||||
13026,Moonlight_Sword_C,Moonlight Dagger,5,2,,0,85,,1,0,0x028F5EEE,7,2,2,4,0,0,1,{ bonus bMaxSPrate,10; bonus bSPDrainValue,3; },{},{}
|
||||
13027,Scalpel,Scalpel,5,20,,500,120,,1,3,0x028F5EEE,2,2,2,4,55,1,1,{ bonus2 bAddEff,Eff_Bleeding,500; },{},{}
|
||||
13028,Tooth_Blade,Tooth Blade,5,20,,700,130,,1,1,0x028F5EEE,2,2,2,4,55,1,1,{ if(getrefine()>=9){ bonus3 bAutoSpell,"NPC_SLOWCAST",2,70; } else bonus3 bAutoSpell,"NPC_SLOWCAST",1,50; },{},{}
|
||||
13029,Prinsence_Knife,Prinsense Knife,5,20,,0,120,,1,0,0x028F5EEE,7,2,2,1,0,0,1,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
13029,Prinsence_Knife,Prinsense Knife,5,20,,0,120,,1,0,0x028F5EEE,7,2,2,1,0,0,1,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
13030,Dragon_Killer_,Dragon Killer,5,20,,900,110,,1,2,0xFE9F7EEF,7,2,2,4,60,1,1,{ bonus bIgnoreDefRace,RC_Dragon; bonus2 bExpAddRace,RC_Dragon,10; },{},{}
|
||||
13031,Sword_Breaker_,Swordbreaker,5,20,,1000,70,,1,3,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bBreakWeaponRate,500; },{},{}
|
||||
13032,Mail_Breaker_,Mailbreaker,5,20,,1000,70,,1,3,0x028F5EEE,7,2,2,4,36,1,1,{ bonus bBreakArmorRate,500; },{},{}
|
||||
@ -5347,7 +5347,7 @@
|
||||
13034,Twilight_Desert,Desert Twilight,5,20,,600,130,,1,2,0x00001000,2,2,2,2,70,1,1,{},{},{}
|
||||
13035,Sandstorm,Sandstorm,5,20,,600,50,,1,4,0x00001000,2,2,2,2,70,1,1,{},{},{}
|
||||
13036,BF_Dagger1,Brave Assassin's Damascus,5,20,,0,120,,1,0,0xFE9F7EEF,7,2,2,3,80,1,1,{ bonus bStr,1; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(Class==Job_Ninja||Class==Job_Rogue||Class==Job_Stalker) bonus bMatkRate,15; },{},{}
|
||||
13037,BF_Dagger2,Valorous Assassin's Damascus,5,20,,0,120,,1,0,0xFE9F7EEF,7,2,2,3,80,1,1,{ bonus bStr,1; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,75; bonus bUnbreakableWeapon,0; autobonus "{ bonus bDefRatioAtkRace,RC_Boss; bonus bDefRatioAtkRace,RC_NonBoss; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_HASTEUP; }"; if(Class==Job_Ninja||Class==Job_Rogue||Class==Job_Stalker) bonus bMatkRate,15; },{},{}
|
||||
13037,BF_Dagger2,Valorous Assassin's Damascus,5,20,,0,120,,1,0,0xFE9F7EEF,7,2,2,3,80,1,1,{ bonus bStr,1; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,75; bonus bUnbreakableWeapon,0; autobonus "{ bonus bDefRatioAtkClass,Class_All; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_HASTEUP; }"; if(Class==Job_Ninja||Class==Job_Rogue||Class==Job_Stalker) bonus bMatkRate,15; },{},{}
|
||||
13038,Dagger_Of_Hunter,Dagger of Hunter,5,20,,700,120,,1,3,0x00020000,2,2,2,3,70,1,1,{ bonus bStr,1; bonus bAgi,2; bonus bDex,1; bonus4 bAutoSpellOnSkill,"RG_BACKSTAP","SM_BASH",10,100; bonus2 bSkillAtk,"RG_BACKSTAP",20; },{},{}
|
||||
13039,Ivory_Knife,Ivory Knife,5,20,,700,130,,1,2,0x028F5EEE,2,2,2,3,50,1,1,{ bonus bAgi,2; bonus bAspdRate,3; bonus2 bAddEff,Eff_Bleeding,300; bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,30; },{},{}
|
||||
13040,N_Cutter,Novice Cutter,5,0,,0,50,,1,3,0xFE9F7EEF,7,2,2,1,1,0,1,{},{},{}
|
||||
@ -5357,8 +5357,8 @@
|
||||
13044,House_Auger_I,Ice Pick,5,0,,0,105,,1,0,0x028F5EEE,7,2,2,4,0,0,1,{},{},{}
|
||||
13045,Kamaitachi_I,Kamaitachi,5,0,,0,155,,2,0,0x02000000,7,2,2,4,0,0,1,{},{},{}
|
||||
13046,Krieg,Krierg,5,20,,500,110,,1,3,0x00021040,2,2,2,2,50,1,1,{ bonus3 bAddEffOnSkill,"RG_BACKSTAP",Eff_Bleeding,1000; bonus2 bSkillAtk,"RG_BACKSTAP",15; },{},{}
|
||||
13047,Weihna,Weihna,5,20,,500,135,,1,2,0x00021040,2,2,2,3,50,1,1,{ bonus3 bAddEffOnSkill,"RG_RAID",Eff_Poison,1000; autobonus "{ bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; }",5,5000,BF_WEAPON|BF_SHORT,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
|
||||
13048,Damascus_C,Damascus,5,0,,0,153,,1,0,0x028F5EEE,7,2,2,3,1,0,1,{ bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
13047,Weihna,Weihna,5,20,,500,135,,1,2,0x00021040,2,2,2,3,50,1,1,{ bonus3 bAddEffOnSkill,"RG_RAID",Eff_Poison,1000; autobonus "{ bonus2 bAddClass,Class_All,10; }",5,5000,BF_WEAPON|BF_SHORT,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
|
||||
13048,Damascus_C,Damascus,5,0,,0,153,,1,0,0x028F5EEE,7,2,2,3,1,0,1,{ bonus2 bAddSize,Size_All,40; },{},{}
|
||||
// Revolvers
|
||||
13100,Six_Shooter,Six Shooter,5,4500,,400,30,,7,1,0x41000000,7,2,34,1,10,1,17,{ bonus bHit,-10; },{},{}
|
||||
13101,Six_Shooter_,Six Shooter,5,4500,,400,30,,7,2,0x41000000,7,2,34,1,10,1,17,{ bonus bHit,-10; },{},{}
|
||||
@ -5369,7 +5369,7 @@
|
||||
13106,Gold_Lux,Gold Lux,5,100000,,500,20,,7,0,0x41000000,7,2,34,3,12,1,17,{ bonus bHit,-10; if(getskilllv("GS_GLITTERING")>0) bonus3 bAutoSpell,"GS_GLITTERING",getskilllv("GS_GLITTERING"),100; },{},{}
|
||||
13107,Wasteland_Outlaw,Wasteland's Outlaw,5,20,,580,68,,7,2,0x41000000,7,2,34,3,70,1,17,{ bonus bHit,readparam(bAgi)/10; bonus bAspdRate,readparam(bAgi)/14; },{},{}
|
||||
13108,BF_Pistol1,Soldier Revolver,5,0,,0,70,,7,0,0x41000000,7,2,34,3,80,1,17,{ bonus bDex,2; bonus bHit,-10; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; autobonus "{ bonus bAspdRate,100; }",10,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,0; },{},{}
|
||||
13109,Wasteland_Outlaw_C,Wasteland Outlaw,5,20,,0,100,,7,0,0x41000000,7,2,34,3,0,0,17,{ bonus bHit,readparam(bAgi)/10; bonus bAspdRate,readparam(bAgi)/14; bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; bonus bMatkRate,10; },{},{}
|
||||
13109,Wasteland_Outlaw_C,Wasteland Outlaw,5,20,,0,100,,7,0,0x41000000,7,2,34,3,0,0,17,{ bonus bHit,readparam(bAgi)/10; bonus bAspdRate,readparam(bAgi)/14; bonus2 bAddClass,Class_All,10; bonus bMatkRate,10; },{},{}
|
||||
13110,Krieger_Pistol1,Glorious Pistol,5,0,,0,80,,7,0,0x41000000,7,2,34,4,80,1,17,{ bonus2 bAddRace,RC_DemiHuman,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine()>5){ bonus2 bAddRace,RC_DemiHuman,pow(getrefine()-4,2); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,"GS_RAPIDSHOWER","GS_GLITTERING",1,1000; bonus2 bSkillAtk,"GS_RAPIDSHOWER",getrefine()*2; } },{},{}
|
||||
//13111,Sharpshooter_Revolver
|
||||
13112,P_Revolver1,Eden Revlover I,5,0,,0,4,,7,0,0x41000000,7,2,34,1,26,0,17,{ bonus bHit,-5; },{},{}
|
||||
@ -5402,7 +5402,7 @@
|
||||
13174,BF_Launcher1,Soldier Grenade Launcher,5,0,,0,300,,9,0,0x41000000,7,2,34,3,80,1,21,{ bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; autobonus "{ bonus bBaseAtk,300; bonus2 bHPLossRate,120,1000; }",30,9000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0; },{},{}
|
||||
13175,Lever_Action_Rifle_C,Lever Action Rifle,5,20,,0,170,,9,0,0x41000000,7,2,34,3,0,0,18,{ bonus bHit,20; bonus bCritical,50; bonus bAspdRate,-5; },{},{}
|
||||
13176,Krieger_Rifle1,Glorious Rifle,5,0,,0,90,,9,0,0x41000000,7,2,34,4,80,1,18,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { bonus2 bCastrate,"GS_TRACKING",25; bonus2 bSkillAtk,"GS_TRACKING",getrefine() * 3; } },{},{}
|
||||
13177,Krieger_Gatling1,Glorious Gatling Gun,5,0,,0,90,,9,0,0x41000000,7,2,34,4,80,1,19,{ bonus2 bAddRace,RC_DemiHuman,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) {bonus2 bAddRace,RC_Boss,getrefine(); bonus2 bAddRace,RC_NonBoss,getrefine(); } },{},{}
|
||||
13177,Krieger_Gatling1,Glorious Gatling Gun,5,0,,0,90,,9,0,0x41000000,7,2,34,4,80,1,19,{ bonus2 bAddRace,RC_DemiHuman,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) {bonus2 bAddClass,Class_All,getrefine(); } },{},{}
|
||||
13178,Krieger_Shotgun1,Glorious Shotgun,5,0,,0,110,,9,0,0x41000000,7,2,34,4,80,1,20,{ bonus2 bAddRace,RC_DemiHuman,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bSplashRange,1; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { bonus2 bSkillAtk,"GS_SPREADATTACK",getrefine() * 2; bonus3 bAddEffOnSkill,"GS_SPREADATTACK",Eff_Stun,2000; } },{},{}
|
||||
13179,Krieger_Launcher1,Glorious Grenade Launcher,5,0,,0,330,,9,0,0x41000000,7,2,34,4,80,1,21,{ bonus2 bAddRace,RC_DemiHuman,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { bonus2 bSkillAtk,"GS_GROUNDDRIFT",getrefine() * 2; bonus3 bAddEffOnSkill,"GS_SPREADATTACK",Eff_Stun,2000; autobonus "{ bonus bAspdRate,20; }",200,20000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; } },{},{}
|
||||
// Bullets
|
||||
@ -5467,7 +5467,7 @@
|
||||
13306,BF_Huuma_Shuriken2,Valorous Huuma Front Shuriken,5,20,,0,55,,1,0,0x02000000,7,2,34,3,80,1,22,{ bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,95; autobonus "{ bonus2 bSkillAtk,\"NJ_HUUMA\",100; bonus2 bSkillAtk,\"NJ_ISSEN\",100; }",50,10000,BF_WEAPON,"{specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,0; },{},{}
|
||||
13307,Krieger_Huuma_Shuriken1,Glorious Shuriken,5,20,,0,55,,1,0,0x02000000,7,2,34,4,80,1,22,{ bonus2 bAddRace,RC_DemiHuman,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bMatkRate,15; autobonus "{ bonus2 bSkillAtk,\"NJ_HUUMA\",100; bonus2 bSkillAtk,\"NJ_ISSEN\",100; }",50,10000; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,"NJ_ISSEN","AL_HEAL",10,1000,1; bonus4 bAutoSpellOnSkill,"NJ_HUUMA","NPC_CRITICALWOUND",2,200; } },{},{}
|
||||
13308,Huuma_Blaze_I,Huuma Blaze Shuriken,5,0,,0,230,,1,0,0x02000000,7,2,34,4,0,0,22,{ bonus bUnbreakableWeapon,0; bonus bAtkEle,Ele_Fire; bonus bDex,2; },{},{}
|
||||
13309,Huuma_Giant_Wheel_C,Huuma Giant Wheel Shuriken,5,0,,0,99,,1,0,0x02000000,7,2,34,4,1,0,22,{ bonus2 bAddSize,Size_Small,80; bonus2 bAddSize,Size_Medium,80; bonus2 bAddSize,Size_Large,80; },{},{}
|
||||
13309,Huuma_Giant_Wheel_C,Huuma Giant Wheel Shuriken,5,0,,0,99,,1,0,0x02000000,7,2,34,4,1,0,22,{ bonus2 bAddSize,Size_All,80; },{},{}
|
||||
// More 1-Handed Swords
|
||||
13400,Cutlas_,Cutlus,5,20,,900,150,,1,1,0x000654E2,7,2,2,4,40,1,2,{ skill "SM_BASH",5; bonus bStr,2; bonus bDef,1; },{},{}
|
||||
13401,Excalibur_C,Excalibur,5,1,,0,199,,1,0,0x000654E2,7,2,2,4,1,0,2,{ bonus bInt,10; bonus bLuk,10; bonus bAtkEle,Ele_Holy; },{},{}
|
||||
@ -5475,14 +5475,14 @@
|
||||
13403,Solar_Sword_C,Solar Sword,5,2,,0,120,,1,0,0x000654E2,7,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Fire; bonus2 bHPDrainRate,1000,1; bonus2 bSPLossRate,15,10000; },{},{}
|
||||
13404,Platinum_Shotel,Platinum Shotel,5,20,,1500,130,,1,1,0x000654E2,7,2,2,4,55,1,2,{ bonus bCritical,50; },{},{}
|
||||
13405,Curved_Sword,Curved Sword,5,20,,800,125,,1,2,0x000654E2,7,2,2,4,55,1,2,{ bonus bAspdRate,10; bonus2 bAddEff,Eff_Curse,300; },{},{}
|
||||
13406,Edger,Edger,5,20,,0,120,,1,0,0x000654E2,7,2,2,1,0,0,2,{ bonus2 bAddRace,RC_Boss,50; bonus2 bAddRace,RC_NonBoss,50; },{},{}
|
||||
13406,Edger,Edger,5,20,,0,120,,1,0,0x000654E2,7,2,2,1,0,0,2,{ bonus2 bAddClass,Class_All,50; },{},{}
|
||||
13407,Nagan_C,Refined Nagan,5,1,,0,148,,1,0,0x000654E2,7,2,2,4,0,0,2,{ skill "TF_DOUBLE",5; bonus bDoubleRate,25; bonus2 bAddRace,RC_DemiHuman,40; },{},{}
|
||||
13408,Fire_Brand_C,Refined Fireblend,5,1,,0,120,,1,0,0x000654E2,7,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Fire; bonus bInt,2; skill "MG_FIREBOLT",5; bonus3 bAutoSpell,"MG_FIREBOLT",5,100; },{},{}
|
||||
13409,Immaterial_Sword_C,Refined Immaterial Sword,5,1,,0,160,,1,0,0x000654E2,7,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Ghost; bonus2 bSPVanishRate,45,30; bonus bSPDrainValue,-1; bonus bUnbreakableWeapon,0; },{},{}
|
||||
13410,BF_Sword1,Valorous Gladiator Blade,5,20,,0,115,,1,0,0x000654E3,7,2,2,3,80,1,2,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; },{},{}
|
||||
13411,BF_Sword2,Brave Gladiator Blade,5,20,,0,115,,1,0,0x000654E3,7,2,2,3,80,1,2,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus bMatkRate,10; bonus bUnbreakableWeapon,0; },{},{}
|
||||
13412,Twin_Edge_B,Twin Edge of Naght Sieger,5,20,,1500,150,,1,3,0x000654E2,2,2,2,4,75,1,2,{ bonus bAtkEle,Ele_Water; skill "MG_FROSTDIVER",5; autobonus "{ bonus bIgnoreDefRace,RC_NonBoss; }",50,5000; },{},{}
|
||||
13413,Twin_Edge_R,Twin Edge of Naght Sieger,5,20,,1500,160,,1,3,0x000654E2,2,2,2,4,75,1,2,{ bonus bAtkEle,Ele_Fire; skill "WZ_METEOR",3; autobonus "{ bonus bIgnoreDefRace,RC_NonBoss; }",50,5000; },{},{}
|
||||
13412,Twin_Edge_B,Twin Edge of Naght Sieger,5,20,,1500,150,,1,3,0x000654E2,2,2,2,4,75,1,2,{ bonus bAtkEle,Ele_Water; skill "MG_FROSTDIVER",5; autobonus "{ bonus bIgnoreDefClass,Class_Normal; }",50,5000; },{},{}
|
||||
13413,Twin_Edge_R,Twin Edge of Naght Sieger,5,20,,1500,160,,1,3,0x000654E2,2,2,2,4,75,1,2,{ bonus bAtkEle,Ele_Fire; skill "WZ_METEOR",3; autobonus "{ bonus bIgnoreDefClass,Class_Normal; }",50,5000; },{},{}
|
||||
13414,Elemental_Sword,Elemental Sword,5,20,,1200,105,,1,3,0x000654E2,2,2,2,3,70,1,2,{ bonus bStr,2; bonus bInt,4; bonus bDex,1; bonus bMatkRate,5; bonus2 bAddEle,Ele_Neutral,10; bonus3 bAutoSpell,"MG_COLDBOLT",3,50; bonus4 bAutoSpellOnSkill,"MG_COLDBOLT","MG_FIREBOLT",3,1000; bonus4 bAutoSpellOnSkill,"MG_FIREBOLT","MG_LIGHTNINGBOLT",3,10000; bonus4 bAutoSpellOnSkill,"MG_LIGHTNINGBOLT","WZ_EARTHSPIKE",3,10000; },{},{}
|
||||
13415,N_Falchion,Novice Falchion,5,0,,0,59,,1,3,0x000654E3,7,2,2,1,2,0,2,{},{},{}
|
||||
13416,Krieger_Onehand_Sword1,Glorious Flamberge,5,20,,0,130,,1,0,0x000654E3,7,2,2,4,80,1,2,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; } if(getrefine()>6) bonus bAspdRate,5; if(getrefine()>8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,"SM_BASH","NPC_CRITICALWOUND",2,200; } },{},{}
|
||||
@ -5491,7 +5491,7 @@
|
||||
13419,Holy_Saber,Holy saber,5,20,,0,160,,1,0,0x000654E2,7,2,2,3,0,0,2,{},{},{}
|
||||
13420,Honglyun's_Sword,Honglyun's Sword,5,20,,1200,160,,1,1,0x000654E2,7,2,2,4,70,1,2,{ bonus bAtkEle,Ele_Fire; bonus bStr,2; bonus bInt,2; },{},{}
|
||||
13421,Ruber,Ruber,5,20,,1500,170,,1,1,0x000444A2,2,2,2,3,50,1,2,{ autobonus "{ bonus2 bSkillAtk,\"KN_BOWLINGBASH\",20; bonus2 bSkillAtk,\"SM_BASH\",20; }",5,15000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; },{},{}
|
||||
13422,Flamberge_C,Flamberge,5,0,,0,185,,1,0,0x00004080,7,2,2,3,1,0,2,{ bonus bUnbreakableWeapon,0; bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
13422,Flamberge_C,Flamberge,5,0,,0,185,,1,0,0x00004080,7,2,2,3,1,0,2,{ bonus bUnbreakableWeapon,0; bonus2 bAddSize,Size_All,40; },{},{}
|
||||
// More Cash Shop Items
|
||||
13500,Insurance60_Package,Life Insurrance Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 14500,10; },{},{}
|
||||
13501,Assorted_Scroll_Box,Experience Scroll Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{},{},{}
|
||||
@ -6430,7 +6430,7 @@
|
||||
// More Maces
|
||||
16000,Erde,Erde,5,20,,500,130,,1,2,0x0004C5B2,2,2,2,4,50,1,8,{ bonus2 bSkillAtk,"AM_ACIDTERROR",20; bonus2 bSkillAtk,"AM_DEMONSTRATION",20; bonus bMaxSP,50; bonus bHealPower,10; },{},{}
|
||||
16001,Red_Square_Bag,Red Square Bag,5,20,,500,130,,1,2,0x0004C5B2,2,2,2,3,50,1,8,{ bonus bMaxHP,200; bonus2 bSkillAtk,"AM_ACIDTERROR",20; bonus2 bSkillAtk,"AM_DEMONSTRATION",20; bonus2 bAddMonsterDropItem,501,50; bonus2 bAddMonsterDropItem,502,20; bonus2 bAddMonsterDropItem,503,20; bonus2 bAddMonsterDropItem,504,20; bonus2 bAddMonsterDropItem,505,10; if(readparam(bStr)>=95) bonus2 bAddEff,Eff_Stun,500; },{},{}
|
||||
16002,Stunner_C,Stunner,5,0,,0,175,,1,0,0x00008110,7,2,2,3,1,0,8,{ bonus2 bAddEff,Eff_Stun,1000; bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40; },{},{}
|
||||
16002,Stunner_C,Stunner,5,0,,0,175,,1,0,0x00008110,7,2,2,3,1,0,8,{ bonus2 bAddEff,Eff_Stun,1000; bonus2 bAddSize,Size_All,40; },{},{}
|
||||
// More Rental Boxes
|
||||
16134,King_Frog_Hat_Box,Frog King Hat Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5528,1; },{},{}
|
||||
16135,Evil's_Bone_Hat_Box,Satanic Bone Helm Box,18,20,,10,,,,,0xFFFFFFFF,7,2,,,,,,{ getitem 5529,1; },{},{}
|
||||
|
@ -10,9 +10,9 @@
|
||||
1284:2892,{ bonus2 bSkillAtk,"AS_SONICBLOW",50; bonus bBaseAtk,50; bonus bFlee,-30; }
|
||||
1285:2892,{ bonus bCritical,4; bonus bCritAtkRate,40; bonus bMaxHPRate,-10; }
|
||||
1420:2115,{ bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",2,5; }
|
||||
1420:2133,{ bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bDef,2; }
|
||||
1421:2133,{ bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bDef,2; }
|
||||
1422:2133,{ bonus2 bAddRace,RC_NonBoss,4; bonus2 bAddRace,RC_Boss,4; bonus bDef,2; }
|
||||
1420:2133,{ bonus2 bAddClass,Class_All,4; bonus bDef,2; }
|
||||
1421:2133,{ bonus2 bAddClass,Class_All,4; bonus bDef,2; }
|
||||
1422:2133,{ bonus2 bAddClass,Class_All,4; bonus bDef,2; }
|
||||
1428:2115,{ bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",2,5; }
|
||||
1433:2153,{ bonus2 bSkillAtk,"CR_GRANDCROSS",10; bonus2 bSkillAtk,"LG_RAYOFGENESIS",10; }
|
||||
1472:2677,{ bonus bMatkRate,6; bonus bDex,2; bonus bCastrate,-getequiprefinerycnt(EQI_HEAD_TOP); }
|
||||
@ -74,10 +74,10 @@
|
||||
2124:2702,{ bonus bAspdRate,10; bonus bShortWeaponDamageReturn,5; }
|
||||
2135:2426,{ bonus2 bAddEff,Eff_Blind,500; autobonus "{ bonus bFlee,20; }",200,10000,BF_WEAPON,"{ specialeffect2 EF_INCAGILITY; }"; }
|
||||
2137:2353:5124,{ bonus bDef,2-getequiprefinerycnt(EQI_HAND_L)-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getequiprefinerycnt(EQI_HAND_L)+getequiprefinerycnt(EQI_HEAD_TOP); }
|
||||
2169:2491:2590:15051,{ bonus2 bAddDefClass,2311,30; bonus2 bAddDefClass,2312,30; bonus2 bAddDefClass,2320,30; bonus2 bAddDefClass,2321,30; bonus2 bAddDefClass,2322,30; bonus2 bAddDefClass,2317,30; bonus2 bAddDefClass,2318,30; bonus2 bAddDefClass,2327,30; bonus2 bAddDefClass,2319,30; bonus2 bAddDefClass,2330,30; bonus2 bAddDefClass,2329,30; bonus2 bAddDefClass,2333,30; bonus2 bAddDefClass,2332,30; bonus2 bAddDefClass,2309,30; bonus2 bAddDefClass,2310,30; bonus2 bAddDefClass,2315,30; bonus2 bAddDefClass,2316,30; bonus2 bAddDefClass,2314,30; bonus2 bAddDefClass,2313,30; bonus bMaxHPrate,20; bonus bMaxSPrate,10; }
|
||||
2169:2491:2590:15051,{ bonus2 bAddDefMonster,2311,30; bonus2 bAddDefMonster,2312,30; bonus2 bAddDefMonster,2320,30; bonus2 bAddDefMonster,2321,30; bonus2 bAddDefMonster,2322,30; bonus2 bAddDefMonster,2317,30; bonus2 bAddDefMonster,2318,30; bonus2 bAddDefMonster,2327,30; bonus2 bAddDefMonster,2319,30; bonus2 bAddDefMonster,2330,30; bonus2 bAddDefMonster,2329,30; bonus2 bAddDefMonster,2333,30; bonus2 bAddDefMonster,2332,30; bonus2 bAddDefMonster,2309,30; bonus2 bAddDefMonster,2310,30; bonus2 bAddDefMonster,2315,30; bonus2 bAddDefMonster,2316,30; bonus2 bAddDefMonster,2314,30; bonus2 bAddDefMonster,2313,30; bonus bMaxHPrate,20; bonus bMaxSPrate,10; }
|
||||
2171:15053,{ bonus bAgi,2; }
|
||||
2171:15056,{ bonus bAgi,2; }
|
||||
2172:15054,{ bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; bonus bStr,2; }
|
||||
2172:15054,{ bonus2 bAddClass,Class_All,10; bonus bStr,2; }
|
||||
2173:15055,{ bonus bFlee,10; bonus bFlee2,10; }
|
||||
2241:5136,{ bonus bMaxHP,700; bonus bMaxSP,50; bonus4 bAutoSpellWhenHit,"AL_INCAGI",10,30,1; }
|
||||
//2269:5768,{ bonus bInt,1; if(getequiprefinerycnt(EQI_HEAD_TOP) > 6) bonus bMaxSPrate,getequiprefinerycnt(EQI_HEAD_TOP)-6; }
|
||||
@ -101,21 +101,20 @@
|
||||
//2369:2428:2533:5306,{ bonus2 bSubRace,RC_DemiHuman,10; bonus bMaxHPrate,20; bonus2 bResEff,Eff_Freeze,10000; skill "WZ_FIREPILLAR",10; }
|
||||
2371:2522,{ bonus bAgi,5; bonus bFlee,10; }
|
||||
2371:2523,{ bonus bAgi,5; bonus bFlee,10; }
|
||||
2374:2729,{ bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; }
|
||||
2375:2729,{ bonus2 bAddRace,RC_NonBoss,3; bonus2 bAddRace,RC_Boss,3; bonus bMatkRate,3; }
|
||||
2376:2435:2538,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bVit,3; bonus bMaxHPRate,12; bonus bHealpower2,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus2 bHPRegenRate,600,1000; }",5,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }
|
||||
2377:2435:2538,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bStr,3; bonus bMaxHPRate,12; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AL_HEAL",10; bonus bUnbreakableArmor,0; }
|
||||
2378:2435:2538,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bAgi,3; bonus bMaxHPRate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }
|
||||
2379:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
|
||||
2380:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bVariableCastrate,"AL_HOLYLIGHT",-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
|
||||
2381:2436:2539,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
|
||||
2382:2437:2540,{ bonus2 bSubRace,RC_NonDemiHuman,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
|
||||
2374:2729,{ bonus2 bAddClass,Class_All,3; bonus bMatkRate,3; }
|
||||
2376:2435:2538,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bVit,3; bonus bMaxHPRate,12; bonus bHealpower2,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus2 bHPRegenRate,600,1000; }",5,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }
|
||||
2377:2435:2538,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bStr,3; bonus bMaxHPRate,12; bonus2 bSkillAtk,"MC_MAMMONITE",20; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AM_POTIONPITCHER",10; bonus2 bSkillHeal2,"AL_HEAL",10; bonus bUnbreakableArmor,0; }
|
||||
2378:2435:2538,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bAgi,3; bonus bMaxHPRate,12; bonus bCritical,5; bonus bAspdRate,5; autobonus "{ bonus2 bHPRegenRate,300,1000; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_HEAL; }"; }
|
||||
2379:2436:2539,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bResEff,Eff_Stun,2000; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
|
||||
2380:2436:2539,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bInt,3; bonus bMaxHPRate,12; bonus2 bVariableCastrate,"AL_HOLYLIGHT",-50; bonus bHealPower,6; autobonus2 "{ bonus bDefEle,Ele_Ghost; }",30,10000,BF_WEAPON,"{ specialeffect2 EF_ENERGYCOAT; }"; }
|
||||
2381:2436:2539,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
|
||||
2382:2437:2540,{ for (set .@i,0; .@i < RC_DemiHuman; set .@i,.@i+1) { bonus2 bSubRace,.@i,-300; } bonus2 bSubRace,RC_Angel,-300; bonus2 bSubRace,RC_Dragon,-300; bonus bDex,3; bonus bMaxHPRate,12; bonus bLongAtkDef,10; bonus bDelayRate,-25; }
|
||||
2387:2440:2744,{ bonus bMaxHPrate,7; bonus bMaxSPrate,7; bonus bVariableCastrate,-3; bonus bDelayrate,-15; }
|
||||
2390:2749,{ bonus bFlee2,5; }
|
||||
2394:2444:2549,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,5; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSkillHeal2,"AM_POTIONPITCHER",3; bonus2 bSkillHeal2,"AL_HEAL",3; bonus2 bSkillHeal2,"PR_SANCTUARY",3; }
|
||||
2394:2444:2549,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,5; bonus2 bResEff,Eff_Freeze,10000; bonus2 bSkillHeal2,"AM_POTIONPITCHER",3; bonus2 bSkillHeal2,"AL_HEAL",3; bonus2 bSkillHeal2,"PR_SANCTUARY",3; }
|
||||
2399:2553,{ bonus bAgi,5; bonus bFlee,15; }
|
||||
2399:2553:5467,{ bonus2 bSubRace,RC_Dragon,20; }
|
||||
2408:2655,{ bonus bBaseAtk,50; bonus2 bAddDefClass,1196,20; bonus2 bAddDefClass,1197,20; }
|
||||
2408:2655,{ bonus bBaseAtk,50; bonus2 bAddDefMonster,1196,20; bonus2 bAddDefMonster,1197,20; }
|
||||
2424:2528,{ bonus bHPrecovRate,5; bonus bMaxHPrate,10; }
|
||||
2425:2529,{ bonus bFlee,10; }
|
||||
2425:2530,{ bonus bFlee,10; }
|
||||
@ -128,9 +127,9 @@
|
||||
2472:2570:15030:16013,{ bonus2 bAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bSkillAtk,"AB_ADORAMUS",200; bonus2 bSkillUseSP,"AB_ADORAMUS",-30; }
|
||||
2472:2570:15030:16018,{ bonus2 bAddRace,RC_Undead,30; bonus2 bMagicAddRace,RC_Undead,30; bonus2 bSkillAtk,"AB_ADORAMUS",200; bonus2 bSkillUseSP,"AB_ADORAMUS",-30; bonus2 bVariableCastrate,"AL_HOLYLIGHT",-50; bonus2 bVariableCastrate,"PR_TURNUNDEAD",-50; bonus2 bVariableCastrate,"PR_MAGNUS",-50; bonus2 bVariableCastrate,"AB_JUDEX",-50; bonus2 bVariableCastrate,"AB_ADORAMUS",-50; }
|
||||
2475:2574:2883:15036,{ bonus bMaxHPRate,14; bonus2 bSubEle,Ele_Neutral,10; bonus2 bSkillAtk,"RK_HUNDREDSPEAR",50; skill "CR_AUTOGUARD",1; bonus bUseSPrate,10; }
|
||||
2476:2575:2884:15037,{ bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; bonus3 bAutoSpell,"RK_STORMBLAST",1,20; bonus2 bSkillAtk,"RK_WINDCUTTER",100; bonus2 bSkillAtk,"RK_SONICWAVE",100; autobonus3 "{ bonus bAspd,2; }",1000,10000,"LK_CONCENTRATION","{ specialeffect2 EF_ENHANCE; }"; }
|
||||
2476:2575:2884:15037,{ bonus2 bAddClass,Class_All,10; bonus3 bAutoSpell,"RK_STORMBLAST",1,20; bonus2 bSkillAtk,"RK_WINDCUTTER",100; bonus2 bSkillAtk,"RK_SONICWAVE",100; autobonus3 "{ bonus bAspd,2; }",1000,10000,"LK_CONCENTRATION","{ specialeffect2 EF_ENHANCE; }"; }
|
||||
2477:2577:2886:15038,{ bonus bFlee,10; bonus bCritical,15; bonus bCritAtkRate,40; bonus2 bSkillAtk,"GC_CROSSIMPACT",20; bonus bUseSPrate,10; }
|
||||
2478:2578:2887:15039,{ bonus3 bAutoSpell,"ASC_BREAKER",(getskilllv("ASC_BREAKER"))?getskilllv("ASC_BREAKER"):1,20; if(readparam(bStr)>119) { bonus bBaseAtk,30; } bonus2 bAddRace,RC_NonBoss,10; bonus2 bAddRace,RC_Boss,10; bonus bMatkRate,10; bonus bCritical,-20; }
|
||||
2478:2578:2887:15039,{ bonus3 bAutoSpell,"ASC_BREAKER",(getskilllv("ASC_BREAKER"))?getskilllv("ASC_BREAKER"):1,20; if(readparam(bStr)>119) { bonus bBaseAtk,30; } bonus2 bAddClass,Class_All,10; bonus bMatkRate,10; bonus bCritical,-20; }
|
||||
2479:2580:2890:15042,{ bonus bAspd,2; bonus2 bSkillAtk,"RA_ARROWSTORM",50; bonus bLongAtkRate,30; bonus3 bAutoSpell,"AC_DOUBLE",(getskilllv("AC_DOUBLE") < 3)?3:getskilllv("AC_DOUBLE"),20; }
|
||||
2480:2581:2891:15043,{ bonus bMaxHPRate,15; bonus bFlee2,20; bonus2 bSkillAtk,"RA_CLUSTERBOMB",20; bonus bLongAtkRate,-30; bonus bAspd,-7; }
|
||||
2483:2586:15046,{ bonus2 bSubRace,RC_DemiHuman,15; }
|
||||
@ -154,14 +153,14 @@
|
||||
2626:2786,{ bonus2 bSkillAtk,"AL_HEAL",50; bonus2 bSkillAtk,"PR_MAGNUS",30; bonus bSPrecovRate,9; }
|
||||
2678:2679,{ bonus4 bAutoSpell,"MO_EXTREMITYFIST",1,3,1; bonus3 bAutoSpell,"PR_LEXAETERNA",1,20; bonus3 bAutoSpell,"AS_SONICBLOW",5,50; bonus3 bAutoSpell,"MO_INVESTIGATE",5,20; bonus3 bAutoSpell,"ASC_METEORASSAULT",2,50; }
|
||||
//2679:2792,{ bonus4 bAutoSpell,"MO_EXTREMITYFIST",1,3,1; bonus3 bAutoSpell,"PR_LEXAETERNA",1,20; bonus3 bAutoSpell,"AS_SONICBLOW",5,50; bonus3 bAutoSpell,"MO_INVESTIGATE",5,20; bonus3 bAutoSpell,"ASC_METEORASSAULT",2,50; }
|
||||
2720:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2721:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2722:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2723:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2724:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2725:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2720:2772,{ bonus2 bAddClass,Class_All,3; bonus bHealPower,5; }
|
||||
2721:2772,{ bonus2 bAddClass,Class_All,3; bonus bHealPower,5; }
|
||||
2722:2772,{ bonus2 bAddClass,Class_All,3; bonus bHealPower,5; }
|
||||
2723:2772,{ bonus2 bAddClass,Class_All,3; bonus bHealPower,5; }
|
||||
2724:2772,{ bonus2 bAddClass,Class_All,3; bonus bHealPower,5; }
|
||||
2725:2772,{ bonus2 bAddClass,Class_All,3; bonus bHealPower,5; }
|
||||
2726:2727,{ bonus bUseSPrate,-25; }
|
||||
2733:2772,{ bonus2 bAddRace,RC_NonBoss,5; bonus2 bAddRace,RC_Boss,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2733:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
|
||||
2747:13061,{ bonus bHit,5; bonus bMatk,5; bonus2 bSkillUseSP,"SC_ENERVATION",20; bonus2 bSkillUseSP,"SC_GROOMY",20; }
|
||||
2751:2888,{ bonus bAspdRate,3; bonus bVariableCastrate,-3; }
|
||||
2777:2778:5479,{ bonus bMaxHP,300; bonus bMatkRate,5; bonus2 bSubEle,Ele_Neutral,5; }
|
||||
@ -226,12 +225,12 @@
|
||||
//9024:18832,{ bonus3 bAutoSpell,"BS_ADRENALINE",2,(GetPetRelationship >= 3)?15:10; }
|
||||
13027:15044,{ set .@i,getequiprefinerycnt(EQI_ARMOR)?getequiprefinerycnt(EQI_ARMOR):1; bonus3 bAddMonsterDropItem,929,RC_DemiHuman,70*.@i; bonus3 bAddMonsterDropItem,970,RC_DemiHuman,50*.@i; bonus3 bAddMonsterDropItem,929,RC_Brute,70*.@i; bonus3 bAddMonsterDropItem,970,RC_Brute,50*.@i; }
|
||||
13034:13035,{ bonus bMaxSP,20; bonus bMaxHPRate,5; bonus bHit,10; bonus2 bAddSize,Size_Large,30; autobonus "{ bonus bAspdRate,100; }",1,7000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; }
|
||||
15088:18816:18818,{ bonus bMatk,BaseLevel/3; bonus2 bExpAddRace,RC_NonBoss,5; bonus2 bExpAddRace,RC_Boss,5; }
|
||||
15088:18817:18819,{ bonus bBaseAtk,BaseLevel/3; bonus2 bExpAddRace,RC_NonBoss,5; bonus2 bExpAddRace,RC_Boss,5; }
|
||||
15088:18816:18818,{ bonus bMatk,BaseLevel/3; bonus2 bExpAddClass,Class_All,5; }
|
||||
15088:18817:18819,{ bonus bBaseAtk,BaseLevel/3; bonus2 bExpAddClass,Class_All,5; }
|
||||
18507:18539,{ bonus bUseSPrate,-3; }
|
||||
18559:18560,{ bonus bCritAtkRate,5; }
|
||||
|
||||
4606:4605,{ bonus2 bSubEle,0,20; bonus bFlee,20; bonus2 bHPLossRate,100,6000; bonus2 bSPLossRate,6,6000; }
|
||||
4606:4605,{ bonus2 bSubEle,Ele_Neutral,20; bonus bFlee,20; bonus2 bHPLossRate,100,6000; bonus2 bSPLossRate,6,6000; }
|
||||
24072:24075,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
|
||||
24073:24076,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
|
||||
24074:24077,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
|
||||
@ -247,17 +246,17 @@
|
||||
24037:24043,{ bonus bDex,1; }
|
||||
24038:24044,{ bonus bVit,1; }
|
||||
24039:24045,{ bonus bAgi,1; }
|
||||
24046:24051,{ bonus2 bSubEle,0,1; if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L)) { bonus2 bSubEle,0,1; } }
|
||||
24052:24062,{ bonus2 bExpAddRace,7,3; }
|
||||
24046:24051,{ bonus2 bSubEle,Ele_Neutral,1; if(getequiprefinerycnt(EQI_SHADOW_ACC_R) + getequiprefinerycnt(EQI_SHADOW_ACC_L)) { bonus2 bSubEle,Ele_Neutral,1; } }
|
||||
24052:24062,{ bonus2 bExpAddRace,RC_DemiHuman,3; }
|
||||
24053:24063,{ bonus2 bAddRace,10,5; bonus2 bMagicAddRace,10,5; }
|
||||
24054:24065,{ bonus2 bExpAddRace,2,3; }
|
||||
24055:24066,{ bonus2 bExpAddRace,4,3; }
|
||||
24056:24067,{ bonus2 bExpAddRace,5,3; }
|
||||
24057:24071,{ bonus2 bExpAddRace,9,3; }
|
||||
24058:24068,{ bonus2 bExpAddRace,8,3; }
|
||||
24059:24069,{ bonus2 bExpAddRace,0,3; }
|
||||
24060:24070,{ bonus2 bExpAddRace,1,3; }
|
||||
24061:24064,{ bonus2 bExpAddRace,3,3; }
|
||||
24054:24065,{ bonus2 bExpAddRace,RC_Brute,3; }
|
||||
24055:24066,{ bonus2 bExpAddRace,RC_Insect,3; }
|
||||
24056:24067,{ bonus2 bExpAddRace,RC_Fish,3; }
|
||||
24057:24071,{ bonus2 bExpAddRace,RC_Dragon,3; }
|
||||
24058:24068,{ bonus2 bExpAddRace,RC_Angel,3; }
|
||||
24059:24069,{ bonus2 bExpAddRace,RC_Formless,3; }
|
||||
24060:24070,{ bonus2 bExpAddRace,RC_Undead,3; }
|
||||
24061:24064,{ bonus2 bExpAddRace,RC_Plant,3; }
|
||||
24078:24079:24080,{ bonus3 bSPDrainRate,10,1+(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)/10),0; }
|
||||
24081:24082:24083,{ bonus3 bHPDrainRateRace,11,40,2+(getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)/5); }
|
||||
1990:2989,{ bonus2 bSkillAtk,"CG_ARROWVULCAN",200; }
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,56 +1,60 @@
|
||||
// Experience & Drop Rate Modifier Database
|
||||
//
|
||||
// Structure of Database:
|
||||
// Type,Race,Level difference,Rate
|
||||
// Type,Class,Level difference,Rate
|
||||
//
|
||||
// TYPE:
|
||||
// 1=experience, 2=item drop
|
||||
// RACE:
|
||||
// 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
// 5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
// 10=Boss monsters, 11=Normal monsters
|
||||
// CLASS:
|
||||
// 0=Normal monsters, 1=Boss monsters, 2=Guardians
|
||||
//
|
||||
// Note: RENEWAL_DROP and/or RENEWAL_EXP must be enabled.
|
||||
|
||||
// EXP modifiers due to level difference
|
||||
1,11,16,40
|
||||
1,11,15,115
|
||||
1,11,14,120
|
||||
1,11,13,125
|
||||
1,11,12,130
|
||||
1,11,11,135
|
||||
1,11,10,140
|
||||
1,11,9,135
|
||||
1,11,8,130
|
||||
1,11,7,125
|
||||
1,11,6,120
|
||||
1,11,5,115
|
||||
1,11,4,110
|
||||
1,11,3,105
|
||||
1,11,0,100
|
||||
1,11,-1,100
|
||||
1,11,-6,95
|
||||
1,11,-11,90
|
||||
1,11,-16,85
|
||||
1,11,-21,60
|
||||
1,11,-26,35
|
||||
1,11,-31,10
|
||||
1,0,16,40
|
||||
1,0,15,115
|
||||
1,0,14,120
|
||||
1,0,13,125
|
||||
1,0,12,130
|
||||
1,0,11,135
|
||||
1,0,10,140
|
||||
1,0,9,135
|
||||
1,0,8,130
|
||||
1,0,7,125
|
||||
1,0,6,120
|
||||
1,0,5,115
|
||||
1,0,4,110
|
||||
1,0,3,105
|
||||
1,0,0,100
|
||||
1,0,-1,100
|
||||
1,0,-6,95
|
||||
1,0,-11,90
|
||||
1,0,-16,85
|
||||
1,0,-21,60
|
||||
1,0,-26,35
|
||||
1,0,-31,10
|
||||
|
||||
// Boss Type
|
||||
1,10,0,100
|
||||
1,1,0,100
|
||||
|
||||
// Guardian Type
|
||||
1,2,0,100
|
||||
|
||||
// Drop rate modifiers due to level difference
|
||||
2,11,16,50
|
||||
2,11,13,60
|
||||
2,11,10,70
|
||||
2,11,7,80
|
||||
2,11,4,90
|
||||
2,11,0,100
|
||||
2,11,-4,90
|
||||
2,11,-7,80
|
||||
2,11,-10,70
|
||||
2,11,-13,60
|
||||
2,11,-16,50
|
||||
2,0,16,50
|
||||
2,0,13,60
|
||||
2,0,10,70
|
||||
2,0,7,80
|
||||
2,0,4,90
|
||||
2,0,0,100
|
||||
2,0,-4,90
|
||||
2,0,-7,80
|
||||
2,0,-10,70
|
||||
2,0,-13,60
|
||||
2,0,-16,50
|
||||
|
||||
// Boss Type
|
||||
2,10,0,100
|
||||
2,1,0,100
|
||||
|
||||
// Guardian Type
|
||||
2,2,0,100
|
||||
|
@ -65,28 +65,22 @@ bonus bLongAtkDef,n; Adds n% damage reduction against ranged physical attacks
|
||||
bonus bMagicAtkDef,n; Adds n% damage reduction against magical attacks
|
||||
bonus bMiscAtkDef,n; Adds n% damage reduction against MISC attacks (traps, falcon, ...)
|
||||
bonus bIgnoreDefRace,n; Disregard DEF against enemies of race n
|
||||
n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
n: RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
bonus bIgnoreDefEle,n; Disregard DEF against enemies of element n
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus bIgnoreMDefRace,n; Disregard MDEF against enemies of race n
|
||||
n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
n: RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
bonus bIgnoreMDefEle,n; Disregard MDEF against enemies of element n
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus bIgnoreMdefRate,n; Disregard n% of the target's MDEF
|
||||
bonus bDefRatioAtkRace,n; Does more damage depending on monster Defense against race n (defense disregard)
|
||||
n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
n: RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
bonus bDefRatioAtkEle,n; n attribute if defensive power is high the high extent big damage is given, (defense disregard)
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus bAtkEle,n; Gives the player's attacks element n
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus bDefEle,n; Gives the player's defense element n
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison, 6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus bSplashRange,n; Splash attack radius + n (e.g. n=1 makes a 3*3 cells area, n=2 a 5*5 area, etc)
|
||||
Only the highest among all is applied
|
||||
bonus bSplashAddRange,n; Splash attack radius + n (e.g. n=1 makes a 3*3 cells area, n=2 a 5*5 area, etc)
|
||||
@ -110,35 +104,25 @@ bonus2 bResEff,e,x; Adds a x/100 tolerance to effect e (e.g. x=100 makes 1% to
|
||||
Eff_DPoison, Eff_Fear, Eff_Burning
|
||||
bonus2 bCastrate,n,x; Adjust casting time of skill n by x% (supports skill names)
|
||||
bonus2 bAddSize,n,x; +x% physical damage against size n.
|
||||
n: 0=Small 1=Medium 2=Large
|
||||
n: Size_Small, Size_Medium, Size_Large, Size_All
|
||||
bonus2 bMagicAddSize,n,x; +x% magical damage against size n.
|
||||
n: 0=Small 1=Medium 2=Large
|
||||
n: Size_Small, Size_Medium, Size_Large, Size_All
|
||||
bonus2 bSubSize,n,x; x% Damage reduction against size n.
|
||||
n: 0=Small 1=Medium 2=Large
|
||||
n: Size_Small, Size_Medium, Size_Large, Size_All
|
||||
bonus2 bAddRace,n,x; +x% physical damage against race n
|
||||
n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
n: RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
bonus2 bMagicAddRace,n,x; +x% magical damage against race n
|
||||
n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
n: RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
bonus2 bSubRace,n,x; +x% damage reduction against race n
|
||||
n: 0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
n: RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
bonus2 bAddEle,n,x; +x% physical damage against element n
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison,
|
||||
6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison, Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus2 bMagicAddEle,n,x; +x% magical damage against element n
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison,
|
||||
6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison, Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus2 bSubEle,n,x; x% Damage reduction against element n.
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison,
|
||||
6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison, Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus2 bMagicAtkEle,n,x; Increases damage of n element magic by x%.
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison,
|
||||
6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison, Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus2 bAddDamageClass,n,x; +x% extra physical damage against monsters of class n
|
||||
Against players, n is their job id
|
||||
bonus2 bAddMagicDamageClass,n,x; +x% extra magical damage against monsters of class n
|
||||
@ -147,7 +131,7 @@ bonus2 bAddDefClass,n,x; x% physical damage reduction against monsters of class
|
||||
Against players, n is their job id.
|
||||
bonus2 bAddMDefClass,n,x; x% magical damage reduction against monsters of class n
|
||||
Against players, n is their job id.
|
||||
bonus2 bIgnoreMdefRate,n,x; Disregard x% of the target's MDEF if the target belongs to race n
|
||||
bonus2 bIgnoreMdefRaceRate,n,x; Disregard x% of the target's MDEF if the target belongs to race n
|
||||
bonus2 bHPDrainRate,n,x; n/10 % probability to drain x% HP when attacking
|
||||
bonus2 bSPDrainRate,n,x; n/10 % probability to drain x% SP when attacking
|
||||
bonus2 bSPVanishRate,n,x; Add the (n/10)% chance of decreasing enemy's SP (player) amount by x% when attacking
|
||||
@ -160,9 +144,7 @@ bonus2 bGetZenyNum,n,x; When killing a monster, there is a x% chance of gainin
|
||||
bonus2 bAddGetZenyNum,n,x; Same as bGetZenyNum, but the rates and zeny to gain stack.
|
||||
|
||||
bonus3 bAddMonsterDropItem,n,x,y; Adds a y/100% chance for item n to be dropped, when killing any monster of race x.
|
||||
0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
If 'y' is negative value, then it's a part of formula
|
||||
chance = -y*(killed_mob_level/10)+1
|
||||
bonus3 bAutoSpell,n,x,y; Auto Spell casting on attack of spell n at level x with y/10% chance. (supports skill names)
|
||||
@ -186,9 +168,7 @@ bonus bSPGainValue,n; When killing a monster by physical attack, you gain n SP
|
||||
bonus bHPGainValue,n; When killing a monster by physical attack, you gain n HP
|
||||
bonus2 bCriticalAddRace,r,n; Critical + n vs. enemies of race r
|
||||
r:
|
||||
0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
bonus2 bHPRegenRate,n,x; Gain n HP every x milliseconds
|
||||
bonus2 bHPLossRate,n,x; Lose n HP every x milliseconds
|
||||
bonus2 bAddEffWhenHit,n,x; x/100% chance to cause n state to the enemy when being hit by physical damage
|
||||
@ -291,16 +271,12 @@ bonus3 bAddEffWhenHit,n,x,y; x/100 chance to cause n state to the enemy when be
|
||||
ATF_LONG: Trigger in ranged attacks (default: trigger on all attacks)
|
||||
|
||||
bonus3 bAddMonsterDropItemGroup,n,x,y; Adds a y/100% chance to get an item of group type n when you kill a monster of race x (Check db/item_group_db.txt)
|
||||
0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
x: RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
If 'y' is negative value, then it's a part of formula
|
||||
chance = -y*(killed_mob_level/10)+1
|
||||
|
||||
bonus2 bWeaponComaRace,x,y; y/100% chance to cause Coma when attacking a monster of race x with a normal attack
|
||||
0=Formless, 1=Undead, 2=Brute, 3=Plant, 4=Insect,
|
||||
5=Fish, 6=Demon, 7=Demi-Human, 8=Angel, 9=Dragon,
|
||||
10=Boss monster, 11=Other than (normal monster) boss monster
|
||||
x: RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
|
||||
bonus bAddStealRate,n; n/100% increase to Steal skill success chance
|
||||
|
||||
@ -315,8 +291,7 @@ bonus2 bSPDrainValue,n,x; When hitting a monster by physical attack, ...
|
||||
bonus2 bIgnoreDefRate,n,x; Disregard x% of the target's DEF if the target belongs to race n
|
||||
|
||||
bonus3 bAddEle,n,x,t; +x% physical damage against element n
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison,
|
||||
6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison, Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
t: Trigger criteria:
|
||||
BF_SHORT: Trigger on melee attack
|
||||
BF_LONG: Trigger on ranged attack
|
||||
@ -336,8 +311,7 @@ bonus3 bAddEle,n,x,t; +x% physical damage against element n
|
||||
2=use random skill lv in [1..y]
|
||||
3=1+2 (random lv on enemy)
|
||||
bonus3 bSubEle,n,x,t; x% Damage reduction against element n.
|
||||
n: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison,
|
||||
6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
n: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison, Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
t: Trigger criteria:
|
||||
BF_SHORT: Trigger on melee attack
|
||||
BF_LONG: Trigger on ranged attack
|
||||
@ -375,8 +349,7 @@ bonus bUnbreakable,n; Reduces the break chance of all equipped equipment by n%
|
||||
bonus bShortWeaponDamageReturn,n; Reflects n% of received melee damage back to the enemy that caused it.
|
||||
bonus bLongWeaponDamageReturn,n; Reflects n% of received ranged damage back to the enemy that caused it.
|
||||
bonus2 bWeaponComaEle,x,n; Adds a n/100% chance to cause Coma when attacking a monster of element x with normal attack.
|
||||
x: 0=Neutral, 1=Water, 2=Earth, 3=Fire, 4=Wind, 5=Poison,
|
||||
6=Holy, 7=Dark, 8=Spirit, 9=Undead
|
||||
x: Ele_Neutral, Ele_Water, Ele_Earth, Ele_Fire, Ele_Wind, Ele_Poison, Ele_Holy, Ele_Dark, Ele_Ghost, Ele_Undead, Ele_All
|
||||
bonus2 bAddEff2,e,n; Adds a n/100% chance to cause status change e on self when attacking.
|
||||
e: Eff_Blind, Eff_Sleep, Eff_Poison, Eff_Freeze, Eff_Silence,
|
||||
Eff_Stun, Eff_Curse, Eff_Confusion, Eff_Stone, Eff_Bleeding,
|
||||
@ -425,3 +398,25 @@ bonus2 bVariableCastrate,s,x; Increases variable cast time of skill s by x%. (s
|
||||
bonus2 bFixedCastrate,s,x; Increases fixed cast time of skill s by x%. (supports skill names.)
|
||||
bonus4 bSetDefRace,n,x,r,y; Set DEF to y of an enemy of race n at x% for r milliseconds with normal attack.
|
||||
bonus4 bSetMDefRace,n,x,r,y; Set MDEF to y of an enemy of race n at x% for r milliseconds with normal attack.
|
||||
|
||||
|
||||
bonus bIgnoreDefClass,n; Disregard DEF against enemies of class n
|
||||
n: Class_Normal, Class_Boss, Class_Guardian
|
||||
bonus bDefRatioAtkClass,n; Does more damage depending on monster Defense against class n (defense disregard)
|
||||
|
||||
bonus2 bIgnoreDefRaceRate,n,x; Disregard x% of the target's DEF if the target belongs to race n
|
||||
n: RC_Formless, RC_Undead, RC_Brute, RC_Plant, RC_Insect, RC_Fish, RC_Demon, RC_DemiHuman, RC_Angel, RC_Dragon, RC_All
|
||||
bonus2 bAddClass,n,x; +x% physical damage against class n
|
||||
n: Class_Normal, Class_Boss, Class_Guardian
|
||||
bonus2 bSubClass,n,x; +x% damage reduction against class n
|
||||
n: Class_Normal, Class_Boss, Class_Guardian
|
||||
bonus2 bMagicAddClass,n,x; +x% magical damage against class n
|
||||
n: Class_Normal, Class_Boss, Class_Guardian
|
||||
bonus2 bWeaponComaClass,n,y; y/100% chance to cause Coma when attacking a monster of class x with a normal attack
|
||||
n: Class_Normal, Class_Boss, Class_Guardian
|
||||
bonus2 bHpDrainValueClass,n,x; Heals +x HP when attacking a monster of class n with normal attack.
|
||||
n: Class_Normal, Class_Boss, Class_Guardian
|
||||
bonus2 bSpDrainValueClass,n,x; Heals +x SP when attacking a monster of class n with normal attack.
|
||||
n: Class_Normal, Class_Boss, Class_Guardian
|
||||
bonus2 bIgnoreMdefClassRate,n,x; Disregard x% of the target's MDEF if the target belongs to class n
|
||||
n: Class_Normal, Class_Boss, Class_Guardian
|
||||
|
@ -6239,7 +6239,7 @@ ACMD_FUNC(mobsearch)
|
||||
|
||||
if( md->bl.m != sd->bl.m )
|
||||
continue;
|
||||
if( mob_id != -1 && md->class_ != mob_id )
|
||||
if( mob_id != -1 && md->mob_id != mob_id )
|
||||
continue;
|
||||
|
||||
++number;
|
||||
@ -6863,8 +6863,8 @@ ACMD_FUNC(mobinfo)
|
||||
|
||||
#ifdef RENEWAL_EXP
|
||||
if( battle_config.atcommand_mobinfo_type ) {
|
||||
base_exp = base_exp * pc_level_penalty_mod(sd, mob->lv, mob->status.race, mob->status.mode, 1) / 100;
|
||||
job_exp = job_exp * pc_level_penalty_mod(sd, mob->lv, mob->status.race, mob->status.mode, 1) / 100;
|
||||
base_exp = base_exp * pc_level_penalty_mod(sd, mob->lv, mob->status.class_, 1) / 100;
|
||||
job_exp = job_exp * pc_level_penalty_mod(sd, mob->lv, mob->status.class_, 1) / 100;
|
||||
}
|
||||
#endif
|
||||
// stats
|
||||
@ -6897,7 +6897,7 @@ ACMD_FUNC(mobinfo)
|
||||
|
||||
#ifdef RENEWAL_DROP
|
||||
if( battle_config.atcommand_mobinfo_type ) {
|
||||
droprate = droprate * pc_level_penalty_mod(sd, mob->lv, mob->status.race, mob->status.mode, 2) / 100;
|
||||
droprate = droprate * pc_level_penalty_mod(sd, mob->lv, mob->status.class_, 2) / 100;
|
||||
if (droprate <= 0 && !battle_config.drop_rate0item)
|
||||
droprate = 1;
|
||||
}
|
||||
@ -6996,7 +6996,7 @@ ACMD_FUNC(showmobs)
|
||||
|
||||
if( md->bl.m != sd->bl.m )
|
||||
continue;
|
||||
if( mob_id != -1 && md->class_ != mob_id )
|
||||
if( mob_id != -1 && md->mob_id != mob_id )
|
||||
continue;
|
||||
if( md->special_state.ai || md->master_id )
|
||||
continue; // hide slaves and player summoned mobs
|
||||
@ -7425,7 +7425,7 @@ ACMD_FUNC(whodrops)
|
||||
|
||||
#ifdef RENEWAL_DROP
|
||||
if( battle_config.atcommand_mobinfo_type )
|
||||
dropchance = dropchance * pc_level_penalty_mod(sd, mob_db(item_data->mob[j].id)->lv, mob_db(item_data->mob[j].id)->status.race, mob_db(item_data->mob[j].id)->status.mode, 2) / 100;
|
||||
dropchance = dropchance * pc_level_penalty_mod(sd, mob_db(item_data->mob[j].id)->lv, mob_db(item_data->mob[j].id)->status.class_, 2) / 100;
|
||||
#endif
|
||||
sprintf(atcmd_output, "- %s (%02.02f%%)", mob_db(item_data->mob[j].id)->jname, dropchance/100.);
|
||||
clif_displaymessage(fd, atcmd_output);
|
||||
|
291
src/map/battle.c
291
src/map/battle.c
@ -35,7 +35,7 @@
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
|
||||
int attr_fix_table[4][ELE_MAX][ELE_MAX];
|
||||
int attr_fix_table[4][ELE_ALL][ELE_ALL];
|
||||
|
||||
struct Battle_Config battle_config;
|
||||
static struct eri *delay_damage_ers; //For battle delay damage structures.
|
||||
@ -295,10 +295,10 @@ int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src,
|
||||
int battle_attr_ratio(int atk_elem,int def_type, int def_lv)
|
||||
{
|
||||
|
||||
if (atk_elem < 0 || atk_elem >= ELE_MAX)
|
||||
if (atk_elem < 0 || atk_elem >= ELE_ALL)
|
||||
return 100;
|
||||
|
||||
if (def_type < 0 || def_type > ELE_MAX || def_lv < 1 || def_lv > 4)
|
||||
if (def_type < 0 || def_type > ELE_ALL || def_lv < 1 || def_lv > 4)
|
||||
return 100;
|
||||
|
||||
return attr_fix_table[def_lv-1][atk_elem][def_type];
|
||||
@ -317,10 +317,10 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
|
||||
if (src) sc = status_get_sc(src);
|
||||
if (target) tsc = status_get_sc(target);
|
||||
|
||||
if (atk_elem < 0 || atk_elem >= ELE_MAX)
|
||||
atk_elem = rnd()%ELE_MAX;
|
||||
if (atk_elem < 0 || atk_elem >= ELE_ALL)
|
||||
atk_elem = rnd()%ELE_ALL;
|
||||
|
||||
if (def_type < 0 || def_type > ELE_MAX ||
|
||||
if (def_type < 0 || def_type > ELE_ALL ||
|
||||
def_lv < 1 || def_lv > 4) {
|
||||
ShowError("battle_attr_fix: unknown attr type: atk=%d def_type=%d def_lv=%d\n",atk_elem,def_type,def_lv);
|
||||
return damage;
|
||||
@ -431,7 +431,7 @@ int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 d
|
||||
*------------------------------------------*/
|
||||
int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_list *target, int nk, int s_ele, int s_ele_, int64 damage, int left, int flag){
|
||||
struct map_session_data *sd, *tsd;
|
||||
short cardfix = 1000, t_class, s_class, s_race2, t_race2;
|
||||
short cardfix = 1000, t_cf = 0, t_class, s_class, s_race2, t_race2;
|
||||
struct status_data *sstatus, *tstatus;
|
||||
int64 original_damage;
|
||||
int i;
|
||||
@ -453,18 +453,19 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
switch(attack_type){
|
||||
case BF_MAGIC:
|
||||
if ( sd && !(nk&NK_NO_CARDFIX_ATK) ) {
|
||||
cardfix=cardfix*(100+sd->magic_addrace[tstatus->race])/100;
|
||||
t_cf += sd->magic_addrace[tstatus->race] + sd->magic_addrace[RC_ALL];
|
||||
if (!(nk&NK_NO_ELEFIX))
|
||||
cardfix=cardfix*(100+sd->magic_addele[tstatus->def_ele])/100;
|
||||
cardfix=cardfix*(100+sd->magic_addsize[tstatus->size])/100;
|
||||
cardfix=cardfix*(100+sd->magic_addrace[is_boss(target)?RC_BOSS:RC_NONBOSS])/100;
|
||||
cardfix=cardfix*(100+sd->magic_atk_ele[s_ele])/100;
|
||||
t_cf += sd->magic_addele[tstatus->def_ele] + sd->magic_addele[ELE_ALL];
|
||||
t_cf += sd->magic_addsize[tstatus->size] + sd->magic_addsize[SZ_ALL];
|
||||
t_cf += sd->magic_addclass[tstatus->class_] + sd->magic_addclass[CLASS_ALL];
|
||||
t_cf += sd->magic_atk_ele[s_ele] + sd->magic_atk_ele[ELE_ALL];
|
||||
for(i=0; i< ARRAYLENGTH(sd->add_mdmg) && sd->add_mdmg[i].rate;i++) {
|
||||
if(sd->add_mdmg[i].class_ == t_class) {
|
||||
cardfix=cardfix*(100+sd->add_mdmg[i].rate)/100;
|
||||
t_cf += sd->add_mdmg[i].rate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
cardfix = cardfix * ( 100 + t_cf ) / 100;
|
||||
if (cardfix != 1000)
|
||||
bccDAMAGE_RATE(cardfix)
|
||||
}
|
||||
@ -472,10 +473,11 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
if( tsd && !(nk&NK_NO_CARDFIX_DEF) )
|
||||
{ // Target cards.
|
||||
cardfix = 1000; //reset var for target
|
||||
t_cf = 0;
|
||||
|
||||
if (!(nk&NK_NO_ELEFIX))
|
||||
{
|
||||
int ele_fix = tsd->subele[s_ele];
|
||||
int ele_fix = tsd->subele[s_ele] + tsd->subele[ELE_ALL];
|
||||
for (i = 0; ARRAYLENGTH(tsd->subele2) > i && tsd->subele2[i].rate != 0; i++)
|
||||
{
|
||||
if(tsd->subele2[i].ele != s_ele) continue;
|
||||
@ -485,31 +487,31 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
continue;
|
||||
ele_fix += tsd->subele2[i].rate;
|
||||
}
|
||||
cardfix=cardfix*(100-ele_fix)/100;
|
||||
t_cf += ele_fix;
|
||||
}
|
||||
cardfix=cardfix*(100-tsd->subsize[sstatus->size])/100;
|
||||
cardfix=cardfix*(100-tsd->subrace2[s_race2])/100;
|
||||
cardfix=cardfix*(100-tsd->subrace[sstatus->race])/100;
|
||||
cardfix=cardfix*(100-tsd->subrace[is_boss(src)?RC_BOSS:RC_NONBOSS])/100;
|
||||
if( sstatus->race != RC_DEMIHUMAN )
|
||||
cardfix=cardfix*(100-tsd->subrace[RC_NONDEMIHUMAN])/100;
|
||||
t_cf += tsd->subsize[sstatus->size] + tsd->subsize[SZ_ALL];
|
||||
t_cf += tsd->subrace2[s_race2];
|
||||
t_cf += tsd->subrace[sstatus->race] + tsd->subrace[RC_ALL];
|
||||
t_cf += tsd->subclass[sstatus->class_] + tsd->subclass[CLASS_ALL];
|
||||
|
||||
for(i=0; i < ARRAYLENGTH(tsd->add_mdef) && tsd->add_mdef[i].rate;i++) {
|
||||
if(tsd->add_mdef[i].class_ == s_class) {
|
||||
cardfix=cardfix*(100-tsd->add_mdef[i].rate)/100;
|
||||
t_cf += tsd->add_mdef[i].rate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//It was discovered that ranged defense also counts vs magic! [Skotlex]
|
||||
if ( flag&BF_SHORT )
|
||||
cardfix = cardfix * ( 100 - tsd->bonus.near_attack_def_rate ) / 100;
|
||||
t_cf += tsd->bonus.near_attack_def_rate;
|
||||
else
|
||||
cardfix = cardfix * ( 100 - tsd->bonus.long_attack_def_rate ) / 100;
|
||||
t_cf += tsd->bonus.long_attack_def_rate;
|
||||
|
||||
cardfix = cardfix * ( 100 - tsd->bonus.magic_def_rate ) / 100;
|
||||
t_cf += tsd->bonus.magic_def_rate;
|
||||
|
||||
if( tsd->sc.data[SC_MDEF_RATE] )
|
||||
cardfix = cardfix * ( 100 - tsd->sc.data[SC_MDEF_RATE]->val1 ) / 100;
|
||||
t_cf += tsd->sc.data[SC_MDEF_RATE]->val1;
|
||||
|
||||
cardfix = cardfix * ( 100 - t_cf ) / 100;
|
||||
|
||||
if (cardfix != 1000)
|
||||
bccDAMAGE_RATE(cardfix)
|
||||
@ -522,10 +524,12 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
short cardfix_ = 1000;
|
||||
if(sd->state.arrow_atk)
|
||||
{
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace[tstatus->race]+sd->arrow_addrace[tstatus->race])/100;
|
||||
t_cf += sd->right_weapon.addrace[tstatus->race] + sd->arrow_addrace[tstatus->race]
|
||||
+ sd->right_weapon.addrace[RC_ALL] + sd->arrow_addrace[RC_ALL];
|
||||
if (!(nk&NK_NO_ELEFIX))
|
||||
{
|
||||
int ele_fix = sd->right_weapon.addele[tstatus->def_ele] + sd->arrow_addele[tstatus->def_ele];
|
||||
int ele_fix = sd->right_weapon.addele[tstatus->def_ele] + sd->arrow_addele[tstatus->def_ele]
|
||||
+ sd->right_weapon.addele[ELE_ALL] + sd->arrow_addele[ELE_ALL];
|
||||
for (i = 0; ARRAYLENGTH(sd->right_weapon.addele2) > i && sd->right_weapon.addele2[i].rate != 0; i++) {
|
||||
if (sd->right_weapon.addele2[i].ele != tstatus->def_ele) continue;
|
||||
if(!( ((sd->right_weapon.addele2[i].flag)&flag)&BF_WEAPONMASK &&
|
||||
@ -534,22 +538,22 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
continue;
|
||||
ele_fix += sd->right_weapon.addele2[i].rate;
|
||||
}
|
||||
cardfix=cardfix*(100+ele_fix)/100;
|
||||
t_cf += ele_fix;
|
||||
}
|
||||
cardfix=cardfix*(100+sd->right_weapon.addsize[tstatus->size]+sd->arrow_addsize[tstatus->size])/100;
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace2[t_race2])/100;
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]+sd->arrow_addrace[is_boss(target)?RC_BOSS:RC_NONBOSS])/100;
|
||||
if( tstatus->race != RC_DEMIHUMAN )
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace[RC_NONDEMIHUMAN]+sd->arrow_addrace[RC_NONDEMIHUMAN])/100;
|
||||
t_cf += sd->right_weapon.addsize[tstatus->size]+sd->arrow_addsize[tstatus->size]
|
||||
+ sd->right_weapon.addsize[SZ_ALL]+sd->arrow_addsize[SZ_ALL];
|
||||
t_cf += sd->right_weapon.addrace2[t_race2];
|
||||
t_cf += sd->right_weapon.addclass[tstatus->class_]+sd->arrow_addclass[tstatus->class_]
|
||||
+ sd->right_weapon.addclass[CLASS_ALL]+sd->arrow_addclass[CLASS_ALL];
|
||||
}
|
||||
else
|
||||
{ // Melee attack
|
||||
int skill_learnlv=0;
|
||||
if( !battle_config.left_cardfix_to_right )
|
||||
{
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace[tstatus->race])/100;
|
||||
t_cf += sd->right_weapon.addrace[tstatus->race] + sd->right_weapon.addrace[RC_ALL];
|
||||
if (!(nk&NK_NO_ELEFIX)) {
|
||||
int ele_fix = sd->right_weapon.addele[tstatus->def_ele];
|
||||
int ele_fix = sd->right_weapon.addele[tstatus->def_ele] + sd->right_weapon.addele[ELE_ALL];
|
||||
for (i = 0; ARRAYLENGTH(sd->right_weapon.addele2) > i && sd->right_weapon.addele2[i].rate != 0; i++) {
|
||||
if (sd->right_weapon.addele2[i].ele != tstatus->def_ele) continue;
|
||||
if(!( ((sd->right_weapon.addele2[i].flag)&flag)&BF_WEAPONMASK &&
|
||||
@ -558,19 +562,17 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
continue;
|
||||
ele_fix += sd->right_weapon.addele2[i].rate;
|
||||
}
|
||||
cardfix=cardfix*(100+ele_fix)/100;
|
||||
t_cf += ele_fix;
|
||||
}
|
||||
cardfix=cardfix*(100+sd->right_weapon.addsize[tstatus->size])/100;
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace2[t_race2])/100;
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS])/100;
|
||||
if( tstatus->race != RC_DEMIHUMAN )
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace[RC_NONDEMIHUMAN])/100;
|
||||
t_cf += sd->right_weapon.addsize[tstatus->size] + sd->right_weapon.addsize[SZ_ALL];
|
||||
t_cf += sd->right_weapon.addrace2[t_race2];
|
||||
t_cf += sd->right_weapon.addclass[tstatus->class_] + sd->right_weapon.addclass[CLASS_ALL];
|
||||
|
||||
if( left&1 )
|
||||
{
|
||||
cardfix_=cardfix_*(100+sd->left_weapon.addrace[tstatus->race])/100;
|
||||
t_cf += sd->left_weapon.addrace[tstatus->race] + sd->left_weapon.addrace[RC_ALL];
|
||||
if (!(nk&NK_NO_ELEFIX)) {
|
||||
int ele_fix_lh = sd->left_weapon.addele[tstatus->def_ele];
|
||||
int ele_fix_lh = sd->left_weapon.addele[tstatus->def_ele] + sd->left_weapon.addele[ELE_ALL];
|
||||
for (i = 0; ARRAYLENGTH(sd->left_weapon.addele2) > i && sd->left_weapon.addele2[i].rate != 0; i++) {
|
||||
if (sd->left_weapon.addele2[i].ele != tstatus->def_ele) continue;
|
||||
if(!( ((sd->left_weapon.addele2[i].flag)&flag)&BF_WEAPONMASK &&
|
||||
@ -579,13 +581,11 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
continue;
|
||||
ele_fix_lh += sd->left_weapon.addele2[i].rate;
|
||||
}
|
||||
cardfix=cardfix*(100+ele_fix_lh)/100;
|
||||
t_cf += ele_fix_lh;
|
||||
}
|
||||
cardfix_=cardfix_*(100+sd->left_weapon.addsize[tstatus->size])/100;
|
||||
cardfix_=cardfix_*(100+sd->left_weapon.addrace2[t_race2])/100;
|
||||
cardfix_=cardfix_*(100+sd->left_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS])/100;
|
||||
if( tstatus->race != RC_DEMIHUMAN )
|
||||
cardfix_=cardfix_*(100+sd->left_weapon.addrace[RC_NONDEMIHUMAN])/100;
|
||||
t_cf += sd->left_weapon.addsize[tstatus->size] + sd->left_weapon.addsize[SZ_ALL];
|
||||
t_cf += sd->left_weapon.addrace2[t_race2];
|
||||
t_cf += sd->left_weapon.addclass[tstatus->class_] + sd->left_weapon.addclass[CLASS_ALL];
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -608,23 +608,24 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
ele_fix += sd->left_weapon.addele2[i].rate;
|
||||
}
|
||||
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace[tstatus->race]+sd->left_weapon.addrace[tstatus->race])/100;
|
||||
cardfix=cardfix*(100+ele_fix)/100;
|
||||
cardfix=cardfix*(100+sd->right_weapon.addsize[tstatus->size]+sd->left_weapon.addsize[tstatus->size])/100;
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace2[t_race2]+sd->left_weapon.addrace2[t_race2])/100;
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS]+sd->left_weapon.addrace[is_boss(target)?RC_BOSS:RC_NONBOSS])/100;
|
||||
if( tstatus->race != RC_DEMIHUMAN )
|
||||
cardfix=cardfix*(100+sd->right_weapon.addrace[RC_NONDEMIHUMAN]+sd->left_weapon.addrace[RC_NONDEMIHUMAN])/100;
|
||||
t_cf += sd->right_weapon.addrace[tstatus->race] + sd->left_weapon.addrace[tstatus->race]
|
||||
+ sd->right_weapon.addrace[RC_ALL] + sd->left_weapon.addrace[RC_ALL];
|
||||
t_cf += ele_fix;
|
||||
t_cf += sd->right_weapon.addsize[tstatus->size] + sd->left_weapon.addsize[tstatus->size]
|
||||
+ sd->right_weapon.addsize[SZ_ALL] + sd->left_weapon.addsize[SZ_ALL];
|
||||
t_cf += sd->right_weapon.addrace2[t_race2] + sd->left_weapon.addrace2[t_race2];
|
||||
t_cf += sd->right_weapon.addclass[tstatus->class_] + sd->left_weapon.addclass[tstatus->class_]
|
||||
+ sd->right_weapon.addclass[CLASS_ALL] + sd->left_weapon.addclass[CLASS_ALL];
|
||||
}
|
||||
if (sd->status.weapon == W_KATAR && (skill_learnlv=pc_checkskill(sd,ASC_KATAR)) > 0) { // Adv. Katar Mastery functions similar to a +%ATK card on official [helvetica]
|
||||
cardfix = cardfix * (100 + (10 + 2 * skill_learnlv)) / 100;
|
||||
t_cf += (10 + 2 * skill);
|
||||
}
|
||||
}
|
||||
for( i = 0; i < ARRAYLENGTH(sd->right_weapon.add_dmg) && sd->right_weapon.add_dmg[i].rate; i++ )
|
||||
{
|
||||
if( sd->right_weapon.add_dmg[i].class_ == t_class )
|
||||
{
|
||||
cardfix=cardfix*(100+sd->right_weapon.add_dmg[i].rate)/100;
|
||||
t_cf += sd->right_weapon.add_dmg[i].rate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -643,8 +644,9 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
|
||||
#ifndef RENEWAL
|
||||
if( flag&BF_LONG )
|
||||
cardfix = cardfix * ( 100 + sd->bonus.long_attack_atk_rate ) / 100;
|
||||
t_cf += sd->bonus.long_attack_atk_rate;
|
||||
#endif
|
||||
cardfix = cardfix * ( 100 + t_cf ) / 100;
|
||||
|
||||
if( (left&1) && cardfix_ != 1000 )
|
||||
bccDAMAGE_RATE(cardfix_)
|
||||
@ -654,7 +656,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
} else if( tsd && !(nk&NK_NO_CARDFIX_DEF) && !(left&2) ){ //Target cards should be checked
|
||||
if( !(nk&NK_NO_ELEFIX) )
|
||||
{
|
||||
int ele_fix = tsd->subele[s_ele];
|
||||
int ele_fix = tsd->subele[s_ele] + tsd->subele[ELE_ALL];
|
||||
for (i = 0; ARRAYLENGTH(tsd->subele2) > i && tsd->subele2[i].rate != 0; i++)
|
||||
{
|
||||
if(tsd->subele2[i].ele != s_ele) continue;
|
||||
@ -664,10 +666,10 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
continue;
|
||||
ele_fix += tsd->subele2[i].rate;
|
||||
}
|
||||
cardfix=cardfix*(100-ele_fix)/100;
|
||||
t_cf += ele_fix;
|
||||
if( left&1 && s_ele_ != s_ele )
|
||||
{
|
||||
int ele_fix_lh = tsd->subele[s_ele_];
|
||||
int ele_fix_lh = tsd->subele[s_ele_] + tsd->subele[ELE_ALL];
|
||||
for (i = 0; ARRAYLENGTH(tsd->subele2) > i && tsd->subele2[i].rate != 0; i++)
|
||||
{
|
||||
if(tsd->subele2[i].ele != s_ele_) continue;
|
||||
@ -677,30 +679,30 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
continue;
|
||||
ele_fix_lh += tsd->subele2[i].rate;
|
||||
}
|
||||
cardfix=cardfix*(100-ele_fix_lh)/100;
|
||||
t_cf += ele_fix_lh;
|
||||
}
|
||||
}
|
||||
cardfix=cardfix*(100-tsd->subsize[sstatus->size])/100;
|
||||
cardfix=cardfix*(100-tsd->subrace2[s_race2])/100;
|
||||
cardfix=cardfix*(100-tsd->subrace[sstatus->race])/100;
|
||||
cardfix=cardfix*(100-tsd->subrace[is_boss(src)?RC_BOSS:RC_NONBOSS])/100;
|
||||
if( sstatus->race != RC_DEMIHUMAN )
|
||||
cardfix=cardfix*(100-tsd->subrace[RC_NONDEMIHUMAN])/100;
|
||||
t_cf += tsd->subsize[sstatus->size] + tsd->subsize[SZ_ALL];
|
||||
t_cf += tsd->subrace2[s_race2];
|
||||
t_cf += tsd->subrace[sstatus->race] + tsd->subrace[RC_ALL];
|
||||
t_cf += tsd->subclass[sstatus->class_] + tsd->subclass[CLASS_ALL];
|
||||
|
||||
for( i = 0; i < ARRAYLENGTH(tsd->add_def) && tsd->add_def[i].rate;i++ ) {
|
||||
if( tsd->add_def[i].class_ == s_class ) {
|
||||
cardfix=cardfix*(100-tsd->add_def[i].rate)/100;
|
||||
t_cf += tsd->add_def[i].rate;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( flag&BF_SHORT )
|
||||
cardfix = cardfix * ( 100 - tsd->bonus.near_attack_def_rate ) / 100;
|
||||
t_cf += tsd->bonus.near_attack_def_rate;
|
||||
else // BF_LONG (there's no other choice)
|
||||
cardfix = cardfix * ( 100 - tsd->bonus.long_attack_def_rate ) / 100;
|
||||
t_cf += tsd->bonus.long_attack_def_rate;
|
||||
|
||||
if( tsd->sc.data[SC_DEF_RATE] )
|
||||
cardfix = cardfix * ( 100 - tsd->sc.data[SC_DEF_RATE]->val1 ) / 100;
|
||||
t_cf += tsd->sc.data[SC_DEF_RATE]->val1;
|
||||
|
||||
cardfix = cardfix * ( 100 - t_cf ) / 100;
|
||||
|
||||
if( cardfix != 1000 )
|
||||
bccDAMAGE_RATE(cardfix)
|
||||
@ -711,7 +713,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
// misc damage reduction from equipment
|
||||
if (!(nk&NK_NO_ELEFIX))
|
||||
{
|
||||
int ele_fix = tsd->subele[s_ele];
|
||||
int ele_fix = tsd->subele[s_ele] + tsd->subele[ELE_ALL];
|
||||
for (i = 0; ARRAYLENGTH(tsd->subele2) > i && tsd->subele2[i].rate != 0; i++)
|
||||
{
|
||||
if(tsd->subele2[i].ele != s_ele) continue;
|
||||
@ -721,20 +723,20 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
|
||||
continue;
|
||||
ele_fix += tsd->subele2[i].rate;
|
||||
}
|
||||
cardfix=cardfix*(100-ele_fix)/100;
|
||||
t_cf += ele_fix;
|
||||
}
|
||||
cardfix=cardfix*(100-tsd->subsize[sstatus->size])/100;
|
||||
cardfix=cardfix*(100-tsd->subrace2[s_race2])/100;
|
||||
cardfix=cardfix*(100-tsd->subrace[sstatus->race])/100;
|
||||
cardfix=cardfix*(100-tsd->subrace[is_boss(src)?RC_BOSS:RC_NONBOSS])/100;
|
||||
if( sstatus->race != RC_DEMIHUMAN )
|
||||
cardfix=cardfix*(100-tsd->subrace[RC_NONDEMIHUMAN])/100;
|
||||
t_cf += tsd->subsize[sstatus->size] + tsd->subsize[SZ_ALL];
|
||||
t_cf += tsd->subrace2[s_race2];
|
||||
t_cf += tsd->subrace[sstatus->race] + tsd->subrace[RC_ALL];
|
||||
t_cf += tsd->subclass[sstatus->class_] + tsd->subclass[CLASS_ALL];
|
||||
|
||||
cardfix = cardfix * ( 100 - tsd->bonus.misc_def_rate ) / 100;
|
||||
t_cf += tsd->bonus.misc_def_rate;
|
||||
if( flag&BF_SHORT )
|
||||
cardfix = cardfix * ( 100 - tsd->bonus.near_attack_def_rate ) / 100;
|
||||
t_cf += tsd->bonus.near_attack_def_rate;
|
||||
else // BF_LONG (there's no other choice)
|
||||
cardfix = cardfix * ( 100 - tsd->bonus.long_attack_def_rate ) / 100;
|
||||
t_cf += tsd->bonus.long_attack_def_rate;
|
||||
|
||||
cardfix = cardfix * ( 100 - t_cf ) / 100;
|
||||
|
||||
if (cardfix != 10000)
|
||||
bccDAMAGE_RATE(cardfix)
|
||||
@ -1045,13 +1047,13 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
int i;
|
||||
if (sc->data[SC_MANU_DEF])
|
||||
for (i=0;ARRAYLENGTH(mob_manuk)>i;i++)
|
||||
if (mob_manuk[i]==((TBL_MOB*)src)->class_) {
|
||||
if (mob_manuk[i]==((TBL_MOB*)src)->mob_id) {
|
||||
DAMAGE_SUBRATE(sc->data[SC_MANU_DEF]->val1)
|
||||
break;
|
||||
}
|
||||
if (sc->data[SC_SPL_DEF])
|
||||
for (i=0;ARRAYLENGTH(mob_splendide)>i;i++)
|
||||
if (mob_splendide[i]==((TBL_MOB*)src)->class_) {
|
||||
if (mob_splendide[i]==((TBL_MOB*)src)->mob_id) {
|
||||
DAMAGE_SUBRATE(sc->data[SC_SPL_DEF]->val1)
|
||||
break;
|
||||
}
|
||||
@ -1196,7 +1198,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
((sce=sc->data[SC_MANU_MATK]) && (flag&BF_MAGIC))
|
||||
)
|
||||
for (i=0;ARRAYLENGTH(mob_manuk)>i;i++)
|
||||
if (((TBL_MOB*)bl)->class_==mob_manuk[i]) {
|
||||
if (((TBL_MOB*)bl)->mob_id==mob_manuk[i]) {
|
||||
DAMAGE_ADDRATE(sce->val1)
|
||||
break;
|
||||
}
|
||||
@ -1204,7 +1206,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
((sce=sc->data[SC_SPL_MATK]) && (flag&BF_MAGIC))
|
||||
)
|
||||
for (i=0;ARRAYLENGTH(mob_splendide)>i;i++)
|
||||
if (((TBL_MOB*)bl)->class_==mob_splendide[i]) {
|
||||
if (((TBL_MOB*)bl)->mob_id==mob_splendide[i]) {
|
||||
DAMAGE_ADDRATE(sce->val1)
|
||||
break;
|
||||
}
|
||||
@ -1274,7 +1276,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
|
||||
else if( element == -2 ) //Use enchantment's element
|
||||
element = status_get_attack_sc_element(src,status_get_sc(src));
|
||||
else if( element == -3 ) //Use random element
|
||||
element = rnd()%ELE_MAX;
|
||||
element = rnd()%ELE_ALL;
|
||||
if( element == ELE_FIRE || element == ELE_WATER )
|
||||
pc_overheat(sd,element == ELE_FIRE ? 1 : -1);
|
||||
}
|
||||
@ -1298,7 +1300,7 @@ int64 battle_calc_bg_damage(struct block_list *src, struct block_list *bl, int64
|
||||
|
||||
if( bl->type == BL_MOB ) {
|
||||
struct mob_data* md = BL_CAST(BL_MOB, bl);
|
||||
if( map[bl->m].flag.battleground && (md->class_ == MOBID_BLUE_CRYST || md->class_ == MOBID_PINK_CRYST) && flag&BF_SKILL )
|
||||
if( map[bl->m].flag.battleground && (md->mob_id == MOBID_BLUE_CRYST || md->mob_id == MOBID_PINK_CRYST) && flag&BF_SKILL )
|
||||
return 0; // Crystal cannot receive skill damage on battlegrounds
|
||||
}
|
||||
if(skill_get_inf2(skill_id)&INF2_NO_BG_DMG)
|
||||
@ -1976,7 +1978,7 @@ static bool is_attack_critical(struct Damage wd, struct block_list *src, struct
|
||||
{
|
||||
short cri = sstatus->cri;
|
||||
if (sd) {
|
||||
cri+= sd->critaddrace[tstatus->race];
|
||||
cri += sd->critaddrace[tstatus->race] + sd->critaddrace[RC_ALL];
|
||||
if(is_skill_using_arrow(src, skill_id))
|
||||
cri += sd->bonus.arrow_cri;
|
||||
}
|
||||
@ -2038,14 +2040,14 @@ static int is_attack_piercing(struct Damage wd, struct block_list *src, struct b
|
||||
{ //Elemental/Racial adjustments
|
||||
if( sd && (sd->right_weapon.def_ratio_atk_ele & (1<<tstatus->def_ele) ||
|
||||
sd->right_weapon.def_ratio_atk_race & (1<<tstatus->race) ||
|
||||
sd->right_weapon.def_ratio_atk_race & (1<<(is_boss(target)?RC_BOSS:RC_NONBOSS)))
|
||||
sd->right_weapon.def_ratio_atk_class & (1<<tstatus->class_))
|
||||
)
|
||||
if (weapon_position == EQI_HAND_R)
|
||||
return 1;
|
||||
|
||||
if( sd && (sd->left_weapon.def_ratio_atk_ele & (1<<tstatus->def_ele) ||
|
||||
sd->left_weapon.def_ratio_atk_race & (1<<tstatus->race) ||
|
||||
sd->left_weapon.def_ratio_atk_race & (1<<(is_boss(target)?RC_BOSS:RC_NONBOSS))) )
|
||||
sd->left_weapon.def_ratio_atk_class & (1<<tstatus->class_)) )
|
||||
{ //Pass effect onto right hand if configured so. [Skotlex]
|
||||
if (battle_config.left_cardfix_to_right && is_attack_right_handed(src, skill_id)){
|
||||
if (weapon_position == EQI_HAND_R)
|
||||
@ -2236,15 +2238,15 @@ static bool attack_ignores_def(struct Damage wd, struct block_list *src, struct
|
||||
else if (skill_id != CR_GRANDCROSS && skill_id != NPC_GRANDDARKNESS)
|
||||
#endif
|
||||
{ //Ignore Defense?
|
||||
if (sd && ((sd->right_weapon.ignore_def_ele & (1<<tstatus->def_ele)) ||
|
||||
sd->right_weapon.ignore_def_race & (1<<tstatus->race) ||
|
||||
sd->right_weapon.ignore_def_race & (is_boss(target)?1<<RC_BOSS:1<<RC_NONBOSS)))
|
||||
if (sd && (sd->right_weapon.ignore_def_ele & (1<<tstatus->def_ele) || sd->right_weapon.ignore_def_ele & (1<<ELE_ALL) ||
|
||||
sd->right_weapon.ignore_def_race & (1<<tstatus->race) || sd->right_weapon.ignore_def_race & (1<<RC_ALL) ||
|
||||
sd->right_weapon.ignore_def_class & (1<<tstatus->class_) || sd->right_weapon.ignore_def_class & (1<<CLASS_ALL)))
|
||||
if (weapon_position == EQI_HAND_R)
|
||||
return true;
|
||||
|
||||
if (sd && ((sd->left_weapon.ignore_def_ele & (1<<tstatus->def_ele)) ||
|
||||
sd->left_weapon.ignore_def_race & (1<<tstatus->race) ||
|
||||
sd->left_weapon.ignore_def_race & (is_boss(target)?1<<RC_BOSS:1<<RC_NONBOSS)))
|
||||
if (sd && (sd->left_weapon.ignore_def_ele & (1<<tstatus->def_ele) || sd->left_weapon.ignore_def_ele & (1<<ELE_ALL) ||
|
||||
sd->left_weapon.ignore_def_race & (1<<tstatus->race) || sd->left_weapon.ignore_def_race & (1<<RC_ALL) ||
|
||||
sd->left_weapon.ignore_def_class & (1<<tstatus->class_) || sd->left_weapon.ignore_def_class & (1<<CLASS_ALL)))
|
||||
{
|
||||
if(battle_config.left_cardfix_to_right && is_attack_right_handed(src, skill_id)) {//Move effect to right hand. [Skotlex]
|
||||
if (weapon_position == EQI_HAND_R)
|
||||
@ -2346,7 +2348,7 @@ static int battle_get_weapon_element(struct Damage wd, struct block_list *src, s
|
||||
else if( element == -2 ) //Use enchantment's element
|
||||
element = status_get_attack_sc_element(src,sc);
|
||||
else if( element == -3 ) //Use random element
|
||||
element = rnd()%ELE_MAX;
|
||||
element = rnd()%ELE_ALL;
|
||||
|
||||
switch( skill_id ) {
|
||||
case GS_GROUNDDRIFT:
|
||||
@ -3935,8 +3937,7 @@ struct Damage battle_calc_defense_reduction(struct Damage wd, struct block_list
|
||||
#endif
|
||||
if( sd )
|
||||
{
|
||||
i = sd->ignore_def[is_boss(target)?RC_BOSS:RC_NONBOSS];
|
||||
i += sd->ignore_def[tstatus->race];
|
||||
i = sd->ignore_def_by_race[tstatus->race] + sd->ignore_def_by_race[RC_ALL];
|
||||
if( i )
|
||||
{
|
||||
if( i > 100 ) i = 100;
|
||||
@ -4492,7 +4493,7 @@ void battle_do_reflect(int attack_type, struct Damage *wd, struct block_list* sr
|
||||
isDevotRdamage = true;
|
||||
}
|
||||
rdelay = clif_damage(src, (!isDevotRdamage) ? src : d_bl, tick, wd->amotion, sstatus->dmotion, rdamage, 1, 4, 0);
|
||||
if( tsd ) battle_drain(tsd, src, rdamage, rdamage, sstatus->race, is_boss(src));
|
||||
if( tsd ) battle_drain(tsd, src, rdamage, rdamage, sstatus->race, sstatus->class_);
|
||||
//Use Reflect Shield to signal this kind of skill trigger. [Skotlex]
|
||||
battle_delay_damage(tick, wd->amotion,target,(!isDevotRdamage) ? src : d_bl,0,CR_REFLECTSHIELD,0,rdamage,ATK_DEF,rdelay,true);
|
||||
skill_additional_effect(target, (!isDevotRdamage) ? src : d_bl, CR_REFLECTSHIELD, 1, BF_WEAPON|BF_SHORT|BF_NORMAL,ATK_DEF,tick);
|
||||
@ -4523,7 +4524,7 @@ void battle_do_reflect(int attack_type, struct Damage *wd, struct block_list* sr
|
||||
map_foreachinshootrange(battle_damage_area,target,skill_get_splash(LG_REFLECTDAMAGE,1),BL_CHAR,tick,target,wd->amotion,sstatus->dmotion,rdamage,tstatus->race);
|
||||
else if(attack_type == BF_WEAPON || attack_type == BF_MISC) {
|
||||
rdelay = clif_damage(src, (!isDevotRdamage) ? src : d_bl, tick, wd->amotion, sstatus->dmotion, rdamage, 1, 4, 0);
|
||||
if( tsd ) battle_drain(tsd, src, rdamage, rdamage, sstatus->race, is_boss(src));
|
||||
if( tsd ) battle_drain(tsd, src, rdamage, rdamage, sstatus->race, sstatus->class_);
|
||||
// It appears that official servers give skill reflect damage a longer delay
|
||||
battle_delay_damage(tick, wd->amotion,target,(!isDevotRdamage) ? src : d_bl,0,CR_REFLECTSHIELD,0,rdamage,ATK_DEF,rdelay,true);
|
||||
skill_additional_effect(target, (!isDevotRdamage) ? src : d_bl, CR_REFLECTSHIELD, 1, BF_WEAPON|BF_SHORT|BF_NORMAL,ATK_DEF,tick);
|
||||
@ -4832,7 +4833,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
}else if (s_ele == -2) //Use status element
|
||||
s_ele = status_get_attack_sc_element(src,status_get_sc(src));
|
||||
else if( s_ele == -3 ) //Use random element
|
||||
s_ele = rnd()%ELE_MAX;
|
||||
s_ele = rnd()%ELE_ALL;
|
||||
|
||||
if( skill_id == SO_PSYCHIC_WAVE ) {
|
||||
if( sc && sc->count ) {
|
||||
@ -5330,9 +5331,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
|
||||
//Ignore Defense?
|
||||
if (!flag.imdef && (
|
||||
sd->bonus.ignore_mdef_ele & ( 1 << tstatus->def_ele ) ||
|
||||
sd->bonus.ignore_mdef_race & ( 1 << tstatus->race ) ||
|
||||
sd->bonus.ignore_mdef_race & ( is_boss(target) ? 1 << RC_BOSS : 1 << RC_NONBOSS )
|
||||
sd->bonus.ignore_mdef_ele & ( 1 << tstatus->def_ele ) || sd->bonus.ignore_mdef_ele & ( 1 << ELE_ALL ) ||
|
||||
sd->bonus.ignore_mdef_race & ( 1 << tstatus->race ) || sd->bonus.ignore_mdef_race & ( 1 << RC_ALL ) ||
|
||||
sd->bonus.ignore_mdef_class & ( 1 << tstatus->class_ ) || sd->bonus.ignore_mdef_class & ( 1 << CLASS_ALL )
|
||||
))
|
||||
flag.imdef = 1;
|
||||
}
|
||||
@ -5345,8 +5346,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
|
||||
mdef <<= 1; // only eMDEF is doubled
|
||||
#endif
|
||||
if(sd) {
|
||||
i = sd->ignore_mdef[is_boss(target)?RC_BOSS:RC_NONBOSS];
|
||||
i+= sd->ignore_mdef[tstatus->race];
|
||||
i = sd->ignore_mdef_by_race[tstatus->race] + sd->ignore_mdef_by_race[RC_ALL];
|
||||
i += sd->ignore_mdef_by_class[tstatus->class_] + sd->ignore_mdef_by_class[CLASS_ALL];
|
||||
i += sd->ignore_mdef;
|
||||
if (i)
|
||||
{
|
||||
if (i > 100) i = 100;
|
||||
@ -5510,7 +5512,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
|
||||
if (s_ele < 0 && s_ele != -3) //Attack that takes weapon's element for misc attacks? Make it neutral [Skotlex]
|
||||
s_ele = ELE_NEUTRAL;
|
||||
else if (s_ele == -3) //Use random element
|
||||
s_ele = rnd()%ELE_MAX;
|
||||
s_ele = rnd()%ELE_ALL;
|
||||
|
||||
//Skill Range Criteria
|
||||
md.flag |= battle_range_type(src, target, skill_id, skill_lv);
|
||||
@ -5968,41 +5970,49 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i
|
||||
/*===========================================
|
||||
* Perform battle drain effects (HP/SP loss)
|
||||
*-------------------------------------------*/
|
||||
void battle_drain(TBL_PC *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int boss)
|
||||
void battle_drain(TBL_PC *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int class_)
|
||||
{
|
||||
struct weapon_data *wd;
|
||||
int64 *damage;
|
||||
int type, thp = 0, tsp = 0, rhp = 0, rsp = 0, hp, sp, i;
|
||||
int thp = 0, tsp = 0, rhp = 0, rsp = 0, hp, sp, i;
|
||||
for (i = 0; i < 4; i++) {
|
||||
//First two iterations: Right hand
|
||||
if (i < 2) { wd = &sd->right_weapon; damage = &rdamage; }
|
||||
else { wd = &sd->left_weapon; damage = &ldamage; }
|
||||
if (*damage <= 0) continue;
|
||||
//First and Third iterations: race, other two boss/nonboss state
|
||||
if (i == 0 || i == 2)
|
||||
type = race;
|
||||
else
|
||||
type = boss?RC_BOSS:RC_NONBOSS;
|
||||
//First and Third iterations: race, other two boss/normal state
|
||||
if( i == 1 || i == 3 )
|
||||
{
|
||||
hp = wd->hp_drain_class[class_].value;
|
||||
if (wd->hp_drain_class[class_].rate)
|
||||
hp += battle_calc_drain(*damage, wd->hp_drain_class[class_].rate, wd->hp_drain_class[class_].per);
|
||||
|
||||
hp = wd->hp_drain[type].value;
|
||||
if (wd->hp_drain[type].rate)
|
||||
hp += battle_calc_drain(*damage, wd->hp_drain[type].rate, wd->hp_drain[type].per);
|
||||
sp = wd->sp_drain_class[class_].value;
|
||||
if (wd->sp_drain_class[class_].rate)
|
||||
sp += battle_calc_drain(*damage, wd->sp_drain_class[class_].rate, wd->sp_drain_class[class_].per);
|
||||
|
||||
sp = wd->sp_drain[type].value;
|
||||
if (wd->sp_drain[type].rate)
|
||||
sp += battle_calc_drain(*damage, wd->sp_drain[type].rate, wd->sp_drain[type].per);
|
||||
|
||||
if (hp) {
|
||||
if (wd->hp_drain[type].type)
|
||||
if( hp && wd->hp_drain_class[class_].type )
|
||||
rhp += hp;
|
||||
thp += hp;
|
||||
}
|
||||
if (sp) {
|
||||
if (wd->sp_drain[type].type)
|
||||
if( sp && wd->sp_drain_class[class_].type )
|
||||
rsp += sp;
|
||||
} else {
|
||||
hp = wd->hp_drain_race[race].value;
|
||||
if (wd->hp_drain_race[race].rate)
|
||||
hp += battle_calc_drain(*damage, wd->hp_drain_race[race].rate, wd->hp_drain_race[race].per);
|
||||
|
||||
sp = wd->sp_drain_race[race].value;
|
||||
if (wd->sp_drain_race[race].rate)
|
||||
sp += battle_calc_drain(*damage, wd->sp_drain_race[race].rate, wd->sp_drain_race[race].per);
|
||||
|
||||
if( hp && wd->hp_drain_race[race].type )
|
||||
rhp += hp;
|
||||
if( sp && wd->sp_drain_race[race].type)
|
||||
rsp += sp;
|
||||
}
|
||||
}
|
||||
|
||||
thp += hp;
|
||||
tsp += sp;
|
||||
}
|
||||
}
|
||||
|
||||
if (sd->bonus.sp_vanish_rate && rnd()%1000 < sd->bonus.sp_vanish_rate)
|
||||
status_percent_damage(&sd->bl, tbl, 0, (unsigned char)sd->bonus.sp_vanish_per, false);
|
||||
@ -6011,7 +6021,6 @@ void battle_drain(TBL_PC *sd, struct block_list *tbl, int64 rdamage, int64 ldama
|
||||
&& tbl->type == BL_PC && (map[sd->bl.m].flag.pvp || map[sd->bl.m].flag.gvg))
|
||||
status_percent_damage(&sd->bl, tbl, (unsigned char)sd->bonus.hp_vanish_per, 0, false);
|
||||
|
||||
|
||||
if( sd->sp_gain_race_attack[race] )
|
||||
tsp += sd->sp_gain_race_attack[race];
|
||||
if( sd->hp_gain_race_attack[race] )
|
||||
@ -6043,12 +6052,12 @@ int battle_damage_area( struct block_list *bl, va_list ap) {
|
||||
amotion=va_arg(ap,int);
|
||||
dmotion=va_arg(ap,int);
|
||||
damage=va_arg(ap,int);
|
||||
if( bl->type == BL_MOB && ((TBL_MOB*)bl)->class_ == MOBID_EMPERIUM )
|
||||
if( bl->type == BL_MOB && ((TBL_MOB*)bl)->mob_id == MOBID_EMPERIUM )
|
||||
return 0;
|
||||
if( bl != src && battle_check_target(src,bl,BCT_ENEMY) > 0 ) {
|
||||
map_freeblock_lock();
|
||||
if( src->type == BL_PC )
|
||||
battle_drain((TBL_PC*)src, bl, damage, damage, status_get_race(bl), is_boss(bl));
|
||||
battle_drain((TBL_PC*)src, bl, damage, damage, status_get_race(bl), status_get_class_(bl));
|
||||
if( amotion )
|
||||
battle_delay_damage(tick, amotion,src,bl,0,CR_REFLECTSHIELD,0,damage,ATK_DEF,0,true);
|
||||
else
|
||||
@ -6400,9 +6409,9 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
|
||||
|
||||
if (wd.flag & BF_WEAPON && src != target && damage > 0) {
|
||||
if (battle_config.left_cardfix_to_right)
|
||||
battle_drain(sd, target, wd.damage, wd.damage, tstatus->race, is_boss(target));
|
||||
battle_drain(sd, target, wd.damage, wd.damage, tstatus->race, tstatus->class_);
|
||||
else
|
||||
battle_drain(sd, target, wd.damage, wd.damage2, tstatus->race, is_boss(target));
|
||||
battle_drain(sd, target, wd.damage, wd.damage2, tstatus->race, tstatus->class_);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6687,7 +6696,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
|
||||
}
|
||||
break;
|
||||
case BL_MER:
|
||||
if (t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->class_ == MOBID_EMPERIUM && flag&BCT_ENEMY)
|
||||
if (t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->mob_id == MOBID_EMPERIUM && flag&BCT_ENEMY)
|
||||
return 0; //mercenary may not attack Emperium
|
||||
break;
|
||||
} //end switch actual src
|
||||
@ -6712,7 +6721,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
|
||||
return 0; // You can't target anything out of your duel
|
||||
}
|
||||
}
|
||||
if( map_flag_gvg(m) && !sd->status.guild_id && t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->class_ == MOBID_EMPERIUM )
|
||||
if( map_flag_gvg(m) && !sd->status.guild_id && t_bl->type == BL_MOB && ((TBL_MOB*)t_bl)->mob_id == MOBID_EMPERIUM )
|
||||
return 0; //If you don't belong to a guild, can't target emperium.
|
||||
if( t_bl->type != BL_PC )
|
||||
state |= BCT_ENEMY; //Natural enemy.
|
||||
|
@ -94,7 +94,7 @@ struct block_list* battle_getenemy(struct block_list *target, int type, int rang
|
||||
int battle_gettarget(struct block_list *bl);
|
||||
int battle_getcurrentskill(struct block_list *bl);
|
||||
|
||||
#define is_boss(bl) (status_get_mode(bl)&MD_BOSS) // Can refine later [Aru]
|
||||
#define is_boss(bl) ( status_get_class_(bl) == CLASS_BOSS ) // Can refine later [Aru]
|
||||
|
||||
int battle_check_undead(int race,int element);
|
||||
int battle_check_target(struct block_list *src, struct block_list *target,int flag);
|
||||
|
@ -210,7 +210,7 @@ int elemental_delete(struct elemental_data *ed, int reply) {
|
||||
return unit_free(&ed->bl, 0);
|
||||
|
||||
sd->ed = NULL;
|
||||
sd->status.ele_id = 0;
|
||||
sd->status.class_ = 0;
|
||||
|
||||
return unit_remove_map(&ed->bl, 0);
|
||||
}
|
||||
@ -238,7 +238,7 @@ int elemental_data_received(struct s_elemental *ele, bool flag) {
|
||||
return 0;
|
||||
|
||||
if( !flag || i < 0 ) { // Not created - loaded - DB info
|
||||
sd->status.ele_id = 0;
|
||||
sd->status.class_ = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -274,7 +274,7 @@ int elemental_data_received(struct s_elemental *ele, bool flag) {
|
||||
ed = sd->ed;
|
||||
}
|
||||
|
||||
sd->status.ele_id = ele->elemental_id;
|
||||
sd->status.class_ = ele->elemental_id;
|
||||
|
||||
if( ed->bl.prev == NULL && sd->bl.prev != NULL ) {
|
||||
if(map_addblock(&ed->bl))
|
||||
@ -755,7 +755,7 @@ static int elemental_ai_sub_timer(struct elemental_data *ed, struct map_session_
|
||||
|
||||
static int elemental_ai_sub_foreachclient(struct map_session_data *sd, va_list ap) {
|
||||
unsigned int tick = va_arg(ap,unsigned int);
|
||||
if(sd->status.ele_id && sd->ed)
|
||||
if(sd->status.class_ && sd->ed)
|
||||
elemental_ai_sub_timer(sd->ed,sd,tick);
|
||||
|
||||
return 0;
|
||||
@ -832,8 +832,8 @@ int read_elementaldb(void) {
|
||||
ele = atoi(str[21]);
|
||||
status->def_ele = ele%10;
|
||||
status->ele_lv = ele/20;
|
||||
if( status->def_ele >= ELE_MAX ) {
|
||||
ShowWarning("Elemental %d has invalid element type %d (max element is %d)\n", db->class_, status->def_ele, ELE_MAX - 1);
|
||||
if( status->def_ele >= ELE_ALL ) {
|
||||
ShowWarning("Elemental %d has invalid element type %d (max element is %d)\n", db->class_, status->def_ele, ELE_ALL - 1);
|
||||
status->def_ele = ELE_NEUTRAL;
|
||||
}
|
||||
if( status->ele_lv < 1 || status->ele_lv > 4 ) {
|
||||
|
@ -240,7 +240,7 @@ void log_pick_pc(struct map_session_data* sd, e_log_pick_type type, int amount,
|
||||
void log_pick_mob(struct mob_data* md, e_log_pick_type type, int amount, struct item* itm)
|
||||
{
|
||||
nullpo_retv(md);
|
||||
log_pick(md->class_, md->bl.m, type, amount, itm);
|
||||
log_pick(md->mob_id, md->bl.m, type, amount, itm);
|
||||
}
|
||||
|
||||
/// logs zeny transactions
|
||||
|
@ -53,9 +53,14 @@ void map_msg_reload(void);
|
||||
// Added definitions for WoESE objects. [L0ne_W0lf]
|
||||
enum MOBID {
|
||||
MOBID_PORING = 1002,
|
||||
MOBID_EMPERIUM = 1288,
|
||||
MOBID_A_GUARDIAN = 1285,
|
||||
MOBID_K_GUARDIAN,
|
||||
MOBID_S_GUARDIAN,
|
||||
MOBID_EMPERIUM,
|
||||
MOBID_TREAS01 = 1324,
|
||||
MOBID_TREAS40 = 1363,
|
||||
MOBID_S_GUARDIAN_ = 1899,
|
||||
MOBID_A_GUARDIAN_,
|
||||
MOBID_BARRICADE1 = 1905,
|
||||
MOBID_BARRICADE2,
|
||||
MOBID_GUARIDAN_STONE1,
|
||||
@ -274,10 +279,14 @@ enum {
|
||||
RC_DEMIHUMAN,
|
||||
RC_ANGEL,
|
||||
RC_DRAGON,
|
||||
RC_BOSS,
|
||||
RC_NONBOSS,
|
||||
RC_NONDEMIHUMAN,
|
||||
RC_MAX
|
||||
RC_ALL
|
||||
};
|
||||
|
||||
enum {
|
||||
CLASS_NORMAL = 0,
|
||||
CLASS_BOSS,
|
||||
CLASS_GUARDIAN,
|
||||
CLASS_ALL
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -302,7 +311,7 @@ enum {
|
||||
ELE_DARK,
|
||||
ELE_GHOST,
|
||||
ELE_UNDEAD,
|
||||
ELE_MAX,
|
||||
ELE_ALL,
|
||||
ELE_NONE
|
||||
};
|
||||
|
||||
@ -338,7 +347,7 @@ struct block_list {
|
||||
// Mob List Held in memory for Dynamic Mobs [Wizputer]
|
||||
// Expanded to specify all mob-related spawn data by [Skotlex]
|
||||
struct spawn_data {
|
||||
short class_; //Class, used because a mob can change it's class
|
||||
short id; //ID, used because a mob can change it's class
|
||||
unsigned short m, x, y; //Spawn information (map, point, spawn-area around point)
|
||||
signed short xs, ys;
|
||||
unsigned short num; //Number of mobs using this structure
|
||||
@ -398,7 +407,7 @@ enum _sp {
|
||||
SP_IGNORE_MDEF_ELE,SP_IGNORE_MDEF_RACE, // 1033-1034
|
||||
SP_MAGIC_ADDELE,SP_MAGIC_ADDRACE,SP_MAGIC_ADDSIZE, // 1035-1037
|
||||
SP_PERFECT_HIT_RATE,SP_PERFECT_HIT_ADD_RATE,SP_CRITICAL_RATE,SP_GET_ZENY_NUM,SP_ADD_GET_ZENY_NUM, // 1038-1042
|
||||
SP_ADD_DAMAGE_CLASS,SP_ADD_MAGIC_DAMAGE_CLASS,SP_ADD_DEF_CLASS,SP_ADD_MDEF_CLASS, // 1043-1046
|
||||
SP_ADD_DAMAGE_CLASS,SP_ADD_MAGIC_DAMAGE_CLASS,SP_ADD_DEF_MONSTER,SP_ADD_MDEF_MONSTER, // 1043-1046
|
||||
SP_ADD_MONSTER_DROP_ITEM,SP_DEF_RATIO_ATK_ELE,SP_DEF_RATIO_ATK_RACE,SP_UNBREAKABLE_GARMENT, // 1047-1050
|
||||
SP_HIT_RATE,SP_FLEE_RATE,SP_FLEE2_RATE,SP_DEF_RATE,SP_DEF2_RATE,SP_MDEF_RATE,SP_MDEF2_RATE, // 1051-1057
|
||||
SP_SPLASH_RANGE,SP_SPLASH_ADD_RANGE,SP_AUTOSPELL,SP_HP_DRAIN_RATE,SP_SP_DRAIN_RATE, // 1058-1062
|
||||
@ -409,7 +418,7 @@ enum _sp {
|
||||
SP_HP_DRAIN_VALUE,SP_SP_DRAIN_VALUE, // 1079-1080
|
||||
SP_WEAPON_ATK,SP_WEAPON_ATK_RATE, // 1081-1082
|
||||
SP_DELAYRATE,SP_HP_DRAIN_RATE_RACE,SP_SP_DRAIN_RATE_RACE, // 1083-1085
|
||||
SP_IGNORE_MDEF_RATE,SP_IGNORE_DEF_RATE,SP_SKILL_HEAL2,SP_ADDEFF_ONSKILL, //1086-1089
|
||||
SP_IGNORE_MDEF_RATE,SP_IGNORE_DEF_RACE_RATE,SP_SKILL_HEAL2,SP_ADDEFF_ONSKILL, //1086-1089
|
||||
SP_ADD_HEAL_RATE,SP_ADD_HEAL2_RATE, SP_EQUIP_ATK, //1090-1092
|
||||
|
||||
SP_RESTART_FULL_RECOVER=2000,SP_NO_CASTCANCEL,SP_NO_SIZEFIX,SP_NO_MAGIC_DAMAGE,SP_NO_WEAPON_DAMAGE,SP_NO_GEMSTONE, // 2000-2005
|
||||
@ -427,7 +436,11 @@ enum _sp {
|
||||
SP_EMATK, SP_SP_GAIN_RACE_ATTACK, SP_HP_GAIN_RACE_ATTACK, SP_SKILL_USE_SP_RATE, //2046-2049
|
||||
SP_SKILL_COOLDOWN,SP_SKILL_FIXEDCAST, SP_SKILL_VARIABLECAST, SP_FIXCASTRATE, SP_VARCASTRATE, //2050-2054
|
||||
SP_SKILL_USE_SP,SP_MAGIC_ATK_ELE, SP_ADD_FIXEDCAST, SP_ADD_VARIABLECAST, //2055-2058
|
||||
SP_DEF_SET,SP_MDEF_SET,SP_HP_VANISH_RATE //2059-2061
|
||||
SP_DEF_SET,SP_MDEF_SET,SP_HP_VANISH_RATE, //2059-2061
|
||||
|
||||
SP_IGNORE_DEF_CLASS, SP_IGNORE_MDEF_RACE_RATE, SP_DEF_RATIO_ATK_CLASS, //2062-2064
|
||||
SP_ADDCLASS, SP_SUBCLASS, SP_MAGIC_ADDCLASS, SP_WEAPON_COMA_CLASS, //2065-2068
|
||||
SP_HP_DRAIN_VALUE_CLASS, SP_SP_DRAIN_VALUE_CLASS, SP_IGNORE_MDEF_CLASS_RATE //2069-2071
|
||||
};
|
||||
|
||||
enum _look {
|
||||
|
@ -440,9 +440,9 @@ static bool read_mercenarydb_sub(char* str[], int columns, int current)
|
||||
ele = atoi(str[21]);
|
||||
status->def_ele = ele%10;
|
||||
status->ele_lv = ele/20;
|
||||
if( status->def_ele >= ELE_MAX )
|
||||
if( status->def_ele >= ELE_ALL )
|
||||
{
|
||||
ShowWarning("Mercenary %d has invalid element type %d (max element is %d)\n", db->class_, status->def_ele, ELE_MAX - 1);
|
||||
ShowWarning("Mercenary %d has invalid element type %d (max element is %d)\n", db->class_, status->def_ele, ELE_ALL - 1);
|
||||
status->def_ele = ELE_NEUTRAL;
|
||||
}
|
||||
if( status->ele_lv < 1 || status->ele_lv > 4 )
|
||||
|
291
src/map/mob.c
291
src/map/mob.c
@ -78,7 +78,7 @@ static struct eri *item_drop_list_ers;
|
||||
|
||||
static struct {
|
||||
int qty;
|
||||
int class_[350];
|
||||
int mob_id[350];
|
||||
} summon[MAX_RANDOMMONSTER];
|
||||
|
||||
//Defines the Manuk/Splendide mob groups for the status reductions [Epoque]
|
||||
@ -90,7 +90,7 @@ const int mob_splendide[5] = { 1991, 1992, 1993, 1994, 1995 };
|
||||
*------------------------------------------*/
|
||||
static int mob_makedummymobdb(int);
|
||||
static int mob_spawn_guardian_sub(int tid, unsigned int tick, int id, intptr_t data);
|
||||
int mob_skill_id2skill_idx(int class_,uint16 skill_id);
|
||||
int mob_skill_id2skill_idx(int mob_id,uint16 skill_id);
|
||||
|
||||
/*==========================================
|
||||
* Mob is searched with a name.
|
||||
@ -232,11 +232,11 @@ int mobdb_checkid(const int id)
|
||||
/*==========================================
|
||||
* Returns the view data associated to this mob class.
|
||||
*------------------------------------------*/
|
||||
struct view_data * mob_get_viewdata(int class_)
|
||||
struct view_data * mob_get_viewdata(int mob_id)
|
||||
{
|
||||
if (mob_db(class_) == mob_dummy)
|
||||
if (mob_db(mob_id) == mob_dummy)
|
||||
return 0;
|
||||
return &mob_db(class_)->vd;
|
||||
return &mob_db(mob_id)->vd;
|
||||
}
|
||||
/*==========================================
|
||||
* Cleans up mob-spawn data to make it "valid"
|
||||
@ -245,7 +245,7 @@ int mob_parse_dataset(struct spawn_data *data)
|
||||
{
|
||||
size_t len;
|
||||
|
||||
if ((!mobdb_checkid(data->class_) && !mob_is_clone(data->class_)) || !data->num)
|
||||
if ((!mobdb_checkid(data->id) && !mob_is_clone(data->id)) || !data->num)
|
||||
return 0;
|
||||
|
||||
if( ( len = strlen(data->eventname) ) > 0 )
|
||||
@ -257,9 +257,9 @@ int mob_parse_dataset(struct spawn_data *data)
|
||||
}
|
||||
|
||||
if(strcmp(data->name,"--en--")==0)
|
||||
safestrncpy(data->name, mob_db(data->class_)->name, sizeof(data->name));
|
||||
safestrncpy(data->name, mob_db(data->id)->name, sizeof(data->name));
|
||||
else if(strcmp(data->name,"--ja--")==0)
|
||||
safestrncpy(data->name, mob_db(data->class_)->jname, sizeof(data->name));
|
||||
safestrncpy(data->name, mob_db(data->id)->jname, sizeof(data->name));
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -274,9 +274,9 @@ struct mob_data* mob_spawn_dataset(struct spawn_data *data)
|
||||
md->bl.m = data->m;
|
||||
md->bl.x = data->x;
|
||||
md->bl.y = data->y;
|
||||
md->class_ = data->class_;
|
||||
md->mob_id = data->id;
|
||||
md->state.boss = data->state.boss;
|
||||
md->db = mob_db(md->class_);
|
||||
md->db = mob_db(md->mob_id);
|
||||
if (data->level > 0 && data->level <= MAX_LEVEL)
|
||||
md->level = data->level;
|
||||
memcpy(md->name, data->name, NAME_LENGTH);
|
||||
@ -291,7 +291,7 @@ struct mob_data* mob_spawn_dataset(struct spawn_data *data)
|
||||
md->spawn_timer = INVALID_TIMER;
|
||||
md->deletetimer = INVALID_TIMER;
|
||||
md->skill_idx = -1;
|
||||
status_set_viewdata(&md->bl, md->class_);
|
||||
status_set_viewdata(&md->bl, md->mob_id);
|
||||
status_change_init(&md->bl);
|
||||
unit_dataset(&md->bl);
|
||||
|
||||
@ -315,19 +315,19 @@ struct mob_data* mob_spawn_dataset(struct spawn_data *data)
|
||||
int mob_get_random_id(int type, int flag, int lv)
|
||||
{
|
||||
struct mob_db *mob;
|
||||
int i=0, class_;
|
||||
int i=0, mob_id;
|
||||
if(type < 0 || type >= MAX_RANDOMMONSTER) {
|
||||
ShowError("mob_get_random_id: Invalid type (%d) of random monster.\n", type);
|
||||
return 0;
|
||||
}
|
||||
do {
|
||||
if (type)
|
||||
class_ = summon[type].class_[rnd()%summon[type].qty];
|
||||
mob_id = summon[type].mob_id[rnd()%summon[type].qty];
|
||||
else //Dead branch
|
||||
class_ = rnd() % MAX_MOB_DB;
|
||||
mob = mob_db(class_);
|
||||
mob_id = rnd() % MAX_MOB_DB;
|
||||
mob = mob_db(mob_id);
|
||||
} while ((mob == mob_dummy ||
|
||||
mob_is_clone(class_) ||
|
||||
mob_is_clone(mob_id) ||
|
||||
(flag&1 && mob->summonper[type] <= rnd() % 1000000) ||
|
||||
(flag&2 && lv < mob->lv) ||
|
||||
(flag&4 && mob->status.mode&MD_BOSS) ||
|
||||
@ -335,8 +335,8 @@ int mob_get_random_id(int type, int flag, int lv)
|
||||
) && (i++) < MAX_MOB_DB);
|
||||
|
||||
if(i >= MAX_MOB_DB) // no suitable monster found, use fallback for given list
|
||||
class_ = mob_db_data[0]->summonper[type];
|
||||
return class_;
|
||||
mob_id = mob_db_data[0]->summonper[type];
|
||||
return mob_id;
|
||||
}
|
||||
|
||||
/*==========================================
|
||||
@ -425,14 +425,14 @@ bool mob_ksprotected (struct block_list *src, struct block_list *target)
|
||||
return false;
|
||||
}
|
||||
|
||||
struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m, int16 x, int16 y, const char *mobname, int class_, const char *event, unsigned int size, unsigned int ai)
|
||||
struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m, int16 x, int16 y, const char *mobname, int mob_id, const char *event, unsigned int size, unsigned int ai)
|
||||
{
|
||||
struct spawn_data data;
|
||||
|
||||
memset(&data, 0, sizeof(struct spawn_data));
|
||||
data.m = m;
|
||||
data.num = 1;
|
||||
data.class_ = class_;
|
||||
data.id = mob_id;
|
||||
data.state.size = size;
|
||||
data.state.ai = ai;
|
||||
|
||||
@ -467,7 +467,7 @@ struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m, int16 x, int
|
||||
/*==========================================
|
||||
* Spawn a single mob on the specified coordinates.
|
||||
*------------------------------------------*/
|
||||
int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const char* mobname, int class_, int amount, const char* event, unsigned int size, unsigned int ai)
|
||||
int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const char* mobname, int mob_id, int amount, const char* event, unsigned int size, unsigned int ai)
|
||||
{
|
||||
struct mob_data* md = NULL;
|
||||
int count, lv;
|
||||
@ -479,13 +479,13 @@ int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const
|
||||
|
||||
for (count = 0; count < amount; count++)
|
||||
{
|
||||
int c = (class_ >= 0) ? class_ : mob_get_random_id(-class_ - 1, (battle_config.random_monster_checklv) ? 3 : 1, lv);
|
||||
int c = (mob_id >= 0) ? mob_id : mob_get_random_id(-mob_id - 1, (battle_config.random_monster_checklv) ? 3 : 1, lv);
|
||||
md = mob_once_spawn_sub((sd) ? &sd->bl : NULL, m, x, y, mobname, c, event, size, ai);
|
||||
|
||||
if (!md)
|
||||
continue;
|
||||
|
||||
if (class_ == MOBID_EMPERIUM)
|
||||
if (mob_id == MOBID_EMPERIUM)
|
||||
{
|
||||
struct guild_castle* gc = guild_mapindex2gc(map[m].index);
|
||||
struct guild* g = (gc) ? guild_search(gc->guild_id) : NULL;
|
||||
@ -507,7 +507,7 @@ int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const
|
||||
|
||||
mob_spawn(md);
|
||||
|
||||
if (class_ < 0 && battle_config.dead_branch_active)
|
||||
if (mob_id < 0 && battle_config.dead_branch_active)
|
||||
//Behold Aegis's masterful decisions yet again...
|
||||
//"I understand the "Aggressive" part, but the "Can Move" and "Can Attack" is just stupid" - Poki#3
|
||||
sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE|MD_CANATTACK|MD_CANMOVE|MD_ANGRY, 0, 60000);
|
||||
@ -519,7 +519,7 @@ int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y, const
|
||||
/*==========================================
|
||||
* Spawn mobs in the specified area.
|
||||
*------------------------------------------*/
|
||||
int mob_once_spawn_area(struct map_session_data* sd, int16 m, int16 x0, int16 y0, int16 x1, int16 y1, const char* mobname, int class_, int amount, const char* event, unsigned int size, unsigned int ai)
|
||||
int mob_once_spawn_area(struct map_session_data* sd, int16 m, int16 x0, int16 y0, int16 x1, int16 y1, const char* mobname, int mob_id, int amount, const char* event, unsigned int size, unsigned int ai)
|
||||
{
|
||||
int i, max, id = 0;
|
||||
int lx = -1, ly = -1;
|
||||
@ -565,7 +565,7 @@ int mob_once_spawn_area(struct map_session_data* sd, int16 m, int16 x0, int16 y0
|
||||
lx = x;
|
||||
ly = y;
|
||||
|
||||
id = mob_once_spawn(sd, m, x, y, mobname, class_, 1, event, size, ai);
|
||||
id = mob_once_spawn(sd, m, x, y, mobname, mob_id, 1, event, size, ai);
|
||||
}
|
||||
|
||||
return id; // id of last spawned mob
|
||||
@ -596,7 +596,7 @@ static int mob_spawn_guardian_sub(int tid, unsigned int tick, int id, intptr_t d
|
||||
if (g == NULL)
|
||||
{ //Liberate castle, if the guild is not found this is an error! [Skotlex]
|
||||
ShowError("mob_spawn_guardian_sub: Couldn't load guild %d!\n", (int)data);
|
||||
if (md->class_ == MOBID_EMPERIUM)
|
||||
if (md->mob_id == MOBID_EMPERIUM)
|
||||
{ //Not sure this is the best way, but otherwise we'd be invoking this for ALL guardians spawned later on.
|
||||
md->guardian_data->guild_id = 0;
|
||||
if (md->guardian_data->castle->guild_id) //Free castle up.
|
||||
@ -623,7 +623,7 @@ static int mob_spawn_guardian_sub(int tid, unsigned int tick, int id, intptr_t d
|
||||
/*==========================================
|
||||
* Summoning Guardians [Valaris]
|
||||
*------------------------------------------*/
|
||||
int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobname, int class_, const char* event, int guardian, bool has_index)
|
||||
int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobname, int mob_id, const char* event, int guardian, bool has_index)
|
||||
{
|
||||
struct mob_data *md=NULL;
|
||||
struct spawn_data data;
|
||||
@ -642,12 +642,12 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam
|
||||
}
|
||||
data.m = m;
|
||||
data.num = 1;
|
||||
if(class_<=0) {
|
||||
class_ = mob_get_random_id(-class_-1, 1, 99);
|
||||
if (!class_) return 0;
|
||||
if(mob_id<=0) {
|
||||
mob_id = mob_get_random_id(-mob_id-1, 1, 99);
|
||||
if (!mob_id) return 0;
|
||||
}
|
||||
|
||||
data.class_ = class_;
|
||||
data.id = mob_id;
|
||||
|
||||
if( !has_index )
|
||||
{
|
||||
@ -655,13 +655,13 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam
|
||||
}
|
||||
else if( guardian < 0 || guardian >= MAX_GUARDIANS )
|
||||
{
|
||||
ShowError("mob_spawn_guardian: Invalid guardian index %d for guardian %d (castle map %s)\n", guardian, class_, map[m].name);
|
||||
ShowError("mob_spawn_guardian: Invalid guardian index %d for guardian %d (castle map %s)\n", guardian, mob_id, map[m].name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if((x<=0 || y<=0) && !map_search_freecell(NULL, m, &x, &y, -1,-1, 1))
|
||||
{
|
||||
ShowWarning("mob_spawn_guardian: Couldn't locate a spawn cell for guardian class %d (index %d) at castle map %s\n",class_, guardian, map[m].name);
|
||||
ShowWarning("mob_spawn_guardian: Couldn't locate a spawn cell for guardian class %d (index %d) at castle map %s\n",mob_id, guardian, map[m].name);
|
||||
return 0;
|
||||
}
|
||||
data.x = x;
|
||||
@ -678,7 +678,7 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam
|
||||
return 0;
|
||||
}
|
||||
if (!gc->guild_id)
|
||||
ShowWarning("mob_spawn_guardian: Spawning guardian %d on a castle with no guild (castle map %s)\n", class_, map[m].name);
|
||||
ShowWarning("mob_spawn_guardian: Spawning guardian %d on a castle with no guild (castle map %s)\n", mob_id, map[m].name);
|
||||
else
|
||||
g = guild_search(gc->guild_id);
|
||||
|
||||
@ -728,7 +728,7 @@ int mob_spawn_guardian(const char* mapname, short x, short y, const char* mobnam
|
||||
/*==========================================
|
||||
* Summoning BattleGround [Zephyrus]
|
||||
*------------------------------------------*/
|
||||
int mob_spawn_bg(const char* mapname, short x, short y, const char* mobname, int class_, const char* event, unsigned int bg_id)
|
||||
int mob_spawn_bg(const char* mapname, short x, short y, const char* mobname, int mob_id, const char* event, unsigned int bg_id)
|
||||
{
|
||||
struct mob_data *md = NULL;
|
||||
struct spawn_data data;
|
||||
@ -743,16 +743,16 @@ int mob_spawn_bg(const char* mapname, short x, short y, const char* mobname, int
|
||||
memset(&data, 0, sizeof(struct spawn_data));
|
||||
data.m = m;
|
||||
data.num = 1;
|
||||
if( class_ <= 0 )
|
||||
if( mob_id <= 0 )
|
||||
{
|
||||
class_ = mob_get_random_id(-class_-1,1,99);
|
||||
if( !class_ ) return 0;
|
||||
mob_id = mob_get_random_id(-mob_id-1,1,99);
|
||||
if( !mob_id ) return 0;
|
||||
}
|
||||
|
||||
data.class_ = class_;
|
||||
data.id = mob_id;
|
||||
if( (x <= 0 || y <= 0) && !map_search_freecell(NULL, m, &x, &y, -1,-1, 1) )
|
||||
{
|
||||
ShowWarning("mob_spawn_bg: Couldn't locate a spawn cell for guardian class %d (bg_id %d) at map %s\n",class_, bg_id, map[m].name);
|
||||
ShowWarning("mob_spawn_bg: Couldn't locate a spawn cell for guardian class %d (bg_id %d) at map %s\n",mob_id, bg_id, map[m].name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -802,17 +802,17 @@ int mob_can_reach(struct mob_data *md,struct block_list *bl,int range, int state
|
||||
int mob_linksearch(struct block_list *bl,va_list ap)
|
||||
{
|
||||
struct mob_data *md;
|
||||
int class_;
|
||||
int mob_id;
|
||||
struct block_list *target;
|
||||
unsigned int tick;
|
||||
|
||||
nullpo_ret(bl);
|
||||
md=(struct mob_data *)bl;
|
||||
class_ = va_arg(ap, int);
|
||||
mob_id = va_arg(ap, int);
|
||||
target = va_arg(ap, struct block_list *);
|
||||
tick=va_arg(ap, unsigned int);
|
||||
|
||||
if (md->class_ == class_ && DIFF_TICK(md->last_linktime, tick) < MIN_MOBLINKTIME
|
||||
if (md->mob_id == mob_id && DIFF_TICK(md->last_linktime, tick) < MIN_MOBLINKTIME
|
||||
&& !md->target_id)
|
||||
{
|
||||
md->last_linktime = tick;
|
||||
@ -863,7 +863,7 @@ int mob_setdelayspawn(struct mob_data *md)
|
||||
spawntime+= rnd()%md->spawn->delay2;
|
||||
|
||||
//Apply the spawn delay fix [Skotlex]
|
||||
db = mob_db(md->spawn->class_);
|
||||
db = mob_db(md->spawn->id);
|
||||
mode = db->status.mode;
|
||||
if (mode & MD_BOSS) { //Bosses
|
||||
if (battle_config.boss_spawn_delay != 100) {
|
||||
@ -893,7 +893,7 @@ int mob_count_sub(struct block_list *bl, va_list ap) {
|
||||
ARR_FIND(0, 10, i, (mobid[i] = va_arg(ap, int)) == 0); //fetch till 0
|
||||
if (mobid[0]) { //if there one let's check it otherwise go backward
|
||||
TBL_MOB *md = BL_CAST(BL_MOB, bl);
|
||||
ARR_FIND(0, 10, i, md->class_ == mobid[i]);
|
||||
ARR_FIND(0, 10, i, md->mob_id == mobid[i]);
|
||||
return (i < 10) ? 1 : 0;
|
||||
}
|
||||
return 1; //backward compatibility
|
||||
@ -914,11 +914,11 @@ int mob_spawn (struct mob_data *md)
|
||||
if (md->bl.prev != NULL)
|
||||
unit_remove_map(&md->bl,CLR_RESPAWN);
|
||||
else
|
||||
if (md->spawn && md->class_ != md->spawn->class_)
|
||||
if (md->spawn && md->mob_id != md->spawn->id)
|
||||
{
|
||||
md->class_ = md->spawn->class_;
|
||||
status_set_viewdata(&md->bl, md->class_);
|
||||
md->db = mob_db(md->class_);
|
||||
md->mob_id = md->spawn->id;
|
||||
status_set_viewdata(&md->bl, md->mob_id);
|
||||
md->db = mob_db(md->mob_id);
|
||||
memcpy(md->name,md->spawn->name,NAME_LENGTH);
|
||||
}
|
||||
|
||||
@ -1366,7 +1366,7 @@ int mob_randomwalk(struct mob_data *md,unsigned int tick)
|
||||
if(i==retrycount){
|
||||
md->move_fail_count++;
|
||||
if(md->move_fail_count>1000){
|
||||
ShowWarning("MOB can't move. random spawn %d, class = %d, at %s (%d,%d)\n",md->bl.id,md->class_,map[md->bl.m].name, md->bl.x, md->bl.y);
|
||||
ShowWarning("MOB can't move. random spawn %d, class = %d, at %s (%d,%d)\n",md->bl.id,md->mob_id,map[md->bl.m].name, md->bl.x, md->bl.y);
|
||||
md->move_fail_count=0;
|
||||
mob_spawn(md);
|
||||
}
|
||||
@ -2310,7 +2310,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
||||
if(base_exp || job_exp) {
|
||||
if( md->dmglog[i].flag != MDLF_PET || battle_config.pet_attack_exp_to_master ) {
|
||||
#ifdef RENEWAL_EXP
|
||||
int rate = pc_level_penalty_mod(tmpsd[i], md->level, md->status.race, md->status.mode, 1);
|
||||
int rate = pc_level_penalty_mod(tmpsd[i], md->level, md->status.class_, 1);
|
||||
base_exp = (unsigned int)cap_value(base_exp * rate / 100, 1, UINT_MAX);
|
||||
job_exp = (unsigned int)cap_value(job_exp * rate / 100, 1, UINT_MAX);
|
||||
#endif
|
||||
@ -2341,9 +2341,9 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
||||
struct item_data* it = NULL;
|
||||
int drop_rate;
|
||||
#ifdef RENEWAL_DROP
|
||||
int drop_modifier = mvp_sd ? pc_level_penalty_mod(mvp_sd, md->level, md->status.race, md->status.mode, 2) :
|
||||
second_sd ? pc_level_penalty_mod(second_sd, md->level, md->status.race, md->status.mode, 2):
|
||||
third_sd ? pc_level_penalty_mod(third_sd, md->level, md->status.race, md->status.mode, 2) :
|
||||
int drop_modifier = mvp_sd ? pc_level_penalty_mod(mvp_sd, md->level, md->status.class_, 2) :
|
||||
second_sd ? pc_level_penalty_mod(second_sd, md->level, md->status.class_, 2):
|
||||
third_sd ? pc_level_penalty_mod(third_sd, md->level, md->status.class_, 2) :
|
||||
100;/* no player was attached, we dont use any modifier (100 = rates are not touched) */
|
||||
#endif
|
||||
dlist->m = md->bl.m;
|
||||
@ -2434,10 +2434,10 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
||||
// process script-granted extra drop bonuses
|
||||
int itemid = 0;
|
||||
for (i = 0; i < ARRAYLENGTH(sd->add_drop) && (sd->add_drop[i].id || sd->add_drop[i].group); i++) {
|
||||
if ( sd->add_drop[i].race == -md->class_ ||
|
||||
( sd->add_drop[i].race > 0 && (
|
||||
if ( sd->add_drop[i].race == -md->mob_id ||
|
||||
( (sd->add_drop[i].race > 0 || sd->add_drop[i].class_ > 0) && (
|
||||
sd->add_drop[i].race & (1<<status->race) ||
|
||||
sd->add_drop[i].race & (1<<(status->mode&MD_BOSS?RC_BOSS:RC_NONBOSS))
|
||||
sd->add_drop[i].class_ & (1<<status->class_)
|
||||
)))
|
||||
{
|
||||
//check if the bonus item drop rate should be multiplied with mob level/10 [Lupus]
|
||||
@ -2569,10 +2569,10 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
||||
}
|
||||
}
|
||||
|
||||
log_mvpdrop(mvp_sd, md->class_, log_mvp);
|
||||
log_mvpdrop(mvp_sd, md->mob_id, log_mvp);
|
||||
}
|
||||
|
||||
if (type&2 && !sd && md->class_ == MOBID_EMPERIUM)
|
||||
if (type&2 && !sd && md->mob_id == MOBID_EMPERIUM)
|
||||
//Emperium destroyed by script. Discard mvp character. [Skotlex]
|
||||
mvp_sd = NULL;
|
||||
|
||||
@ -2590,7 +2590,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
||||
}
|
||||
|
||||
if( sd ) {
|
||||
if( sd->mission_mobid == md->class_) { //TK_MISSION [Skotlex]
|
||||
if( sd->mission_mobid == md->mob_id) { //TK_MISSION [Skotlex]
|
||||
if( ++sd->mission_count >= 100 && (temp = mob_get_random_id(0, 0xE, sd->status.base_level)) ) {
|
||||
pc_addfame(sd, 1);
|
||||
sd->mission_mobid = temp;
|
||||
@ -2602,11 +2602,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
||||
}
|
||||
|
||||
if( sd->status.party_id )
|
||||
map_foreachinrange(quest_update_objective_sub,&md->bl,AREA_SIZE,BL_PC,sd->status.party_id,md->class_);
|
||||
map_foreachinrange(quest_update_objective_sub,&md->bl,AREA_SIZE,BL_PC,sd->status.party_id,md->mob_id);
|
||||
else if( sd->avail_quests )
|
||||
quest_update_objective(sd, md->class_);
|
||||
quest_update_objective(sd, md->mob_id);
|
||||
|
||||
if( sd->md && src && src->type == BL_MER && mob_db(md->class_)->lv > sd->status.base_level/2 )
|
||||
if( sd->md && src && src->type == BL_MER && mob_db(md->mob_id)->lv > sd->status.base_level/2 )
|
||||
mercenary_kills(sd->md);
|
||||
}
|
||||
|
||||
@ -2620,7 +2620,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
||||
} else
|
||||
npc_event_do(md->npc_event);
|
||||
} else if( mvp_sd && !md->state.npc_killmonster ) {
|
||||
pc_setparam(mvp_sd, SP_KILLEDRID, md->class_);
|
||||
pc_setparam(mvp_sd, SP_KILLEDRID, md->mob_id);
|
||||
npc_script_event(mvp_sd, NPCE_KILLNPC); // PCKillNPC [Lance]
|
||||
}
|
||||
}
|
||||
@ -2700,7 +2700,7 @@ int mob_guardian_guildchange(struct mob_data *md)
|
||||
|
||||
if (md->guardian_data->castle->guild_id == 0)
|
||||
{ //Castle with no owner? Delete the guardians.
|
||||
if (md->class_ == MOBID_EMPERIUM)
|
||||
if (md->mob_id == MOBID_EMPERIUM)
|
||||
{ //But don't delete the emperium, just clear it's guild-data
|
||||
md->guardian_data->guild_id = 0;
|
||||
md->guardian_data->emblem_id = 0;
|
||||
@ -2756,7 +2756,7 @@ int mob_random_class (int *value, size_t count)
|
||||
/*==========================================
|
||||
* Change mob base class
|
||||
*------------------------------------------*/
|
||||
int mob_class_change (struct mob_data *md, int class_)
|
||||
int mob_class_change (struct mob_data *md, int mob_id)
|
||||
{
|
||||
unsigned int tick = gettick();
|
||||
int i, c, hp_rate;
|
||||
@ -2776,15 +2776,15 @@ int mob_class_change (struct mob_data *md, int class_)
|
||||
if( md->special_state.ai > AI_ATTACK )
|
||||
return 0; //Marine Spheres and Floras.
|
||||
|
||||
if( mob_is_clone(md->class_) )
|
||||
if( mob_is_clone(md->mob_id) )
|
||||
return 0; //Clones
|
||||
|
||||
if( md->class_ == class_ )
|
||||
if( md->mob_id == mob_id )
|
||||
return 0; //Nothing to change.
|
||||
|
||||
hp_rate = get_percentage(md->status.hp, md->status.max_hp);
|
||||
md->class_ = class_;
|
||||
md->db = mob_db(class_);
|
||||
md->mob_id = mob_id;
|
||||
md->db = mob_db(mob_id);
|
||||
if (battle_config.override_mob_names==1)
|
||||
memcpy(md->name,md->db->name,NAME_LENGTH);
|
||||
else
|
||||
@ -2793,7 +2793,7 @@ int mob_class_change (struct mob_data *md, int class_)
|
||||
mob_stop_attack(md);
|
||||
mob_stop_walking(md, 0);
|
||||
unit_skillcastcancel(&md->bl, 0);
|
||||
status_set_viewdata(&md->bl, class_);
|
||||
status_set_viewdata(&md->bl, mob_id);
|
||||
clif_mob_class_change(md,md->vd->class_);
|
||||
status_calc_mob(md, 1);
|
||||
md->ud.state.speed_changed = 1; //Speed change update.
|
||||
@ -2925,8 +2925,8 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,uint16 skill_id)
|
||||
|
||||
for(;k<amount;k++) {
|
||||
short x,y;
|
||||
data.class_ = value[k%count]; //Summon slaves in round-robin fashion. [Skotlex]
|
||||
if (mobdb_checkid(data.class_) == 0)
|
||||
data.id = value[k%count]; //Summon slaves in round-robin fashion. [Skotlex]
|
||||
if (mobdb_checkid(data.id) == 0)
|
||||
continue;
|
||||
|
||||
if (map_search_freecell(&md2->bl, 0, &x, &y, MOB_SLAVEDISTANCE, MOB_SLAVEDISTANCE, 0)) {
|
||||
@ -2987,10 +2987,10 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,uint16 skill_id)
|
||||
* MOBskill lookup (get skillindex through skill_id)
|
||||
* Returns -1 if not found.
|
||||
*------------------------------------------*/
|
||||
int mob_skill_id2skill_idx(int class_,uint16 skill_id)
|
||||
int mob_skill_id2skill_idx(int mob_id,uint16 skill_id)
|
||||
{
|
||||
int i, max = mob_db(class_)->maxskill;
|
||||
struct mob_skill *ms=mob_db(class_)->skill;
|
||||
int i, max = mob_db(mob_id)->maxskill;
|
||||
struct mob_skill *ms=mob_db(mob_id)->skill;
|
||||
|
||||
if(ms==NULL)
|
||||
return -1;
|
||||
@ -3351,13 +3351,13 @@ int mobskill_event(struct mob_data *md, struct block_list *src, unsigned int tic
|
||||
}
|
||||
|
||||
// Player cloned mobs. [Valaris]
|
||||
int mob_is_clone(int class_)
|
||||
int mob_is_clone(int mob_id)
|
||||
{
|
||||
if(class_ < MOB_CLONE_START || class_ > MOB_CLONE_END)
|
||||
if(mob_id < MOB_CLONE_START || mob_id > MOB_CLONE_END)
|
||||
return 0;
|
||||
if (mob_db(class_) == mob_dummy)
|
||||
if (mob_db(mob_id) == mob_dummy)
|
||||
return 0;
|
||||
return class_;
|
||||
return mob_id;
|
||||
}
|
||||
|
||||
//Flag values:
|
||||
@ -3367,7 +3367,7 @@ int mob_is_clone(int class_)
|
||||
//Returns: ID of newly crafted copy.
|
||||
int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, const char *event, int master_id, int mode, int flag, unsigned int duration)
|
||||
{
|
||||
int class_;
|
||||
int mob_id;
|
||||
int i,j,inf,skill_id, fd;
|
||||
struct mob_data *md;
|
||||
struct mob_skill *ms;
|
||||
@ -3379,11 +3379,11 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons
|
||||
if(pc_isdead(sd) && master_id && flag&1)
|
||||
return 0;
|
||||
|
||||
ARR_FIND( MOB_CLONE_START, MOB_CLONE_END, class_, mob_db_data[class_] == NULL );
|
||||
if(class_ >= MOB_CLONE_END)
|
||||
ARR_FIND( MOB_CLONE_START, MOB_CLONE_END, mob_id, mob_db_data[mob_id] == NULL );
|
||||
if(mob_id >= MOB_CLONE_END)
|
||||
return 0;
|
||||
|
||||
db = mob_db_data[class_]=(struct mob_db*)aCalloc(1, sizeof(struct mob_db));
|
||||
db = mob_db_data[mob_id]=(struct mob_db*)aCalloc(1, sizeof(struct mob_db));
|
||||
status = &db->status;
|
||||
strcpy(db->sprite,sd->status.name);
|
||||
strcpy(db->name,sd->status.name);
|
||||
@ -3538,7 +3538,7 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons
|
||||
sd->fd = fd;
|
||||
|
||||
//Finally, spawn it.
|
||||
md = mob_once_spawn_sub(&sd->bl, m, x, y, "--en--", class_, event, SZ_SMALL, AI_NONE);
|
||||
md = mob_once_spawn_sub(&sd->bl, m, x, y, "--en--", mob_id, event, SZ_SMALL, AI_NONE);
|
||||
if (!md) return 0; //Failed?
|
||||
|
||||
md->special_state.clone = 1;
|
||||
@ -3563,11 +3563,11 @@ int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, cons
|
||||
|
||||
int mob_clone_delete(struct mob_data *md)
|
||||
{
|
||||
const int class_ = md->class_;
|
||||
if (class_ >= MOB_CLONE_START && class_ < MOB_CLONE_END
|
||||
&& mob_db_data[class_]!=NULL) {
|
||||
aFree(mob_db_data[class_]);
|
||||
mob_db_data[class_]=NULL;
|
||||
const int mob_id = md->mob_id;
|
||||
if (mob_id >= MOB_CLONE_START && mob_id < MOB_CLONE_END
|
||||
&& mob_db_data[mob_id]!=NULL) {
|
||||
aFree(mob_db_data[mob_id]);
|
||||
mob_db_data[mob_id]=NULL;
|
||||
//Clear references to the db
|
||||
md->db = mob_dummy;
|
||||
md->vd = NULL;
|
||||
@ -3582,16 +3582,16 @@ int mob_clone_delete(struct mob_data *md)
|
||||
/*==========================================
|
||||
* Since un-setting [ mob ] up was used, it is an initial provisional value setup.
|
||||
*------------------------------------------*/
|
||||
static int mob_makedummymobdb(int class_)
|
||||
static int mob_makedummymobdb(int mob_id)
|
||||
{
|
||||
if (mob_dummy != NULL)
|
||||
{
|
||||
if (mob_db(class_) == mob_dummy)
|
||||
if (mob_db(mob_id) == mob_dummy)
|
||||
return 1; //Using the mob_dummy data already. [Skotlex]
|
||||
if (class_ > 0 && class_ <= MAX_MOB_DB)
|
||||
if (mob_id > 0 && mob_id <= MAX_MOB_DB)
|
||||
{ //Remove the mob data so that it uses the dummy data instead.
|
||||
aFree(mob_db_data[class_]);
|
||||
mob_db_data[class_] = NULL;
|
||||
aFree(mob_db_data[mob_id]);
|
||||
mob_db_data[mob_id] = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -3668,23 +3668,23 @@ static bool mob_parse_dbrow(char** str)
|
||||
{
|
||||
struct mob_db *db, entry;
|
||||
struct status_data *status;
|
||||
int class_, i, k;
|
||||
int mob_id, i, k;
|
||||
double exp, maxhp;
|
||||
struct mob_data data;
|
||||
|
||||
class_ = atoi(str[0]);
|
||||
mob_id = atoi(str[0]);
|
||||
|
||||
if (class_ <= 1000 || class_ > MAX_MOB_DB) {
|
||||
ShowError("mob_parse_dbrow: Invalid monster ID %d, must be in range %d-%d.\n", class_, 1000, MAX_MOB_DB);
|
||||
if (mob_id <= 1000 || mob_id > MAX_MOB_DB) {
|
||||
ShowError("mob_parse_dbrow: Invalid monster ID %d, must be in range %d-%d.\n", mob_id, 1000, MAX_MOB_DB);
|
||||
return false;
|
||||
}
|
||||
if (pcdb_checkid(class_)) {
|
||||
ShowError("mob_parse_dbrow: Invalid monster ID %d, reserved for player classes.\n", class_);
|
||||
if (pcdb_checkid(mob_id)) {
|
||||
ShowError("mob_parse_dbrow: Invalid monster ID %d, reserved for player classes.\n", mob_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (class_ >= MOB_CLONE_START && class_ < MOB_CLONE_END) {
|
||||
ShowError("mob_parse_dbrow: Invalid monster ID %d. Range %d-%d is reserved for player clones. Please increase MAX_MOB_DB (%d).\n", class_, MOB_CLONE_START, MOB_CLONE_END-1, MAX_MOB_DB);
|
||||
if (mob_id >= MOB_CLONE_START && mob_id < MOB_CLONE_END) {
|
||||
ShowError("mob_parse_dbrow: Invalid monster ID %d. Range %d-%d is reserved for player clones. Please increase MAX_MOB_DB (%d).\n", mob_id, MOB_CLONE_START, MOB_CLONE_END-1, MAX_MOB_DB);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -3693,7 +3693,7 @@ static bool mob_parse_dbrow(char** str)
|
||||
db = &entry;
|
||||
status = &db->status;
|
||||
|
||||
db->vd.class_ = class_;
|
||||
db->vd.class_ = mob_id;
|
||||
safestrncpy(db->sprite, str[1], sizeof(db->sprite));
|
||||
safestrncpy(db->jname, str[2], sizeof(db->jname));
|
||||
safestrncpy(db->name, str[3], sizeof(db->name));
|
||||
@ -3746,12 +3746,12 @@ static bool mob_parse_dbrow(char** str)
|
||||
i = atoi(str[24]); //Element
|
||||
status->def_ele = i%10;
|
||||
status->ele_lv = i/20;
|
||||
if (status->def_ele >= ELE_MAX) {
|
||||
ShowError("mob_parse_dbrow: Invalid element type %d for monster ID %d (max=%d).\n", status->def_ele, class_, ELE_MAX-1);
|
||||
if (status->def_ele >= ELE_ALL) {
|
||||
ShowError("mob_parse_dbrow: Invalid element type %d for monster ID %d (max=%d).\n", status->def_ele, mob_id, ELE_ALL-1);
|
||||
return false;
|
||||
}
|
||||
if (status->ele_lv < 1 || status->ele_lv > 4) {
|
||||
ShowError("mob_parse_dbrow: Invalid element level %d for monster ID %d, must be in range 1-4.\n", status->ele_lv, class_);
|
||||
ShowError("mob_parse_dbrow: Invalid element level %d for monster ID %d, must be in range 1-4.\n", status->ele_lv, mob_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -3759,6 +3759,13 @@ static bool mob_parse_dbrow(char** str)
|
||||
if (!battle_config.monster_active_enable)
|
||||
status->mode &= ~MD_AGGRESSIVE;
|
||||
|
||||
if( status->mode&MD_BOSS )
|
||||
status->class_ = CLASS_BOSS;
|
||||
else if( mob_is_guardian(mob_id) )
|
||||
status->class_ = CLASS_GUARDIAN;
|
||||
else
|
||||
status->class_ = CLASS_NORMAL;
|
||||
|
||||
status->speed = atoi(str[26]);
|
||||
status->aspd_rate = 1000;
|
||||
i = atoi(str[27]);
|
||||
@ -3808,7 +3815,7 @@ static bool mob_parse_dbrow(char** str)
|
||||
db->mvpitem[i].p = 0; //No item....
|
||||
continue;
|
||||
}
|
||||
item_dropratio_adjust(db->mvpitem[i].nameid, class_, &rate_adjust);
|
||||
item_dropratio_adjust(db->mvpitem[i].nameid, mob_id, &rate_adjust);
|
||||
db->mvpitem[i].p = mob_drop_adjust(atoi(str[32+i*2]), rate_adjust, battle_config.item_drop_mvp_min, battle_config.item_drop_mvp_max);
|
||||
|
||||
//calculate and store Max available drop chance of the MVP item
|
||||
@ -3837,7 +3844,7 @@ static bool mob_parse_dbrow(char** str)
|
||||
rate = atoi(str[k+1]);
|
||||
if (battle_config.drop_rateincrease)
|
||||
if (rate < 5000) rate++;
|
||||
if( (class_ >= 1324 && class_ <= 1363) || (class_ >= 1938 && class_ <= 1946) )
|
||||
if( (mob_id >= 1324 && mob_id <= 1363) || (mob_id >= 1938 && mob_id <= 1946) )
|
||||
{ //Treasure box drop rates [Skotlex]
|
||||
rate_adjust = battle_config.item_rate_treasure;
|
||||
ratemin = battle_config.item_drop_treasure_min;
|
||||
@ -3874,11 +3881,11 @@ static bool mob_parse_dbrow(char** str)
|
||||
ratemax = battle_config.item_drop_common_max;
|
||||
break;
|
||||
}
|
||||
item_dropratio_adjust(id->nameid, class_, &rate_adjust);
|
||||
item_dropratio_adjust(id->nameid, mob_id, &rate_adjust);
|
||||
db->dropitem[i].p = mob_drop_adjust(rate, rate_adjust, ratemin, ratemax);
|
||||
|
||||
//calculate and store Max available drop chance of the item
|
||||
if( db->dropitem[i].p && (class_ < 1324 || class_ > 1363) && (class_ < 1938 || class_ > 1946) )
|
||||
if( db->dropitem[i].p && (mob_id < 1324 || mob_id > 1363) && (mob_id < 1938 || mob_id > 1946) )
|
||||
{ //Skip treasure chests.
|
||||
if (id->maxchance == -1 || (id->maxchance < db->dropitem[i].p) ) {
|
||||
id->maxchance = db->dropitem[i].p; //item has bigger drop chance or sold in shops
|
||||
@ -3890,21 +3897,21 @@ static bool mob_parse_dbrow(char** str)
|
||||
if (k == MAX_SEARCH)
|
||||
continue;
|
||||
|
||||
if (id->mob[k].id != class_)
|
||||
if (id->mob[k].id != mob_id)
|
||||
memmove(&id->mob[k+1], &id->mob[k], (MAX_SEARCH-k-1)*sizeof(id->mob[0]));
|
||||
id->mob[k].chance = db->dropitem[i].p;
|
||||
id->mob[k].id = class_;
|
||||
id->mob[k].id = mob_id;
|
||||
}
|
||||
}
|
||||
|
||||
// Finally insert monster's data into the database.
|
||||
if (mob_db_data[class_] == NULL)
|
||||
mob_db_data[class_] = (struct mob_db*)aCalloc(1, sizeof(struct mob_db));
|
||||
if (mob_db_data[mob_id] == NULL)
|
||||
mob_db_data[mob_id] = (struct mob_db*)aCalloc(1, sizeof(struct mob_db));
|
||||
else
|
||||
//Copy over spawn data
|
||||
memcpy(&db->spawn, mob_db_data[class_]->spawn, sizeof(db->spawn));
|
||||
memcpy(&db->spawn, mob_db_data[mob_id]->spawn, sizeof(db->spawn));
|
||||
|
||||
memcpy(mob_db_data[class_], db, sizeof(struct mob_db));
|
||||
memcpy(mob_db_data[mob_id], db, sizeof(struct mob_db));
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -4001,36 +4008,36 @@ static int mob_read_sqldb(void)
|
||||
*------------------------------------------*/
|
||||
static bool mob_readdb_mobavail(char* str[], int columns, int current)
|
||||
{
|
||||
int class_, k;
|
||||
int mob_id, k;
|
||||
|
||||
class_=atoi(str[0]);
|
||||
mob_id=atoi(str[0]);
|
||||
|
||||
if(mob_db(class_) == mob_dummy) // invalid class (probably undefined in db)
|
||||
if(mob_db(mob_id) == mob_dummy) // invalid class (probably undefined in db)
|
||||
{
|
||||
ShowWarning("mob_readdb_mobavail: Unknown mob id %d.\n", class_);
|
||||
ShowWarning("mob_readdb_mobavail: Unknown mob id %d.\n", mob_id);
|
||||
return false;
|
||||
}
|
||||
|
||||
k=atoi(str[1]);
|
||||
|
||||
memset(&mob_db_data[class_]->vd, 0, sizeof(struct view_data));
|
||||
mob_db_data[class_]->vd.class_=k;
|
||||
memset(&mob_db_data[mob_id]->vd, 0, sizeof(struct view_data));
|
||||
mob_db_data[mob_id]->vd.class_=k;
|
||||
|
||||
//Player sprites
|
||||
if(pcdb_checkid(k) && columns==12) {
|
||||
mob_db_data[class_]->vd.sex=atoi(str[2]);
|
||||
mob_db_data[class_]->vd.hair_style=atoi(str[3]);
|
||||
mob_db_data[class_]->vd.hair_color=atoi(str[4]);
|
||||
mob_db_data[class_]->vd.weapon=atoi(str[5]);
|
||||
mob_db_data[class_]->vd.shield=atoi(str[6]);
|
||||
mob_db_data[class_]->vd.head_top=atoi(str[7]);
|
||||
mob_db_data[class_]->vd.head_mid=atoi(str[8]);
|
||||
mob_db_data[class_]->vd.head_bottom=atoi(str[9]);
|
||||
mob_db_data[class_]->option=atoi(str[10])&~(OPTION_HIDE|OPTION_CLOAK|OPTION_INVISIBLE);
|
||||
mob_db_data[class_]->vd.cloth_color=atoi(str[11]); // Monster player dye option - Valaris
|
||||
mob_db_data[mob_id]->vd.sex=atoi(str[2]);
|
||||
mob_db_data[mob_id]->vd.hair_style=atoi(str[3]);
|
||||
mob_db_data[mob_id]->vd.hair_color=atoi(str[4]);
|
||||
mob_db_data[mob_id]->vd.weapon=atoi(str[5]);
|
||||
mob_db_data[mob_id]->vd.shield=atoi(str[6]);
|
||||
mob_db_data[mob_id]->vd.head_top=atoi(str[7]);
|
||||
mob_db_data[mob_id]->vd.head_mid=atoi(str[8]);
|
||||
mob_db_data[mob_id]->vd.head_bottom=atoi(str[9]);
|
||||
mob_db_data[mob_id]->option=atoi(str[10])&~(OPTION_HIDE|OPTION_CLOAK|OPTION_INVISIBLE);
|
||||
mob_db_data[mob_id]->vd.cloth_color=atoi(str[11]); // Monster player dye option - Valaris
|
||||
}
|
||||
else if(columns==3)
|
||||
mob_db_data[class_]->vd.head_bottom=atoi(str[2]); // mob equipment [Valaris]
|
||||
mob_db_data[mob_id]->vd.head_bottom=atoi(str[2]); // mob equipment [Valaris]
|
||||
else if( columns != 2 )
|
||||
return false;
|
||||
|
||||
@ -4067,7 +4074,7 @@ static int mob_read_randommonster(void)
|
||||
}
|
||||
while(fgets(line, sizeof(line), fp))
|
||||
{
|
||||
int class_;
|
||||
int mob_id;
|
||||
if(line[0] == '/' && line[1] == '/')
|
||||
continue;
|
||||
memset(str,0,sizeof(str));
|
||||
@ -4080,13 +4087,13 @@ static int mob_read_randommonster(void)
|
||||
if(str[0]==NULL || str[2]==NULL)
|
||||
continue;
|
||||
|
||||
class_ = atoi(str[0]);
|
||||
if(mob_db(class_) == mob_dummy)
|
||||
mob_id = atoi(str[0]);
|
||||
if(mob_db(mob_id) == mob_dummy)
|
||||
continue;
|
||||
mob_db_data[class_]->summonper[i]=atoi(str[2]);
|
||||
mob_db_data[mob_id]->summonper[i]=atoi(str[2]);
|
||||
if (i) {
|
||||
if( summon[i].qty < ARRAYLENGTH(summon[i].class_) ) //MvPs
|
||||
summon[i].class_[summon[i].qty++] = class_;
|
||||
if( summon[i].qty < ARRAYLENGTH(summon[i].mob_id) ) //MvPs
|
||||
summon[i].mob_id[summon[i].qty++] = mob_id;
|
||||
else {
|
||||
ShowDebug("Can't store more random mobs from %s, increase size of mob.c:summon variable!\n", mobfile[i]);
|
||||
break;
|
||||
@ -4096,7 +4103,7 @@ static int mob_read_randommonster(void)
|
||||
}
|
||||
if (i && !summon[i].qty)
|
||||
{ //At least have the default here.
|
||||
summon[i].class_[0] = mob_db_data[0]->summonper[i];
|
||||
summon[i].mob_id[0] = mob_db_data[0]->summonper[i];
|
||||
summon[i].qty = 1;
|
||||
}
|
||||
fclose(fp);
|
||||
|
@ -67,6 +67,7 @@ enum size {
|
||||
SZ_SMALL = 0,
|
||||
SZ_MEDIUM,
|
||||
SZ_BIG,
|
||||
SZ_ALL,
|
||||
};
|
||||
|
||||
struct mob_skill {
|
||||
@ -117,7 +118,7 @@ struct mob_data {
|
||||
struct view_data *vd;
|
||||
struct status_data status, *base_status; //Second one is in case of leveling up mobs, or tiny/large mobs.
|
||||
struct status_change sc;
|
||||
struct mob_db *db; //For quick data access (saves doing mob_db(md->class_) all the time) [Skotlex]
|
||||
struct mob_db *db; //For quick data access (saves doing mob_db(md->mob_id) all the time) [Skotlex]
|
||||
char name[NAME_LENGTH];
|
||||
struct {
|
||||
unsigned int size : 2; //Small/Big monsters.
|
||||
@ -147,7 +148,7 @@ struct mob_data {
|
||||
struct spawn_data *spawn; //Spawn data.
|
||||
int spawn_timer; //Required for Convex Mirror
|
||||
struct item *lootitem;
|
||||
short class_;
|
||||
short mob_id;
|
||||
unsigned int tdmg; //Stores total damage given to the mob, for exp calculations. [Skotlex]
|
||||
int level;
|
||||
int target_id,attacked_id;
|
||||
@ -230,25 +231,25 @@ struct item_drop_list {
|
||||
struct item_drop* item; // linked list of drops
|
||||
};
|
||||
|
||||
struct mob_db* mob_db(int class_);
|
||||
struct mob_db* mob_db(int mob_id);
|
||||
int mobdb_searchname(const char *str);
|
||||
int mobdb_searchname_array(struct mob_db** data, int size, const char *str);
|
||||
int mobdb_checkid(const int id);
|
||||
struct view_data* mob_get_viewdata(int class_);
|
||||
struct view_data* mob_get_viewdata(int mob_id);
|
||||
|
||||
struct mob_data *mob_once_spawn_sub(struct block_list *bl, int16 m,
|
||||
short x, short y, const char *mobname, int class_, const char *event, unsigned int size, unsigned int ai);
|
||||
short x, short y, const char *mobname, int mob_id, const char *event, unsigned int size, unsigned int ai);
|
||||
|
||||
int mob_once_spawn(struct map_session_data* sd, int16 m, int16 x, int16 y,
|
||||
const char* mobname, int class_, int amount, const char* event, unsigned int size, unsigned int ai);
|
||||
const char* mobname, int mob_id, int amount, const char* event, unsigned int size, unsigned int ai);
|
||||
|
||||
int mob_once_spawn_area(struct map_session_data* sd, int16 m,
|
||||
int16 x0, int16 y0, int16 x1, int16 y1, const char* mobname, int class_, int amount, const char* event, unsigned int size, unsigned int ai);
|
||||
int16 x0, int16 y0, int16 x1, int16 y1, const char* mobname, int mob_id, int amount, const char* event, unsigned int size, unsigned int ai);
|
||||
|
||||
bool mob_ksprotected (struct block_list *src, struct block_list *target);
|
||||
|
||||
int mob_spawn_guardian(const char* mapname, int16 x, int16 y, const char* mobname, int class_, const char* event, int guardian, bool has_index); // Spawning Guardians [Valaris]
|
||||
int mob_spawn_bg(const char* mapname, int16 x, int16 y, const char* mobname, int class_, const char* event, unsigned int bg_id);
|
||||
int mob_spawn_guardian(const char* mapname, int16 x, int16 y, const char* mobname, int mob_id, const char* event, int guardian, bool has_index); // Spawning Guardians [Valaris]
|
||||
int mob_spawn_bg(const char* mapname, int16 x, int16 y, const char* mobname, int mob_id, const char* event, unsigned int bg_id);
|
||||
int mob_guardian_guildchange(struct mob_data *md); //Change Guardian's ownership. [Skotlex]
|
||||
|
||||
int mob_randomwalk(struct mob_data *md,unsigned int tick);
|
||||
@ -268,9 +269,10 @@ void mob_heal(struct mob_data *md,unsigned int heal);
|
||||
|
||||
#define mob_stop_walking(md, type) unit_stop_walking(&(md)->bl, type)
|
||||
#define mob_stop_attack(md) unit_stop_attack(&(md)->bl)
|
||||
#define mob_is_battleground(md) ( map[(md)->bl.m].flag.battleground && ((md)->class_ == MOBID_BARRICADE2 || ((md)->class_ >= MOBID_FOOD_STOR && (md)->class_ <= MOBID_PINK_CRYST)) )
|
||||
#define mob_is_gvg(md) (map[(md)->bl.m].flag.gvg_castle && ( (md)->class_ == MOBID_EMPERIUM || (md)->class_ == MOBID_BARRICADE1 || (md)->class_ == MOBID_GUARIDAN_STONE1 || (md)->class_ == MOBID_GUARIDAN_STONE2) )
|
||||
#define mob_is_treasure(md) (((md)->class_ >= MOBID_TREAS01 && (md)->class_ <= MOBID_TREAS40) || ((md)->class_ >= MOBID_TREAS41 && (md)->class_ <= MOBID_TREAS49))
|
||||
#define mob_is_battleground(md) ( map[(md)->bl.m].flag.battleground && ((md)->mob_id == MOBID_BARRICADE2 || ((md)->mob_id >= MOBID_FOOD_STOR && (md)->mob_id <= MOBID_PINK_CRYST)) )
|
||||
#define mob_is_gvg(md) (map[(md)->bl.m].flag.gvg_castle && ( (md)->mob_id == MOBID_EMPERIUM || (md)->mob_id == MOBID_BARRICADE1 || (md)->mob_id == MOBID_GUARIDAN_STONE1 || (md)->mob_id == MOBID_GUARIDAN_STONE2) )
|
||||
#define mob_is_treasure(md) (((md)->mob_id >= MOBID_TREAS01 && (md)->mob_id <= MOBID_TREAS40) || ((md)->mob_id >= MOBID_TREAS41 && (md)->mob_id <= MOBID_TREAS49))
|
||||
#define mob_is_guardian(mob_id) ((mob_id >= MOBID_A_GUARDIAN && mob_id <= MOBID_S_GUARDIAN) || mob_id == MOBID_S_GUARDIAN_ || mob_id == MOBID_A_GUARDIAN_)
|
||||
|
||||
void mob_clear_spawninfo();
|
||||
int do_init_mob(void);
|
||||
@ -281,7 +283,7 @@ int mob_deleteslave(struct mob_data *md);
|
||||
|
||||
int mob_random_class (int *value, size_t count);
|
||||
int mob_get_random_id(int type, int flag, int lv);
|
||||
int mob_class_change(struct mob_data *md,int class_);
|
||||
int mob_class_change(struct mob_data *md,int mob_id);
|
||||
int mob_warpslave(struct block_list *bl, int range);
|
||||
int mob_linksearch(struct block_list *bl,va_list ap);
|
||||
|
||||
@ -293,7 +295,7 @@ int mob_summonslave(struct mob_data *md2,int *value,int amount,uint16 skill_id);
|
||||
int mob_countslave(struct block_list *bl);
|
||||
int mob_count_sub(struct block_list *bl, va_list ap);
|
||||
|
||||
int mob_is_clone(int class_);
|
||||
int mob_is_clone(int mob_id);
|
||||
|
||||
int mob_clone_spawn(struct map_session_data *sd, int16 m, int16 x, int16 y, const char *event, int master_id, int mode, int flag, unsigned int duration);
|
||||
int mob_clone_delete(struct mob_data *md);
|
||||
|
@ -3295,7 +3295,7 @@ static const char* npc_parse_mob(char* w1, char* w2, char* w3, char* w4, const c
|
||||
|
||||
mob.num = (unsigned short)num;
|
||||
mob.active = 0;
|
||||
mob.class_ = (short) class_;
|
||||
mob.id = (short) class_;
|
||||
mob.x = (unsigned short)x;
|
||||
mob.y = (unsigned short)y;
|
||||
mob.xs = (signed short)xs;
|
||||
|
@ -1028,7 +1028,7 @@ int party_exp_share(struct party_data* p, struct block_list* src, unsigned int b
|
||||
if (!md)
|
||||
return 0;
|
||||
|
||||
rate = pc_level_penalty_mod(sd[i], md->db->lv, md->db->status.race, md->db->status.mode, 1);
|
||||
rate = pc_level_penalty_mod(sd[i], md->db->lv, md->db->status.class_, 1);
|
||||
base_exp = (unsigned int)cap_value(base_exp_bonus * rate / 100, 1, UINT_MAX);
|
||||
job_exp = (unsigned int)cap_value(job_exp_bonus * rate / 100, 1, UINT_MAX);
|
||||
}
|
||||
|
285
src/map/pc.c
285
src/map/pc.c
@ -56,7 +56,7 @@ int pc_split_atoui(char* str, unsigned int* val, char sep, int max);
|
||||
|
||||
static unsigned int statp[MAX_LEVEL+1];
|
||||
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
|
||||
static unsigned int level_penalty[3][RC_MAX][MAX_LEVEL*2+1];
|
||||
static unsigned int level_penalty[3][CLASS_ALL][MAX_LEVEL*2+1];
|
||||
#endif
|
||||
|
||||
// h-files are for declarations, not for implementations... [Shinomori]
|
||||
@ -1894,7 +1894,7 @@ static int pc_bonus_addeff_onskill(struct s_addeffectonskill* effect, int max, e
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, short id, short group, int race, int rate)
|
||||
static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, short id, short group, int class_, int race, int rate)
|
||||
{
|
||||
int i;
|
||||
//Apply config rate adjustment settings.
|
||||
@ -1915,9 +1915,10 @@ static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, short id
|
||||
if(
|
||||
((id && drop[i].id == id) ||
|
||||
(group && drop[i].group == group))
|
||||
&& race > 0
|
||||
&& (race > 0 || class_ > -1)
|
||||
) {
|
||||
drop[i].race |= race;
|
||||
drop[i].class_ |= class_;
|
||||
if(drop[i].rate > 0 && rate > 0)
|
||||
{ //Both are absolute rates.
|
||||
if (drop[i].rate < rate)
|
||||
@ -1939,6 +1940,7 @@ static int pc_bonus_item_drop(struct s_add_drop *drop, const short max, short id
|
||||
drop[i].id = id;
|
||||
drop[i].group = group;
|
||||
drop[i].race |= race;
|
||||
drop[i].class_ |= class_;
|
||||
drop[i].rate = rate;
|
||||
return 1;
|
||||
}
|
||||
@ -2228,7 +2230,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
sd->bonus.arrow_cri += val*10;
|
||||
break;
|
||||
case SP_ATKELE:
|
||||
if(val >= ELE_MAX) {
|
||||
if(val > ELE_ALL) {
|
||||
ShowError("pc_bonus: SP_ATKELE: Invalid element %d\n", val);
|
||||
break;
|
||||
}
|
||||
@ -2259,7 +2261,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
}
|
||||
break;
|
||||
case SP_DEFELE:
|
||||
if(val >= ELE_MAX) {
|
||||
if(val > ELE_ALL) {
|
||||
ShowError("pc_bonus: SP_DEFELE: Invalid element %d\n", val);
|
||||
break;
|
||||
}
|
||||
@ -2369,7 +2371,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
sd->matk_rate += val;
|
||||
break;
|
||||
case SP_IGNORE_DEF_ELE:
|
||||
if(val >= ELE_MAX) {
|
||||
if(val > ELE_ALL) {
|
||||
ShowError("pc_bonus: SP_IGNORE_DEF_ELE: Invalid element %d\n", val);
|
||||
break;
|
||||
}
|
||||
@ -2384,6 +2386,12 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
else if(sd->state.lr_flag == 1)
|
||||
sd->left_weapon.ignore_def_race |= 1<<val;
|
||||
break;
|
||||
case SP_IGNORE_DEF_CLASS:
|
||||
if(!sd->state.lr_flag)
|
||||
sd->right_weapon.ignore_def_class |= 1<<val;
|
||||
else if(sd->state.lr_flag == 1)
|
||||
sd->left_weapon.ignore_def_class |= 1<<val;
|
||||
break;
|
||||
case SP_ATK_RATE:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->bonus.atk_rate += val;
|
||||
@ -2398,12 +2406,11 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
break;
|
||||
case SP_IGNORE_MDEF_RATE:
|
||||
if(sd->state.lr_flag != 2) {
|
||||
sd->ignore_mdef[RC_NONBOSS] += val;
|
||||
sd->ignore_mdef[RC_BOSS] += val;
|
||||
sd->ignore_mdef += val;
|
||||
}
|
||||
break;
|
||||
case SP_IGNORE_MDEF_ELE:
|
||||
if(val >= ELE_MAX) {
|
||||
if(val > ELE_ALL) {
|
||||
ShowError("pc_bonus: SP_IGNORE_MDEF_ELE: Invalid element %d\n", val);
|
||||
break;
|
||||
}
|
||||
@ -2427,7 +2434,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
sd->critical_rate+=val;
|
||||
break;
|
||||
case SP_DEF_RATIO_ATK_ELE:
|
||||
if(val >= ELE_MAX) {
|
||||
if(val > ELE_ALL) {
|
||||
ShowError("pc_bonus: SP_DEF_RATIO_ATK_ELE: Invalid element %d\n", val);
|
||||
break;
|
||||
}
|
||||
@ -2437,7 +2444,7 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
sd->left_weapon.def_ratio_atk_ele |= 1<<val;
|
||||
break;
|
||||
case SP_DEF_RATIO_ATK_RACE:
|
||||
if(val >= RC_MAX) {
|
||||
if(val > RC_ALL) {
|
||||
ShowError("pc_bonus: SP_DEF_RATIO_ATK_RACE: Invalid race %d\n", val);
|
||||
break;
|
||||
}
|
||||
@ -2446,6 +2453,16 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
else if(sd->state.lr_flag == 1)
|
||||
sd->left_weapon.def_ratio_atk_race |= 1<<val;
|
||||
break;
|
||||
case SP_DEF_RATIO_ATK_CLASS:
|
||||
if(val > CLASS_ALL) {
|
||||
ShowError("pc_bonus: SP_DEF_RATIO_ATK_CLASS: Invalid class %d\n", val);
|
||||
break;
|
||||
}
|
||||
if(!sd->state.lr_flag)
|
||||
sd->right_weapon.def_ratio_atk_class |= 1<<val;
|
||||
else if(sd->state.lr_flag == 1)
|
||||
sd->left_weapon.def_ratio_atk_class |= 1<<val;
|
||||
break;
|
||||
case SP_HIT_RATE:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->hit_rate += val;
|
||||
@ -2647,22 +2664,20 @@ int pc_bonus(struct map_session_data *sd,int type,int val)
|
||||
break;
|
||||
case SP_HP_DRAIN_VALUE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.hp_drain[RC_NONBOSS].value += val;
|
||||
sd->right_weapon.hp_drain[RC_BOSS].value += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.hp_drain[RC_NONBOSS].value += val;
|
||||
sd->left_weapon.hp_drain[RC_BOSS].value += val;
|
||||
sd->right_weapon.hp_drain_class[CLASS_NORMAL].value += val;
|
||||
sd->right_weapon.hp_drain_class[CLASS_BOSS].value += val;
|
||||
} else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.hp_drain_class[CLASS_NORMAL].value += val;
|
||||
sd->left_weapon.hp_drain_class[CLASS_BOSS].value += val;
|
||||
}
|
||||
break;
|
||||
case SP_SP_DRAIN_VALUE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.sp_drain[RC_NONBOSS].value += val;
|
||||
sd->right_weapon.sp_drain[RC_BOSS].value += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.sp_drain[RC_NONBOSS].value += val;
|
||||
sd->left_weapon.sp_drain[RC_BOSS].value += val;
|
||||
sd->right_weapon.sp_drain_class[CLASS_NORMAL].value += val;
|
||||
sd->right_weapon.sp_drain_class[CLASS_BOSS].value += val;
|
||||
} else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.sp_drain_class[CLASS_NORMAL].value += val;
|
||||
sd->left_weapon.sp_drain_class[CLASS_BOSS].value += val;
|
||||
}
|
||||
break;
|
||||
case SP_SP_GAIN_VALUE:
|
||||
@ -2733,7 +2748,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
|
||||
switch(type){
|
||||
case SP_ADDELE:
|
||||
if(type2 >= ELE_MAX) {
|
||||
if(type2 > ELE_ALL) {
|
||||
ShowError("pc_bonus2: SP_ADDELE: Invalid element %d\n", type2);
|
||||
break;
|
||||
}
|
||||
@ -2752,6 +2767,14 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
else if(sd->state.lr_flag == 2)
|
||||
sd->arrow_addrace[type2]+=val;
|
||||
break;
|
||||
case SP_ADDCLASS:
|
||||
if(!sd->state.lr_flag)
|
||||
sd->right_weapon.addclass[type2]+=val;
|
||||
else if(sd->state.lr_flag == 1)
|
||||
sd->left_weapon.addclass[type2]+=val;
|
||||
else if(sd->state.lr_flag == 2)
|
||||
sd->arrow_addclass[type2]+=val;
|
||||
break;
|
||||
case SP_ADDSIZE:
|
||||
if(!sd->state.lr_flag)
|
||||
sd->right_weapon.addsize[type2]+=val;
|
||||
@ -2761,7 +2784,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
sd->arrow_addsize[type2]+=val;
|
||||
break;
|
||||
case SP_SUBELE:
|
||||
if(type2 >= ELE_MAX) {
|
||||
if(type2 > ELE_ALL) {
|
||||
ShowError("pc_bonus2: SP_SUBELE: Invalid element %d\n", type2);
|
||||
break;
|
||||
}
|
||||
@ -2772,6 +2795,10 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->subrace[type2]+=val;
|
||||
break;
|
||||
case SP_SUBCLASS:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->subclass[type2]+=val;
|
||||
break;
|
||||
case SP_ADDEFF:
|
||||
if (type2 > SC_MAX) {
|
||||
ShowWarning("pc_bonus2 (Add Effect): %d is not supported.\n", type2);
|
||||
@ -2799,7 +2826,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
sd->reseff[type2-SC_COMMON_MIN]= cap_value(i, 0, 10000);
|
||||
break;
|
||||
case SP_MAGIC_ADDELE:
|
||||
if(type2 >= ELE_MAX) {
|
||||
if(type2 > ELE_ALL) {
|
||||
ShowError("pc_bonus2: SP_MAGIC_ADDELE: Invalid element %d\n", type2);
|
||||
break;
|
||||
}
|
||||
@ -2810,6 +2837,10 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->magic_addrace[type2]+=val;
|
||||
break;
|
||||
case SP_MAGIC_ADDCLASS:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->magic_addclass[type2]+=val;
|
||||
break;
|
||||
case SP_MAGIC_ADDSIZE:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->magic_addsize[type2]+=val;
|
||||
@ -2860,7 +2891,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
if (!sd->add_mdmg[i].rate) //Shift the rest of elements up.
|
||||
memmove(&sd->add_mdmg[i], &sd->add_mdmg[i+1], sizeof(sd->add_mdmg) - (i+1)*sizeof(sd->add_mdmg[0]));
|
||||
break;
|
||||
case SP_ADD_DEF_CLASS:
|
||||
case SP_ADD_DEF_MONSTER:
|
||||
if(sd->state.lr_flag == 2)
|
||||
break;
|
||||
ARR_FIND(0, ARRAYLENGTH(sd->add_def), i, sd->add_def[i].rate == 0 || sd->add_def[i].class_ == type2);
|
||||
@ -2874,7 +2905,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
if (!sd->add_def[i].rate) //Shift the rest of elements up.
|
||||
memmove(&sd->add_def[i], &sd->add_def[i+1], sizeof(sd->add_def) - (i+1)*sizeof(sd->add_def[0]));
|
||||
break;
|
||||
case SP_ADD_MDEF_CLASS:
|
||||
case SP_ADD_MDEF_MONSTER:
|
||||
if(sd->state.lr_flag == 2)
|
||||
break;
|
||||
ARR_FIND(0, ARRAYLENGTH(sd->add_mdef), i, sd->add_mdef[i].rate == 0 || sd->add_mdef[i].class_ == type2);
|
||||
@ -2890,58 +2921,58 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
break;
|
||||
case SP_HP_DRAIN_RATE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.hp_drain[RC_NONBOSS].rate += type2;
|
||||
sd->right_weapon.hp_drain[RC_NONBOSS].per += val;
|
||||
sd->right_weapon.hp_drain[RC_BOSS].rate += type2;
|
||||
sd->right_weapon.hp_drain[RC_BOSS].per += val;
|
||||
sd->right_weapon.hp_drain_class[CLASS_NORMAL].rate += type2;
|
||||
sd->right_weapon.hp_drain_class[CLASS_NORMAL].per += val;
|
||||
sd->right_weapon.hp_drain_class[CLASS_BOSS].rate += type2;
|
||||
sd->right_weapon.hp_drain_class[CLASS_BOSS].per += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.hp_drain[RC_NONBOSS].rate += type2;
|
||||
sd->left_weapon.hp_drain[RC_NONBOSS].per += val;
|
||||
sd->left_weapon.hp_drain[RC_BOSS].rate += type2;
|
||||
sd->left_weapon.hp_drain[RC_BOSS].per += val;
|
||||
sd->left_weapon.hp_drain_class[CLASS_NORMAL].rate += type2;
|
||||
sd->left_weapon.hp_drain_class[CLASS_NORMAL].per += val;
|
||||
sd->left_weapon.hp_drain_class[CLASS_BOSS].rate += type2;
|
||||
sd->left_weapon.hp_drain_class[CLASS_BOSS].per += val;
|
||||
}
|
||||
break;
|
||||
case SP_HP_DRAIN_VALUE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.hp_drain[RC_NONBOSS].value += type2;
|
||||
sd->right_weapon.hp_drain[RC_NONBOSS].type = val;
|
||||
sd->right_weapon.hp_drain[RC_BOSS].value += type2;
|
||||
sd->right_weapon.hp_drain[RC_BOSS].type = val;
|
||||
sd->right_weapon.hp_drain_class[CLASS_NORMAL].value += type2;
|
||||
sd->right_weapon.hp_drain_class[CLASS_NORMAL].type = val;
|
||||
sd->right_weapon.hp_drain_class[CLASS_BOSS].value += type2;
|
||||
sd->right_weapon.hp_drain_class[CLASS_BOSS].type = val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.hp_drain[RC_NONBOSS].value += type2;
|
||||
sd->left_weapon.hp_drain[RC_NONBOSS].type = val;
|
||||
sd->left_weapon.hp_drain[RC_BOSS].value += type2;
|
||||
sd->left_weapon.hp_drain[RC_BOSS].type = val;
|
||||
sd->left_weapon.hp_drain_class[CLASS_NORMAL].value += type2;
|
||||
sd->left_weapon.hp_drain_class[CLASS_NORMAL].type = val;
|
||||
sd->left_weapon.hp_drain_class[CLASS_BOSS].value += type2;
|
||||
sd->left_weapon.hp_drain_class[CLASS_BOSS].type = val;
|
||||
}
|
||||
break;
|
||||
case SP_SP_DRAIN_RATE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.sp_drain[RC_NONBOSS].rate += type2;
|
||||
sd->right_weapon.sp_drain[RC_NONBOSS].per += val;
|
||||
sd->right_weapon.sp_drain[RC_BOSS].rate += type2;
|
||||
sd->right_weapon.sp_drain[RC_BOSS].per += val;
|
||||
sd->right_weapon.sp_drain_class[CLASS_NORMAL].rate += type2;
|
||||
sd->right_weapon.sp_drain_class[CLASS_NORMAL].per += val;
|
||||
sd->right_weapon.sp_drain_class[CLASS_BOSS].rate += type2;
|
||||
sd->right_weapon.sp_drain_class[CLASS_BOSS].per += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.sp_drain[RC_NONBOSS].rate += type2;
|
||||
sd->left_weapon.sp_drain[RC_NONBOSS].per += val;
|
||||
sd->left_weapon.sp_drain[RC_BOSS].rate += type2;
|
||||
sd->left_weapon.sp_drain[RC_BOSS].per += val;
|
||||
sd->left_weapon.sp_drain_class[CLASS_NORMAL].rate += type2;
|
||||
sd->left_weapon.sp_drain_class[CLASS_NORMAL].per += val;
|
||||
sd->left_weapon.sp_drain_class[CLASS_BOSS].rate += type2;
|
||||
sd->left_weapon.sp_drain_class[CLASS_BOSS].per += val;
|
||||
}
|
||||
break;
|
||||
case SP_SP_DRAIN_VALUE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.sp_drain[RC_NONBOSS].value += type2;
|
||||
sd->right_weapon.sp_drain[RC_NONBOSS].type = val;
|
||||
sd->right_weapon.sp_drain[RC_BOSS].value += type2;
|
||||
sd->right_weapon.sp_drain[RC_BOSS].type = val;
|
||||
sd->right_weapon.sp_drain_class[CLASS_NORMAL].value += type2;
|
||||
sd->right_weapon.sp_drain_class[CLASS_NORMAL].type = val;
|
||||
sd->right_weapon.sp_drain_class[CLASS_BOSS].value += type2;
|
||||
sd->right_weapon.sp_drain_class[CLASS_BOSS].type = val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.sp_drain[RC_NONBOSS].value += type2;
|
||||
sd->left_weapon.sp_drain[RC_NONBOSS].type = val;
|
||||
sd->left_weapon.sp_drain[RC_BOSS].value += type2;
|
||||
sd->left_weapon.sp_drain[RC_BOSS].type = val;
|
||||
sd->left_weapon.sp_drain_class[CLASS_NORMAL].value += type2;
|
||||
sd->left_weapon.sp_drain_class[CLASS_NORMAL].type = val;
|
||||
sd->left_weapon.sp_drain_class[CLASS_BOSS].value += type2;
|
||||
sd->left_weapon.sp_drain_class[CLASS_BOSS].type = val;
|
||||
}
|
||||
break;
|
||||
case SP_SP_VANISH_RATE:
|
||||
@ -2969,7 +3000,7 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
}
|
||||
break;
|
||||
case SP_WEAPON_COMA_ELE:
|
||||
if(type2 >= ELE_MAX) {
|
||||
if(type2 > ELE_ALL) {
|
||||
ShowError("pc_bonus2: SP_WEAPON_COMA_ELE: Invalid element %d\n", type2);
|
||||
break;
|
||||
}
|
||||
@ -2984,6 +3015,12 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
sd->weapon_coma_race[type2] += val;
|
||||
sd->special_state.bonus_coma = 1;
|
||||
break;
|
||||
case SP_WEAPON_COMA_CLASS:
|
||||
if(sd->state.lr_flag == 2)
|
||||
break;
|
||||
sd->weapon_coma_class[type2] += val;
|
||||
sd->special_state.bonus_coma = 1;
|
||||
break;
|
||||
case SP_WEAPON_ATK:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->weapon_atk[type2]+=val;
|
||||
@ -3167,11 +3204,11 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
break;
|
||||
case SP_ADD_MONSTER_DROP_ITEM:
|
||||
if (sd->state.lr_flag != 2)
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), type2, 0, (1<<RC_BOSS)|(1<<RC_NONBOSS), val);
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), type2, 0, (1<<CLASS_NORMAL)|(1<<CLASS_BOSS), 0, val);
|
||||
break;
|
||||
case SP_ADD_MONSTER_DROP_ITEMGROUP:
|
||||
if (sd->state.lr_flag != 2)
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), 0, type2, (1<<RC_BOSS)|(1<<RC_NONBOSS), val);
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), 0, type2, (1<<CLASS_NORMAL)|(1<<CLASS_BOSS), 0, val);
|
||||
break;
|
||||
case SP_SP_LOSS_RATE:
|
||||
if(sd->state.lr_flag != 2) {
|
||||
@ -3187,27 +3224,47 @@ int pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
|
||||
break;
|
||||
case SP_HP_DRAIN_VALUE_RACE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.hp_drain[type2].value += val;
|
||||
sd->right_weapon.hp_drain_race[type2].value += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.hp_drain[type2].value += val;
|
||||
sd->left_weapon.hp_drain_race[type2].value += val;
|
||||
}
|
||||
break;
|
||||
case SP_SP_DRAIN_VALUE_RACE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.sp_drain[type2].value += val;
|
||||
sd->right_weapon.sp_drain_race[type2].value += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.sp_drain[type2].value += val;
|
||||
sd->left_weapon.sp_drain_race[type2].value += val;
|
||||
}
|
||||
break;
|
||||
case SP_IGNORE_MDEF_RATE:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->ignore_mdef[type2] += val;
|
||||
case SP_HP_DRAIN_VALUE_CLASS:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.hp_drain_class[type2].value += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.hp_drain_class[type2].value += val;
|
||||
}
|
||||
break;
|
||||
case SP_IGNORE_DEF_RATE:
|
||||
case SP_SP_DRAIN_VALUE_CLASS:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.sp_drain_class[type2].value += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.sp_drain_class[type2].value += val;
|
||||
}
|
||||
break;
|
||||
case SP_IGNORE_MDEF_RACE_RATE:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->ignore_def[type2] += val;
|
||||
sd->ignore_mdef_by_race[type2] += val;
|
||||
break;
|
||||
case SP_IGNORE_MDEF_CLASS_RATE:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->ignore_mdef_by_class[type2] += val;
|
||||
break;
|
||||
case SP_IGNORE_DEF_RACE_RATE:
|
||||
if(sd->state.lr_flag != 2)
|
||||
sd->ignore_def_by_race[type2] += val;
|
||||
break;
|
||||
case SP_SP_GAIN_RACE_ATTACK:
|
||||
if(sd->state.lr_flag != 2)
|
||||
@ -3327,11 +3384,11 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val)
|
||||
switch(type){
|
||||
case SP_ADD_MONSTER_DROP_ITEM:
|
||||
if(sd->state.lr_flag != 2)
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), type2, 0, 1<<type3, val);
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), type2, 0, -1, 1<<type3, val);
|
||||
break;
|
||||
case SP_ADD_CLASS_DROP_ITEM:
|
||||
if(sd->state.lr_flag != 2)
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), type2, 0, -type3, val);
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), type2, 0, -1, -type3, val);
|
||||
break;
|
||||
case SP_AUTOSPELL:
|
||||
if(sd->state.lr_flag != 2)
|
||||
@ -3353,46 +3410,46 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val)
|
||||
break;
|
||||
case SP_SP_DRAIN_RATE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.sp_drain[RC_NONBOSS].rate += type2;
|
||||
sd->right_weapon.sp_drain[RC_NONBOSS].per += type3;
|
||||
sd->right_weapon.sp_drain[RC_NONBOSS].type = val;
|
||||
sd->right_weapon.sp_drain[RC_BOSS].rate += type2;
|
||||
sd->right_weapon.sp_drain[RC_BOSS].per += type3;
|
||||
sd->right_weapon.sp_drain[RC_BOSS].type = val;
|
||||
sd->right_weapon.sp_drain_class[CLASS_NORMAL].rate += type2;
|
||||
sd->right_weapon.sp_drain_class[CLASS_NORMAL].per += type3;
|
||||
sd->right_weapon.sp_drain_class[CLASS_NORMAL].type = val;
|
||||
sd->right_weapon.sp_drain_class[CLASS_BOSS].rate += type2;
|
||||
sd->right_weapon.sp_drain_class[CLASS_BOSS].per += type3;
|
||||
sd->right_weapon.sp_drain_class[CLASS_BOSS].type = val;
|
||||
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.sp_drain[RC_NONBOSS].rate += type2;
|
||||
sd->left_weapon.sp_drain[RC_NONBOSS].per += type3;
|
||||
sd->left_weapon.sp_drain[RC_NONBOSS].type = val;
|
||||
sd->left_weapon.sp_drain[RC_BOSS].rate += type2;
|
||||
sd->left_weapon.sp_drain[RC_BOSS].per += type3;
|
||||
sd->left_weapon.sp_drain[RC_BOSS].type = val;
|
||||
sd->left_weapon.sp_drain_class[CLASS_NORMAL].rate += type2;
|
||||
sd->left_weapon.sp_drain_class[CLASS_NORMAL].per += type3;
|
||||
sd->left_weapon.sp_drain_class[CLASS_NORMAL].type = val;
|
||||
sd->left_weapon.sp_drain_class[CLASS_BOSS].rate += type2;
|
||||
sd->left_weapon.sp_drain_class[CLASS_BOSS].per += type3;
|
||||
sd->left_weapon.sp_drain_class[CLASS_BOSS].type = val;
|
||||
}
|
||||
break;
|
||||
case SP_HP_DRAIN_RATE_RACE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.hp_drain[type2].rate += type3;
|
||||
sd->right_weapon.hp_drain[type2].per += val;
|
||||
sd->right_weapon.hp_drain_race[type2].rate += type3;
|
||||
sd->right_weapon.hp_drain_race[type2].per += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.hp_drain[type2].rate += type3;
|
||||
sd->left_weapon.hp_drain[type2].per += val;
|
||||
sd->left_weapon.hp_drain_race[type2].rate += type3;
|
||||
sd->left_weapon.hp_drain_race[type2].per += val;
|
||||
}
|
||||
break;
|
||||
case SP_SP_DRAIN_RATE_RACE:
|
||||
if(!sd->state.lr_flag) {
|
||||
sd->right_weapon.sp_drain[type2].rate += type3;
|
||||
sd->right_weapon.sp_drain[type2].per += val;
|
||||
sd->right_weapon.sp_drain_race[type2].rate += type3;
|
||||
sd->right_weapon.sp_drain_race[type2].per += val;
|
||||
}
|
||||
else if(sd->state.lr_flag == 1) {
|
||||
sd->left_weapon.sp_drain[type2].rate += type3;
|
||||
sd->left_weapon.sp_drain[type2].per += val;
|
||||
sd->left_weapon.sp_drain_race[type2].rate += type3;
|
||||
sd->left_weapon.sp_drain_race[type2].per += val;
|
||||
}
|
||||
break;
|
||||
case SP_ADD_MONSTER_DROP_ITEMGROUP:
|
||||
if (sd->state.lr_flag != 2)
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), 0, type2, 1<<type3, val);
|
||||
pc_bonus_item_drop(sd->add_drop, ARRAYLENGTH(sd->add_drop), 0, type2, -1, 1<<type3, val);
|
||||
break;
|
||||
|
||||
case SP_ADDEFF:
|
||||
@ -3423,7 +3480,7 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val)
|
||||
break;
|
||||
|
||||
case SP_ADDELE:
|
||||
if (type2 > ELE_MAX) {
|
||||
if (type2 > ELE_ALL) {
|
||||
ShowWarning("pc_bonus3 (SP_ADDELE): element %d is out of range.\n", type2);
|
||||
break;
|
||||
}
|
||||
@ -3432,7 +3489,7 @@ int pc_bonus3(struct map_session_data *sd,int type,int type2,int type3,int val)
|
||||
break;
|
||||
|
||||
case SP_SUBELE:
|
||||
if (type2 > ELE_MAX) {
|
||||
if (type2 > ELE_ALL) {
|
||||
ShowWarning("pc_bonus3 (SP_SUBELE): element %d is out of range.\n", type2);
|
||||
break;
|
||||
}
|
||||
@ -3483,7 +3540,7 @@ int pc_bonus4(struct map_session_data *sd,int type,int type2,int type3,int type4
|
||||
break;
|
||||
|
||||
case SP_DEF_SET: //bonus4 bSetDefRace,n,x,r,y;
|
||||
if( type2 > RC_MAX ) {
|
||||
if( type2 > RC_ALL ) {
|
||||
ShowWarning("pc_bonus4 (DEF_SET): %d is not supported.\n", type2);
|
||||
break;
|
||||
}
|
||||
@ -3495,7 +3552,7 @@ int pc_bonus4(struct map_session_data *sd,int type,int type2,int type3,int type4
|
||||
break;
|
||||
|
||||
case SP_MDEF_SET: //bonus4 bSetMDefRace,n,x,r,y;
|
||||
if( type2 > RC_MAX ) {
|
||||
if( type2 > RC_ALL ) {
|
||||
ShowWarning("pc_bonus4 (MDEF_SET): %d is not supported.\n", type2);
|
||||
break;
|
||||
}
|
||||
@ -5894,9 +5951,10 @@ static void pc_calcexp(struct map_session_data *sd, unsigned int *base_exp, unsi
|
||||
int bonus = 0;
|
||||
struct status_data *status = status_get_status_data(src);
|
||||
|
||||
if (sd->expaddrace[status->race])
|
||||
if( sd->expaddrace[status->race] )
|
||||
bonus += sd->expaddrace[status->race];
|
||||
bonus += sd->expaddrace[status->mode&MD_BOSS?RC_BOSS:RC_NONBOSS];
|
||||
if( sd->expaddrace[RC_ALL] )
|
||||
bonus += sd->expaddrace[RC_ALL];
|
||||
|
||||
if (battle_config.pk_mode &&
|
||||
(int)(status_get_lv(src) - sd->status.base_level) >= 20)
|
||||
@ -9652,7 +9710,7 @@ int pc_del_talisman(struct map_session_data *sd,int count,int type)
|
||||
* Renewal EXP/Itemdrop rate modifier base on level penalty
|
||||
* 1=exp 2=itemdrop
|
||||
*------------------------------------------*/
|
||||
int pc_level_penalty_mod(struct map_session_data *sd, int mob_level, uint32 mob_race, uint32 mob_mode, int type)
|
||||
int pc_level_penalty_mod(struct map_session_data *sd, int mob_level, uint32 mob_class, int type)
|
||||
{
|
||||
int diff, rate = 100, i;
|
||||
|
||||
@ -9663,17 +9721,10 @@ int pc_level_penalty_mod(struct map_session_data *sd, int mob_level, uint32 mob_
|
||||
if( diff < 0 )
|
||||
diff = MAX_LEVEL + ( ~diff + 1 );
|
||||
|
||||
for(i=0; i<RC_MAX; i++){
|
||||
for( i = 0; i < CLASS_ALL; i++ ) {
|
||||
int tmp;
|
||||
|
||||
if( mob_race != i ){
|
||||
if( mob_mode&MD_BOSS && i < RC_BOSS )
|
||||
i = RC_BOSS;
|
||||
else if( i <= RC_BOSS )
|
||||
continue;
|
||||
}
|
||||
|
||||
if( (tmp=level_penalty[type][i][diff]) > 0 ){
|
||||
if( ( tmp = level_penalty[type][i][diff] ) > 0 ) {
|
||||
rate = tmp;
|
||||
break;
|
||||
}
|
||||
@ -9793,10 +9844,10 @@ static bool pc_readdb_skilltree(char* fields[], int columns, int current)
|
||||
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
|
||||
static bool pc_readdb_levelpenalty(char* fields[], int columns, int current)
|
||||
{
|
||||
int type, race, diff;
|
||||
int type, class_, diff;
|
||||
|
||||
type = atoi(fields[0]); //1=experience, 2=item drop
|
||||
race = atoi(fields[1]);
|
||||
class_ = atoi(fields[1]);
|
||||
diff = atoi(fields[2]);
|
||||
|
||||
if( type != 1 && type != 2 ){
|
||||
@ -9804,8 +9855,8 @@ static bool pc_readdb_levelpenalty(char* fields[], int columns, int current)
|
||||
return false;
|
||||
}
|
||||
|
||||
if( race < 0 || race > RC_MAX ){
|
||||
ShowWarning("pc_readdb_levelpenalty: Invalid race %d specified.\n", race);
|
||||
if( class_ < 0 || class_ > CLASS_ALL ){
|
||||
ShowWarning("pc_readdb_levelpenalty: Invalid class %d specified.\n", class_);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -9814,7 +9865,7 @@ static bool pc_readdb_levelpenalty(char* fields[], int columns, int current)
|
||||
if( diff < 0 )
|
||||
diff = min(MAX_LEVEL + ( ~(diff) + 1 ), MAX_LEVEL*2);
|
||||
|
||||
level_penalty[type][race][diff] = atoi(fields[3]);
|
||||
level_penalty[type][class_][diff] = atoi(fields[3]);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -10103,7 +10154,7 @@ int pc_readdb(void)
|
||||
sv_readdb(db_path, "re/level_penalty.txt", ',', 4, 4, -1, &pc_readdb_levelpenalty);
|
||||
for( k=1; k < 3; k++ ){ // fill in the blanks
|
||||
int j;
|
||||
for( j = 0; j < RC_MAX; j++ ){
|
||||
for( j = 0; j < CLASS_ALL; j++ ){
|
||||
int tmp = 0;
|
||||
for( i = 0; i < MAX_LEVEL*2; i++ ){
|
||||
if( i == MAX_LEVEL+1 )
|
||||
|
56
src/map/pc.h
56
src/map/pc.h
@ -10,7 +10,7 @@
|
||||
#include "battle.h" // battle_config
|
||||
#include "buyingstore.h" // struct s_buyingstore
|
||||
#include "itemdb.h" // MAX_ITEMGROUP
|
||||
#include "map.h" // RC_MAX
|
||||
#include "map.h" // RC_ALL
|
||||
#include "script.h" // struct script_reg, struct script_regstr
|
||||
#include "searchstore.h" // struct s_search_store_info
|
||||
#include "status.h" // OPTION_*, struct weapon_atk
|
||||
@ -68,10 +68,13 @@ struct weapon_data {
|
||||
int star;
|
||||
int ignore_def_ele;
|
||||
int ignore_def_race;
|
||||
int ignore_def_class;
|
||||
int def_ratio_atk_ele;
|
||||
int def_ratio_atk_race;
|
||||
int addele[ELE_MAX];
|
||||
int addrace[RC_MAX];
|
||||
int def_ratio_atk_class;
|
||||
int addele[ELE_ALL];
|
||||
int addrace[RC_ALL];
|
||||
int addclass[CLASS_ALL];
|
||||
int addrace2[RC2_MAX];
|
||||
int addsize[3];
|
||||
|
||||
@ -80,7 +83,7 @@ struct weapon_data {
|
||||
short per;
|
||||
short value;
|
||||
unsigned type:1;
|
||||
} hp_drain[RC_MAX], sp_drain[RC_MAX];
|
||||
} hp_drain_race[RC_ALL], sp_drain_race[RC_ALL], hp_drain_class[CLASS_ALL], sp_drain_class[CLASS_ALL];
|
||||
|
||||
struct {
|
||||
short class_, rate;
|
||||
@ -111,7 +114,7 @@ struct s_addeffectonskill {
|
||||
|
||||
struct s_add_drop {
|
||||
short id, group;
|
||||
int race, rate;
|
||||
int race, rate, class_;
|
||||
};
|
||||
|
||||
struct s_autobonus {
|
||||
@ -286,30 +289,36 @@ struct map_session_data {
|
||||
|
||||
// here start arrays to be globally zeroed at the beginning of status_calc_pc()
|
||||
int param_bonus[6],param_equip[6]; //Stores card/equipment bonuses.
|
||||
int subele[ELE_MAX];
|
||||
int subrace[RC_MAX];
|
||||
int subele[ELE_ALL];
|
||||
int subrace[RC_ALL];
|
||||
int subclass[CLASS_ALL];
|
||||
int subrace2[RC2_MAX];
|
||||
int subsize[3];
|
||||
int reseff[SC_COMMON_MAX-SC_COMMON_MIN+1];
|
||||
int weapon_coma_ele[ELE_MAX];
|
||||
int weapon_coma_race[RC_MAX];
|
||||
int weapon_coma_ele[ELE_ALL];
|
||||
int weapon_coma_race[RC_ALL];
|
||||
int weapon_coma_class[CLASS_ALL];
|
||||
int weapon_atk[16];
|
||||
int weapon_atk_rate[16];
|
||||
int arrow_addele[ELE_MAX];
|
||||
int arrow_addrace[RC_MAX];
|
||||
int arrow_addele[ELE_ALL];
|
||||
int arrow_addrace[RC_ALL];
|
||||
int arrow_addclass[CLASS_ALL];
|
||||
int arrow_addsize[3];
|
||||
int magic_addele[ELE_MAX];
|
||||
int magic_addrace[RC_MAX];
|
||||
int magic_addele[ELE_ALL];
|
||||
int magic_addrace[RC_ALL];
|
||||
int magic_addclass[CLASS_ALL];
|
||||
int magic_addsize[3];
|
||||
int magic_atk_ele[ELE_MAX];
|
||||
int critaddrace[RC_MAX];
|
||||
int expaddrace[RC_MAX];
|
||||
int ignore_mdef[RC_MAX];
|
||||
int ignore_def[RC_MAX];
|
||||
int magic_atk_ele[ELE_ALL];
|
||||
int critaddrace[RC_ALL];
|
||||
int expaddrace[RC_ALL];
|
||||
int ignore_mdef;
|
||||
int ignore_mdef_by_race[RC_ALL];
|
||||
int ignore_mdef_by_class[CLASS_ALL];
|
||||
int ignore_def_by_race[RC_ALL];
|
||||
int itemgrouphealrate[MAX_ITEMGROUP];
|
||||
short sp_gain_race[RC_MAX];
|
||||
short sp_gain_race_attack[RC_MAX];
|
||||
short hp_gain_race_attack[RC_MAX];
|
||||
short sp_gain_race[RC_ALL];
|
||||
short sp_gain_race_attack[RC_ALL];
|
||||
short hp_gain_race_attack[RC_ALL];
|
||||
// zeroed arrays end here.
|
||||
// zeroed structures start here
|
||||
struct s_autospell autospell[15], autospell2[15], autospell3[15];
|
||||
@ -340,7 +349,7 @@ struct map_session_data {
|
||||
struct {
|
||||
short value;
|
||||
int rate, tick;
|
||||
} def_set_race[RC_MAX], mdef_set_race[RC_MAX];
|
||||
} def_set_race[RC_ALL], mdef_set_race[RC_ALL];
|
||||
// zeroed structures end here
|
||||
// manually zeroed structures start here.
|
||||
struct s_autobonus autobonus[MAX_PC_BONUS], autobonus2[MAX_PC_BONUS], autobonus3[MAX_PC_BONUS]; //Auto script on attack, when attacked, on skill usage
|
||||
@ -356,6 +365,7 @@ struct map_session_data {
|
||||
int near_attack_def_rate,long_attack_def_rate,magic_def_rate,misc_def_rate;
|
||||
int ignore_mdef_ele;
|
||||
int ignore_mdef_race;
|
||||
int ignore_mdef_class;
|
||||
int perfect_hit;
|
||||
int perfect_hit_add;
|
||||
int get_zeny_rate;
|
||||
@ -1068,6 +1078,6 @@ void pc_bonus_script_clear(struct map_session_data *sd, uint16 flag);
|
||||
void pc_cell_basilica(struct map_session_data *sd);
|
||||
|
||||
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
|
||||
int pc_level_penalty_mod(struct map_session_data *sd, int mob_level, uint32 mob_race, uint32 mob_mode, int type);
|
||||
int pc_level_penalty_mod(struct map_session_data *sd, int mob_level, uint32 mob_class, int type);
|
||||
#endif
|
||||
#endif /* _PC_H_ */
|
||||
|
@ -509,11 +509,11 @@ int pet_catch_process2(struct map_session_data* sd, int target_id)
|
||||
|
||||
//FIXME: delete taming item here, if this was an item-invoked capture and the item was flagged as delay-consume [ultramage]
|
||||
|
||||
i = search_petDB_index(md->class_,PET_CLASS);
|
||||
i = search_petDB_index(md->mob_id,PET_CLASS);
|
||||
//catch_target_class == 0 is used for universal lures (except bosses for now). [Skotlex]
|
||||
if (sd->catch_target_class == 0 && !(md->status.mode&MD_BOSS))
|
||||
sd->catch_target_class = md->class_;
|
||||
if(i < 0 || sd->catch_target_class != md->class_) {
|
||||
sd->catch_target_class = md->mob_id;
|
||||
if(i < 0 || sd->catch_target_class != md->mob_id) {
|
||||
clif_emotion(&md->bl, E_AG); //mob will do /ag if wrong lure is used on them.
|
||||
clif_pet_roulette(sd,0);
|
||||
sd->catch_target_class = -1;
|
||||
|
@ -11308,7 +11308,7 @@ static int buildin_maprespawnguildid_sub_mob(struct block_list *bl,va_list ap)
|
||||
{
|
||||
struct mob_data *md=(struct mob_data *)bl;
|
||||
|
||||
if(!md->guardian_data && md->class_ != MOBID_EMPERIUM)
|
||||
if(!md->guardian_data && md->mob_id != MOBID_EMPERIUM)
|
||||
status_kill(bl);
|
||||
|
||||
return 0;
|
||||
@ -16951,7 +16951,7 @@ static int buildin_mobuseskill_sub(struct block_list *bl,va_list ap)
|
||||
int emotion = va_arg(ap,int);
|
||||
int target = va_arg(ap,int);
|
||||
|
||||
if( md->class_ != mobid )
|
||||
if( md->mob_id != mobid )
|
||||
return 0;
|
||||
|
||||
// 0:self, 1:target, 2:master, default:random
|
||||
|
@ -1568,9 +1568,9 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint
|
||||
{ // Coma, Breaking Equipment
|
||||
if( sd && sd->special_state.bonus_coma )
|
||||
{
|
||||
rate = sd->weapon_coma_ele[tstatus->def_ele];
|
||||
rate += sd->weapon_coma_race[tstatus->race];
|
||||
rate += sd->weapon_coma_race[tstatus->mode&MD_BOSS?RC_BOSS:RC_NONBOSS];
|
||||
rate = sd->weapon_coma_ele[tstatus->def_ele] + sd->weapon_coma_ele[ELE_ALL];
|
||||
rate += sd->weapon_coma_race[tstatus->race] + sd->weapon_coma_race[RC_ALL];
|
||||
rate += sd->weapon_coma_class[tstatus->class_] + sd->weapon_coma_class[CLASS_ALL];
|
||||
if (rate)
|
||||
status_change_start(src,bl, SC_COMA, rate, 0, 0, src->id, 0, 0, 0);
|
||||
}
|
||||
@ -1960,8 +1960,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
|
||||
int sp = 0, hp = 0;
|
||||
if( (attack_type&(BF_WEAPON|BF_SHORT)) == (BF_WEAPON|BF_SHORT) ) {
|
||||
sp += sd->bonus.sp_gain_value;
|
||||
sp += sd->sp_gain_race[status_get_race(bl)];
|
||||
sp += sd->sp_gain_race[is_boss(bl)?RC_BOSS:RC_NONBOSS];
|
||||
sp += sd->sp_gain_race[status_get_race(bl)] + sd->sp_gain_race[RC_ALL];
|
||||
hp += sd->bonus.hp_gain_value;
|
||||
}
|
||||
if( attack_type&BF_MAGIC ) {
|
||||
@ -2236,7 +2235,7 @@ int skill_blown(struct block_list* src, struct block_list* target, int count, in
|
||||
switch (target->type) {
|
||||
case BL_MOB: {
|
||||
struct mob_data* md = BL_CAST(BL_MOB, target);
|
||||
if( md->class_ == MOBID_EMPERIUM )
|
||||
if( md->mob_id == MOBID_EMPERIUM )
|
||||
return 0;
|
||||
//Bosses or imune can't be knocked-back
|
||||
if(src != target && status_get_mode(target)&(MD_KNOCKBACK_IMMUNE|MD_BOSS))
|
||||
@ -2643,7 +2642,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
||||
else if (s_ele == -2) //Use status element
|
||||
s_ele = status_get_attack_sc_element(src,status_get_sc(src));
|
||||
else if( s_ele == -3 ) //Use random element
|
||||
s_ele = rnd()%ELE_MAX;
|
||||
s_ele = rnd()%ELE_ALL;
|
||||
|
||||
dmg.damage = battle_attr_fix(bl, bl, dmg.damage, s_ele, status_get_element(bl), status_get_element_level(bl));
|
||||
|
||||
@ -2968,9 +2967,9 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
||||
(dmg.flag&BF_MISC && (skill_id == RA_CLUSTERBOMB || skill_id == RA_FIRINGTRAP || skill_id == RA_ICEBOUNDTRAP || skill_id == RK_DRAGONBREATH || skill_id == RK_DRAGONBREATH_WATER)) ) )
|
||||
{
|
||||
if (battle_config.left_cardfix_to_right)
|
||||
battle_drain(sd, bl, dmg.damage, dmg.damage, tstatus->race, tstatus->mode&MD_BOSS);
|
||||
battle_drain(sd, bl, dmg.damage, dmg.damage, tstatus->race, tstatus->class_);
|
||||
else
|
||||
battle_drain(sd, bl, dmg.damage, dmg.damage2, tstatus->race, tstatus->mode&MD_BOSS);
|
||||
battle_drain(sd, bl, dmg.damage, dmg.damage2, tstatus->race, tstatus->class_);
|
||||
}
|
||||
|
||||
if( damage > 0 ) {
|
||||
@ -3147,7 +3146,7 @@ static int skill_check_unit_range2_sub (struct block_list *bl, va_list ap)
|
||||
if( skill_id == HP_BASILICA && bl->type == BL_PC )
|
||||
return 0;
|
||||
|
||||
if( skill_id == AM_DEMONSTRATION && bl->type == BL_MOB && ((TBL_MOB*)bl)->class_ == MOBID_EMPERIUM )
|
||||
if( skill_id == AM_DEMONSTRATION && bl->type == BL_MOB && ((TBL_MOB*)bl)->mob_id == MOBID_EMPERIUM )
|
||||
return 0; //Allow casting Bomb/Demonstration Right under emperium [Skotlex]
|
||||
return 1;
|
||||
}
|
||||
@ -5231,7 +5230,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
int heal = skill_calc_heal(src, bl, skill_id, skill_lv, true);
|
||||
int heal_get_jobexp;
|
||||
if( status_isimmune(bl) ||
|
||||
(dstmd && (dstmd->class_ == MOBID_EMPERIUM || mob_is_battleground(dstmd))) ||
|
||||
(dstmd && (dstmd->mob_id == MOBID_EMPERIUM || mob_is_battleground(dstmd))) ||
|
||||
(dstsd && pc_ismadogear(dstsd)) )//Mado is immune to heal
|
||||
heal=0;
|
||||
|
||||
@ -5500,9 +5499,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case SA_TAMINGMONSTER:
|
||||
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
|
||||
if (sd && dstmd) {
|
||||
ARR_FIND( 0, MAX_PET_DB, i, dstmd->class_ == pet_db[i].class_ );
|
||||
ARR_FIND( 0, MAX_PET_DB, i, dstmd->mob_id == pet_db[i].class_ );
|
||||
if( i < MAX_PET_DB )
|
||||
pet_catch_process1(sd, dstmd->class_);
|
||||
pet_catch_process1(sd, dstmd->mob_id);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -6464,7 +6463,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||
break;
|
||||
}
|
||||
if( dstmd && dstmd->class_ == MOBID_EMPERIUM )
|
||||
if( dstmd && dstmd->mob_id == MOBID_EMPERIUM )
|
||||
break; // Cannot be Used on Emperium
|
||||
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
@ -6657,7 +6656,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
case AM_BERSERKPITCHER:
|
||||
case AM_POTIONPITCHER: {
|
||||
int i,hp = 0,sp = 0;
|
||||
if( dstmd && dstmd->class_ == MOBID_EMPERIUM ) {
|
||||
if( dstmd && dstmd->mob_id == MOBID_EMPERIUM ) {
|
||||
map_freeblock_unlock();
|
||||
return 1;
|
||||
}
|
||||
@ -7476,7 +7475,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
// Slim Pitcher
|
||||
case CR_SLIMPITCHER:
|
||||
// Updated to block Slim Pitcher from working on barricades and guardian stones.
|
||||
if( dstmd && (dstmd->class_ == MOBID_EMPERIUM || (dstmd->class_ >= MOBID_BARRICADE1 && dstmd->class_ <= MOBID_GUARIDAN_STONE2)) )
|
||||
if( dstmd && (dstmd->mob_id == MOBID_EMPERIUM || (dstmd->mob_id >= MOBID_BARRICADE1 && dstmd->mob_id <= MOBID_GUARIDAN_STONE2)) )
|
||||
break;
|
||||
if (potion_hp || potion_sp) {
|
||||
int hp = potion_hp, sp = potion_sp;
|
||||
@ -7549,7 +7548,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
{
|
||||
int eff, count = -1;
|
||||
if( rnd() % 100 > skill_lv * 8 || (tsc && tsc->data[SC_BASILICA]) ||
|
||||
(dstmd && ((dstmd->guardian_data && dstmd->class_ == MOBID_EMPERIUM) || mob_is_battleground(dstmd))) ) {
|
||||
(dstmd && ((dstmd->guardian_data && dstmd->mob_id == MOBID_EMPERIUM) || mob_is_battleground(dstmd))) ) {
|
||||
if( sd )
|
||||
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
|
||||
|
||||
@ -8708,7 +8707,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
{
|
||||
if( bl->type != BL_MOB ) break;
|
||||
md = map_id2md(bl->id);
|
||||
if( md && md->class_ >= MOBID_SILVERSNIPER && md->class_ <= MOBID_MAGICDECOY_WIND )
|
||||
if( md && md->mob_id >= MOBID_SILVERSNIPER && md->mob_id <= MOBID_MAGICDECOY_WIND )
|
||||
status_kill(bl);
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
}
|
||||
@ -9988,7 +9987,7 @@ int skill_castend_id(int tid, unsigned int tick, int id, intptr_t data)
|
||||
|
||||
if( ud->skill_id >= SL_SKE && ud->skill_id <= SL_SKA && target->type == BL_MOB )
|
||||
{
|
||||
if( ((TBL_MOB*)target)->class_ == MOBID_EMPERIUM )
|
||||
if( ((TBL_MOB*)target)->mob_id == MOBID_EMPERIUM )
|
||||
break;
|
||||
}
|
||||
else if (inf && battle_check_target(src, target, inf) <= 0){
|
||||
@ -12126,7 +12125,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
|
||||
int heal = skill_calc_heal(ss,bl,sg->skill_id,sg->skill_lv,true);
|
||||
struct mob_data *md = BL_CAST(BL_MOB, bl);
|
||||
#ifdef RENEWAL
|
||||
if( md && md->class_ == MOBID_EMPERIUM )
|
||||
if( md && md->mob_id == MOBID_EMPERIUM )
|
||||
break;
|
||||
#endif
|
||||
if( md && mob_is_battleground(md) )
|
||||
@ -12350,7 +12349,7 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
|
||||
int heal;
|
||||
#ifdef RENEWAL
|
||||
struct mob_data *md = BL_CAST(BL_MOB, bl);
|
||||
if( md && md->class_ == MOBID_EMPERIUM )
|
||||
if( md && md->mob_id == MOBID_EMPERIUM )
|
||||
break;
|
||||
#endif
|
||||
if( sg->src_id == bl->id && !(tsc && tsc->data[SC_SPIRIT] && tsc->data[SC_SPIRIT]->val2 == SL_BARDDANCER) )
|
||||
@ -13223,7 +13222,7 @@ static int skill_check_condition_mob_master_sub (struct block_list *bl, va_list
|
||||
if( md->master_id != src_id || md->special_state.ai != ai)
|
||||
return 0; //Non alchemist summoned mobs have nothing to do here.
|
||||
|
||||
if(md->class_==mob_class)
|
||||
if(md->mob_id==mob_class)
|
||||
(*c)++;
|
||||
|
||||
return 1;
|
||||
|
@ -2207,7 +2207,7 @@ int status_calc_mob_(struct mob_data* md, bool first)
|
||||
|
||||
if (md->guardian_data && md->guardian_data->guardup_lv)
|
||||
flag|=4;
|
||||
if (md->class_ == MOBID_EMPERIUM)
|
||||
if (md->mob_id == MOBID_EMPERIUM)
|
||||
flag|=4;
|
||||
|
||||
if (battle_config.slaves_inherit_speed && md->master_id)
|
||||
@ -2301,7 +2301,7 @@ int status_calc_mob_(struct mob_data* md, bool first)
|
||||
if (!gc)
|
||||
ShowError("status_calc_mob: No castle set at map %s\n", map[md->bl.m].name);
|
||||
else
|
||||
if(gc->castle_id < 24 || md->class_ == MOBID_EMPERIUM) {
|
||||
if(gc->castle_id < 24 || md->mob_id == MOBID_EMPERIUM) {
|
||||
#ifdef RENEWAL
|
||||
status->max_hp += 50 * gc->defense;
|
||||
status->max_sp += 70 * gc->defense;
|
||||
@ -2314,7 +2314,7 @@ int status_calc_mob_(struct mob_data* md, bool first)
|
||||
status->def += (gc->defense+2)/3;
|
||||
status->mdef += (gc->defense+2)/3;
|
||||
}
|
||||
if(md->class_ != MOBID_EMPERIUM) {
|
||||
if(md->mob_id != MOBID_EMPERIUM) {
|
||||
status->batk += status->batk * 10*md->guardian_data->guardup_lv/100;
|
||||
status->rhw.atk += status->rhw.atk * 10*md->guardian_data->guardup_lv/100;
|
||||
status->rhw.atk2 += status->rhw.atk2 * 10*md->guardian_data->guardup_lv/100;
|
||||
@ -2395,6 +2395,7 @@ int status_calc_pet_(struct pet_data *pd, bool first)
|
||||
if (first) {
|
||||
memcpy(&pd->status, &pd->db->status, sizeof(struct status_data));
|
||||
pd->status.mode = MD_CANMOVE; // Pets discard all modes, except walking
|
||||
pd->status.class_ = CLASS_NORMAL;
|
||||
pd->status.speed = pd->petDB->speed;
|
||||
|
||||
if(battle_config.pet_attack_support || battle_config.pet_damage_support) {
|
||||
@ -2740,24 +2741,29 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
|
||||
+ sizeof(sd->param_equip)
|
||||
+ sizeof(sd->subele)
|
||||
+ sizeof(sd->subrace)
|
||||
+ sizeof(sd->subclass)
|
||||
+ sizeof(sd->subrace2)
|
||||
+ sizeof(sd->subsize)
|
||||
+ sizeof(sd->reseff)
|
||||
+ sizeof(sd->weapon_coma_ele)
|
||||
+ sizeof(sd->weapon_coma_race)
|
||||
+ sizeof(sd->weapon_coma_class)
|
||||
+ sizeof(sd->weapon_atk)
|
||||
+ sizeof(sd->weapon_atk_rate)
|
||||
+ sizeof(sd->arrow_addele)
|
||||
+ sizeof(sd->arrow_addrace)
|
||||
+ sizeof(sd->arrow_addclass)
|
||||
+ sizeof(sd->arrow_addsize)
|
||||
+ sizeof(sd->magic_addele)
|
||||
+ sizeof(sd->magic_addrace)
|
||||
+ sizeof(sd->magic_addclass)
|
||||
+ sizeof(sd->magic_addsize)
|
||||
+ sizeof(sd->magic_atk_ele)
|
||||
+ sizeof(sd->critaddrace)
|
||||
+ sizeof(sd->expaddrace)
|
||||
+ sizeof(sd->ignore_mdef)
|
||||
+ sizeof(sd->ignore_def)
|
||||
+ sizeof(sd->ignore_def_by_race)
|
||||
+ sizeof(sd->ignore_mdef_by_race)
|
||||
+ sizeof(sd->ignore_mdef_by_class)
|
||||
+ sizeof(sd->itemgrouphealrate)
|
||||
+ sizeof(sd->sp_gain_race)
|
||||
+ sizeof(sd->sp_gain_race_attack)
|
||||
@ -2791,6 +2797,7 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
|
||||
status->aspd_rate = 1000;
|
||||
status->ele_lv = 1;
|
||||
status->race = RC_DEMIHUMAN;
|
||||
status->class_ = CLASS_NORMAL;
|
||||
|
||||
// Zero up structures...
|
||||
memset(&sd->autospell,0,sizeof(sd->autospell)
|
||||
@ -3510,6 +3517,7 @@ int status_calc_mercenary_(struct mercenary_data *md, bool first)
|
||||
|
||||
if( first ) {
|
||||
memcpy(status, &md->db->status, sizeof(struct status_data));
|
||||
status->class_ = CLASS_NORMAL;
|
||||
status->mode = MD_CANMOVE|MD_CANATTACK;
|
||||
status->hp = status->max_hp;
|
||||
status->sp = status->max_sp;
|
||||
@ -3550,6 +3558,7 @@ int status_calc_homunculus_(struct homun_data *hd, bool first)
|
||||
status->def_ele = db->element;
|
||||
status->ele_lv = 1;
|
||||
status->race = db->race;
|
||||
status->class_ = CLASS_NORMAL;
|
||||
status->size = (hom->class_ == db->evo_class)?db->evo_size:db->base_size;
|
||||
status->rhw.range = 1 + status->size;
|
||||
status->mode = MD_CANMOVE|MD_CANATTACK;
|
||||
@ -3644,6 +3653,7 @@ int status_calc_elemental_(struct elemental_data *ed, bool first)
|
||||
else
|
||||
status->mode = ele->mode;
|
||||
|
||||
status->class_ = CLASS_NORMAL;
|
||||
status_calc_misc(&ed->bl, status, 0);
|
||||
|
||||
status->max_hp = ele->max_hp;
|
||||
@ -3693,6 +3703,7 @@ int status_calc_npc_(struct npc_data *nd, bool first)
|
||||
status->def_ele = ELE_NEUTRAL;
|
||||
status->ele_lv = 1;
|
||||
status->race = RC_DEMIHUMAN;
|
||||
status->class_ = CLASS_NORMAL;
|
||||
status->size = nd->size;
|
||||
status->rhw.range = 1 + status->size;
|
||||
status->mode = (MD_CANMOVE|MD_CANATTACK);
|
||||
@ -7207,7 +7218,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
|
||||
if( bl->type == BL_MOB) {
|
||||
struct mob_data *md = BL_CAST(BL_MOB,bl);
|
||||
if(md && (md->class_ == MOBID_EMPERIUM || mob_is_battleground(md)) && type != SC_SAFETYWALL && type != SC_PNEUMA)
|
||||
if(md && (md->mob_id == MOBID_EMPERIUM || mob_is_battleground(md)) && type != SC_SAFETYWALL && type != SC_PNEUMA)
|
||||
return 0; // Emperium/BG Monsters can't be afflicted by status changes
|
||||
// Uncomment to prevent status adding hp to gvg mob (like bloodylust=hp*3 etc...
|
||||
// if(md && mob_is_gvg(md) && status_sc2scb_flag(type)&SCB_MAXHP) return 0;
|
||||
@ -8085,7 +8096,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
// val1 : Element Lvl (if called by skill lvl 1, takes random value between 1 and 4)
|
||||
// val2 : Element (When no element, random one is picked)
|
||||
// val3 : 0 = called by skill 1 = called by script (fixed level)
|
||||
if( !val2 ) val2 = rnd()%ELE_MAX;
|
||||
if( !val2 ) val2 = rnd()%ELE_ALL;
|
||||
|
||||
if( val1 == 1 && val3 == 0 )
|
||||
val1 = 1 + rnd()%4;
|
||||
@ -8749,10 +8760,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
// end previous enchants
|
||||
skill_enchant_elemental_end(bl,type);
|
||||
// Make sure the received element is valid.
|
||||
if (val2 >= ELE_MAX)
|
||||
val2 = val2%ELE_MAX;
|
||||
if (val2 >= ELE_ALL)
|
||||
val2 = val2%ELE_ALL;
|
||||
else if (val2 < 0)
|
||||
val2 = rnd()%ELE_MAX;
|
||||
val2 = rnd()%ELE_ALL;
|
||||
break;
|
||||
case SC_CRITICALWOUND:
|
||||
val2 = 20*val1; // Heal effectiveness decrease
|
||||
@ -12187,13 +12198,13 @@ static bool status_readdb_attrfix()
|
||||
lv=atoi(split[0]);
|
||||
n=atoi(split[1]);
|
||||
|
||||
for(i=0;i<n && i<ELE_MAX;) {
|
||||
for(i=0;i<n && i<ELE_ALL;) {
|
||||
if( !fgets(line, sizeof(line), fp) )
|
||||
break;
|
||||
if(line[0]=='/' && line[1]=='/')
|
||||
continue;
|
||||
|
||||
for(j=0,p=line;j<n && j<ELE_MAX && p;j++) {
|
||||
for(j=0,p=line;j<n && j<ELE_ALL && p;j++) {
|
||||
while(*p==32 && *p>0)
|
||||
p++;
|
||||
attr_fix_table[lv-1][i][j]=atoi(p);
|
||||
@ -12242,8 +12253,8 @@ int status_readdb(void)
|
||||
}
|
||||
// attr_fix.txt
|
||||
for(i=0;i<4;i++)
|
||||
for(j=0;j<ELE_MAX;j++)
|
||||
for(k=0;k<ELE_MAX;k++)
|
||||
for(j=0;j<ELE_ALL;j++)
|
||||
for(k=0;k<ELE_ALL;k++)
|
||||
attr_fix_table[i][j][k]=100;
|
||||
|
||||
// read databases
|
||||
|
@ -1738,7 +1738,8 @@ struct status_data {
|
||||
|
||||
unsigned char
|
||||
def_ele, ele_lv,
|
||||
size, race;
|
||||
size, race,
|
||||
class_;
|
||||
|
||||
struct weapon_atk rhw, lhw; //Right Hand/Left Hand Weapon.
|
||||
};
|
||||
@ -1887,6 +1888,7 @@ unsigned char status_calc_attack_element(struct block_list *bl, struct status_ch
|
||||
#define status_get_attack_element(bl) status_get_status_data(bl)->rhw.ele
|
||||
#define status_get_attack_lelement(bl) status_get_status_data(bl)->lhw.ele
|
||||
#define status_get_race(bl) status_get_status_data(bl)->race
|
||||
#define status_get_class_(bl) status_get_status_data(bl)->class_
|
||||
#define status_get_size(bl) status_get_status_data(bl)->size
|
||||
#define status_get_mode(bl) status_get_status_data(bl)->mode
|
||||
int status_get_party_id(struct block_list *bl);
|
||||
|
@ -2131,7 +2131,7 @@ static int unit_attack_timer_sub(struct block_list* src, int tid, unsigned int t
|
||||
if (sstatus->mode&MD_ASSIST && DIFF_TICK(md->last_linktime, tick) < MIN_MOBLINKTIME) {
|
||||
// Link monsters nearby [Skotlex]
|
||||
md->last_linktime = tick;
|
||||
map_foreachinrange(mob_linksearch, src, md->db->range2, BL_MOB, md->class_, target, tick);
|
||||
map_foreachinrange(mob_linksearch, src, md->db->range2, BL_MOB, md->mob_id, target, tick);
|
||||
}
|
||||
}
|
||||
if(src->type == BL_PET && pet_attackskill((TBL_PET*)src, target->id))
|
||||
@ -2740,7 +2740,7 @@ int unit_free(struct block_list *bl, clr_type clrtype)
|
||||
aFree(md->base_status);
|
||||
md->base_status = NULL;
|
||||
}
|
||||
if( mob_is_clone(md->class_) )
|
||||
if( mob_is_clone(md->mob_id) )
|
||||
mob_clone_delete(md);
|
||||
if( md->tomb_nid )
|
||||
mvptomb_destroy(md);
|
||||
|
Loading…
x
Reference in New Issue
Block a user