From 40a239fcdaa1c6669868f06136b62a95c183e68c Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 18 Nov 2014 01:51:32 +0300 Subject: Add item attribute what prevent item removing on use. New item attribute: KeepAfterUse --- src/map/itemdb.c | 5 ++++- src/map/itemdb.h | 1 + src/map/pc.c | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/map/itemdb.c b/src/map/itemdb.c index 67aab7a18..508a0ccec 100644 --- a/src/map/itemdb.c +++ b/src/map/itemdb.c @@ -1787,9 +1787,12 @@ int itemdb_readdb_libconfig_sub(config_setting_t *it, int n, const char *source) if ( (t = libconfig->setting_get_member(it, "BuyingStore")) ) id.flag.buyingstore = libconfig->setting_get_bool(t) ? 1 : 0; + if ((t = libconfig->setting_get_member(it, "KeepAfterUse"))) + id.flag.keepafteruse = libconfig->setting_get_bool(t) ? 1 : 0; + if (libconfig->setting_lookup_int(it, "Delay", &i32) && i32 >= 0) id.delay = i32; - + if ( (t = libconfig->setting_get_member(it, "Trade")) ) { if (config_setting_is_group(t)) { config_setting_t *tt = NULL; diff --git a/src/map/itemdb.h b/src/map/itemdb.h index a1c4d1053..5504d72d9 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -414,6 +414,7 @@ struct item_data { unsigned autoequip: 1; unsigned buyingstore : 1; unsigned bindonequip : 1; + unsigned keepafteruse : 1; } flag; struct {// item stacking limitation unsigned short amount; diff --git a/src/map/pc.c b/src/map/pc.c index 6ba06c82b..9af5ee5ff 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -4519,7 +4519,7 @@ int pc_useitem(struct map_session_data *sd,int n) { if( sd->inventory_data[n]->flag.delay_consume ) clif->useitemack(sd,n,amount,true); else { - if( sd->status.inventory[n].expire_time == 0 ) { + if (sd->status.inventory[n].expire_time == 0 && !(sd->inventory_data[n]->flag.keepafteruse)) { clif->useitemack(sd,n,amount-1,true); pc->delitem(sd,n,1,1,0,LOG_TYPE_CONSUME); // Rental Usable Items are not deleted until expiration } else -- cgit v1.2.3-70-g09d2