* Follow up c1871e9,3181ff6. Moved vip base and job exp bonus calculation to the pc_calcexp with another exp bonus
* Follow up 3441d4a Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
This commit is contained in:
parent
3441d4a30b
commit
a862051cd3
@ -167,6 +167,10 @@ vip_storage_increase: 300
|
|||||||
// Default: 50
|
// Default: 50
|
||||||
vip_base_exp_increase: 50
|
vip_base_exp_increase: 50
|
||||||
|
|
||||||
|
// Job experience rate increase. Setting to 0 will disable. (Note 2)
|
||||||
|
// Default: 50
|
||||||
|
vip_job_exp_increase: 50
|
||||||
|
|
||||||
// Experience penalty rate multiplier for non-VIP accounts.
|
// Experience penalty rate multiplier for non-VIP accounts.
|
||||||
// Multiplies the 'death_penalty_base' and 'death_penalty_job' settings in 'conf/battle/exp.conf'.
|
// Multiplies the 'death_penalty_base' and 'death_penalty_job' settings in 'conf/battle/exp.conf'.
|
||||||
// Default: 3 (3*100 = 3% penalty)
|
// Default: 3 (3*100 = 3% penalty)
|
||||||
@ -179,10 +183,6 @@ vip_exp_penalty_job_normal: 3
|
|||||||
vip_exp_penalty_base: 1
|
vip_exp_penalty_base: 1
|
||||||
vip_exp_penalty_job: 1
|
vip_exp_penalty_job: 1
|
||||||
|
|
||||||
// Job experience rate increase. Setting to 0 will disable. (Note 2)
|
|
||||||
// Default: 50
|
|
||||||
vip_job_exp_increase: 50
|
|
||||||
|
|
||||||
// Battle Manual experience increase. Setting to 0 will disable.
|
// Battle Manual experience increase. Setting to 0 will disable.
|
||||||
// - Regular/Thick Battle Manual: 50+(50/X) = 75%
|
// - Regular/Thick Battle Manual: 50+(50/X) = 75%
|
||||||
// - HE Battle Manual: 100+(100/X) = 150%
|
// - HE Battle Manual: 100+(100/X) = 150%
|
||||||
|
@ -8453,7 +8453,7 @@
|
|||||||
18506,Hattah_Black,Hattah Black,4,12000,,4000,,2,,1,0xFFFFFFFF,63,2,769,,1,1,676,{},{},{}
|
18506,Hattah_Black,Hattah Black,4,12000,,4000,,2,,1,0xFFFFFFFF,63,2,769,,1,1,676,{},{},{}
|
||||||
18507,Elven_Ears_,Elven Ears,4,20,,100,,0,,1,0xFFFFFFFE,63,2,512,,70,0,73,{},{},{}
|
18507,Elven_Ears_,Elven Ears,4,20,,100,,0,,1,0xFFFFFFFE,63,2,512,,70,0,73,{},{},{}
|
||||||
18508,Garuda_Hat,Garuda Hat,4,20,,100,,4,,1,0xFFFFFFFE,63,2,256,,30,1,677,{ bonus bLuk,5; bonus bMdef,3; bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; bonus2 bSubEle,Ele_Earth,5; bonus2 bSubEle,Ele_Dark,5; bonus2 bSubEle,Ele_Holy,5; bonus2 bSubEle,Ele_Ghost,5; bonus bHit,10; bonus bDelayRate,-5; if(getrefine()>=7) bonus2 bAddMonsterDropItem,522,100*(getrefine()-6); },{},{}
|
18508,Garuda_Hat,Garuda Hat,4,20,,100,,4,,1,0xFFFFFFFE,63,2,256,,30,1,677,{ bonus bLuk,5; bonus bMdef,3; bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; bonus2 bSubEle,Ele_Earth,5; bonus2 bSubEle,Ele_Dark,5; bonus2 bSubEle,Ele_Holy,5; bonus2 bSubEle,Ele_Ghost,5; bonus bHit,10; bonus bDelayRate,-5; if(getrefine()>=7) bonus2 bAddMonsterDropItem,522,100*(getrefine()-6); },{},{}
|
||||||
18509,RWC2010_Indonesia,RWC2010 Indonesia,4,20,,100,,6,,1,0xFFFFFFFE,63,2,256,,15,1,678,{ bonus bLuk,5; bonus bSubRace,RC_Player,10; bonus bSubRace,RC_DemiHuman,10; bonus2 bAddItemHealRate,501,100; bonus2 bAddItemHealRate,504,100; bonus bCritical,10; bonus bAspd,1; bonus2 bAddClass,Class_All,3; bonus bMatkRate,3; },{},{}
|
18509,RWC2010_Indonesia,RWC2010 Indonesia,4,20,,100,,6,,1,0xFFFFFFFE,63,2,256,,15,1,678,{ bonus bLuk,5; bonus2 bSubRace2,RC_Player,10; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bAddItemHealRate,501,100; bonus2 bAddItemHealRate,504,100; bonus bCritical,10; bonus bAspd,1; bonus2 bAddClass,Class_All,3; bonus bMatkRate,3; },{},{}
|
||||||
18510,Blood_Angel_Hair_Band,Blood Angel Hair Band,4,0,,0,,1,,0,0xFFFFFFFF,63,2,256,,60,0,679,{},{},{}
|
18510,Blood_Angel_Hair_Band,Blood Angel Hair Band,4,0,,0,,1,,0,0xFFFFFFFF,63,2,256,,60,0,679,{},{},{}
|
||||||
18511,Blood_Angel_Wing_Ear,Blood Angel Wing Ear,4,0,,0,,1,,0,0xFFFFFFFF,63,2,512,,60,0,680,{},{},{}
|
18511,Blood_Angel_Wing_Ear,Blood Angel Wing Ear,4,0,,0,,1,,0,0xFFFFFFFF,63,2,512,,60,0,680,{},{},{}
|
||||||
18512,Juho_Necktie,Juho Necktie,4,0,,0,,1,,1,0xFFFFFFFF,63,2,256,,20,1,443,{},{},{}
|
18512,Juho_Necktie,Juho Necktie,4,0,,0,,1,,1,0xFFFFFFFF,63,2,256,,20,1,443,{},{},{}
|
||||||
|
@ -8484,7 +8484,7 @@ REPLACE INTO `item_db_re` VALUES (18505,'Umbala_Spirit','Umbala Spirit',4,0,NULL
|
|||||||
REPLACE INTO `item_db_re` VALUES (18506,'Hattah_Black','Hattah Black',4,12000,NULL,4000,NULL,2,NULL,1,0xFFFFFFFF,63,2,769,NULL,'1',1,676,NULL,NULL,NULL);
|
REPLACE INTO `item_db_re` VALUES (18506,'Hattah_Black','Hattah Black',4,12000,NULL,4000,NULL,2,NULL,1,0xFFFFFFFF,63,2,769,NULL,'1',1,676,NULL,NULL,NULL);
|
||||||
REPLACE INTO `item_db_re` VALUES (18507,'Elven_Ears_','Elven Ears',4,20,NULL,100,NULL,0,NULL,1,0xFFFFFFFE,63,2,512,NULL,'70',0,73,NULL,NULL,NULL);
|
REPLACE INTO `item_db_re` VALUES (18507,'Elven_Ears_','Elven Ears',4,20,NULL,100,NULL,0,NULL,1,0xFFFFFFFE,63,2,512,NULL,'70',0,73,NULL,NULL,NULL);
|
||||||
REPLACE INTO `item_db_re` VALUES (18508,'Garuda_Hat','Garuda Hat',4,20,NULL,100,NULL,4,NULL,1,0xFFFFFFFE,63,2,256,NULL,'30',1,677,'bonus bLuk,5; bonus bMdef,3; bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; bonus2 bSubEle,Ele_Earth,5; bonus2 bSubEle,Ele_Dark,5; bonus2 bSubEle,Ele_Holy,5; bonus2 bSubEle,Ele_Ghost,5; bonus bHit,10; bonus bDelayRate,-5; if(getrefine()>=7) bonus2 bAddMonsterDropItem,522,100*(getrefine()-6);',NULL,NULL);
|
REPLACE INTO `item_db_re` VALUES (18508,'Garuda_Hat','Garuda Hat',4,20,NULL,100,NULL,4,NULL,1,0xFFFFFFFE,63,2,256,NULL,'30',1,677,'bonus bLuk,5; bonus bMdef,3; bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; bonus2 bSubEle,Ele_Earth,5; bonus2 bSubEle,Ele_Dark,5; bonus2 bSubEle,Ele_Holy,5; bonus2 bSubEle,Ele_Ghost,5; bonus bHit,10; bonus bDelayRate,-5; if(getrefine()>=7) bonus2 bAddMonsterDropItem,522,100*(getrefine()-6);',NULL,NULL);
|
||||||
REPLACE INTO `item_db_re` VALUES (18509,'RWC2010_Indonesia','RWC2010 Indonesia',4,20,NULL,100,NULL,6,NULL,1,0xFFFFFFFE,63,2,256,NULL,'15',1,678,'bonus bLuk,5; bonus bSubRace,RC_Player,10; bonus bSubRace,RC_DemiHuman,10; bonus2 bAddItemHealRate,501,100; bonus2 bAddItemHealRate,504,100; bonus bCritical,10; bonus bAspd,1; bonus2 bAddClass,Class_All,3; bonus bMatkRate,3;',NULL,NULL);
|
REPLACE INTO `item_db_re` VALUES (18509,'RWC2010_Indonesia','RWC2010 Indonesia',4,20,NULL,100,NULL,6,NULL,1,0xFFFFFFFE,63,2,256,NULL,'15',1,678,'bonus bLuk,5; bonus2 bSubRace2,RC_Player,10; bonus2 bSubRace,RC_DemiHuman,10; bonus2 bAddItemHealRate,501,100; bonus2 bAddItemHealRate,504,100; bonus bCritical,10; bonus bAspd,1; bonus2 bAddClass,Class_All,3; bonus bMatkRate,3;',NULL,NULL);
|
||||||
REPLACE INTO `item_db_re` VALUES (18510,'Blood_Angel_Hair_Band','Blood Angel Hair Band',4,0,NULL,0,NULL,1,NULL,0,0xFFFFFFFF,63,2,256,NULL,'60',0,679,NULL,NULL,NULL);
|
REPLACE INTO `item_db_re` VALUES (18510,'Blood_Angel_Hair_Band','Blood Angel Hair Band',4,0,NULL,0,NULL,1,NULL,0,0xFFFFFFFF,63,2,256,NULL,'60',0,679,NULL,NULL,NULL);
|
||||||
REPLACE INTO `item_db_re` VALUES (18511,'Blood_Angel_Wing_Ear','Blood Angel Wing Ear',4,0,NULL,0,NULL,1,NULL,0,0xFFFFFFFF,63,2,512,NULL,'60',0,680,NULL,NULL,NULL);
|
REPLACE INTO `item_db_re` VALUES (18511,'Blood_Angel_Wing_Ear','Blood Angel Wing Ear',4,0,NULL,0,NULL,1,NULL,0,0xFFFFFFFF,63,2,512,NULL,'60',0,680,NULL,NULL,NULL);
|
||||||
REPLACE INTO `item_db_re` VALUES (18512,'Juho_Necktie','Juho Necktie',4,0,NULL,0,NULL,1,NULL,1,0xFFFFFFFF,63,2,256,NULL,'20',1,443,NULL,NULL,NULL);
|
REPLACE INTO `item_db_re` VALUES (18512,'Juho_Necktie','Juho Necktie',4,0,NULL,0,NULL,1,NULL,1,0xFFFFFFFF,63,2,256,NULL,'20',1,443,NULL,NULL,NULL);
|
||||||
|
@ -2252,13 +2252,8 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
|||||||
|
|
||||||
if (map[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost.
|
if (map[m].flag.nojobexp || !md->db->job_exp || md->dmglog[i].flag == MDLF_HOMUN) //Homun earned job-exp is always lost.
|
||||||
job_exp = 0;
|
job_exp = 0;
|
||||||
else {
|
else
|
||||||
int vip_bonus = 0;
|
job_exp = (unsigned int)cap_value(md->db->job_exp * per * bonus/100. * map[m].adjust.jexp/100., 1, UINT_MAX);
|
||||||
// Increase job EXP rate for VIP.
|
|
||||||
if (battle_config.vip_job_exp_increase && (sd && pc_isvip(sd)))
|
|
||||||
vip_bonus += battle_config.vip_job_exp_increase;
|
|
||||||
job_exp = (unsigned int)cap_value(md->db->job_exp * per * (bonus+vip_bonus)/100. * map[m].adjust.jexp/100., 1, UINT_MAX);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( ( temp = tmpsd[i]->status.party_id)>0 ) {
|
if ( ( temp = tmpsd[i]->status.party_id)>0 ) {
|
||||||
int j;
|
int j;
|
||||||
|
27
src/map/pc.c
27
src/map/pc.c
@ -5949,12 +5949,15 @@ int pc_checkjoblevelup(struct map_session_data *sd)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*==========================================
|
/** Alters experiences calculation based on self bonuses that do not get even shared to the party.
|
||||||
* Alters experienced based on self bonuses that do not get even shared to the party.
|
* @param sd Player
|
||||||
*------------------------------------------*/
|
* @param base_exp Base EXP before peronal bonuses
|
||||||
|
* @param job_exp Job EXP before peronal bonuses
|
||||||
|
* @param src Block list that affecting the exp calculation
|
||||||
|
*/
|
||||||
static void pc_calcexp(struct map_session_data *sd, unsigned int *base_exp, unsigned int *job_exp, struct block_list *src)
|
static void pc_calcexp(struct map_session_data *sd, unsigned int *base_exp, unsigned int *job_exp, struct block_list *src)
|
||||||
{
|
{
|
||||||
int bonus = 0;
|
int bonus = 0, vip_bonus_base = 0, vip_bonus_job = 0;
|
||||||
struct status_data *status = status_get_status_data(src);
|
struct status_data *status = status_get_status_data(src);
|
||||||
|
|
||||||
if( sd->expaddrace[status->race] )
|
if( sd->expaddrace[status->race] )
|
||||||
@ -5976,12 +5979,20 @@ static void pc_calcexp(struct map_session_data *sd, unsigned int *base_exp, unsi
|
|||||||
bonus += ( sd->sc.data[SC_EXPBOOST]->val1 / battle_config.vip_bm_increase );
|
bonus += ( sd->sc.data[SC_EXPBOOST]->val1 / battle_config.vip_bm_increase );
|
||||||
}
|
}
|
||||||
|
|
||||||
*base_exp = (unsigned int) cap_value(*base_exp + (double)*base_exp * bonus/100., 1, UINT_MAX);
|
#ifdef VIP_ENABLE
|
||||||
|
//EXP bonus for VIP player
|
||||||
|
if (src && src->type == BL_MOB && pc_isvip(sd)) {
|
||||||
|
vip_bonus_base = battle_config.vip_base_exp_increase;
|
||||||
|
vip_bonus_job = battle_config.vip_job_exp_increase;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
*base_exp = (unsigned int) cap_value(*base_exp + (double)*base_exp * (bonus + vip_bonus_base)/100., 1, UINT_MAX);
|
||||||
|
|
||||||
if (sd->sc.data[SC_JEXPBOOST])
|
if (sd->sc.data[SC_JEXPBOOST])
|
||||||
bonus += sd->sc.data[SC_JEXPBOOST]->val1;
|
bonus += sd->sc.data[SC_JEXPBOOST]->val1;
|
||||||
|
|
||||||
*job_exp = (unsigned int) cap_value(*job_exp + (double)*job_exp * bonus/100., 1, UINT_MAX);
|
*job_exp = (unsigned int) cap_value(*job_exp + (double)*job_exp * (bonus + vip_bonus_job)/100., 1, UINT_MAX);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -6000,10 +6011,6 @@ int pc_gainexp(struct map_session_data *sd, struct block_list *src, unsigned int
|
|||||||
if(!battle_config.pvp_exp && map[sd->bl.m].flag.pvp) // [MouseJstr]
|
if(!battle_config.pvp_exp && map[sd->bl.m].flag.pvp) // [MouseJstr]
|
||||||
return 0; // no exp on pvp maps
|
return 0; // no exp on pvp maps
|
||||||
|
|
||||||
// Increase base EXP rate for VIP.
|
|
||||||
if (src && src->type&BL_MOB && (battle_config.vip_base_exp_increase && (sd && pc_isvip(sd))))
|
|
||||||
base_exp = (unsigned int)cap_value(base_exp * (battle_config.vip_base_exp_increase)/100., 1, UINT_MAX);
|
|
||||||
|
|
||||||
if(sd->status.guild_id>0)
|
if(sd->status.guild_id>0)
|
||||||
base_exp-=guild_payexp(sd,base_exp);
|
base_exp-=guild_payexp(sd,base_exp);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user