From 6c1d1a84d2a362c55a642bc62f3de601047d5f2d Mon Sep 17 00:00:00 2001 From: Daegaladh Date: Sun, 20 Jan 2019 22:42:44 +0100 Subject: [PATCH] Fixed points command using negative numbers (#3867) --- src/map/atcommand.cpp | 2 ++ src/map/pc.cpp | 42 +++++++++++------------------------------- 2 files changed, 13 insertions(+), 31 deletions(-) diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index 493fa197ba..8bed1a91c2 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -8490,6 +8490,8 @@ ACMD_FUNC(cash) } else clif_displaymessage(fd, msg_txt(sd,149)); // Impossible to increase the number/value. } else { + if (-value > sd->kafraPoints) //By command, if cash < value, force it to remove all + value = -sd->kafraPoints; if( (ret=pc_paycash(sd, 0, -value, LOG_TYPE_COMMAND)) >= 0){ sprintf(output, msg_txt(sd,411), ret, sd->kafraPoints); // Removed %d kafra points. Total %d points. clif_messagecolor(&sd->bl, color_table[COLOR_LIGHT_GREEN], output, false, SELF); diff --git a/src/map/pc.cpp b/src/map/pc.cpp index a43eac8ac3..85937801a7 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -4393,28 +4393,17 @@ char pc_getzeny(struct map_session_data *sd, int zeny, enum e_log_pick_type type /** * Attempts to remove Cash Points from player * @param sd: Player - * @param price: Points player has to pay - * @param points: Points player has + * @param price: Total points (cash + kafra) the player has to pay + * @param points: Kafra points the player has to pay * @param type: Log type - * @return -2: Paying negative points, -1: Not enough points, otherwise success (cash+points) + * @return -1: Not enough points, otherwise success (cash+points) */ int pc_paycash(struct map_session_data *sd, int price, int points, e_log_pick_type type) { int cash; nullpo_retr(-1,sd); - points = cap_value(points,-MAX_ZENY,MAX_ZENY); //prevent command UB - if( price < 0 || points < 0 ) - { - ShowError("pc_paycash: Paying negative points (price=%d, points=%d, account_id=%d, char_id=%d).\n", price, points, sd->status.account_id, sd->status.char_id); - return -2; - } - - if( points > price ) - { - ShowWarning("pc_paycash: More kafra points provided than needed (price=%d, points=%d, account_id=%d, char_id=%d).\n", price, points, sd->status.account_id, sd->status.char_id); - points = price; - } + points = cap_value(points, 0, MAX_ZENY); //prevent command UB cash = price-points; @@ -4449,10 +4438,10 @@ int pc_paycash(struct map_session_data *sd, int price, int points, e_log_pick_ty /** * Attempts to give Cash Points to player * @param sd: Player - * @param cash: Cash player gets - * @param points: Points player has + * @param cash: Cash points the player gets + * @param points: Kafra points the player gets * @param type: Log type - * @return -2: Error, -1: Giving negative cash/points, otherwise success (cash or points) + * @return -1: Error, otherwise success (cash or points) */ int pc_getcash(struct map_session_data *sd, int cash, int points, e_log_pick_type type) { @@ -4460,8 +4449,8 @@ int pc_getcash(struct map_session_data *sd, int cash, int points, e_log_pick_typ nullpo_retr(-1,sd); - cash = cap_value(cash,-MAX_ZENY,MAX_ZENY); //prevent command UB - points = cap_value(points,-MAX_ZENY,MAX_ZENY); //prevent command UB + cash = cap_value(cash, 0, MAX_ZENY); //prevent command UB + points = cap_value(points, 0, MAX_ZENY); //prevent command UB if( cash > 0 ) { if( cash > MAX_ZENY-sd->cashPoints ) @@ -4481,11 +4470,6 @@ int pc_getcash(struct map_session_data *sd, int cash, int points, e_log_pick_typ } return cash; } - else if( cash < 0 ) - { - ShowError("pc_getcash: Obtaining negative cash points (cash=%d, account_id=%d, char_id=%d).\n", cash, sd->status.account_id, sd->status.char_id); - return -1; - } if( points > 0 ) { @@ -4506,12 +4490,8 @@ int pc_getcash(struct map_session_data *sd, int cash, int points, e_log_pick_typ } return points; } - else if( points < 0 ) - { - ShowError("pc_getcash: Obtaining negative kafra points (points=%d, account_id=%d, char_id=%d).\n", points, sd->status.account_id, sd->status.char_id); - return -1; - } - return -2; //shouldn't happen but just in case + + return -1; //shouldn't happen but just in case } /**