summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--db/pre-re/item_db.conf2
-rw-r--r--db/re/item_db.conf130
-rw-r--r--doc/script_commands.txt77
-rw-r--r--npc/custom/quests/thq/THQS_TTShop.txt4
-rw-r--r--npc/dev/test.txt13
-rw-r--r--npc/other/Global_Functions.txt8
-rw-r--r--sql-files/item_db.sql2
-rw-r--r--sql-files/item_db_re.sql112
-rw-r--r--src/char/char.c25
-rw-r--r--src/char/int_storage.c92
-rw-r--r--src/char/int_storage.h8
-rw-r--r--src/login/lclif.c4
-rw-r--r--src/login/lclif.p.h8
-rw-r--r--src/map/atcommand.c39
-rw-r--r--src/map/atcommand.h6
-rw-r--r--src/map/packets.h356
-rw-r--r--src/map/script.c86
-rw-r--r--src/map/script.h1
-rw-r--r--src/map/storage.c4
-rw-r--r--src/plugins/HPMHooking/HPMHooking.Defs.inc8
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc8
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc2
-rw-r--r--src/plugins/HPMHooking/HPMHooking_char.Hooks.inc78
23 files changed, 740 insertions, 333 deletions
diff --git a/db/pre-re/item_db.conf b/db/pre-re/item_db.conf
index b17e57252..82168a1ca 100644
--- a/db/pre-re/item_db.conf
+++ b/db/pre-re/item_db.conf
@@ -78970,7 +78970,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(getrefine()-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((getrefine()-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
diff --git a/db/re/item_db.conf b/db/re/item_db.conf
index 514337801..f10e29289 100644
--- a/db/re/item_db.conf
+++ b/db/re/item_db.conf
@@ -6419,7 +6419,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,25;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(), 14)-3,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(), 14)-3) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
@@ -9130,7 +9130,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }";
@@ -9165,7 +9165,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bCriticalAddRace,RC_DemiPlayer,5;
}
if(getrefine()>8) autobonus "{ bonus bAspdRate,100; }",70,3000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }";
@@ -9847,7 +9847,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
bonus bAspdRate,5;
}
@@ -11018,7 +11018,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,25;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-3,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-3) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
bonus3 bAutoSpell,NPC_CRITICALWOUND,1,50;
}
@@ -11558,7 +11558,7 @@ item_db: (
EquipLv: 160
View: 4
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
">
},
{
@@ -12177,7 +12177,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
bonus bAspdRate,10;
}
@@ -12580,7 +12580,7 @@ item_db: (
EquipLv: 70
View: 4
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -12606,7 +12606,7 @@ item_db: (
EquipLv: 160
View: 5
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
">
},
{
@@ -13434,7 +13434,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,25;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
@@ -13759,7 +13759,7 @@ item_db: (
EquipLv: 70
View: 5
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -15011,7 +15011,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
bonus bAspdRate,5;
}
@@ -15770,7 +15770,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,25;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }";
@@ -16314,7 +16314,7 @@ item_db: (
View: 10
Script: <"
bonus bInt,5;
- bonus bMatk,pow(min(getrefine(),15),2);
+ bonus bMatk,((min(getrefine(),15)) ** (2));
bonus bUnbreakableWeapon,0;
">
},
@@ -18462,7 +18462,7 @@ item_db: (
View: 10
Script: <"
bonus bInt,5;
- bonus bMatk,pow(min(getrefine(),15),2);
+ bonus bMatk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bMatk,(((BaseLevel-70)/10)*5); }
">
},
@@ -19838,7 +19838,7 @@ item_db: (
bonus bCritAtkRate,getrefine() * 2;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) bonus2 bSkillAtk,AC_DOUBLE,20;
@@ -20580,7 +20580,7 @@ item_db: (
EquipLv: 160
View: 12
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
">
},
{
@@ -21161,7 +21161,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
@@ -21200,7 +21200,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
@@ -21476,7 +21476,7 @@ item_db: (
EquipLv: 70
View: 12
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -21502,8 +21502,8 @@ item_db: (
EquipLv: 160
View: 13
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
- bonus bMatk,pow(min(getrefine(),15),2)/2;
+ bonus bAtk,((min(getrefine(),15)) ** (2));
+ bonus bMatk,((min(getrefine(),15)) ** (2))/2;
">
},
{
@@ -22108,7 +22108,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) bonus4 bAutoSpellOnSkill,CG_ARROWVULCAN,CG_TAROTCARD,5,100;
@@ -22436,7 +22436,7 @@ item_db: (
EquipLv: 70
View: 13
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -23150,7 +23150,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) bonus4 bAutoSpellOnSkill,CG_ARROWVULCAN,CG_TAROTCARD,5,100;
@@ -23482,7 +23482,7 @@ item_db: (
EquipLv: 70
View: 14
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -23505,8 +23505,8 @@ item_db: (
EquipLv: 160
View: 14
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
- bonus bMatk,pow(min(getrefine(),15),2)/2;
+ bonus bAtk,((min(getrefine(),15)) ** (2));
+ bonus bMatk,((min(getrefine(),15)) ** (2))/2;
">
},
@@ -24270,7 +24270,7 @@ item_db: (
Script: <"
bonus bUnbreakableWeapon,0;
bonus bInt,5;
- bonus bMatk,pow(min(getrefine(),15),2);
+ bonus bMatk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bMatk,(((BaseLevel-70)/10)*5); }
">
},
@@ -24297,7 +24297,7 @@ item_db: (
View: 23
Script: <"
bonus bInt,6;
- bonus bMatk,pow(min(getrefine(),15),2);
+ bonus bMatk,((min(getrefine(),15)) ** (2));
bonus bUnbreakableWeapon,0;
">
},
@@ -98898,7 +98898,7 @@ item_db: (
bonus3 bAutoSpell,PR_LEXDIVINA,1,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) bonus4 bAutoSpellOnSkill,RG_RAID,NPC_WIDEBLEEDING,1,250;
@@ -100558,7 +100558,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
@@ -100833,7 +100833,7 @@ item_db: (
EquipLv: 70
View: 17
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -100854,7 +100854,7 @@ item_db: (
WeaponLv: 4
EquipLv: 160
View: 17
- Script: <" bonus bAtk,pow(min(getrefine(),15),2); ">
+ Script: <" bonus bAtk,((min(getrefine(),15)) ** (2)); ">
},
//== Guns ==================================================
@@ -101516,7 +101516,7 @@ item_db: (
bonus2 bSkillAtk,GS_TRIPLEACTION,30;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
@@ -101556,7 +101556,7 @@ item_db: (
bonus2 bSkillAtk,GS_TRIPLEACTION,30;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),10)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),10)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if (getrefine() > 8) {
@@ -101596,7 +101596,7 @@ item_db: (
bonus2 bSkillAtk,GS_TRIPLEACTION,30;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),10)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),10)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
@@ -101636,7 +101636,7 @@ item_db: (
bonus2 bSkillAtk,GS_TRIPLEACTION,30;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),10)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),10)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
@@ -103482,7 +103482,7 @@ item_db: (
autobonus "{ bonus2 bSkillAtk,NJ_HUUMA,100; bonus2 bSkillAtk,NJ_ISSEN,100; }",50,10000;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-3,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-3) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>8) {
@@ -103780,8 +103780,8 @@ item_db: (
View: 22
Script: <"
bonus bUnbreakableWeapon,0;
- bonus bAtk,pow(min(getrefine(),15),2);
- bonus bMatk,pow(min(getrefine(),15),2)/2;
+ bonus bAtk,((min(getrefine(),15)) ** (2));
+ bonus bMatk,((min(getrefine(),15)) ** (2))/2;
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -103805,8 +103805,8 @@ item_db: (
EquipLv: 160
View: 22
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
- bonus bMatk,pow(min(getrefine(),15),2)/2;
+ bonus bAtk,((min(getrefine(),15)) ** (2));
+ bonus bMatk,((min(getrefine(),15)) ** (2))/2;
bonus bUnbreakableWeapon,0;
">
},
@@ -104421,7 +104421,7 @@ item_db: (
bonus2 bIgnoreDefRate,RC_DemiPlayer,20;
bonus bUnbreakableWeapon,0;
if(getrefine()>5) {
- bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2);
+ bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2));
bonus2 bIgnoreDefRate,RC_DemiPlayer,5;
}
if(getrefine()>6) {
@@ -105160,7 +105160,7 @@ item_db: (
EquipLv: 70
View: 2
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -105190,7 +105190,7 @@ item_db: (
WeaponLv: 4
EquipLv: 160
View: 2
- Script: <" bonus bAtk,pow(min(getrefine(),15),2); ">
+ Script: <" bonus bAtk,((min(getrefine(),15)) ** (2)); ">
},
//== More Cash Shop Items ==================================
@@ -125681,7 +125681,7 @@ item_db: (
View: 8
Script: <"
bonus bUnbreakableWeapon,0;
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -125712,7 +125712,7 @@ item_db: (
EquipLv: 160
View: 8
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
bonus bUnbreakableWeapon,0;
">
},
@@ -130705,7 +130705,7 @@ item_db: (
WeaponLv: 4
EquipLv: 160
View: 11
- Script: <" bonus bAtk,pow(min(getrefine(),15),2); ">
+ Script: <" bonus bAtk,((min(getrefine(),15)) ** (2)); ">
},
{
Id: 18122
@@ -130855,7 +130855,7 @@ item_db: (
EquipLv: 7
View: 11
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -145978,8 +145978,8 @@ item_db: (
EquipLv: 70
View: 3
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
- bonus bMatk,pow(min(getrefine(),15),2)/2;
+ bonus bAtk,((min(getrefine(),15)) ** (2));
+ bonus bMatk,((min(getrefine(),15)) ** (2))/2;
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -146002,7 +146002,7 @@ item_db: (
WeaponLv: 4
EquipLv: 160
View: 3
- Script: <" bonus bAtk,pow(min(getrefine(),15),2); ">
+ Script: <" bonus bAtk,((min(getrefine(),15)) ** (2)); ">
},
{
Id: 21018
@@ -150177,7 +150177,7 @@ item_db: (
EquipLv: 70
View: 16
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,5*((BaseLevel-70)/10); }
">
},
@@ -150199,7 +150199,7 @@ item_db: (
EquipLv: 160
View: 16
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
">
},
{
@@ -150346,7 +150346,7 @@ item_db: (
View: 7
Script: <"
bonus bUnbreakableWeapon,0;
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -150373,7 +150373,7 @@ item_db: (
EquipLv: 160
View: 7
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
bonus bUnbreakableWeapon,0;
">
},
@@ -151053,8 +151053,8 @@ item_db: (
View: 15
Script: <"
bonus bUnbreakableWeapon,0;
- bonus bAtk,pow(min(getrefine(),15),2);
- bonus bMatk,pow(min(getrefine(),15),2)/2;
+ bonus bAtk,((min(getrefine(),15)) ** (2));
+ bonus bMatk,((min(getrefine(),15)) ** (2))/2;
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -151078,8 +151078,8 @@ item_db: (
EquipLv: 160
View: 15
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
- bonus bMatk,pow(min(getrefine(),15),2);
+ bonus bAtk,((min(getrefine(),15)) ** (2));
+ bonus bMatk,((min(getrefine(),15)) ** (2));
bonus bUnbreakableWeapon,0;
">
},
@@ -151185,8 +151185,8 @@ item_db: (
EquipLv: 70
View: 1
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
- bonus bMatk,pow(min(getrefine(),15),2)/2;
+ bonus bAtk,((min(getrefine(),15)) ** (2));
+ bonus bMatk,((min(getrefine(),15)) ** (2))/2;
if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }
">
},
@@ -151227,8 +151227,8 @@ item_db: (
EquipLv: 160
View: 1
Script: <"
- bonus bAtk,pow(min(getrefine(),15),2);
- bonus bMatk,pow(min(getrefine(),15),2)/2;
+ bonus bAtk,((min(getrefine(),15)) ** (2));
+ bonus bMatk,((min(getrefine(),15)) ** (2))/2;
">
},
diff --git a/doc/script_commands.txt b/doc/script_commands.txt
index 8b8326862..28e25679f 100644
--- a/doc/script_commands.txt
+++ b/doc/script_commands.txt
@@ -730,6 +730,7 @@ the common mathematical operations or conditional operators:
strings.
- - will subtract two numbers.
* - will multiply two numbers.
+** - will raise the first number to the power of the second number.
/ - will divide two numbers. Note that this is an integer division, i.e.
7/2 is not equal 3.5, it's equal 3.
% - will give you the remainder of the division. 7%2 is equal to 1.
@@ -930,42 +931,45 @@ Precedence | Description | Associativity
| ! Logical NOT |
| ~ Bitwise NOT (One's Complement) |
---------------------------------------------------------------------------
-3 | * Multiplication | Left to right
+3 | ** Exponentiation | Left to right
+---------------------------------------------------------------------------
+4 | * Multiplication | Left to right
| / Division |
| % Modulo (remainder) |
---------------------------------------------------------------------------
-4 | + Addition | Left to right
+5 | + Addition | Left to right
| - Subtraction |
---------------------------------------------------------------------------
-5 | << Bitwise left shift | Left to right
+6 | << Bitwise left shift | Left to right
| >> Bitwise right shift |
---------------------------------------------------------------------------
-6 | < Less than | Left to right
+7 | < Less than | Left to right
| <= Less than or equal to |
| > Greater than |
| >= Greater than or equal to |
---------------------------------------------------------------------------
-7 | == Equal to | Left to right
+8 | == Equal to | Left to right
| != Not equal to |
| ~= Regexp match |
| ~! Regexp non-match |
---------------------------------------------------------------------------
-8 | & Bitwise AND | Left to right
+9 | & Bitwise AND | Left to right
---------------------------------------------------------------------------
-9 | ^ Bitwise XOR (exclusive or) | Left to right
+10 | ^ Bitwise XOR (exclusive or) | Left to right
---------------------------------------------------------------------------
-10 | | Bitwise OR (inclusive or) | Left to right
+11 | | Bitwise OR (inclusive or) | Left to right
---------------------------------------------------------------------------
-11 | && Logical AND | Left to right
+12 | && Logical AND | Left to right
---------------------------------------------------------------------------
-12 | || Logical OR | Left to right
+13 | || Logical OR | Left to right
---------------------------------------------------------------------------
-13 | ?: Ternary conditional | Right to left
+14 | ?: Ternary conditional | Right to left
---------------------------------------------------------------------------
-14 | = Direct assignment | Right to left
+15 | = Direct assignment | Right to left
(lowest) | += Assignment by sum |
| -= Assignment by difference |
| *= Assignment by product |
+ | **= Assignment by power |
| /= Assignment by quotient |
| %= Assignment by remainder |
| <<= Assignment by bitwise left shift |
@@ -2437,6 +2441,17 @@ If you do this:
---------------------------------------
+*getarrayindex(<array name>)
+
+This command returns the index of the passed array. This is useful when
+used in combination with getarg()
+
+Example:
+
+ getarrayindex(.@foo[42]) // 42
+
+---------------------------------------
+
*getelementofarray(<array name>, <index>)
This command retrieves the value of the element of given array at given
@@ -7773,6 +7788,21 @@ OnAtcommand:
---------------------------------------
+*add_group_command("<command>", <group id>, <use on self>, <use on other>)
+
+Allows to explicitly change the command permissions for a specific group.
+
+This command bypasses group inheritance, which means groups inheriting from
+the specified <group id> will NOT inherit the specified permission. You should
+use add_group_command() for every group you want to give permission to.
+
+Example:
+ bindatcmd("foobar", "NPC::OnUseCommand", 99, 99, 0); // define the command
+ add_group_command("foobar", 2, true, false); // allow group 2 to use @foobar
+ add_group_command("foobar", 5, true, true); // allow group 5 to use @foobar and #foobar
+
+---------------------------------------
+
*unbindatcmd("command")
This command will unbind a NPC event label from an atcommand.
@@ -7790,7 +7820,8 @@ scripts-atcommands this way.
*can_use_command("<command>"{, <account id>})
Checks if the attached or specified player can use the specified
-atcommand and returns true or false accordingly.
+atcommand and returns true or false accordingly. Works for both
+built-in atcommands and custom atcommands.
---------------------------------------
@@ -8028,11 +8059,19 @@ instead if they want it so much.
*pow(<number>, <power>)
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @ /!\ This command is deprecated @
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+
Returns the result of the calculation.
Example:
.@i = pow(2, 3); // .@i will be 8
+This command is deprecated and it should not be used in new scripts, as it is
+likely to be removed at a later time. Please use the exponentiation operator,
+ie: (2 ** 3) instead of pow(2, 3)
+
---------------------------------------
*log10(<number>)
@@ -8247,6 +8286,18 @@ else.
---------------------------------------
+*isstr(<argument>)
+
+This command checks if the given <argument> is a string (1),
+an integer (0) or something else (2).
+
+Example:
+
+ isstr(69); // outputs 0
+ isstr("69"); // outputs 1
+
+---------------------------------------
+
*charisalpha("<string>", <position>)
This function will return true if the character number Position in the given
diff --git a/npc/custom/quests/thq/THQS_TTShop.txt b/npc/custom/quests/thq/THQS_TTShop.txt
index c85a9c9fe..96e7346d3 100644
--- a/npc/custom/quests/thq/THQS_TTShop.txt
+++ b/npc/custom/quests/thq/THQS_TTShop.txt
@@ -67,11 +67,11 @@ function script thqs_trade_token {
// 10^0, 10^1, 10^2
@type -= 1;
- @price = pow(10, @type);
+ @price = (10 ** @type);
// 10^3, 10^4, 10^5
@type += 3; // So we can use pow later to determine the qt of Zeny
- @prize = pow(10, @type);
+ @prize = (10 ** @type);
if( #Treasure_Token < @price ) {
mes "You don't have enough tokens!";
diff --git a/npc/dev/test.txt b/npc/dev/test.txt
index b711a0a28..b35beb8ed 100644
--- a/npc/dev/test.txt
+++ b/npc/dev/test.txt
@@ -268,6 +268,19 @@ function script HerculesSelfTestHelper {
callsub(OnCheck, "Order of + and *", .@x, 7);
+ // Binary ** operator
+ .@x = 2 ** 3; // .@x = 8;
+ callsub(OnCheck, "Binary ** operator", .@x, 8);
+
+ // Associativity of **
+ .@x = 2 ** 3 ** 2; // .@x = (2 ** 3) ** 2;
+ callsub(OnCheck, "Associativity of **", .@x, 64);
+
+ // Order of ** and *
+ .@x = 5 * 2 ** 3 * 2; // .@x = 5 * (2 ** 3) * 2;
+ callsub(OnCheck, "Order of ** and *", .@x, 80);
+
+
// << and >> operators
.@x = 1<<3; // .@x = 1*2*2*2;
callsub(OnCheck, "Left shift << operator", .@x, 8);
diff --git a/npc/other/Global_Functions.txt b/npc/other/Global_Functions.txt
index 544e3a672..bc19ff048 100644
--- a/npc/other/Global_Functions.txt
+++ b/npc/other/Global_Functions.txt
@@ -203,11 +203,11 @@ function script F_SaveQuestSkills {
ADV_QSK = 0; ADV_QSK2 = 0;
//1st classes quest skills
for (.@i = 0; .@i < 14; ++.@i) {
- if(getskilllv(144+.@i)) ADV_QSK |= pow(2,.@i);
+ if(getskilllv(144+.@i)) ADV_QSK |= (2 ** .@i);
}
//2nd classes quest skills
for (.@i = 0; .@i < 19; ++.@i) {
- if(getskilllv(1001+.@i)) ADV_QSK2 |= pow(2,.@i);
+ if(getskilllv(1001+.@i)) ADV_QSK2 |= (2 ** .@i);
}
return;
}
@@ -217,7 +217,7 @@ function script F_SaveQuestSkills {
function script F_Load1Skills {
//1st classes quest skills
for(.@i = 0; .@i < 14; ++.@i) {
- if(ADV_QSK|pow(2,.@i) == ADV_QSK) skill 144+.@i,1,0;
+ if(ADV_QSK|(2 ** .@i) == ADV_QSK) skill 144+.@i,1,0;
}
ADV_QSK = 0; //Clear var
return;
@@ -228,7 +228,7 @@ function script F_Load1Skills {
function script F_Load2Skills {
//2nd classes quest skills
for (.@i = 0; .@i < 19; ++.@i) {
- if(ADV_QSK2|pow(2,.@i) == ADV_QSK2) skill 1001+.@i,1,0;
+ if(ADV_QSK2|(2 ** .@i) == ADV_QSK2) skill 1001+.@i,1,0;
}
ADV_QSK2 = 0; //Clear var
return;
diff --git a/sql-files/item_db.sql b/sql-files/item_db.sql
index 113176fdb..a075dfb68 100644
--- a/sql-files/item_db.sql
+++ b/sql-files/item_db.sql
@@ -5157,7 +5157,7 @@ REPLACE INTO `item_db` VALUES ('13106','Gold_Lux','Gold Lux','4','100000','50000
REPLACE INTO `item_db` VALUES ('13107','Wasteland_Outlaw','Wasteland\'s Outlaw','4','20','10','580','68','0','0','7','2','16777216','63','2','34','3','70',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,readparam(bAgi)/10; bonus bAspdRate,readparam(bAgi)/14;','','');
REPLACE INTO `item_db` VALUES ('13108','BF_Pistol1','Soldier Revolver','4','0','0','0','70','0','0','7','0','16777216','63','2','34','3','80',NULL,'1','0','17','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus bHit,-10; bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; autobonus \"{ bonus bAspdRate,100; }\",10,3000,BF_WEAPON,\"{ specialeffect2 EF_POTION_BERSERK; }\"; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('13109','Wasteland_Outlaw_C','Wasteland Outlaw','4','20','10','0','100','0','0','7','0','16777216','63','2','34','3','0',NULL,'0','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,readparam(bAgi)/10; bonus bAspdRate,readparam(bAgi)/14; bonus2 bAddRace, RC_All, 10; bonus bMatkRate,10;','','');
-REPLACE INTO `item_db` VALUES ('13110','Krieger_Pistol1','Glorious Pistol','4','0','0','0','80','0','0','7','0','16777216','63','2','34','4','80',NULL,'1','0','17','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(getrefine()-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,GS_RAPIDSHOWER,GS_GLITTERING,1,1000; bonus2 bSkillAtk,GS_RAPIDSHOWER,getrefine()*2; }','','');
+REPLACE INTO `item_db` VALUES ('13110','Krieger_Pistol1','Glorious Pistol','4','0','0','0','80','0','0','7','0','16777216','63','2','34','4','80',NULL,'1','0','17','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((getrefine()-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,GS_RAPIDSHOWER,GS_GLITTERING,1,1000; bonus2 bSkillAtk,GS_RAPIDSHOWER,getrefine()*2; }','','');
REPLACE INTO `item_db` VALUES ('13112','P_Revolver1','Eden Revlover I','4','0','0','0','4','0','0','7','0','16777216','63','2','34','1','26',NULL,'0','0','17','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-5;','','');
REPLACE INTO `item_db` VALUES ('13113','P_Revolver2','Eden Revlover II','4','0','0','0','60','0','0','7','0','16777216','63','2','34','1','40',NULL,'0','0','17','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-5;','','');
REPLACE INTO `item_db` VALUES ('13150','Branch','Branch','4','3000','1500','500','50','0','0','9','3','16777216','63','2','34','1','1',NULL,'1','0','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
diff --git a/sql-files/item_db_re.sql b/sql-files/item_db_re.sql
index f6ca7678f..8712b77d4 100644
--- a/sql-files/item_db_re.sql
+++ b/sql-files/item_db_re.sql
@@ -592,7 +592,7 @@ REPLACE INTO `item_db` VALUES ('1183','BF_Two_Handed_Sword1','Brave Assaulter\'s
REPLACE INTO `item_db` VALUES ('1184','BF_Two_Handed_Sword2','Valorous Assaulter\'s Katzbalger','4','20','10','0','200','0','0','1','0','16514','63','2','34','3','80',NULL,'1','0','3','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bCritical,20; bonus2 bAddRace,RC_DemiPlayer,55; bonus bCritAtkRate,20; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1185','Violet_Fear','Violet Fear','4','20','10','2200','275','0','0','1','2','16514','58','2','34','4','80',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,WZ_METEOR,3,30; bonus3 bAutoSpell,WZ_FROSTNOVA,5,50; autobonus \"{ bonus bIgnoreDefRace,RC_NonBoss; }\",50,5000;','','');
REPLACE INTO `item_db` VALUES ('1186','Death_Guidance','Death Guidance','4','20','10','2000','200','0','0','1','2','16514','58','2','34','4','70',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','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;','','');
-REPLACE INTO `item_db` VALUES ('1187','Krieger_Twohand_Sword1','Glorious Claymore','4','20','10','0','220','0','0','1','0','16514','63','2','34','4','80',NULL,'1','0','3','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(), 14)-3,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus3 bAutoSpell,LK_CONCENTRATION,max(getskilllv(LK_CONCENTRATION),1),30; bonus3 bAutoSpell,LK_AURABLADE,max(getskilllv(LK_AURABLADE),1),30; }','','');
+REPLACE INTO `item_db` VALUES ('1187','Krieger_Twohand_Sword1','Glorious Claymore','4','20','10','0','220','0','0','1','0','16514','63','2','34','4','80',NULL,'1','0','3','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(), 14)-3) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus3 bAutoSpell,LK_CONCENTRATION,max(getskilllv(LK_CONCENTRATION),1),30; bonus3 bAutoSpell,LK_AURABLADE,max(getskilllv(LK_AURABLADE),1),30; }','','');
REPLACE INTO `item_db` VALUES ('1188','Veteran_Sword','Veteran Sword','4','10000','5000','2000','180','0','0','1','1','16514','63','2','34','4','80',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','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;','','');
REPLACE INTO `item_db` VALUES ('1189','Krasnaya','Krasnaya','4','20','10','3800','200','0','0','2','3','16514','58','2','34','2','50',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if(readparam(bStr)>=95) { bonus bBaseAtk,20; }','','');
REPLACE INTO `item_db` VALUES ('1190','Claymore_C','Claymore','4','0','0','0','220','0','0','1','0','16512','63','2','34','3','0',NULL,'0','0','3','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40;','','');
@@ -685,8 +685,8 @@ REPLACE INTO `item_db` VALUES ('1277','Katar_Of_Raging_Blaze_','Katar of Raging
REPLACE INTO `item_db` VALUES ('1278','Katar_Of_Piercing_Wind_','Katar of Piercing Wind','4','45000','22500','1200','105','0','0','1','3','4096','63','2','34','3','55',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Wind; bonus2 bAddEff,Eff_Sleep,500;','','');
REPLACE INTO `item_db` VALUES ('1279','BF_Katar1','Brave Carnage Katar','4','20','10','0','130','0','0','1','0','4096','63','2','34','3','80',NULL,'1','0','16','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1280','BF_Katar2','Valorous Carnage Katar','4','20','10','0','130','0','0','1','0','4096','63','2','34','3','80',NULL,'1','0','16','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiPlayer,70; bonus bCritAtkRate,20; bonus bAspdRate,5; bonus bUnbreakableWeapon,0;','','');
-REPLACE INTO `item_db` VALUES ('1281','Krieger_Katar1','Glorious Bloody Roar','4','20','10','0','140','0','0','1','0','4096','63','2','34','4','80',NULL,'1','0','16','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) autobonus \"{ bonus bAspdRate,100; }\",70,3000,BF_WEAPON,\"{ specialeffect2 EF_POTION_BERSERK; }\";','','');
-REPLACE INTO `item_db` VALUES ('1282','Krieger_Katar2','Glorious Jamadhar','4','20','10','0','140','0','0','1','0','4096','63','2','34','4','80',NULL,'1','0','16','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bCriticalAddRace,RC_DemiPlayer,5; } if(getrefine()>8) autobonus \"{ bonus bAspdRate,100; }\",70,3000,BF_WEAPON,\"{ specialeffect2 EF_POTION_BERSERK; }\";','','');
+REPLACE INTO `item_db` VALUES ('1281','Krieger_Katar1','Glorious Bloody Roar','4','20','10','0','140','0','0','1','0','4096','63','2','34','4','80',NULL,'1','0','16','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) autobonus \"{ bonus bAspdRate,100; }\",70,3000,BF_WEAPON,\"{ specialeffect2 EF_POTION_BERSERK; }\";','','');
+REPLACE INTO `item_db` VALUES ('1282','Krieger_Katar2','Glorious Jamadhar','4','20','10','0','140','0','0','1','0','4096','63','2','34','4','80',NULL,'1','0','16','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bCriticalAddRace,RC_DemiPlayer,5; } if(getrefine()>8) autobonus \"{ bonus bAspdRate,100; }\",70,3000,BF_WEAPON,\"{ specialeffect2 EF_POTION_BERSERK; }\";','','');
REPLACE INTO `item_db` VALUES ('1283','Katar_Of_Speed','Katar Of Speed','4','20','10','0','175','0','0','1','0','4096','63','2','34','4','0',NULL,'0','0','16','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,AS_SONICBLOW,25; bonus bAspdRate,3;','','');
REPLACE INTO `item_db` VALUES ('1284','Krishna','Krishna','4','20','10','1200','120','0','0','1','2','4096','58','2','34','3','50',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,AS_GRIMTOOTH,10; if(getskilllv(AS_SONICBLOW)) { bonus3 bAutoSpell,AS_SONICBLOW,getskilllv(AS_SONICBLOW),5; } else { bonus3 bAutoSpell,AS_SONICBLOW,1,5; }','','');
REPLACE INTO `item_db` VALUES ('1285','Cakram','Chakram','4','20','10','1000','130','0','0','1','2','4096','58','2','34','3','50',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if(getskilllv(AS_KATAR)==10) { bonus bHit,10; } bonus2 bSkillAtk,ASC_METEORASSAULT,20;','','');
@@ -713,7 +713,7 @@ REPLACE INTO `item_db` VALUES ('1306','War_Axe','War Axe','4','20','10','4200','
REPLACE INTO `item_db` VALUES ('1307','Windhawk','Windhawk','4','18000','9000','1500','115','0','0','1','0','414946','63','2','2','2','14',NULL,'1','0','6','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Wind; bonus bAspdRate,5;','','');
REPLACE INTO `item_db` VALUES ('1308','Golden_Axe','Golden Axe','4','20','10','3000','170','0','0','1','0','1','47','2','2','4','45',NULL,'1','0','6','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1309','Orcish_Axe_','Orcish Axe','4','20','10','1500','75','0','0','1','4','283811','63','2','2','3','3',NULL,'1','0','6','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('1310','Krieger_Onehand_Axe1','Glorious Cleaver','4','20','10','0','130','0','0','1','0','279714','63','2','2','4','80',NULL,'1','0','6','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus bAspdRate,5; bonus3 bAutoSpell,NPC_CRITICALWOUND,1,50; bonus4 bAutoSpellOnSkill,MC_MAMMONITE,NPC_CRITICALWOUND,2,200; }','','');
+REPLACE INTO `item_db` VALUES ('1310','Krieger_Onehand_Axe1','Glorious Cleaver','4','20','10','0','130','0','0','1','0','279714','63','2','2','4','80',NULL,'1','0','6','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus bAspdRate,5; bonus3 bAutoSpell,NPC_CRITICALWOUND,1,50; bonus4 bAutoSpellOnSkill,MC_MAMMONITE,NPC_CRITICALWOUND,2,200; }','','');
REPLACE INTO `item_db` VALUES ('1311','Vecer_Axe','Vecer Axe','4','20','10','1500','140','0','0','1','2','279714','58','2','2','3','50',NULL,'1','0','6','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','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; }','','');
REPLACE INTO `item_db` VALUES ('1312','Orcish_Axe_C','Orcish Axe','4','0','0','0','110','0','0','1','0','283811','63','2','2','3','0',NULL,'0','0','6','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddSize,Size_Small,70; bonus2 bAddSize,Size_Medium,70; bonus2 bAddSize,Size_Large,70;','','');
REPLACE INTO `item_db` VALUES ('1313','Tourist_Axe','Traveler\'s Axe','4','0','0','500','77','0','0','1','0','283811','63','2','2','1','0',NULL,'0','0','6','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2;','','');
@@ -755,7 +755,7 @@ REPLACE INTO `item_db` VALUES ('1378','Great_Axe_C','Refined Great Axe','4','1',
REPLACE INTO `item_db` VALUES ('1379','BF_Two_Handed_Axe1','Valorous Insane Battle Axe','4','20','10','0','200','0','0','1','0','279714','63','2','34','3','80',NULL,'1','0','7','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3; bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1380','BF_Two_Handed_Axe2','Brave Insane Battle Axe','4','20','10','0','200','0','0','1','0','279714','63','2','34','3','80',NULL,'1','0','7','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,3; bonus2 bAddRace,RC_DemiPlayer,55; autobonus \"{ bonus bBreakArmorRate,10000; }\",20,3000,BF_WEAPON,\"{ specialeffect2 EF_POTION_BERSERK; }\"; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1381','N_Battle_Axe','Novice Battle Axe','4','0','0','0','100','0','0','1','3','279714','63','2','34','1','3',NULL,'0','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('1382','Krieger_Twohand_Axe1','Glorious Twohanded Axe','4','20','10','0','220','0','0','1','0','279714','63','2','34','4','80',NULL,'1','0','7','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-3,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,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; }','','');
+REPLACE INTO `item_db` VALUES ('1382','Krieger_Twohand_Axe1','Glorious Twohanded Axe','4','20','10','0','220','0','0','1','0','279714','63','2','34','4','80',NULL,'1','0','7','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-3) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,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; }','','');
REPLACE INTO `item_db` VALUES ('1383','Holy_Celestial_Axe','Holy Celestial Axe','4','20','10','1500','200','0','0','1','0','263200','63','2','34','4','60',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Holy; bonus bVit,10; bonus2 bAddRace,RC_Undead,10; bonus3 bAutoSpell,AL_BLESSING,5,50;','','');
REPLACE INTO `item_db` VALUES ('1384','Veteran_Axe','Veteran Axe','4','10000','5000','3000','250','0','0','1','2','263200','63','2','34','3','80',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','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; bonus4 bAutoSpellOnSkill,BS_HAMMERFALL,SM_MAGNUM,3,500;','','');
REPLACE INTO `item_db` VALUES ('1385','Bradium_Stonehammer','Bradium Stonehammer','4','20','10','2700','210','0','0','1','0','1024','58','2','34','4','75',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAddEffOnSkill,BS_HAMMERFALL,Eff_Stun,500+(200*getrefine());','','');
@@ -773,7 +773,7 @@ REPLACE INTO `item_db` VALUES ('1396','Velum_Guillotine','Vellum Guillotine','4'
REPLACE INTO `item_db` VALUES ('1397','Bradium_Stonehammer_','Bradium Stone Hammer','4','20','10','2700','210','0','0','1','2','1024','58','2','34','4','75',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1398','Metal_Two_Handed_Axe','Metal Two-Handed Axe','4','20','10','0','105','0','0','1','1','279714','63','2','34','3','0',NULL,'1','0','7','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bBaseAtk,(getrefine()*7); .@val = min(BaseLevel/10, 12); if (.@val > 2) { bonus bBaseAtk,((.@val-2)*5); }','','');
REPLACE INTO `item_db` VALUES ('1399','TE_Woe_Two_Handed_Axe','TE WoE Two-Handed Axe','4','20','10','0','150','0','0','1','0','279714','63','2','34','3','40',NULL,'0','0','7','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Stun,1000;','','');
-REPLACE INTO `item_db` VALUES ('1400','Spear_of_Vicious_Mind','Spear of Vicious Mind','4','20','10','1400','140','0','0','3','1','16514','63','2','2','4','160',NULL,'1','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2);','','');
+REPLACE INTO `item_db` VALUES ('1400','Spear_of_Vicious_Mind','Spear of Vicious Mind','4','20','10','1400','140','0','0','3','1','16514','63','2','2','4','160',NULL,'1','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2));','','');
REPLACE INTO `item_db` VALUES ('1401','Javelin','Javelin','4','150','75','700','28','0','0','3','3','16514','63','2','2','1','4',NULL,'1','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1402','Javelin_','Javelin','4','150','75','700','28','0','0','3','4','16514','63','2','2','1','4',NULL,'1','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1403','Javelin__','Javelin','4','150','75','700','28','0','0','3','0','16514','63','2','2','1','4',NULL,'1','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -799,7 +799,7 @@ REPLACE INTO `item_db` VALUES ('1422','Hunting_Spear','Hunting Spear','4','20','
REPLACE INTO `item_db` VALUES ('1423','Pole_XO','Pole XO','4','20','10','0','120','0','0','3','0','16514','63','2','2','1','0',NULL,'0','0','4','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace, RC_All, 50;','','');
REPLACE INTO `item_db` VALUES ('1424','Skewer_C','Refined Brocca','4','1','0','0','149','0','0','3','0','16514','63','2','2','4','0',NULL,'0','0','4','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bIgnoreDefRace,RC_NonBoss; bonus2 bAddSize,Size_Medium,20;','','');
REPLACE INTO `item_db` VALUES ('1425','BF_Spear1','Assaulter Spear','4','20','10','0','60','0','0','3','0','16514','63','2','2','3','80',NULL,'1','0','4','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2; bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(BaseJob==Job_Crusader) bonus bAspdRate,20;','','');
-REPLACE INTO `item_db` VALUES ('1426','Krieger_Onehand_Spear1','Glorious Spear','4','20','10','0','130','0','0','3','0','16514','63','2','2','4','80',NULL,'1','0','4','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,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; }','','');
+REPLACE INTO `item_db` VALUES ('1426','Krieger_Onehand_Spear1','Glorious Spear','4','20','10','0','130','0','0','3','0','16514','63','2','2','4','80',NULL,'1','0','4','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,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; }','','');
REPLACE INTO `item_db` VALUES ('1427','Spear_Of_Excellent','Spear Of Excellent','4','20','10','0','160','0','0','3','0','16514','63','2','2','3','0',NULL,'0','0','4','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,SM_MAGNUM,25; bonus bStr,2;','','');
REPLACE INTO `item_db` VALUES ('1428','Long_Horn_M','Long Horn','4','20','10','1000','150','0','0','3','1','16514','58','2','2','4','65',NULL,'1','0','4','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Holy; bonus2 bAddEff,Eff_Bleeding,500; skill TF_DETOXIFY,1; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1429','Hunting_Spear_M','Hunting Spear','4','20','10','4200','180','0','0','3','1','16514','58','2','2','4','60',NULL,'1','0','4','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus bIgnoreDefRace,RC_Brute; bonus3 bAddMonsterDropItem,517,RC_Brute,1000; bonus3 bAutoSpell,LK_JOINTBEAT,3,500;','','');
@@ -813,8 +813,8 @@ REPLACE INTO `item_db` VALUES ('1436','Velum_Spear','Vellum Spear','4','20','10'
REPLACE INTO `item_db` VALUES ('1437','TE_Woe_Pike','TE WoE Pike','4','20','10','0','100','0','0','3','0','16514','63','2','2','3','40',NULL,'0','0','4','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Curse,1000;','','');
REPLACE INTO `item_db` VALUES ('1438','Thanos_Spear','Thanatos Spear','4','20','10','3000','150','100','0','3','1','16514','56','2','2','4','120',NULL,'1','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
REPLACE INTO `item_db` VALUES ('1441','Ru_Blue_Spear','Ru Blue Spear','4','20','10','1200','200','0','0','3','1','16384','63','2','2','3','100',NULL,'1','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,5; bonus bAgi,5;','','');
-REPLACE INTO `item_db` VALUES ('1443','Scarlet_Spear','Crimson Spear','4','20','10','900','90','0','0','3','2','16514','63','2','2','3','70',NULL,'1','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('1450','Lance_of_Vicious_Mind','Lance of Vicious Mind','4','20','10','2250','225','0','0','3','1','16514','63','2','34','4','160',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2);','','');
+REPLACE INTO `item_db` VALUES ('1443','Scarlet_Spear','Crimson Spear','4','20','10','900','90','0','0','3','2','16514','63','2','2','3','70',NULL,'1','0','4','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('1450','Lance_of_Vicious_Mind','Lance of Vicious Mind','4','20','10','2250','225','0','0','3','1','16514','63','2','34','4','160',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2));','','');
REPLACE INTO `item_db` VALUES ('1451','Guisarme','Guisarme','4','13000','6500','1000','84','0','0','3','2','16514','63','2','34','2','18',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1452','Guisarme_','Guisarme','4','13000','6500','1000','84','0','0','3','3','16514','63','2','34','2','18',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1453','Guisarme__','Guisarme','4','13000','6500','1000','84','0','0','3','0','16514','63','2','34','2','18',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -850,7 +850,7 @@ REPLACE INTO `item_db` VALUES ('1482','BF_Lance1','Assaulter Lance','4','20','10
REPLACE INTO `item_db` VALUES ('1483','Ivory_Lance','Ivory Lance','4','20','10','1000','160','0','0','3','1','16514','58','2','34','3','50',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2; bonus bAspdRate,3; bonus2 bAddEff,Eff_Bleeding,300; bonus3 bAutoSpell,NPC_CRITICALWOUND,1,30; skill KN_SPEARSTAB,5;','','');
REPLACE INTO `item_db` VALUES ('1484','Cardo','Cardo','4','20','10','5600','150','0','0','3','1','128','58','2','34','4','70',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate,-10; bonus bDef,getrefine()/2;','','');
REPLACE INTO `item_db` VALUES ('1485','Battle_Fork','Battle Fork','4','20','10','700','112','0','0','3','4','16514','58','2','34','2','50',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('1486','Krieger_Twohand_Spear1','Glorious Lance','4','20','10','0','220','0','0','3','0','16514','63','2','34','4','80',NULL,'1','0','5','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,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; }','','');
+REPLACE INTO `item_db` VALUES ('1486','Krieger_Twohand_Spear1','Glorious Lance','4','20','10','0','220','0','0','3','0','16514','63','2','34','4','80',NULL,'1','0','5','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,70; bonus2 bIgnoreDefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,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; }','','');
REPLACE INTO `item_db` VALUES ('1487','Lance_C','Lance','4','0','0','0','220','0','0','3','0','16514','63','2','34','3','0',NULL,'0','0','5','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus2 bAddSize,Size_Small,50; bonus2 bAddSize,Size_Medium,50; bonus2 bAddSize,Size_Large,50;','','');
REPLACE INTO `item_db` VALUES ('1488','Ahlspiess_C','Ahlspiess','4','20','10','0','135','0','0','3','0','16512','63','2','34','4','0',NULL,'1','0','5','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bIgnoreDefRace, RC_All; bonus2 bAddRace,RC_DemiPlayer,10; bonus3 bAutoSpell,KN_PIERCE,5,30;','','');
REPLACE INTO `item_db` VALUES ('1489','Spearfish_','Marlin','4','0','0','0','220','0','0','3','0','16514','63','2','34','1','50',NULL,'0','0','5','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus3 bAddEffOnSkill,KN_PIERCE,Eff_Bleeding,1000; bonus3 bAddEffOnSkill,LK_SPIRALPIERCE,Eff_Bleeding,1000; bonus2 bSkillAtk,LK_SPIRALPIERCE,100; bonus2 bSkillAtk,LG_INSPIRATION,50; //bonus4 bAddEff,Eff_FrosMisty,100,ATF_SHORT,3000; //Need to be Frost Misty if(BaseLevel>99) { bonus bBaseAtk,30; }','','');
@@ -861,7 +861,7 @@ REPLACE INTO `item_db` VALUES ('1493','Metal_Lance','Metal Lance','4','20','10',
REPLACE INTO `item_db` VALUES ('1494','Undine_Spear','Spear Of Odin','4','50000','25000','3800','190','0','0','3','3','16514','63','2','34','4','105',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Water;','','');
REPLACE INTO `item_db` VALUES ('1495','TE_Woe_Lance','TE WoE Lance','4','0','0','0','150','0','0','3','0','16514','63','2','34','3','40',NULL,'0','0','5','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Blind,1000;','','');
REPLACE INTO `item_db` VALUES ('1496','Thanos_Long_Spear','Thanatos Long Spear','4','20','10','3750','250','50','0','3','1','16514','56','2','34','4','120',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
-REPLACE INTO `item_db` VALUES ('1498','Scarlet_Lance','Crimson Lance','4','20','10','1750','175','0','0','3','2','16514','63','2','34','3','70',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('1498','Scarlet_Lance','Crimson Lance','4','20','10','1750','175','0','0','3','2','16514','63','2','34','3','70',NULL,'1','0','5','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('1501','Club','Club','4','120','60','700','23','0','0','1','3','312755','63','2','2','1','2',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1502','Club_','Club','4','120','60','700','23','0','0','1','4','312755','63','2','2','1','2',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1503','Club__','Club','4','120','60','700','23','0','0','1','0','312755','63','2','2','1','2',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -907,7 +907,7 @@ REPLACE INTO `item_db` VALUES ('1542','BF_Morning_Star1','Valorous Battlefield M
REPLACE INTO `item_db` VALUES ('1543','BF_Morning_Star2','Brave Battlefield Morning Star','4','20','10','0','105','0','0','1','0','312755','63','2','2','3','80',NULL,'1','0','8','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; bonus bDex,1; bonus2 bAddRace,RC_DemiPlayer,75; bonus bUnbreakableWeapon,0; autobonus \"{ bonus2 bAddEff,Eff_Stun,5000; }\",10,6000,BF_WEAPON,\"{ specialeffect2 EF_POTION_BERSERK; }\";','','');
REPLACE INTO `item_db` VALUES ('1544','Lunakaligo','Lunakaligo','4','20','10','700','110','0','0','1','3','33040','58','2','2','3','50',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','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; }','','');
REPLACE INTO `item_db` VALUES ('1545','N_Mace','Novice Mace','4','0','0','0','57','0','0','1','3','312755','63','2','2','1','2',NULL,'0','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('1546','Krieger_Onehand_Mace1','Glorious Morning Star','4','20','10','0','130','0','0','1','0','312755','63','2','2','4','80',NULL,'1','0','8','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus2 bAddEff,Eff_Stun,2000; bonus bAspdRate,5; }','','');
+REPLACE INTO `item_db` VALUES ('1546','Krieger_Onehand_Mace1','Glorious Morning Star','4','20','10','0','130','0','0','1','0','312755','63','2','2','4','80',NULL,'1','0','8','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; bonus bAspdRate,5; } if(getrefine()>8) { bonus2 bAddEff,Eff_Stun,2000; bonus bAspdRate,5; }','','');
REPLACE INTO `item_db` VALUES ('1547','Mace_Of_Madness','Mace Of Madness','4','20','10','0','150','0','0','1','0','6571170','63','2','2','3','0',NULL,'0','0','8','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,MC_CARTREVOLUTION,25; bonus bStr,2;','','');
REPLACE INTO `item_db` VALUES ('1548','Veteran_Hammer','Veteran Hammer','4','10000','5000','1800','160','0','0','1','2','33040','63','2','2','3','80',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHealPower,getskilllv(AL_DP); bonus bCritical,getskilllv(PR_MACEMASTERY)*2; bonus bInt,1; bonus bLuk,1;','','');
REPLACE INTO `item_db` VALUES ('1549','Pilebuncker','Pile Bunker','4','10000','5000','3500','450','0','0','1','0','1024','56','2','2','3','99',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -937,7 +937,7 @@ REPLACE INTO `item_db` VALUES ('1572','Principles_Of_Magic','Principles of Magic
REPLACE INTO `item_db` VALUES ('1573','Ancient_Magic','Ancient Magic','4','20','10','700','30','140','0','1','2','4260096','63','2','2','3','70',NULL,'1','0','15','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1574','BF_Book1','Brave Battle Strategy Book','4','20','10','0','90','125','0','1','0','4260096','63','2','2','3','80',NULL,'1','0','15','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2; bonus bInt,1; bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1575','BF_Book2','Valorous Battle Strategy Book','4','20','10','0','90','125','0','1','0','4260096','63','2','2','3','80',NULL,'1','0','15','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; bonus bInt,2; bonus2 bIgnoreMdefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0;','','');
-REPLACE INTO `item_db` VALUES ('1576','Krieger_Book1','Glorious Tablet','4','20','10','0','90','115','0','1','0','4260096','63','2','2','4','80',NULL,'1','0','15','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,80; bonus2 bIgnoreDefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) autobonus \"{ bonus bBaseAtk,200; }\",30,3000,BF_WEAPON,\"{ specialeffect2 EF_BASH3D; }\";','','');
+REPLACE INTO `item_db` VALUES ('1576','Krieger_Book1','Glorious Tablet','4','20','10','0','90','115','0','1','0','4260096','63','2','2','4','80',NULL,'1','0','15','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,80; bonus2 bIgnoreDefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) autobonus \"{ bonus bBaseAtk,200; }\",30,3000,BF_WEAPON,\"{ specialeffect2 EF_BASH3D; }\";','','');
REPLACE INTO `item_db` VALUES ('1577','Krieger_Book2','Glorious Apocalypse','4','20','10','0','90','115','0','1','0','4260096','63','2','2','4','80',NULL,'1','0','15','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,80; bonus2 bIgnoreDefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus2 bIgnoreDefRate,RC_DemiPlayer,5; if(getrefine()>8) { bonus bMatkRate,5; bonus bVariableCastrate,-5; bonus bDelayrate,-5; }','','');
REPLACE INTO `item_db` VALUES ('1578','Book_Of_Prayer','Book Of Prayer','4','20','10','0','140','0','0','1','0','4260096','63','2','2','3','0',NULL,'0','0','15','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10;','','');
REPLACE INTO `item_db` VALUES ('1579','Death_Note_M','Book of the Dead','4','20','10','1000','137','0','0','1','2','4260096','63','2','2','4','85',NULL,'1','0','15','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiPlayer,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,NPC_HELLJUDGEMENT,5,20;','','');
@@ -955,7 +955,7 @@ REPLACE INTO `item_db` VALUES ('1590','Snake_Encyclopedia','Snake Encyclopedia',
REPLACE INTO `item_db` VALUES ('1591','TE_Woe_Book','TE WoE Book','4','20','10','0','120','0','0','1','0','4260096','63','2','2','3','40',NULL,'0','0','15','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Player,40; bonus2 bMagicAddRace,RC_Player,5; bonus bHealPower,5; bonus2 bAddEff,Eff_Blind,1000;','','');
REPLACE INTO `item_db` VALUES ('1598','Snake_Encyclopedia_','Snake Encyclopedia','4','60000','30000','1500','10','110','0','1','3','4260096','63','2','2','4','105',NULL,'1','0','15','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,getrefine()*3; bonus bMatk,getrefine()*3;','','');
REPLACE INTO `item_db` VALUES ('1599','Angra_Manyu','Angra manyu','4','1','0','10','10000','10000','0','2','0','18446744073709551615','63','2','2','1','0',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAllStats,50; bonus bBaseAtk,3300; bonus bMatkRate,200; bonus2 bHPDrainRate,1000,100; bonus2 bSPDrainRate,1000,20; bonus bHealPower,200; bonus2 bAddRace, RC_All, 100; skill WZ_STORMGUST,10; skill WZ_METEOR,10; skill WZ_VERMILION,10; skill GM_SANDMAN,1; bonus bVariableCastrate,-100; bonus bFixedCastrate,-100;','','');
-REPLACE INTO `item_db` VALUES ('1600','Rod_of_Vicious_Mind','Rod of Vicious Mind','4','20','10','600','60','120','0','1','1','8487701','63','2','2','4','160',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,5; bonus bMatk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,0;','','');
+REPLACE INTO `item_db` VALUES ('1600','Rod_of_Vicious_Mind','Rod of Vicious Mind','4','20','10','600','60','120','0','1','1','8487701','63','2','2','4','160',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,5; bonus bMatk,((min(getrefine(),15)) ** (2)); bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1601','Rod','Rod','4','50','25','400','15','30','0','1','3','8487701','63','2','2','1','0',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1602','Rod_','Rod','4','50','25','400','15','30','0','1','4','8487701','63','2','2','1','0',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1603','Rod__','Rod','4','50','25','400','15','30','0','1','0','8487701','63','2','2','1','0',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -1027,7 +1027,7 @@ REPLACE INTO `item_db` VALUES ('1668','Sword_Stick','Sword Stick','4','20','10',
REPLACE INTO `item_db` VALUES ('1669','Thanos_Staff','Thanatos Staff','4','20','10','1000','100','200','0','1','1','99092','56','2','2','4','120',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000; bonus bHealPower,15;','','heal -1000,0;');
REPLACE INTO `item_db` VALUES ('1670','RWC_Memory_Staff','RWC Memory Staff','4','20','10','500','25','30','0','1','1','8487700','63','2','2','3','0',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bMatk,30*(getrefine()/3); if (getrefine()>=7) { .@val = 1; bonus4 bAutoSpell,HW_MAGICPOWER,1,10,0; } if (getrefine() >= 4) { bonus2 bMagicAddRace, RC_All, 5*(.@val+1); }','','');
REPLACE INTO `item_db` VALUES ('1671','Staff_Of_Evil_Slayer','Evil Slayer Vanquisher Staff','4','20','10','800','30','155','0','1','1','8487700','56','2','2','3','0',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Demon,10; bonus2 bAddRace,RC_Undead,10; bonus2 bMagicAddRace,RC_Demon,10; bonus2 bMagicAddRace,RC_Undead,10; if(getrefine()>=9){ bonus bMatkRate,5; } if(getrefine()>=12){ bonus bMatkRate,7; }','','');
-REPLACE INTO `item_db` VALUES ('1680','Scarlet_Rod','Crimson Rod','4','20','10','600','60','70','0','1','2','8487701','63','2','2','3','70',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,5; bonus bMatk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bMatk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('1680','Scarlet_Rod','Crimson Rod','4','20','10','600','60','70','0','1','2','8487701','63','2','2','3','70',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,5; bonus bMatk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bMatk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('1681','Short_Foxtail_Staff','Short Foxtail Staff','4','20','10','0','30','0','0','1','0','0','63','2','2','1','1',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1683','Enriched_Foxtail_Staff','Enriched Foxtail Staff','4','20','10','200','50','70','0','1','1','0','7','2','2','2','12',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxSP, 50;','','');
REPLACE INTO `item_db` VALUES ('1684','Long_Foxtail_Staff','Long Foxtail Staff','4','20','10','200','50','0','0','2','1','0','63','2','2','2','12',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate, 5; bonus bMaxHP, 200;','','');
@@ -1084,7 +1084,7 @@ REPLACE INTO `item_db` VALUES ('1739','BF_Bow2','Brave Battle CrossBow','4','20'
REPLACE INTO `item_db` VALUES ('1740','Nepenthes_Bow','Nepenthes Bow','4','20','10','1000','105','0','0','5','2','2048','58','2','34','4','60',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus4 bAutoSpellOnSkill,AC_DOUBLE,AC_CHARGEARROW,1,20;','','');
REPLACE INTO `item_db` VALUES ('1741','Cursed_Lyre','Cursed Lyre','4','20','10','1250','125','0','0','5','1','526344','58','2','34','4','80',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,-2; bonus2 bAddEff,Eff_Curse,400;','','');
REPLACE INTO `item_db` VALUES ('1742','N_Composite_Bow','Novice Composite Bow','4','0','0','0','49','0','0','5','3','657480','63','2','34','1','4',NULL,'0','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('1743','Krieger_Bow1','Glorious Hunter Bow','4','20','10','0','100','0','0','5','0','657480','63','2','34','4','80',NULL,'1','0','11','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bCritAtkRate,getrefine() * 2; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) bonus2 bSkillAtk,AC_DOUBLE,20;','','');
+REPLACE INTO `item_db` VALUES ('1743','Krieger_Bow1','Glorious Hunter Bow','4','20','10','0','100','0','0','5','0','657480','63','2','34','4','80',NULL,'1','0','11','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bCritAtkRate,getrefine() * 2; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) bonus2 bSkillAtk,AC_DOUBLE,20;','','');
REPLACE INTO `item_db` VALUES ('1744','Bow_Of_Evil','Bow Of Evil','4','20','10','0','170','0','0','5','0','657480','63','2','34','4','0',NULL,'0','0','11','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,AC_DOUBLE,25; bonus bDex,2;','','');
REPLACE INTO `item_db` VALUES ('1745','Falken_Blitz','Falken Blitz','4','20','10','1000','100','0','0','5','2','2048','58','2','34','3','50',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,SN_SHARPSHOOTING,10; bonus2 bSkillAtk,AC_DOUBLE,10; bonus2 bSkillAtk,AC_CHARGEARROW,10;','','');
REPLACE INTO `item_db` VALUES ('1746','Elven_Bow','Elven Bow','4','20','10','1500','160','0','0','5','1','526336','56','2','34','3','100',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','','');
@@ -1118,7 +1118,7 @@ REPLACE INTO `item_db` VALUES ('1773','Arrow_Of_Elf','Elven Arrow','10','5','2',
REPLACE INTO `item_db` VALUES ('1774','Hunting_Arrow','Hunting Arrow','10','5','2','1','35','0','0','0','0','661576','63','2','32768','0','0',NULL,'0','1','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1775','Siege_Arrow_S','WoE Arrow S','10','10','5','1','45','0','0','0','0','661576','63','2','32768','0','130',NULL,'0','1','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1776','Siege_Arrow_A','WoE Arrow A','10','10','5','1','30','0','0','0','0','661576','63','2','32768','0','95',NULL,'0','1','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('1800','Fist_of_Vicious_Mind','Fist of Vicious Mind','4','20','10','1500','150','0','0','1','1','33024','63','2','2','4','160',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2);','','');
+REPLACE INTO `item_db` VALUES ('1800','Fist_of_Vicious_Mind','Fist of Vicious Mind','4','20','10','1500','150','0','0','1','1','33024','63','2','2','4','160',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2));','','');
REPLACE INTO `item_db` VALUES ('1801','Waghnakh','Waghnak','4','8000','4000','400','30','0','0','1','3','33024','63','2','2','1','0',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1802','Waghnakh_','Waghnak','4','8000','4000','400','30','0','0','1','4','33024','63','2','2','1','0',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1803','Knuckle_Duster','Knuckle Dusters','4','25000','12500','450','50','0','0','1','2','33024','63','2','2','2','12',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -1144,8 +1144,8 @@ REPLACE INTO `item_db` VALUES ('1822','Combo_Battle_Glove','Combo Battle Glove',
REPLACE INTO `item_db` VALUES ('1823','BF_Knuckle1','Valorous Battle Fist','4','20','10','0','30','0','0','1','0','33024','63','2','2','3','80',NULL,'1','0','12','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2; bonus bAgi,1; bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus4 bAutoSpell,CH_SOULCOLLECT,1,5,0; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1824','BF_Knuckle2','Brave Battle Fist','4','20','10','0','30','0','0','1','0','33024','63','2','2','3','80',NULL,'1','0','12','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2; bonus bInt,1; bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bVariableCastrate,MO_EXTREMITYFIST,-25; autobonus \"{ bonus2 bVariableCastrate,MO_EXTREMITYFIST,-100; }\",50,6000,BF_WEAPON,\"{ specialeffect2 EF_SUFFRAGIUM; }\"; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1825','Horn_Of_Hilthrion','Horn of Hillslion','4','20','10','600','95','0','0','1','3','32768','58','2','2','3','60',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,NPC_CRITICALWOUND,1,100; bonus4 bAutoSpellOnSkill,CH_PALMSTRIKE,MO_INVESTIGATE,1,100; bonus3 bAutoSpell,MO_CALLSPIRITS,5,100;','','');
-REPLACE INTO `item_db` VALUES ('1826','Krieger_Knuckle1','Glorious Claw','4','20','10','0','30','0','0','1','0','33024','63','2','2','4','80',NULL,'1','0','12','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus3 bAutoSpell,MO_INVESTIGATE,5,(getrefine()*10-50); bonus3 bAutoSpell,AL_DECAGI,1,(getrefine()*10-50); }','','');
-REPLACE INTO `item_db` VALUES ('1827','Krieger_Knuckle2','Glorious Fist','4','20','10','0','30','0','0','1','0','33024','63','2','2','4','80',NULL,'1','0','12','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus2 bVariableCastrate,MO_EXTREMITYFIST,-100; bonus4 bAutoSpellOnSkill,MO_EXPLOSIONSPIRITS,CH_SOULCOLLECT,1,1000; }','','');
+REPLACE INTO `item_db` VALUES ('1826','Krieger_Knuckle1','Glorious Claw','4','20','10','0','30','0','0','1','0','33024','63','2','2','4','80',NULL,'1','0','12','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus3 bAutoSpell,MO_INVESTIGATE,5,(getrefine()*10-50); bonus3 bAutoSpell,AL_DECAGI,1,(getrefine()*10-50); }','','');
+REPLACE INTO `item_db` VALUES ('1827','Krieger_Knuckle2','Glorious Fist','4','20','10','0','30','0','0','1','0','33024','63','2','2','4','80',NULL,'1','0','12','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus2 bVariableCastrate,MO_EXTREMITYFIST,-100; bonus4 bAutoSpellOnSkill,MO_EXPLOSIONSPIRITS,CH_SOULCOLLECT,1,1000; }','','');
REPLACE INTO `item_db` VALUES ('1828','Monk_Knuckle','Monk Knuckle','4','20','10','0','150','0','0','1','0','33024','63','2','2','4','0',NULL,'0','0','12','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2; bonus2 bSkillAtk,MO_FINGEROFFENSIVE,25;','','');
REPLACE INTO `item_db` VALUES ('1829','Fist_C','Fist','4','0','0','0','150','0','0','1','0','33024','63','2','2','3','0',NULL,'0','0','12','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40;','','');
REPLACE INTO `item_db` VALUES ('1830','Sura_Rampage','Sura\'s Rampage','4','20','10','500','142','0','0','1','1','32768','56','2','2','3','102',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,SR_EARTHSHAKER,20; bonus2 bSkillAtk,SR_SKYNETBLOW,20; bonus bUseSPrate,5; if(getrefine()>6) { bonus bUseSPrate,-1*(getrefine()-6); }','','');
@@ -1155,8 +1155,8 @@ REPLACE INTO `item_db` VALUES ('1833','Claw_Of_Flash','Claw of Flash','4','60000
REPLACE INTO `item_db` VALUES ('1834','TE_Woe_Fist','TE WoE Fist','4','20','10','0','150','0','0','1','0','33024','63','2','2','3','40',NULL,'0','0','12','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Freeze,1000;','','');
REPLACE INTO `item_db` VALUES ('1835','Spartacus','Spartacus','4','20','10','600','100','0','0','1','2','33024','63','2','2','4','50',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtkRate,getrefine(); if(getrefine()>9) bonus bNoSizeFix,0;','','');
REPLACE INTO `item_db` VALUES ('1836','Thanos_Knuckle','Thanatos Knuckles','4','20','10','1600','60','100','0','1','1','32768','56','2','2','4','120',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
-REPLACE INTO `item_db` VALUES ('1839','Scarlet_Knuckle','Crimson Knuckle','4','20','10','1000','100','0','0','1','2','33024','63','2','2','3','70',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('1900','Violin_of_Vicious_Mind','Violin of Vicious Mind','4','20','10','1300','130','50','0','1','1','524288','63','1','2','4','160',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2;','','');
+REPLACE INTO `item_db` VALUES ('1839','Scarlet_Knuckle','Crimson Knuckle','4','20','10','1000','100','0','0','1','2','33024','63','2','2','3','70',NULL,'1','0','12','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('1900','Violin_of_Vicious_Mind','Violin of Vicious Mind','4','20','10','1300','130','50','0','1','1','524288','63','1','2','4','160',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2;','','');
REPLACE INTO `item_db` VALUES ('1901','Violin','Violin','4','4000','2000','700','50','0','0','1','3','524288','63','1','2','1','2',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1902','Violin_','Violin','4','4000','2000','700','50','0','0','1','4','524288','63','1','2','1','2',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1903','Mandolin','Mandolin','4','18000','9000','400','90','0','0','1','2','524288','63','1','2','2','14',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -1183,7 +1183,7 @@ REPLACE INTO `item_db` VALUES ('1923','BF_Instrument1','Valorous Battlefield Gui
REPLACE INTO `item_db` VALUES ('1924','BF_Instrument2','Brave Battlefield Guitar','4','20','10','0','50','0','0','1','0','524288','63','1','2','3','80',NULL,'1','0','13','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bSkillAtk,CG_ARROWVULCAN,20; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1925','Cello','Cello','4','20','10','700','110','0','0','1','3','524288','58','1','2','3','70',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2; bonus bDex,3; bonus2 bAddSkillBlow,BA_MUSICALSTRIKE,2; bonus2 bAddSkillBlow,CG_ARROWVULCAN,3;','','');
REPLACE INTO `item_db` VALUES ('1926','Harp_Of_Nepenthes','Harp of Nepenthes','4','20','10','1000','120','0','0','1','2','524288','58','1','2','4','60',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2; if( getrefine()>9 ) { bonus3 bAddEffOnSkill,BA_MUSICALSTRIKE,Eff_Stun,2000; } else { bonus3 bAddEffOnSkill,BA_MUSICALSTRIKE,Eff_Stun,1000; }','','');
-REPLACE INTO `item_db` VALUES ('1927','Krieger_Instrument1','Glorious Guitar','4','20','10','0','50','0','0','1','0','524288','63','1','2','4','80',NULL,'1','0','13','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,CG_ARROWVULCAN,CG_TAROTCARD,5,100;','','');
+REPLACE INTO `item_db` VALUES ('1927','Krieger_Instrument1','Glorious Guitar','4','20','10','0','50','0','0','1','0','524288','63','1','2','4','80',NULL,'1','0','13','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,CG_ARROWVULCAN,CG_TAROTCARD,5,100;','','');
REPLACE INTO `item_db` VALUES ('1928','Berserk_Guitar_I','Spirited Guitar','4','0','0','0','40','0','0','1','0','524288','58','1','2','4','0',NULL,'0','0','13','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate,100; bonus bHPrecovRate,-100; bonus2 bHPLossRate,50,5000; bonus bDex,-readparam(bDex);','','');
REPLACE INTO `item_db` VALUES ('1929','Guitar_C','Guitar','4','0','0','0','177','0','0','1','0','524288','63','1','2','3','0',NULL,'0','0','13','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40;','','');
REPLACE INTO `item_db` VALUES ('1930','Green_Whistle','Green Whistle','4','20','10','800','170','50','0','1','1','524288','56','1','2','3','102',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if(getrefine()>5) { bonus2 bSkillUseSP,MI_RUSH_WINDMILL,(getrefine()-5)*4; bonus2 bSkillUseSP,WM_LULLABY_DEEPSLEEP,(getrefine()-5)*4; } bonus2 bSkillVariableCast,MI_RUSH_WINDMILL,-2000; bonus2 bSkillVariableCast,WM_LULLABY_DEEPSLEEP,-2000;','','');
@@ -1195,7 +1195,7 @@ REPLACE INTO `item_db` VALUES ('1935','Ukulele_Of_Newoz','Oz\'s New Ukulele','4'
REPLACE INTO `item_db` VALUES ('1936','Ru_Blue_Violin','Blue Violin','4','20','10','1500','180','0','0','1','1','524288','56','1','2','3','100',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,5; bonus bVit,5;','','');
REPLACE INTO `item_db` VALUES ('1937','Ru_Gold_Violin','Ru Gold Violin','4','20','10','1500','180','0','0','1','2','524288','56','1','2','3','120',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,8; bonus bVit,8;','','');
REPLACE INTO `item_db` VALUES ('1938','Infinity_Violin','Infinity Violin','4','20','10','500','150','0','0','1','1','524288','56','1','2','4','100',NULL,'1','0','13','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('1939','Scarlet_Viollin','Crimson Violin','4','20','10','800','80','0','0','1','2','524288','63','1','2','3','70',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('1939','Scarlet_Viollin','Crimson Violin','4','20','10','800','80','0','0','1','2','524288','63','1','2','3','70',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('1940','Conch_','Conch','4','0','0','600','120','0','0','1','1','524288','63','1','2','4','130',NULL,'1','0','13','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt, getrefine(); bonus bDex, getrefine(); if(getrefine() > 4) { bonus2 bSkillAtk, WM_REVERBERATION_MELEE, 10; bonus2 bSkillAtk, WM_REVERBERATION_MAGIC, 10; bonus2 bVariableCastrate, WM_REVERBERATION, -10; } if(getrefine() > 6) { bonus2 bSkillAtk, WM_REVERBERATION_MELEE, 10; bonus2 bSkillAtk, WM_REVERBERATION_MAGIC, 10; bonus2 bVariableCastrate, WM_REVERBERATION, -10; } if(getrefine() > 8) { bonus2 bSkillAtk, WM_REVERBERATION_MELEE, 20; bonus2 bSkillAtk, WM_REVERBERATION_MAGIC, 20; bonus2 bVariableCastrate, WM_REVERBERATION, -20; }','','');
REPLACE INTO `item_db` VALUES ('1950','Rope','Rope','4','2500','1250','400','45','0','0','2','3','524288','63','0','2','1','3',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('1951','Rope_','Rope','4','2500','1250','400','45','0','0','2','4','524288','63','0','2','1','3',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -1228,7 +1228,7 @@ REPLACE INTO `item_db` VALUES ('1977','BF_Whip1','Valorous Battle Lariat','4','2
REPLACE INTO `item_db` VALUES ('1978','BF_Whip2','Brave Battle Lariat','4','20','10','0','50','0','0','2','0','524288','63','0','2','3','80',NULL,'1','0','14','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bSkillAtk,CG_ARROWVULCAN,20; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('1979','Stem_Of_Nepenthes','Stem of Nepenthes','4','20','10','1000','120','0','0','2','2','524288','58','0','2','4','60',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,2; if( getrefine()>=9 ) { bonus3 bAddEffOnSkill,DC_THROWARROW,Eff_Freeze,2000; } else { bonus3 bAddEffOnSkill,DC_THROWARROW,Eff_Freeze,1000; }','','');
REPLACE INTO `item_db` VALUES ('1980','Whip_Of_Balance','Whip of Balance','4','20','10','700','110','0','0','2','3','524288','58','0','2','3','70',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2; bonus bDex,3; bonus2 bAddSkillBlow,DC_THROWARROW,2; bonus2 bAddSkillBlow,CG_ARROWVULCAN,3;','','');
-REPLACE INTO `item_db` VALUES ('1981','Krieger_Whip1','Glorious Lariat','4','20','10','0','50','0','0','2','0','524288','63','0','2','4','80',NULL,'1','0','14','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,CG_ARROWVULCAN,CG_TAROTCARD,5,100;','','');
+REPLACE INTO `item_db` VALUES ('1981','Krieger_Whip1','Glorious Lariat','4','20','10','0','50','0','0','2','0','524288','63','0','2','4','80',NULL,'1','0','14','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,CG_ARROWVULCAN,CG_TAROTCARD,5,100;','','');
REPLACE INTO `item_db` VALUES ('1982','Phenomena_Whip','Phenomena Whip','4','20','10','0','160','0','0','2','0','524288','63','0','2','4','0',NULL,'0','0','14','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus2 bSkillAtk,DC_THROWARROW,25;','','');
REPLACE INTO `item_db` VALUES ('1983','Rante_C','Rante Whip','4','0','0','0','170','0','0','2','0','524288','63','0','2','3','0',NULL,'0','0','14','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus2 bAddSize,Size_Small,40; bonus2 bAddSize,Size_Medium,40; bonus2 bAddSize,Size_Large,40;','','');
REPLACE INTO `item_db` VALUES ('1984','Stem_Whip','Stem Whip','4','20','10','800','170','50','0','1','1','524288','56','0','2','3','102',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','if(getrefine()>5) { bonus2 bSkillUseSP,WA_SWING_DANCE,(getrefine()-5)*4; bonus2 bSkillUseSP,WM_LULLABY_DEEPSLEEP,(getrefine()-5)*4; } bonus2 bSkillVariableCast,WA_SWING_DANCE,-2000; bonus2 bSkillVariableCast,WM_LULLABY_DEEPSLEEP,-2000;','','');
@@ -1241,8 +1241,8 @@ REPLACE INTO `item_db` VALUES ('1990','Floral_Mic_Of_Igu','Bloody Floral Decorat
REPLACE INTO `item_db` VALUES ('1991','Ru_Blue_Whip','Blue Whip','4','20','10','1500','180','0','0','2','1','524288','56','0','2','3','100',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,5; bonus bVit,5;','','');
REPLACE INTO `item_db` VALUES ('1992','Ru_Gold_Whip','Ru Gold Whip','4','20','10','1500','180','0','0','2','2','524288','56','0','2','3','120',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,8; bonus bVit,8;','','');
REPLACE INTO `item_db` VALUES ('1994','Infinity_Wire','Infinity Wire','4','20','10','0','100','0','0','2','1','524288','56','0','2','4','100',NULL,'1','0','14','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('1995','Scarlet_Wire','Crimson Wire','4','20','10','800','80','0','0','2','2','524288','63','0','2','3','70',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('1996','Wire_of_Vicious_Mind','Wire of Vicious Mind','4','20','10','1300','130','50','0','2','1','524288','63','0','2','4','160',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2;','','');
+REPLACE INTO `item_db` VALUES ('1995','Scarlet_Wire','Crimson Wire','4','20','10','800','80','0','0','2','2','524288','63','0','2','3','70',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('1996','Wire_of_Vicious_Mind','Wire of Vicious Mind','4','20','10','1300','130','50','0','2','1','524288','63','0','2','4','160',NULL,'1','0','14','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2;','','');
REPLACE INTO `item_db` VALUES ('2000','Destruction_Rod','Staff of Destruction','4','20','10','2500','130','280','0','1','1','512','58','2','34','4','80',NULL,'1','0','23','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,getrefine()/2; bonus bInt,3; bonus bAgi,10; bonus bUseSPrate,(getrefine()*2); bonus3 bAutoSpellWhenHit,WZ_JUPITEL,5,(getrefine()*20); bonus2 bVariableCastrate,HW_MAGICPOWER,-50;','','');
REPLACE INTO `item_db` VALUES ('2001','Divine_Cross','Divine Cross','4','20','10','1500','120','210','0','1','0','33024','63','2','34','4','70',NULL,'1','0','23','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Holy; bonus bDex,4; bonus2 bAddRaceTolerance,RC_Demon,15; bonus2 bAddRaceTolerance,RC_Undead,15;','','');
REPLACE INTO `item_db` VALUES ('2002','Krieger_Twohand_Staff1','Glorious Destruction Staff','4','20','10','0','70','210','0','1','0','8487700','63','2','34','4','80',NULL,'1','0','23','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bMatkRate,getrefine(); bonus2 bMagicAddRace,RC_DemiPlayer,15; bonus2 bIgnoreMdefRate,RC_DemiPlayer,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bMagicAddRace,RC_DemiPlayer,(min(getrefine(),14)-5)*2; bonus2 bIgnoreMdefRate,RC_DemiPlayer,5+(min(getrefine(),14)-5)*2; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,WZ_STORMGUST,MG_SAFETYWALL,10,200,1; bonus5 bAutoSpellOnSkill,WZ_METEOR,MG_SAFETYWALL,10,200,1; bonus5 bAutoSpellOnSkill,WZ_VERMILION,MG_SAFETYWALL,10,200,1; }','','');
@@ -1268,8 +1268,8 @@ REPLACE INTO `item_db` VALUES ('2021','Ganbantein','Ganbantein','4','20','10','2
REPLACE INTO `item_db` VALUES ('2022','Staff_Of_Geffen','Staff Of Geffen','4','20','10','1000','100','300','0','0','1','512','56','2','34','1','150',NULL,'1','0','10','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,20;','','');
REPLACE INTO `item_db` VALUES ('2023','Thanos_Rod','Thanatos Two-Handed Staff','4','20','10','1400','120','250','0','1','1','99092','56','2','34','4','120',NULL,'1','0','23','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000; bonus bHealPower,18;','','heal -1000,0;');
REPLACE INTO `item_db` VALUES ('2024','Infinity_Staff','Infinity Staff','4','20','10','500','30','170','0','0','1','8454656','56','2','34','4','100',NULL,'1','0','23','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('2025','Scarlet_Staff','Staff of Crimson','4','20','10','1000','100','150','0','1','2','8454660','63','2','34','3','70',NULL,'1','0','23','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bInt,5; bonus bMatk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bMatk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('2026','Staff_of_Vicious_Mind','Staff of Vicious Mind','4','20','10','1000','100','200','0','1','1','8454660','63','2','34','4','160',NULL,'1','0','23','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bMatk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,0;','','');
+REPLACE INTO `item_db` VALUES ('2025','Scarlet_Staff','Staff of Crimson','4','20','10','1000','100','150','0','1','2','8454660','63','2','34','3','70',NULL,'1','0','23','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bInt,5; bonus bMatk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bMatk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('2026','Staff_of_Vicious_Mind','Staff of Vicious Mind','4','20','10','1000','100','200','0','1','1','8454660','63','2','34','4','160',NULL,'1','0','23','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bMatk,((min(getrefine(),15)) ** (2)); bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('2101','Guard','Guard','5','500','250','300','0','0','20','0','0','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2102','Guard_','Guard','5','500','250','300','0','0','20','0','1','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('2103','Buckler','Buckler','5','14000','7000','600','0','0','40','0','0','972274','63','2','32','0','0',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6751,7 +6751,7 @@ REPLACE INTO `item_db` VALUES ('13038','Dagger_Of_Hunter','Dagger of Hunter','4'
REPLACE INTO `item_db` VALUES ('13039','Ivory_Knife','Ivory Knife','4','20','10','700','130','0','0','1','2','1007342','58','2','2','3','50',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,2; bonus bAspdRate,3; bonus2 bAddEff,Eff_Bleeding,300; bonus3 bAutoSpell,NPC_CRITICALWOUND,1,30;','','');
REPLACE INTO `item_db` VALUES ('13040','N_Cutter','Novice Cutter','4','0','0','0','50','0','0','1','3','579821295','63','2','2','1','0',NULL,'0','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13041','N_Main_Gauche','Novice Main Gauche','4','0','0','0','63','0','0','1','3','579821295','63','2','2','1','0',NULL,'0','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('13042','Krieger_Dagger1','Glorious Gladius','4','20','10','0','120','0','0','1','0','579821295','63','2','2','4','80',NULL,'1','0','1','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus3 bAutoSpell,PR_LEXDIVINA,1,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,RG_RAID,NPC_WIDEBLEEDING,1,250;','','');
+REPLACE INTO `item_db` VALUES ('13042','Krieger_Dagger1','Glorious Gladius','4','20','10','0','120','0','0','1','0','579821295','63','2','2','4','80',NULL,'1','0','1','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus3 bAutoSpell,PR_LEXDIVINA,1,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) bonus4 bAutoSpellOnSkill,RG_RAID,NPC_WIDEBLEEDING,1,250;','','');
REPLACE INTO `item_db` VALUES ('13043','Fortune_Sword_I','Fortune Sword','4','0','0','0','120','0','0','1','0','579821294','63','2','2','4','0',NULL,'0','0','1','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bLuk,5;','','');
REPLACE INTO `item_db` VALUES ('13044','House_Auger_I','Ice Pick','4','0','0','0','105','0','0','1','0','579821294','63','2','2','4','0',NULL,'0','0','1','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13045','Kamaitachi_I','Kamaitachi','4','0','0','0','155','0','0','2','0','570425344','1','2','2','4','0',NULL,'0','0','1','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6805,7 +6805,7 @@ REPLACE INTO `item_db` VALUES ('13106','Gold_Lux','Gold Lux','4','100000','50000
REPLACE INTO `item_db` VALUES ('13107','Wasteland_Outlaw','Wasteland\'s Outlaw','4','20','10','580','68','0','0','7','2','16777216','1','2','34','3','70',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,readparam(bAgi)/10; bonus bAspdRate,readparam(bAgi)/14;','','');
REPLACE INTO `item_db` VALUES ('13108','BF_Pistol1','Soldier Revolver','4','20','10','0','70','0','0','7','0','16777216','1','2','34','3','80',NULL,'1','0','17','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus bHit,-10; bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; autobonus \"{ bonus bAspdRate,100; }\",10,3000,BF_WEAPON,\"{ specialeffect2 EF_POTION_BERSERK; }\"; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('13109','Wasteland_Outlaw_C','Western Outlaw','4','20','10','0','100','0','0','7','0','16777216','1','2','34','3','0',NULL,'0','0','17','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bHit,readparam(bAgi)/10; bonus bAspdRate,readparam(bAgi)/14; bonus2 bAddRace, RC_All, 10; bonus bMatkRate,10;','','');
-REPLACE INTO `item_db` VALUES ('13110','Krieger_Pistol1','Glorious Pistol','4','20','10','0','80','0','0','7','0','16777216','1','2','34','4','80',NULL,'1','0','17','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,GS_RAPIDSHOWER,GS_GLITTERING,1,1000; bonus2 bSkillAtk,GS_RAPIDSHOWER,getrefine()*2; }','','');
+REPLACE INTO `item_db` VALUES ('13110','Krieger_Pistol1','Glorious Pistol','4','20','10','0','80','0','0','7','0','16777216','1','2','34','4','80',NULL,'1','0','17','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,GS_RAPIDSHOWER,GS_GLITTERING,1,1000; bonus2 bSkillAtk,GS_RAPIDSHOWER,getrefine()*2; }','','');
REPLACE INTO `item_db` VALUES ('13111','Sharpshooter_Revolver','Sharpshooter Revolver','4','20','10','0','105','0','0','7','0','16777216','1','2','34','4','0',NULL,'0','0','17','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2;','','');
REPLACE INTO `item_db` VALUES ('13112','P_Revolver1','Eden Revolver I','4','0','0','0','44','0','0','7','0','16777216','1','2','34','2','26',NULL,'0','0','17','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-5;','','');
REPLACE INTO `item_db` VALUES ('13113','P_Revolver2','Eden Revolver II','4','0','0','0','60','0','0','7','0','16777216','1','2','34','2','40',NULL,'0','0','17','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bHit,-5;','','');
@@ -6816,8 +6816,8 @@ REPLACE INTO `item_db` VALUES ('13117','TE_Woe_Pistol','TE Woe Pistol','4','0','
REPLACE INTO `item_db` VALUES ('13120','H_FEATHER_H_FIRE','Heaven\'s_Feather_&_Hell\'s_Fire','4','1250000','625000','800','150','0','0','9','1','1090519040','63','2','34','3','99',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillAtk,GS_DESPERADO,20; bonus2 bSkillAtk,RL_FALLEN_ANGEL,20;','','');
REPLACE INTO `item_db` VALUES ('13122','ALTAIR_ARES','Altea & Ares','4','1450000','725000','1000','200','0','0','9','0','1073741824','63','2','34','3','140',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30;','','');
REPLACE INTO `item_db` VALUES ('13124','ALTAIR_ARES_','Altea & Ares','4','1450000','725000','1000','200','0','0','9','1','1073741824','63','2','34','3','140',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30;','','');
-REPLACE INTO `item_db` VALUES ('13127','Scarlet_Revolver','Crimson Revolver','4','20','10','1000','100','0','0','7','2','16777216','63','2','34','3','70',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('13128','Revolver_of_Vicious_Mind','Revolver of Vicious Mind','4','20','10','1500','150','0','0','7','1','16777216','63','2','34','4','160',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2);','','');
+REPLACE INTO `item_db` VALUES ('13127','Scarlet_Revolver','Crimson Revolver','4','20','10','1000','100','0','0','7','2','16777216','63','2','34','3','70',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('13128','Revolver_of_Vicious_Mind','Revolver of Vicious Mind','4','20','10','1500','150','0','0','7','1','16777216','63','2','34','4','160',NULL,'1','0','17','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2));','','');
REPLACE INTO `item_db` VALUES ('13150','Branch','Branch','4','3000','1500','500','50','0','0','9','3','16777216','1','2','34','1','0',NULL,'1','0','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13151','The_Cyclone','Cyclone','4','17500','8750','700','120','0','0','9','1','16777216','1','2','34','2','24',NULL,'1','0','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,10; bonus bCritical,10;','','');
REPLACE INTO `item_db` VALUES ('13152','The_Cyclone_','Cyclone','4','17500','8750','700','120','0','0','9','2','16777216','1','2','34','2','24',NULL,'1','0','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bHit,10; bonus bCritical,10;','','');
@@ -6844,10 +6844,10 @@ REPLACE INTO `item_db` VALUES ('13172','BF_Gatling_Gun1','Soldier GatlingGun','4
REPLACE INTO `item_db` VALUES ('13173','BF_Shotgun1','Soldier Shotgun','4','20','10','0','100','0','0','9','0','16777216','1','2','34','3','80',NULL,'1','0','20','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus bSplashRange,1; bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; autobonus \"{ bonus bBaseAtk,80; bonus2 bHPLossRate,100,1000; }\",30,6000,BF_WEAPON,\"{ specialeffect2 EF_BASH3D; }\"; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('13174','BF_Launcher1','Soldier Grenade Launcher','4','20','10','0','300','0','0','9','0','16777216','1','2','34','3','80',NULL,'1','0','21','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus bSplashRange,1; bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; autobonus \"{ bonus bBaseAtk,300; bonus2 bHPLossRate,120,1000; }\",30,9000,BF_WEAPON,\"{ specialeffect2 EF_BASH3D; }\"; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('13175','Lever_Action_Rifle_C','Lever Action Rifle','4','20','10','0','170','0','0','9','0','16777216','1','2','34','3','0',NULL,'0','0','18','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bHit,20; bonus bCritical,50; bonus bAspdRate,-5;','','');
-REPLACE INTO `item_db` VALUES ('13176','Krieger_Rifle1','Glorious Rifle','4','20','10','0','90','0','0','9','0','16777216','1','2','34','4','80',NULL,'1','0','18','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus2 bVariableCastrate,GS_TRACKING,25; bonus2 bSkillAtk,GS_TRACKING,getrefine() * 3; }','','');
-REPLACE INTO `item_db` VALUES ('13177','Krieger_Gatling1','Glorious Gatling gun','4','20','10','0','90','0','0','9','0','16777216','1','2','34','4','80',NULL,'1','0','19','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,35; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),10)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if (getrefine() > 8) { bonus2 bAddRace, RC_All, getrefine(); }','','');
-REPLACE INTO `item_db` VALUES ('13178','Krieger_Shotgun1','Glorious Shotgun','4','20','10','0','110','0','0','9','0','16777216','1','2','34','4','80',NULL,'1','0','20','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bSplashRange,1; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),10)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus2 bSkillAtk,GS_SPREADATTACK,getrefine() * 2; bonus3 bAddEffOnSkill,GS_SPREADATTACK,Eff_Stun,2000; }','','');
-REPLACE INTO `item_db` VALUES ('13179','Krieger_Launcher1','Glorious Grenade Launcher','4','20','10','0','330','0','0','9','0','16777216','1','2','34','4','80',NULL,'1','0','21','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,35; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),10)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,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; }\"; }','','');
+REPLACE INTO `item_db` VALUES ('13176','Krieger_Rifle1','Glorious Rifle','4','20','10','0','90','0','0','9','0','16777216','1','2','34','4','80',NULL,'1','0','18','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus2 bVariableCastrate,GS_TRACKING,25; bonus2 bSkillAtk,GS_TRACKING,getrefine() * 3; }','','');
+REPLACE INTO `item_db` VALUES ('13177','Krieger_Gatling1','Glorious Gatling gun','4','20','10','0','90','0','0','9','0','16777216','1','2','34','4','80',NULL,'1','0','19','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,35; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),10)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if (getrefine() > 8) { bonus2 bAddRace, RC_All, getrefine(); }','','');
+REPLACE INTO `item_db` VALUES ('13178','Krieger_Shotgun1','Glorious Shotgun','4','20','10','0','110','0','0','9','0','16777216','1','2','34','4','80',NULL,'1','0','20','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,55; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bSplashRange,1; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),10)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus2 bSkillAtk,GS_SPREADATTACK,getrefine() * 2; bonus3 bAddEffOnSkill,GS_SPREADATTACK,Eff_Stun,2000; }','','');
+REPLACE INTO `item_db` VALUES ('13179','Krieger_Launcher1','Glorious Grenade Launcher','4','20','10','0','330','0','0','9','0','16777216','1','2','34','4','80',NULL,'1','0','21','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,35; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus2 bSkillAtk,GS_TRIPLEACTION,30; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),10)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,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; }\"; }','','');
REPLACE INTO `item_db` VALUES ('13180','Novice_Rifle','Starter Branch','4','0','0','500','50','0','0','9','3','16777216','1','2','34','1','0',NULL,'0','0','18','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13181','Novice_Shotgun','Beginner Shotgun','4','0','0','1000','80','0','0','9','0','16777216','1','2','34','1','0',NULL,'0','0','20','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13182','Novice_Gatling','Beginner GatlingGun','4','0','0','1500','40','0','0','9','0','16777216','1','2','34','1','0',NULL,'0','0','19','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -6946,7 +6946,7 @@ REPLACE INTO `item_db` VALUES ('13303','Huuma_Blaze','Huuma Blaze Shuriken','4',
REPLACE INTO `item_db` VALUES ('13304','Huuma_Calm_Mind','Huuma Calm Mind','4','20','10','1550','112','0','0','1','2','570425344','1','2','34','3','70',NULL,'1','0','22','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus2 bSkillAtk,NJ_HUUMA,30; bonus bNoCastCancel,0;','','');
REPLACE INTO `item_db` VALUES ('13305','BF_Huuma_Shuriken1','Brave Huuma Front Shuriken','4','20','10','0','55','0','0','1','0','570425344','1','2','34','3','80',NULL,'1','0','22','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('13306','BF_Huuma_Shuriken2','Valorous Huuma Front Shuriken','4','20','10','0','55','0','0','1','0','570425344','1','2','34','3','80',NULL,'1','0','22','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2; bonus bDex,1; bonus2 bAddRace,RC_DemiPlayer,95; autobonus \"{ bonus2 bSkillAtk,NJ_HUUMA,100; bonus2 bSkillAtk,NJ_ISSEN,100; }\",50,10000,BF_WEAPON,\"{specialeffect2 EF_POTION_BERSERK; }\"; bonus bUnbreakableWeapon,0;','','');
-REPLACE INTO `item_db` VALUES ('13307','Krieger_Huuma_Shuriken1','Glorious Shuriken','4','20','10','0','55','90','0','1','0','570425344','1','2','34','4','80',NULL,'1','0','22','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,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_DemiPlayer,pow(min(getrefine(),14)-3,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,NJ_ISSEN,AL_HEAL,10,1000,1; bonus4 bAutoSpellOnSkill,NJ_HUUMA,NPC_CRITICALWOUND,2,200; }','','');
+REPLACE INTO `item_db` VALUES ('13307','Krieger_Huuma_Shuriken1','Glorious Shuriken','4','20','10','0','55','90','0','1','0','570425344','1','2','34','4','80',NULL,'1','0','22','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,95; bonus2 bIgnoreDefRate,RC_DemiPlayer,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_DemiPlayer,((min(getrefine(),14)-3) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>8) { bonus5 bAutoSpellOnSkill,NJ_ISSEN,AL_HEAL,10,1000,1; bonus4 bAutoSpellOnSkill,NJ_HUUMA,NPC_CRITICALWOUND,2,200; }','','');
REPLACE INTO `item_db` VALUES ('13308','Huuma_Blaze_I','Huuma Blaze Shuriken','4','0','0','0','230','0','0','1','0','570425344','1','2','34','4','0',NULL,'0','0','22','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtkEle,Ele_Fire; bonus bDex,2;','','');
REPLACE INTO `item_db` VALUES ('13309','Huuma_Giant_Wheel_C','Huuma Giant Wheel Shuriken','4','0','0','0','99','0','0','1','0','570425344','1','2','34','4','0',NULL,'0','0','22','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13310','P_Huuma_Shuriken1','Eden Group Huuma Shuriken I','4','0','0','0','150','50','0','1','0','570425344','1','2','34','3','60',NULL,'0','0','22','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,50;','','');
@@ -6957,8 +6957,8 @@ REPLACE INTO `item_db` VALUES ('13314','Huuma_Fluttering_Snow','Huuma Fluttering
REPLACE INTO `item_db` VALUES ('13315','Huuma_Thunderstorm','Huuma Thunderstorm','4','100000','50000','1500','200','50','0','1','0','570425344','1','2','34','4','110',NULL,'1','0','22','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,50; bonus bAtkEle,Ele_Wind; bonus3 bAutoSpell,NJ_RAIGEKISAI,max(getskilllv(NJ_RAIGEKISAI),1),30;','','');
REPLACE INTO `item_db` VALUES ('13316','Upg_Huuma_Shuriken','Upg Huuma Shuriken','4','20','10','1500','55','0','0','1','1','570425344','1','2','34','3','0',NULL,'1','0','22','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk,10*getrefine(); bonus bMatk,5*getrefine(); bonus bLongAtkRate,getrefine(); if(BaseLevel>=70) { bonus bBaseAtk,5*((BaseLevel-60)/10); }','','');
REPLACE INTO `item_db` VALUES ('13317','TE_Woe_Huuma','TE Woe Huuma','4','0','0','0','80','100','0','1','0','570425344','1','2','34','3','40',NULL,'0','0','22','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Bleeding,1000;','','');
-REPLACE INTO `item_db` VALUES ('13327','Scarlet_Huuma','Crimson Huuma Shuriken','4','20','10','1000','100','0','0','1','2','570425344','63','2','34','3','70',NULL,'1','0','22','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2; if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('13328','Huuma_Shuriken_of_Vicious_Mind','Huuma Shuriken of Vicious Mind','4','20','10','1500','150','50','0','1','1','570425344','63','2','34','4','160',NULL,'1','0','22','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2; bonus bUnbreakableWeapon,0;','','');
+REPLACE INTO `item_db` VALUES ('13327','Scarlet_Huuma','Crimson Huuma Shuriken','4','20','10','1000','100','0','0','1','2','570425344','63','2','34','3','70',NULL,'1','0','22','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2; if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('13328','Huuma_Shuriken_of_Vicious_Mind','Huuma Shuriken of Vicious Mind','4','20','10','1500','150','50','0','1','1','570425344','63','2','34','4','160',NULL,'1','0','22','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('13400','Cutlas_','Cutlus','4','20','10','900','150','0','0','1','1','414946','63','2','2','4','40',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill SM_BASH,5; bonus bStr,2; bonus bDef,1;','','');
REPLACE INTO `item_db` VALUES ('13401','Excalibur_C','Excalibur','4','1','0','0','199','0','0','1','0','414946','63','2','2','4','0',NULL,'0','0','2','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bInt,10; bonus bLuk,10; bonus bAtkEle,Ele_Holy;','','');
REPLACE INTO `item_db` VALUES ('13402','Cutlas_C','Cutlas','4','2','1','0','185','0','0','1','0','414946','63','2','2','4','0',NULL,'0','0','2','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','skill SM_BASH,5; bonus bStr,2; bonus bDef,1;','','');
@@ -6975,7 +6975,7 @@ REPLACE INTO `item_db` VALUES ('13412','Twin_Edge_B','Twin Edge of Naght Sieger'
REPLACE INTO `item_db` VALUES ('13413','Twin_Edge_R','Twin Edge of Naght Sieger','4','20','10','1500','160','0','0','1','3','414946','58','2','2','4','75',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Fire; skill WZ_METEOR,3; autobonus \"{ bonus bIgnoreDefRace,RC_NonBoss; }\",50,5000;','','');
REPLACE INTO `item_db` VALUES ('13414','Elemental_Sword','Elemental Sword','4','20','10','1200','105','95','0','1','3','414946','58','2','2','3','70',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,2; bonus bInt,4; bonus bDex,1; 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,1000; bonus4 bAutoSpellOnSkill,MG_LIGHTNINGBOLT,WZ_EARTHSPIKE,3,1000;','','');
REPLACE INTO `item_db` VALUES ('13415','N_Falchion','Novice Falchion','4','0','0','0','59','0','0','1','3','414947','63','2','2','1','2',NULL,'0','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('13416','Krieger_Onehand_Sword1','Glorious Flamberge','4','20','10','0','130','0','0','1','0','414947','63','2','2','4','80',NULL,'1','0','2','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,pow(min(getrefine(),14)-4,2); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>6) { bonus bAspdRate,5; } if(getrefine()>8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,SM_BASH,NPC_CRITICALWOUND,2,200; }','','');
+REPLACE INTO `item_db` VALUES ('13416','Krieger_Onehand_Sword1','Glorious Flamberge','4','20','10','0','130','0','0','1','0','414947','63','2','2','4','80',NULL,'1','0','2','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_DemiPlayer,75; bonus2 bIgnoreDefRate,RC_DemiPlayer,20; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiPlayer,((min(getrefine(),14)-4) ** (2)); bonus2 bIgnoreDefRate,RC_DemiPlayer,5; } if(getrefine()>6) { bonus bAspdRate,5; } if(getrefine()>8) { bonus bAspdRate,5; bonus4 bAutoSpellOnSkill,SM_BASH,NPC_CRITICALWOUND,2,200; }','','');
REPLACE INTO `item_db` VALUES ('13417','Krieger_Onehand_Sword2','Glorious Rapier','4','20','10','0','130','80','0','1','0','414947','63','2','2','4','80',NULL,'1','0','2','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus bUseSPrate,-10; } if(getrefine()>8) { bonus bInt,5; }','','');
REPLACE INTO `item_db` VALUES ('13418','Krieger_Onehand_Sword3','Glorious Holy Avenger','4','20','10','0','130','80','0','1','0','279714','63','2','2','4','80',NULL,'1','0','2','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus bUseSPrate,-10; } if(getrefine()>8) { bonus4 bAutoSpellOnSkill,PA_PRESSURE,PR_LEXAETERNA,1,1000; } if(getrefine()>9) { bonus bInt,5; }','','');
REPLACE INTO `item_db` VALUES ('13419','Holy_Saber','Holy Saber','4','20','10','0','160','0','0','1','0','414946','63','2','2','3','0',NULL,'0','0','2','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','','','');
@@ -7000,8 +7000,8 @@ REPLACE INTO `item_db` VALUES ('13440','Ceremonial_Sword','Ceremonial Sword','4'
REPLACE INTO `item_db` VALUES ('13441','Thanos_Sword','Thanatos Sword','4','10','5','700','150','100','0','1','1','16514','63','2','2','4','120',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt, 6; bonus bVit, 6; bonus bLuk, -6; bonus2 bHPDrainRate, 50, 5; bonus2 bSPDrainRate, 10, 5; bonus2 bHPLossRate, 100, 10000;','','heal -1000,0;');
REPLACE INTO `item_db` VALUES ('13442','Old_Parasol','Old Parasol','4','20','10','500','120','80','0','0','3','414946','63','2','2','3','80',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMatk,getrefine(); skill MG_SOULSTRIKE,10;','','');
REPLACE INTO `item_db` VALUES ('13444','Pala','Pala','4','20','10','700','190','0','0','0','1','414946','63','2','2','3','0',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspdRate,8;','','');
-REPLACE INTO `item_db` VALUES ('13454','Scarlet_Saber','Crimson Saber','4','20','10','850','85','0','0','1','2','414947','63','2','2','3','70',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('13455','Saber_of_Vicious_Mind','Saber of Vicious Mind','4','20','10','1350','135','0','0','1','1','414947','63','2','2','4','160',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2);','','');
+REPLACE INTO `item_db` VALUES ('13454','Scarlet_Saber','Crimson Saber','4','20','10','850','85','0','0','1','2','414947','63','2','2','3','70',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('13455','Saber_of_Vicious_Mind','Saber of Vicious Mind','4','20','10','1350','135','0','0','1','1','414947','63','2','2','4','160',NULL,'1','0','2','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2));','','');
REPLACE INTO `item_db` VALUES ('13500','Insurance60_Package','Life Insurrance Box','18','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 14500,10;','','');
REPLACE INTO `item_db` VALUES ('13501','Assorted_Scroll_Box','Experience Scroll Box','18','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('13502','Drooping_Kitty_Box','Refined Drooping Cat Box','18','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','rentitem 5279,604800;','','');
@@ -8085,8 +8085,8 @@ REPLACE INTO `item_db` VALUES ('16030','Pilebuncker_S','Pile Bunker S','4','0','
REPLACE INTO `item_db` VALUES ('16031','Pilebuncker_P','Pile Bunker P','4','0','0','4000','450','0','0','1','0','1024','56','2','2','4','130',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bBaseAtk, (getrefine() * 5);','','');
REPLACE INTO `item_db` VALUES ('16032','Pilebuncker_T','Pile Bunker T','4','0','0','3500','400','0','0','1','1','1024','56','2','2','4','130',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUseSPrate, - getrefine();','','');
REPLACE INTO `item_db` VALUES ('16039','Spoon','Spoon','4','20','10','100','80','0','0','1','1','312755','63','2','2','3','40',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd,10; bonus2 bAddEff,Eff_Curse,1000;','','');
-REPLACE INTO `item_db` VALUES ('16040','Scarlet_Mace','Crimson Mace','4','20','10','800','80','0','0','1','2','312755','63','2','2','3','70',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('16041','Mace_of_Vicious_Mind','Mace of Vicious Mind','4','20','10','1300','130','0','0','1','1','312755','63','2','2','4','160',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,0;','','');
+REPLACE INTO `item_db` VALUES ('16040','Scarlet_Mace','Crimson Mace','4','20','10','800','80','0','0','1','2','312755','63','2','2','3','70',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('16041','Mace_of_Vicious_Mind','Mace of Vicious Mind','4','20','10','1300','130','0','0','1','1','312755','63','2','2','4','160',NULL,'1','0','8','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('16131','Lady_Tanee_Doll_Box','Tanigumi Girl Doll Box','18','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 5526,1;','','');
REPLACE INTO `item_db` VALUES ('16132','Lunatic_Hat_Box','Lunatic Hat Box','18','20','10','0','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 5527,1;','','');
REPLACE INTO `item_db` VALUES ('16134','King_Frog_Hat_Box','Frog King Hat Box','18','20','10','10','0','0','0','0','0','18446744073709551615','63','2','0','0','0',NULL,'0','1','0','0','0','0','0','475',NULL,'0',NULL,'0',NULL,'0','getitem 5528,1;','','');
@@ -8466,13 +8466,13 @@ REPLACE INTO `item_db` VALUES ('18117','Royal_Bow','Royal Bow','4','200000','100
REPLACE INTO `item_db` VALUES ('18118','TE_Woe_Bow','TE Woe Bow','4','200000','100000','1500','120','0','0','5','0','657416','63','2','34','3','40',NULL,'0','0','11','0','0','0','0','499',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Curse,1000;','','');
REPLACE INTO `item_db` VALUES ('18119','Thanos_Bow','Thanatos Bow','4','20','10','1300','180','110','0','5','1','657416','56','2','34','4','120',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
REPLACE INTO `item_db` VALUES ('18120','Bow_Of_Evil_Slayer','Evil Slayer Piercer Bow','4','20','10','1350','115','0','0','5','1','657416','56','2','34','3','100',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Demon,10; bonus2 bAddRace,RC_Undead,10; if(getrefine()>=9) { bonus bAtkRate,5; } if(getrefine()>=12) { bonus bAtkRate,7; }','','');
-REPLACE INTO `item_db` VALUES ('18121','Bow_of_Vicious_Mind','Bow of Vicious Mind','4','20','10','1700','170','0','0','5','1','657416','63','2','34','4','160',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2);','','');
+REPLACE INTO `item_db` VALUES ('18121','Bow_of_Vicious_Mind','Bow of Vicious Mind','4','20','10','1700','170','0','0','5','1','657416','63','2','34','4','160',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2));','','');
REPLACE INTO `item_db` VALUES ('18122','Gigantic_Bow','Giant Bow','4','20','10','3000','195','0','0','5','1','2048','56','2','34','4','130',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,40; bonus bAspdRate,-15; bonus bHit,-50;','','');
REPLACE INTO `item_db` VALUES ('18123','Bow_Of_Storm','Bow of Storms','4','12400','6200','1500','160','0','0','5','1','526344','56','2','34','4','130',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bLongAtkRate,30; bonus2 bSkillCooldown,WM_SEVERE_RAINSTORM,-20; bonus2 bSkillUseSP,WM_SEVERE_RAINSTORM,15;','','');
REPLACE INTO `item_db` VALUES ('18124','Half_BF_Bow1','Half BF Bow1','4','0','0','0','100','0','0','5','0','657480','63','2','34','3','0',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bDex,2; bonus2 bAddRace,RC_DemiPlayer,30; bonus2 bIgnoreDefRate,RC_DemiPlayer,10; bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('18126','Ru_Blue_Bow','Blue Bow','4','20','10','1200','170','0','0','5','1','2048','56','2','34','3','100',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAgi,5; bonus bDex,5;','','');
REPLACE INTO `item_db` VALUES ('18128','Infinity_Bow','Infinity Bow','4','0','0','500','160','0','0','5','1','657480','56','2','34','4','100',NULL,'1','0','11','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('18130','Scarlet_Bow','Crimson Bow','4','20','10','1200','120','0','0','5','2','657416','63','2','34','3','7',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('18130','Scarlet_Bow','Crimson Bow','4','20','10','1200','120','0','0','5','2','657416','63','2','34','3','7',NULL,'1','0','11','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
REPLACE INTO `item_db` VALUES ('18500','Cheer_Scarf6','Cheering scarf VI','5','0','0','0','0','0','0','0','0','18446744073709551615','63','2','1','0','0',NULL,'0','0','369','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus2 bExpAddRace, RC_All, 60;','','');
REPLACE INTO `item_db` VALUES ('18501','Cheer_Scarf8','Cheering scarf VIII','5','0','0','0','0','0','0','0','0','18446744073709551615','63','2','1','0','0',NULL,'0','0','369','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus2 bExpAddRace, RC_All, 80;','','');
REPLACE INTO `item_db` VALUES ('18502','Cheer_Scarf10','Cheering scarf X','5','0','0','0','0','0','0','0','0','18446744073709551615','63','2','1','0','0',NULL,'0','0','369','0','0','0','0','507',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableHelm,0; bonus2 bExpAddRace, RC_All, 100;','','');
@@ -9725,8 +9725,8 @@ REPLACE INTO `item_db` VALUES ('21011','Giant_Blade','Gigantic Blade','4','20','
REPLACE INTO `item_db` VALUES ('21012','Mashirubeken','Mashirubeken','4','20','10','2200','200','150','0','1','2','128','56','2','34','4','110',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('21013','Companion_Cavalry_Sword','Companion Cavalry Sword','4','20','10','2200','210','0','0','1','2','128','56','2','34','4','110',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillUseSP,KN_AUTOCOUNTER,-2; bonus2 bSkillUseSP,LK_PARRYING,-25;','','');
REPLACE INTO `item_db` VALUES ('21014','Infinity_Two_Hand_Sword','Infinity Two-Handed Sword','4','20','10','500','230','0','0','1','1','16514','56','2','34','4','100',NULL,'1','0','3','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('21015','Scarlet_Twohand_Sword','Crimson Two-Handed Sword','4','20','10','1700','170','0','0','1','2','16514','63','2','34','3','70',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2; if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('21016','Two_Handed_Sword_of_Vicious_Mind','Two-Handed Sword of Vicious Mind','4','20','10','2200','220','0','0','1','1','16514','63','2','34','4','160',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2);','','');
+REPLACE INTO `item_db` VALUES ('21015','Scarlet_Twohand_Sword','Crimson Two-Handed Sword','4','20','10','1700','170','0','0','1','2','16514','63','2','34','3','70',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2; if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('21016','Two_Handed_Sword_of_Vicious_Mind','Two-Handed Sword of Vicious Mind','4','20','10','2200','220','0','0','1','1','16514','63','2','34','4','160',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2));','','');
REPLACE INTO `item_db` VALUES ('21018','Lindy_Hop','Lindy Hop','4','20','10','3400','340','0','0','1','2','16514','56','2','34','4','170',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtkRate,getrefine()/2; bonus bAspdRate,getrefine();','','');
REPLACE INTO `item_db` VALUES ('21019','Onimaru','Onimaru','4','0','0','4200','75','0','0','1','2','128','56','2','34','4','130',NULL,'1','0','3','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,min(readparam(bStr),120); if(readparam(bStr)>=95) { bonus bAtk,40; } if(readparam(bStr)>=108) { bonus bAtk,40; } if(readparam(bStr)>=120) { bonus bAtk,40; } if(getrefine()>=7) { bonus3 bAutoSpell,NPC_WIDECURSE,5,10; } /* Custom - JRO */ if(getrefine()>=9) { skill LK_BERSERK,1; }','','');
REPLACE INTO `item_db` VALUES ('22000','Temporal_Str_Boots','Temporal STR Boots','5','20','10','600','0','0','25','0','0','18446744073709551615','56','2','64','0','99',NULL,'1','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bMaxHP,300+((getrefine()/3)*100); bonus bMaxSP,30+((getrefine()/3)*10); bonus bAtk,(getrefine()/3)*7; if(readparam(bStr)>=120) { bonus bAtk,50; }','','');
@@ -10046,14 +10046,14 @@ REPLACE INTO `item_db` VALUES ('26101','Paradise_Foxtail_Staff_III','Eden Group
REPLACE INTO `item_db` VALUES ('28000','Thanos_Katar','Thanatos Katar','4','20','10','1800','220','80','0','1','1','4096','56','2','34','4','120',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
REPLACE INTO `item_db` VALUES ('28001','Katar_Of_Evil_Slayer','Evil Slayer Ripper Katar','4','20','10','1200','120','0','0','1','1','4096','56','2','34','3','100',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bAddRace,RC_Demon,10; bonus2 bAddRace,RC_Undead,10; if(getrefine()>8) { bonus bAtkRate,5; } if(getrefine()>11) { bonus bAtkRate,7; }','','');
REPLACE INTO `item_db` VALUES ('28002','Half_BF_Katar2','Half BF Katar2','4','20','10','0','130','0','0','1','0','4096','63','2','34','3','80',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bStr,1; bonus bDex,1; bonus bLuk,1; bonus2 bAddRace,RC_DemiPlayer,35; bonus bCritAtkRate,10; bonus bAspdRate,3; bonus bUnbreakableWeapon,0;','','');
-REPLACE INTO `item_db` VALUES ('28007','Scarlet_Katar','Crimson Katar','4','20','10','1300','130','0','0','1','2','4096','63','2','34','3','70',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,5*((BaseLevel-70)/10); }','','');
-REPLACE INTO `item_db` VALUES ('28008','Katar_of_Vicious_Mind','Katar of Vicious Mind','4','20','10','1800','180','0','0','1','1','4096','63','2','34','4','160',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2);','','');
+REPLACE INTO `item_db` VALUES ('28007','Scarlet_Katar','Crimson Katar','4','20','10','1300','130','0','0','1','2','4096','63','2','34','3','70',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,5*((BaseLevel-70)/10); }','','');
+REPLACE INTO `item_db` VALUES ('28008','Katar_of_Vicious_Mind','Katar of Vicious Mind','4','20','10','1800','180','0','0','1','1','4096','63','2','34','4','160',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2));','','');
REPLACE INTO `item_db` VALUES ('28010','Juliette_de_Rachel','Juliette de Rachel','4','20','10','2500','300','0','0','1','2','4096','56','2','34','4','170',NULL,'1','0','16','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,getrefine()/2; bonus bAspdRate,getrefine(); bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('28100','Thanos_Axe','Thanatos Axe','4','20','10','4000','300','80','0','1','1','279714','56','2','34','4','120',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bInt,6; bonus bVit,6; bonus bLuk,-6; bonus2 bSPDrainRate,10,5; bonus2 bHPDrainRate,10,5; bonus2 bHPLossRate,100,10000;','','heal -1000,0;');
REPLACE INTO `item_db` VALUES ('28101','Tornado_Axe','Axe Tornado','4','500','250','4000','320','0','0','1','1','279714','56','2','34','4','100',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkEle,Ele_Wind; bonus2 bSkillCooldown,NC_AXETORNADO,-1000;','','');
REPLACE INTO `item_db` VALUES ('28105','Infinity_Two_handed_Axe','Infinity Two-handed Axe','4','20','10','500','265','0','0','1','1','279714','56','2','34','4','100',NULL,'1','0','7','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('28106','Scarlet_Twohand_Axe','Crimson Two-handed Axe','4','20','10','2000','200','0','0','1','2','279714','63','2','34','3','70',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,pow(min(getrefine(),15),2); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('28107','Two_Handed_Axe_of_Vicious_Mind','Two-Handed Axe of Vicious Mind','4','20','10','2500','250','0','0','1','1','279714','63','2','34','4','160',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,0;','','');
+REPLACE INTO `item_db` VALUES ('28106','Scarlet_Twohand_Axe','Crimson Two-handed Axe','4','20','10','2000','200','0','0','1','2','279714','63','2','34','3','70',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,((min(getrefine(),15)) ** (2)); if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('28107','Two_Handed_Axe_of_Vicious_Mind','Two-Handed Axe of Vicious Mind','4','20','10','2500','250','0','0','1','1','279714','63','2','34','4','160',NULL,'1','0','7','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('28200','END_OF_HORIZON','End Of The Horizon','4','2700000','1350000','2400','410','0','0','9','1','1073741824','63','2','34','4','110',NULL,'1','0','21','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28201','Southern_Cross_R','Southern Cross','4','2800000','1400000','2000','480','0','0','9','0','1073741824','63','2','34','4','141',NULL,'1','0','21','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,GC_CROSSIMPACT,1,50;','','');
REPLACE INTO `item_db` VALUES ('28202','Southern_Cross_R_','Southern Cross','4','2800000','1400000','2000','480','0','0','9','1','1073741824','63','2','34','4','141',NULL,'1','0','21','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus3 bAutoSpell,GC_CROSSIMPACT,1,50;','','');
@@ -10090,12 +10090,12 @@ REPLACE INTO `item_db` VALUES ('28421','Greater_Rabbit_Talisman','Greater Rabbit
REPLACE INTO `item_db` VALUES ('28422','Shiny_Branch_Talisman','Shiny Branch Talisman','4','0','0','100','0','0','1','0','1','0','63','2','136','0','100',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bVariableCastrate,SU_SV_STEMSPEAR,-50; bonus2 bSkillAtk,SU_SV_STEMSPEAR,(readparam(bInt)/2)+(20 * getskilllv(SU_SV_STEMSPEAR)); //Need to confirm damage formula','','');
REPLACE INTO `item_db` VALUES ('28423','Fresh_Tuna_Talisman','Fresh Tuna Talisman','4','0','0','100','0','0','1','0','1','0','63','2','136','0','100',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bSkillCooldown,SU_TUNAPARTY,-5000; bonus3 bAutoSpellWhenHit,SU_TUNAPARTY,max(1,getskilllv(SU_TUNAPARTY)),10;','','');
REPLACE INTO `item_db` VALUES ('28424','Chubby_Worm_Talisman','Chubby Worm Talisman','4','0','0','100','0','0','1','0','1','0','63','2','136','0','100',NULL,'0','0','0','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus2 bVariableCastrate,SU_PICKYPECK,-50; bonus2 bSkillAtk,SU_PICKYPECK,(readparam(bDex)/2)+(20 * getskilllv(SU_PICKYPECK)); //Need to confirm damage formula','','');
-REPLACE INTO `item_db` VALUES ('28604','Scarlet_Bible','Crimson Bible','4','20','10','450','45','0','0','1','2','4260096','63','2','2','3','70',NULL,'1','0','15','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2; if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('28605','Book_of_Vicious_Mind','Book of Vicious Mind','4','20','10','950','95','0','0','1','1','4260096','63','2','2','4','160',NULL,'1','0','15','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2); bonus bUnbreakableWeapon,0;','','');
+REPLACE INTO `item_db` VALUES ('28604','Scarlet_Bible','Crimson Bible','4','20','10','450','45','0','0','1','2','4260096','63','2','2','3','70',NULL,'1','0','15','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bUnbreakableWeapon,0; bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2; if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('28605','Book_of_Vicious_Mind','Book of Vicious Mind','4','20','10','950','95','0','0','1','1','4260096','63','2','2','4','160',NULL,'1','0','15','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2)); bonus bUnbreakableWeapon,0;','','');
REPLACE INTO `item_db` VALUES ('28703','Infinity_Dagger','Infinity Dagger','4','20','10','500','125','100','0','1','1','579821295','63','2','2','4','100',NULL,'1','0','1','0','0','0','0','467',NULL,'0',NULL,'0',NULL,'0','','','');
REPLACE INTO `item_db` VALUES ('28704','Twilight_Desert_','Desert Twilight','4','20','10','600','130','0','0','1','4','4096','58','2','2','2','70',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','','','');
-REPLACE INTO `item_db` VALUES ('28705','Scarlet_Dagger','Crimson Dagger','4','20','10','550','55','0','0','1','2','579821295','63','2','2','3','70',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2; if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
-REPLACE INTO `item_db` VALUES ('28706','Dagger_of_Vicious_Mind','Dagger of Vicious Mind','4','20','10','1050','105','50','0','1','1','579821295','63','2','2','4','160',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,pow(min(getrefine(),15),2); bonus bMatk,pow(min(getrefine(),15),2)/2;','','');
+REPLACE INTO `item_db` VALUES ('28705','Scarlet_Dagger','Crimson Dagger','4','20','10','550','55','0','0','1','2','579821295','63','2','2','3','70',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2; if(BaseLevel>70) { bonus bAtk,(((BaseLevel-70)/10)*5); }','','');
+REPLACE INTO `item_db` VALUES ('28706','Dagger_of_Vicious_Mind','Dagger of Vicious Mind','4','20','10','1050','105','50','0','1','1','579821295','63','2','2','4','160',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtk,((min(getrefine(),15)) ** (2)); bonus bMatk,((min(getrefine(),15)) ** (2))/2;','','');
REPLACE INTO `item_db` VALUES ('28900','Praetorian_Shield','Praetorian Shield','5','20','10','3000','0','0','30','0','1','18446744073709551615','63','2','32','0','100',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','skill LG_SHIELDSPELL,1; bonus3 bAutoSpellWhenHit,HP_ASSUMPTIO,3,20+(getrefine()); bonus bDef,getrefine()*10; bonus bMdef,getrefine();','','');
REPLACE INTO `item_db` VALUES ('28901','Cursed_Mad_Bunny','Cursed Mad Bunny','5','0','0','100','0','0','0','0','0','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAspd,3; bonus bAtkRate,5; bonus bMatkRate,5; bonus bShortWeaponDamageReturn,10; autobonus \"{ bonus bMagicDamageReturn,60; }\",100,2000,BF_MAGIC,\"{ specialeffect2 EF_NONE; }\"; if(getrefine()>6) { bonus bAtk,5; bonus bMatk,5; } if(getrefine()>8) { bonus bAtk,10; bonus bMatk,10; } if(getrefine()>11) { bonus bNoCastCancel,0; bonus bCritical,10; }','','');
REPLACE INTO `item_db` VALUES ('28902','Mad_Bunny_','Mad Bunny','5','0','0','100','0','0','0','0','1','18446744073709551615','63','2','32','0','0',NULL,'1','0','1','0','0','0','0','0',NULL,'0',NULL,'0',NULL,'0','bonus bAtkRate,5; bonus bMatkRate,5; bonus bShortWeaponDamageReturn,10; autobonus \"{ bonus bMagicDamageReturn,60; }\",100,2000,BF_MAGIC,\"{ specialeffect2 EF_NONE; }\"; if(getrefine()>6) { bonus bAtk,5; bonus bMatk,5; } if(getrefine()>8) { bonus bAtk,10; bonus bMatk,10; } if(getrefine()>11) { bonus bNoCastCancel,0; bonus bCritical,10; }','','');
diff --git a/src/char/char.c b/src/char/char.c
index 487bec763..069ccc481 100644
--- a/src/char/char.c
+++ b/src/char/char.c
@@ -288,16 +288,12 @@ void char_set_char_offline(int char_id, int account_id)
else
{
struct mmo_charstatus* cp = (struct mmo_charstatus*) idb_get(chr->char_db_,char_id);
- struct storage_data *stor = (struct storage_data *) idb_get(inter_storage->account_storage, account_id);
inter_guild->CharOffline(char_id, cp?cp->guild_id:-1);
if (cp)
idb_remove(chr->char_db_,char_id);
- if (stor) /* Remove inter-storage data. */
- idb_remove(inter_storage->account_storage, account_id);
-
if( SQL_ERROR == SQL->Query(inter->sql_handle, "UPDATE `%s` SET `online`='0' WHERE `char_id`='%d' LIMIT 1", char_db, char_id) )
Sql_ShowDebug(inter->sql_handle);
}
@@ -4436,14 +4432,21 @@ void char_parse_char_connect(int fd, struct char_session_data* sd, uint32 ipl)
void char_send_map_info(int fd, int i, uint32 subnet_map_ip, struct mmo_charstatus *cd)
{
+#if PACKETVER < 20170329
+ const int cmd = 0x71;
+ const int len = 28;
+#else
+ const int cmd = 0xac5;
+ const int len = 156;
+#endif
nullpo_retv(cd);
- WFIFOHEAD(fd,28);
- WFIFOW(fd,0) = 0x71;
- WFIFOL(fd,2) = cd->char_id;
- mapindex->getmapname_ext(mapindex_id2name(cd->last_point.map), WFIFOP(fd,6));
- WFIFOL(fd,22) = htonl((subnet_map_ip) ? subnet_map_ip : chr->server[i].ip);
- WFIFOW(fd,26) = sockt->ntows(htons(chr->server[i].port)); // [!] LE byte order here [!]
- WFIFOSET(fd,28);
+ WFIFOHEAD(fd, len);
+ WFIFOW(fd, 0) = cmd;
+ WFIFOL(fd, 2) = cd->char_id;
+ mapindex->getmapname_ext(mapindex_id2name(cd->last_point.map), WFIFOP(fd, 6));
+ WFIFOL(fd, 22) = htonl((subnet_map_ip) ? subnet_map_ip : chr->server[i].ip);
+ WFIFOW(fd, 26) = sockt->ntows(htons(chr->server[i].port)); // [!] LE byte order here [!]
+ WFIFOSET(fd, len);
}
void char_send_wait_char_server(int fd)
diff --git a/src/char/int_storage.c b/src/char/int_storage.c
index 5f005005e..65301127f 100644
--- a/src/char/int_storage.c
+++ b/src/char/int_storage.c
@@ -41,31 +41,33 @@ struct inter_storage_interface inter_storage_s;
struct inter_storage_interface *inter_storage;
/// Save storage data to sql
-int inter_storage_tosql(int account_id, struct storage_data *cp, const struct storage_data *p)
+int inter_storage_tosql(int account_id, const struct storage_data *p)
{
int i = 0, j = 0;
- bool updated_p[MAX_STORAGE] = { false };
+ bool matched_p[MAX_STORAGE] = { false };
int delete[MAX_STORAGE] = { 0 };
int total_deletes = 0, total_updates = 0, total_inserts = 0;
int total_changes = 0;
+ struct storage_data cp = { 0 };
StringBuf buf;
- nullpo_ret(cp);
nullpo_ret(p);
+ VECTOR_INIT(cp.item);
+ inter_storage->fromsql(account_id, &cp);
+
StrBuf->Init(&buf);
-
- if (VECTOR_LENGTH(cp->item) > 0) {
+ if (VECTOR_LENGTH(cp.item) > 0) {
/**
* Compare and update items, if any.
*/
- for (i = 0; i < VECTOR_LENGTH(cp->item); i++) {
- struct item *cp_it = &VECTOR_INDEX(cp->item, i);
+ for (i = 0; i < VECTOR_LENGTH(cp.item); i++) {
+ struct item *cp_it = &VECTOR_INDEX(cp.item, i);
struct item *p_it = NULL;
ARR_FIND(0, VECTOR_LENGTH(p->item), j,
- updated_p[j] != true
+ matched_p[j] != true
&& (p_it = &VECTOR_INDEX(p->item, j)) != NULL
&& cp_it->nameid == p_it->nameid
&& cp_it->unique_id == p_it->unique_id
@@ -84,17 +86,17 @@ int inter_storage_tosql(int account_id, struct storage_data *cp, const struct st
StrBuf->AppendStr(&buf, ", `expire_time`, `bound`, `unique_id`) VALUES");
}
- StrBuf->Printf(&buf, "('%d', '%d', '%d', '%d', '%u', '%d', '%d', '%d'",
- cp_it->id, account_id, p_it->nameid, p_it->amount, p_it->equip, p_it->identify, p_it->refine, p_it->attribute);
+ StrBuf->Printf(&buf, "%s('%d', '%d', '%d', '%d', '%u', '%d', '%d', '%d'",
+ total_updates > 0 ? ", " : "", cp_it->id, account_id, p_it->nameid, p_it->amount, p_it->equip, p_it->identify, p_it->refine, p_it->attribute);
for (k = 0; k < MAX_SLOTS; k++)
StrBuf->Printf(&buf, ", '%d'", p_it->card[k]);
for (k = 0; k < MAX_ITEM_OPTIONS; ++k)
StrBuf->Printf(&buf, ", '%d', '%d'", p_it->option[k].index, p_it->option[k].value);
- StrBuf->Printf(&buf, ", '%u', '%d', '%"PRIu64"')%s", p_it->expire_time, p_it->bound, p_it->unique_id, total_updates > 0 ? ", " : "");
+ StrBuf->Printf(&buf, ", '%u', '%d', '%"PRIu64"')", p_it->expire_time, p_it->bound, p_it->unique_id);
total_updates++;
- updated_p[j] = true;
}
+ matched_p[j] = true;
} else { // Does not exist, so set for deletion.
delete[total_deletes++] = cp_it->id;
}
@@ -125,7 +127,7 @@ int inter_storage_tosql(int account_id, struct storage_data *cp, const struct st
for (i = 0; i < VECTOR_LENGTH(p->item); i++) {
struct item *p_it = &VECTOR_INDEX(p->item, i);
- if (p_it->id != 0)
+ if (matched_p[i])
continue; // Item is not a new entry, so lets continue.
// Store the remaining items.
@@ -140,8 +142,8 @@ int inter_storage_tosql(int account_id, struct storage_data *cp, const struct st
}
StrBuf->Printf(&buf, "%s('%d', '%d', '%d', '%u', '%d', '%d', '%d', '%u', '%d', '%"PRIu64"'",
- total_inserts > 0 ? ", " : "", account_id, p_it->nameid, p_it->amount, p_it->equip, p_it->identify, p_it->refine,
- p_it->attribute, p_it->expire_time, p_it->bound, p_it->unique_id);
+ total_inserts > 0 ? ", " : "", account_id, p_it->nameid, p_it->amount, p_it->equip, p_it->identify, p_it->refine,
+ p_it->attribute, p_it->expire_time, p_it->bound, p_it->unique_id);
for (j = 0; j < MAX_SLOTS; ++j)
StrBuf->Printf(&buf, ", '%d'", p_it->card[j]);
for (j = 0; j < MAX_ITEM_OPTIONS; ++j)
@@ -155,15 +157,10 @@ int inter_storage_tosql(int account_id, struct storage_data *cp, const struct st
Sql_ShowDebug(inter->sql_handle);
StrBuf->Destroy(&buf);
-
- /* re-sync loaded data with current table data. */
- VECTOR_CLEAR(cp->item);
- inter_storage->fromsql(account_id, cp);
+ VECTOR_CLEAR(cp.item);
total_changes = total_inserts + total_updates + total_deletes;
-
ShowInfo("storage save complete - id: %d (total: %d)\n", account_id, total_changes);
-
return total_changes;
}
@@ -305,49 +302,15 @@ int inter_storage_guild_storage_fromsql(int guild_id, struct guild_storage* p)
return 0;
}
-/**
- * Ensures storage data entity for a character.
- * @see DBCreateData
- */
-static struct DBData inter_storage_ensure_account_storage(union DBKey key, va_list args)
-{
- struct storage_data *stor = NULL;
-
- CREATE(stor, struct storage_data, 1);
-
- stor->save = false;
- stor->aggregate = 0;
-
- VECTOR_INIT(stor->item);
-
- return DB->ptr2data(stor);
-}
-
-/**
- * Cleaning function called through db_destroy() for vectors in storage_data.
- */
-int inter_storage_clear_account_storage(union DBKey key, struct DBData *data, va_list args)
-{
- struct storage_data *stor = DB->data2ptr(data);
-
- VECTOR_CLEAR(stor->item);
-
- return 0;
-}
-
//---------------------------------------------------------
// storage data initialize
int inter_storage_sql_init(void)
{
- inter_storage->account_storage = idb_alloc(DB_OPT_RELEASE_DATA);
-
return 1;
}
// storage data finalize
void inter_storage_sql_final(void)
{
- inter_storage->account_storage->destroy(inter_storage->account_storage, inter_storage->clear_account_storage);
-
return;
}
@@ -435,14 +398,13 @@ int mapif_parse_AccountStorageLoad(int fd)
*/
int mapif_account_storage_load(int fd, int account_id)
{
- struct storage_data *stor = NULL;
+ struct storage_data stor = { 0 };
int count = 0, i = 0, len = 0;
Assert_ret(account_id > 0);
- stor = (struct storage_data *) idb_ensure(inter_storage->account_storage, account_id, inter_storage->ensure_account_storage);
-
- count = inter_storage->fromsql(account_id, stor);
+ VECTOR_INIT(stor.item);
+ count = inter_storage->fromsql(account_id, &stor);
len = 8 + count * sizeof(struct item);
@@ -451,9 +413,11 @@ int mapif_account_storage_load(int fd, int account_id)
WFIFOW(fd, 2) = (uint16) len;
WFIFOL(fd, 4) = account_id;
for (i = 0; i < count; i++)
- memcpy(WFIFOP(fd, 8 + i * sizeof(struct item)), &VECTOR_INDEX(stor->item, i), sizeof(struct item));
+ memcpy(WFIFOP(fd, 8 + i * sizeof(struct item)), &VECTOR_INDEX(stor.item, i), sizeof(struct item));
WFIFOSET(fd, len);
+ VECTOR_CLEAR(stor.item);
+
return 1;
}
@@ -467,13 +431,11 @@ int mapif_parse_AccountStorageSave(int fd)
{
int payload_size = RFIFOW(fd, 2) - 8, account_id = RFIFOL(fd, 4);
int i = 0, count = 0;
- struct storage_data *cp_stor = NULL, p_stor = { 0 };
+ struct storage_data p_stor = { 0 };
Assert_ret(fd > 0);
Assert_ret(account_id > 0);
- cp_stor = (struct storage_data *) idb_ensure(inter_storage->account_storage, account_id, inter_storage->ensure_account_storage);
-
count = payload_size/sizeof(struct item);
VECTOR_INIT(p_stor.item);
@@ -490,7 +452,7 @@ int mapif_parse_AccountStorageSave(int fd)
p_stor.aggregate = count;
}
- inter_storage->tosql(account_id, cp_stor, &p_stor);
+ inter_storage->tosql(account_id, &p_stor);
VECTOR_CLEAR(p_stor.item);
@@ -783,8 +745,6 @@ void inter_storage_defaults(void)
{
inter_storage = &inter_storage_s;
- inter_storage->ensure_account_storage = inter_storage_ensure_account_storage;
- inter_storage->clear_account_storage = inter_storage_clear_account_storage;
inter_storage->tosql = inter_storage_tosql;
inter_storage->fromsql = inter_storage_fromsql;
inter_storage->guild_storage_tosql = inter_storage_guild_storage_tosql;
diff --git a/src/char/int_storage.h b/src/char/int_storage.h
index 1f6c03f13..46bb6910f 100644
--- a/src/char/int_storage.h
+++ b/src/char/int_storage.h
@@ -31,13 +31,7 @@ struct guild_storage;
* inter_storage interface
**/
struct inter_storage_interface {
- /* */
- struct DBMap *account_storage;
- /* */
- /* */
- struct DBData (*ensure_account_storage) (union DBKey key, va_list args);
- int (*clear_account_storage) (union DBKey key, struct DBData *data, va_list args);
- int (*tosql) (int account_id, struct storage_data *cp, const struct storage_data *p);
+ int (*tosql) (int account_id, const struct storage_data *p);
int (*fromsql) (int account_id, struct storage_data *p);
int (*guild_storage_tosql) (int guild_id, const struct guild_storage *p);
int (*guild_storage_fromsql) (int guild_id, struct guild_storage* p);
diff --git a/src/login/lclif.c b/src/login/lclif.c
index 3ed257e85..f32538610 100644
--- a/src/login/lclif.c
+++ b/src/login/lclif.c
@@ -262,7 +262,11 @@ bool lclif_send_server_list(struct login_session_data *sd)
WFIFOHEAD(sd->fd, length);
packet = WP2PTR(sd->fd);
+#if PACKETVER < 20170315
packet->packet_id = PACKET_ID_AC_ACCEPT_LOGIN;
+#else
+ packet->packet_id = PACKET_ID_AC_ACCEPT_LOGIN2;
+#endif
packet->packet_len = length;
packet->auth_code = sd->login_id1;
packet->aid = sd->account_id;
diff --git a/src/login/lclif.p.h b/src/login/lclif.p.h
index ae9d1bc14..d28f1c587 100644
--- a/src/login/lclif.p.h
+++ b/src/login/lclif.p.h
@@ -56,7 +56,9 @@ enum login_packet_id {
//PACKET_ID_CA_SSO_LOGIN_REQa = 0x825a, /* unused */
// AC (Login to Client)
+
PACKET_ID_AC_ACCEPT_LOGIN = 0x0069,
+ PACKET_ID_AC_ACCEPT_LOGIN2 = 0x0ac4,
PACKET_ID_AC_REFUSE_LOGIN = 0x006a,
PACKET_ID_SC_NOTIFY_BAN = 0x0081,
PACKET_ID_AC_ACK_HASH = 0x01dc,
@@ -256,6 +258,9 @@ struct packet_AC_ACCEPT_LOGIN {
uint32 last_login_ip; ///< Last login IP
char last_login_time[26]; ///< Last login timestamp
uint8 sex; ///< Account sex
+#if PACKETVER >= 20170315
+ char unknown1[17];
+#endif
struct {
uint32 ip; ///< Server IP address
int16 port; ///< Server port
@@ -263,6 +268,9 @@ struct packet_AC_ACCEPT_LOGIN {
uint16 usercount; ///< Online users
uint16 state; ///< Server state
uint16 property; ///< Server property
+#if PACKETVER >= 20170315
+ char unknown2[128];
+#endif
} server_list[]; ///< List of charservers
} __attribute__((packed));
diff --git a/src/map/atcommand.c b/src/map/atcommand.c
index 4d3a82ee2..19a7e360b 100644
--- a/src/map/atcommand.c
+++ b/src/map/atcommand.c
@@ -1408,7 +1408,7 @@ ACMD(baselevelup)
pc->baselevelchanged(sd);
if(sd->status.party_id)
party->send_levelup(sd);
-
+
if (level > 0 && battle_config.atcommand_levelup_events)
npc->script_event(sd, NPCE_BASELVUP); // Trigger OnPCBaseLvUpEvent
@@ -8398,7 +8398,9 @@ void atcommand_commands_sub(struct map_session_data* sd, const int fd, AtCommand
int gm_lvl = pc_get_group_level(sd);
for (i = 0; i < atcommand->binding_count; i++) {
- if (gm_lvl >= ((type == COMMAND_ATCOMMAND) ? atcommand->binding[i]->group_lv : atcommand->binding[i]->group_lv_char)) {
+ if (gm_lvl >= ((type == COMMAND_ATCOMMAND) ? atcommand->binding[i]->group_lv : atcommand->binding[i]->group_lv_char)
+ || (type == COMMAND_ATCOMMAND && atcommand->binding[i]->at_groups[pcg->get_idx(sd->group)] > 0)
+ || (type == COMMAND_CHARCOMMAND && atcommand->binding[i]->char_groups[pcg->get_idx(sd->group)] > 0)) {
size_t slen = strlen(atcommand->binding[i]->command);
if (count_bind == 0) {
cur = line_buff;
@@ -9961,6 +9963,8 @@ bool atcommand_exec(const int fd, struct map_session_data *sd, const char *messa
&& (
(is_atcommand && pc_get_group_level(sd) >= binding->group_lv)
|| (!is_atcommand && pc_get_group_level(sd) >= binding->group_lv_char)
+ || (is_atcommand && binding->at_groups[pcg->get_idx(sd->group)] > 0)
+ || (!is_atcommand && binding->char_groups[pcg->get_idx(sd->group)] > 0)
)
) {
if (binding->log) /* log only if this command should be logged [Ind/Hercules] */
@@ -10224,31 +10228,34 @@ void atcommand_db_load_groups(GroupSettings **groups, struct config_setting_t **
}
bool atcommand_can_use(struct map_session_data *sd, const char *command) {
- AtCommandInfo *info = atcommand->get_info_byname(atcommand->check_alias(command + 1));
+ AtCommandInfo *acmd_d;
+ struct atcmd_binding_data *bcmd_d;
nullpo_retr(false, sd);
- nullpo_retr(false, command);
- if (info == NULL)
- return false;
- if ((*command == atcommand->at_symbol && info->at_groups[pcg->get_idx(sd->group)] != 0) ||
- (*command == atcommand->char_symbol && info->char_groups[pcg->get_idx(sd->group)] != 0) ) {
- return true;
+ if ((acmd_d = atcommand->get_info_byname(atcommand->check_alias(command + 1))) != NULL) {
+ return ((*command == atcommand->at_symbol && acmd_d->at_groups[pcg->get_idx(sd->group)] > 0) ||
+ (*command == atcommand->char_symbol && acmd_d->char_groups[pcg->get_idx(sd->group)] > 0));
+ } else if ((bcmd_d = atcommand->get_bind_byname(atcommand->check_alias(command + 1))) != NULL) {
+ return ((*command == atcommand->at_symbol && bcmd_d->at_groups[pcg->get_idx(sd->group)] > 0) ||
+ (*command == atcommand->char_symbol && bcmd_d->char_groups[pcg->get_idx(sd->group)] > 0));
}
return false;
}
+
bool atcommand_can_use2(struct map_session_data *sd, const char *command, AtCommandType type) {
- AtCommandInfo *info = atcommand->get_info_byname(atcommand->check_alias(command));
+ AtCommandInfo *acmd_d;
+ struct atcmd_binding_data *bcmd_d;
nullpo_retr(false, sd);
- nullpo_retr(false, command);
- if (info == NULL)
- return false;
- if ((type == COMMAND_ATCOMMAND && info->at_groups[pcg->get_idx(sd->group)] != 0) ||
- (type == COMMAND_CHARCOMMAND && info->char_groups[pcg->get_idx(sd->group)] != 0) ) {
- return true;
+ if ((acmd_d = atcommand->get_info_byname(atcommand->check_alias(command))) != NULL) {
+ return ((type == COMMAND_ATCOMMAND && acmd_d->at_groups[pcg->get_idx(sd->group)] > 0) ||
+ (type == COMMAND_CHARCOMMAND && acmd_d->char_groups[pcg->get_idx(sd->group)] > 0));
+ } else if ((bcmd_d = atcommand->get_bind_byname(atcommand->check_alias(command))) != NULL) {
+ return ((type == COMMAND_ATCOMMAND && bcmd_d->at_groups[pcg->get_idx(sd->group)] > 0) ||
+ (type == COMMAND_CHARCOMMAND && bcmd_d->char_groups[pcg->get_idx(sd->group)] > 0));
}
return false;
diff --git a/src/map/atcommand.h b/src/map/atcommand.h
index 35b3c382e..efcf6dd31 100644
--- a/src/map/atcommand.h
+++ b/src/map/atcommand.h
@@ -79,8 +79,10 @@ struct AtCommandInfo {
struct atcmd_binding_data {
char command[ATCOMMAND_LENGTH];
char npc_event[ATCOMMAND_LENGTH];
- int group_lv;
- int group_lv_char;
+ int group_lv; // DEPRECATED
+ int group_lv_char; // DEPRECATED
+ char *at_groups; // quick @commands "can-use" lookup
+ char *char_groups; // quick @charcommands "can-use" lookup
bool log;
};
diff --git a/src/map/packets.h b/src/map/packets.h
index d1875f2f0..0a774561d 100644
--- a/src/map/packets.h
+++ b/src/map/packets.h
@@ -5711,6 +5711,40 @@ packet(0x96e,-1,clif->ackmergeitems);
packet(0x0ab3,19);
#endif
+// 2017-01-25aRagexeRE
+#if PACKETVER == 20170125
+// shuffle packets
+ packet(0x0438,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0811,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x086e,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0876,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0877,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0879,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x087b,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x087d,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0881,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0884,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0893,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0894,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0895,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0898,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x089b,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x08a5,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x091b,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x091c,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x091d,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0920,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0929,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x092b,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0930,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x093c,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0943,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0944,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x095c,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0965,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0968,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+#endif
+
// 2017-02-01aRagexeRE
#if PACKETVER >= 20170201
// new packets
@@ -5718,6 +5752,40 @@ packet(0x96e,-1,clif->ackmergeitems);
// changed packet sizes
#endif
+// 2017-02-08aRagexeRE
+#if PACKETVER == 20170208
+// shuffle packets
+ packet(0x02c4,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0367,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085c,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0860,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x087a,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x088c,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0892,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x08a1,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x08ac,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0921,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0923,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x092d,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0932,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0937,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
// 2017-02-15aRagexeRE
#if PACKETVER >= 20170215
// new packets
@@ -5734,6 +5802,40 @@ packet(0x96e,-1,clif->ackmergeitems);
#endif
// 2017-02-28aRagexeRE
+#if PACKETVER == 20170228
+// shuffle packets
+ packet(0x022d,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0360,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0362,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0819,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x085e,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0863,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x086b,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0873,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0874,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0876,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0883,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0884,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0889,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0893,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x089e,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x08a0,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x08a2,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x08a6,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x08a7,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x091f,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x092a,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x092e,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0937,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x093e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0944,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0947,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0948,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0952,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0955,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+#endif
+
+// 2017-02-28aRagexeRE
#if PACKETVER >= 20170228
// new packets
packet(0x0ac0,26);
@@ -5750,6 +5852,40 @@ packet(0x96e,-1,clif->ackmergeitems);
#endif
// 2017-03-08bRagexeRE
+#if PACKETVER == 20170308
+// shuffle packets
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x087d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2017-03-08bRagexeRE
#if PACKETVER >= 20170308
// new packets
packet(0x0ac8,2);
@@ -5757,6 +5893,74 @@ packet(0x96e,-1,clif->ackmergeitems);
// changed packet sizes
#endif
+// 2017-03-15cRagexeRE
+#if PACKETVER == 20170315
+// shuffle packets
+ packet(0x02c4,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x035f,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0360,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0366,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0367,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0436,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x07ec,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x085c,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0863,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x086a,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0872,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x087b,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0884,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x088b,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x088d,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x088f,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0892,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x089c,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x08aa,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x091a,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x091b,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x091d,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0920,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0922,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0944,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x094a,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x094e,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0950,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0952,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+#endif
+
+// 2017-03-22aRagexeRE
+#if PACKETVER == 20170322
+// shuffle packets
+ packet(0x0202,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x022d,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x023b,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0281,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0361,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0362,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0363,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0364,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x0365,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0436,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x07e4,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x07ec,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0802,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x091a,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
// 2017-03-22aRagexeRE
#if PACKETVER >= 20170322
// new packets
@@ -5764,6 +5968,40 @@ packet(0x96e,-1,clif->ackmergeitems);
// changed packet sizes
#endif
+// 2017-03-29dRagexeRE
+#if PACKETVER == 20170329
+// shuffle packets
+ packet(0x0281,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0363,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0835,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085d,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x087a,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0888,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x08a8,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0917,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0926,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0929,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x092e,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x0937,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0939,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0949,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x095f,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
// 2017-03-29cRagexeRE
#if PACKETVER >= 20170329
// new packets
@@ -5772,6 +6010,40 @@ packet(0x96e,-1,clif->ackmergeitems);
#endif
// 2017-04-05bRagexeRE
+#if PACKETVER == 20170405
+// shuffle packets
+ packet(0x022d,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x0281,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x035f,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x0360,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0362,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0363,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x0366,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0368,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x0369,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+ packet(0x0437,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x0438,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0811,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0815,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0817,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x0819,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x0835,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0838,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x083c,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x085f,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x0860,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0864,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x0865,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x086f,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0893,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x08a5,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x094c,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x094f,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0964,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x096a,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+#endif
+
+// 2017-04-05bRagexeRE
#if PACKETVER >= 20170405
// new packets
packet(0x0acb,12);
@@ -5787,6 +6059,55 @@ packet(0x96e,-1,clif->ackmergeitems);
packet(0x0a99,4);
#endif
+// 2017-04-26dRagexeRE
+#if PACKETVER >= 20170426
+// new packets
+// changed packet sizes
+ packet(0x0a98,10);
+#endif
+
+// 2017-05-02dRagexeRE
+#if PACKETVER >= 20170502
+// new packets
+ packet(0x0ace,4);
+// changed packet sizes
+#endif
+
+// 2017-05-17aRagexeRE
+#if PACKETVER == 20170517
+// shuffle packets
+ packet(0x0364,8,clif->pDull/*,XXX*/); // CZ_JOIN_BATTLE_FIELD
+ packet(0x0367,-1,clif->pReqOpenBuyingStore,2,4,8,9,89); // CZ_REQ_OPEN_BUYING_STORE
+ packet(0x0437,7,clif->pActionRequest,2,6); // CZ_REQUEST_ACT
+ packet(0x0802,18,clif->pPartyBookingRegisterReq,2,4); // CZ_PARTY_BOOKING_REQ_REGISTER
+ packet(0x0815,10,clif->pUseSkillToId,2,4,6); // CZ_USE_SKILL
+ packet(0x0817,10,clif->pUseSkillToPos,2,4,6,8); // CZ_USE_SKILL_TOGROUND
+ packet(0x0868,90,clif->pUseSkillToPosMoreInfo,2,4,6,8,10); // CZ_USE_SKILL_TOGROUND_WITHTALKBOX
+ packet(0x0875,2,clif->pSearchStoreInfoNextPage,0); // CZ_SEARCH_STORE_INFO_NEXT_PAGE
+ packet(0x087b,6,clif->pSolveCharName,2); // CZ_REQNAME_BYGID
+ packet(0x087d,-1,clif->pSearchStoreInfo,2,4,5,9,13,14,15); // CZ_SEARCH_STORE_INFO
+ packet(0x088c,8,clif->pMoveFromKafra,2,4); // CZ_MOVE_ITEM_FROM_STORE_TO_BODY
+ packet(0x088d,5,clif->pChangeDir,2,4); // CZ_CHANGE_DIRECTION
+ packet(0x0894,6,clif->pGetCharNameRequest,2); // CZ_REQNAME
+ packet(0x0896,12,clif->pSearchStoreInfoListItemClick,2,6,10); // CZ_SSILIST_ITEM_CLICK
+ packet(0x0899,26,clif->pPartyInvite2,2); // CZ_PARTY_JOIN_REQ
+ packet(0x089e,4,clif->pDull/*,XXX*/); // CZ_GANGSI_RANK
+ packet(0x089f,2,clif->pReqCloseBuyingStore,0); // CZ_REQ_CLOSE_BUYING_STORE
+ packet(0x08a2,6,clif->pTickSend,2); // CZ_REQUEST_TIME
+ packet(0x08a8,5,clif->pWalkToXY,2); // CZ_REQUEST_MOVE
+ packet(0x08aa,8,clif->pMoveToKafra,2,4); // CZ_MOVE_ITEM_FROM_BODY_TO_STORE
+ packet(0x091b,-1,clif->pReqTradeBuyingStore,2,4,8,12); // CZ_REQ_TRADE_BUYING_STORE
+ packet(0x0923,19,clif->pWantToConnection,2,6,10,14,18); // CZ_ENTER
+ packet(0x093b,6,clif->pDropItem,2,4); // CZ_ITEM_THROW
+ packet(0x0945,-1,clif->pItemListWindowSelected,2,4,8); // CZ_ITEMLISTWIN_RES
+ packet(0x0946,6,clif->pReqClickBuyingStore,2); // CZ_REQ_CLICK_TO_BUYING_STORE
+ packet(0x0947,36,clif->pStoragePassword,0); // CZ_ACK_STORE_PASSWORD
+ packet(0x0958,5,clif->pHomMenu,2,4); // CZ_COMMAND_MER
+ packet(0x0960,26,clif->pFriendsListAdd,2); // CZ_ADD_FRIENDS
+ packet(0x0964,6,clif->pTakeItem,2); // CZ_ITEM_PICKUP
+#endif
+
+
/* PacketKeys: http://herc.ws/board/topic/1105-hercules-wpe-free-june-14th-patch/ */
#if PACKETVER >= 20110817
packetKeys(0x053D5CED,0x3DED6DED,0x6DED6DED); /* Thanks to Shakto */
@@ -6240,6 +6561,41 @@ packet(0x96e,-1,clif->ackmergeitems);
packetKeys(0x69CB4F56,0x793C165E,0x673A2354); /* 4144 */
#endif
+#if PACKETVER == 20170125
+ packetKeys(0x066E04FE,0x3004224A,0x04FF0458); /* 4144 */
+#endif
+
+#if PACKETVER == 20170208
+ packetKeys(0x6A764E5F,0x0609570D,0x28AE07FA); /* 4144 */
+#endif
+
+#if PACKETVER == 20170228
+ packetKeys(0x771D4F2B,0x20EF1F4C,0x0D5135C8); /* 4144 */
+#endif
+
+#if PACKETVER == 20170308
+ packetKeys(0x653470A9,0x6B316A71,0x5C712C71); /* 4144 */
+#endif
+
+#if PACKETVER == 20170315
+ packetKeys(0x399A0856,0x56642A94,0x7F77157D); /* 4144 */
+#endif
+
+#if PACKETVER == 20170322
+ packetKeys(0x2050167B,0x01731233,0x40337033); /* 4144 */
+#endif
+
+#if PACKETVER == 20170329
+ packetKeys(0x18B31A80,0x1B0B1D56,0x16857D6A); /* 4144 */
+#endif
+
+#if PACKETVER == 20170405
+ packetKeys(0x1FDE7DAC,0x2F9F5B63,0x3F2062AF); /* 4144 */
+#endif
+
+#if PACKETVER == 20170517
+ packetKeys(0x2CC4749A,0x1FA954DC,0x72276857); /* 4144 */
+#endif
#if defined(OBFUSCATIONKEY1) && defined(OBFUSCATIONKEY2) && defined(OBFUSCATIONKEY3)
packetKeys(OBFUSCATIONKEY1,OBFUSCATIONKEY2,OBFUSCATIONKEY3);
diff --git a/src/map/script.c b/src/map/script.c
index 81645b0e1..bd73fc021 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -136,6 +136,7 @@ const char* script_op2name(int op) {
RETURN_OP_NAME(C_ADD);
RETURN_OP_NAME(C_SUB);
RETURN_OP_NAME(C_MUL);
+ RETURN_OP_NAME(C_POW);
RETURN_OP_NAME(C_DIV);
RETURN_OP_NAME(C_MOD);
RETURN_OP_NAME(C_NEG);
@@ -1035,6 +1036,7 @@ const char* parse_variable(const char* p)
|| ( p[0] == '|' && p[1] == '=' && (type = C_OR, true) ) // |=
|| ( p[0] == '&' && p[1] == '=' && (type = C_AND, true) ) // &=
|| ( p[0] == '*' && p[1] == '=' && (type = C_MUL, true) ) // *=
+ || ( p[0] == '*' && p[1] == '*' && p[2] == '=' && (type = C_POW, true) ) // **=
|| ( p[0] == '/' && p[1] == '=' && (type = C_DIV, true) ) // /=
|| ( p[0] == '%' && p[1] == '=' && (type = C_MOD, true) ) // %=
|| ( p[0] == '+' && p[1] == '+' && (type = C_ADD_POST, true) ) // post ++
@@ -1058,6 +1060,7 @@ const char* parse_variable(const char* p)
case C_L_SHIFT: // <<=
case C_R_SHIFT: // >>=
+ case C_POW: // **=
p = script->skip_space( &p[3] );
break;
@@ -1424,6 +1427,7 @@ const char* script_parse_subexpr(const char* p,int limit)
(op=C_OP3, opl=0, len=1,*p=='?') // ?:
|| (op=C_ADD, opl=9, len=1,*p=='+') // +
|| (op=C_SUB, opl=9, len=1,*p=='-') // -
+ || (op=C_POW, opl=11,len=2,*p=='*' && p[1]=='*') // **
|| (op=C_MUL, opl=10,len=1,*p=='*') // *
|| (op=C_DIV, opl=10,len=1,*p=='/') // /
|| (op=C_MOD, opl=10,len=1,*p=='%') // %
@@ -4146,6 +4150,7 @@ void op_2num(struct script_state* st, int op, int i1, int i2)
case C_ADD: ret = i1 + i2; ret64 = (int64)i1 + i2; break;
case C_SUB: ret = i1 - i2; ret64 = (int64)i1 - i2; break;
case C_MUL: ret = i1 * i2; ret64 = (int64)i1 * i2; break;
+ case C_POW: ret = (int)pow((double)i1, (double)i2); ret64 = (int64)pow((double)i1, (double)i2); break;
default:
ShowError("script:op_2num: unexpected number operator %s i1=%d i2=%d\n", script->op2name(op), i1, i2);
script->reportsrc(st);
@@ -4683,6 +4688,7 @@ void run_script_main(struct script_state *st) {
case C_ADD:
case C_SUB:
case C_MUL:
+ case C_POW:
case C_DIV:
case C_MOD:
case C_EQ:
@@ -7314,6 +7320,22 @@ int script_array_index_cmp(const void *a, const void *b)
return (*(const unsigned int *)a - *(const unsigned int *)b); // FIXME: Is the unsigned difference really intended here?
}
+BUILDIN(getarrayindex)
+{
+ struct script_data *data = script_getdata(st, 2);
+
+ if (!data_isreference(data) || reference_toconstant(data))
+ {
+ ShowError("script:getarrayindex: not a variable\n");
+ script->reportdata(data);
+ st->state = END;
+ return false;// not a variable
+ }
+
+ script_pushint(st, reference_getindex(data));
+ return true;
+}
+
/// Deletes count or all the elements in an array, from the starting index.
/// ex: deletearray arr[4],2;
///
@@ -16138,6 +16160,26 @@ BUILDIN(charat) {
}
//=======================================================
+// isstr <argument>
+//
+// returns type:
+// 0 - int
+// 1 - string
+// 2 - other
+//-------------------------------------------------------
+BUILDIN(isstr)
+{
+ if (script_isinttype(st, 2)) {
+ script_pushint(st, 0);
+ } else if (script_isstringtype(st, 2)) {
+ script_pushint(st, 1);
+ } else {
+ script_pushint(st, 2);
+ }
+ return true;
+}
+
+//=======================================================
// chr <int>
//-------------------------------------------------------
BUILDIN(chr)
@@ -21505,6 +21547,43 @@ BUILDIN(issit)
return true;
}
+BUILDIN(add_group_command)
+{
+ AtCommandInfo *acmd_d;
+ struct atcmd_binding_data *bcmd_d;
+ GroupSettings *group;
+ int group_index;
+ const char *atcmd = script_getstr(st, 2);
+ int group_id = script_getnum(st, 3);
+ bool self_perm = (script_getnum(st, 4) == 1);
+ bool char_perm = (script_getnum(st, 5) == 1);
+
+ if (!pcg->exists(group_id)) {
+ ShowWarning("script:add_group_command: group does not exist: %i\n", group_id);
+ script_pushint(st, 0);
+ return false;
+ }
+
+ group = pcg->id2group(group_id);
+ group_index = pcg->get_idx(group);
+
+ if ((bcmd_d = atcommand->get_bind_byname(atcmd)) != NULL) {
+ bcmd_d->at_groups[group_index] = self_perm;
+ bcmd_d->char_groups[group_index] = char_perm;
+ script_pushint(st, 1);
+ return true;
+ } else if ((acmd_d = atcommand->get_info_byname(atcmd)) != NULL) {
+ acmd_d->at_groups[group_index] = self_perm;
+ acmd_d->char_groups[group_index] = char_perm;
+ script_pushint(st, 1);
+ return true;
+ }
+
+ ShowWarning("script:add_group_command: command does not exist: %s\n", atcmd);
+ script_pushint(st, 0);
+ return false;
+}
+
/**
* @commands (script based)
**/
@@ -21554,6 +21633,8 @@ BUILDIN(bindatcmd)
atcommand->binding[i]->group_lv = group_lv;
atcommand->binding[i]->group_lv_char = group_lv_char;
atcommand->binding[i]->log = log;
+ CREATE(atcommand->binding[i]->at_groups, char, db_size(pcg->db));
+ CREATE(atcommand->binding[i]->char_groups, char, db_size(pcg->db));
}
return true;
@@ -23283,6 +23364,7 @@ void script_parse_builtin(void) {
BUILDIN_DEF(cleararray,"rvi"),
BUILDIN_DEF(copyarray,"rri"),
BUILDIN_DEF(getarraysize,"r"),
+ BUILDIN_DEF(getarrayindex,"r"),
BUILDIN_DEF(deletearray,"r?"),
BUILDIN_DEF(getelementofarray,"ri"),
BUILDIN_DEF(getitem,"vi?"),
@@ -23535,6 +23617,7 @@ void script_parse_builtin(void) {
BUILDIN_DEF(getstrlen,"s"), //strlen [Valaris]
BUILDIN_DEF(charisalpha,"si"), //isalpha [Valaris]
BUILDIN_DEF(charat,"si"),
+ BUILDIN_DEF(isstr,"v"),
BUILDIN_DEF(chr,"i"),
BUILDIN_DEF(ord,"s"),
BUILDIN_DEF(setchar,"ssi"),
@@ -23565,7 +23648,7 @@ void script_parse_builtin(void) {
// List of mathematics commands --->
BUILDIN_DEF(log10,"i"),
BUILDIN_DEF(sqrt,"i"), //[zBuffer]
- BUILDIN_DEF(pow,"ii"), //[zBuffer]
+ BUILDIN_DEF_DEPRECATED(pow,"ii"), //[zBuffer]
BUILDIN_DEF(distance,"iiii"), //[zBuffer]
// <--- List of mathematics commands
BUILDIN_DEF(min, "i*"),
@@ -23725,6 +23808,7 @@ void script_parse_builtin(void) {
BUILDIN_DEF(useatcmd, "s"),
BUILDIN_DEF(has_permission, "v?"),
BUILDIN_DEF(can_use_command, "s?"),
+ BUILDIN_DEF(add_group_command, "siii"),
/**
* Item bound [Xantara] [Akinari] [Mhalicot/Hercules]
diff --git a/src/map/script.h b/src/map/script.h
index 8caec961a..fddcf4908 100644
--- a/src/map/script.h
+++ b/src/map/script.h
@@ -235,6 +235,7 @@ typedef enum c_op {
C_SUB_PRE, // --a
C_RE_EQ, // ~=
C_RE_NE, // ~!
+ C_POW, // **
} c_op;
/// Script queue options
diff --git a/src/map/storage.c b/src/map/storage.c
index 4aefaae96..01e7c7c27 100644
--- a/src/map/storage.c
+++ b/src/map/storage.c
@@ -200,6 +200,8 @@ int storage_additem(struct map_session_data* sd, struct item* item_data, int amo
clif->storageitemadded(sd, it, i, amount);
+ sd->storage.save = true; // set a save flag.
+
return 0;
}
}
@@ -220,6 +222,8 @@ int storage_additem(struct map_session_data* sd, struct item* item_data, int amo
*it = *item_data;
}
+ it->amount = amount;
+
sd->storage.aggregate++;
clif->storageitemadded(sd, it, i, amount);
diff --git a/src/plugins/HPMHooking/HPMHooking.Defs.inc b/src/plugins/HPMHooking/HPMHooking.Defs.inc
index 65c7f23b1..1a2e7a2d5 100644
--- a/src/plugins/HPMHooking/HPMHooking.Defs.inc
+++ b/src/plugins/HPMHooking/HPMHooking.Defs.inc
@@ -2962,12 +2962,8 @@ typedef int (*HPMHOOK_pre_inter_quest_parse_frommap) (int *fd);
typedef int (*HPMHOOK_post_inter_quest_parse_frommap) (int retVal___, int fd);
#endif // CHAR_INT_QUEST_H
#ifdef CHAR_INT_STORAGE_H /* inter_storage */
-typedef struct DBData (*HPMHOOK_pre_inter_storage_ensure_account_storage) (union DBKey *key, va_list args);
-typedef struct DBData (*HPMHOOK_post_inter_storage_ensure_account_storage) (struct DBData retVal___, union DBKey key, va_list args);
-typedef int (*HPMHOOK_pre_inter_storage_clear_account_storage) (union DBKey *key, struct DBData **data, va_list args);
-typedef int (*HPMHOOK_post_inter_storage_clear_account_storage) (int retVal___, union DBKey key, struct DBData *data, va_list args);
-typedef int (*HPMHOOK_pre_inter_storage_tosql) (int *account_id, struct storage_data **cp, const struct storage_data **p);
-typedef int (*HPMHOOK_post_inter_storage_tosql) (int retVal___, int account_id, struct storage_data *cp, const struct storage_data *p);
+typedef int (*HPMHOOK_pre_inter_storage_tosql) (int *account_id, const struct storage_data **p);
+typedef int (*HPMHOOK_post_inter_storage_tosql) (int retVal___, int account_id, const struct storage_data *p);
typedef int (*HPMHOOK_pre_inter_storage_fromsql) (int *account_id, struct storage_data **p);
typedef int (*HPMHOOK_post_inter_storage_fromsql) (int retVal___, int account_id, struct storage_data *p);
typedef int (*HPMHOOK_pre_inter_storage_guild_storage_tosql) (int *guild_id, const struct guild_storage **p);
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
index 5e449a4d1..21e136c2f 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HPMHooksCore.inc
@@ -624,10 +624,6 @@ struct {
struct HPMHookPoint *HP_inter_pet_parse_frommap_post;
struct HPMHookPoint *HP_inter_quest_parse_frommap_pre;
struct HPMHookPoint *HP_inter_quest_parse_frommap_post;
- struct HPMHookPoint *HP_inter_storage_ensure_account_storage_pre;
- struct HPMHookPoint *HP_inter_storage_ensure_account_storage_post;
- struct HPMHookPoint *HP_inter_storage_clear_account_storage_pre;
- struct HPMHookPoint *HP_inter_storage_clear_account_storage_post;
struct HPMHookPoint *HP_inter_storage_tosql_pre;
struct HPMHookPoint *HP_inter_storage_tosql_post;
struct HPMHookPoint *HP_inter_storage_fromsql_pre;
@@ -2113,10 +2109,6 @@ struct {
int HP_inter_pet_parse_frommap_post;
int HP_inter_quest_parse_frommap_pre;
int HP_inter_quest_parse_frommap_post;
- int HP_inter_storage_ensure_account_storage_pre;
- int HP_inter_storage_ensure_account_storage_post;
- int HP_inter_storage_clear_account_storage_pre;
- int HP_inter_storage_clear_account_storage_post;
int HP_inter_storage_tosql_pre;
int HP_inter_storage_tosql_post;
int HP_inter_storage_fromsql_pre;
diff --git a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
index 9b07bdccd..639cdbdd2 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.HookingPoints.inc
@@ -344,8 +344,6 @@ struct HookingPointData HookingPoints[] = {
/* inter_quest_interface */
{ HP_POP(inter_quest->parse_frommap, HP_inter_quest_parse_frommap) },
/* inter_storage_interface */
- { HP_POP(inter_storage->ensure_account_storage, HP_inter_storage_ensure_account_storage) },
- { HP_POP(inter_storage->clear_account_storage, HP_inter_storage_clear_account_storage) },
{ HP_POP(inter_storage->tosql, HP_inter_storage_tosql) },
{ HP_POP(inter_storage->fromsql, HP_inter_storage_fromsql) },
{ HP_POP(inter_storage->guild_storage_tosql, HP_inter_storage_guild_storage_tosql) },
diff --git a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
index 656fd8e07..96e068903 100644
--- a/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
+++ b/src/plugins/HPMHooking/HPMHooking_char.Hooks.inc
@@ -8032,81 +8032,15 @@ int HP_inter_quest_parse_frommap(int fd) {
return retVal___;
}
/* inter_storage_interface */
-struct DBData HP_inter_storage_ensure_account_storage(union DBKey key, va_list args) {
- int hIndex = 0;
- struct DBData retVal___ = { 0 };
- if (HPMHooks.count.HP_inter_storage_ensure_account_storage_pre > 0) {
- struct DBData (*preHookFunc) (union DBKey *key, va_list args);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_storage_ensure_account_storage_pre; hIndex++) {
- va_list args___copy; va_copy(args___copy, args);
- preHookFunc = HPMHooks.list.HP_inter_storage_ensure_account_storage_pre[hIndex].func;
- retVal___ = preHookFunc(&key, args___copy);
- va_end(args___copy);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- va_list args___copy; va_copy(args___copy, args);
- retVal___ = HPMHooks.source.inter_storage.ensure_account_storage(key, args___copy);
- va_end(args___copy);
- }
- if (HPMHooks.count.HP_inter_storage_ensure_account_storage_post > 0) {
- struct DBData (*postHookFunc) (struct DBData retVal___, union DBKey key, va_list args);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_storage_ensure_account_storage_post; hIndex++) {
- va_list args___copy; va_copy(args___copy, args);
- postHookFunc = HPMHooks.list.HP_inter_storage_ensure_account_storage_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, key, args___copy);
- va_end(args___copy);
- }
- }
- return retVal___;
-}
-int HP_inter_storage_clear_account_storage(union DBKey key, struct DBData *data, va_list args) {
- int hIndex = 0;
- int retVal___ = 0;
- if (HPMHooks.count.HP_inter_storage_clear_account_storage_pre > 0) {
- int (*preHookFunc) (union DBKey *key, struct DBData **data, va_list args);
- *HPMforce_return = false;
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_storage_clear_account_storage_pre; hIndex++) {
- va_list args___copy; va_copy(args___copy, args);
- preHookFunc = HPMHooks.list.HP_inter_storage_clear_account_storage_pre[hIndex].func;
- retVal___ = preHookFunc(&key, &data, args___copy);
- va_end(args___copy);
- }
- if (*HPMforce_return) {
- *HPMforce_return = false;
- return retVal___;
- }
- }
- {
- va_list args___copy; va_copy(args___copy, args);
- retVal___ = HPMHooks.source.inter_storage.clear_account_storage(key, data, args___copy);
- va_end(args___copy);
- }
- if (HPMHooks.count.HP_inter_storage_clear_account_storage_post > 0) {
- int (*postHookFunc) (int retVal___, union DBKey key, struct DBData *data, va_list args);
- for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_storage_clear_account_storage_post; hIndex++) {
- va_list args___copy; va_copy(args___copy, args);
- postHookFunc = HPMHooks.list.HP_inter_storage_clear_account_storage_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, key, data, args___copy);
- va_end(args___copy);
- }
- }
- return retVal___;
-}
-int HP_inter_storage_tosql(int account_id, struct storage_data *cp, const struct storage_data *p) {
+int HP_inter_storage_tosql(int account_id, const struct storage_data *p) {
int hIndex = 0;
int retVal___ = 0;
if (HPMHooks.count.HP_inter_storage_tosql_pre > 0) {
- int (*preHookFunc) (int *account_id, struct storage_data **cp, const struct storage_data **p);
+ int (*preHookFunc) (int *account_id, const struct storage_data **p);
*HPMforce_return = false;
for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_storage_tosql_pre; hIndex++) {
preHookFunc = HPMHooks.list.HP_inter_storage_tosql_pre[hIndex].func;
- retVal___ = preHookFunc(&account_id, &cp, &p);
+ retVal___ = preHookFunc(&account_id, &p);
}
if (*HPMforce_return) {
*HPMforce_return = false;
@@ -8114,13 +8048,13 @@ int HP_inter_storage_tosql(int account_id, struct storage_data *cp, const struct
}
}
{
- retVal___ = HPMHooks.source.inter_storage.tosql(account_id, cp, p);
+ retVal___ = HPMHooks.source.inter_storage.tosql(account_id, p);
}
if (HPMHooks.count.HP_inter_storage_tosql_post > 0) {
- int (*postHookFunc) (int retVal___, int account_id, struct storage_data *cp, const struct storage_data *p);
+ int (*postHookFunc) (int retVal___, int account_id, const struct storage_data *p);
for (hIndex = 0; hIndex < HPMHooks.count.HP_inter_storage_tosql_post; hIndex++) {
postHookFunc = HPMHooks.list.HP_inter_storage_tosql_post[hIndex].func;
- retVal___ = postHookFunc(retVal___, account_id, cp, p);
+ retVal___ = postHookFunc(retVal___, account_id, p);
}
}
return retVal___;