diff options
author | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-02-19 21:13:00 +0000 |
---|---|---|
committer | skotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2006-02-19 21:13:00 +0000 |
commit | c071261e8ac92dff5f47969386da189407c8346d (patch) | |
tree | 07ae19a5d282891656a0df4c5f2ec63318dc902e /src/map | |
parent | 9597a0e6b9d232ae73acf3a3f6c9e93953188659 (diff) | |
download | hercules-c071261e8ac92dff5f47969386da189407c8346d.tar.gz hercules-c071261e8ac92dff5f47969386da189407c8346d.tar.bz2 hercules-c071261e8ac92dff5f47969386da189407c8346d.tar.xz hercules-c071261e8ac92dff5f47969386da189407c8346d.zip |
- Added sd->canuseitem_tick = tick to the pc_authok initializer data. Fixes items not being usable under some circumstances.
- Removed the empty ack packets from pc_useitem, it is now invoked from clif.c when the function to use items fails.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@5329 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/clif.c | 3 | ||||
-rw-r--r-- | src/map/pc.c | 25 |
2 files changed, 13 insertions, 15 deletions
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;
}
/*==========================================
|