diff options
-rw-r--r-- | Changelog-Trunk.txt | 2 | ||||
-rw-r--r-- | src/map/clif.c | 3 | ||||
-rw-r--r-- | src/map/pc.c | 25 |
3 files changed, 15 insertions, 15 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 4793f6492..9a2740376 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -5,6 +5,8 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. EV GOES INTO TRUNK AND WILL BE MERGED INTO STABLE BY VALARIS AND WIZPUTER. -- VALARIS
2006/02/19
+ * Some fixes to the last item usage tick. Items should be working fine now.
+ [Skotlex]
* Fixed parsing of @kamic/@kamib to check for case. [Skotlex]
* Now you can hide from Pressure. [Skotlex]
* Weapon endowing will work on targets already endowed with the same
diff --git a/src/map/clif.c b/src/map/clif.c index 6b9f2d71b..e0f65155a 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -9622,7 +9622,8 @@ void clif_parse_UseItem(int fd, struct map_session_data *sd) { //Whether the item is used or not is irrelevant, the char ain't idle. [Skotlex]
sd->idletime = last_tick;
- pc_useitem(sd,RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])-2);
+ if (!pc_useitem(sd,RFIFOW(fd,packet_db[sd->packet_ver][RFIFOW(fd,0)].pos[0])-2))
+ clif_useitemack(sd,n,0,0); //Send an empty ack packet or the client gets stuck.
}
/*==========================================
diff --git a/src/map/pc.c b/src/map/pc.c index 48f2977ad..2730baa79 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -740,7 +740,8 @@ int pc_authok(struct map_session_data *sd, int login_id2, time_t connect_until_t sd->canmove_tick = tick;
sd->canregen_tick = tick;
sd->attackabletime = tick;
-
+ sd->canuseitem_tick = tick;
+
for(i = 0; i < MAX_SKILL_LEVEL; i++)
sd->spirit_timer[i] = -1;
for(i = 0; i < MAX_SKILLTIMERSKILL; i++)
@@ -2811,24 +2812,22 @@ int pc_useitem(struct map_session_data *sd,int n) int amount;
unsigned char *script;
- nullpo_retr(1, sd);
+ nullpo_retr(0, sd);
if(n <0 || n >= MAX_INVENTORY)
return 0;
- if(!pc_isUseitem(sd,n)) {
- clif_useitemack(sd,n,0,0);
- return 1;
- }
-
if(sd->status.inventory[n].nameid <= 0 ||
sd->status.inventory[n].amount <= 0)
- return 1;
+ return 0;
+
+ if(!pc_isUseitem(sd,n))
+ return 0;
//Prevent mass item usage. [Skotlex]
if (battle_config.item_use_interval &&
DIFF_TICK(sd->canuseitem_tick, gettick()) > 0)
- return 1;
+ return 0;
if (sd->sc.count && (
sd->sc.data[SC_BERSERK].timer!=-1 ||
@@ -2836,10 +2835,8 @@ int pc_useitem(struct map_session_data *sd,int n) sd->sc.data[SC_GRAVITATION].timer!=-1 ||
//Cannot use Potions/Healing items while under Gospel.
(sd->sc.data[SC_GOSPEL].timer!=-1 && sd->sc.data[SC_GOSPEL].val4 != BCT_SELF && sd->inventory_data[n]->type == 0)
- )) {
- clif_useitemack(sd,n,0,0);
- return 1;
- }
+ ))
+ return 0;
sd->itemid = sd->status.inventory[n].nameid;
sd->itemindex = n;
@@ -2867,7 +2864,7 @@ int pc_useitem(struct map_session_data *sd,int n) sd->canuseitem_tick= gettick() + battle_config.item_use_interval; //Update item use time.
run_script(script,0,sd->bl.id,0);
potion_flag = 0;
- return 0;
+ return 1;
}
/*==========================================
|