* Bug Fixes & Misc

-- Compiling errors when VIP_ENABLE (bugreport:9013)
-- Taekwon skills leftover when player was in Taekwon Ranker then changes to other job (bugreport:8973)
-- Follow up f511107.Fixed parentheses statement.
-- Follow up 6afcdeb. Updated check for char table.
-- Follow up 794c1a8. Wrong SC constanta order.
* Battle Config Updates
-- 'transcendent_status_points', stat point bonus for trans classes.
-- 'revive_onwarp', disable/enable to revive a dead player when set new position (warping).
-- 'taekwon_ranker_min_lv', minimum level bonus of Taekwon Ranker.
-- 'fame_taekwon_mission', fame point gained when complete Taekwon Mission.
-- 'fame_refine_lv1', fame point when success to refine to +10 forged weapon level 1.
-- 'fame_refine_lv2', fame point when success to refine to +10 forged weapon level 2.
-- 'fame_refine_lv3', fame point when success to refine to +10 forged weapon level 3.
-- 'fame_forge', fame point when success to forge level 3 weapon with 3 additional ingredients.
-- 'fame_pharmacy_3', fame point when success do pharmacy 3 times in a row.
-- 'fame_pharmacy_5', fame point when success do pharmacy 5 times in a row.
-- 'fame_pharmacy_7', fame point when success do pharmacy 7 times in a row.
-- 'fame_pharmacy_10', fame point when success do pharmacy 8 times in a row.

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
This commit is contained in:
Cydh Ramdh 2014-06-08 17:03:27 +07:00
parent 263c138f6d
commit a8a44254e1
17 changed files with 130 additions and 61 deletions

View File

@ -95,6 +95,9 @@ max_baby_parameter: 80
max_baby_third_parameter: 117
max_extended_parameter: 125
// Status points bonus for transcendent class
transcendent_status_points: 52
// Max armor def/mdef
// NOTE: This setting have no effect if server is run on Renewal Mode (RENEWAL)
// NOTE: does not affects skills and status effects like Mental Strength
@ -203,3 +206,26 @@ vip_gemstone: yes
// Will display rate information (EXP, Drop, and Death penalty message)? (Note 1)
vip_disp_rate: yes
// Revive dead player while warping? (Note 1)
revive_onwarp: yes
// Minimum base level to receives Taekwon Ranker Bonus
// - 3x Maximum HP and SP
// - All Taekwon skills
taekwon_ranker_min_lv: 90
// Fame points gained
// Taekwon Mission completed
fame_taekwon_mission: 1
// Refined own forged weapon to +10
fame_refine_lv1: 1
fame_refine_lv2: 25
fame_refine_lv3: 10000
// Success to forge a lv3 weapon with 3 additional ingredients
fame_forge: 10
// Success to prepare 'n' Condensed Potions in a row
fame_pharmacy_3: 1
fame_pharmacy_5: 3
fame_pharmacy_7: 10
fame_pharmacy_10: 50

View File

@ -1745,8 +1745,8 @@ SC_TEARGAS_SOB 593
SC__FEINTBOMB 594
SC__CHAOS 595
SC_ELEMENTAL_SHIELD 596
SC_EXTREMITYFIST2 597
SC_CHASEWALK2 598
SC_CHASEWALK2 597
SC_EXTREMITYFIST2 598
//Status Icon
SI_BLANK -1

View File

