diff --git a/src/map/atcommand.cpp b/src/map/atcommand.cpp index 4aa4e7235c..f46792ed76 100644 --- a/src/map/atcommand.cpp +++ b/src/map/atcommand.cpp @@ -8495,14 +8495,14 @@ ACMD_FUNC(cash) { // @points if( value > 0 ) { if( (ret=pc_getcash(sd, 0, value, LOG_TYPE_COMMAND)) >= 0){ - sprintf(output, msg_txt(sd,506), ret, sd->kafraPoints); // Gained %d kafra points. Total %d points. - clif_messagecolor(&sd->bl, color_table[COLOR_LIGHT_GREEN], output, false, SELF); + sprintf(output, msg_txt(sd,506), ret, sd->kafraPoints); // Gained %d kafra points. Total %d points. + clif_messagecolor(&sd->bl, color_table[COLOR_LIGHT_GREEN], output, false, SELF); } else clif_displaymessage(fd, msg_txt(sd,149)); // Impossible to increase the number/value. } else { - if( (ret=pc_paycash(sd, -value, -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); + 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); } else clif_displaymessage(fd, msg_txt(sd,41)); // Unable to decrease the number/value. } diff --git a/src/map/map.hpp b/src/map/map.hpp index ae90e4b6a7..7bacbaf52e 100644 --- a/src/map/map.hpp +++ b/src/map/map.hpp @@ -433,6 +433,8 @@ enum _sp { SP_ROULETTE_BRONZE = 128, SP_ROULETTE_SILVER = 129, SP_ROULETTE_GOLD = 130, + SP_CASHPOINTS, SP_KAFRAPOINTS, + SP_PCDIECOUNTER, SP_COOKMASTERY, // Mercenaries SP_MERCFLEE=165, SP_MERCKILLS=189, SP_MERCFAITH=190, diff --git a/src/map/pc.cpp b/src/map/pc.cpp index 73356c4d63..754c81bfa1 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -4470,12 +4470,15 @@ int pc_paycash(struct map_session_data *sd, int price, int points, e_log_pick_ty return -1; } - pc_setaccountreg(sd, add_str(CASHPOINT_VAR), sd->cashPoints-cash); if( cash ){ + pc_setaccountreg(sd, add_str(CASHPOINT_VAR), sd->cashPoints - cash); + sd->cashPoints -= cash; log_cash( sd, type, LOG_CASH_TYPE_CASH, -cash ); } - pc_setaccountreg(sd, add_str(KAFRAPOINT_VAR), sd->kafraPoints-points); + if( points ){ + pc_setaccountreg(sd, add_str(KAFRAPOINT_VAR), sd->kafraPoints - points); + sd->kafraPoints -= points; log_cash( sd, type, LOG_CASH_TYPE_KAFRA, -points ); } @@ -4514,9 +4517,8 @@ int pc_getcash(struct map_session_data *sd, int cash, int points, e_log_pick_typ } pc_setaccountreg(sd, add_str(CASHPOINT_VAR), sd->cashPoints+cash); - if( cash ){ - log_cash( sd, type, LOG_CASH_TYPE_CASH, cash ); - } + sd->cashPoints += cash; + log_cash( sd, type, LOG_CASH_TYPE_CASH, cash ); if( battle_config.cashshop_show_points ) { @@ -4540,9 +4542,8 @@ int pc_getcash(struct map_session_data *sd, int cash, int points, e_log_pick_typ } pc_setaccountreg(sd, add_str(KAFRAPOINT_VAR), sd->kafraPoints+points); - if( points ){ - log_cash( sd, type, LOG_CASH_TYPE_KAFRA, points ); - } + sd->kafraPoints += points; + log_cash( sd, type, LOG_CASH_TYPE_KAFRA, points ); if( battle_config.cashshop_show_points ) { @@ -8093,9 +8094,13 @@ int pc_readparam(struct map_session_data* sd,int type) case SP_CHARRENAME: val = sd->status.rename; break; case SP_CHARFONT: val = sd->status.font; break; case SP_BANK_VAULT: val = sd->bank_vault; break; + case SP_CASHPOINTS: val = sd->cashPoints; break; + case SP_KAFRAPOINTS: val = sd->kafraPoints; break; case SP_ROULETTE_BRONZE: val = sd->roulette_point.bronze; break; case SP_ROULETTE_SILVER: val = sd->roulette_point.silver; break; case SP_ROULETTE_GOLD: val = sd->roulette_point.gold; break; + case SP_PCDIECOUNTER: val = sd->die_counter; break; + case SP_COOKMASTERY: val = sd->cook_mastery; break; case SP_CRITICAL: val = sd->battle_status.cri/10; break; case SP_ASPD: val = (2000-sd->battle_status.amotion)/10; break; case SP_BASE_ATK: val = sd->battle_status.batk; break; @@ -8380,6 +8385,41 @@ bool pc_setparam(struct map_session_data *sd,int type,int val) sd->roulette_point.gold = val; pc_setreg2(sd, ROULETTE_GOLD_VAR, sd->roulette_point.gold); return true; + case SP_CASHPOINTS: + if (val < 0) + return false; + if (!sd->state.connect_new) + log_cash(sd, LOG_TYPE_SCRIPT, LOG_CASH_TYPE_CASH, -(sd->cashPoints - cap_value(val, 0, MAX_ZENY))); + sd->cashPoints = cap_value(val, 0, MAX_ZENY); + pc_setaccountreg(sd, add_str(CASHPOINT_VAR), sd->cashPoints); + return true; + case SP_KAFRAPOINTS: + if (val < 0) + return false; + if (!sd->state.connect_new) + log_cash(sd, LOG_TYPE_SCRIPT, LOG_CASH_TYPE_KAFRA, -(sd->kafraPoints - cap_value(val, 0, MAX_ZENY))); + sd->kafraPoints = cap_value(val, 0, MAX_ZENY); + pc_setaccountreg(sd, add_str(KAFRAPOINT_VAR), sd->kafraPoints); + return true; + case SP_PCDIECOUNTER: + if (val < 0) + return false; + if (sd->die_counter == val) + return true; + sd->die_counter = val; + if (!sd->die_counter && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE) + status_calc_pc(sd, SCO_NONE); // Lost the bonus. + pc_setglobalreg(sd, add_str(PCDIECOUNTER_VAR), sd->die_counter); + return true; + case SP_COOKMASTERY: + if (val < 0) + return false; + if (sd->cook_mastery == val) + return true; + val = cap_value(val, 0, 1999); + sd->cook_mastery = val; + pc_setglobalreg(sd, add_str(COOKMASTERY_VAR), sd->cook_mastery); + return true; default: ShowError("pc_setparam: Attempted to set unknown parameter '%d'.\n", type); return false; @@ -9234,30 +9274,6 @@ int pc_setregistry(struct map_session_data *sd, int64 reg, int val) struct script_reg_num *p = NULL; const char *regname = get_str(script_getvarid(reg)); unsigned int index = script_getvaridx(reg); - - // These should be stored elsewhere e.g. char ones in char table, the cash ones in account_data table! - switch( regname[0] ) { - default: //Char reg - if( !strcmp(regname,PCDIECOUNTER_VAR) && sd->die_counter != val ) { - int i = (!sd->die_counter && (sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE); - sd->die_counter = val; - if( i ) - status_calc_pc(sd,SCO_NONE); // Lost the bonus. - } else if( !strcmp(regname,COOKMASTERY_VAR) && sd->cook_mastery != val ) { - val = cap_value(val, 0, 1999); - sd->cook_mastery = val; - } - break; - case '#': - if( !strcmp(regname,CASHPOINT_VAR) && sd->cashPoints != val ) { - val = cap_value(val, 0, MAX_ZENY); - sd->cashPoints = val; - } else if( !strcmp(regname,KAFRAPOINT_VAR) && sd->kafraPoints != val ) { - val = cap_value(val, 0, MAX_ZENY); - sd->kafraPoints = val; - } - break; - } if ( !reg_load && !sd->vars_ok ) { ShowError("pc_setregistry : refusing to set %s until vars are received.\n", regname); diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 959376795e..c23254cdcd 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -514,6 +514,10 @@ export_parameter(ROULETTE_BRONZE_VAR,SP_ROULETTE_BRONZE); export_parameter(ROULETTE_SILVER_VAR,SP_ROULETTE_SILVER); export_parameter(ROULETTE_GOLD_VAR,SP_ROULETTE_GOLD); + export_parameter(CASHPOINT_VAR, SP_CASHPOINTS); + export_parameter(KAFRAPOINT_VAR, SP_KAFRAPOINTS); + export_parameter(PCDIECOUNTER_VAR, SP_PCDIECOUNTER); + export_parameter(COOKMASTERY_VAR, SP_COOKMASTERY); export_constant2("bMaxHP",SP_MAXHP); export_constant2("bMaxSP",SP_MAXSP);