summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt2
-rw-r--r--src/map/pc.c11
-rw-r--r--src/map/unit.c5
3 files changed, 11 insertions, 7 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 13f1dd811..63012b0c7 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.
2006/08/02
+ * Rewrote pc_payzeny to not use doubles, it may more accurately prevent
+ charging a player more zeny than they can withhold. [Skotlex]
* Fixed failing to create Deadly Poison Bottles damaging 50% of your max
life instead of 25% [Skotlex]
* Added the missing status-change flags to SC_FREEZE to signal it should
diff --git a/src/map/pc.c b/src/map/pc.c
index b312c796f..674b63973 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -2516,16 +2516,17 @@ int pc_inventoryblank(struct map_session_data *sd)
*/
int pc_payzeny(struct map_session_data *sd,int zeny)
{
- double z;
-
nullpo_retr(0, sd);
if(sd->state.finalsave)
return 1;
- z = (double)sd->status.zeny;
- if(sd->status.zeny<zeny || z - (double)zeny > MAX_ZENY)
- return 1;
+ if (zeny > 0 && sd->status.zeny < zeny)
+ return 1; //Not enough.
+
+ if (zeny < 0 && sd->status.zeny > MAX_ZENY +zeny)
+ return 1; //Overflow
+
sd->status.zeny-=zeny;
clif_updatestatus(sd,SP_ZENY);
diff --git a/src/map/unit.c b/src/map/unit.c
index e35a8005c..a230881fa 100644
--- a/src/map/unit.c
+++ b/src/map/unit.c
@@ -1724,9 +1724,10 @@ int unit_free(struct block_list *bl) {
}
} else if(bl->type == BL_MOB) {
struct mob_data *md = (struct mob_data*)bl;
- if(md->deletetimer!=-1)
+ if(md->deletetimer!=-1) {
delete_timer(md->deletetimer,mob_timer_delete);
- md->deletetimer=-1;
+ md->deletetimer=-1;
+ }
if(md->lootitem) {
aFree(md->lootitem);
md->lootitem=NULL;