Browse Source

Merge branch 'rathena/master'

Cydh Ramdh 11 years ago
parent
commit
a607a42ea3

+ 4 - 0
conf/battle/feature.conf

@@ -19,6 +19,10 @@ feature.search_stores: on
 // Show suggestions when typing an incomplete command?
 feature.atcommand_suggestions: off
 
+// Warp suggestions (Note 1)
+// Show suggestions when attempting to @warp to a non-existent map?
+feature.warp_suggestions: off
+
 // Banking (Note 1)
 // Requires: 2013-07-24aRagexe or later
 feature.banking: on

+ 43 - 43
db/pre-re/item_db.txt

@@ -533,11 +533,11 @@
 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; },{},{}
 1181,Tae_Goo_Lyeon,Tae Goo Lyeon,5,20,,2000,250,,1,2,0x00004082,2,2,34,4,90,1,3,{ bonus bFlee2,10; if(JobLevel>=70) autobonus "{ bonus bBaseAtk,50; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; if(getrefine()>8) { bonus bCastrate,-20; bonus bDelayRate,-20; } },{},{}
 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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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; bonus2 bAddRace,RC_Player,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 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 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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; } },{},{}
+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 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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_All,40; },{},{}
@@ -621,10 +621,10 @@
 1276,Katar_Of_Thornbush_,Katar of Quaking,5,45000,,1200,105,,1,3,0x00001000,7,2,34,3,55,1,16,{ bonus bAtkEle,Ele_Earth; bonus2 bAddEff,Eff_Blind,500; },{},{}
 1277,Katar_Of_Raging_Blaze_,Katar of Raging Blaze,5,45000,,1200,105,,1,3,0x00001000,7,2,34,3,55,1,16,{ bonus bAtkEle,Ele_Fire; bonus2 bAddEff,Eff_Silence,500; },{},{}
 1278,Katar_Of_Piercing_Wind_,Katar of Piercing Wind,5,45000,,1200,105,,1,3,0x00001000,7,2,34,3,55,1,16,{ bonus bAtkEle,Ele_Wind; bonus2 bAddEff,Eff_Sleep,500; },{},{}
-1279,BF_Katar1,Brave Carnage Katar,5,20,,0,130,,1,0,0x00001000,7,2,34,3,80,1,16,{ bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+1279,BF_Katar1,Brave Carnage Katar,5,20,,0,130,,1,0,0x00001000,7,2,34,3,80,1,16,{ bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
 1280,BF_Katar2,Valorous Carnage Katar,5,20,,0,130,,1,0,0x00001000,7,2,34,3,80,1,16,{ bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus bCritAtkRate,20; bonus bAspdRate,5; bonus bUnbreakableWeapon,0; },{},{}
-1281,Krieger_Katar1,Glorious Bloody Roar,5,20,,0,140,,1,0,0x00001000,7,2,34,4,80,1,16,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
-1282,Krieger_Katar2,Glorious Jamadhar,5,20,,0,140,,1,0,0x00001000,7,2,34,4,80,1,16,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bCriticalAddRace,RC_DemiHuman,5; bonus2 bCriticalAddRace,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
+1281,Krieger_Katar1,Glorious Bloody Roar,5,20,,0,140,,1,0,0x00001000,7,2,34,4,80,1,16,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
+1282,Krieger_Katar2,Glorious Jamadhar,5,20,,0,140,,1,0,0x00001000,7,2,34,4,80,1,16,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bCriticalAddRace,RC_DemiHuman,5; bonus2 bCriticalAddRace,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
 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; },{},{}
@@ -639,7 +639,7 @@
 1307,Windhawk,Windhawk,5,18000,,1500,115,,1,0,0x000654E2,7,2,2,2,14,1,6,{ bonus bAtkEle,Ele_Wind; bonus bAspdRate,5; },{},{}
 1308,Golden_Axe,Golden Axe,5,20,,3000,170,,1,0,0x00000001,7,2,2,4,45,1,6,{},{},{}
 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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus bAspdRate,5; bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,50; bonus4 bAutoSpellOnSkill,"MC_MAMMONITE","NPC_CRITICALWOUND",2,200; } },{},{}
+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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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_All,70; },{},{}
 1313,Tourist_Axe,Tourist Axe,5,0,,500,77,,1,0,0x000654E3,7,2,2,1,1,0,6,{ bonus bStr,2; },{},{}
@@ -674,10 +674,10 @@
 1376,Heart_Breaker,Heart Breaker,5,20,,2000,175,,1,1,0x000444A2,2,2,34,4,70,1,7,{ bonus bCritical,20+getrefine(); bonus bAspdRate,5; if((Class==Job_Whitesmith)||(Class==Job_Creator)) bonus3 bAutoSpell,"BS_HAMMERFALL",3,30; },{},{}
 1377,Hurricane_Fury,Hurricane's Fury,5,20,,3500,332,,1,1,0x000444A2,2,2,34,4,80,1,7,{ bonus2 bSubSize,Size_Medium,10+getrefine(); bonus bAspdRate,getrefine(); bonus3 bAutoSpell,"NPC_PULSESTRIKE",5,20; },{},{}
 1378,Great_Axe_C,Refined Great Axe,5,1,,0,215,,1,0,0x000444A2,7,2,34,4,0,0,7,{ bonus bStr,5; bonus bHit,20; bonus2 bAddSkillBlow,"MC_MAMMONITE",5; bonus2 bAddEff,Eff_Stun,2000; },{},{}
-1379,BF_Two_Handed_Axe1,Valorous Insane Battle Axe,5,20,,0,200,,1,0,0x000444A2,7,2,34,3,80,1,7,{ bonus bStr,3; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+1379,BF_Two_Handed_Axe1,Valorous Insane Battle Axe,5,20,,0,200,,1,0,0x000444A2,7,2,34,3,80,1,7,{ bonus bStr,3; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
 1380,BF_Two_Handed_Axe2,Brave Insane Battle Axe,5,20,,0,200,,1,0,0x000444A2,7,2,34,3,80,1,7,{ bonus bStr,3; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; autobonus "{ bonus bBreakArmorRate,10000; }",20,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,0; },{},{}
 1381,N_Battle_Axe,Novice Battle Axe,5,0,,0,100,,1,3,0x000444A2,7,2,34,1,3,0,7,{},{},{}
-1382,Krieger_Twohand_Axe1,Glorious Two-Handed Axe,5,20,,0,220,,1,0,0x000444A2,7,2,34,4,80,1,7,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,50; } if(getrefine()>8) { bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,100; bonus4 bAutoSpellOnSkill,"MC_MAMMONITE","NPC_CRITICALWOUND",2,200; bonus4 bAutoSpellOnSkill,"WS_CARTTERMINATION","NPC_CRITICALWOUND",2,200; } },{},{}
+1382,Krieger_Twohand_Axe1,Glorious Two-Handed Axe,5,20,,0,220,,1,0,0x000444A2,7,2,34,4,80,1,7,{ bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,50; } if(getrefine()>8) { bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,100; bonus4 bAutoSpellOnSkill,"MC_MAMMONITE","NPC_CRITICALWOUND",2,200; bonus4 bAutoSpellOnSkill,"WS_CARTTERMINATION","NPC_CRITICALWOUND",2,200; } },{},{}
 1383,Holy_Celestial_Axe,Celestial Axe,5,20,,1500,200,,1,0,0x000444A2,7,2,34,4,60,1,7,{ bonus bAtkEle,Ele_Holy; bonus bVit,10; bonus2 bAddRace,RC_Undead,10; bonus3 bAutoSpell,"AL_BLESSING",5,50; },{},{}
 1384,Veteran_Axe,Veteran Axe,5,10000,,3000,250,,1,2,0x000444A2,7,2,34,3,80,1,7,{ if(getskilllv("BS_DAGGER")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_SWORD")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_TWOHANDSWORD")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_KNUCKLE")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_SPEAR")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_AXE")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_MACE")==3) { bonus bBaseAtk,10; } bonus bVit,2; },{},{}
 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()); },{},{}
@@ -711,8 +711,8 @@
 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 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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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; } },{},{}
+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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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; },{},{}
@@ -757,7 +757,7 @@
 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 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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; } },{},{}
+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 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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_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; bonus2 bAddRace,RC_Player,10; bonus3 bAutoSpell,"KN_PIERCE",5,30; },{},{}
 // Maces
@@ -802,11 +802,11 @@
 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; },{},{}
 1540,Grand_Cross_,Grand Cross,5,20,,1500,140,,1,1,0x00008110,7,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
 1541,Nemesis,Nemesis,5,20,,900,120,,1,0,0x00008110,7,2,2,4,60,1,8,{ bonus bAtkEle,Ele_Holy; bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_Demon,10; bonus3 bAutoSpell,"AL_CRUCIS",1+getrefine(),100; autobonus "{ bonus bBaseAtk,50; }",10,20000,BF_WEAPON,"{ specialeffect2 EF_BLOODDRAIN; }"; },{},{}
-1542,BF_Morning_Star1,Valorous Battlefield Morning Star,5,20,,0,105,,1,0,0x0004C5B3,7,2,2,3,80,1,8,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+1542,BF_Morning_Star1,Valorous Battlefield Morning Star,5,20,,0,105,,1,0,0x0004C5B3,7,2,2,3,80,1,8,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
 1543,BF_Morning_Star2,Brave Battlefield Morning Star,5,20,,0,105,,1,0,0x0004C5B3,7,2,2,3,80,1,8,{ bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus bUnbreakableWeapon,0; autobonus "{ bonus2 bAddEff,Eff_Stun,5000; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
 1544,Lunakaligo,Lunakaligo,5,20,,700,110,,1,3,0x00008110,2,2,2,3,50,1,8,{ if(readparam(bStr)>=77) { bonus bAspdRate,4; bonus2 bAddEff,Eff_Stun,1500; bonus3 bAddMonsterDropItem,12065,RC_Plant,500; bonus3 bAddMonsterDropItem,12043,RC_Brute,500; bonus3 bAddMonsterDropItem,12069,RC_Fish,500; } },{},{}
 1545,N_Mace,Novice Mace,5,0,,0,57,,1,3,0x0004C5B3,7,2,2,1,2,0,8,{},{},{}
-1546,Krieger_Onehand_Mace1,Glorious Morning Star,5,20,,0,130,,1,0,0x0004C5B3,7,2,2,4,80,1,8,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus2 bAddEff,Eff_Stun,2000; bonus bAspdRate,5; } },{},{}
+1546,Krieger_Onehand_Mace1,Glorious Morning Star,5,20,,0,130,,1,0,0x0004C5B3,7,2,2,4,80,1,8,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus2 bAddEff,Eff_Stun,2000; bonus bAspdRate,5; } },{},{}
 1547,Mace_Of_Madness,Mace Of Madness,5,20,,0,150,,1,0,0x0004C5B2,7,2,2,3,0,0,8,{ bonus2 bSkillAtk,"MC_CARTREVOLUTION",25; bonus bStr,2; },{},{}
 1548,Veteran_Hammer,Veteran Hammer,5,10000,,1800,160,,1,2,0x00008110,7,2,2,3,80,1,8,{ bonus bHealPower,getskilllv("AL_DP"); bonus bCritical,getskilllv("PR_MACEMASTERY")*2; bonus bInt,1; bonus bLuk,1; },{},{}
 // Books
@@ -834,10 +834,10 @@
 1571,Book_Of_Gust_Of_Wind_,Book of Gust of Wind,5,35000,,750,90,,1,3,0x00410100,7,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Wind; },{},{}
 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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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 bIgnoreMdefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreMdefRaceRate,RC_Player,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 bAddRace,RC_Player,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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 bAddRace,RC_Player,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; if(getrefine()>8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; } },{},{}
+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 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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; bonus2 bWeaponComaRace,RC_Player,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_All,40; },{},{}
@@ -931,12 +931,12 @@
 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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
 1739,BF_Bow2,Brave Battle CrossBow,5,0,,0,100,,5,0,0x000A0848,7,2,34,3,80,1,11,{ bonus bDex,2; bonus bInt,10; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus bUnbreakableWeapon,0; },{},{}
 1740,Nepenthes_Bow,Nepenthes Bow,5,20,,1000,105,,5,2,0x00000800,2,2,34,4,60,1,11,{ bonus4 bAutoSpellOnSkill,"AC_DOUBLE","AC_CHARGEARROW",1,20; },{},{}
 1741,Cursed_Lyre,Cursed Lyre,5,20,,1250,125,,5,1,0x00080808,2,2,34,4,80,1,11,{ bonus bLuk,-2; bonus2 bAddEff,Eff_Curse,400; },{},{}
 1742,N_Composite_Bow,Novice Composite Bow,5,1,,0,49,,5,3,0x000A0848,7,2,34,1,4,0,11,{},{},{}
-1743,Krieger_Bow1,Glorious Hunter Bow,5,0,,0,100,,5,0,0x001A0848,7,2,34,4,80,1,11,{ bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bCritAtkRate,getrefine() * 2; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) bonus2 bSkillAtk,"AC_DOUBLE",20; },{},{}
+1743,Krieger_Bow1,Glorious Hunter Bow,5,0,,0,100,,5,0,0x001A0848,7,2,34,4,80,1,11,{ bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bCritAtkRate,getrefine() * 2; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) bonus2 bSkillAtk,"AC_DOUBLE",20; },{},{}
 1744,Bow_Of_Evil,Bow Of Evil,5,0,,0,170,,5,0,0x000A0848,7,2,34,4,1,0,11,{ bonus2 bSkillAtk,"AC_DOUBLE",25; bonus bDex,2; },{},{}
 1745,Falken_Blitz,Falken Blitz,5,0,,1000,100,,5,2,0x00080808,2,2,34,3,50,1,11,{ bonus2 bSkillAtk,"SN_SHARPSHOOTING",10; bonus2 bSkillAtk,"AC_DOUBLE",10; bonus2 bSkillAtk,"AC_CHARGEARROW",10; },{},{}
 // Arrows
@@ -986,11 +986,11 @@
 1820,Electric_Fist,Electric Fist,5,20,,650,80,,1,3,0x00008100,7,2,2,3,75,1,12,{ bonus3 bAutoSpell,"SA_LIGHTNINGLOADER",5,10; },{},{}
 1821,Seismic_Fist,Seismic Fist,5,20,,650,80,,1,3,0x00008100,7,2,2,3,75,1,12,{ bonus3 bAutoSpell,"SA_SEISMICWEAPON",5,10; },{},{}
 1822,Combo_Battle_Glove,Combo Battle Glove,5,20,,500,30,,1,4,0x00008100,7,2,2,3,60,1,12,{ bonus2 bSkillAtk,"MO_TRIPLEATTACK",15; bonus2 bSkillAtk,"MO_CHAINCOMBO",15; bonus2 bSkillAtk,"MO_COMBOFINISH",20; },{},{}
-1823,BF_Knuckle1,Valorous Battle Fist,5,20,,0,30,,1,0,0x00008100,7,2,2,3,80,1,12,{ bonus bStr,2; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus4 bAutoSpell,"CH_SOULCOLLECT",1,5,0; bonus bUnbreakableWeapon,0; },{},{}
+1823,BF_Knuckle1,Valorous Battle Fist,5,20,,0,30,,1,0,0x00008100,7,2,2,3,80,1,12,{ bonus bStr,2; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus4 bAutoSpell,"CH_SOULCOLLECT",1,5,0; bonus bUnbreakableWeapon,0; },{},{}
 1824,BF_Knuckle2,Brave Battle Fist,5,20,,0,30,,1,0,0x00008100,7,2,2,3,80,1,12,{ bonus bStr,2; bonus bInt,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bCastrate,"MO_EXTREMITYFIST",-25; autobonus "{ bonus2 bCastrate,\"MO_EXTREMITYFIST\",-100; }",50,6000,BF_WEAPON,"{ specialeffect2 EF_SUFFRAGIUM; }"; bonus bUnbreakableWeapon,0; },{},{}
 1825,Horn_Of_Hilthrion,Horn of Hillslion,5,20,,600,95,,1,3,0x00008000,2,2,2,3,60,1,12,{ bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,100; bonus4 bAutoSpellOnSkill,"CH_PALMSTRIKE","MO_INVESTIGATE",1,100; bonus3 bAutoSpell,"MO_CALLSPIRITS",5,100; },{},{}
-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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) { bonus2 bCastrate,"MO_EXTREMITYFIST",-100; bonus4 bautospellonskill,"MO_EXPLOSIONSPIRITS","CH_SOULCOLLECT",1,1000; } },{},{}
+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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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_All,40; },{},{}
 // Instruments
@@ -1016,11 +1016,11 @@
 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 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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,95; bonus2 bSkillAtk,"CG_ARROWVULCAN",20; bonus bUnbreakableWeapon,0; },{},{}
 1925,Cello,Cello,5,20,,700,110,,1,3,0x00080000,2,1,2,3,70,1,13,{ bonus bAgi,2; bonus bDex,3; bonus2 bAddSkillBlow,"BA_MUSICALSTRIKE",2; bonus2 bAddSkillBlow,"CG_ARROWVULCAN",3; },{},{}
 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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100; },{},{}
+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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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_All,40; },{},{}
 // Whips
@@ -1051,11 +1051,11 @@
 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 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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,95; bonus2 bSkillAtk,"CG_ARROWVULCAN",20; bonus bUnbreakableWeapon,0; },{},{}
 1979,Stem_Of_Nepenthes,Stem of Nepenthes,5,20,,1000,120,,2,2,0x00080000,2,0,2,4,60,1,14,{ bonus bInt,2; if( getrefine()>=9 ) { bonus3 bAddEffOnSkill,"DC_THROWARROW",Eff_Freeze,2000; } else { bonus3 bAddEffOnSkill,"DC_THROWARROW",Eff_Freeze,1000; } },{},{}
 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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100; },{},{}
+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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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_All,40; },{},{}
 // Additional 2-Handed Staffs
@@ -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 bIgnoreMDefClass,Class_Normal; bonus bCastrate,100; bonus bSPrecovRate,-100; },{},{ heal 0,-2000; }
+4365,B_Katrinn_Card,High Wizard Card,6,20,,10,,,,,,,,769,,,,,{ bonus2 bIgnoreMdefClassRate,Class_Normal,100; 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; },{},{}
@@ -5346,13 +5346,13 @@
 13033,Assasin_Dagger_,Assassin Dagger,5,20,,600,140,,1,1,0x00001000,7,2,2,4,36,1,1,{ bonus bMaxHPrate,20; bonus bMaxSPrate,15; bonus bAspdRate,2; bonus bAtkEle,Ele_Dark; },{},{}
 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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(Class==Job_Ninja||Class==Job_Rogue||Class==Job_Stalker) bonus bMatkRate,15; },{},{}
+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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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; bonus2 bAddRace,RC_Player,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,{},{},{}
 13041,N_Main_Gauche,Novice Main Gauche,5,0,,0,63,,1,3,0xFE9F7EEF,7,2,2,1,1,0,1,{},{},{}
-13042,Krieger_Dagger1,Glorious Gladius,5,20,,0,120,,1,0,0xFE9F7EEF,7,2,2,4,80,1,1,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus3 bAutoSpell,"PR_LEXDIVINA",1,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"RG_RAID","NPC_WIDEBLEEDING",1,250; },{},{}
+13042,Krieger_Dagger1,Glorious Gladius,5,20,,0,120,,1,0,0xFE9F7EEF,7,2,2,4,80,1,1,{ bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus3 bAutoSpell,"PR_LEXDIVINA",1,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"RG_RAID","NPC_WIDEBLEEDING",1,250; },{},{}
 13043,Fortune_Sword_I,Fortune Sword,5,0,,0,120,,1,0,0x028F5EEE,7,2,2,4,0,0,1,{ bonus bLuk,5; },{},{}
 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,{},{},{}
@@ -5368,9 +5368,9 @@
 13105,The_Garrison_,Garrison,5,48000,,500,70,,7,2,0x41000000,7,2,34,2,55,1,17,{ bonus bHit,-10; },{},{}
 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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; autobonus "{ bonus bAspdRate,100; }",10,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,0; },{},{}
+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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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 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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5){ bonus2 bAddRace,RC_DemiHuman,pow(getrefine()-4,2); bonus2 bAddRace,RC_Player,pow(getrefine()-4,2); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,"GS_RAPIDSHOWER","GS_GLITTERING",1,1000; bonus2 bSkillAtk,"GS_RAPIDSHOWER",getrefine()*2; } },{},{}
+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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5){ bonus2 bAddRace,RC_DemiHuman,pow(getrefine()-4,2); bonus2 bAddRace,RC_Player,pow(getrefine()-4,2); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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; },{},{}
 13113,P_Revolver2,Eden Revlover II,5,0,,0,60,,7,0,0x41000000,7,2,34,1,40,0,17,{ bonus bHit,-5; },{},{}
@@ -5396,15 +5396,15 @@
 13168,Thunder_P,Thunder P,5,76000,,700,80,,9,1,0x41000000,7,2,34,3,70,1,20,{ bonus bSplashRange,1; bonus bHit,-5; bonus bAspdRate,20; },{},{}
 13169,Thunder_P_,Thunder P,5,76000,,700,80,,9,2,0x41000000,7,2,34,3,70,1,20,{ bonus bSplashRange,1; bonus bHit,-5; bonus bAspdRate,20; },{},{}
 13170,Lever_Action_Rifle,Lever Action Rifle,5,20,,770,138,,9,2,0x41000000,7,2,34,3,70,1,18,{ bonus bHit,20; bonus bCritical,50; bonus bAspdRate,-5; },{},{}
-13171,BF_Rifle1,Soldier Rifle,5,0,,0,50,,9,0,0x41000000,7,2,34,3,80,1,18,{ bonus bDex,2; bonus bHit,10; bonus bCritical,10; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bCastrate,"GS_TRACKING",-25; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
-13172,BF_Gatling_Gun1,Soldier Gatling Gun,5,0,,0,80,,9,0,0x41000000,7,2,34,3,80,1,19,{ bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,120,1000; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0; },{},{}
-13173,BF_Shotgun1,Soldier Shotgun,5,0,,0,100,,9,0,0x41000000,7,2,34,3,80,1,20,{ bonus bDex,2; bonus bSplashRange,1; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,100,1000; }",30,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0; },{},{}
-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 bAddRace,RC_Player,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; autobonus "{ bonus bBaseAtk,300; bonus2 bHPLossRate,120,1000; }",30,9000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0; },{},{}
+13171,BF_Rifle1,Soldier Rifle,5,0,,0,50,,9,0,0x41000000,7,2,34,3,80,1,18,{ bonus bDex,2; bonus bHit,10; bonus bCritical,10; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bCastrate,"GS_TRACKING",-25; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+13172,BF_Gatling_Gun1,Soldier Gatling Gun,5,0,,0,80,,9,0,0x41000000,7,2,34,3,80,1,19,{ bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,120,1000; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0; },{},{}
+13173,BF_Shotgun1,Soldier Shotgun,5,0,,0,100,,9,0,0x41000000,7,2,34,3,80,1,20,{ bonus bDex,2; bonus bSplashRange,1; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,100,1000; }",30,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0; },{},{}
+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 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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 bAddRace,RC_Player,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bSplashRange,1; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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 bAddRace,RC_Player,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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; }"; } },{},{}
+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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bSplashRange,1; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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
 13200,Bullet,Bullet,10,1,,2,10,,,,0x41000000,7,2,32768,,1,,3,{},{},{}
 13201,Silver_Bullet,Silver Bullet,10,15,,2,15,,,,0x41000000,7,2,32768,,1,,3,{ bonus bAtkEle,Ele_Holy; },{},{}
@@ -5463,9 +5463,9 @@
 13302,Huuma_Giant_Wheel_,Huuma Giant Wheel Shuriken,5,40000,,2500,50,,1,4,0x02000000,7,2,34,4,42,1,22,{ bonus bUnbreakableWeapon,0; bonus2 bAddEff,Eff_Bleeding,100; },{},{}
 13303,Huuma_Blaze,Huuma Blaze Shuriken,5,78000,,1500,185,,1,0,0x02000000,7,2,34,4,55,1,22,{ bonus bUnbreakableWeapon,0; bonus bAtkEle,Ele_Fire; bonus bDex,-2; bonus3 bAutoSpell,"MG_FIREBALL",5,30; },{},{}
 13304,Huuma_Calm_Mind,Huuma Calm Mind,5,20,,1550,112,,1,2,0x02000000,7,2,34,3,70,1,22,{ bonus bUnbreakableWeapon,0; bonus2 bSkillAtk,"NJ_HUUMA",30; bonus bNoCastCancel,0; },{},{}
-13305,BF_Huuma_Shuriken1,Brave 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; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
+13305,BF_Huuma_Shuriken1,Brave 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; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; },{},{}
 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; bonus2 bAddRace,RC_Player,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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,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 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,"NJ_ISSEN","AL_HEAL",10,1000,1; bonus4 bAutoSpellOnSkill,"NJ_HUUMA","NPC_CRITICALWOUND",2,200; } },{},{}
+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 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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_All,80; },{},{}
 // More 1-Handed Swords
@@ -5479,13 +5479,13 @@
 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; bonus2 bAddRace,RC_Player,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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; 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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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; bonus2 bAddRace,RC_Player,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 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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>6) bonus bAspdRate,5; if(getrefine()>8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,"SM_BASH","NPC_CRITICALWOUND",2,200; } },{},{}
+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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>6) bonus bAspdRate,5; if(getrefine()>8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,"SM_BASH","NPC_CRITICALWOUND",2,200; } },{},{}
 13417,Krieger_Onehand_Sword2,Glorious Rapier,5,20,,0,130,,1,0,0x000654E3,7,2,2,4,80,1,2,{ bonus bInt,getrefine()-5; bonus bMatkRate,10; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus bUseSPrate,-10; if(getrefine()>8) bonus bInt,5; },{},{}
 13418,Krieger_Onehand_Sword3,Glorious Holy Avenger,5,20,,0,130,,1,0,0x000444A2,7,2,2,4,80,1,2,{ bonus bInt,getrefine()-5; bonus bMatkRate,10; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus bUseSPrate,-10; if(getrefine()>8) bonus4 bAutoSpellOnSkill,"PA_PRESSURE","PR_LEXDIVINA",1,1000; if(getrefine()>9) bonus bInt,5; },{},{}
 13419,Holy_Saber,Holy saber,5,20,,0,160,,1,0,0x000654E2,7,2,2,3,0,0,2,{},{},{}
@@ -6425,7 +6425,7 @@
 14608,Luxurious_Dinner_E,Manchu-Han Imperial Feast,2,20000,,1200,,,,,0xFFFFFFFF,7,2,,,,,,{ sc_start SC_INCALLSTATUS,3600000,6; },{},{}
 14609,Spoiled_Cuisine,Spoiled Cuisine,2,0,,0,,,,,0xFFFFFFFF,7,2,,,,,,{ percentheal 10,10; },{},{}
 // More Armors
