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.
This commit is contained in:
parent
63ff4a9390
commit
d1a957efea
@ -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%
|
||||
|
@ -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;
|
||||
|
@ -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, },
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
40
src/map/pc.c
40
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;
|
||||
}
|
||||
|
@ -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]
|
||||
|
Loading…
x
Reference in New Issue
Block a user