From a609245253626fd1d8112d4b05959471723b7d8f Mon Sep 17 00:00:00 2001 From: Inkfish Date: Thu, 7 May 2009 10:38:00 +0000 Subject: * Added check on stackable items to 'checkweight' (bugreport:1569, bugreport:2756, bugreport 2994) [Inkfish] * Fixed flee penalty wasn't applied for battleground and wouldn't be restored on map change [Inkfish] git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13735 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 2 ++ src/map/clif.c | 9 ++++----- src/map/script.c | 25 ++++++++++++++----------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 0d9491339..dacb7f899 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2009/05/07 + * Added check on stackable items to 'checkweight' (bugreport:1569, bugreport:2756, bugreport 2994) [Inkfish] + * Fixed flee penalty wasn't applied for battleground and wouldn't be restored on map change [Inkfish] * Fixed players can pull water from ME cell (follow up to r13730) [Inkfish] 2009/05/04 * Added the md5() script command. [brianluau] diff --git a/src/map/clif.c b/src/map/clif.c index 7ced02555..1446755db 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -6890,7 +6890,7 @@ void clif_wedding_effect(struct block_list *bl) clif_send(buf, packet_len(0x1ea), bl, AREA); } /*========================================== - * ‚ ‚È‚½‚Ɉ§‚¢‚½‚¢Žg—pŽž–¼‘O‹©‚Ñ + * ?‚È‚½‚Ɉ§‚¢‚½‚¢Žg—pŽž–¼‘O‹©‚Ñ *------------------------------------------ void clif_callpartner(struct map_session_data *sd) @@ -8012,11 +8012,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) } if( map_flag_gvg(sd->bl.m) ) - { clif_set0199(sd,3); - if( battle_config.gvg_flee_penalty != 100 || battle_config.bg_flee_penalty != 100 ) - status_calc_bl(&sd->bl, SCB_FLEE); //Apply flee penalty - } // info about nearby objects // must use foreachinarea (CIRCULAR_AREA interferes with foreachinrange) @@ -8129,6 +8125,9 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) if( sd->state.changemap ) {// restore information that gets lost on map-change + if( battle_config.gvg_flee_penalty != 100 || battle_config.bg_flee_penalty != 100 ) + status_calc_bl(&sd->bl, SCB_FLEE); //Refresh flee penalty + if( night_flag && map[sd->bl.m].flag.nightenabled ) { //Display night. if( !sd->state.night ) diff --git a/src/map/script.c b/src/map/script.c index a29b08423..6fb3d662c 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -5104,18 +5104,21 @@ BUILDIN_FUNC(checkweight) } weight = itemdb_weight(nameid)*amount; - if(amount > MAX_AMOUNT || weight + sd->weight > sd->max_weight){ + if( amount > MAX_AMOUNT || weight + sd->weight > sd->max_weight ) script_pushint(st,0); - } else { - //Check if the inventory ain't full. - //TODO: Currently does not checks if you can just stack it on top of another item you already have.... - - i = pc_search_inventory(sd,0); - if (i >= 0) //Empty slot available. - script_pushint(st,1); - else //Inventory full - script_pushint(st,0); - + else if( itemdb_isstackable(nameid) ) + { + if( (i = pc_search_inventory(sd,nameid)) >= 0 ) + script_pushint(st,amount + sd->status.inventory[i].amount > MAX_AMOUNT ? 0 : 1); + else + script_pushint(st,pc_search_inventory(sd,0) >= 0 ? 1 : 0); + } + else + { + for( i = 0; i < MAX_INVENTORY && amount; ++i ) + if( sd->status.inventory[i].nameid == 0 ) + amount--; + script_pushint(st,amount ? 0 : 1); } return 0; -- cgit v1.2.3-70-g09d2