Fixed logging of #CASHPOINTS and #KAFRAPOINTS (#3252)

* Fixes #2169
* #CASHPOINTS and #KAFRAPOINTS now will be logged correctly when used by scripting
* Fixed a bug where points removed cash as well
* Small cleanup for pc_paycash and pc_getcash
* Thanks to @Lemongrass3110, @ecdarreola
This commit is contained in:
Cydh Ramdh 2018-07-02 13:21:41 +07:00 committed by GitHub
parent b3a51eaa35
commit ce9cbd2e65
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 59 additions and 37 deletions

View File

@ -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.
}

View File

@ -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,

View File

@ -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);

View File

@ -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);