-15000,Bone_Plate,Bone Plate,4,20,,1000,,7,,1,0x000654E2,2,2,16,,85,1,0,{ bonus bStr,1; bonus bMdef,3; bonus2 bIgnoreDefRate,RC_DemiHuman,10; bonus2 bIgnoreDefRate,RC_Player,10; bonus2 bIgnoreDefRate,RC_Brute,10; bonus3 bAutoSpellWhenHit,"NPC_WIDEBLEEDING",1,10; },{},{}
+15000,Bone_Plate,Bone Plate,4,20,,1000,,7,,1,0x000654E2,2,2,16,,85,1,0,{ bonus bStr,1; bonus bMdef,3; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus2 bIgnoreDefRaceRate,RC_Brute,10; bonus3 bAutoSpellWhenHit,"NPC_WIDEBLEEDING",1,10; },{},{}
 15001,Odin's_Blessing_I,Odin's Blessing,4,0,,0,,10,,0,0xFFFFFFFE,7,2,16,,0,0,0,{},{},{}
 // 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; },{},{}

+ 1 - 1
db/pre-re/skill_cast_db.txt

@@ -1572,7 +1572,7 @@
 //-- GN_CRAZYWEED_ATK
 2484,0,0,0,100,0,0
 //-- GN_DEMONIC_FIRE
-2485,3000:3500:4000:4500:5000,500,0,10000:0:16000:25000:0,8000:16000:24000:32000:40000,5000
+2485,3000:3500:4000:4500:5000,500,0,10000:12000:14000:16000:18000,8000:16000:24000:32000:40000,5000
 //-- GN_FIRE_EXPANSION
 2486,2000,500,0,0,0,0
 //-- GN_FIRE_EXPANSION_SMOKE_POWDER

+ 1 - 1
db/pre-re/skill_require_db.txt

@@ -599,7 +599,7 @@
 2204,0,0,50:60:70:80:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_JACKFROST#Jack Frost#
 2205,0,0,40:42:44:46:48,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_MARSHOFABYSS#Marsh of Abyss#
 2206,0,0,100:120:140:160:180,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_RECOGNIZEDSPELL#Recognized Spell#
-2207,0,0,32:34:36:38:40,0,0,0,99,0,0,none,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_SIENNAEXECRATE#Sienna Execrate#
+2207,0,0,32:34:36:38:40,0,0,0,99,0,0,none,0,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_SIENNAEXECRATE#Sienna Execrate#
 
 2209,0,0,50:60:70:80:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_STASIS#Stasis#
 2210,0,0,20:24:28:32:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_DRAINLIFE#Drain Life#

File diff suppressed because it is too large
+ 342 - 255
db/re/item_db.txt


+ 1 - 1
db/re/skill_cast_db.txt

@@ -1594,7 +1594,7 @@
 //-- GN_CRAZYWEED_ATK
 2484,0,0,0,100,0,0,-1
 //-- GN_DEMONIC_FIRE
-2485,3000:3500:4000:4500:5000,500,0,10000:0:16000:25000:0,8000:16000:24000:32000:40000,5000,-1
+2485,3000:3500:4000:4500:5000,500,0,10000:12000:14000:16000:18000,8000:16000:24000:32000:40000,5000,-1
 //-- GN_FIRE_EXPANSION
 2486,2000,500,0,0,0,0,-1
 //-- GN_FIRE_EXPANSION_SMOKE_POWDER

+ 1 - 1
db/re/skill_require_db.txt

@@ -599,7 +599,7 @@
 2204,0,0,50:60:70:80:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_JACKFROST#Jack Frost#
 2205,0,0,40:42:44:46:48,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_MARSHOFABYSS#Marsh of Abyss#
 2206,0,0,100:120:140:160:180,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_RECOGNIZEDSPELL#Recognized Spell#
-2207,0,0,32:34:36:38:40,0,0,0,99,0,0,none,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_SIENNAEXECRATE#Sienna Execrate#
+2207,0,0,32:34:36:38:40,0,0,0,99,0,0,none,0,0,716,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_SIENNAEXECRATE#Sienna Execrate#
 
 2209,0,0,50:60:70:80:90,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_STASIS#Stasis#
 2210,0,0,20:24:28:32:36,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//WL_DRAINLIFE#Drain Life#

+ 10 - 0
db/skill_copyable_db.txt

@@ -181,6 +181,8 @@ AB_JUDEX,2        // Judex
 AB_ADORAMUS,2     // Adoramus
 AB_HIGHNESSHEAL,2 // Highness Heal
 AB_DUPLELIGHT,2   // Duple Light
+AB_DUPLELIGHT_MELEE,2	// Dummy skill for Duple Light
+AB_DUPLELIGHT_MAGIC,2	// Dummy skill for Duple Light
 
 // Warlock
 WL_SOULEXPANSION,2  // Soul Expansion
@@ -192,6 +194,7 @@ WL_HELLINFERNO,2    // Hell Inferno
 WL_COMET,2          // Comet
 WL_CHAINLIGHTNING,2 // Chain Lightning
 WL_EARTHSTRAIN,2    // Earth Strain
+WL_CHAINLIGHTNING_ATK,2	// Dummy skill for Chain Lightning
 
 // Ranger
 RA_ARROWSTORM,2   // Arrow Storm
@@ -211,6 +214,8 @@ LG_SHIELDSPELL,2 // Shield Spell
 LG_EXEEDBREAK,2  // Exceed Break
 LG_MOONSLASHER,2 // Moon Slasher
 LG_EARTHDRIVE,2  // Earth Drive
+LG_OVERBRAND_BRANDISH,2	// Dummy skill for Over Brand
+LG_OVERBRAND_PLUSATK,2	// Dummy skill for Over Brand
 
 // Sura
 SR_DRAGONCOMBO,2  // Dragon Combo
@@ -229,6 +234,9 @@ SR_RIDEINLIGHTNING,2    // Riding Lightning
 WM_METALICSOUND,2     // Metallic Sound
 WM_REVERBERATION,2    // Reverberation
 WM_SEVERE_RAINSTORM,2 // Severe Rainstorm
+WM_SEVERE_RAINSTORM_MELEE,2	// Dummy skill for Severe Rainstorm
+WM_REVERBERATION_MELEE,2	// Dummy skill for Reverberation
+WM_REVERBERATION_MAGIC,2	// Dummy skill for Reverberation
 
 // Sorcerer
 SO_FIREWALK,2      // Fire Walk
@@ -247,3 +255,5 @@ GN_SPORE_EXPLOSION,2 // Spore Explosion
 GN_WALLOFTHORN,2     // Wall of Thorns
 GN_CRAZYWEED,2       // Crazy Weed
 GN_HELLS_PLANT,2     // Hell's Plant
+GN_CRAZYWEED_ATK,2	// Dummy skill for Crazy Weed
+GN_HELLS_PLANT_ATK,2	//Dummy skil for Hell's Plant

+ 3 - 3
doc/atcommands.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= rAthena Dev Team
 //===== Last Updated: ========================================
-//= 20140126
+//= 20140211
 //===== Description: =========================================
 //= List of available atcommands and their functions.
 //============================================================
@@ -923,10 +923,10 @@ Summons the specified amount of spirit spheres around you.
 
 ---------------------------------------
 
-@mount
+@mount {<dragon color 1-5>}
 @mount2
 
-Toggles mounting/unmounting a peco (@mount) or cash mount (@mount2).
+Toggles mounting/unmounting a job mount (@mount) or cash mount (@mount2).
 
 ---------------------------------------
 

+ 57 - 20
doc/script_commands.txt

@@ -3,7 +3,7 @@
 //===== By: ==================================================
 //= rAthena Dev Team
 //===== Last Updated: ========================================
-//= 20140208
+//= 20140218
 //===== Description: =========================================
 //= A reference manual for the rAthena scripting language.
 //= Commands are sorted depending on their functionality.
@@ -945,12 +945,19 @@ This special label triggers when a player kills a monster. The variable
 
 OnPCLoadMapEvent:
 
-This special label will trigger once a player steps in a map marked with the 
-'loadevent' mapflag and attach its RID. The fact that this label requires a 
+This special label triggers when a player steps in a map marked with the 
+'loadevent' mapflag and attaches its RID. The fact that this label requires a 
 mapflag for it to work is because, otherwise, it'd be server-wide and trigger
 every time a player would change maps. Imagine the server load with 1,000 players
 (oh the pain...)
 
+OnPCStatCalcEvent:
+
+This special label triggers when a player's stats are recalculated, such as when
+changing stats, equipment, or maps, as well as when logging in, leveling up, and
+mounting a job mount. This can be used to grant additional item bonuses to certain
+player groups, for instance.
+
 Only the special labels which are not associated with any script command are 
 listed here. There are other kinds of labels which may be triggered in a similar 
 manner, but they are described with their associated commands.
@@ -2771,7 +2778,7 @@ the specified name will be located. If type is 3, the search will locate the
 current pet of the character who's name is given in the search string, it will 
 NOT locate a pet by name.
 
-What a mess. Example, a working and tested one now:
+Example:
 
     prontera,164,301,3%TAB%script%TAB%Meh%TAB%730,{
         mes "My name is Meh. I'm here so that Nyah can find me.";
@@ -2781,36 +2788,34 @@ What a mess. Example, a working and tested one now:
     prontera,164,299,3%TAB%script%TAB%Nyah%TAB%730,{
         mes "My name is Nyah.";
         mes "I will now search for Meh all across the world!";
-        if (getmapxy(@mapname$,@mapx,@mapy,1,"Meh")!=0) goto Notfound;
+        if (getmapxy(@mapname$,@mapx,@mapy,1,"Meh")!=0) {
+                mes "I can't seem to find Meh anywhere!";
+                close;
+        }
         mes "And I found him on map "+@mapname$+" at X:"+@mapx+" Y:"+@mapy+" !";
         close;
-    Notfound:
-        mes "I can't seem to find Meh anywhere!";
-        close;
    }
-   
+
 Notice that NPC objects disabled with 'disablenpc' will still be located.
 
 ---------------------------------------
 
 *getgmlevel()
 
-This function will return the (GM) level of player group the account to which the 
-invoking character belongs. If this is somehow executed from a console command,
+This function will return the (GM) level associated with the player group to which
+the invoking character belongs. If this is somehow executed from a console command,
 99 will be returned, and 0 will be returned if the account has no GM level.
 
 This allows you to make NPC's only accessible for certain GM levels, or behave 
 specially when talked to by GMs.
 
    if (getgmlevel()) mes "What is your command, your godhood?";
-   if (getgmlevel()) goto Wherever;
 
 ---------------------------------------
 
 *getgroupid()
 
-This function will return the id of player group the account to which the 
-invoking player belongs.
+This function will return the group id to which the invoking player belongs.
 
 ---------------------------------------
 
@@ -2920,6 +2925,38 @@ Example:
 
 ---------------------------------------
 
+*getguildmember <guild id>{,<type>};
+
+This command will find all members of a specified guild and returns their names 
+(or character id or account id depending on the value of "type") into an array
+of temporary global variables.
+
+Upon executing this,
+
+$@guildmembername$[] is a global temporary string array which contains all the 
+                     names of these guild members.
+                     (only set when type is 0 or not specified)
+
+$@guildmembercid[]   is a global temporary number array which contains the 
+                     character id of these guild members.
+                     (only set when type is 1)
+
+$@guildmemberaid[]   is a global temporary number array which contains the 
+                     account id of these guild members.
+                     (only set when type is 2)
+
+$@guildmembercount   is the number of guild members that were found.
+
+The guild members will be found regardless of whether they are online or offline.
+Note that the names come in no particular order.
+
+Be sure to use $@guildmembercount to go through this array, and not 
+'getarraysize', because it is not cleared between runs of 'getguildmember'.
+
+For usage examples, see 'getpartymember'.
+
+---------------------------------------
+
 *getguildmaster(<guild id>)
 
 This function return the name of the master of the guild which has the specified 
@@ -4656,14 +4693,14 @@ end silently.
 
 ---------------------------------------
 
-*successrefitem <equipment slot>;
+*successrefitem <equipment slot>{,<count>};
 
 This command will refine an item in the specified equipment slot of the invoking 
-character by +1. For a list of equipment slots see 'getequipid'. This command 
-will not only add the +1, but also display a 'refine success' effect on the 
-character and put appropriate messages into their chat window. It will also give 
-the character fame points if a weapon reached +10 this way, even though these 
-will only take effect for blacksmith who will later forge a weapon.
+character by +1, or a count if given. For a list of equipment slots see 'getequipid'.
+This command will also display a 'refine success' effect on the character and put
+appropriate messages into their chat window. It will also give the character fame
+points if a weapon reached +10 this way, even though these will only take effect for
+blacksmith who will later forge a weapon.
 
 ---------------------------------------
 

+ 434 - 0
doc/source_doc.txt

@@ -0,0 +1,434 @@
+//===== rAthena Documentation ================================
+//= Source Documentation
+//===== By: ==================================================
+//= rAthena Dev Team
+//===== Last Updated: ========================================
+//= 20140218
+//===== Description: =========================================
+//= Explanation of source behaviours and structures.
+//============================================================
+
+This file provides basic information about rAthena's source code.
+The format of this file is as follows:
+	1. Glossary
+	2. Intro & Emulation
+	3. Interface and Communications
+	4. Databases and Independence
+	5. Package and Module Purposes
+	6. Nomenclature
+	7. Variable Notes
+	8. Building
+	9. Atcommands & Script Commands
+
+===============
+| 1. Glossary |
+===============
+The following terms will be frequently used throughout this file, so it is
+important to have a thorough understanding of what they are to avoid confusion.
+
+  Term          Description
+  ----          -----------  
+  serv          a program/daemon that runs indefinitely offering a service
+  host          a machine that has one or more servs running
+  command       a request of an action on the server or client
+                (atcommand, script_command, packet_request)
+  interface     a class/module that offers a list of commands
+
+========================
+| 2. Intro & Emulation |
+========================
+rAthena is an emulation of Ragnarok Online, which runs on software known as AEGIS.
+AEGIS is separated into 4 servs:
+
+  Serv       Description
+  ----       -----------
+  account    handles player account information and logins.
+  char       handles character data (persistent information).
+  inter      handles broadcasting across map-serv. [merged into rAthena's char-serv]
+  map        handles all player runtime actions.
+
+These servs are an aggregation of each other:
+  login-serv  =>  1 - * char-serv, 1 - * map-serv
+
+In this case, * is 30. This means that 1 login-serv is able to manage up to
+30 char-serv, which itself can manage up to 30 map-serv. Note that due to these
+aggregations, the login-serv and map-serv never directly communicate with each other.
+
+===================================
+| 3. Interface and Communications |
+===================================
+We have 3 types of communication:
+
+  1. serv <=> serv  (AH,HA,HZ,ZH)
+     This type of server-to-server communication is referred to as "inter-serv" communication.
+
+  2. serv <=> client  (AC,CA,HC,CH,ZC,CZ)
+     This is what our servs send or receive to a player client.
+	
+  3. serv <=> console/terminal
+     This is the only kind of communication which doesn't use packets (currently).
+     It's only done in localhost from console to servs (a way to input args in servs runtime).
+
+The packet notation and structure are well defined in 'doc/packet_struct_notation.txt'.
+
+Note that scripts and atcommands are another kind of interface, as they allow
+users to input data into the serv.
+
+=================================
+| 4. Databases and Independence |
+=================================
+Each server can theoretically be set in a different host with its own databases
+associated (although this is currently broken due to years without documentation).
+In other words, you shouldn't expect to find char-serv data on a map-serv host
+and access it directly, but rather ask the char-serv to fetch it.
+
+The list below details the association of database tables with the servs.
+For real table names, see 'conf/inter_athena.conf'.
+
+  ==============
+  | Login-serv |
+  ==============
+
+  Table                 Contents
+  -----                 --------
+  login_db              all account-related information
+  reg_db                permanent account variables (ex. #CASHPOINTS)
+
+  =============
+  | Char-serv |
+  =============
+
+  Table                 Contents
+  -----                 --------
+  char_db               all char-related information
+  hotkey_db             hotkeys set for each character
+  scdata_db             character status at disconnection
+  cart_db               list of items in each character's cart
+  inventory_db          list of items in each character's inventory
+  charlog_db            char-serv logs
+  storage_db            list of items in each character's storage (Kafra)
+  reg_db                permanent character variables (ex. ADVJOB)
+  skill_db              character learned skill database
+  interlog_db           inter-serv logs
+  memo_db               character Memo_point database 
+  guild_db              guild record (name, master, lv, exp, emblem, etc.)
+  guild_alliance_db     guild relations database (allies, enemies)
+  guild_castle_db       guild owned castle database
+  guild_expulsion_db    guild expulsion logs
+  guild_member_db       guild current member titles and positions
+  guild_skill_db        guild learned skills database
+  guild_position_db     guild positions configuration (names, taxes, rights)
+  guild_storage_db      guild item storage
+  party_db              party record (name, leader, shared_exp, shared_item)
+  pet_db                saved pet objects database
+  friend_db             character friends database
+  mail_db               mail database
+  auction_db            auction database
+  quest_db              character quest realisation database
+  homunculus_db         saved homunculus objects database
+  skill_homunculus_db   homunculus learned skills database
+  mercenary_db          saved mercenary objects database (HP, SP, level, etc.)
+  mercenary_owner_db    character proprietary link to mercenary object save and use stats
+  elemental_db          saved Elemental objects database (HP, SP, FLEE, etc.)
+  ragsrvinfo_db         map-serv rate record (similar to 'conf/battle/drop.conf', possibly a leftover?)
+  skillcooldown_db      character skill cooldowns at disconnection
+  bonus_script_db       character bonus_script at disconnection
+
+  ============
+  | Map-serv |
+  ============
+
+  Table                 Contents
+  -----                 --------
+  mapreg_db             permanent map-serv global variables (ex. $agit_result_timer)
+  buyingstore_db        live buyers database (map_pos, aid, shop title, etc.)
+  buyingstore_items_db  items currently being purchased by live buyers
+  vending_db            live vendors database (map_pos, aid, shop title, etc.)
+  vending_items_db      items currently being sold by live vendors
+
+  The tables below are optional alternatives to TXT databases located in 'db/*.txt'.
+
+  item_db               item database (Pre-Renewal)
+  item_db_re            item database (Renewal)
+  item_db2              item database import (Pre-Renewal)
+  item_db2_re           item database import (Renewal)
+  item_cash_db          cash shop database
+  item_cash_db2         cash shop database (import)
+  mob_db                monster database (Pre-Renewal)
+  mob_db_re             monster database (Renewal)
+  mob_db2               monster database import (Pre-Renewal)
+  mob_db2_re            monster database import (Renewal)
+  mob_skill_db          monster skill database (Pre-Renewal)
+  mob_skill_db_re       monster skill database (Renewal)
+  mob_skill_db2         monster skill database import (Pre-Renewal)
+  mob_skill_db2_re      monster skill database import (Renewal)
+
+==================================
+| 5. Package and Module Purposes |
+==================================
+The following list describes each module and its purpose.
+
+  ============
+  | 3rdparty |
+  ============
+  The '3rdparty/' folder contains libraries used by the project but are not maintained by us.
+
+  ==========
+  | Common |
+  ==========
+  The 'src/common' folder contains all the modules which are used by more then 1 serv.
+
+  Module         Description
+  ------         -----------
+  atomic         adapter to atomic operations for Windows API
+  cbasetypes     adapter to OS and arch specification (function name, bit representation)
+  cli            console Line Interface handling (get arguments from terminal at beginning and runtime) 
+  conf           facade of libconfig api
+  core           MAIN program entry (initialization of each serv starts here)
+  db             database module (create, parse, and destroy databases)
+  des            Data Encryption Standard algorithm modified for rAthena
+  ers            Entry Reusage System to help memory allocation
+  evdp           handles events
+  grfio          handles *.grf files (searches for files in them and decodes them)
+  malloc         handles runtime memory allocation (so that memory manager could check for leaks)
+  mapindex       handles the processing and reading of the mapcache.dat
+  md5calc        offers md5 encryption
+  mempool        handles shared memory pool for thread support
+  mmo.h          common structures and defines across serv
+  msg_conf       handles msg in src from configuration
+  mutex          handles Mutual exclusion (Mutex) for thread support
+  netbuffer      iobuffer initialisation for thread support
+  network        updated socket module, with ipv6 and thread support
+  nullpo         checks and dumps info for debug mode
+  raconf         processes the conf files
+  random         generation of random numbers
+  showmsg        display messages in console with a certain color
+  socket         handling of sockets (listening, close, open, etc.)
+  spinlock       handles synchronization (waiting loop) for thread support
+  sql.c          MySQL database proxy
+  strlib.c       string handling
+  thread.c       thread creation and destruction
+  timer.c        timer-related functions
+  utils.c        misc functions
+  winapi.h       Windows redefine and include
+
+  ==============
+  | Login-serv |
+  ==============
+
+  Module         Description
+  ------         -----------
+  account        persistence for account data
+  ipban          offers IP banishment
+  login          main module of login-serv
+  loginlog       records all operations into log for login-serv
+
+  =============
+  | Char-serv |
+  =============
+  The char-serv is responsible for persistence (save/load data permanently) and
+  also serves as a controller that handles all associated map-servs. Further, it
+  is responsible for ensuring that there are no duplicate party names among the
+  map-servs (which could create conflicts if a party transfers map-servs).
+
+  Module             Description
+  ------             -----------
+  char               currently holds all the char-serv (EA) process
+  inter              main entry to inter-serv; delegates packet handling to submodules
+  -- int_auction     handles auction request and saving
+  -- int_elemental   handles elemental data (BL_ELE => Sorcerer mob)
+  -- int_guild       handles guild data (creation, destruction, add member, etc.)
+  -- int_homun       handles homunculus data (BL_HOM => Alchemist mob)
+  -- int_mail        handles mail data
+  -- int_mercenary   handles mercenary data (BL_MER => All class mob)
+  -- int_party       handles party data (creation, destruction, add member, etc.)
+  -- int_pet         handles pet data (BL_PET => All class mob)
+  -- int_quest       handles quest data
+  -- int_storage     handles storage data (save storage, load storage, etc.)
+
+  ============
+  | Map-serv |
+  ============
+
+  Module         Description
+  ------         -----------
+  atcommand      handles GM commands (ex. @who)
+  battle         handles damage calculation where target is enemy and battle configuration settings
+  battleground   functions for Battleground system (create, destroy, messaging, join, etc.)
+  buyingstore    functions for player Buying Stores (create, search, sell)
+  cashshop       functions to set up the server cashshop (from cashshop_db), and contains function to buy items from cashshop
+  channel        functions for the channel system (create, delete, join/auto-join, leave, broadcast, alter options)
+  chat           functions for the chatroom system (create, delete, trigger chatroom_event, change owner, etc.)
+  chrif          char-serv <=> map-serv connections interface (send and receive packets to char-serv)
+  clif           client <=> map-serv connections interface (send and receive packets to/from client)
+  date           functions for time
+  duel           functions for the duel system
+  elemental      functions for Sorcerer Elementals processing (create, delete, etc.)
+  guild          functions for the guild system
+  homunculus     functions for Alchemist Homunculi processing (create, delete, get stats, death, etc.)
+  instance       functions for instance system
+  intif          map-serv <=> inter-serv interface (meant to communicate with 'char/inter.c' or its submodules)
+  itemdb         functions for the item database
+  log            functions for server log system
+  mail           functions for mail system
+  map            map-serv main module, and a representation of a map object
+                   adds or removes other objects into map (blocklist) and provides iterators (ex. map_foreachpc)
+  mapreg         functions to save or read variables in mapreg_db (global variables for all map-serv)
+  mercenary      functions for Mercenary system (create, search, get stats, dead)
+  mob            functions for mob data, structures, and mob routines
+  npc            functions for NPC data (create, delete, calling NPCs)
+  npc_chat       functions for PCRE and NPC interaction
+  party          functions for the party system (create, join, delete, alter options, etc.)
+  path           functions for path finding (check_distance, search path unit will use)
+  pc             functions for player processing (loot/drop/delete items, player bonus handling, player dead, etc.)
+  pc_groups      functions for players groups system (manage player permissions and atcommand access)
+  pet            functions for the pet system (similar to mercenary, homunculus, player, etc.)
+  quest          functions for the quest log system (add, complete, remove, etc.) 
+  script         handles script language logic (used in NPC scripts), script commands, and mapflags
+  searchstore    functions for the Vendor Shop Search feature
+  skill          functions for skills (skill_casttime calculation, skill behaviours, skill_chk_cast, requirement checks, 'db/skill_*.txt' processing)
+  status         functions for statuses on a bl (add, remove, calculation of effects as a temporary bonus)
+                   status is a struct available by most units as common attributes (bl_type only attribute are dealt in bl specific files, like 'pc.c' or 'mob.c')
+  storage        functions for the storage system: Kafra, cart, guild, inventory (add, transfer, remove items between containers)
+                   also ensures container mutex (e.g. guild_storage) and preparation for save requests
+  trade          functions to perform a trade (request, accept, add items/Zeny, checks, complete trade)
+  unit           functions for controlling player/mob/NPC actions (walk, follow, skill use)
+  vending        functions for Merchant Vending (create, purchase)
+
+===================
+| 6. Nomenclature |
+===================
+The following are standard naming conventions used by rAthena.
+
+  Type        Prefix         Example
+  ----        ------         -------
+  function    module_        pc_addspiritball -> located in pc.c file
+  structure   s_             s_quest_db
+  enum        e_             e_race
+  status      SC_            SC_INTOABYSS
+  skill       classmid_      AL_TELEPORT -> AL = Acolyte
+  bonus       SP_            SP_ATK_RATE
+
+NOTES:
+  - If a status name conflicts with a skill name, another '_' is added (e.g. SC__WEAKNESS).
+  - All constants should be written in all caps.
+  - battle_config vs. #define macro:
+        battle_config can be changed during runtime (ex. @setbattleflag), but this requires
+        more processing and could render the server less stable than a macro would.
+
+=====================
+| 7. Variable Notes |
+=====================
+The following variables are commonly used in the source code.
+
+  Variable   Full Name            Description
+  --------   ---------            -----------
+  sd         session data         represents the session of a client into a serv (login, char, or map)
+  tsd        target sd            same as sd, but for a target
+  pl_sd                           usually in an iteration loop, the current sd of index
+  it_sd                           a variant of pl_sd (for iter_sd)
+  fd         file descriptor      a link to an I/O like a socket or file
+  md         mob data             represents monster information; also used to represent mercenary information
+  hd         homunculus data      represents homunculus information
+  nd         NPC data             represents NPC information
+  ed         elemental data       represents elemental information
+  pd         pet data             represents pet information
+  sc         status change        a structure containing all the possible status applied to a character
+  tsc        target sc            same as sc, but for a target
+  sce        status change entry  represents data of a specific inflicted status
+  bl         blocklist            common data of one object (a skill, pet, player, etc); also represents a 2-way chain-link
+  tbl        target bl            same as bl, but for a target
+  st         script stack         the stack of an NPC
+  aid        account id           a player account ID
+  gid        game id              the general unique ID of a Unit, which is the aid for players
+                                  (since a single character per account can be connected at one time)
+  cid        character id         a player character ID
+  rid        character id         a variant of cid
+  su         skill unit           a skill with a unit that remains on the ground
+
+===============
+| 8. Building |
+===============
+When adding a new src file or library (new.c and its header, new.h), you'll also
+need to update the following files to fully integrate it into the project so that
+users can compile it.
+
+There are 3 ways to compile the project:
+
+> configure + makefile (requires POSIX environment + C compiler)
+  This flow is mainly used by Linux users, but can be done in any POSIX environment (ex. Windows + Cygwin).
+  - Configure.in: Template file to generate the configure script by autoconf.
+  - Makefile.in: Template makefile to generate the real makefile according to configure. Each subfolder needs its own makefile.
+  - Makefile: File filled with rules for gcc to compile folder.
+  The sequence is as follows:
+	1) configure.in => configure by autoconf ('autoconf configure.in > configure')
+	2) configure    => Makefile by Makefile.in
+	3) Makefile     => binary by 'make all' or alternative
+
+> cmake (requires C compiler + cmake)
+  - CmakeList: Comparable to Makefile, but in a more cross-OS way.
+  The sequence is as follows:
+	1) Define which toolchain to use, acting like a configure ('cmake -G "Unix Makefiles"' or 'cmake -G "Visual Studio 10"')
+	2) Enter the build folder where the Makefiles are generated and launch 'make install' to produce binaries from them
+
+> sln (requires Visual Studio)
+  - *.sln: Solution project for Visual Studio (Windows).
+
+See http://rathena.org/wiki/Compiling for more detailed compilation instructions.
+
+===================================
+| 9. Atcommands & Script Commands |
+===================================
+To implement an atcommand or script command, you must define a function and
+add its reference to the appropriate array. See the files in 'src/custom/'
+for examples.
+
+Atcommands
+----------
+	ACMD_FUNC(name)
+	{
+		<code>
+	}
+
+	ACMD_DEF(name)  - OR -  ACMD_DEFR(name,restriction)
+	  - OR -
+	ACMD_DEF2("alias",name)  - OR -  ACMD_DEF2R("alias",name,restriction)
+
+  Restriction    Description
+  -----------    -----------
+      1          restrict usage in console
+      2          restrict usage in script_command
+
+Script Commands
+---------------
+	BUILDIN_FUNC(name)
+	{
+		<code>
+	}
+
+	BUILDIN_DEF(name,"arguments")
+	  - OR -
+	BUILDIN_DEF2(name,"alias","arguments")
+
+  Argument    Description
+  --------    -----------
+     i        integer
+     s        string
+     v        variable
+     l        label
+     r        reference (of a variable)
+     ?        optional parameter (one)
+     *        optional parameter (unknown count)
+              null (no arguments)
+
+Useful functions:
+  script_hasdata(st,i);       // Returns if the stack contains data at the target index
+  script_getdata(st,i);       // Returns the script_data at the target index (data is a glob type)
+  script_getnum(st,val);      // Returns the int at the target index
+  script_getstr(st,val);      // Returns the string at the target index
+  script_getref(st,val);      // Returns the reference of a variable at the target index (useful for arrays, ex. 'checkweight2')
+  script_getfuncname(st);     // Returns the current function name (useful for function variants, ex. 'sc_start')
+  script_pushint(st,val);     // Pushes an int into the stack
+  script_pushstr(st,val);     // Pushes a string into the stack
+  script_isstring(st,i);      // Returns if the data at at the target index is a string
+  script_isint(st,i);         // Returns if the data at at the target index is an int

