summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/itemdb.c3
-rw-r--r--src/map/pc.c56
2 files changed, 21 insertions, 38 deletions
diff --git a/src/map/itemdb.c b/src/map/itemdb.c
index 92fe757c8..e8afebdfe 100644
--- a/src/map/itemdb.c
+++ b/src/map/itemdb.c
@@ -703,6 +703,7 @@ static bool itemdb_read_stack(char* fields[], int columns, int current)
return true;
}
+
/// Reads items allowed to be sold in buying stores
static bool itemdb_read_buyingstore(char* fields[], int columns, int current)
{// <nameid>
@@ -1045,8 +1046,8 @@ static void itemdb_read(void)
sv_readdb(db_path, "item_noequip.txt", ',', 2, 2, -1, &itemdb_read_noequip);
sv_readdb(db_path, "item_trade.txt", ',', 3, 3, -1, &itemdb_read_itemtrade);
sv_readdb(db_path, "item_delay.txt", ',', 2, 2, MAX_ITEMDELAYS, &itemdb_read_itemdelay);
- sv_readdb(db_path, "item_buyingstore.txt", ',', 1, 1, -1, &itemdb_read_buyingstore);
sv_readdb(db_path, "item_stack.txt", ',', 3, 3, -1, &itemdb_read_stack);
+ sv_readdb(db_path, "item_buyingstore.txt", ',', 1, 1, -1, &itemdb_read_buyingstore);
}
/*==========================================
diff --git a/src/map/pc.c b/src/map/pc.c
index ffbd2d3cf..4b2d4511e 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -7372,55 +7372,38 @@ int pc_unequipitem(struct map_session_data *sd,int n,int flag)
*------------------------------------------*/
int pc_checkitem(struct map_session_data *sd)
{
- int i,j,k,id,calc_flag = 0;
+ int i,id,calc_flag = 0;
struct item_data *it=NULL;
nullpo_ret(sd);
if( sd->vender_id ) //Avoid reorganizing items when we are vending, as that leads to exploits (pointed out by End of Exam)
return 0;
-
- for( i = j = 0; i < MAX_INVENTORY; i++ )
- {
- if( (id = sd->status.inventory[i].nameid) == 0 )
- continue;
- if( battle_config.item_check && !itemdb_available(id) )
- {
- ShowWarning("illegal item id %d in %d[%s] inventory.\n",id,sd->bl.id,sd->status.name);
- pc_delitem(sd,i,sd->status.inventory[i].amount,3,0);
- continue;
- }
- if( i > j )
+ if( battle_config.item_check )
+ {// check for invalid(ated) items
+ for( i = 0; i < MAX_INVENTORY; i++ )
{
- memcpy(&sd->status.inventory[j], &sd->status.inventory[i], sizeof(struct item));
- sd->inventory_data[j] = sd->inventory_data[i];
- }
- j++;
- }
-
- if( j < MAX_INVENTORY )
- memset(&sd->status.inventory[j], 0, sizeof(struct item)*(MAX_INVENTORY-j));
- for( k = j ; k < MAX_INVENTORY; k++ )
- sd->inventory_data[k] = NULL;
+ id = sd->status.inventory[i].nameid;
- for( i = j = 0; i < MAX_CART; i++ )
- {
- if( (id=sd->status.cart[i].nameid) == 0 )
- continue;
- if( battle_config.item_check && !itemdb_available(id) ){
- ShowWarning("illegal item id %d in %d[%s] cart.\n",id,sd->bl.id,sd->status.name);
- pc_cart_delitem(sd,i,sd->status.cart[i].amount,1);
- continue;
+ if( id && !itemdb_available(id) )
+ {
+ ShowWarning("Removed invalid/disabled item id %d from inventory (amount=%d, char_id=%d).\n", id, sd->status.inventory[i].amount, sd->status.char_id);
+ pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0);
+ }
}
- if( i > j )
+
+ for( i = 0; i < MAX_CART; i++ )
{
- memcpy(&sd->status.cart[j],&sd->status.cart[i],sizeof(struct item));
+ id = sd->status.cart[i].nameid;
+
+ if( id && !itemdb_available(id) )
+ {
+ ShowWarning("Removed invalid/disabled item id %d from cart (amount=%d, char_id=%d).\n", id, sd->status.cart[i].amount, sd->status.char_id);
+ pc_cart_delitem(sd, i, sd->status.cart[i].amount, 0);
+ }
}
- j++;
}
- if( j < MAX_CART )
- memset(&sd->status.cart[j],0,sizeof(struct item)*(MAX_CART-j));
for( i = 0; i < MAX_INVENTORY; i++)
{
@@ -7453,7 +7436,6 @@ int pc_checkitem(struct map_session_data *sd)
}
}
- pc_setequipindex(sd);
if( calc_flag && sd->state.active )
{
pc_checkallowskill(sd);