From d1a957efeac9d1d56d812c4bc2cf89191b36a223 Mon Sep 17 00:00:00 2001 From: aleos89 Date: Thu, 28 Jul 2016 19:28:36 -0400 Subject: [PATCH] Cleaned up parts of the VIP System * Removed battle configs vip_exp_penalty_base_normal and vip_exp_penalty_job_normal as these are duplicates of other battle configs. * Battle config vip_exp_penalty_base and vip_exp_penalty_job are now at a rate of 100 instead of 1 to match other configs. * Added VIP Zeny Penalty config. * Cleaned up various rate calculations. * Removed various macro defines that aren't needed. * Moved the player state for atcommand showrate to the VIP struct. --- conf/battle/player.conf | 17 ++++++++--------- src/map/atcommand.c | 41 ++++++++++++----------------------------- src/map/battle.c | 3 +-- src/map/battle.h | 3 +-- src/map/clif.c | 12 +++++------- src/map/mob.c | 5 +---- src/map/pc.c | 40 +++++++++++++++++----------------------- src/map/pc.h | 2 +- 8 files changed, 46 insertions(+), 77 deletions(-) diff --git a/conf/battle/player.conf b/conf/battle/player.conf index da819c378c..9e7ffbe78a 100644 --- a/conf/battle/player.conf +++ b/conf/battle/player.conf @@ -180,17 +180,16 @@ vip_base_exp_increase: 50 // Default: 50 vip_job_exp_increase: 50 -// Experience penalty rate multiplier for non-VIP accounts. -// Multiplies the 'death_penalty_base' and 'death_penalty_job' settings in 'conf/battle/exp.conf'. -// Default: 3 (3*100 = 3% penalty) -vip_exp_penalty_base_normal: 3 -vip_exp_penalty_job_normal: 3 - // Experience penalty rate multiplier for VIP accounts. // Multiplies the 'death_penalty_base' and 'death_penalty_job' settings in 'conf/battle/exp.conf'. -// Default: 1 (1*100 = 1% penalty) -vip_exp_penalty_base: 1 -vip_exp_penalty_job: 1 +// Default: 100 (100 = 1% penalty) +vip_exp_penalty_base: 100 +vip_exp_penalty_job: 100 + +// Zeny penalty for VIP accounts. +// Zeny loss only happens if the player dies from another player. +// Default: 0 (100 = 1% penalty) +vip_zeny_penalty: 0 // Battle Manual experience increase. Setting to 0 will disable. // - Regular/Thick Battle Manual: 50+(50/X) = 75% diff --git a/src/map/atcommand.c b/src/map/atcommand.c index ccf052a4d5..9c1f8ecc2d 100644 --- a/src/map/atcommand.c +++ b/src/map/atcommand.c @@ -7081,18 +7081,15 @@ ACMD_FUNC(mobinfo) base_exp = mob->base_exp; job_exp = mob->job_exp; + if (pc_isvip(sd)) { // Display EXP rate increase for VIP + base_exp = (base_exp * battle_config.vip_base_exp_increase) / 100; + job_exp = (job_exp * battle_config.vip_job_exp_increase) / 100; + } #ifdef RENEWAL_EXP if( battle_config.atcommand_mobinfo_type ) { base_exp = base_exp * pc_level_penalty_mod(mob->lv - sd->status.base_level, mob->status.class_, mob->status.mode, 1) / 100; job_exp = job_exp * pc_level_penalty_mod(mob->lv - sd->status.base_level, mob->status.class_, mob->status.mode, 1) / 100; } -#endif -#ifdef VIP_ENABLE - // Display EXP rate increase for VIP. - if (pc_isvip(sd) && (battle_config.vip_base_exp_increase || battle_config.vip_job_exp_increase)) { - base_exp += battle_config.vip_base_exp_increase; - job_exp += battle_config.vip_job_exp_increase; - } #endif // stats if (mob->mexp) @@ -7129,11 +7126,8 @@ ACMD_FUNC(mobinfo) droprate = 1; } #endif -#ifdef VIP_ENABLE - // Display item rate increase for VIP. - if (pc_isvip(sd) && battle_config.vip_drop_increase) + if (pc_isvip(sd)) // Display drop rate increase for VIP droprate += (droprate * battle_config.vip_drop_increase) / 100; -#endif if (item_data->slot) sprintf(atcmd_output2, " - %s[%d] %02.02f%%", item_data->jname, item_data->slot, (float)droprate / 100); else @@ -7668,11 +7662,8 @@ ACMD_FUNC(whodrops) if( battle_config.atcommand_mobinfo_type ) dropchance = dropchance * pc_level_penalty_mod(mob_db(item_data->mob[j].id)->lv - sd->status.base_level, mob_db(item_data->mob[j].id)->status.class_, mob_db(item_data->mob[j].id)->status.mode, 2) / 100; #endif -#ifdef VIP_ENABLE - // Display item rate increase for VIP. - if (pc_isvip(sd) && battle_config.vip_drop_increase) + if (pc_isvip(sd)) // Display item rate increase for VIP dropchance += (dropchance * battle_config.vip_drop_increase) / 100; -#endif sprintf(atcmd_output, "- %s (%d): %02.02f%%", mob_db(item_data->mob[j].id)->jname, item_data->mob[j].id, dropchance/100.); clif_displaymessage(fd, atcmd_output); } @@ -7787,16 +7778,9 @@ ACMD_FUNC(rates) nullpo_ret(sd); memset(buf, '\0', sizeof(buf)); -#ifdef VIP_ENABLE - // Display EXP and item rate increase for VIP. - if (pc_isvip(sd) && (battle_config.vip_base_exp_increase || battle_config.vip_job_exp_increase || battle_config.vip_drop_increase)) { - base_exp_rate += battle_config.vip_base_exp_increase; - job_exp_rate += battle_config.vip_job_exp_increase; - } -#endif - snprintf(buf, CHAT_SIZE_MAX, msg_txt(sd,1298), // Experience rates: Base %.2fx / Job %.2fx - (battle_config.base_exp_rate+base_exp_rate)/100., (battle_config.job_exp_rate+job_exp_rate)/100.); + (battle_config.base_exp_rate + (pc_isvip(sd) ? (battle_config.vip_base_exp_increase * battle_config.base_exp_rate) / 100 : 0)) / 100., + (battle_config.job_exp_rate + (pc_isvip(sd) ? (battle_config.vip_job_exp_increase * battle_config.job_exp_rate) / 100 : 0)) / 100.); clif_displaymessage(fd, buf); snprintf(buf, CHAT_SIZE_MAX, msg_txt(sd,1299), // Normal Drop Rates: Common %.2fx / Healing %.2fx / Usable %.2fx / Equipment %.2fx / Card %.2fx (battle_config.item_rate_common + (pc_isvip(sd) ? (battle_config.vip_drop_increase * battle_config.item_rate_common) / 100 : 0)) / 100., @@ -9538,13 +9522,12 @@ ACMD_FUNC(vip) { /** Enable/disable rate info */ ACMD_FUNC(showrate) { nullpo_retr(-1,sd); - if (!sd->disableshowrate) { + if (!sd->vip.disableshowrate) { sprintf(atcmd_output,msg_txt(sd,718)); //Personal rate information is not displayed now. - sd->disableshowrate = 1; - } - else { + sd->vip.disableshowrate = 1; + } else { sprintf(atcmd_output,msg_txt(sd,719)); //Personal rate information will be shown. - sd->disableshowrate = 0; + sd->vip.disableshowrate = 0; } clif_displaymessage(fd,atcmd_output); return 0; diff --git a/src/map/battle.c b/src/map/battle.c index 7a1da0ab1f..bdd83f34a1 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -8253,10 +8253,9 @@ static const struct _battle_data { #endif { "vip_base_exp_increase", &battle_config.vip_base_exp_increase, 0, 0, INT_MAX, }, { "vip_job_exp_increase", &battle_config.vip_job_exp_increase, 0, 0, INT_MAX, }, - { "vip_exp_penalty_base_normal", &battle_config.vip_exp_penalty_base_normal, 0, 0, INT_MAX, }, - { "vip_exp_penalty_job_normal", &battle_config.vip_exp_penalty_job_normal, 0, 0, INT_MAX, }, { "vip_exp_penalty_base", &battle_config.vip_exp_penalty_base, 0, 0, INT_MAX, }, { "vip_exp_penalty_job", &battle_config.vip_exp_penalty_job, 0, 0, INT_MAX, }, + { "vip_zeny_penalty", &battle_config.vip_zeny_penalty, 0, 0, INT_MAX, }, { "vip_bm_increase", &battle_config.vip_bm_increase, 0, 0, INT_MAX, }, { "vip_drop_increase", &battle_config.vip_drop_increase, 0, 0, INT_MAX, }, { "vip_gemstone", &battle_config.vip_gemstone, 0, 0, 1, }, diff --git a/src/map/battle.h b/src/map/battle.h index 25a293cfa9..2618ed5586 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -533,12 +533,11 @@ extern struct Battle_Config int vip_storage_increase; int vip_base_exp_increase; int vip_job_exp_increase; + int vip_zeny_penalty; int vip_bm_increase; int vip_drop_increase; int vip_gemstone; - int vip_exp_penalty_base_normal; int vip_exp_penalty_base; - int vip_exp_penalty_job_normal; int vip_exp_penalty_job; int vip_disp_rate; int mon_trans_disable_in_gvg; diff --git a/src/map/clif.c b/src/map/clif.c index 12f21eca8a..fb39d8ab46 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -10289,7 +10289,7 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd) clif_equipcheckbox(sd); #endif #ifdef VIP_ENABLE - if (!sd->disableshowrate) { + if (!sd->vip.disableshowrate) { clif_display_pinfo(sd,ZC_PERSONAL_INFOMATION); //clif_vip_display_info(sd,ZC_PERSONAL_INFOMATION_CHN); } @@ -17829,14 +17829,13 @@ void clif_display_pinfo(struct map_session_data *sd, int cmdtype) { int details_bexp[PINFO_MAX]; int details_drop[PINFO_MAX]; int details_penalty[PINFO_MAX]; - int penalty_const; /** * Set for EXP */ //0:PCRoom details_bexp[0] = map[sd->bl.m].adjust.bexp; - if (details_bexp[0] == 100 || details_bexp[0] == 0) + if (details_bexp[0] == 100 || !details_bexp[0]) details_bexp[0] = 0; else { if (details_bexp[0] < 100) { @@ -17902,13 +17901,12 @@ void clif_display_pinfo(struct map_session_data *sd, int cmdtype) { /** * Set for Penalty rate */ - //! FIXME: Current penalty system, makes this announcement hardly to gives info + or - rate - penalty_const = battle_config.death_penalty_base * battle_config.vip_exp_penalty_base_normal; + //! FIXME: Current penalty system makes this announcement unable to give info on + or - rate //0:PCRoom details_penalty[0] = 0; //1:Premium if (pc_isvip(sd)) { - details_penalty[1] = battle_config.vip_exp_penalty_base * 10000 / penalty_const; + details_penalty[1] = battle_config.vip_exp_penalty_base; if (details_penalty[1] == 100) details_penalty[1] = 0; else { @@ -17923,7 +17921,7 @@ void clif_display_pinfo(struct map_session_data *sd, int cmdtype) { else details_penalty[1] = 0; //2:Server - details_penalty[2] = battle_config.vip_exp_penalty_base_normal * 10000 / penalty_const; + details_penalty[2] = battle_config.death_penalty_base; if (details_penalty[2] == 100) details_penalty[2] = 0; else { diff --git a/src/map/mob.c b/src/map/mob.c index beae9af4bb..5500dfb963 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2578,13 +2578,10 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) // Now rig the drop rate to never be over 90% unless it is originally >90%. drop_rate = i32max(drop_rate, cap_value(drop_rate_bonus, 0, 9000)); -#ifdef VIP_ENABLE - // Increase item drop rate for VIP. - if (battle_config.vip_drop_increase && pc_isvip(sd)) { + if (pc_isvip(sd)) { // Increase item drop rate for VIP. drop_rate += (int)(0.5 + (drop_rate * battle_config.vip_drop_increase) / 100); drop_rate = min(drop_rate,10000); //cap it to 100% } -#endif } #ifdef RENEWAL_DROP diff --git a/src/map/pc.c b/src/map/pc.c index afaee32ca8..1f338389c4 100755 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -1145,7 +1145,7 @@ bool pc_authok(struct map_session_data *sd, uint32 login_id2, time_t expiration_ sd->state.showzeny = 1; #ifdef VIP_ENABLE if (!battle_config.vip_disp_rate) - sd->disableshowrate = 1; + sd->vip.disableshowrate = 1; #endif if (!(battle_config.display_skill_fail&2)) @@ -1438,7 +1438,7 @@ void pc_reg_received(struct map_session_data *sd) #ifdef VIP_ENABLE sd->vip.time = 0; sd->vip.enabled = 0; - chrif_req_login_operation(sd->status.account_id, sd->status.name, CHRIF_OP_LOGIN_VIP, 0, 1, 0); // request VIP informations + chrif_req_login_operation(sd->status.account_id, sd->status.name, CHRIF_OP_LOGIN_VIP, 0, 1, 0); // request VIP information #endif intif_Mail_requestinbox(sd->status.char_id, 0); // MAIL SYSTEM - Request Mail Inbox intif_request_questlog(sd); @@ -6437,20 +6437,17 @@ static void pc_calcexp(struct map_session_data *sd, unsigned int *base_exp, unsi (int)(status_get_lv(src) - sd->status.base_level) >= 20) bonus += 15; // pk_mode additional exp if monster >20 levels [Valaris] -#ifdef VIP_ENABLE - //EXP bonus for VIP player - if (src && src->type == BL_MOB && pc_isvip(sd)) { + if (src && src->type == BL_MOB && pc_isvip(sd)) { // EXP bonus for VIP player vip_bonus_base = battle_config.vip_base_exp_increase; vip_bonus_job = battle_config.vip_job_exp_increase; } -#endif } // Give EXPBOOST for quests even if src is NULL. if (&sd->sc && sd->sc.data[SC_EXPBOOST]) { bonus += sd->sc.data[SC_EXPBOOST]->val1; - if( battle_config.vip_bm_increase && pc_isvip(sd) ) // Increase Battle Manual EXP rate for VIP. - bonus += ( sd->sc.data[SC_EXPBOOST]->val1 / battle_config.vip_bm_increase ); + if (battle_config.vip_bm_increase && pc_isvip(sd)) // Increase Battle Manual EXP rate for VIP + bonus += (sd->sc.data[SC_EXPBOOST]->val1 / battle_config.vip_bm_increase); } if (*base_exp) { @@ -7644,20 +7641,19 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) && !map[sd->bl.m].flag.noexppenalty && !map_flag_gvg(sd->bl.m) && !sd->sc.data[SC_BABY] && !sd->sc.data[SC_LIFEINSURANCE]) { - uint32 base_penalty = battle_config.death_penalty_base; - uint32 job_penalty = battle_config.death_penalty_job; - uint32 zeny_penalty = battle_config.zeny_penalty; + uint32 base_penalty = 0; + uint32 job_penalty = 0; + uint32 zeny_penalty = 0; -#ifdef VIP_ENABLE - if(pc_isvip(sd)){ - base_penalty *= battle_config.vip_exp_penalty_base; - job_penalty *= battle_config.vip_exp_penalty_job; + if (pc_isvip(sd)) { // EXP penalty for VIP + base_penalty = battle_config.vip_exp_penalty_base; + job_penalty = battle_config.vip_exp_penalty_job; + zeny_penalty = battle_config.vip_zeny_penalty; + } else { + base_penalty = battle_config.death_penalty_base; + job_penalty = battle_config.death_penalty_job; + zeny_penalty = battle_config.zeny_penalty; } - else { - base_penalty *= battle_config.vip_exp_penalty_base_normal; - job_penalty *= battle_config.vip_exp_penalty_job_normal; - } -#endif if ((battle_config.death_penalty_maxlv&1 || !pc_is_maxbaselv(sd)) && base_penalty > 0) { switch (battle_config.death_penalty_type) { @@ -10290,10 +10286,8 @@ static int pc_autosave(int tid, unsigned int tick, int id, intptr_t data) //Save char. last_save_id = sd->bl.id; save_flag = 2; -#ifdef VIP_ENABLE - if(sd->vip.enabled) //check if we're still vip + if (pc_isvip(sd)) // Check if we're still VIP chrif_req_login_operation(1, sd->status.name, 6, 0, 1, 0); -#endif chrif_save(sd,0); break; } diff --git a/src/map/pc.h b/src/map/pc.h index 587e7e1b1b..cff7e243d4 100644 --- a/src/map/pc.h +++ b/src/map/pc.h @@ -160,6 +160,7 @@ struct skill_cooldown_entry { struct vip_info { unsigned int enabled : 1; time_t time; + bool disableshowrate; //State to disable clif_display_pinfo(). [Cydh] }; #endif @@ -646,7 +647,6 @@ struct map_session_data { int storage_size; /// Holds player storage size (VIP system). #ifdef VIP_ENABLE struct vip_info vip; - bool disableshowrate; //State to disable clif_display_pinfo(). [Cydh] #endif /// Bonus Script [Cydh]