diff options
author | Andrei Karas <akaras@inbox.ru> | 2014-11-18 01:51:32 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2014-12-02 13:27:39 +0300 |
commit | 40a239fcdaa1c6669868f06136b62a95c183e68c (patch) | |
tree | 4cd261b49621a864fcb72723960ca2b24980bab9 /src/map | |
parent | 274aaebe2bad43a8196e3ff39ede344da8ce4d64 (diff) | |
download | hercules-40a239fcdaa1c6669868f06136b62a95c183e68c.tar.gz hercules-40a239fcdaa1c6669868f06136b62a95c183e68c.tar.bz2 hercules-40a239fcdaa1c6669868f06136b62a95c183e68c.tar.xz hercules-40a239fcdaa1c6669868f06136b62a95c183e68c.zip |
Add item attribute what prevent item removing on use.
New item attribute: KeepAfterUse
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/itemdb.c | 5 | ||||
-rw-r--r-- | src/map/itemdb.h | 1 | ||||
-rw-r--r-- | src/map/pc.c | 2 |
3 files changed, 6 insertions, 2 deletions
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 |