Index: src/map/atcommand.c
===================================================================
--- src/map/atcommand.c (revision 13617)
+++ src/map/atcommand.c (working copy)
@@ -1085,7 +1085,7 @@
ACMD(item)
{
char item_name[100];
- int number = 0, item_id, flag = 0, bound = 0;
+ int number = 0, item_id, flag = 0, bound = 0, costume = 0;
struct item item_tmp;
struct item_data *item_data;
int get_count, i;
@@ -1139,7 +1139,27 @@
break;
}
}
-
+
+ if( !strcmpi(command+1,"costumeitem") )
+ {
+ if( !battle_config.reserved_costume_id )
+ {
+ clif->message(fd, "Costume conversion is disable. Set a value for reserved_cosutme_id on your battle.conf file.");
+ return -1;
+ }
+ if( !(item_data->equip&EQP_HEAD_LOW) &&
+ !(item_data->equip&EQP_HEAD_MID) &&
+ !(item_data->equip&EQP_HEAD_TOP) &&
+ !(item_data->equip&EQP_COSTUME_HEAD_LOW) &&
+ !(item_data->equip&EQP_COSTUME_HEAD_MID) &&
+ !(item_data->equip&EQP_COSTUME_HEAD_TOP) )
+ {
+ clif->message(fd, "You cannot costume this item. Costume only work for headgears.");
+ return -1;
+ }
+ costume = 1;
+ }
+
item_id = item_data->nameid;
get_count = number;
//Check if it's stackable.
@@ -1159,6 +1179,14 @@
item_tmp.identify = 1;
item_tmp.bound = (unsigned char)bound;
+ if( costume == 1 )
+ { // Costume Item
+ item_tmp.card[0] = CARD0_CREATE;
+ item_tmp.card[2] = GetWord(battle_config.reserved_costume_id, 0);
+ item_tmp.card[3] = GetWord(battle_config.reserved_costume_id, 1);
+ }
+
+
if ((flag = pc->additem(sd, &item_tmp, get_count, LOG_TYPE_COMMAND)))
clif->additem(sd, 0, 0, flag);
}
@@ -9600,6 +9628,7 @@
ACMD_DEF(searchstore),
ACMD_DEF(costume),
ACMD_DEF(skdebug),
+ ACMD_DEF2("costumeitem", item)
};
int i;
Index: src/map/battle.c
===================================================================
--- src/map/battle.c (revision 13617)
+++ src/map/battle.c (working copy)
@@ -6543,6 +6543,7 @@
{ "feature.banking", &battle_config.feature_banking, 1, 0, 1, },
{ "feature.auction", &battle_config.feature_auction, 0, 0, 2, },
{ "idletime_criteria", &battle_config.idletime_criteria, 0x25, 1, INT_MAX, },
+ { "reserved_costume_id", &battle_config.reserved_costume_id, 999998, 0, INT_MAX, },
{ "mon_trans_disable_in_gvg", &battle_config.mon_trans_disable_in_gvg, 0, 0, 1, },
{ "case_sensitive_aegisnames", &battle_config.case_sensitive_aegisnames, 1, 0, 1, },
Index: src/map/battle.h
===================================================================
--- src/map/battle.h (revision 13617)
+++ src/map/battle.h (working copy)
@@ -447,6 +447,9 @@
int min_npc_vendchat_distance;
int atcommand_mobinfo_type;
+ // Costume System
+ int reserved_costume_id;
+
int mob_size_influence; // Enable modifications on earned experience, drop rates and monster status depending on monster size. [mkbu95]
/** Hercules **/
Index: src/map/map.c
===================================================================
--- src/map/map.c (revision 13617)
+++ src/map/map.c (working copy)
@@ -1577,6 +1577,13 @@
nullpo_retv(sd);
+
+ if( battle_config.reserved_costume_id && battle_config.reserved_costume_id == charid )
+ {
+ clif->solved_charname(sd->fd, charid, "Costume");
+ return;
+ }
+
tsd = map->charid2sd(charid);
if( tsd ) {
clif->solved_charname(sd->fd, charid, tsd->status.name);
Index: src/map/pc.c
===================================================================
--- src/map/pc.c (revision 13617)
+++ src/map/pc.c (working copy)
@@ -664,8 +664,8 @@
int pc_equippoint(struct map_session_data *sd,int n)
{
- int ep = 0;
-
+ int ep = 0, char_id = 0;
+
nullpo_ret(sd);
if(!sd->inventory_data[n])
@@ -684,6 +684,14 @@
if( ep == EQP_SHADOW_SHIELD )/* are there conditions for those? */
return EQP_SHADOW_WEAPON|EQP_SHADOW_SHIELD;
}
+ if( battle_config.reserved_costume_id &&
+ sd->status.inventory[n].card[0] == CARD0_CREATE &&
+ (char_id = MakeDWord(sd->status.inventory[n].card[2],sd->status.inventory[n].card[3])) == battle_config.reserved_costume_id )
+ { // Costume Item - Converted
+ if( ep&EQP_HEAD_TOP ) { ep &= ~EQP_HEAD_TOP; ep |= EQP_COSTUME_HEAD_TOP; }
+ if( ep&EQP_HEAD_LOW ) { ep &= ~EQP_HEAD_LOW; ep |= EQP_COSTUME_HEAD_LOW; }
+ if( ep&EQP_HEAD_MID ) { ep &= ~EQP_HEAD_MID; ep |= EQP_COSTUME_HEAD_MID; }
+ }
return ep;
}
Index: src/map/script.c
===================================================================
--- src/map/script.c (revision 13617)
+++ src/map/script.c (working copy)
@@ -18016,6 +18019,51 @@
return true;
}
+/*==========================================
+ * Costume Items Hercules/[Mhalicot]
+ *------------------------------------------*/
+BUILDIN(costume)
+{
+ int i = -1, num, ep;
+ TBL_PC *sd;
+
+ num = script_getnum(st,2); // Equip Slot
+ sd = script->rid2sd(st);
+
+ if( sd == NULL )
+ return 0;
+ if( num > 0 && num <= ARRAYLENGTH(script->equip) )
+ i = pc->checkequip(sd, script->equip[num - 1]);
+ if( i < 0 )
+ return 0;
+ ep = sd->status.inventory[i].equip;
+ if( !(ep&EQP_HEAD_LOW) && !(ep&EQP_HEAD_MID) && !(ep&EQP_HEAD_TOP) )
+ return 0;
+
+ logs->pick_pc(sd, LOG_TYPE_SCRIPT, -1, &sd->status.inventory[i],sd->inventory_data[i]);
+ pc->unequipitem(sd,i,2);
+ clif->delitem(sd,i,1,3);
+ // --------------------------------------------------------------------
+ sd->status.inventory[i].refine = 0;
+ sd->status.inventory[i].attribute = 0;
+ sd->status.inventory[i].card[0] = CARD0_CREATE;
+ sd->status.inventory[i].card[1] = 0;
+ sd->status.inventory[i].card[2] = GetWord(battle_config.reserved_costume_id, 0);
+ sd->status.inventory[i].card[3] = GetWord(battle_config.reserved_costume_id, 1);
+
+ if( ep&EQP_HEAD_TOP ) { ep &= ~EQP_HEAD_TOP; ep |= EQP_COSTUME_HEAD_TOP; }
+ if( ep&EQP_HEAD_LOW ) { ep &= ~EQP_HEAD_LOW; ep |= EQP_COSTUME_HEAD_LOW; }
+ if( ep&EQP_HEAD_MID ) { ep &= ~EQP_HEAD_MID; ep |= EQP_COSTUME_HEAD_MID; }
+ // --------------------------------------------------------------------
+ logs->pick_pc(sd, LOG_TYPE_SCRIPT, 1, &sd->status.inventory[i],sd->inventory_data[i]);
+
+ clif->additem(sd,i,1,0);
+ pc->equipitem(sd,i,ep);
+ clif->misceffect(&sd->bl,3);
+
+ return true;
+}
+
// declarations that were supposed to be exported from npc_chat.c
#ifdef PCRE_SUPPORT
BUILDIN(defpattern);
@@ -18585,6 +18633,9 @@
BUILDIN_DEF(changequest, "ii"),
BUILDIN_DEF(showevent, "i?"),
+ // Costume System
+ BUILDIN_DEF(costume,"i"),
+
/**
* hQueue [Ind/Hercules]
**/