+ 5 - 0
npc/re/jobs/repair.txt

@@ -14,6 +14,8 @@
 //= 1.1 Added GM management function. [Euphy]
 //============================================================ 
 
+// Job Variables
+//============================================================
 /*
 rAthena -> official job variable conversion
 -------------------------------------------
@@ -50,6 +52,7 @@ Wanderer: job_wan
 
 Gunslinger: GUNS_Q -> hg_gun
 Ninja: NINJ_Q -> hg_nin
+Kagerou/Oboro: job_kagero
 Taekwon: TK_Q -> job_taekwon
 Star Gladiator: STGL_Q -> job_star
 Soul Linker: SOUL_Q -> job_linker
@@ -57,6 +60,8 @@ Super Novice: SUPNOV_Q -> job_super
 Expanded Super Novice: EXSUPNOV_Q -> job_super2
 */
 
+// Main NPCs :: job_repair
+//============================================================
 prt_in,38,104,4	script	Valerie	811,{
 	if (checkweight(1201,1) == 0) {
 		mes "I think you have too many items. Let's try it again after you take some out.";

+ 515 - 0
npc/re/merchants/card_exchange.txt

@@ -0,0 +1,515 @@
+//===== rAthena Script =======================================
+//= Card Exchanger
+//===== By: ==================================================
+//= Euphy
+//===== Current Version: =====================================
+//= 1.0
+//===== Compatible With: =====================================
+//= rAthena Project
+//===== Description: =========================================
+//= [Official Conversion]
+//= Exchange any card for a Card Coin, and 5 Card Coins for
+//= a random card in exchange.
+//=
+//= NOTE: This NPC is only available in pRO and twRO.
+//===== Additional Comments: =================================
+//= 1.0 First version. [Euphy]
+//============================================================
+
+// Main NPC :: Card_Change_tw
+//============================================================
+comodo,148,306,4	script	Card Vendor Machine#pa08	562,{
+	if (checkweight(1201,1) == 0) {
+		mes "You have too many items, please reduce it and come back later!";
+		close;
+	}
+	if (MaxWeight - Weight < 1000) {
+		mes "You are overweight now, please reduce it and come back later!";
+		close;
+	}
+	mes "[Terminator RX1]";
+	mes "Text Explanation Begins:";
+	mes "Press 1 for Cancel,";
+	mes "Press 2 for Explanation,";
+	mes "Press 3 for Coin Exchange,";
+	mes "Press 4 for Card Exchange.";
+	next;
+	switch(select("1.Cancel:2.Explanation:3.Change Card into Coin:4.Change Coin into Card:^ffffff5.Start Security System^000000")) {
+	case 1:
+		mes "[Terminator RX1]";
+		mes "You are welcome!";
+		close;
+	case 2:
+		mes "[Terminator RX1]";
+		mes "No.3, when you choose Coin Exchange, system will collect ONE card from your inventory randomly to exchange into ONE Coin.";
+		next;
+		mes "[Terminator RX1]";
+		mes "No.4, when you choose Card Excahnge, system will collect FIVE coin from your inventory to exchange into ONE Card randomly.";
+		next;
+		mes "[Terminator RX1]";
+		mes "You are welcome!";
+		close;
+	case 3:
+		specialeffect2 EF_COIN;
+		specialeffect2 EF_LOUD;
+		progressbar "0xffff00",3;
+		callsub L_Exchange,	// yes, this list is hardcoded in the official script...
+			4001, 4002, 4003, 4004, 4005, 4006, 4008, 4009, 4010, 4011,
+			4012, 4013, 4014, 4015, 4016, 4017, 4018, 4019, 4020, 4021,
+			4022, 4023, 4024, 4025, 4026, 4028, 4029, 4031, 4032, 4033,
+			4034, 4036, 4037, 4038, 4039, 4041, 4042, 4045, 4046, 4048,
+			4016, 4056, 4057, 4059, 4061, 4062, 4067, 4068, 4070, 4071,
+			4072, 4073, 4075, 4076, 4078, 4080, 4081, 4082, 4084, 4087,
+			4090, 4093, 4094, 4095, 4096, 4101, 4102, 4103, 4104, 4105,
+			4106, 4107, 4108, 4109, 4110, 4112, 4113, 4114, 4116, 4117,
+			4118, 4119, 4122, 4124, 4125, 4127, 4138, 4149, 4150, 4151,
+			4152, 4153, 4154, 4155, 4156, 4157, 4158, 4159, 4161, 4162,
+			4164, 4165, 4166, 4167, 4170, 4171, 4172, 4173, 4175, 4176,
+			4177, 4178, 4179, 4180, 4181, 4182, 4183, 4184, 4185, 4186,
+			4187, 4188, 4189, 4190, 4191, 4192, 4193, 4194, 4195, 4196,
+			4197, 4199, 4200, 4201, 4202, 4204, 4206, 4208, 4211, 4212,
+			4213, 4214, 4215, 4217, 4219, 4220, 4221, 4222, 4223, 4224,
+			4225, 4226, 4227, 4228, 4231, 4232, 4233, 4234, 4235, 4239,
+			4240, 4242, 4244, 4246, 4247, 4248, 4249, 4251, 4252, 4253,
+			4257, 4258, 4259, 4260, 4261, 4265, 4266, 4267, 4268, 4270,
+			4271, 4272, 4273, 4274, 4275, 4278, 4280, 4282, 4286, 4287,
+			4289, 4291, 4292, 4294, 4295, 4296, 4297, 4298, 4299, 4301,
+			4304, 4306, 4307, 4308, 4309, 4310, 4311, 4312, 4313, 4315,
+			4316, 4319, 4321, 4322, 4323, 4325, 4326, 4328, 4329, 4331,
+			4332, 4333, 4335, 4338, 4339, 4341, 4343, 4344, 4345, 4346,
+			4347, 4348, 4350, 4351, 4353, 4355, 4356, 4358, 4369, 4370,
+			4371, 4377, 4380, 4382, 4383, 4385, 4387, 4388, 4389, 4390,
+			4391, 4393, 4400, 4401, 4404, 4405, 4406, 4409, 4410, 4414,
+			4417, 4418, 4420, 4421, 4422, 4423, 4432, 4434, 4435, 4436,
+			4437, 4438, 4439, 4442, 4443, 4444, 4445, 4447, 4448, 4449,
+			4450, 4452;
+		mes "[Terminator RX1]";
+		mes "Card searching has finished!";
+		next;
+		mes "[Terminator RX1]";
+		mes "Thank you for coming!";
+		close;
+	case 4:
+		specialeffect2 EF_COIN;
+		specialeffect2 EF_LOUD;
+		progressbar "0xffff00",3;
+		if (countitem(6379) < 5) {
+			mes "[Terminator RX1]";
+			mes "You do not have enough coins.";
+			close;
+		}
+		delitem 6379,5; //Card_Coin
+		.@r = rand(1,34261);
+		     if (.@r <= 2001)  getitem 4001,1; //Poring_Card
+		else if (.@r <= 4002)  getitem 4002,1; //Fabre_Card
+		else if (.@r <= 4053)  getitem 4003,1; //Pupa_Card
+		else if (.@r <= 6054)  getitem 4004,1; //Drops_Card
+		else if (.@r <= 6105)  getitem 4005,1; //Poring__Card
+		else if (.@r <= 6156)  getitem 4006,1; //Lunatic_Card
+		else if (.@r <= 8157)  getitem 4008,1; //Picky_Card
+		else if (.@r <= 10158) getitem 4009,1; //Chonchon_Card
+		else if (.@r <= 10209) getitem 4010,1; //Wilow_Card
+		else if (.@r <= 10260) getitem 4011,1; //Picky__Card
+		else if (.@r <= 10311) getitem 4012,1; //Thief_Bug_Egg_Card
+		else if (.@r <= 10362) getitem 4013,1; //Andre_Egg_Card
+		else if (.@r <= 12363) getitem 4014,1; //Roda_Frog_Card
+		else if (.@r <= 14364) getitem 4015,1; //Condor_Card
+		else if (.@r <= 14415) getitem 4016,1; //Thief_Bug_Card
+		else if (.@r <= 14466) getitem 4017,1; //Savage_Babe_Card
+		else if (.@r <= 14517) getitem 4018,1; //Andre_Larva_Card
+		else if (.@r <= 14568) getitem 4019,1; //Hornet_Card
+		else if (.@r <= 16569) getitem 4020,1; //Farmiliar_Card
+		else if (.@r <= 16620) getitem 4021,1; //Rocker_Card
+		else if (.@r <= 18621) getitem 4022,1; //Spore_Card
+		else if (.@r <= 18672) getitem 4023,1; //Desert_Wolf_Babe_Card
+		else if (.@r <= 18723) getitem 4024,1; //Plankton_Card
+		else if (.@r <= 18774) getitem 4025,1; //Skeleton_Card
+		else if (.@r <= 18825) getitem 4026,1; //Thief_Bug_Female_Card
+		else if (.@r <= 18876) getitem 4028,1; //Tarou_Card
+		else if (.@r <= 20877) getitem 4029,1; //Wolf_Card
+		else if (.@r <= 20928) getitem 4031,1; //Pecopeco_Card
+		else if (.@r <= 20979) getitem 4032,1; //Ambernite_Card
+		else if (.@r <= 21030) getitem 4033,1; //Poporing_Card
+		else if (.@r <= 21081) getitem 4034,1; //Worm_Tail_Card
+		else if (.@r <= 21132) getitem 4036,1; //Muka_Card
+		else if (.@r <= 21183) getitem 4037,1; //Snake_Card
+		else if (.@r <= 21234) getitem 4038,1; //Zombie_Card
+		else if (.@r <= 21285) getitem 4039,1; //Stainer_Card
+		else if (.@r <= 21336) getitem 4041,1; //Coco_Card
+		else if (.@r <= 21387) getitem 4042,1; //Steel_Chonchon_Card
+		else if (.@r <= 21438) getitem 4045,1; //Horn_Card
+		else if (.@r <= 21489) getitem 4046,1; //Martin_Card
+		else if (.@r <= 21540) getitem 4048,1; //Poison_Spore_Card
+		else if (.@r <= 21591) getitem 4016,1; //Thief_Bug_Card
+		else if (.@r <= 21642) getitem 4056,1; //Dustiness_Card
+		else if (.@r <= 21693) getitem 4057,1; //Metaller_Card
+		else if (.@r <= 21744) getitem 4059,1; //Soldier_Andre_Card
+		else if (.@r <= 21795) getitem 4061,1; //Cornutus_Card
+		else if (.@r <= 21846) getitem 4062,1; //Anacondaq_Card
+		else if (.@r <= 21897) getitem 4067,1; //Megalodon_Card
+		else if (.@r <= 21948) getitem 4070,1; //Eggyra_Card
+		else if (.@r <= 21999) getitem 4071,1; //Orc_Zombie_Card
+		else if (.@r <= 22050) getitem 4072,1; //Golem_Card
+		else if (.@r <= 22101) getitem 4073,1; //Pirate_Skel_Card
+		else if (.@r <= 22152) getitem 4075,1; //Argos_Card
+		else if (.@r <= 22203) getitem 4076,1; //Magnolia_Card
+		else if (.@r <= 22254) getitem 4078,1; //Savage_Card
+		else if (.@r <= 22305) getitem 4080,1; //Flora_Card
+		else if (.@r <= 22356) getitem 4081,1; //Hode_Card
+		else if (.@r <= 22407) getitem 4082,1; //Desert_Wolf_Card
+		else if (.@r <= 22458) getitem 4084,1; //Marine_Sphere_Card
+		else if (.@r <= 22509) getitem 4087,1; //Giearth_Card
+		else if (.@r <= 22560) getitem 4090,1; //Munak_Card
+		else if (.@r <= 22611) getitem 4093,1; //Obeaune_Card
+		else if (.@r <= 22662) getitem 4094,1; //Archer_Skeleton_Card
+		else if (.@r <= 22713) getitem 4095,1; //Marse_Card
+		else if (.@r <= 22764) getitem 4096,1; //Zenorc_Card
+		else if (.@r <= 22815) getitem 4101,1; //Sand_Man_Card
+		else if (.@r <= 22866) getitem 4102,1; //Whisper_Card
+		else if (.@r <= 22917) getitem 4103,1; //Horong_Card
+		else if (.@r <= 22968) getitem 4104,1; //Requiem_Card
+		else if (.@r <= 23019) getitem 4105,1; //Marc_Card
+		else if (.@r <= 23070) getitem 4106,1; //Mummy_Card
+		else if (.@r <= 23121) getitem 4107,1; //Verit_Card
+		else if (.@r <= 23172) getitem 4108,1; //Myst_Card
+		else if (.@r <= 23223) getitem 4109,1; //Jakk_Card
+		else if (.@r <= 23274) getitem 4110,1; //Ghoul_Card
+		else if (.@r <= 23325) getitem 4112,1; //Marduk_Card
+		else if (.@r <= 23376) getitem 4113,1; //Marionette_Card
+		else if (.@r <= 23427) getitem 4114,1; //Argiope_Card
+		else if (.@r <= 23478) getitem 4116,1; //Isis_Card
+		else if (.@r <= 23529) getitem 4117,1; //Side_Winder_Card
+		else if (.@r <= 23580) getitem 4118,1; //Petit_Card
+		else if (.@r <= 23631) getitem 4119,1; //Bathory_Card
+		else if (.@r <= 23682) getitem 4122,1; //Deviruchi_Card
+		else if (.@r <= 23733) getitem 4124,1; //Medusa_Card
+		else if (.@r <= 23784) getitem 4125,1; //Deviace_Card
+		else if (.@r <= 23835) getitem 4127,1; //Nightmare_Card
+		else if (.@r <= 23886) getitem 4068,1; //Scorpion_Card
+		else if (.@r <= 23937) getitem 4138,1; //Anubis_Card
+		else if (.@r <= 23988) getitem 4149,1; //Gargoyle_Card
+		else if (.@r <= 24039) getitem 4150,1; //Goat_Card
+		else if (.@r <= 24090) getitem 4151,1; //Gajomart_Card
+		else if (.@r <= 24141) getitem 4152,1; //Galapago_Card
+		else if (.@r <= 24192) getitem 4153,1; //Crab_Card
+		else if (.@r <= 24243) getitem 4154,1; //Rice_Cake_Boy_Card
+		else if (.@r <= 24294) getitem 4155,1; //Goblin_Leader_Card
+		else if (.@r <= 24345) getitem 4156,1; //Steam_Goblin_Card
+		else if (.@r <= 24396) getitem 4157,1; //Goblin_Archer_Card
+		else if (.@r <= 24447) getitem 4158,1; //Flying_Deleter_Card
+		else if (.@r <= 24498) getitem 4159,1; //Nine_Tail_Card
+		else if (.@r <= 24549) getitem 4161,1; //Grand_Peco_Card
+		else if (.@r <= 24600) getitem 4162,1; //Grizzly_Card
+		else if (.@r <= 24651) getitem 4164,1; //Gullinbursti_Card
+		else if (.@r <= 24702) getitem 4165,1; //Gig_Card
+		else if (.@r <= 24753) getitem 4166,1; //Nightmare_Terror_Card
+		else if (.@r <= 24804) getitem 4167,1; //Neraid_Card
+		else if (.@r <= 24855) getitem 4170,1; //Dark_Frame_Card
+		else if (.@r <= 24906) getitem 4171,1; //Dark_Priest_Card
+		else if (.@r <= 24957) getitem 4172,1; //The_Paper_Card
+		else if (.@r <= 25008) getitem 4173,1; //Demon_Pungus_Card
+		else if (.@r <= 25059) getitem 4175,1; //Poison_Toad_Card
+		else if (.@r <= 25110) getitem 4176,1; //Dullahan_Card
+		else if (.@r <= 25161) getitem 4177,1; //Dryad_Card
+		else if (.@r <= 25212) getitem 4178,1; //Dragon_Tail_Card
+		else if (.@r <= 25263) getitem 4179,1; //Dragon_Fly_Card
+		else if (.@r <= 25314) getitem 4180,1; //Driller_Card
+		else if (.@r <= 25365) getitem 4181,1; //Disguise_Card
+		else if (.@r <= 25416) getitem 4182,1; //Diabolic_Card
+		else if (.@r <= 25467) getitem 4183,1; //Vagabond_Wolf_Card
+		else if (.@r <= 25518) getitem 4184,1; //Lava_Golem_Card
+		else if (.@r <= 25569) getitem 4185,1; //Rideword_Card
+		else if (.@r <= 25620) getitem 4186,1; //Raggler_Card
+		else if (.@r <= 25671) getitem 4187,1; //Raydric_Archer_Card
+		else if (.@r <= 25722) getitem 4188,1; //Leib_Olmai_Card
+		else if (.@r <= 25773) getitem 4189,1; //Wraith_Dead_Card
+		else if (.@r <= 25824) getitem 4190,1; //Wraith_Card
+		else if (.@r <= 25875) getitem 4191,1; //Loli_Ruri_Card
+		else if (.@r <= 25926) getitem 4192,1; //Rotar_Zairo_Card
+		else if (.@r <= 25977) getitem 4193,1; //Lude_Card
+		else if (.@r <= 26028) getitem 4194,1; //Rybio_Card
+		else if (.@r <= 26079) getitem 4195,1; //Leaf_Cat_Card
+		else if (.@r <= 26130) getitem 4196,1; //Marin_Card
+		else if (.@r <= 26181) getitem 4197,1; //Mastering_Card
+		else if (.@r <= 26232) getitem 4199,1; //Merman_Card
+		else if (.@r <= 26283) getitem 4200,1; //Megalith_Card
+		else if (.@r <= 26334) getitem 4201,1; //Majoruros_Card
+		else if (.@r <= 26385) getitem 4202,1; //Civil_Servant_Card
+		else if (.@r <= 26436) getitem 4204,1; //Mini_Demon_Card
+		else if (.@r <= 26487) getitem 4206,1; //Mystcase_Card
+		else if (.@r <= 26538) getitem 4208,1; //Miyabi_Ningyo_Card
+		else if (.@r <= 26589) getitem 4211,1; //Vocal_Card
+		else if (.@r <= 26640) getitem 4212,1; //Bon_Gun_Card
+		else if (.@r <= 26691) getitem 4213,1; //Brilight_Card
+		else if (.@r <= 26742) getitem 4214,1; //Bloody_Murderer_Card
+		else if (.@r <= 26793) getitem 4215,1; //Blazzer_Card
+		else if (.@r <= 26844) getitem 4217,1; //Live_Peach_Tree_Card
+		else if (.@r <= 26895) getitem 4219,1; //Sageworm_Card
+		else if (.@r <= 26946) getitem 4220,1; //Solider_Card
+		else if (.@r <= 26997) getitem 4221,1; //Skeleton_General_Card
+		else if (.@r <= 27048) getitem 4222,1; //Skel_Prisoner_Card
+		else if (.@r <= 27099) getitem 4223,1; //Stalactic_Golem_Card
+		else if (.@r <= 27150) getitem 4224,1; //Stem_Worm_Card
+		else if (.@r <= 27201) getitem 4225,1; //Stone_Shooter_Card
+		else if (.@r <= 27252) getitem 4226,1; //Sting_Card
+		else if (.@r <= 27303) getitem 4227,1; //Spring_Rabbit_Card
+		else if (.@r <= 27354) getitem 4228,1; //Sleeper_Card
+		else if (.@r <= 27405) getitem 4231,1; //Increase_Soil_Card
+		else if (.@r <= 27456) getitem 4232,1; //Wild_Ginseng_Card
+		else if (.@r <= 27507) getitem 4233,1; //Baby_Leopard_Card
+		else if (.@r <= 27558) getitem 4234,1; //Anolian_Card
+		else if (.@r <= 27609) getitem 4235,1; //Cookie_XMAS_Card
+		else if (.@r <= 27660) getitem 4239,1; //Iron_Fist_Card
+		else if (.@r <= 27711) getitem 4240,1; //Arclouse_Card
+		else if (.@r <= 27762) getitem 4242,1; //Apocalips_Card
+		else if (.@r <= 27813) getitem 4244,1; //Alarm_Card
+		else if (.@r <= 27864) getitem 4246,1; //Assulter_Card
+		else if (.@r <= 27915) getitem 4247,1; //Aster_Card
+		else if (.@r <= 27966) getitem 4248,1; //Ancient_Mummy_Card
+		else if (.@r <= 28017) getitem 4249,1; //Ancient_Worm_Card
+		else if (.@r <= 28068) getitem 4251,1; //Elder_Card
+		else if (.@r <= 28119) getitem 4252,1; //Alligator_Card
+		else if (.@r <= 28170) getitem 4253,1; //Alice_Card
+		else if (.@r <= 28221) getitem 4257,1; //Wild_Rose_Card
+		else if (.@r <= 28272) getitem 4258,1; //Wicked_Nymph_Card
+		else if (.@r <= 28323) getitem 4259,1; //Wooden_Golem_Card
+		else if (.@r <= 28374) getitem 4260,1; //Wootan_Shooter_Card
+		else if (.@r <= 28425) getitem 4261,1; //Wootan_Fighter_Card
+		else if (.@r <= 28476) getitem 4265,1; //Li_Me_Mang_Ryang_Card
+		else if (.@r <= 28527) getitem 4266,1; //Eclipse_Card
+		else if (.@r <= 28578) getitem 4267,1; //Explosion_Card
+		else if (.@r <= 28629) getitem 4268,1; //Injustice_Card
+		else if (.@r <= 28680) getitem 4270,1; //Giant_Spider_Card
+		else if (.@r <= 28731) getitem 4271,1; //Giant_Honet_Card
+		else if (.@r <= 28782) getitem 4272,1; //Dancing_Dragon_Card
+		else if (.@r <= 28833) getitem 4273,1; //Shellfish_Card
+		else if (.@r <= 28884) getitem 4274,1; //Zombie_Master_Card
+		else if (.@r <= 28935) getitem 4275,1; //Zombie_Prisoner_Card
+		else if (.@r <= 28986) getitem 4278,1; //Gibbet_Card
+		else if (.@r <= 29037) getitem 4280,1; //Geographer_Card
+		else if (.@r <= 29088) getitem 4282,1; //Tengu_Card
+		else if (.@r <= 29139) getitem 4286,1; //Karakasa_Card
+		else if (.@r <= 29190) getitem 4287,1; //Kapha_Card
+		else if (.@r <= 29241) getitem 4289,1; //Caterpillar_Card
+		else if (.@r <= 29292) getitem 4291,1; //Kobold_Leader_Card
+		else if (.@r <= 29343) getitem 4292,1; //Kobold_Archer_Card
+		else if (.@r <= 29394) getitem 4100,1; //Sohee_Card
+		else if (.@r <= 29445) getitem 4294,1; //Quve_Card
+		else if (.@r <= 29496) getitem 4295,1; //Kraben_Card
+		else if (.@r <= 29547) getitem 4296,1; //Cramp_Card
+		else if (.@r <= 29598) getitem 4297,1; //Cruiser_Card
+		else if (.@r <= 29649) getitem 4298,1; //Cremy_Fear_Card
+		else if (.@r <= 29700) getitem 4299,1; //Clock_Card
+		else if (.@r <= 29751) getitem 4301,1; //Killer_Mantis_Card
+		else if (.@r <= 29802) getitem 4304,1; //Tamruan_Card
+		else if (.@r <= 29853) getitem 4306,1; //Toad_Card
+		else if (.@r <= 29904) getitem 4307,1; //Kind_Of_Beetle_Card
+		else if (.@r <= 29955) getitem 4308,1; //Tri_Joint_Card
+		else if (.@r <= 30006) getitem 4309,1; //Parasite_Card
+		else if (.@r <= 30057) getitem 4310,1; //Panzer_Goblin_Card
+		else if (.@r <= 30108) getitem 4311,1; //Permeter_Card
+		else if (.@r <= 30159) getitem 4312,1; //Fur_Seal_Card
+		else if (.@r <= 30210) getitem 4313,1; //Punk_Card
+		else if (.@r <= 30261) getitem 4315,1; //Pest_Card
+		else if (.@r <= 30312) getitem 4316,1; //Fake_Angel_Card
+		else if (.@r <= 30363) getitem 4319,1; //Freezer_Card
+		else if (.@r <= 30414) getitem 4321,1; //Hylozoist_Card
+		else if (.@r <= 30465) getitem 4322,1; //High_Orc_Card
+		else if (.@r <= 30516) getitem 4323,1; //Garm_Baby_Card
+		else if (.@r <= 30567) getitem 4325,1; //Harpy_Card
+		else if (.@r <= 30618) getitem 4326,1; //See_Otter_Card
+		else if (.@r <= 30669) getitem 4328,1; //Hyegun_Card
+		else if (.@r <= 30720) getitem 4329,1; //Phendark_Card
+		else if (.@r <= 30771) getitem 4331,1; //Heater_Card
+		else if (.@r <= 30822) getitem 4332,1; //Waste_Stove_Card
+		else if (.@r <= 30873) getitem 4333,1; //Venomous_Card
+		else if (.@r <= 30924) getitem 4335,1; //Pitman_Card
+		else if (.@r <= 30975) getitem 4338,1; //Obsidian_Card
+		else if (.@r <= 31026) getitem 4339,1; //Mineral_Card
+		else if (.@r <= 31077) getitem 4341,1; //Metaling_Card
+		else if (.@r <= 31128) getitem 4343,1; //Mole_Card
+		else if (.@r <= 31179) getitem 4344,1; //Anopheles_Card
+		else if (.@r <= 31230) getitem 4345,1; //Hill_Wind_Card
+		else if (.@r <= 31281) getitem 4346,1; //Ygnizem_Card
+		else if (.@r <= 31332) getitem 4347,1; //Armaia_Card
+		else if (.@r <= 31383) getitem 4348,1; //Whikebain_Card
+		else if (.@r <= 31434) getitem 4350,1; //Rawrel_Card
+		else if (.@r <= 31485) getitem 4351,1; //Kavac_Card
+		else if (.@r <= 31536) getitem 4353,1; //Removal_Card
+		else if (.@r <= 31587) getitem 4355,1; //Gremlin_Card
+		else if (.@r <= 31638) getitem 4356,1; //Beholder_Card
+		else if (.@r <= 31689) getitem 4358,1; //Seyren_Card
+		else if (.@r <= 31740) getitem 4369,1; //Venatu_Card
+		else if (.@r <= 31791) getitem 4370,1; //Dimik_Card
+		else if (.@r <= 31842) getitem 4371,1; //Archdam_Card
+		else if (.@r <= 31893) getitem 4377,1; //Green_Iguana_Card
+		else if (.@r <= 31944) getitem 4380,1; //Ferus_Card
+		else if (.@r <= 31995) getitem 4382,1; //Novus__Card
+		else if (.@r <= 32046) getitem 4383,1; //Novus_Card
+		else if (.@r <= 32097) getitem 4385,1; //Dragon_Egg_Card
+		else if (.@r <= 32148) getitem 4387,1; //Ancient_Mimic_Card
+		else if (.@r <= 32199) getitem 4388,1; //Deathword_Card
+		else if (.@r <= 32250) getitem 4389,1; //Plasma_Card
+		else if (.@r <= 32301) getitem 4390,1; //Breeze_Card
+		else if (.@r <= 32352) getitem 4391,1; //Retribution_Card
+		else if (.@r <= 32403) getitem 4393,1; //Shelter_Card
+		else if (.@r <= 32454) getitem 4400,1; //Aliza_Card
+		else if (.@r <= 32505) getitem 4401,1; //Alicel_Card
+		else if (.@r <= 32556) getitem 4404,1; //Skogul_Card
+		else if (.@r <= 32607) getitem 4405,1; //Frus_Card
+		else if (.@r <= 32658) getitem 4406,1; //Skeggiold_Card
+		else if (.@r <= 32709) getitem 4409,1; //Agav_Card
+		else if (.@r <= 32760) getitem 4410,1; //Echio_Card
+		else if (.@r <= 32811) getitem 4414,1; //Seeker_Card
+		else if (.@r <= 32862) getitem 4417,1; //Ice_Titan_Card
+		else if (.@r <= 32913) getitem 4418,1; //Gazeti_Card
+		else if (.@r <= 32964) getitem 4420,1; //Muscipular_Card
+		else if (.@r <= 33015) getitem 4421,1; //Drosera_Card
+		else if (.@r <= 33066) getitem 4422,1; //Roween_Card
+		else if (.@r <= 33117) getitem 4423,1; //Galion_Card
+		else if (.@r <= 33168) getitem 4432,1; //Magmaring_Card
+		else if (.@r <= 33219) getitem 4434,1; //Knocker_Card
+		else if (.@r <= 33270) getitem 4435,1; //Zombie_Slaughter_Card
+		else if (.@r <= 33321) getitem 4436,1; //Ragged_Zombie_Card
+		else if (.@r <= 33372) getitem 4437,1; //Hell_Poodle_Card
+		else if (.@r <= 33423) getitem 4438,1; //Banshee_Card
+		else if (.@r <= 33474) getitem 4439,1; //Flame_Skull_Card
+		else if (.@r <= 33525) getitem 4442,1; //Tatacho_Card
+		else if (.@r <= 33576) getitem 4443,1; //Aqua_Elemental_Card
+		else if (.@r <= 33627) getitem 4444,1; //Draco_Card
+		else if (.@r <= 33678) getitem 4445,1; //Luciola_Vespa_Card
+		else if (.@r <= 33729) getitem 4447,1; //Centipede_Card
+		else if (.@r <= 33780) getitem 4448,1; //Cornus_Card
+		else if (.@r <= 33831) getitem 4449,1; //Dark_Shadow_Card
+		else if (.@r <= 33882) getitem 4450,1; //Banshee_Master_Card
+		else if (.@r <= 33933) getitem 4452,1; //Centipede_Larva_Card
+		else if (.@r <= 33939) getitem 4007,1; //Pecopeco_Egg_Card
+		else if (.@r <= 33945) getitem 4027,1; //Kukre_Card
+		else if (.@r <= 33951) getitem 4043,1; //Andre_Card
+		else if (.@r <= 33957) getitem 4052,1; //Elder_Wilow_Card
+		else if (.@r <= 33963) getitem 4055,1; //Marina_Card
+		else if (.@r <= 33969) getitem 4060,1; //Goblin_Card
+		else if (.@r <= 33975) getitem 4063,1; //Caramel_Card
+		else if (.@r <= 33981) getitem 4066,1; //Orc_Warrior_Card
+		else if (.@r <= 33987) getitem 4069,1; //Drainliar_Card
+		else if (.@r <= 33993) getitem 4074,1; //BigFoot_Card
+		else if (.@r <= 33999) getitem 4079,1; //Mantis_Card
+		else if (.@r <= 34005) getitem 4085,1; //Orc_Skeleton_Card
+		else if (.@r <= 34011) getitem 4089,1; //Sword_Fish_Card
+		else if (.@r <= 34017) getitem 4091,1; //Kobold_Card
+		else if (.@r <= 34023) getitem 4097,1; //Matyr_Card
+		else if (.@r <= 34029) getitem 4098,1; //Dokebi_Card
+		else if (.@r <= 34035) getitem 4099,1; //Pasana_Card
+		else if (.@r <= 34041) getitem 4293,1; //Cookie_Card
+		else if (.@r <= 34047) getitem 4111,1; //Strouf_Card
+		else if (.@r <= 34053) getitem 4120,1; //Petit__Card
+		else if (.@r <= 34059) getitem 4139,1; //Joker_Card
+		else if (.@r <= 34065) getitem 4160,1; //Antique_Firelock_Card
+		else if (.@r <= 34071) getitem 4210,1; //Wander_Man_Card
+		else if (.@r <= 34077) getitem 4216,1; //Sasquatch_Card
+		else if (.@r <= 34083) getitem 4255,1; //Orc_Lady_Card
+		else if (.@r <= 34089) getitem 4256,1; //Orc_Archer_Card
+		else if (.@r <= 34095) getitem 4262,1; //Evil_Cloud_Hermit_Card
+		else if (.@r <= 34101) getitem 4264,1; //Wind_Ghost_Card
+		else if (.@r <= 34107) getitem 4279,1; //Deleter_Card
+		else if (.@r <= 34113) getitem 4283,1; //Greatest_General_Card
+		else if (.@r <= 34119) getitem 4284,1; //Chepet_Card
+		else if (.@r <= 34125) getitem 4300,1; //Chimera_Card
+		else if (.@r <= 34131) getitem 4327,1; //Blood_Butterfly_Card
+		else if (.@r <= 34137) getitem 4362,1; //Harword_Card
+		else if (.@r <= 34143) getitem 4366,1; //Katrinn_Card
+		else if (.@r <= 34149) getitem 4378,1; //Acidus_Card
+		else if (.@r <= 34155) getitem 4395,1; //Tha_Maero_Card
+		else if (.@r <= 34161) getitem 4411,1; //Vanberk_Card
+		else if (.@r <= 34167) getitem 4412,1; //Isilla_Card
+		else if (.@r <= 34173) getitem 4030,1; //Mandragora_Card
+		else if (.@r <= 34179) getitem 4035,1; //Hydra_Card
+		else if (.@r <= 34185) getitem 4044,1; //Smokie_Card
+		else if (.@r <= 34191) getitem 4049,1; //Vadon_Card
+		else if (.@r <= 34197) getitem 4051,1; //Yoyo_Card
+		else if (.@r <= 34199) getitem 4058,1; //Thara_Frog_Card
+		else if (.@r <= 34201) getitem 4065,1; //Kaho_Card
+		else if (.@r <= 34203) getitem 4077,1; //Phen_Card
+		else if (.@r <= 34205) getitem 4083,1; //Rafflesia_Card
+		else if (.@r <= 34207) getitem 4086,1; //Soldier_Skeleton_Card
+		else if (.@r <= 34209) getitem 4126,1; //Minorous_Card
+		else if (.@r <= 34211) getitem 4136,1; //Khalitzburg_Card
+		else if (.@r <= 34213) getitem 4141,1; //Evil_Druid_Card
+		else if (.@r <= 34215) getitem 4205,1; //Mimic_Card
+		else if (.@r <= 34217) getitem 4209,1; //Violy_Card
+		else if (.@r <= 34219) getitem 4230,1; //Shinobi_Card
+		else if (.@r <= 34221) getitem 4237,1; //Owl_Duke_Card
+		else if (.@r <= 34223) getitem 4277,1; //Zherlthsh_Card
+		else if (.@r <= 34225) getitem 4281,1; //Zipper_Bear_Card
+		else if (.@r <= 34227) getitem 4317,1; //Mobster_Card
+		else if (.@r <= 34229) getitem 4334,1; //Noxious_Card
+		else if (.@r <= 34231) getitem 4354,1; //Gemini_Card
+		else if (.@r <= 34233) getitem 4359,1; //B_Eremes_Card
+		else if (.@r <= 34235) getitem 4368,1; //Shecil_Card
+		else if (.@r <= 34237) getitem 4375,1; //Orc_Baby_Card
+		else if (.@r <= 34239) getitem 4379,1; //Acidus__Card
+		else if (.@r <= 34241) getitem 4381,1; //Ferus__Card
+		else if (.@r <= 34243) getitem 4394,1; //Solace_Card
+		else if (.@r <= 34245) getitem 4397,1; //Tha_Despero_Card
+		else if (.@r <= 34247) getitem 4402,1; //Aliot_Card
+		else if (.@r <= 34249) getitem 4416,1; //Siroma_Card
+		else if (.@r <= 34251) getitem 4424,1; //Stapo_Card
+		else if (.@r <= 34253) getitem 4429,1; //Salamander_Card
+		else if (.@r <= 34255) getitem 4431,1; //Kasa_Card
+		else if (.@r <= 34257) getitem 4433,1; //Imp_Card
+		else if (.@r <= 34259) getitem 4440,1; //Necromancer_Card
+		else if (.@r <= 34261) {
+			if (rand(1,10) == 1)
+				getitem 4396,1; //Tha_Odium_Card
+			else
+				getitem 4092,1; //Skel_Worker_Card
+		}
+		mes "[Terminator RX1]";
+		mes "All cards have finished.";
+		next;
+		mes "[Terminator RX1]";
+		mes "Thank you for coming!";
+		close;
+	case 5:
+		mes "[Terminator RX1]";
+		mes "Found unauthorized signal, starting security system...";
+		close2;
+		warp "comodo",263,286;
+		end;
+	}
+	close;
+
+L_Exchange:
+	freeloop(1);
+	.@args = getargcount();
+	for (.@i = 0; .@i < .@args; .@i++) {
+		if (countitem(getarg(.@i))) {
+			mes "Found ^980078" + getitemname(getarg(.@i)) + "^000000,";
+			mes "Do you want to exchange ONE Card into ONE Coin?";
+			next;
+			switch(select("No:Yes")) {
+			case 1:
+				mes "^980078Do you want search for other cards?^000000";
+				next;
+				if(select("No:Yes") == 1) {
+					mes "^980078Card searching is interrupted^000000";
+					close;
+				}
+				break;
+			case 2:
+				if (countitem(getarg(.@i))) {
+					delitem getarg(.@i),1;
+					getitem 6379,1; //Card_Coin
+					mes "^980078" + getitemname(getarg(.@i)) + " has exchanged into Coin.^000000";
+					next;
+				} else {
+					mes "^980078Your inventory does not contain the card for exchange.^000000";
+					next;
+				}
+				break;
+			}
+		}
+	}
+	freeloop(0);
+	return;
+}

+ 3 - 2
npc/re/merchants/ticket_refiner.txt

@@ -15,6 +15,8 @@
 //= 1.0 First version. [Euphy]
 //============================================================
 
+// Main NPC :: safety_Ref_NPC
+//============================================================
 prontera,184,177,6	script	Refine Master	851,{
 	disable_items;
 	if (countitem(6238) || countitem(6228) || countitem(6229) || countitem(6230) || countitem(6231) || countitem(6456))
@@ -148,8 +150,7 @@ prontera,184,177,6	script	Refine Master	851,{
 		mes "Please report this.";
 		close;
 	}
-	for(set .@i,getequiprefinerycnt(.@part); .@i<.@ticket_lv; set .@i,.@i+1)
-		successrefitem .@part;
+	successrefitem .@part, .@ticket_lv;
 	next;
 	emotion e_ho;
 	mes "[Refine Master]";

+ 2 - 0
npc/re/other/resetskill.txt

@@ -15,6 +15,8 @@
 //= 1.1 Added Izlude duplicates. [Euphy]
 //============================================================
 
+// Main NPC :: resetskill_novice
+//============================================================
 izlude,127,175,3	script	Hypnotist#novice	124,{
 	mes "[Hypnotist]";
 	mes "Greetings, adventurer.";

+ 3 - 2
npc/re/quests/magic_books.txt

@@ -1,8 +1,7 @@
 //===== rAthena Script ======================================= 
 //= Magic Book Seller
 //===== By: ================================================== 
-//= Masao
-//= Credits to Muad_Dib for the translation.
+//= Masao, Muad_Dib (translation)
 //===== Current Version: ===================================== 
 //= 1.1a
 //===== Compatible With: ===================================== 
@@ -16,6 +15,8 @@
 //= 1.1a Updated NPC name to "Master Velofos". [Euphy]
 //============================================================ 
 
+// Main Quest :: war_book
+//============================================================
 geffen_in,176,105,4	script	Master Velofos	64,{
 	if (checkweight(1201,1) == 0) {
 		mes "You're carrying too many items. Please make some room in your bag first.";

+ 1 - 0
npc/re/scripts_athena.conf

@@ -68,6 +68,7 @@ npc: npc/re/merchants/alchemist.txt
 npc: npc/re/merchants/ammo_boxes.txt
 npc: npc/re/merchants/ammo_dealer.txt
 //npc: npc/re/merchants/blessed_refiner.txt
+//npc: npc/re/merchants/card_exchange.txt
 npc: npc/re/merchants/card_separation.txt
 npc: npc/re/merchants/catalog.txt
 npc: npc/re/merchants/coin_exchange.txt

+ 43 - 43
sql-files/item_db.sql

@@ -564,11 +564,11 @@ REPLACE INTO `item_db` VALUES (1179,'Executioner__','Executioner',5,20,NULL,2200
 REPLACE INTO `item_db` VALUES (1180,'Dragon_Slayer_','Dragon Slayer',5,20,NULL,1300,150,NULL,1,2,0x00004082,7,2,34,4,48,1,3,'bonus bIgnoreDefRace,RC_Dragon; bonus2 bAddRace,RC_Dragon,15;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1181,'Tae_Goo_Lyeon','Tae Goo Lyeon',5,20,NULL,2000,250,NULL,1,2,0x00004082,2,2,34,4,90,1,3,'bonus bFlee2,10; if(JobLevel>=70) autobonus "{ bonus bBaseAtk,50; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; if(getrefine()>8) { bonus bCastrate,-20; bonus bDelayRate,-20; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1182,'Bloody_Eater','Bloody Eater',5,20,NULL,1200,200,NULL,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;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1183,'BF_Two_Handed_Sword1','Brave Assaulter\'s Katzbalger',5,20,NULL,0,200,NULL,1,0,0x00004082,7,2,34,3,80,1,3,'bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1183,'BF_Two_Handed_Sword1','Brave Assaulter\'s Katzbalger',5,20,NULL,0,200,NULL,1,0,0x00004082,7,2,34,3,80,1,3,'bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1184,'BF_Two_Handed_Sword2','Valorous Assaulter\'s Katzbalger',5,20,NULL,0,200,NULL,1,0,0x00004082,7,2,34,3,80,1,3,'bonus bCritical,20; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus bCritAtkRate,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1185,'Violet_Fear','Violet Fear',5,20,NULL,2200,275,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1186,'Death_Guidance','Death Guidance',5,20,NULL,2000,200,NULL,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;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1187,'Krieger_Twohand_Sword1','Glorious Claymore',5,20,NULL,0,220,NULL,1,0,0x00004082,7,2,34,4,80,1,3,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1187,'Krieger_Twohand_Sword1','Glorious Claymore',5,20,NULL,0,220,NULL,1,0,0x00004082,7,2,34,4,80,1,3,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1188,'Veteran_Sword','Veteran Sword',5,10000,NULL,2000,180,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1189,'Krasnaya','Krasnaya',5,20,NULL,3800,200,NULL,2,3,0x00004082,2,2,34,2,50,1,3,'if(readparam(bStr)>=95) { bonus bBaseAtk,20; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1190,'Claymore_C','Claymore',5,0,NULL,0,220,NULL,1,0,0x00004080,7,2,34,3,1,0,3,'bonus2 bAddSize,Size_All,40;',NULL,NULL);
@@ -652,10 +652,10 @@ REPLACE INTO `item_db` VALUES (1275,'Katar_Of_Cold_Icicle_','Katar of Frozen Ici
 REPLACE INTO `item_db` VALUES (1276,'Katar_Of_Thornbush_','Katar of Quaking',5,45000,NULL,1200,105,NULL,1,3,0x00001000,7,2,34,3,55,1,16,'bonus bAtkEle,Ele_Earth; bonus2 bAddEff,Eff_Blind,500;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1277,'Katar_Of_Raging_Blaze_','Katar of Raging Blaze',5,45000,NULL,1200,105,NULL,1,3,0x00001000,7,2,34,3,55,1,16,'bonus bAtkEle,Ele_Fire; bonus2 bAddEff,Eff_Silence,500;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1278,'Katar_Of_Piercing_Wind_','Katar of Piercing Wind',5,45000,NULL,1200,105,NULL,1,3,0x00001000,7,2,34,3,55,1,16,'bonus bAtkEle,Ele_Wind; bonus2 bAddEff,Eff_Sleep,500;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1279,'BF_Katar1','Brave Carnage Katar',5,20,NULL,0,130,NULL,1,0,0x00001000,7,2,34,3,80,1,16,'bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1279,'BF_Katar1','Brave Carnage Katar',5,20,NULL,0,130,NULL,1,0,0x00001000,7,2,34,3,80,1,16,'bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1280,'BF_Katar2','Valorous Carnage Katar',5,20,NULL,0,130,NULL,1,0,0x00001000,7,2,34,3,80,1,16,'bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus bCritAtkRate,20; bonus bAspdRate,5; bonus bUnbreakableWeapon,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1281,'Krieger_Katar1','Glorious Bloody Roar',5,20,NULL,0,140,NULL,1,0,0x00001000,7,2,34,4,80,1,16,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }";',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1282,'Krieger_Katar2','Glorious Jamadhar',5,20,NULL,0,140,NULL,1,0,0x00001000,7,2,34,4,80,1,16,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bCriticalAddRace,RC_DemiHuman,5; bonus2 bCriticalAddRace,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }";',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1281,'Krieger_Katar1','Glorious Bloody Roar',5,20,NULL,0,140,NULL,1,0,0x00001000,7,2,34,4,80,1,16,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }";',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1282,'Krieger_Katar2','Glorious Jamadhar',5,20,NULL,0,140,NULL,1,0,0x00001000,7,2,34,4,80,1,16,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bCriticalAddRace,RC_DemiHuman,5; bonus2 bCriticalAddRace,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }";',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1283,'Katar_Of_Speed','Katar Of Speed',5,20,NULL,0,175,NULL,1,0,0x00001000,7,2,34,4,0,0,16,'bonus2 bSkillAtk,"AS_SONICBLOW",25; bonus bAspdRate,3;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1284,'Krishna','Krishna',5,20,NULL,1200,120,NULL,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; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1285,'Cakram','Chakram',5,20,NULL,1000,130,NULL,1,2,0x00001000,2,2,34,3,50,1,16,'if(getskilllv("AS_KATAR")==10) { bonus bHit,10; } bonus2 bSkillAtk,"ASC_METEORASSAULT",20;',NULL,NULL);
@@ -670,7 +670,7 @@ REPLACE INTO `item_db` VALUES (1306,'War_Axe','War Axe',5,20,NULL,4200,140,NULL,
 REPLACE INTO `item_db` VALUES (1307,'Windhawk','Windhawk',5,18000,NULL,1500,115,NULL,1,0,0x000654E2,7,2,2,2,14,1,6,'bonus bAtkEle,Ele_Wind; bonus bAspdRate,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1308,'Golden_Axe','Golden Axe',5,20,NULL,3000,170,NULL,1,0,0x00000001,7,2,2,4,45,1,6,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (1309,'Orcish_Axe_','Orcish Axe',5,20,NULL,1500,75,NULL,1,4,0x000654E3,7,2,2,3,3,1,6,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (1310,'Krieger_Onehand_Axe1','Glorious Cleaver',5,20,NULL,0,130,NULL,1,0,0x000444A2,7,2,2,4,80,1,6,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus bAspdRate,5; bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,50; bonus4 bAutoSpellOnSkill,"MC_MAMMONITE","NPC_CRITICALWOUND",2,200; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1310,'Krieger_Onehand_Axe1','Glorious Cleaver',5,20,NULL,0,130,NULL,1,0,0x000444A2,7,2,2,4,80,1,6,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus bAspdRate,5; bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,50; bonus4 bAutoSpellOnSkill,"MC_MAMMONITE","NPC_CRITICALWOUND",2,200; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1311,'Vecer_Axe','Vecer Axe',5,20,NULL,1500,140,NULL,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; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1312,'Orcish_Axe_C','Orcish Axe',5,0,NULL,0,110,NULL,1,0,0x000654E3,7,2,2,3,1,0,6,'bonus2 bAddSize,Size_All,70;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1313,'Tourist_Axe','Tourist Axe',5,0,NULL,500,77,NULL,1,0,0x000654E3,7,2,2,1,1,0,6,'bonus bStr,2;',NULL,NULL);
@@ -705,10 +705,10 @@ REPLACE INTO `item_db` VALUES (1375,'Berdysz','Berdysz',5,20,NULL,2500,200,NULL,
 REPLACE INTO `item_db` VALUES (1376,'Heart_Breaker','Heart Breaker',5,20,NULL,2000,175,NULL,1,1,0x000444A2,2,2,34,4,70,1,7,'bonus bCritical,20+getrefine(); bonus bAspdRate,5; if((Class==Job_Whitesmith)||(Class==Job_Creator)) bonus3 bAutoSpell,"BS_HAMMERFALL",3,30;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1377,'Hurricane_Fury','Hurricane\'s Fury',5,20,NULL,3500,332,NULL,1,1,0x000444A2,2,2,34,4,80,1,7,'bonus2 bSubSize,Size_Medium,10+getrefine(); bonus bAspdRate,getrefine(); bonus3 bAutoSpell,"NPC_PULSESTRIKE",5,20;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1378,'Great_Axe_C','Refined Great Axe',5,1,NULL,0,215,NULL,1,0,0x000444A2,7,2,34,4,0,0,7,'bonus bStr,5; bonus bHit,20; bonus2 bAddSkillBlow,"MC_MAMMONITE",5; bonus2 bAddEff,Eff_Stun,2000;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1379,'BF_Two_Handed_Axe1','Valorous Insane Battle Axe',5,20,NULL,0,200,NULL,1,0,0x000444A2,7,2,34,3,80,1,7,'bonus bStr,3; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1379,'BF_Two_Handed_Axe1','Valorous Insane Battle Axe',5,20,NULL,0,200,NULL,1,0,0x000444A2,7,2,34,3,80,1,7,'bonus bStr,3; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1380,'BF_Two_Handed_Axe2','Brave Insane Battle Axe',5,20,NULL,0,200,NULL,1,0,0x000444A2,7,2,34,3,80,1,7,'bonus bStr,3; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; autobonus "{ bonus bBreakArmorRate,10000; }",20,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1381,'N_Battle_Axe','Novice Battle Axe',5,0,NULL,0,100,NULL,1,3,0x000444A2,7,2,34,1,3,0,7,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (1382,'Krieger_Twohand_Axe1','Glorious Two-Handed Axe',5,20,NULL,0,220,NULL,1,0,0x000444A2,7,2,34,4,80,1,7,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,50; } if(getrefine()>8) { bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,100; bonus4 bAutoSpellOnSkill,"MC_MAMMONITE","NPC_CRITICALWOUND",2,200; bonus4 bAutoSpellOnSkill,"WS_CARTTERMINATION","NPC_CRITICALWOUND",2,200; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1382,'Krieger_Twohand_Axe1','Glorious Two-Handed Axe',5,20,NULL,0,220,NULL,1,0,0x000444A2,7,2,34,4,80,1,7,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-3)*(getrefine()-3); bonus2 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,50; } if(getrefine()>8) { bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,100; bonus4 bAutoSpellOnSkill,"MC_MAMMONITE","NPC_CRITICALWOUND",2,200; bonus4 bAutoSpellOnSkill,"WS_CARTTERMINATION","NPC_CRITICALWOUND",2,200; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1383,'Holy_Celestial_Axe','Celestial Axe',5,20,NULL,1500,200,NULL,1,0,0x000444A2,7,2,34,4,60,1,7,'bonus bAtkEle,Ele_Holy; bonus bVit,10; bonus2 bAddRace,RC_Undead,10; bonus3 bAutoSpell,"AL_BLESSING",5,50;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1384,'Veteran_Axe','Veteran Axe',5,10000,NULL,3000,250,NULL,1,2,0x000444A2,7,2,34,3,80,1,7,'if(getskilllv("BS_DAGGER")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_SWORD")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_TWOHANDSWORD")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_KNUCKLE")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_SPEAR")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_AXE")==3) { bonus bBaseAtk,10; } if(getskilllv("BS_MACE")==3) { bonus bBaseAtk,10; } bonus bVit,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1385,'Bradium_Stonehammer','Bradium Stone Hammer',5,20,NULL,2700,210,NULL,1,0,0x000444A2,2,2,34,4,75,1,7,'bonus3 bAddEffOnSkill,"BS_HAMMERFALL",Eff_Stun,500+(200*getrefine());',NULL,NULL);
@@ -742,8 +742,8 @@ REPLACE INTO `item_db` VALUES (1421,'Battle_Hook','Battle Hook',5,20,NULL,900,14
 REPLACE INTO `item_db` VALUES (1422,'Hunting_Spear','Hunting Spear',5,20,NULL,4200,180,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1423,'Pole_XO','Pole XO',5,20,NULL,0,120,NULL,3,0,0x00004082,7,2,2,1,0,0,4,'bonus2 bAddClass,Class_All,50;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1424,'Skewer_C','Refined Brocca',5,1,NULL,0,149,NULL,3,0,0x00004082,7,2,2,4,0,0,4,'bonus bIgnoreDefClass,Class_Normal; bonus2 bAddSize,Size_Medium,20;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1425,'BF_Spear1','Assaulter Spear',5,20,NULL,0,60,NULL,3,0,0x00004082,7,2,2,3,80,1,4,'bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(BaseJob==Job_Crusader) bonus bAspdRate,20;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1426,'Krieger_Onehand_Spear1','Glorious Spear',5,20,NULL,0,130,NULL,3,0,0x00004082,7,2,2,4,80,1,4,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1425,'BF_Spear1','Assaulter Spear',5,20,NULL,0,60,NULL,3,0,0x00004082,7,2,2,3,80,1,4,'bonus bStr,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(BaseJob==Job_Crusader) bonus bAspdRate,20;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1426,'Krieger_Onehand_Spear1','Glorious Spear',5,20,NULL,0,130,NULL,3,0,0x00004082,7,2,2,4,80,1,4,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1427,'Spear_Of_Excellent','Spear Of Excellent',5,20,NULL,0,160,NULL,3,0,0x00004082,7,2,2,3,0,0,4,'bonus2 bSkillAtk,"SM_MAGNUM",25; bonus bStr,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1428,'Long_Horn_M','Long Horn',5,20,NULL,1000,150,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1429,'Hunting_Spear_M','Hunting Spear',5,20,NULL,4200,180,NULL,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;',NULL,NULL);
@@ -788,7 +788,7 @@ REPLACE INTO `item_db` VALUES (1482,'BF_Lance1','Assaulter Lance',5,NULL,NULL,0,
 REPLACE INTO `item_db` VALUES (1483,'Ivory_Lance','Ivory Lance',5,20,NULL,1000,160,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1484,'Cardo','Cardo',5,20,NULL,5600,150,NULL,3,1,0x00000080,2,2,34,4,70,1,5,'bonus bAspdRate,-10; bonus bDef,getrefine()/2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1485,'Battle_Fork','Battle Fork',5,20,NULL,700,112,NULL,3,4,0x00004082,2,2,34,2,50,1,5,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (1486,'Krieger_Twohand_Spear1','Glorious Lance',5,20,NULL,0,220,NULL,3,0,0x00004082,7,2,34,4,80,1,5,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1486,'Krieger_Twohand_Spear1','Glorious Lance',5,20,NULL,0,220,NULL,3,0,0x00004082,7,2,34,4,80,1,5,'bonus2 bAddRace,RC_DemiHuman,70; bonus2 bAddRace,RC_Player,70; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1487,'Lance_C','Lance',5,0,NULL,0,220,NULL,3,0,0x00004082,7,2,34,3,1,0,5,'bonus2 bAddSize,Size_All,50;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1488,'Ahlspiess_C','Ahlspiess',5,20,NULL,0,135,NULL,3,0,0x00004080,7,2,34,4,1,1,5,'bonus bIgnoreDefClass,Class_Normal; bonus bIgnoreDefClass,Class_Boss; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; bonus3 bAutoSpell,"KN_PIERCE",5,30;',NULL,NULL);
 # Maces
@@ -833,11 +833,11 @@ REPLACE INTO `item_db` VALUES (1538,'Spike_','Spike',5,20,NULL,700,85,NULL,1,2,0
 REPLACE INTO `item_db` VALUES (1539,'Golden_Mace_','Golden Mace',5,20,NULL,800,110,NULL,1,2,0x00008110,7,2,2,4,40,1,8,'bonus2 bAddRace,RC_Undead,10; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1540,'Grand_Cross_','Grand Cross',5,20,NULL,1500,140,NULL,1,1,0x00008110,7,2,2,4,40,1,8,'bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1541,'Nemesis','Nemesis',5,20,NULL,900,120,NULL,1,0,0x00008110,7,2,2,4,60,1,8,'bonus bAtkEle,Ele_Holy; bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_Demon,10; bonus3 bAutoSpell,"AL_CRUCIS",1+getrefine(),100; autobonus "{ bonus bBaseAtk,50; }",10,20000,BF_WEAPON,"{ specialeffect2 EF_BLOODDRAIN; }";',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1542,'BF_Morning_Star1','Valorous Battlefield Morning Star',5,20,NULL,0,105,NULL,1,0,0x0004C5B3,7,2,2,3,80,1,8,'bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1542,'BF_Morning_Star1','Valorous Battlefield Morning Star',5,20,NULL,0,105,NULL,1,0,0x0004C5B3,7,2,2,3,80,1,8,'bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1543,'BF_Morning_Star2','Brave Battlefield Morning Star',5,20,NULL,0,105,NULL,1,0,0x0004C5B3,7,2,2,3,80,1,8,'bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus bUnbreakableWeapon,0; autobonus "{ bonus2 bAddEff,Eff_Stun,5000; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }";',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1544,'Lunakaligo','Lunakaligo',5,20,NULL,700,110,NULL,1,3,0x00008110,2,2,2,3,50,1,8,'if(readparam(bStr)>=77) { bonus bAspdRate,4; bonus2 bAddEff,Eff_Stun,1500; bonus3 bAddMonsterDropItem,12065,RC_Plant,500; bonus3 bAddMonsterDropItem,12043,RC_Brute,500; bonus3 bAddMonsterDropItem,12069,RC_Fish,500; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1545,'N_Mace','Novice Mace',5,0,NULL,0,57,NULL,1,3,0x0004C5B3,7,2,2,1,2,0,8,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (1546,'Krieger_Onehand_Mace1','Glorious Morning Star',5,20,NULL,0,130,NULL,1,0,0x0004C5B3,7,2,2,4,80,1,8,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus2 bAddEff,Eff_Stun,2000; bonus bAspdRate,5; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1546,'Krieger_Onehand_Mace1','Glorious Morning Star',5,20,NULL,0,130,NULL,1,0,0x0004C5B3,7,2,2,4,80,1,8,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus2 bAddEff,Eff_Stun,2000; bonus bAspdRate,5; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1547,'Mace_Of_Madness','Mace Of Madness',5,20,NULL,0,150,NULL,1,0,0x0004C5B2,7,2,2,3,0,0,8,'bonus2 bSkillAtk,"MC_CARTREVOLUTION",25; bonus bStr,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1548,'Veteran_Hammer','Veteran Hammer',5,10000,NULL,1800,160,NULL,1,2,0x00008110,7,2,2,3,80,1,8,'bonus bHealPower,getskilllv("AL_DP"); bonus bCritical,getskilllv("PR_MACEMASTERY")*2; bonus bInt,1; bonus bLuk,1;',NULL,NULL);
 # Books
@@ -865,10 +865,10 @@ REPLACE INTO `item_db` VALUES (1570,'Book_Of_Blazing_Sun_','Book of Blazing Sun'
 REPLACE INTO `item_db` VALUES (1571,'Book_Of_Gust_Of_Wind_','Book of Gust of Wind',5,35000,NULL,750,90,NULL,1,3,0x00410100,7,2,2,3,27,1,15,'bonus bAtkEle,Ele_Wind;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1572,'Principles_Of_Magic','Principles of Magic',5,20,NULL,300,60,NULL,1,2,0x00410100,7,2,2,3,60,1,15,'bonus bMatkRate,20; bonus bInt,3; bonus bSPrecovRate,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1573,'Ancient_Magic','Ancient Magic',5,20,NULL,700,30,NULL,1,2,0x00410100,7,2,2,3,70,1,15,'bonus bMatkRate,15;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1574,'BF_Book1','Brave Battle Strategy Book',5,20,NULL,0,90,NULL,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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1574,'BF_Book1','Brave Battle Strategy Book',5,20,NULL,0,90,NULL,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 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1575,'BF_Book2','Valorous Battle Strategy Book',5,20,NULL,0,90,NULL,1,0,0x00410100,7,2,2,3,80,1,15,'bonus bStr,2; bonus bInt,1; bonus bMatkRate,15; bonus2 bIgnoreMdefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreMdefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1576,'Krieger_Book1','Glorious Tablet',5,20,NULL,0,90,NULL,1,0,0x00410100,7,2,2,4,80,1,15,'bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }";',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1577,'Krieger_Book2','Glorious Apocalypse',5,20,NULL,0,90,NULL,1,0,0x00410100,7,2,2,4,80,1,15,'bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRate,RC_DemiHuman,25; bonus2 bIgnoreDefRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; if(getrefine()>8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1576,'Krieger_Book1','Glorious Tablet',5,20,NULL,0,90,NULL,1,0,0x00410100,7,2,2,4,80,1,15,'bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }";',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1577,'Krieger_Book2','Glorious Apocalypse',5,20,NULL,0,90,NULL,1,0,0x00410100,7,2,2,4,80,1,15,'bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; if(getrefine()>8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1578,'Book_Of_Prayer','Book Of Prayer',5,20,NULL,0,140,NULL,1,0,0x00410100,7,2,2,3,0,0,15,'bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1579,'Death_Note_M','Book of the Dead',5,20,NULL,1000,137,NULL,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; bonus2 bWeaponComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1580,'Encyclopedia_C','Giant Encyclopedia',5,0,NULL,0,145,NULL,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;',NULL,NULL);
@@ -962,12 +962,12 @@ REPLACE INTO `item_db` VALUES (1734,'Orc_Archer_Bow','Orc Archer Bow',5,20,NULL,
 REPLACE INTO `item_db` VALUES (1735,'Kkakkung','Kkakkung',5,20,NULL,0,120,NULL,5,0,0x000A0848,7,2,34,1,1,0,11,'bonus2 bAddClass,Class_All,50;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1736,'Double_Bound','Double Bound',5,20,NULL,900,70,NULL,5,3,0x00000800,2,2,34,3,70,1,11,'bonus3 bAutoSpell,"AC_DOUBLE",GetSkillLv("AC_DOUBLE"),10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1737,'Ixion_Wing','Ixion Wings',5,20,NULL,300,135,NULL,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;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1738,'BF_Bow1','Valorous Battle CrossBow',5,0,NULL,0,100,NULL,5,0,0x000A0848,7,2,34,3,80,1,11,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1738,'BF_Bow1','Valorous Battle CrossBow',5,0,NULL,0,100,NULL,5,0,0x000A0848,7,2,34,3,80,1,11,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1739,'BF_Bow2','Brave Battle CrossBow',5,0,NULL,0,100,NULL,5,0,0x000A0848,7,2,34,3,80,1,11,'bonus bDex,2; bonus bInt,10; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1740,'Nepenthes_Bow','Nepenthes Bow',5,20,NULL,1000,105,NULL,5,2,0x00000800,2,2,34,4,60,1,11,'bonus4 bAutoSpellOnSkill,"AC_DOUBLE","AC_CHARGEARROW",1,20;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1741,'Cursed_Lyre','Cursed Lyre',5,20,NULL,1250,125,NULL,5,1,0x00080808,2,2,34,4,80,1,11,'bonus bLuk,-2; bonus2 bAddEff,Eff_Curse,400;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1742,'N_Composite_Bow','Novice Composite Bow',5,1,NULL,0,49,NULL,5,3,0x000A0848,7,2,34,1,4,0,11,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (1743,'Krieger_Bow1','Glorious Hunter Bow',5,0,NULL,0,100,NULL,5,0,0x001A0848,7,2,34,4,80,1,11,'bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bCritAtkRate,getrefine() * 2; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) bonus2 bSkillAtk,"AC_DOUBLE",20;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1743,'Krieger_Bow1','Glorious Hunter Bow',5,0,NULL,0,100,NULL,5,0,0x001A0848,7,2,34,4,80,1,11,'bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bCritAtkRate,getrefine() * 2; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) bonus2 bSkillAtk,"AC_DOUBLE",20;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1744,'Bow_Of_Evil','Bow Of Evil',5,0,NULL,0,170,NULL,5,0,0x000A0848,7,2,34,4,1,0,11,'bonus2 bSkillAtk,"AC_DOUBLE",25; bonus bDex,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1745,'Falken_Blitz','Falken Blitz',5,0,NULL,1000,100,NULL,5,2,0x00080808,2,2,34,3,50,1,11,'bonus2 bSkillAtk,"SN_SHARPSHOOTING",10; bonus2 bSkillAtk,"AC_DOUBLE",10; bonus2 bSkillAtk,"AC_CHARGEARROW",10;',NULL,NULL);
 # Arrows
@@ -1017,11 +1017,11 @@ REPLACE INTO `item_db` VALUES (1819,'Icicle_Fist','Icicle Fist',5,20,NULL,650,80
 REPLACE INTO `item_db` VALUES (1820,'Electric_Fist','Electric Fist',5,20,NULL,650,80,NULL,1,3,0x00008100,7,2,2,3,75,1,12,'bonus3 bAutoSpell,"SA_LIGHTNINGLOADER",5,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1821,'Seismic_Fist','Seismic Fist',5,20,NULL,650,80,NULL,1,3,0x00008100,7,2,2,3,75,1,12,'bonus3 bAutoSpell,"SA_SEISMICWEAPON",5,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1822,'Combo_Battle_Glove','Combo Battle Glove',5,20,NULL,500,30,NULL,1,4,0x00008100,7,2,2,3,60,1,12,'bonus2 bSkillAtk,"MO_TRIPLEATTACK",15; bonus2 bSkillAtk,"MO_CHAINCOMBO",15; bonus2 bSkillAtk,"MO_COMBOFINISH",20;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1823,'BF_Knuckle1','Valorous Battle Fist',5,20,NULL,0,30,NULL,1,0,0x00008100,7,2,2,3,80,1,12,'bonus bStr,2; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus4 bAutoSpell,"CH_SOULCOLLECT",1,5,0; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1823,'BF_Knuckle1','Valorous Battle Fist',5,20,NULL,0,30,NULL,1,0,0x00008100,7,2,2,3,80,1,12,'bonus bStr,2; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus4 bAutoSpell,"CH_SOULCOLLECT",1,5,0; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1824,'BF_Knuckle2','Brave Battle Fist',5,20,NULL,0,30,NULL,1,0,0x00008100,7,2,2,3,80,1,12,'bonus bStr,2; bonus bInt,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bCastrate,"MO_EXTREMITYFIST",-25; autobonus "{ bonus2 bCastrate,\\\"MO_EXTREMITYFIST\\\",-100; }",50,6000,BF_WEAPON,"{ specialeffect2 EF_SUFFRAGIUM; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1825,'Horn_Of_Hilthrion','Horn of Hillslion',5,20,NULL,600,95,NULL,1,3,0x00008000,2,2,2,3,60,1,12,'bonus3 bAutoSpell,"NPC_CRITICALWOUND",1,100; bonus4 bAutoSpellOnSkill,"CH_PALMSTRIKE","MO_INVESTIGATE",1,100; bonus3 bAutoSpell,"MO_CALLSPIRITS",5,100;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1826,'Krieger_Knuckle1','Glorious Claw',5,20,NULL,0,30,NULL,1,0,0x00008100,7,2,2,4,80,1,12,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) { bonus3 bAutoSpell,"MO_INVESTIGATE",5,(getrefine()*10-50); bonus3 bAutoSpell,"AL_DECAGI",1,(getrefine()*10-50); }',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1827,'Krieger_Knuckle2','Glorious Fist',5,20,NULL,0,30,NULL,1,0,0x00008100,7,2,2,4,80,1,12,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) { bonus2 bCastrate,"MO_EXTREMITYFIST",-100; bonus4 bautospellonskill,"MO_EXPLOSIONSPIRITS","CH_SOULCOLLECT",1,1000; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1826,'Krieger_Knuckle1','Glorious Claw',5,20,NULL,0,30,NULL,1,0,0x00008100,7,2,2,4,80,1,12,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) { bonus3 bAutoSpell,"MO_INVESTIGATE",5,(getrefine()*10-50); bonus3 bAutoSpell,"AL_DECAGI",1,(getrefine()*10-50); }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1827,'Krieger_Knuckle2','Glorious Fist',5,20,NULL,0,30,NULL,1,0,0x00008100,7,2,2,4,80,1,12,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) { bonus2 bCastrate,"MO_EXTREMITYFIST",-100; bonus4 bautospellonskill,"MO_EXPLOSIONSPIRITS","CH_SOULCOLLECT",1,1000; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1828,'Monk_Knuckle','Monk Knuckle',5,20,NULL,0,150,NULL,1,0,0x00008100,7,2,2,4,0,0,12,'bonus bInt,2; bonus2 bSkillAtk,"MO_FINGEROFFENSIVE",25;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1829,'Fist_C','Fist',5,0,NULL,0,150,NULL,1,0,0x00008100,7,2,2,3,1,0,12,'bonus2 bAddSize,Size_All,40;',NULL,NULL);
 # Instruments
@@ -1047,11 +1047,11 @@ REPLACE INTO `item_db` VALUES (1919,'Base_Guitar','Bass Guitar',5,20,NULL,1500,1
 REPLACE INTO `item_db` VALUES (1920,'Berserk_Guitar','Berserk Guitar',5,20,NULL,1800,10,NULL,1,0,0x00080000,2,1,2,4,70,1,13,'bonus bAspdRate,100; bonus bHPrecovRate,-100; bonus2 bHPLossRate,50,5000; bonus bDex,-readparam(bDex);',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1921,'Guh_Moon_Gom','Gun Moon Gom',5,20,NULL,0,120,NULL,1,0,0x00080000,7,1,2,1,0,0,13,'bonus2 bAddClass,Class_All,50;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1922,'Oriental_Lute_','Oriental Lute',5,20,NULL,1200,150,NULL,1,2,0x00080000,7,1,2,4,65,1,13,'bonus2 bSkillAtk,"CG_ARROWVULCAN",10; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1923,'BF_Instrument1','Valorous Battlefield Guitar',5,20,NULL,0,50,NULL,1,0,0x00080000,7,1,2,3,80,1,13,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1923,'BF_Instrument1','Valorous Battlefield Guitar',5,20,NULL,0,50,NULL,1,0,0x00080000,7,1,2,3,80,1,13,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1924,'BF_Instrument2','Brave Battlefield Guitar',5,20,NULL,0,50,NULL,1,0,0x00080000,7,1,2,3,80,1,13,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bSkillAtk,"CG_ARROWVULCAN",20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1925,'Cello','Cello',5,20,NULL,700,110,NULL,1,3,0x00080000,2,1,2,3,70,1,13,'bonus bAgi,2; bonus bDex,3; bonus2 bAddSkillBlow,"BA_MUSICALSTRIKE",2; bonus2 bAddSkillBlow,"CG_ARROWVULCAN",3;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1926,'Harp_Of_Nepenthes','Harp of Nepenthes',5,20,NULL,1000,120,NULL,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; }',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1927,'Krieger_Instrument1','Glorious Guitar',5,20,NULL,0,50,NULL,1,0,0x00080000,7,1,2,4,80,1,13,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1927,'Krieger_Instrument1','Glorious Guitar',5,20,NULL,0,50,NULL,1,0,0x00080000,7,1,2,4,80,1,13,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1928,'Berserk_Guitar_I','Spirited Guitar',5,0,NULL,0,40,NULL,1,0,0x00080000,2,1,2,4,0,0,13,'bonus bAspdRate,100; bonus bHPrecovRate,-100; bonus2 bHPLossRate,50,5000; bonus bDex,-readparam(bDex);',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1929,'Guitar_C','Guitar',5,0,NULL,0,177,NULL,1,0,0x00080000,7,1,2,3,1,0,13,'bonus2 bAddSize,Size_All,40;',NULL,NULL);
 # Whips
@@ -1082,11 +1082,11 @@ REPLACE INTO `item_db` VALUES (1973,'Sea_Witch_Foot','Sea Witch\'s Foot',5,20,NU
 REPLACE INTO `item_db` VALUES (1974,'Carrot_Whip','Carrot Whip',5,20,NULL,1300,185,NULL,2,0,0x00080000,2,0,2,4,70,1,14,'if(getrefine()>0) bonus3 bAutoSpell,"AL_INCAGI",getrefine(),10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1975,'Queen_Is_Whip','Queen Is Whip',5,20,NULL,0,120,NULL,2,0,0x00080000,7,0,2,1,0,0,14,'bonus2 bAddClass,Class_All,50;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1976,'Queen\'s_Whip_','Queen\'s Whip',5,20,NULL,1100,150,NULL,2,2,0x00080000,7,0,2,4,65,1,14,'bonus2 bSkillAtk,"CG_ARROWVULCAN",10; bonus2 bSkillAtk,"DC_THROWARROW",10;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1977,'BF_Whip1','Valorous Battle Lariat',5,20,NULL,0,50,NULL,2,0,0x00080000,7,0,2,3,80,1,14,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1977,'BF_Whip1','Valorous Battle Lariat',5,20,NULL,0,50,NULL,2,0,0x00080000,7,0,2,3,80,1,14,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1978,'BF_Whip2','Brave Battle Lariat',5,20,NULL,0,50,NULL,2,0,0x00080000,7,0,2,3,80,1,14,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bSkillAtk,"CG_ARROWVULCAN",20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1979,'Stem_Of_Nepenthes','Stem of Nepenthes',5,20,NULL,1000,120,NULL,2,2,0x00080000,2,0,2,4,60,1,14,'bonus bInt,2; if( getrefine()>=9 ) { bonus3 bAddEffOnSkill,"DC_THROWARROW",Eff_Freeze,2000; } else { bonus3 bAddEffOnSkill,"DC_THROWARROW",Eff_Freeze,1000; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1980,'Whip_Of_Balance','Whip of Balance',5,20,NULL,700,110,NULL,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;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (1981,'Krieger_Whip1','Glorious Lariat',5,20,NULL,0,50,NULL,2,0,0x00080000,7,0,2,4,80,1,14,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (1981,'Krieger_Whip1','Glorious Lariat',5,20,NULL,0,50,NULL,2,0,0x00080000,7,0,2,4,80,1,14,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"CG_ARROWVULCAN","CG_TAROTCARD",5,100;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1982,'Phenomena_Whip','Phenomena Whip',5,20,NULL,0,160,NULL,2,0,0x00080000,7,0,2,4,0,0,14,'bonus bDex,2; bonus2 bSkillAtk,"DC_THROWARROW",25;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (1983,'Rante_C','Rante Whip',5,0,NULL,0,170,NULL,2,0,0x00080000,7,0,2,3,1,0,14,'bonus2 bAddSize,Size_All,40;',NULL,NULL);
 # Additional 2-Handed Staffs
@@ -2021,7 +2021,7 @@ REPLACE INTO `item_db` VALUES (4361,'B_Harword_Card','MasterSmith Card',6,20,NUL
 REPLACE INTO `item_db` VALUES (4362,'Harword_Card','Howard Alt-Eisen Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bAspdRate,-5; bonus bHit,30;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4363,'B_Magaleta_Card','High Priest Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus5 bAutoSpellWhenHit,"HP_ASSUMPTIO",1,50,BF_WEAPON|BF_MAGIC,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4364,'Magaleta_Card','Margaretha Sorin Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bInt,1; bonus5 bAutoSpellWhenHit,"PR_LEXDIVINA",5,150,BF_MAGIC,1;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (4365,'B_Katrinn_Card','High Wizard Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bIgnoreMDefClass,Class_Normal; bonus bCastrate,100; bonus bSPrecovRate,-100;',NULL,'heal 0,-2000;');
+REPLACE INTO `item_db` VALUES (4365,'B_Katrinn_Card','High Wizard Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus2 bIgnoreMdefClassRate,Class_Normal,100; bonus bCastrate,100; bonus bSPrecovRate,-100;',NULL,'heal 0,-2000;');
 REPLACE INTO `item_db` VALUES (4366,'Katrinn_Card','Kathryne Keyron Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bCastrate,getrefine()*-1; if(getrefine()>=9) { bonus bMatkRate,2; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4367,'B_Shecil_Card','Sniper Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bHpDrainRate,50,20; bonus bHPrecovRate,-10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (4368,'Shecil_Card','Cecil Damon Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bAspdRate,5; bonus bHit,-30;',NULL,NULL);
@@ -5377,13 +5377,13 @@ REPLACE INTO `item_db` VALUES (13032,'Mail_Breaker_','Mailbreaker',5,20,NULL,100
 REPLACE INTO `item_db` VALUES (13033,'Assasin_Dagger_','Assassin Dagger',5,20,NULL,600,140,NULL,1,1,0x00001000,7,2,2,4,36,1,1,'bonus bMaxHPrate,20; bonus bMaxSPrate,15; bonus bAspdRate,2; bonus bAtkEle,Ele_Dark;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13034,'Twilight_Desert','Desert Twilight',5,20,NULL,600,130,NULL,1,2,0x00001000,2,2,2,2,70,1,1,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (13035,'Sandstorm','Sandstorm',5,20,NULL,600,50,NULL,1,4,0x00001000,2,2,2,2,70,1,1,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (13036,'BF_Dagger1','Brave Assassin\'s Damascus',5,20,NULL,0,120,NULL,1,0,0xFE9F7EEF,7,2,2,3,80,1,1,'bonus bStr,1; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(Class==Job_Ninja||Class==Job_Rogue||Class==Job_Stalker) bonus bMatkRate,15;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13036,'BF_Dagger1','Brave Assassin\'s Damascus',5,20,NULL,0,120,NULL,1,0,0xFE9F7EEF,7,2,2,3,80,1,1,'bonus bStr,1; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(Class==Job_Ninja||Class==Job_Rogue||Class==Job_Stalker) bonus bMatkRate,15;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13037,'BF_Dagger2','Valorous Assassin\'s Damascus',5,20,NULL,0,120,NULL,1,0,0xFE9F7EEF,7,2,2,3,80,1,1,'bonus bStr,1; bonus bAgi,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13038,'Dagger_Of_Hunter','Dagger of Hunter',5,20,NULL,700,120,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13039,'Ivory_Knife','Ivory Knife',5,20,NULL,700,130,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13040,'N_Cutter','Novice Cutter',5,0,NULL,0,50,NULL,1,3,0xFE9F7EEF,7,2,2,1,1,0,1,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (13041,'N_Main_Gauche','Novice Main Gauche',5,0,NULL,0,63,NULL,1,3,0xFE9F7EEF,7,2,2,1,1,0,1,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (13042,'Krieger_Dagger1','Glorious Gladius',5,20,NULL,0,120,NULL,1,0,0xFE9F7EEF,7,2,2,4,80,1,1,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus3 bAutoSpell,"PR_LEXDIVINA",1,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"RG_RAID","NPC_WIDEBLEEDING",1,250;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13042,'Krieger_Dagger1','Glorious Gladius',5,20,NULL,0,120,NULL,1,0,0xFE9F7EEF,7,2,2,4,80,1,1,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus3 bAutoSpell,"PR_LEXDIVINA",1,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,"RG_RAID","NPC_WIDEBLEEDING",1,250;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13043,'Fortune_Sword_I','Fortune Sword',5,0,NULL,0,120,NULL,1,0,0x028F5EEE,7,2,2,4,0,0,1,'bonus bLuk,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13044,'House_Auger_I','Ice Pick',5,0,NULL,0,105,NULL,1,0,0x028F5EEE,7,2,2,4,0,0,1,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (13045,'Kamaitachi_I','Kamaitachi',5,0,NULL,0,155,NULL,2,0,0x02000000,7,2,2,4,0,0,1,NULL,NULL,NULL);
@@ -5399,9 +5399,9 @@ REPLACE INTO `item_db` VALUES (13104,'The_Garrison','Garrison',5,48000,NULL,500,
 REPLACE INTO `item_db` VALUES (13105,'The_Garrison_','Garrison',5,48000,NULL,500,70,NULL,7,2,0x41000000,7,2,34,2,55,1,17,'bonus bHit,-10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13106,'Gold_Lux','Gold Lux',5,100000,NULL,500,20,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13107,'Wasteland_Outlaw','Wasteland\'s Outlaw',5,20,NULL,580,68,NULL,7,2,0x41000000,7,2,34,3,70,1,17,'bonus bHit,readparam(bAgi)/10; bonus bAspdRate,readparam(bAgi)/14;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13108,'BF_Pistol1','Soldier Revolver',5,0,NULL,0,70,NULL,7,0,0x41000000,7,2,34,3,80,1,17,'bonus bDex,2; bonus bHit,-10; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; autobonus "{ bonus bAspdRate,100; }",10,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13108,'BF_Pistol1','Soldier Revolver',5,0,NULL,0,70,NULL,7,0,0x41000000,7,2,34,3,80,1,17,'bonus bDex,2; bonus bHit,-10; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; autobonus "{ bonus bAspdRate,100; }",10,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13109,'Wasteland_Outlaw_C','Wasteland Outlaw',5,20,NULL,0,100,NULL,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;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13110,'Krieger_Pistol1','Glorious Pistol',5,0,NULL,0,80,NULL,7,0,0x41000000,7,2,34,4,80,1,17,'bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5){ bonus2 bAddRace,RC_DemiHuman,pow(getrefine()-4,2); bonus2 bAddRace,RC_Player,pow(getrefine()-4,2); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,"GS_RAPIDSHOWER","GS_GLITTERING",1,1000; bonus2 bSkillAtk,"GS_RAPIDSHOWER",getrefine()*2; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13110,'Krieger_Pistol1','Glorious Pistol',5,0,NULL,0,80,NULL,7,0,0x41000000,7,2,34,4,80,1,17,'bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5){ bonus2 bAddRace,RC_DemiHuman,pow(getrefine()-4,2); bonus2 bAddRace,RC_Player,pow(getrefine()-4,2); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,"GS_RAPIDSHOWER","GS_GLITTERING",1,1000; bonus2 bSkillAtk,"GS_RAPIDSHOWER",getrefine()*2; }',NULL,NULL);
 #13111,Sharpshooter_Revolver
 REPLACE INTO `item_db` VALUES (13112,'P_Revolver1','Eden Revlover I',5,0,NULL,0,4,NULL,7,0,0x41000000,7,2,34,1,26,0,17,'bonus bHit,-5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13113,'P_Revolver2','Eden Revlover II',5,0,NULL,0,60,NULL,7,0,0x41000000,7,2,34,1,40,0,17,'bonus bHit,-5;',NULL,NULL);
@@ -5427,15 +5427,15 @@ REPLACE INTO `item_db` VALUES (13167,'Gate_KeeperDD','Gate Keeper-DD',5,72000,NU
 REPLACE INTO `item_db` VALUES (13168,'Thunder_P','Thunder P',5,76000,NULL,700,80,NULL,9,1,0x41000000,7,2,34,3,70,1,20,'bonus bSplashRange,1; bonus bHit,-5; bonus bAspdRate,20;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13169,'Thunder_P_','Thunder P',5,76000,NULL,700,80,NULL,9,2,0x41000000,7,2,34,3,70,1,20,'bonus bSplashRange,1; bonus bHit,-5; bonus bAspdRate,20;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13170,'Lever_Action_Rifle','Lever Action Rifle',5,20,NULL,770,138,NULL,9,2,0x41000000,7,2,34,3,70,1,18,'bonus bHit,20; bonus bCritical,50; bonus bAspdRate,-5;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13171,'BF_Rifle1','Soldier Rifle',5,0,NULL,0,50,NULL,9,0,0x41000000,7,2,34,3,80,1,18,'bonus bDex,2; bonus bHit,10; bonus bCritical,10; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bCastrate,"GS_TRACKING",-25; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13172,'BF_Gatling_Gun1','Soldier Gatling Gun',5,0,NULL,0,80,NULL,9,0,0x41000000,7,2,34,3,80,1,19,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,120,1000; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13173,'BF_Shotgun1','Soldier Shotgun',5,0,NULL,0,100,NULL,9,0,0x41000000,7,2,34,3,80,1,20,'bonus bDex,2; bonus bSplashRange,1; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,100,1000; }",30,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13174,'BF_Launcher1','Soldier Grenade Launcher',5,0,NULL,0,300,NULL,9,0,0x41000000,7,2,34,3,80,1,21,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; autobonus "{ bonus bBaseAtk,300; bonus2 bHPLossRate,120,1000; }",30,9000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13171,'BF_Rifle1','Soldier Rifle',5,0,NULL,0,50,NULL,9,0,0x41000000,7,2,34,3,80,1,18,'bonus bDex,2; bonus bHit,10; bonus bCritical,10; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bCastrate,"GS_TRACKING",-25; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13172,'BF_Gatling_Gun1','Soldier Gatling Gun',5,0,NULL,0,80,NULL,9,0,0x41000000,7,2,34,3,80,1,19,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,120,1000; }",10,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13173,'BF_Shotgun1','Soldier Shotgun',5,0,NULL,0,100,NULL,9,0,0x41000000,7,2,34,3,80,1,20,'bonus bDex,2; bonus bSplashRange,1; bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,100,1000; }",30,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13174,'BF_Launcher1','Soldier Grenade Launcher',5,0,NULL,0,300,NULL,9,0,0x41000000,7,2,34,3,80,1,21,'bonus bDex,2; bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; autobonus "{ bonus bBaseAtk,300; bonus2 bHPLossRate,120,1000; }",30,9000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13175,'Lever_Action_Rifle_C','Lever Action Rifle',5,20,NULL,0,170,NULL,9,0,0x41000000,7,2,34,3,0,0,18,'bonus bHit,20; bonus bCritical,50; bonus bAspdRate,-5;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13176,'Krieger_Rifle1','Glorious Rifle',5,0,NULL,0,90,NULL,9,0,0x41000000,7,2,34,4,80,1,18,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) { bonus2 bCastrate,"GS_TRACKING",25; bonus2 bSkillAtk,"GS_TRACKING",getrefine() * 3; }',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13177,'Krieger_Gatling1','Glorious Gatling Gun',5,0,NULL,0,90,NULL,9,0,0x41000000,7,2,34,4,80,1,19,'bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) {bonus2 bAddClass,Class_All,getrefine(); }',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13178,'Krieger_Shotgun1','Glorious Shotgun',5,0,NULL,0,110,NULL,9,0,0x41000000,7,2,34,4,80,1,20,'bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bSplashRange,1; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) { bonus2 bSkillAtk,"GS_SPREADATTACK",getrefine() * 2; bonus3 bAddEffOnSkill,"GS_SPREADATTACK",Eff_Stun,2000; }',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13179,'Krieger_Launcher1','Glorious Grenade Launcher',5,0,NULL,0,330,NULL,9,0,0x41000000,7,2,34,4,80,1,21,'bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,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; }"; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13176,'Krieger_Rifle1','Glorious Rifle',5,0,NULL,0,90,NULL,9,0,0x41000000,7,2,34,4,80,1,18,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) { bonus2 bCastrate,"GS_TRACKING",25; bonus2 bSkillAtk,"GS_TRACKING",getrefine() * 3; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13177,'Krieger_Gatling1','Glorious Gatling Gun',5,0,NULL,0,90,NULL,9,0,0x41000000,7,2,34,4,80,1,19,'bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) {bonus2 bAddClass,Class_All,getrefine(); }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13178,'Krieger_Shotgun1','Glorious Shotgun',5,0,NULL,0,110,NULL,9,0,0x41000000,7,2,34,4,80,1,20,'bonus2 bAddRace,RC_DemiHuman,55; bonus2 bAddRace,RC_Player,55; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bSplashRange,1; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) { bonus2 bSkillAtk,"GS_SPREADATTACK",getrefine() * 2; bonus3 bAddEffOnSkill,"GS_SPREADATTACK",Eff_Stun,2000; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13179,'Krieger_Launcher1','Glorious Grenade Launcher',5,0,NULL,0,330,NULL,9,0,0x41000000,7,2,34,4,80,1,21,'bonus2 bAddRace,RC_DemiHuman,35; bonus2 bAddRace,RC_Player,35; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus2 bSkillAtk,"GS_TRIPLEACTION",30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,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; }"; }',NULL,NULL);
 # Bullets
 REPLACE INTO `item_db` VALUES (13200,'Bullet','Bullet',10,1,NULL,2,10,NULL,NULL,NULL,0x41000000,7,2,32768,NULL,1,NULL,3,NULL,NULL,NULL);
 REPLACE INTO `item_db` VALUES (13201,'Silver_Bullet','Silver Bullet',10,15,NULL,2,15,NULL,NULL,NULL,0x41000000,7,2,32768,NULL,1,NULL,3,'bonus bAtkEle,Ele_Holy;',NULL,NULL);
@@ -5494,9 +5494,9 @@ REPLACE INTO `item_db` VALUES (13301,'Huuma_Giant_Wheel','Huuma Giant Wheel Shur
 REPLACE INTO `item_db` VALUES (13302,'Huuma_Giant_Wheel_','Huuma Giant Wheel Shuriken',5,40000,NULL,2500,50,NULL,1,4,0x02000000,7,2,34,4,42,1,22,'bonus bUnbreakableWeapon,0; bonus2 bAddEff,Eff_Bleeding,100;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13303,'Huuma_Blaze','Huuma Blaze Shuriken',5,78000,NULL,1500,185,NULL,1,0,0x02000000,7,2,34,4,55,1,22,'bonus bUnbreakableWeapon,0; bonus bAtkEle,Ele_Fire; bonus bDex,-2; bonus3 bAutoSpell,"MG_FIREBALL",5,30;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13304,'Huuma_Calm_Mind','Huuma Calm Mind',5,20,NULL,1550,112,NULL,1,2,0x02000000,7,2,34,3,70,1,22,'bonus bUnbreakableWeapon,0; bonus2 bSkillAtk,"NJ_HUUMA",30; bonus bNoCastCancel,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13305,'BF_Huuma_Shuriken1','Brave Huuma Front Shuriken',5,20,NULL,0,55,NULL,1,0,0x02000000,7,2,34,3,80,1,22,'bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13305,'BF_Huuma_Shuriken1','Brave Huuma Front Shuriken',5,20,NULL,0,55,NULL,1,0,0x02000000,7,2,34,3,80,1,22,'bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13306,'BF_Huuma_Shuriken2','Valorous Huuma Front Shuriken',5,20,NULL,0,55,NULL,1,0,0x02000000,7,2,34,3,80,1,22,'bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; autobonus "{ bonus2 bSkillAtk,\\\"NJ_HUUMA\\\",100; bonus2 bSkillAtk,\\\"NJ_ISSEN\\\",100; }",50,10000,BF_WEAPON,"{specialeffect2 EF_POTION_BERSERK; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13307,'Krieger_Huuma_Shuriken1','Glorious Shuriken',5,20,NULL,0,55,NULL,1,0,0x02000000,7,2,34,4,80,1,22,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,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 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,"NJ_ISSEN","AL_HEAL",10,1000,1; bonus4 bAutoSpellOnSkill,"NJ_HUUMA","NPC_CRITICALWOUND",2,200; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13307,'Krieger_Huuma_Shuriken1','Glorious Shuriken',5,20,NULL,0,55,NULL,1,0,0x02000000,7,2,34,4,80,1,22,'bonus2 bAddRace,RC_DemiHuman,95; bonus2 bAddRace,RC_Player,95; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,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 bAddRace,RC_Player,(getrefine()-3)*(getrefine()-3); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,"NJ_ISSEN","AL_HEAL",10,1000,1; bonus4 bAutoSpellOnSkill,"NJ_HUUMA","NPC_CRITICALWOUND",2,200; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13308,'Huuma_Blaze_I','Huuma Blaze Shuriken',5,0,NULL,0,230,NULL,1,0,0x02000000,7,2,34,4,0,0,22,'bonus bUnbreakableWeapon,0; bonus bAtkEle,Ele_Fire; bonus bDex,2;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13309,'Huuma_Giant_Wheel_C','Huuma Giant Wheel Shuriken',5,0,NULL,0,99,NULL,1,0,0x02000000,7,2,34,4,1,0,22,'bonus2 bAddSize,Size_All,80;',NULL,NULL);
 # More 1-Handed Swords
@@ -5510,13 +5510,13 @@ REPLACE INTO `item_db` VALUES (13406,'Edger','Edger',5,20,NULL,0,120,NULL,1,0,0x
 REPLACE INTO `item_db` VALUES (13407,'Nagan_C','Refined Nagan',5,1,NULL,0,148,NULL,1,0,0x000654E2,7,2,2,4,0,0,2,'skill "TF_DOUBLE",5; bonus bDoubleRate,25; bonus2 bAddRace,RC_DemiHuman,40; bonus2 bAddRace,RC_Player,40;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13408,'Fire_Brand_C','Refined Fireblend',5,1,NULL,0,120,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13409,'Immaterial_Sword_C','Refined Immaterial Sword',5,1,NULL,0,160,NULL,1,0,0x000654E2,7,2,2,4,0,0,2,'bonus bAtkEle,Ele_Ghost; bonus2 bSPVanishRate,45,30; bonus bSPDrainValue,-1; bonus bUnbreakableWeapon,0;',NULL,NULL);
-REPLACE INTO `item_db` VALUES (13410,'BF_Sword1','Valorous Gladiator Blade',5,20,NULL,0,115,NULL,1,0,0x000654E3,7,2,2,3,80,1,2,'bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13410,'BF_Sword1','Valorous Gladiator Blade',5,20,NULL,0,115,NULL,1,0,0x000654E3,7,2,2,3,80,1,2,'bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13411,'BF_Sword2','Brave Gladiator Blade',5,20,NULL,0,115,NULL,1,0,0x000654E3,7,2,2,3,80,1,2,'bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus bMatkRate,10; bonus bUnbreakableWeapon,0;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13412,'Twin_Edge_B','Twin Edge of Naght Sieger',5,20,NULL,1500,150,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13413,'Twin_Edge_R','Twin Edge of Naght Sieger',5,20,NULL,1500,160,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13414,'Elemental_Sword','Elemental Sword',5,20,NULL,1200,105,NULL,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;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13415,'N_Falchion','Novice Falchion',5,0,NULL,0,59,NULL,1,3,0x000654E3,7,2,2,1,2,0,2,NULL,NULL,NULL);
-REPLACE INTO `item_db` VALUES (13416,'Krieger_Onehand_Sword1','Glorious Flamberge',5,20,NULL,0,130,NULL,1,0,0x000654E3,7,2,2,4,80,1,2,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRate,RC_DemiHuman,20; bonus2 bIgnoreDefRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRate,RC_DemiHuman,5; bonus2 bIgnoreDefRate,RC_Player,5; } if(getrefine()>6) bonus bAspdRate,5; if(getrefine()>8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,"SM_BASH","NPC_CRITICALWOUND",2,200; }',NULL,NULL);
+REPLACE INTO `item_db` VALUES (13416,'Krieger_Onehand_Sword1','Glorious Flamberge',5,20,NULL,0,130,NULL,1,0,0x000654E3,7,2,2,4,80,1,2,'bonus2 bAddRace,RC_DemiHuman,75; bonus2 bAddRace,RC_Player,75; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,20; bonus2 bIgnoreDefRaceRate,RC_Player,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>6) bonus bAspdRate,5; if(getrefine()>8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,"SM_BASH","NPC_CRITICALWOUND",2,200; }',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13417,'Krieger_Onehand_Sword2','Glorious Rapier',5,20,NULL,0,130,NULL,1,0,0x000654E3,7,2,2,4,80,1,2,'bonus bInt,getrefine()-5; bonus bMatkRate,10; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus bUseSPrate,-10; if(getrefine()>8) bonus bInt,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13418,'Krieger_Onehand_Sword3','Glorious Holy Avenger',5,20,NULL,0,130,NULL,1,0,0x000444A2,7,2,2,4,80,1,2,'bonus bInt,getrefine()-5; bonus bMatkRate,10; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus bUseSPrate,-10; if(getrefine()>8) bonus4 bAutoSpellOnSkill,"PA_PRESSURE","PR_LEXDIVINA",1,1000; if(getrefine()>9) bonus bInt,5;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (13419,'Holy_Saber','Holy saber',5,20,NULL,0,160,NULL,1,0,0x000654E2,7,2,2,3,0,0,2,NULL,NULL,NULL);
@@ -6456,7 +6456,7 @@ REPLACE INTO `item_db` VALUES (14607,'Luxurious_Dinner_W','Luxurious Western Foo
 REPLACE INTO `item_db` VALUES (14608,'Luxurious_Dinner_E','Manchu-Han Imperial Feast',2,20000,NULL,1200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_INCALLSTATUS,3600000,6;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (14609,'Spoiled_Cuisine','Spoiled Cuisine',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 10,10;',NULL,NULL);
 # More Armors
-REPLACE INTO `item_db` VALUES (15000,'Bone_Plate','Bone Plate',4,20,NULL,1000,NULL,7,NULL,1,0x000654E2,2,2,16,NULL,85,1,0,'bonus bStr,1; bonus bMdef,3; bonus2 bIgnoreDefRate,RC_DemiHuman,10; bonus2 bIgnoreDefRate,RC_Player,10; bonus2 bIgnoreDefRate,RC_Brute,10; bonus3 bAutoSpellWhenHit,"NPC_WIDEBLEEDING",1,10;',NULL,NULL);
+REPLACE INTO `item_db` VALUES (15000,'Bone_Plate','Bone Plate',4,20,NULL,1000,NULL,7,NULL,1,0x000654E2,2,2,16,NULL,85,1,0,'bonus bStr,1; bonus bMdef,3; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus2 bIgnoreDefRaceRate,RC_Brute,10; bonus3 bAutoSpellWhenHit,"NPC_WIDEBLEEDING",1,10;',NULL,NULL);
 REPLACE INTO `item_db` VALUES (15001,'Odin\'s_Blessing_I','Odin\'s Blessing',4,0,NULL,0,NULL,10,NULL,0,0xFFFFFFFE,7,2,16,NULL,0,0,0,NULL,NULL,NULL);
 # More Maces
 REPLACE INTO `item_db` VALUES (16000,'Erde','Erde',5,20,NULL,500,130,NULL,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;',NULL,NULL);

File diff suppressed because it is too large
+ 341 - 254
sql-files/item_db_re.sql


+ 25 - 0
src/common/utils.c

@@ -324,3 +324,28 @@ unsigned int get_percentage(const unsigned int A, const unsigned int B)
 
 	return (unsigned int)floor(result);
 }
+
+/**
+ * Calculates the Levenshtein distance of two strings.
+ * @author http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#C
+ */
+int levenshtein(const char *s1, const char *s2) {
+	unsigned int s1len, s2len, x, y, lastdiag, olddiag, i;
+	unsigned int *column;
+	s1len = strlen(s1);
+	s2len = strlen(s2);
+	column = malloc((s1len+1) * sizeof(unsigned int));
+	for (y = 1; y <= s1len; y++)
+		column[y] = y;
+	for (x = 1; x <= s2len; x++) {
+		column[0] = x;
+		for (y = 1, lastdiag = x-1; y <= s1len; y++) {
+			olddiag = column[y];
+			column[y] = min(min(column[y] + 1, column[y-1] + 1), lastdiag + (s1[y-1] == s2[x-1] ? 0 : 1));
+			lastdiag = olddiag;
+		}
+	}
+	i = column[s1len];
+	free(column);
+	return i;
+}

+ 2 - 0
src/common/utils.h

@@ -31,4 +31,6 @@ extern uint32 MakeDWord(uint16 word0, uint16 word1);
 
 uint32 date2version(int date);
 
+int levenshtein(const char *s1, const char *s2);
+
 #endif /* _UTILS_H_ */

+ 1 - 1
src/config/core.h

@@ -11,7 +11,7 @@
 /// Max number of items on @autolootid list
 #define AUTOLOOTITEM_SIZE 10
 
-/// The maximum number of atcommand suggestions
+/// The maximum number of atcommand and @warp suggestions
 #define MAX_SUGGESTIONS 10
 
 /// Comment to disable the official walk path

+ 109 - 24
src/map/atcommand.c

@@ -87,6 +87,7 @@ static char atcmd_player_name[NAME_LENGTH];
 static AtCommandInfo* get_atcommandinfo_byname(const char *name); // @help
 static const char* atcommand_checkalias(const char *aliasname); // @help
 static void atcommand_get_suggestions(struct map_session_data* sd, const char *name, bool atcommand); // @help
+static void warp_get_suggestions(struct map_session_data* sd, const char *name); // @rura, @warp, @mapmove
 
 // @commands (script-based)
 struct atcmd_binding_data* get_atcommandbind_byname(const char* name) {
@@ -95,7 +96,7 @@ struct atcmd_binding_data* get_atcommandbind_byname(const char* name) {
 	if( *name == atcommand_symbol || *name == charcommand_symbol )
 		name++; // for backwards compatibility
 
-	ARR_FIND( 0, atcmd_binding_count, i, strcmp(atcmd_binding[i]->command, name) == 0 );
+	ARR_FIND( 0, atcmd_binding_count, i, strcmpi(atcmd_binding[i]->command, name) == 0 );
 
 	return ( i < atcmd_binding_count ) ? atcmd_binding[i] : NULL;
 }
@@ -119,7 +120,7 @@ static const char* atcommand_help_string(const char* command)
 	// convert alias to the real command name
 	command = atcommand_checkalias(command);
 
-	// attept to find the first default help command
+	// attempt to find the first default help command
 	info = config_lookup(&atcommand_config, "help");
 
 	if( info == NULL )
@@ -370,6 +371,77 @@ ACMD_FUNC(send)
 #undef GET_VALUE
 }
 
+/**
+ * Retrieves map name suggestions for a given string.
+ * This will first check if any map names contain the given string, and will
+ *   print out MAX_SUGGESTIONS results if any maps are found.
+ * Otherwise, suggestions will be calculated through Levenshtein distance,
+ *   and up to 5 of the closest matches will be printed.
+ *
+ * @author Euphy
+ */
+static void warp_get_suggestions(struct map_session_data* sd, const char *name) {
+	char buffer[512];
+	int i, count = 0;
+
+	if (strlen(name) < 2)
+		return;
+
+	// build the suggestion string
+	strcpy(buffer, msg_txt(sd, 205)); // Maybe you meant:
+	strcat(buffer, "\n");
+
+	// check for maps that contain string
+	for (i = 0; i < MAX_MAP_PER_SERVER; i++) {
+		if (count < MAX_SUGGESTIONS && strstr(map[i].name, name) != NULL) {
+			strcat(buffer, map[i].name);
+			strcat(buffer, " ");
+			if (++count >= MAX_SUGGESTIONS)
+				break;
+		}
+	}
+
+	// if no maps found, search by edit distance
+	if (!count) {
+		unsigned int distance[MAX_MAP_PER_SERVER][2];
+		int j, min;
+
+		// calculate Levenshtein distance for all maps
+		for (i = 0; i < MAX_MAP_PER_SERVER; i++) {
+			if (strlen(map[i].name) < 4)  // invalid map name?
+				distance[i][0] = INT_MAX;
+			else {
+				distance[i][0] = levenshtein(map[i].name, name);
+				distance[i][1] = i;
+			}
+		}
+
+		// selection sort elements as needed
+		count = min(MAX_SUGGESTIONS, 5);  // results past 5 aren't worth showing
+		for (i = 0; i < count; i++) {
+			min = i;
+			for (j = i+1; j < MAX_MAP_PER_SERVER; j++) {
+				if (distance[j][0] < distance[min][0])
+					min = j;
+			}
+
+			// print map name
+			if (distance[min][0] > 4) {  // awful results, don't bother
+				if (!i) return;
+				break;
+			}
+			strcat(buffer, map[distance[min][1]].name);
+			strcat(buffer, " ");
+
+			// swap elements
+			swap(distance[i][0], distance[min][0]);
+			swap(distance[i][1], distance[min][1]);
+		}
+	}
+
+	clif_displaymessage(sd->fd, buffer);
+}
+
 /*==========================================
  * @rura, @warp, @mapmove
  *------------------------------------------*/
@@ -397,6 +469,10 @@ ACMD_FUNC(mapmove)
 
 	if (!mapindex) { // m < 0 means on different server! [Kevin]
 		clif_displaymessage(fd, msg_txt(sd,1)); // Map not found.
+
+		if (battle_config.warp_suggestions_enabled)
+			warp_get_suggestions(sd, map_name);
+
 		return -1;
 	}
 
@@ -1317,7 +1393,7 @@ ACMD_FUNC(baselevelup)
 			clif_displaymessage(fd, msg_txt(sd,47)); // Base level can't go any higher.
 			return -1;
 		} // End Addition
-		if ((unsigned int)level > pc_maxbaselv(sd) || (unsigned int)level > pc_maxbaselv(sd) - sd->status.base_level) // fix positiv overflow
+		if ((unsigned int)level > pc_maxbaselv(sd) || (unsigned int)level > pc_maxbaselv(sd) - sd->status.base_level) // fix positive overflow
 			level = pc_maxbaselv(sd) - sd->status.base_level;
 		for (i = 0; i < level; i++)
 			status_point += pc_gets_status_point(sd->status.base_level + i);
@@ -1377,7 +1453,7 @@ ACMD_FUNC(joblevelup)
 			clif_displaymessage(fd, msg_txt(sd,23)); // Job level can't go any higher.
 			return -1;
 		}
-		if ((unsigned int)level > pc_maxjoblv(sd) || (unsigned int)level > pc_maxjoblv(sd) - sd->status.job_level) // fix positiv overflow
+		if ((unsigned int)level > pc_maxjoblv(sd) || (unsigned int)level > pc_maxjoblv(sd) - sd->status.job_level) // fix positive overflow
 			level = pc_maxjoblv(sd) - sd->status.job_level;
 		sd->status.job_level += (unsigned int)level;
 		sd->status.skill_point += level;
@@ -1389,11 +1465,11 @@ ACMD_FUNC(joblevelup)
 			return -1;
 		}
 		level *=-1;
-		if ((unsigned int)level >= sd->status.job_level) // fix negativ overflow
+		if ((unsigned int)level >= sd->status.job_level) // fix negative overflow
 			level = sd->status.job_level-1;
 		sd->status.job_level -= (unsigned int)level;
 		if (sd->status.skill_point < level)
-			pc_resetskill(sd,0);	//Reset skills since we need to substract more points.
+			pc_resetskill(sd,0);	//Reset skills since we need to subtract more points.
 		if (sd->status.skill_point < level)
 			sd->status.skill_point = 0;
 		else
@@ -1632,7 +1708,7 @@ ACMD_FUNC(model)
 			pc_changelook(sd, LOOK_HAIR, hair_style);
 			pc_changelook(sd, LOOK_HAIR_COLOR, hair_color);
 			pc_changelook(sd, LOOK_CLOTHES_COLOR, cloth_color);
-			clif_displaymessage(fd, msg_txt(sd,36)); // Appearence changed.
+			clif_displaymessage(fd, msg_txt(sd,36)); // Appearance changed.
 	} else {
 		clif_displaymessage(fd, msg_txt(sd,37)); // An invalid number was specified.
 		return -1;
@@ -1659,7 +1735,7 @@ ACMD_FUNC(dye)
 
 	if (cloth_color >= MIN_CLOTH_COLOR && cloth_color <= MAX_CLOTH_COLOR) {
 		pc_changelook(sd, LOOK_CLOTHES_COLOR, cloth_color);
-		clif_displaymessage(fd, msg_txt(sd,36)); // Appearence changed.
+		clif_displaymessage(fd, msg_txt(sd,36)); // Appearance changed.
 	} else {
 		clif_displaymessage(fd, msg_txt(sd,37)); // An invalid number was specified.
 		return -1;
@@ -1686,7 +1762,7 @@ ACMD_FUNC(hair_style)
 
 	if (hair_style >= MIN_HAIR_STYLE && hair_style <= MAX_HAIR_STYLE) {
 			pc_changelook(sd, LOOK_HAIR, hair_style);
-			clif_displaymessage(fd, msg_txt(sd,36)); // Appearence changed.
+			clif_displaymessage(fd, msg_txt(sd,36)); // Appearance changed.
 	} else {
 		clif_displaymessage(fd, msg_txt(sd,37)); // An invalid number was specified.
 		return -1;
@@ -1713,7 +1789,7 @@ ACMD_FUNC(hair_color)
 
 	if (hair_color >= MIN_HAIR_COLOR && hair_color <= MAX_HAIR_COLOR) {
 			pc_changelook(sd, LOOK_HAIR_COLOR, hair_color);
-			clif_displaymessage(fd, msg_txt(sd,36)); // Appearence changed.
+			clif_displaymessage(fd, msg_txt(sd,36)); // Appearance changed.
 	} else {
 		clif_displaymessage(fd, msg_txt(sd,37)); // An invalid number was specified.
 		return -1;
@@ -2568,9 +2644,9 @@ ACMD_FUNC(guildlevelup) {
 	//}
 
 	added_level = (short)level;
-	if (level > 0 && (level > MAX_GUILDLEVEL || added_level > ((short)MAX_GUILDLEVEL - guild_info->guild_lv))) // fix positiv overflow
+	if (level > 0 && (level > MAX_GUILDLEVEL || added_level > ((short)MAX_GUILDLEVEL - guild_info->guild_lv))) // fix positive overflow
 		added_level = (short)MAX_GUILDLEVEL - guild_info->guild_lv;
-	else if (level < 0 && (level < -MAX_GUILDLEVEL || added_level < (1 - guild_info->guild_lv))) // fix negativ overflow
+	else if (level < 0 && (level < -MAX_GUILDLEVEL || added_level < (1 - guild_info->guild_lv))) // fix negative overflow
 		added_level = 1 - guild_info->guild_lv;
 
 	if (added_level != 0) {
@@ -3437,7 +3513,7 @@ ACMD_FUNC(recallall)
 	memset(atcmd_output, '\0', sizeof(atcmd_output));
 
 	if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
-		clif_displaymessage(fd, msg_txt(sd,1032)); // You are not authorized to warp somenone to your current map.
+		clif_displaymessage(fd, msg_txt(sd,1032)); // You are not authorized to warp someone to your current map.
 		return -1;
 	}
 
@@ -3492,7 +3568,7 @@ ACMD_FUNC(guildrecall)
 	}
 
 	if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
-		clif_displaymessage(fd, msg_txt(sd,1032)); // You are not authorized to warp somenone to your current map.
+		clif_displaymessage(fd, msg_txt(sd,1032)); // You are not authorized to warp someone to your current map.
 		return -1;
 	}
 
@@ -3551,7 +3627,7 @@ ACMD_FUNC(partyrecall)
 	}
 
 	if (sd->bl.m >= 0 && map[sd->bl.m].flag.nowarpto && !pc_has_permission(sd, PC_PERM_WARP_ANYWHERE)) {
-		clif_displaymessage(fd, msg_txt(sd,1032)); // You are not authorized to warp somenone to your current map.
+		clif_displaymessage(fd, msg_txt(sd,1032)); // You are not authorized to warp someone to your current map.
 		return -1;
 	}
 
@@ -4074,12 +4150,21 @@ ACMD_FUNC(mount_peco)
 	}
 
 	if( (sd->class_&MAPID_THIRDMASK) == MAPID_RUNE_KNIGHT && pc_checkskill(sd,RK_DRAGONTRAINING) > 0 ) {
-		if( !(sd->sc.option&OPTION_DRAGON1) ) {
+		if( !(sd->sc.option&OPTION_DRAGON) ) {
+			unsigned int option = OPTION_DRAGON1;
+			if( message[0] ) {
+				int color = atoi(message);
+				option = ( color == 2 ? OPTION_DRAGON2 :
+				           color == 3 ? OPTION_DRAGON3 :
+				           color == 4 ? OPTION_DRAGON4 :
+				           color == 5 ? OPTION_DRAGON5 :
+				                        OPTION_DRAGON1 );
+			}
 			clif_displaymessage(sd->fd,msg_txt(sd,1119)); // You have mounted your Dragon.
-			pc_setoption(sd, sd->sc.option|OPTION_DRAGON1);
+			pc_setoption(sd, sd->sc.option|option);
 		} else {
 			clif_displaymessage(sd->fd,msg_txt(sd,1120)); // You have released your Dragon.
-			pc_setoption(sd, sd->sc.option&~OPTION_DRAGON1);
+			pc_setoption(sd, sd->sc.option&~OPTION_DRAGON);
 		}
 		return 0;
 	}
@@ -4463,7 +4548,7 @@ ACMD_FUNC(servertime)
 	} else if (battle_config.night_duration == 0)
 		if (night_flag == 1) { // we start with night
 			timer_data = get_timer(day_timer_tid);
-			sprintf(temp, msg_txt(sd,233), txt_time(DIFF_TICK(timer_data->tick,gettick())/1000)); // Game time: The game is actualy in night for %s.
+			sprintf(temp, msg_txt(sd,233), txt_time(DIFF_TICK(timer_data->tick,gettick())/1000)); // Game time: The game is in night for %s.
 			clif_displaymessage(fd, temp);
 			clif_displaymessage(fd, msg_txt(sd,234)); // Game time: After, the game will be in permanent daylight.
 		} else
@@ -4471,7 +4556,7 @@ ACMD_FUNC(servertime)
 	else if (battle_config.day_duration == 0)
 		if (night_flag == 0) { // we start with day
 			timer_data = get_timer(night_timer_tid);
-			sprintf(temp, msg_txt(sd,235), txt_time(DIFF_TICK(timer_data->tick,gettick())/1000)); // Game time: The game is actualy in daylight for %s.
+			sprintf(temp, msg_txt(sd,235), txt_time(DIFF_TICK(timer_data->tick,gettick())/1000)); // Game time: The game is in daylight for %s.
 			clif_displaymessage(fd, temp);
 			clif_displaymessage(fd, msg_txt(sd,236)); // Game time: After, the game will be in permanent night.
 		} else
@@ -4480,7 +4565,7 @@ ACMD_FUNC(servertime)
 		if (night_flag == 0) {
 			timer_data = get_timer(night_timer_tid);
 			timer_data2 = get_timer(day_timer_tid);
-			sprintf(temp, msg_txt(sd,235), txt_time(DIFF_TICK(timer_data->tick,gettick())/1000)); // Game time: The game is actualy in daylight for %s.
+			sprintf(temp, msg_txt(sd,235), txt_time(DIFF_TICK(timer_data->tick,gettick())/1000)); // Game time: The game is in daylight for %s.
 			clif_displaymessage(fd, temp);
 			if (DIFF_TICK(timer_data->tick, timer_data2->tick) > 0)
 				sprintf(temp, msg_txt(sd,237), txt_time(DIFF_TICK(timer_data->interval,DIFF_TICK(timer_data->tick,timer_data2->tick)) / 1000)); // Game time: After, the game will be in night for %s.
@@ -4492,7 +4577,7 @@ ACMD_FUNC(servertime)
 		} else {
 			timer_data = get_timer(day_timer_tid);
 			timer_data2 = get_timer(night_timer_tid);
-			sprintf(temp, msg_txt(sd,233), txt_time(DIFF_TICK(timer_data->tick,gettick()) / 1000)); // Game time: The game is actualy in night for %s.
+			sprintf(temp, msg_txt(sd,233), txt_time(DIFF_TICK(timer_data->tick,gettick()) / 1000)); // Game time: The game is in night for %s.
 			clif_displaymessage(fd, temp);
 			if (DIFF_TICK(timer_data->tick,timer_data2->tick) > 0)
 				sprintf(temp, msg_txt(sd,239), txt_time((timer_data->interval - DIFF_TICK(timer_data->tick, timer_data2->tick)) / 1000)); // Game time: After, the game will be in daylight for %s.
@@ -4773,7 +4858,7 @@ ACMD_FUNC(disguiseall)
 		return -1;
 	}
 
-	if ((mob_id = mobdb_searchname(message)) == 0) // check name first (to avoid possible name begining by a number)
+	if ((mob_id = mobdb_searchname(message)) == 0) // check name first (to avoid possible name beginning by a number)
 		mob_id = atoi(message);
 
 	if (!mobdb_checkid(mob_id) && !npcdb_checkid(mob_id)) { //if mob or npc...
@@ -5004,7 +5089,7 @@ ACMD_FUNC(email)
 	}
 
 	chrif_changeemail(sd->status.account_id, actual_email, new_email);
-	clif_displaymessage(fd, msg_txt(sd,148)); // Information sended to login-server via char-server.
+	clif_displaymessage(fd, msg_txt(sd,148)); // Information sent to login-server via char-server.
 	return 0;
 }
 

+ 25 - 24
src/map/battle.c

@@ -200,7 +200,7 @@ struct block_list* battle_getenemyarea(struct block_list *src, int x, int y, int
 	return bl_list[rnd()%c];
 }
 
-// Dammage delayed info
+// Damage delayed info
 struct delay_damage {
 	int src_id;
 	int target_id;
@@ -266,7 +266,7 @@ int battle_delay_damage (unsigned int tick, int amotion, struct block_list *src,
 
 	if ( !battle_config.delay_battle_damage || amotion <= 1 ) {
 		map_freeblock_lock();
-		status_fix_damage(src, target, damage, ddelay); // We have to seperate here between reflect damage and others [icescope]
+		status_fix_damage(src, target, damage, ddelay); // We have to separate here between reflect damage and others [icescope]
 		if( attack_type && !status_isdead(target) && additional_effects )
 			skill_additional_effect(src, target, skill_id, skill_lv, attack_type, dmg_lv, gettick());
 		if( dmg_lv > ATK_BLOCK && attack_type )
@@ -468,7 +468,7 @@ 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
+				cardfix = 1000; //reset var for target
 				t_cf = 0;
 
 				if (!(nk&NK_NO_ELEFIX))
@@ -878,7 +878,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 			clif_skill_nodamage(bl, bl, RK_MILLENNIUMSHIELD, 1, 1);
 			sce->val3 -= (int)cap_value(damage,INT_MIN,INT_MAX); // absorb damage
 			d->dmg_lv = ATK_BLOCK;
-			sc_start(src,bl,SC_STUN,15,0,skill_get_time2(RK_MILLENNIUMSHIELD,sce->val1)); // There is a chance to be stuned when one shield is broken.
+			sc_start(src,bl,SC_STUN,15,0,skill_get_time2(RK_MILLENNIUMSHIELD,sce->val1)); // There is a chance to be stunned when one shield is broken.
 			if( sce->val3 <= 0 ) { // Shield Down
 				sce->val2--;
 				if( sce->val2 > 0 ) {
@@ -1095,7 +1095,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 
 		if( damage > 0 && ((flag&(BF_WEAPON|BF_SHORT))==(BF_WEAPON|BF_SHORT)) && (sce = sc->data[SC_STONEHARDSKIN]) ) {
 			sce->val2 -= (int)cap_value(damage,INT_MIN,INT_MAX);;
-			if( src->type == BL_MOB ) //using explicite call instead break_equip for duration
+			if( src->type == BL_MOB ) //using explicit call instead break_equip for duration
 				sc_start(src,src, SC_STRIPWEAPON, 30, 0, skill_get_time2(RK_STONEHARDSKIN, sce->val1));
 			else
 				skill_break_equip(src,src, EQP_WEAPON, 3000, BCT_SELF);
@@ -1111,7 +1111,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 		}
 #endif
 
-		//Finally added to remove the status of immobile when aimedbolt is used. [Jobbie]
+		//Finally added to remove the status of immobile when Aimed Bolt is used. [Jobbie]
 		if( skill_id == RA_AIMEDBOLT && (sc->data[SC_BITE] || sc->data[SC_ANKLE] || sc->data[SC_ELECTRICSHOCKER]) ) {
 			status_change_end(bl, SC_BITE, INVALID_TIMER);
 			status_change_end(bl, SC_ANKLE, INVALID_TIMER);
@@ -1201,8 +1201,8 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 		}
 	}
 		if( sc->data[SC_POISONINGWEAPON]
-			&& ((flag&BF_WEAPON) && (!skill_id || skill_id == GC_VENOMPRESSURE)) //chk skill type poison_smoke is a unit
-			&& (damage > 0 && rnd()%100 < sc->data[SC_POISONINGWEAPON]->val3 )) //did some dammage and chance ok (why no additional effect ??
+			&& ((flag&BF_WEAPON) && (!skill_id || skill_id == GC_VENOMPRESSURE)) //check skill type poison_smoke is a unit
+			&& (damage > 0 && rnd()%100 < sc->data[SC_POISONINGWEAPON]->val3 )) //did some damage and chance ok (why no additional effect ??)
 			sc_start(src,bl,(enum sc_type)sc->data[SC_POISONINGWEAPON]->val2,100,sc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON, 1));
 		if( sc->data[SC__DEADLYINFECT] && damage > 0 && rnd()%100 < 30 + 10 * sc->data[SC__DEADLYINFECT]->val1 )
 			status_change_spread(src, bl);
@@ -1304,7 +1304,7 @@ int64 battle_calc_bg_damage(struct block_list *src, struct block_list *bl, int64
 			DAMAGE_RATE(battle_config.bg_long_damage_rate)
 	}
 
-	damage = max(damage,1); //min 1 dammage
+	damage = max(damage,1); //min 1 damage
 	return damage;
 }
 
@@ -1400,7 +1400,7 @@ int64 battle_addmastery(struct map_session_data *sd,struct block_list *target,in
 	nullpo_ret(sd);
 
 	if((skill = pc_checkskill(sd,AL_DEMONBANE)) > 0 &&
-		target->type == BL_MOB && //This bonus doesnt work against players.
+		target->type == BL_MOB && //This bonus doesn't work against players.
 		(battle_check_undead(status->race,status->def_ele) || status->race==RC_DEMON) )
 		damage += (skill*(int)(3+(sd->status.base_level+1)*0.05));	// submitted by orn
 		//damage += (skill * 3);
@@ -2107,7 +2107,7 @@ static bool is_attack_hitting(struct Damage wd, struct block_list *src, struct b
 		if(attacker_count >= battle_config.agi_penalty_count) {
 			if (battle_config.agi_penalty_type == 1)
 				flee = (flee * (100 - (attacker_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num))/100;
-			else //asume type 2: absolute reduction
+			else //assume type 2: absolute reduction
 				flee -= (attacker_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num;
 			if(flee < 1) flee = 1;
 		}
@@ -2265,7 +2265,7 @@ static bool battle_skill_stacks_masteries_vvs(uint16 skill_id)
 
 #ifdef RENEWAL
 /*========================================
- * Calulate equipment ATK for renewal ATK
+ * Calculate equipment ATK for renewal ATK
  *----------------------------------------
  * Credits:
  *	Original coder Skoltex
@@ -2343,7 +2343,7 @@ static int battle_get_weapon_element(struct Damage wd, struct block_list *src, s
 				element = ELE_NEUTRAL; //forced neutral for monsters
 			break;
 		case RL_H_MINE:
-			if (sd && sd->skill_id_old == RL_FLICKER) //Force RL_H_MINE deals fire damage if ativated by RL_FLICKER
+			if (sd && sd->skill_id_old == RL_FLICKER) //Force RL_H_MINE deals fire damage if activated by RL_FLICKER
 				element = ELE_FIRE;
 			break;
 		case KO_KAIHOU:
@@ -2780,7 +2780,7 @@ static struct Damage battle_calc_multi_attack(struct Damage wd, struct block_lis
 		}
 		else if( ((sd->weapontype1 == W_REVOLVER && (skill_lv = pc_checkskill(sd,GS_CHAINACTION)) > 0) //Normal Chain Action effect
 			|| (sd && sc->count && sc->data[SC_E_CHAIN] && (skill_lv = sc->data[SC_E_CHAIN]->val2) > 0)) //Chain Action of ETERNAL_CHAIN
-			&& rnd()%100 < 5*skill_lv ) //Sucess rate
+			&& rnd()%100 < 5*skill_lv ) //Success rate
 		{
 			wd.div_ = skill_get_num(GS_CHAINACTION,skill_lv);
 			wd.type = 0x08;
@@ -3213,7 +3213,7 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 				int dmg = 300; // Base maximum damage at less than 3 cells.
 				i = distance_bl(src,target);
 				if( i > 7 )
-					dmg -= 100; // Greather than 7 cells. (200 damage)
+					dmg -= 100; // Greater than 7 cells. (200 damage)
 				else if( i > 3 )
 					dmg -= 50; // Greater than 3 cells, less than 7. (250 damage)
 				dmg = (dmg * skill_lv) * (100 + (status_get_lv(src) - 100) / 12) / 100;
@@ -3324,14 +3324,14 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 				case SZ_BIG: skillratio += 200 + 300 * skill_lv; break;// Large
 			}
 			RE_LVL_DMOD(120);
-			//NOTE: Their's some other factors that affects damage, but not sure how exactly. Will recheck one day. [Rytech]
+			//NOTE: There are some other factors that affect damage, but not sure how exactly. Will recheck one day. [Rytech]
 			break;
 		case NC_AXEBOOMERANG:
 			skillratio += (skill_lv * 50) + 150;
 			if( sd ) {
 				short index = sd->equip_index[EQI_HAND_R];
 				if( index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_WEAPON )
-				skillratio += sd->inventory_data[index]->weight / 10;// Weight is divided by 10 since 10 weight in coding make 1 whole actural weight. [Rytech]
+				skillratio += sd->inventory_data[index]->weight / 10;// Weight is divided by 10 since 10 weight in coding make 1 whole actual weight. [Rytech]
 			}
 			RE_LVL_DMOD(100);
 			break;
@@ -4017,7 +4017,7 @@ struct Damage battle_calc_defense_reduction(struct Damage wd, struct block_list
 #else
 		vit_def = def2;
 #endif
-		if( src->type == BL_MOB && (battle_check_undead(sstatus->race,sstatus->def_ele) || sstatus->race==RC_DEMON) && //This bonus already doesnt work vs players
+		if( src->type == BL_MOB && (battle_check_undead(sstatus->race,sstatus->def_ele) || sstatus->race==RC_DEMON) && //This bonus already doesn't work vs players
 			(skill=pc_checkskill(tsd,AL_DP)) > 0 )
 			vit_def += skill*(int)(3 +(tsd->status.base_level+1)*0.04);   // submitted by orn
 		if( src->type == BL_MOB && (skill=pc_checkskill(tsd,RA_RANGERMAIN))>0 &&
@@ -4495,7 +4495,7 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
 }
 
 /*
- * Check if we should reflect the dammage and calculate it if so
+ * Check if we should reflect the damage and calculate it if so
  * @param attack_type : BL_WEAPON,BL_MAGIC or BL_MISC
  * @param wd : weapon damage
  * @param src : bl who did the attack
@@ -5783,7 +5783,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 				{
 					if (battle_config.agi_penalty_type == 1)
 						flee = (flee * (100 - (attacker_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num))/100;
-					else //asume type 2: absolute reduction
+					else //assume type 2: absolute reduction
 						flee -= (attacker_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num;
 					if(flee < 1) flee = 1;
 				}
@@ -5791,7 +5791,7 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 
 			hitrate+= sstatus->hit - flee;
 #ifdef RENEWAL
-			if( sd ) //in Renewal hit bonus from Vultures Eye is not anymore shown in status window
+			if( sd ) //in Renewal hit bonus from Vultures Eye is not shown anymore in status window
 				hitrate += pc_checkskill(sd,AC_VULTURE);
 #endif
 			hitrate = cap_value(hitrate, battle_config.min_hitrate, battle_config.max_hitrate);
@@ -5952,7 +5952,7 @@ int64 battle_calc_return_damage(struct block_list* bl, struct block_list *src, i
 					if( distance_bl(src,bl) <= 0 || !map_check_dir(dir,t_dir) ) {
 						int64 rd1 = 0;
 						rd1 = min(damage,status_get_max_hp(bl)) * sc->data[SC_DEATHBOUND]->val2 / 100; // Amplify damage.
-						*dmg = rd1 * 30 / 100; // Received damage = 30% of amplifly damage.
+						*dmg = rd1 * 30 / 100; // Received damage = 30% of amplified damage.
 						clif_skill_damage(src,bl,gettick(), status_get_amotion(src), 0, -30000, 1, RK_DEATHBOUND, sc->data[SC_DEATHBOUND]->val1,6);
 						status_change_end(bl,SC_DEATHBOUND,INVALID_TIMER);
 						rdamage += rd1 * 70 / 100; // Target receives 70% of the amplified damage. [Rytech]
@@ -6236,7 +6236,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
 
 			/**
 			 * We need to calculate the DMG before the hp reduction, because it can kill the source.
-			 * For futher information: bugreport:4950
+			 * For further information: bugreport:4950
 			 **/
 			ret_val = (damage_lv)skill_attack(BF_WEAPON,src,src,target,PA_SACRIFICE,skill_lv,tick,0);
 
@@ -6714,7 +6714,7 @@ int battle_check_target( struct block_list *src, struct block_list *target,int f
 			sd = BL_CAST(BL_PC, t_bl);
 
 			if( sd->state.monster_ignore && flag&BCT_ENEMY )
-				return 0; // Global inminuty only to Attacks
+				return 0; // Global immunity only to Attacks
 			if( sd->status.karma && s_bl->type == BL_PC && ((TBL_PC*)s_bl)->status.karma )
 				state |= BCT_ENEMY; // Characters with bad karma may fight amongst them
 			if( sd->state.killable ) {
@@ -7369,6 +7369,7 @@ static const struct _battle_data {
 	{ "atcommand_enable_npc",				&battle_config.atcommand_enable_npc,			0,		0,		100,			},
 	{ "path_blown_halt",                    &battle_config.path_blown_halt,                 1,      0,      1,              },
 	{ "rental_mount_speed_boost",           &battle_config.rental_mount_speed_boost,        25,     0,      100,        	},
+	{ "feature.warp_suggestions",           &battle_config.warp_suggestions_enabled,        0,      0,      1,              },
 };
 #ifndef STATS_OPT_OUT
 /**

+ 1 - 0
src/map/battle.h

@@ -532,6 +532,7 @@ extern struct Battle_Config
 	int atcommand_enable_npc;
 	int path_blown_halt;
 	int rental_mount_speed_boost;
+	int warp_suggestions_enabled;
 } battle_config;
 
 void do_init_battle(void);

+ 1 - 1
src/map/itemdb.c

@@ -1427,7 +1427,7 @@ static int itemdb_readdb(void){
 
 		fclose(fp);
 
-		ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filename[fi]);
+		ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, path);
 	}
 
 	return 0;

+ 19 - 20
src/map/map.c

@@ -94,7 +94,7 @@ char log_db_pw[32] = "ragnarok";
 char log_db_db[32] = "log";
 Sql* logmysql_handle;
 
-// DBMap declaartion
+// DBMap declaration
 static DBMap* id_db=NULL; /// int id -> struct block_list*
 static DBMap* pc_db=NULL; /// int id -> struct map_session_data*
 static DBMap* mobid_db=NULL; /// int id -> struct mob_data*
@@ -249,7 +249,7 @@ int map_freeblock_timer(int tid, unsigned int tick, int id, intptr_t data)
 //
 /*==========================================
  * Handling of map_bl[]
- * The adresse of bl_heal is set in bl->prev
+ * The address of bl_heal is set in bl->prev
  *------------------------------------------*/
 static struct block_list bl_head;
 
@@ -336,7 +336,7 @@ int map_delblock(struct block_list* bl)
 	// blocklist (2ways chainlist)
 	if (bl->prev == NULL) {
 		if (bl->next != NULL) {
-			// can't delete block (already at the begining of the chain)
+			// can't delete block (already at the beginning of the chain)
 			ShowError("map_delblock error : bl->next!=NULL\n");
 		}
 		return 0;
@@ -374,7 +374,7 @@ int map_delblock(struct block_list* bl)
  * @param x1 : new x position
  * @param y1 : new y position
  * @param tick : when this was scheduled
- * @return 0:sucess, 1:fail
+ * @return 0:success, 1:fail
  */
 int map_moveblock(struct block_list *bl, int x1, int y1, unsigned int tick)
 {
@@ -596,7 +596,7 @@ int map_foreachinrange(int (*func)(struct block_list*,va_list), struct block_lis
 	map_freeblock_lock();
 
 	for( i = blockcount; i < bl_list_count; i++ )
-		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasn't queued for deletion.
 			va_start(ap, type);
 			returnCount += func(bl_list[ i ], ap);
 			va_end(ap);
@@ -665,7 +665,7 @@ int map_foreachinshootrange(int (*func)(struct block_list*,va_list),struct block
 	map_freeblock_lock();
 
 	for( i = blockcount; i < bl_list_count; i++ )
-		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasn't queued for deletion.
 			va_start(ap, type);
 			returnCount += func(bl_list[ i ], ap);
 			va_end(ap);
@@ -722,7 +722,7 @@ int map_foreachinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x0
 	map_freeblock_lock();
 
 	for( i = blockcount; i < bl_list_count; i++ )
-		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasn't queued for deletion.
 			va_start(ap, type);
 			returnCount += func(bl_list[ i ], ap);
 			va_end(ap);
@@ -785,7 +785,7 @@ int map_forcountinrange(int (*func)(struct block_list*,va_list), struct block_li
 	map_freeblock_lock();
 
 	for( i = blockcount; i < bl_list_count; i++ )
-		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasn't queued for deletion.
 			va_start(ap, type);
 			returnCount += func(bl_list[ i ], ap);
 			va_end(ap);
@@ -839,7 +839,7 @@ int map_forcountinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x
 	map_freeblock_lock();
 
 	for( i = blockcount; i < bl_list_count; i++ )
-		if(bl_list[ i ]->prev) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+		if(bl_list[ i ]->prev) { //func() may delete this bl_list[] slot, checking for prev ensures it wasn't queued for deletion.
 			va_start(ap, type);
 			returnCount += func(bl_list[ i ], ap);
 			va_end(ap);
@@ -854,9 +854,8 @@ int map_forcountinarea(int (*func)(struct block_list*,va_list), int16 m, int16 x
 }
 
 /*==========================================
- * For what I get
  * Move bl and do func* with va_list while moving.
- * Mouvement is set by dx dy wich are distance in x and y
+ * Movement is set by dx dy which are distance in x and y
  *------------------------------------------*/
 int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_list* center, int16 range, int16 dx, int16 dy, int type, ...)
 {
@@ -967,7 +966,7 @@ int map_foreachinmovearea(int (*func)(struct block_list*,va_list), struct block_
 	map_freeblock_lock();	// Prohibit the release from memory
 
 	for( i = blockcount; i < bl_list_count; i++ )
-		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasn't queued for deletion.
 			va_start(ap, type);
 			returnCount += func(bl_list[ i ], ap);
 			va_end(ap);
@@ -1011,7 +1010,7 @@ int map_foreachincell(int (*func)(struct block_list*,va_list), int16 m, int16 x,
 	map_freeblock_lock();
 
 	for( i = blockcount; i < bl_list_count; i++ )
-		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasn't queued for deletion.
 			va_start(ap, type);
 			returnCount += func(bl_list[ i ], ap);
 			va_end(ap);
@@ -1048,7 +1047,7 @@ int map_foreachinpath(int (*func)(struct block_list*,va_list),int16 m,int16 x0,i
 //////////////////////////////////////////////////////////////
 // Methodology:
 // My trigonometrics and math are a little rusty... so the approach I am writing
-// here is basicly do a double for to check for all targets in the square that
+// here is basically do a double for to check for all targets in the square that
 // contains the initial and final positions (area range increased to match the
 // radius given), then for each object to test, calculate the distance to the
 // path and include it if the range fits and the target is in the line (0<k<1,
@@ -1190,7 +1189,7 @@ int map_foreachinpath(int (*func)(struct block_list*,va_list),int16 m,int16 x0,i
 	map_freeblock_lock();
 
 	for( i = blockcount; i < bl_list_count; i++ )
-		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasn't queued for deletion.
 			va_start(ap, type);
 			returnCount += func(bl_list[ i ], ap);
 			va_end(ap);
@@ -1232,7 +1231,7 @@ int map_foreachinmap(int (*func)(struct block_list*,va_list), int16 m, int type,
 	map_freeblock_lock();
 
 	for( i = blockcount; i < bl_list_count ; i++ )
-		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasnt queued for deletion.
+		if( bl_list[ i ]->prev ) { //func() may delete this bl_list[] slot, checking for prev ensures it wasn't queued for deletion.
 			va_start(ap, type);
 			returnCount += func(bl_list[ i ], ap);
 			va_end(ap);
@@ -1500,7 +1499,7 @@ static DBData create_charid2nick(DBKey key, va_list args)
 	return db_ptr2data(p);
 }
 
-/// Adds(or replaces) the nick of charid to nick_db and fullfils pending requests.
+/// Adds(or replaces) the nick of charid to nick_db and fulfils pending requests.
 /// Does nothing if the character is online.
 void map_addnickdb(int charid, const char* nick)
 {
@@ -1995,7 +1994,7 @@ void map_foreachnpc(int (*func)(struct npc_data* nd, va_list args), ...)
 }
 
 /// Applies func to everything in the db.
-/// Stops iteratin gif func returns -1.
+/// Stops iterating if func returns -1.
 void map_foreachregen(int (*func)(struct block_list* bl, va_list args), ...)
 {
 	DBIterator* iter;
@@ -3208,7 +3207,7 @@ int map_readallmaps (void)
 			exit(EXIT_FAILURE); //No use launching server if maps can't be read.
 		}
 
-		// Init mapcache data.. [Shinryo]
+		// Init mapcache data. [Shinryo]
 		map_cache_buffer = map_init_mapcache(fp);
 		if(!map_cache_buffer) {
 			ShowFatalError("Failed to initialize mapcache data (%s)..\n", mapcachefilepath);
@@ -3270,7 +3269,7 @@ int map_readallmaps (void)
 	if( !enable_grf ) {
 		fclose(fp);
 
-		// The cache isn't needed anymore, so free it.. [Shinryo]
+		// The cache isn't needed anymore, so free it. [Shinryo]
 		aFree(map_cache_buffer);
 	}
 

+ 13 - 1
src/map/mob.c

@@ -168,11 +168,23 @@ void mvptomb_create(struct mob_data *md, char *killer, time_t time)
 
 }
 
+/** Destroys MVP Tomb
+* @param md
+*/
 void mvptomb_destroy(struct mob_data *md) {
 	struct npc_data *nd;
 
 	if ( (nd = map_id2nd(md->tomb_nid)) ) {
-		npc_remove_map(nd);
+		int16 m = nd->bl.m, i;
+		clif_clearunit_area(&nd->bl,CLR_OUTSIGHT);
+		map_delblock(&nd->bl);
+
+		ARR_FIND( 0, map[m].npc_num, i, map[m].npc[i] == nd );
+		if( !(i == map[m].npc_num) ) {
+			map[m].npc_num--;
+			map[m].npc[i] = map[m].npc[map[m].npc_num];
+			map[m].npc[map[m].npc_num] = NULL;
+		}
 		map_deliddb(&nd->bl);
 		aFree(nd);
 	}

+ 59 - 12
src/map/npc.c

@@ -2160,6 +2160,54 @@ static void npc_parsename(struct npc_data* nd, const char* name, const char* sta
 	}
 }
 
+/**
+ * Parses NPC view.
+ * Support for using Constants in place of NPC View IDs.
+ */
+int npc_parseview(const char* w4, const char* start, const char* buffer, const char* filepath) {
+	int val = -1, i = 0;
+	char viewid[1024];	// Max size of name from const.txt, see read_constdb.
+
+	// Extract view ID / constant
+	while (w4[i] != '\0') {
+		if (ISSPACE(w4[i]) || w4[i] == '/' || w4[i] == ',')
+			break;
+
+		i++;
+	}
+
+	safestrncpy(viewid, w4, i+=1);
+
+	// Check if view id is not an ID (only numbers).
+	if(!npc_viewisid(viewid)) {
+		// Check if constant exists and get its value.
+		if(!script_get_constant(viewid, &val)) {
+			ShowWarning("npc_parseview: Invalid NPC constant '%s' specified in file '%s', line'%d'. Defaulting to INVISIBLE_CLASS. \n", viewid, filepath, strline(buffer,start-buffer));
+			val = INVISIBLE_CLASS;
+		}
+	} else {
+		// NPC has an ID specified for view id.
+		val = atoi(w4);
+	}
+
+	return val;
+}
+
+/**
+ * Checks if given view is an ID or constant.
+ */
+bool npc_viewisid(const char * viewid)
+{
+	if(atoi(viewid) != -1) {
+		// Loop through view, looking for non-numeric character.
+		while (*viewid) {
+			if (ISDIGIT(*viewid++) == 0) return false;
+		}
+	}
+
+	return true;
+}
+
 /**
  * Add then display an npc warp on map
  * @param name : warp unique name
@@ -2459,7 +2507,7 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const
 	nd->bl.y = y;
 	nd->bl.id = npc_get_new_npc_id();
 	npc_parsename(nd, w3, start, buffer, filepath);
-	nd->class_ = m==-1?-1:atoi(w4);
+	nd->class_ = m == -1 ? -1 : npc_parseview(w4, start, buffer, filepath);
 	nd->speed = 200;
 
 	++npc_shop;
@@ -2620,7 +2668,7 @@ static const char* npc_skip_script(const char* start, const char* buffer, const
  * @return new index for next parsing
  */
 static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath, bool runOnInit) {
-	int x, y, dir = 0, m, xs = 0, ys = 0, class_ = 0;	// [Valaris] thanks to fov
+	int x, y, dir = 0, m, xs = 0, ys = 0;	// [Valaris] thanks to fov
 	char mapname[32];
 	struct script_code *script;
 	int i;
@@ -2672,14 +2720,13 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
 
 	CREATE(nd, struct npc_data, 1);
 
-	if( sscanf(w4, "%d,%d,%d", &class_, &xs, &ys) == 3 )
+	if( sscanf(w4, "%*[^,],%d,%d", &xs, &ys) == 2 )
 	{// OnTouch area defined
 		nd->u.scr.xs = xs;
 		nd->u.scr.ys = ys;
 	}
 	else
 	{// no OnTouch area
-		class_ = atoi(w4);
 		nd->u.scr.xs = -1;
 		nd->u.scr.ys = -1;
 	}
@@ -2690,7 +2737,7 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
 	nd->bl.y = y;
 	npc_parsename(nd, w3, start, buffer, filepath);
 	nd->bl.id = npc_get_new_npc_id();
-	nd->class_ = class_;
+	nd->class_ = m == -1 ? -1 : npc_parseview(w4, start, buffer, filepath);
 	nd->speed = 200;
 	nd->u.scr.script = script;
 	nd->u.scr.label_list = label_list;
@@ -2709,7 +2756,7 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
 		npc_setcells(nd);
 		if(map_addblock(&nd->bl))
 			return NULL;
-		if( class_ >= 0 )
+		if( nd->class_ >= 0 )
 		{
 			status_set_viewdata(&nd->bl, nd->class_);
 			if( map[nd->bl.m].users )
@@ -2760,7 +2807,7 @@ static const char* npc_parse_script(char* w1, char* w2, char* w3, char* w4, cons
 /// npc: <map name>,<x>,<y>,<facing>%TAB%duplicate(<name of target>)%TAB%<NPC Name>%TAB%<sprite id>,<triggerX>,<triggerY>
 const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const char* start, const char* buffer, const char* filepath)
 {
-	int x, y, dir, m, xs = -1, ys = -1, class_ = 0;
+	int x, y, dir, m, xs = -1, ys = -1;
 	char mapname[32];
 	char srcname[128];
 	int i;
@@ -2808,9 +2855,8 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
 	}
 
 	if( type == WARP && sscanf(w4, "%d,%d", &xs, &ys) == 2 );// <spanx>,<spany>
-	else if( type == SCRIPT && sscanf(w4, "%d,%d,%d", &class_, &xs, &ys) == 3);// <sprite id>,<triggerX>,<triggerY>
-	else if( type != WARP ) class_ = atoi(w4);// <sprite id>
-	else {
+	else if( type == SCRIPT && sscanf(w4, "%*[^,],%d,%d", &xs, &ys) == 2);// <sprite id>,<triggerX>,<triggerY>
+	else if( type == WARP ) {
 		ShowError("npc_parse_duplicate: Invalid span format for duplicate warp in file '%s', line '%d'. Skipping line...\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,start-buffer), w1, w2, w3, w4);
 		return end;// next line, try to continue
 	}
@@ -2823,7 +2869,7 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
 	nd->bl.y = y;
 	npc_parsename(nd, w3, start, buffer, filepath);
 	nd->bl.id = npc_get_new_npc_id();
-	nd->class_ = class_;
+	nd->class_ = m == -1 ? -1 : npc_parseview(w4, start, buffer, filepath);
 	nd->speed = 200;
 	nd->src_id = src_id;
 	nd->bl.type = BL_NPC;
@@ -2870,7 +2916,7 @@ const char* npc_parse_duplicate(char* w1, char* w2, char* w3, char* w4, const ch
 		npc_setcells(nd);
 		if(map_addblock(&nd->bl))
 			return end;
-		if( class_ >= 0 ) {
+		if( nd->class_ >= 0 ) {
 			status_set_viewdata(&nd->bl, nd->class_);
 			if( map[nd->bl.m].users )
 				clif_spawn(&nd->bl);
@@ -3900,6 +3946,7 @@ void npc_read_event_script(void)
 		{"Die Event",script_config.die_event_name},
 		{"Kill PC Event",script_config.kill_pc_event_name},
 		{"Kill NPC Event",script_config.kill_mob_event_name},
+		{"Stat Calc Event",script_config.stat_calc_event_name},
 	};
 
 	for (i = 0; i < NPCE_MAX; i++)

+ 2 - 0
src/map/npc.h

@@ -112,6 +112,7 @@ enum npce_event {
 	NPCE_DIE,
 	NPCE_KILLPC,
 	NPCE_KILLNPC,
+	NPCE_STATCALC,
 	NPCE_MAX
 };
 struct view_data* npc_get_viewdata(int class_);
@@ -129,6 +130,7 @@ int npc_buysellsel(struct map_session_data* sd, int id, int type);
 int npc_buylist(struct map_session_data* sd,int n, unsigned short* item_list);
 int npc_selllist(struct map_session_data* sd, int n, unsigned short* item_list);
 void npc_parse_mob2(struct spawn_data* mob);
+bool npc_viewisid(const char * viewid);
 struct npc_data* npc_add_warp(char* name, short from_mapid, short from_x, short from_y, short xs, short ys, unsigned short to_mapindex, short to_x, short to_y);
 int npc_globalmessage(const char* name,const char* mes);
 

+ 11 - 10
src/map/pc.c

@@ -1923,7 +1923,7 @@ static int pc_bonus_addeff_onskill(struct s_addeffectonskill* effect, int max, e
 * @param race: target race. if < 0, means monster_id
 * @param rate: rate value: 1 ~ 10000. If < 0, it will be multiplied with mob level/10
 */
-static void pc_bonus_item_drop(struct s_add_drop *drop, const short max, uint16 nameid, uint16 group, int class_, int race, int rate)
+static void pc_bonus_item_drop(struct s_add_drop *drop, const short max, uint16 nameid, uint16 group, int class_, short race, int rate)
 {
 	uint8 i;
 	if (nameid && !group && !itemdb_exists(nameid)) {
@@ -4018,7 +4018,7 @@ int pc_getzeny(struct map_session_data *sd,int zeny, enum e_log_pick_type type,
  *------------------------------------------*/
 int pc_search_inventory(struct map_session_data *sd,int item_id)
 {
-	int i;
+	int16 i;
 	nullpo_retr(-1, sd);
 
 	ARR_FIND( 0, MAX_INVENTORY, i, sd->status.inventory[i].nameid == item_id && (sd->status.inventory[i].amount > 0 || item_id == 0) );
@@ -4042,7 +4042,7 @@ int pc_search_inventory(struct map_session_data *sd,int item_id)
  */
 char pc_additem(struct map_session_data *sd,struct item *item,int amount,e_log_pick_type log_type) {
 	struct item_data *id;
-	uint16 i;
+	int16 i;
 	unsigned int w;
 
 	nullpo_retr(1, sd);
@@ -4066,12 +4066,13 @@ char pc_additem(struct map_session_data *sd,struct item *item,int amount,e_log_p
 
 	i = MAX_INVENTORY;
 
-	if( itemdb_isstackable2(id) && item->expire_time == 0 )
-	{ // Stackable | Non Rental
-		for( i = 0; i < MAX_INVENTORY; i++ )
-		{
-			if( sd->status.inventory[i].nameid == item->nameid && sd->status.inventory[i].bound == item->bound && memcmp(&sd->status.inventory[i].card, &item->card, sizeof(item->card)) == 0 )
-			{
+	// Stackable | Non Rental
+	if( itemdb_isstackable2(id) && item->expire_time == 0 ) {
+		for( i = 0; i < MAX_INVENTORY; i++ ) {
+			if( sd->status.inventory[i].nameid == item->nameid &&
+			    sd->status.inventory[i].bound == item->bound &&
+			    sd->status.inventory[i].expire_time == 0 &&
+			    memcmp(&sd->status.inventory[i].card, &item->card, sizeof(item->card)) == 0 ) {
 				if( amount > MAX_AMOUNT - sd->status.inventory[i].amount || ( id->stack.inventory && amount > id->stack.amount - sd->status.inventory[i].amount ) )
 					return 5;
 				sd->status.inventory[i].amount += amount;
@@ -10255,7 +10256,7 @@ int pc_readdb(void)
 			sv_readdb(dbsubpath1, "pre-re/job_db1.txt",',',5+MAX_WEAPON_TYPE,5+MAX_WEAPON_TYPE,CLASS_COUNT,&pc_readdb_job1, i);
 #endif
 		else
-			sv_readdb(dbsubpath1, "job_db1.txt",',',5+MAX_WEAPON_TYPE,5+MAX_WEAPON_TYPE,CLASS_COUNT,&pc_readdb_job1, i);
+			sv_readdb(dbsubpath1, "job_db1.txt",',',5+MAX_WEAPON_TYPE,6+MAX_WEAPON_TYPE,CLASS_COUNT,&pc_readdb_job1, i);
 		sv_readdb(dbsubpath1, "job_db2.txt",',',1,1+MAX_LEVEL,CLASS_COUNT,&pc_readdb_job2, i);
 		sv_readdb(dbsubpath2, "job_exp.txt",',',4,1000+3,CLASS_COUNT*2,&pc_readdb_job_exp, i); //support till 1000lvl
 #ifdef HP_SP_TABLES

+ 2 - 2
src/map/pc.h

@@ -117,8 +117,8 @@ struct s_add_drop {
 	uint16 nameid, ///Item ID
 		group; ///Group ID
 	int rate; ///Rate, 1 ~ 10000, -1 ~ -100000
-	char race, ///Target Race, bitwise value of 1<<x. if < 0 means Monster ID
-		class_; ///Target Class, bitwise value of 1<<x
+	short race; ///Target Race, bitwise value of 1<<x. if < 0 means Monster ID
+	char class_; ///Target Class, bitwise value of 1<<x
 };
 
 struct s_autobonus {

+ 68 - 10
src/map/script.c

@@ -256,6 +256,7 @@ struct Script_Config script_config = {
 	"OnPCLoadMapEvent", //loadmap_event_name
 	"OnPCBaseLvUpEvent", //baselvup_event_name
 	"OnPCJobLvUpEvent", //joblvup_event_name
+	"OnPCStatCalcEvent", //stat_calc_event_name
 	"OnTouch_",	//ontouch_name (runs on first visible char to enter area, picks another char if the first char leaves)
 	"OnTouch",	//ontouch2_name (run whenever a char walks into the OnTouch area)
 };
@@ -7819,7 +7820,7 @@ BUILDIN_FUNC(getequippercentrefinery)
  *------------------------------------------*/
 BUILDIN_FUNC(successrefitem)
 {
-	int i=-1,num,ep;
+	int i = -1, num, ep, up = 1;
 	TBL_PC *sd;
 
 	num = script_getnum(st,2);
@@ -7827,6 +7828,9 @@ BUILDIN_FUNC(successrefitem)
 	if( sd == NULL )
 		return 0;
 
+	if( script_hasdata(st, 3) )
+		up = script_getnum(st, 3);
+
 	if (num > 0 && num <= ARRAYLENGTH(equip))
 		i=pc_checkequip(sd,equip[num-1]);
 	if(i >= 0) {
@@ -7835,7 +7839,11 @@ BUILDIN_FUNC(successrefitem)
 		//Logs items, got from (N)PC scripts [Lupus]
 		log_pick_pc(sd, LOG_TYPE_SCRIPT, -1, &sd->status.inventory[i]);
 
-		sd->status.inventory[i].refine++;
+		if (sd->status.inventory[i].refine >= MAX_REFINE)
+			return SCRIPT_CMD_SUCCESS;
+
+		sd->status.inventory[i].refine += up;
+		sd->status.inventory[i].refine = cap_value( sd->status.inventory[i].refine, 0, MAX_REFINE);
 		pc_unequipitem(sd,i,2); // status calc will happen in pc_equipitem() below
 
 		clif_refine(sd->fd,0,i,sd->status.inventory[i].refine);
@@ -7901,7 +7909,7 @@ BUILDIN_FUNC(failedrefitem)
  *------------------------------------------*/
 BUILDIN_FUNC(downrefitem)
 {
-	int i = -1,num,ep,down = 1;
+	int i = -1, num, ep, down = 1;
 	TBL_PC *sd;
 
 	sd = script_rid2sd(st);
@@ -18501,6 +18509,43 @@ BUILDIN_FUNC(disable_command) {
 	return SCRIPT_CMD_SUCCESS;
 }
 
+/** Get the information of the members of a guild by type.
+ * getguildmember  <guild_id>{,<type>};
+ * @param guild_id: ID of guild
+ * @param type: Type of option (optional)
+ */
+BUILDIN_FUNC(getguildmember)
+{
+	int i, j = 0, type = 0;
+	struct guild *g = NULL;
+
+	g = guild_search(script_getnum(st,2));
+
+	if (script_hasdata(st,3))
+		type = script_getnum(st,3);
+
+	if (g) {
+		for (i = 0; i < MAX_GUILD; i++) {
+			if (g->member[i].account_id) {
+				switch (type) {
+				case 2:
+					mapreg_setreg(reference_uid(add_str("$@guildmemberaid"), j),g->member[i].account_id);
+					break;
+				case 1:
+					mapreg_setreg(reference_uid(add_str("$@guildmembercid"), j), g->member[i].char_id);
+					break;
+				default:
+					mapreg_setregstr(reference_uid(add_str("$@guildmembername$"), j), g->member[i].name);
+					break;
+				}
+				j++;
+			}
+		}
+	}
+	mapreg_setreg(add_str("$@guildmembercount"), j);
+	return SCRIPT_CMD_SUCCESS;
+}
+
 /** Adds a spirit ball to player for 'duration' in second
 * addspiritball <amount>,<duration>{,<char_id>};
 */
@@ -18512,8 +18557,12 @@ BUILDIN_FUNC(addspiritball) {
 	if (amount == 0)
 		return SCRIPT_CMD_SUCCESS;
 
-	if (script_hasdata(st,4))
-		sd = map_charid2sd(script_getnum(st,4));
+	if (script_hasdata(st,4)) {
+		if (script_isstring(st,4))
+			sd = map_charid2sd(script_getnum(st,4));
+		else
+			sd = map_nick2sd(script_getstr(st,4));
+	}
 	else
 		sd = script_rid2sd(st);
 	if (!sd)
@@ -18534,8 +18583,12 @@ BUILDIN_FUNC(delspiritball) {
 	if (amount == 0)
 		return SCRIPT_CMD_SUCCESS;
 	
-	if (script_hasdata(st,3))
-		sd = map_charid2sd(script_getnum(st,3));
+	if (script_hasdata(st,3)) {
+		if (script_isstring(st,2))
+			sd = map_charid2sd(script_getnum(st,3));
+		else
+			sd = map_nick2sd(script_getstr(st,3));
+	}
 	else
 		sd = script_rid2sd(st);
 	if (!sd)
@@ -18551,8 +18604,12 @@ BUILDIN_FUNC(delspiritball) {
 BUILDIN_FUNC(countspiritball) {
 	struct map_session_data *sd;
 
-	if (script_hasdata(st,2))
-		sd = map_charid2sd(script_getnum(st,2));
+	if (script_hasdata(st,2)) {
+		if (script_isstring(st,2))
+			sd = map_charid2sd(script_getnum(st,2));
+		else
+			sd = map_nick2sd(script_getstr(st,2));
+	}
 	else
 		sd = script_rid2sd(st);
 	if (!sd)
@@ -18686,7 +18743,7 @@ struct script_function buildin_func[] = {
 	BUILDIN_DEF(getequiprefinerycnt,"i"),
 	BUILDIN_DEF(getequipweaponlv,"i"),
 	BUILDIN_DEF(getequippercentrefinery,"i"),
-	BUILDIN_DEF(successrefitem,"i"),
+	BUILDIN_DEF(successrefitem,"i?"),
 	BUILDIN_DEF(failedrefitem,"i"),
 	BUILDIN_DEF(downrefitem,"i?"),
 	BUILDIN_DEF(statusup,"i"),
@@ -19090,6 +19147,7 @@ struct script_function buildin_func[] = {
 	BUILDIN_DEF(getgroupitem,"i"),
 	BUILDIN_DEF(enable_command,""),
 	BUILDIN_DEF(disable_command,""),
+	BUILDIN_DEF(getguildmember,"i?"),
 	BUILDIN_DEF(addspiritball,"ii?"),
 	BUILDIN_DEF(delspiritball,"i?"),
 	BUILDIN_DEF(countspiritball,"?"),

+ 1 - 0
src/map/script.h

@@ -28,6 +28,7 @@ extern struct Script_Config {
 	const char *loadmap_event_name;
 	const char *baselvup_event_name;
 	const char *joblvup_event_name;
+	const char *stat_calc_event_name;
 
 	const char* ontouch_name;
 	const char* ontouch2_name;

+ 2 - 0
src/map/status.c

@@ -2852,6 +2852,8 @@ int status_calc_pc_(struct map_session_data* sd, bool first)
 	pc_delautobonus(sd,sd->autobonus2,ARRAYLENGTH(sd->autobonus2),true);
 	pc_delautobonus(sd,sd->autobonus3,ARRAYLENGTH(sd->autobonus3),true);
 
+	npc_script_event(sd, NPCE_STATCALC);
+
 	// Parse equipment
 	for(i=0;i<EQI_MAX;i++) {
 		current_equip_item_index = index = sd->equip_index[i]; // We pass INDEX to current_equip_item_index - for EQUIP_SCRIPT (new cards solution) [Lupus]

Some files were not shown because too many files changed in this diff