Index: src/common/mmo.h =================================================================== --- src/common/mmo.h 2011-12-27 22:09:51.727946899 +0500 +++ src/common/mmo.h 2011-12-28 15:29:55.193120002 +0500 @@ -178,6 +178,7 @@ IT_UNKNOWN2,//9 IT_AMMO, //10 IT_DELAYCONSUME,//11 + IT_CHARM,//12 IT_THROWWEAPON= 17,//17 IT_CASH = 18, IT_MAX Index: src/map/clif.c =================================================================== --- src/map/clif.c 2011-12-28 10:44:28.209120003 +0500 +++ src/map/clif.c 2011-12-28 15:39:13.405120002 +0500 @@ -60,7 +60,7 @@ //Converts item type in case of pet eggs. static inline int itemtype(int type) { - return ( type == IT_PETEGG ) ? IT_WEAPON : type; + return ( type == IT_PETEGG ) ? IT_WEAPON : ( type == IT_CHARM ) ? IT_ETC : type; } Index: src/map/pc.c =================================================================== --- src/map/pc.c 2011-12-26 10:23:31.255420000 +0500 +++ src/map/pc.c 2011-12-28 15:29:55.221120002 +0500 @@ -3457,6 +3457,7 @@ clif_updatestatus(sd,SP_WEIGHT); //Auto-equip if(data->flag.autoequip) pc_equipitem(sd, i, data->equip); + if(sd->inventory_data[i]->type == IT_CHARM) status_calc_pc(sd,0); return 0; } @@ -3465,6 +3466,7 @@ *------------------------------------------*/ int pc_delitem(struct map_session_data *sd,int n,int amount,int type, short reason) { + int mem=0; nullpo_retr(1, sd); if(sd->status.inventory[n].nameid==0 || amount <= 0 || sd->status.inventory[n].amountinventory_data[n] == NULL) @@ -3475,6 +3477,7 @@ if(sd->status.inventory[n].amount<=0){ if(sd->status.inventory[n].equip) pc_unequipitem(sd,n,3); + mem = sd->inventory_data[n]->type; memset(&sd->status.inventory[n],0,sizeof(sd->status.inventory[0])); sd->inventory_data[n] = NULL; } @@ -3483,6 +3486,8 @@ if(!(type&2)) clif_updatestatus(sd,SP_WEIGHT); + if(mem == IT_CHARM) status_calc_pc(sd,0); + return 0; } Index: src/map/status.c =================================================================== --- src/map/status.c 2011-12-26 10:23:31.247420000 +0500 +++ src/map/status.c 2011-12-28 15:29:55.225120002 +0500 @@ -2176,6 +2176,18 @@ pc_delautobonus(sd,sd->autobonus3,ARRAYLENGTH(sd->autobonus3),true); // Parse equipment. + for(i=0;iinventory_data[i]) + continue; + if(sd->inventory_data[i]->type == IT_CHARM){ + if(sd->inventory_data[i]->script && sd->inventory_data[i]->elv <=sd->status.base_level) { + if((!((1<<(sd->class_&MAPID_BASEMASK)) &(sd->inventory_data[i]->class_base[sd->class_&JOBL_2_1?1:(sd->class_&JOBL_2_2?2:0)]))) + || (!((1<<(sd->class_&JOBL_UPPER?1:(sd->class_&JOBL_BABY?2:0))) &sd->inventory_data[i]->class_upper))) continue; + run_script(sd->inventory_data[i]->script,0,sd->bl.id,0); + if (!calculating) //Abort, run_script retriggered this. [Skotlex] + return 1; + }}} + for(i=0;iequip_index[i]; //We pass INDEX to current_equip_item_index - for EQUIP_SCRIPT (new cards solution) [Lupus] if(index < 0)