@ -2171,7 +2171,8 @@ bool char_checkdb(void){
"`max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point`,`option`,`karma`,`manner`,`party_id`,"
"`guild_id`,`pet_id`,`homun_id`,`elemental_id`,`hair`,`hair_color`,`clothes_color`,`weapon`,"
"`shield`,`head_top`,`head_mid`,`head_bottom`,`robe`,`last_map`,`last_x`,`last_y`,`save_map`,"
"`save_x`,`save_y`,`partner_id`,`online`,`father`,`mother`,`child`,`fame`,`rename`,`delete_date`,`moves`"
"`save_x`,`save_y`,`partner_id`,`online`,`father`,`mother`,`child`,`fame`,`rename`,`delete_date`,"
"`moves`,`unban_time`,`font`"
" from `%s`;", schema_config.char_db) ){
Sql_ShowDebug(sql_handle);
return false;

View File

@ -579,7 +579,7 @@ int chlogif_parse_vipack(int fd) {
uint8 isgm = RFIFOB(fd,15); //isgm
int mapfd = RFIFOL(fd,16); //link to mapserv for ack
RFIFOSKIP(fd,20);
mapif_vipack(mapfd,aid,vip_time,isvip,isgm,groupid);
chmapif_vipack(mapfd,aid,vip_time,isvip,isgm,groupid);
}
#endif
return 1;

View File

@ -1,5 +1,3 @@
/**
* @file char_mapif.c
* Module purpose is to handle incoming and outgoing requests with map-server.
@ -1274,7 +1272,7 @@ int chmapif_bonus_script_get(int fd) {
WFIFOHEAD(fd,10+50*sizeof(struct bonus_script_data));
WFIFOW(fd,0) = 0x2b2f;
WFIFOL(fd,4) = cid;
for (count = 0; count < 20 && SQL_SUCCESS == Sql_NextRow(sql_handle); ++count) {
for (count = 0; count < MAX_PC_BONUS_SCRIPT && SQL_SUCCESS == Sql_NextRow(sql_handle); ++count) {
Sql_GetData(sql_handle,0,&data,NULL); memcpy(bsdata.script,data,strlen(data)+1);
Sql_GetData(sql_handle,1,&data,NULL); bsdata.tick = atoi(data);
Sql_GetData(sql_handle,2,&data,NULL); bsdata.flag = atoi(data);
@ -1282,7 +1280,7 @@ int chmapif_bonus_script_get(int fd) {
Sql_GetData(sql_handle,4,&data,NULL); bsdata.icon = atoi(data);
memcpy(WFIFOP(fd,10+count*sizeof(struct bonus_script_data)),&bsdata,sizeof(struct bonus_script_data));
}
if (count >= 20)
if (count >= MAX_PC_BONUS_SCRIPT)
ShowWarning("Too many bonus_script for %d, some of them were not loaded.\n",cid);
if (count > 0) {
WFIFOW(fd,2) = 10 + count*sizeof(struct bonus_script_data);

View File

@ -7,7 +7,6 @@
* @author rAthena Dev Team
*/
#ifndef CHAR_MAPIF_H
#define CHAR_MAPIF_H

View File

@ -73,6 +73,7 @@
#define MAX_GUILDLEVEL 50 ///Max Guild level
#define MAX_GUARDIANS 8 ///Local max per castle. If this value is increased, need to add more fields on MySQL `guild_castle` table [Skotlex]
#define MAX_QUEST_OBJECTIVES 3 ///Max quest objectives for a quest
#define MAX_PC_BONUS_SCRIPT 20
// for produce
#define MIN_ATTRIBUTE 0
@ -582,14 +583,14 @@ struct fame_list {
char name[NAME_LENGTH];
};
enum { //Change Guild Infos
enum e_guild_info { //Change Guild Infos
GBI_EXP =1, // Guild Experience (EXP)
GBI_GUILDLV, // Guild level
GBI_SKILLPOINT, // Guild skillpoints
GBI_SKILLLV, // Guild skill_lv ?? seem unused
};
enum { //Change Member Infos
enum e_guild_member_info { //Change Member Infos
GMI_POSITION =0,
GMI_EXP,
GMI_HAIR,
@ -622,7 +623,7 @@ enum e_guild_skill {
//These mark the ID of the jobs, as expected by the client. [Skotlex]
enum {
enum e_job {
JOB_NOVICE,
JOB_SWORDMAN,
JOB_MAGE,
@ -780,7 +781,7 @@ enum {
JOB_MAX,
};
enum {
enum e_sex {
SEX_FEMALE = 0,
SEX_MALE,
SEX_SERVER
@ -801,4 +802,11 @@ enum bound_type {
#error MAX_ZENY is too big
#endif
#if (MIN_CHARS + MAX_CHAR_VIP + MAX_CHAR_BILLING) > MAX_CHARS
#error Config of MAX_CHARS is invalid
#endif
#if MIN_STORAGE > MAX_STORAGE
#error Config of MIN_STORAGE is invalid
#endif
#endif /* _MMO_H_ */

View File

@ -87,12 +87,6 @@
#define MAX_CHAR_BILLING 0
#define MAX_CHAR_VIP 0
#endif
#if (MIN_CHARS + MAX_CHAR_VIP + MAX_CHAR_BILLING) > MAX_CHARS
#error "Config of MAX_CHARS is invalid"
#endif
#if MIN_STORAGE > MAX_STORAGE
#error "Config of MIN_STORAGE is invalid"
#endif
/**
* No settings past this point

View File

@ -1052,7 +1052,7 @@ ACMD_FUNC(jobchange)
if (pcdb_checkid(job))
{
if (pc_jobchange(sd, job, upper) == 0)
if (pc_jobchange(sd, job, upper))
clif_displaymessage(fd, msg_txt(sd,12)); // Your job has been changed.
else {
clif_displaymessage(fd, msg_txt(sd,155)); // You are unable to change your job.

View File

@ -7830,6 +7830,19 @@ static const struct _battle_data {
{ "teleport_on_portal", &battle_config.teleport_on_portal, 0, 0, 1, },
{ "cart_revo_knockback", &battle_config.cart_revo_knockback, 1, 0, 1, },
{ "guild_notice_changemap", &battle_config.guild_notice_changemap, 2, 0, 2, },
{ "transcendent_status_points", &battle_config.transcendent_status_points, 52, 1, INT_MAX, },
{ "taekwon_ranker_min_lv", &battle_config.taekwon_ranker_min_lv, 90, 1, MAX_LEVEL, },
{ "revive_onwarp", &battle_config.revive_onwarp, 1, 0, 1, },
{ "fame_taekwon_mission", &battle_config.fame_taekwon_mission, 1, 0, INT_MAX, },
{ "fame_refine_lv1", &battle_config.fame_refine_lv1, 1, 0, INT_MAX, },
{ "fame_refine_lv1", &battle_config.fame_refine_lv1, 1, 0, INT_MAX, },
{ "fame_refine_lv2", &battle_config.fame_refine_lv2, 25, 0, INT_MAX, },
{ "fame_refine_lv3", &battle_config.fame_refine_lv3, 1000, 0, INT_MAX, },
{ "fame_forge", &battle_config.fame_forge, 10, 0, INT_MAX, },
{ "fame_pharmacy_3", &battle_config.fame_pharmacy_3, 1, 0, INT_MAX, },
{ "fame_pharmacy_5", &battle_config.fame_pharmacy_5, 3, 0, INT_MAX, },
{ "fame_pharmacy_7", &battle_config.fame_pharmacy_7, 10, 0, INT_MAX, },
{ "fame_pharmacy_10", &battle_config.fame_pharmacy_10, 50, 0, INT_MAX, },
};
#ifndef STATS_OPT_OUT
/**

View File

@ -540,6 +540,20 @@ extern struct Battle_Config
int teleport_on_portal;
int cart_revo_knockback;
int guild_notice_changemap;
int transcendent_status_points;
int taekwon_ranker_min_lv;
int revive_onwarp;
// Fame points
int fame_taekwon_mission;
int fame_refine_lv1;
int fame_refine_lv2;
int fame_refine_lv3;
int fame_forge;
int fame_pharmacy_3;
int fame_pharmacy_5;
int fame_pharmacy_7;
int fame_pharmacy_10;
} battle_config;
void do_init_battle(void);

View File

@ -2590,9 +2590,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
if( sd ) {
if( sd->mission_mobid == md->mob_id ||
( battle_config.taekwon_mission_mobname == 1 && mob_is_goblin(md, sd->mission_mobid) ) ||
( battle_config.taekwon_mission_mobname == 2 && mob_is_samename(md, sd->mission_mobid) ) ) { //TK_MISSION [Skotlex]
if( ++sd->mission_count >= 100 && (temp = mob_get_random_id(0, 0xE, sd->status.base_level)) ) {
pc_addfame(sd, 1);
( battle_config.taekwon_mission_mobname == 2 && mob_is_samename(md, sd->mission_mobid) ) )
{ //TK_MISSION [Skotlex]
if( ++sd->mission_count >= 100 && (temp = mob_get_random_id(0, 0xE, sd->status.base_level)) )
{
pc_addfame(sd, battle_config.fame_taekwon_mission);
sd->mission_mobid = temp;
pc_setglobalreg(sd,"TK_MISSION_ID", temp);
sd->mission_count = 0;

View File

@ -386,7 +386,7 @@ void pc_addfame(struct map_session_data *sd,int count)
// Check whether a player ID is in the fame rankers' list of its job, returns his/her position if so, 0 else
unsigned char pc_famerank(int char_id, int job)
{
int i;
uint8 i;
switch(job){
case MAPID_BLACKSMITH: // Blacksmith
@ -901,7 +901,7 @@ bool pc_adoption(struct map_session_data *p1_sd, struct map_session_data *p2_sd,
jobexp = b_sd->status.job_exp;
job = pc_mapid2jobid(b_sd->class_|JOBL_BABY, b_sd->status.sex);
if( job != -1 && !pc_jobchange(b_sd, job, 0) )
if( job != -1 && pc_jobchange(b_sd, job, 0) )
{ // Success, proceed to configure parents and baby skills
p1_sd->status.child = b_sd->status.char_id;
p2_sd->status.child = b_sd->status.char_id;
@ -1508,6 +1508,19 @@ int pc_calc_skilltree(struct map_session_data *sd)
}
}
// Removes Taekwon Ranker skill bonus
if ((sd->class_&MAPID_UPPERMASK) != MAPID_TAEKWON) {
uint16 c_ = pc_class2idx(JOB_TAEKWON);
for (i = 0; i < MAX_SKILL_TREE; i++) {
uint16 x = skill_get_index(skill_tree[c_][i].id), id;
if ((id = sd->status.skill[x].id)) {
if (id == NV_BASIC || id == NV_FIRSTAID || id == WE_CALLBABY)
continue;
sd->status.skill[x].id = 0;
}
}
}
if( pc_has_permission(sd, PC_PERM_ALL_SKILL) ) {
for( i = 0; i < MAX_SKILL; i++ ) {
switch(i) {
@ -1601,7 +1614,7 @@ int pc_calc_skilltree(struct map_session_data *sd)
}
} while(flag);
if( c > 0 && (sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && sd->status.skill_point == 0 && pc_famerank(sd->status.char_id, MAPID_TAEKWON) ) {
if( c > 0 && (sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= battle_config.taekwon_ranker_min_lv && sd->status.skill_point == 0 && pc_famerank(sd->status.char_id, MAPID_TAEKWON) ) {
/* Taekwon Ranker Bonus Skill Tree
============================================
- Grant All Taekwon Tree, but only as Bonus Skills in case they drop from ranking.
@ -5066,7 +5079,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y
return 1;
}
if( pc_isdead(sd) ) { //Revive dead people before warping them
if( battle_config.revive_onwarp && pc_isdead(sd) ) { //Revive dead people before warping them
pc_setstand(sd);
pc_setrestartvalue(sd,1);
}
@ -6542,7 +6555,7 @@ int pc_skillup(struct map_session_data *sd,uint16 skill_id)
sd->status.skill_point--;
if( !skill_get_inf(skill_id) )
status_calc_pc(sd,SCO_NONE); // Only recalculate for passive skills.
else if( sd->status.skill_point == 0 && (sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc_famerank(sd->status.char_id, MAPID_TAEKWON) )
else if( sd->status.skill_point == 0 && (sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= battle_config.taekwon_ranker_min_lv && pc_famerank(sd->status.char_id, MAPID_TAEKWON) )
pc_calc_skilltree(sd); // Required to grant all TK Ranker skills.
else
pc_check_skilltree(sd, skill_id); // Check if a new skill can Lvlup
@ -6788,7 +6801,7 @@ int pc_resetskill(struct map_session_data* sd, int flag)
/**
* It has been confirmed on official servers that when you reset skills with a ranked Taekwon your skills are not reset (because you have all of them anyway)
**/
if( (sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc_famerank(sd->status.char_id, MAPID_TAEKWON) )
if( (sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= battle_config.taekwon_ranker_min_lv && pc_famerank(sd->status.char_id, MAPID_TAEKWON) )
return 0;
if( pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd) )
@ -7836,24 +7849,28 @@ static int jobchange_killclone(struct block_list *bl, va_list ap)
return 1;
}
/*==========================================
/**
* Called when player changes job
* Rewrote to make it tidider [Celest]
*------------------------------------------*/
int pc_jobchange(struct map_session_data *sd,int job, int upper)
* @param sd
* @param job JOB ID. See enum e_job
* @param upper 1 - JOBL_UPPER; 2 - JOBL_BABY
* @return True if success, false if failed
**/
bool pc_jobchange(struct map_session_data *sd,int job, char upper)
{
int i, fame_flag=0;
int i, fame_flag = 0;
int b_class;
nullpo_ret(sd);
nullpo_retr(false,sd);
if (job < 0)
return 1;
return false;
//Normalize job.
b_class = pc_jobid2mapid(job);
if (b_class == -1)
return 1;
return false;
switch (upper) {
case 1:
b_class|= JOBL_UPPER;
@ -7866,10 +7883,10 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
//That is, if you try to jobchange into dancer, it will turn you to bard.
job = pc_mapid2jobid(b_class, sd->status.sex);
if (job == -1)
return 1;
return false;
if ((unsigned short)b_class == sd->class_)
return 1; //Nothing to change.
return false; //Nothing to change.
// changing from 1st to 2nd job
if ((b_class&JOBL_2) && !(sd->class_&JOBL_2) && (b_class&MAPID_UPPERMASK) != MAPID_SUPER_NOVICE) {
@ -7908,14 +7925,14 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
// Give or reduce transcendent status points
if( (b_class&JOBL_UPPER) && !(sd->class_&JOBL_UPPER) ){ // Change from a non t class to a t class -> give points
sd->status.status_point += 52;
sd->status.status_point += battle_config.transcendent_status_points;
clif_updatestatus(sd,SP_STATUSPOINT);
}else if( !(b_class&JOBL_UPPER) && (sd->class_&JOBL_UPPER) ){ // Change from a t class to a non t class -> remove points
if( sd->status.status_point < 52 ){
if( sd->status.status_point < battle_config.transcendent_status_points ){
// The player already used his bonus points, so we have to reset his status points
pc_resetstate(sd);
}
sd->status.status_point -= 52;
sd->status.status_point -= battle_config.transcendent_status_points;
clif_updatestatus(sd,SP_STATUSPOINT);
}
@ -8032,7 +8049,7 @@ int pc_jobchange(struct map_session_data *sd,int job, int upper)
}
}
return 0;
return true;
}
/*==========================================

View File

@ -25,7 +25,6 @@
#define MAX_PC_SKILL_REQUIRE 5
#define MAX_PC_FEELHATE 3
#define DAMAGELOG_SIZE_PC 100 // Any idea for this value?
#define MAX_PC_BONUS_SCRIPT 20
#define MAX_SPIRITBALL 15
//Update this max as necessary. 55 is the value needed for Super Baby currently
@ -939,7 +938,7 @@ void pc_revive(struct map_session_data *sd,unsigned int hp, unsigned int sp);
void pc_heal(struct map_session_data *sd,unsigned int hp,unsigned int sp, int type);
int pc_itemheal(struct map_session_data *sd,int itemid, int hp,int sp);
int pc_percentheal(struct map_session_data *sd,int,int);
int pc_jobchange(struct map_session_data *,int, int);
bool pc_jobchange(struct map_session_data *sd, int job, char upper);
void pc_setoption(struct map_session_data *,int);
bool pc_setcart(struct map_session_data* sd, int type);
void pc_setfalcon(struct map_session_data* sd, int flag);

View File

@ -8028,13 +8028,13 @@ BUILDIN_FUNC(successrefitem)
){ // Fame point system [DracoRPG]
switch (sd->inventory_data[i]->wlv){
case 1:
pc_addfame(sd,1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point
pc_addfame(sd, battle_config.fame_refine_lv1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point
break;
case 2:
pc_addfame(sd,25); // Success to refine to +10 a lv2 weapon you forged = +25 fame point
pc_addfame(sd, battle_config.fame_refine_lv2); // Success to refine to +10 a lv2 weapon you forged = +25 fame point
break;
case 3:
pc_addfame(sd,1000); // Success to refine to +10 a lv3 weapon you forged = +1000 fame point
pc_addfame(sd, battle_config.fame_refine_lv3); // Success to refine to +10 a lv3 weapon you forged = +1000 fame point
break;
}
}

View File

@ -13914,7 +13914,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
status_change_end(&sd->bl, SC_COMBO, INVALID_TIMER);
return false;
}
if(sc->data[SC_COMBO]->val1 != skill_id && !( sd && sd->status.base_level >= 90 && pc_famerank(sd->status.char_id, MAPID_TAEKWON) )) { //Cancel combo wait.
if(sc->data[SC_COMBO]->val1 != skill_id && !( sd && sd->status.base_level >= battle_config.taekwon_ranker_min_lv && pc_famerank(sd->status.char_id, MAPID_TAEKWON) )) { //Cancel combo wait.
unit_cancel_combo(&sd->bl);
return false;
}
@ -15717,13 +15717,13 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
{ // Fame point system [DracoRPG]
switch(ditem->wlv){
case 1:
pc_addfame(sd,1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point
pc_addfame(sd, battle_config.fame_refine_lv1); // Success to refine to +10 a lv1 weapon you forged = +1 fame point
break;
case 2:
pc_addfame(sd,25); // Success to refine to +10 a lv2 weapon you forged = +25 fame point
pc_addfame(sd, battle_config.fame_refine_lv2); // Success to refine to +10 a lv2 weapon you forged = +25 fame point
break;
case 3:
pc_addfame(sd,1000); // Success to refine to +10 a lv3 weapon you forged = +1000 fame point
pc_addfame(sd, battle_config.fame_refine_lv3); // Success to refine to +10 a lv3 weapon you forged = +1000 fame point
break;
}
}
@ -17926,7 +17926,7 @@ int skill_produce_mix (struct map_session_data *sd, uint16 skill_id, int nameid,
clif_produceeffect(sd,0,nameid);
clif_misceffect(&sd->bl,3);
if(itemdb_wlv(nameid) >= 3 && ((ele? 1 : 0) + sc) >= 3) // Fame point system [DracoRPG]
pc_addfame(sd,10); // Success to forge a lv3 weapon with 3 additional ingredients = +10 fame point
pc_addfame(sd, battle_config.fame_forge); // Success to forge a lv3 weapon with 3 additional ingredients = +10 fame point
} else {
int fame = 0;
tmp_item.amount = 0;
@ -17948,16 +17948,16 @@ int skill_produce_mix (struct map_session_data *sd, uint16 skill_id, int nameid,
//Add fame as needed.
switch(++sd->potion_success_counter) {
case 3:
fame+=1; // Success to prepare 3 Condensed Potions in a row
fame += battle_config.fame_pharmacy_3; // Success to prepare 3 Condensed Potions in a row
break;
case 5:
fame+=3; // Success to prepare 5 Condensed Potions in a row
fame += battle_config.fame_pharmacy_5; // Success to prepare 5 Condensed Potions in a row
break;
case 7:
fame+=10; // Success to prepare 7 Condensed Potions in a row
fame += battle_config.fame_pharmacy_7; // Success to prepare 7 Condensed Potions in a row
break;
case 10:
fame+=50; // Success to prepare 10 Condensed Potions in a row
fame += battle_config.fame_pharmacy_10; // Success to prepare 10 Condensed Potions in a row
sd->potion_success_counter = 0;
break;
}

View File

@ -2575,10 +2575,8 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
int8 i;
bonus += sd->bonus.hp;
if ((i=pc_checkskill(sd,CR_TRUST)) > 0)
if ((i = pc_checkskill(sd,CR_TRUST)) > 0)
bonus += i * 200;
if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc_famerank(sd->status.char_id, MAPID_TAEKWON))
bonus *= 3; // Triple max HP for top ranking Taekwons over level 90.
if ((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.base_level >= 99)
bonus += 2000; // Supernovice lvl99 hp bonus.
}
@ -2608,7 +2606,7 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
bonus -= 100; //Default hprate is 100, so it should be add 0%
//+200% for top ranking Taekwons over level 90.
if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc_famerank(sd->status.char_id,MAPID_TAEKWON))
if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= battle_config.taekwon_ranker_min_lv && pc_famerank(sd->status.char_id,MAPID_TAEKWON))
bonus += 200;
}
@ -2719,7 +2717,7 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) {
bonus += 2 * i;
//+200% for top ranking Taekwons over level 90.
if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= 90 && pc_famerank(sd->status.char_id, MAPID_TAEKWON))
if ((sd->class_&MAPID_UPPERMASK) == MAPID_TAEKWON && sd->status.base_level >= battle_config.taekwon_ranker_min_lv && pc_famerank(sd->status.char_id, MAPID_TAEKWON))
bonus += 200;
}