* 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:
parent
263c138f6d
commit
a8a44254e1
@ -95,6 +95,9 @@ max_baby_parameter: 80
|
|||||||
max_baby_third_parameter: 117
|
max_baby_third_parameter: 117
|
||||||
max_extended_parameter: 125
|
max_extended_parameter: 125
|
||||||
|
|
||||||
|
// Status points bonus for transcendent class
|
||||||
|
transcendent_status_points: 52
|
||||||
|
|
||||||
// Max armor def/mdef
|
// Max armor def/mdef
|
||||||
// NOTE: This setting have no effect if server is run on Renewal Mode (RENEWAL)
|
// 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
|
// 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)
|
// Will display rate information (EXP, Drop, and Death penalty message)? (Note 1)
|
||||||
vip_disp_rate: yes
|
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
|
||||||
|
@ -1745,8 +1745,8 @@ SC_TEARGAS_SOB 593
|
|||||||
SC__FEINTBOMB 594
|
SC__FEINTBOMB 594
|
||||||
SC__CHAOS 595
|
SC__CHAOS 595
|
||||||
SC_ELEMENTAL_SHIELD 596
|
SC_ELEMENTAL_SHIELD 596
|
||||||
SC_EXTREMITYFIST2 597
|
SC_CHASEWALK2 597
|
||||||
SC_CHASEWALK2 598
|
SC_EXTREMITYFIST2 598
|
||||||
|
|
||||||
//Status Icon
|
//Status Icon
|
||||||
SI_BLANK -1
|
SI_BLANK -1
|
||||||
|
@ -2171,7 +2171,8 @@ bool char_checkdb(void){
|
|||||||
"`max_hp`,`hp`,`max_sp`,`sp`,`status_point`,`skill_point`,`option`,`karma`,`manner`,`party_id`,"
|
"`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`,"
|
"`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`,"
|
"`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) ){
|
" from `%s`;", schema_config.char_db) ){
|
||||||
Sql_ShowDebug(sql_handle);
|
Sql_ShowDebug(sql_handle);
|
||||||
return false;
|
return false;
|
||||||
|
@ -579,7 +579,7 @@ int chlogif_parse_vipack(int fd) {
|
|||||||
uint8 isgm = RFIFOB(fd,15); //isgm
|
uint8 isgm = RFIFOB(fd,15); //isgm
|
||||||
int mapfd = RFIFOL(fd,16); //link to mapserv for ack
|
int mapfd = RFIFOL(fd,16); //link to mapserv for ack
|
||||||
RFIFOSKIP(fd,20);
|
RFIFOSKIP(fd,20);
|
||||||
mapif_vipack(mapfd,aid,vip_time,isvip,isgm,groupid);
|
chmapif_vipack(mapfd,aid,vip_time,isvip,isgm,groupid);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file char_mapif.c
|
* @file char_mapif.c
|
||||||
* Module purpose is to handle incoming and outgoing requests with map-server.
|
* 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));
|
WFIFOHEAD(fd,10+50*sizeof(struct bonus_script_data));
|
||||||
WFIFOW(fd,0) = 0x2b2f;
|
WFIFOW(fd,0) = 0x2b2f;
|
||||||
WFIFOL(fd,4) = cid;
|
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,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,1,&data,NULL); bsdata.tick = atoi(data);
|
||||||
Sql_GetData(sql_handle,2,&data,NULL); bsdata.flag = 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);
|
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));
|
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);
|
ShowWarning("Too many bonus_script for %d, some of them were not loaded.\n",cid);
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
WFIFOW(fd,2) = 10 + count*sizeof(struct bonus_script_data);
|
WFIFOW(fd,2) = 10 + count*sizeof(struct bonus_script_data);
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
* @author rAthena Dev Team
|
* @author rAthena Dev Team
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef CHAR_MAPIF_H
|
#ifndef CHAR_MAPIF_H
|
||||||
#define CHAR_MAPIF_H
|
#define CHAR_MAPIF_H
|
||||||
|
|
||||||
|
@ -73,6 +73,7 @@
|
|||||||
#define MAX_GUILDLEVEL 50 ///Max Guild level
|
#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_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_QUEST_OBJECTIVES 3 ///Max quest objectives for a quest
|
||||||
|
#define MAX_PC_BONUS_SCRIPT 20
|
||||||
|
|
||||||
// for produce
|
// for produce
|
||||||
#define MIN_ATTRIBUTE 0
|
#define MIN_ATTRIBUTE 0
|
||||||
@ -582,14 +583,14 @@ struct fame_list {
|
|||||||
char name[NAME_LENGTH];
|
char name[NAME_LENGTH];
|
||||||
};
|
};
|
||||||
|
|
||||||
enum { //Change Guild Infos
|
enum e_guild_info { //Change Guild Infos
|
||||||
GBI_EXP =1, // Guild Experience (EXP)
|
GBI_EXP =1, // Guild Experience (EXP)
|
||||||
GBI_GUILDLV, // Guild level
|
GBI_GUILDLV, // Guild level
|
||||||
GBI_SKILLPOINT, // Guild skillpoints
|
GBI_SKILLPOINT, // Guild skillpoints
|
||||||
GBI_SKILLLV, // Guild skill_lv ?? seem unused
|
GBI_SKILLLV, // Guild skill_lv ?? seem unused
|
||||||
};
|
};
|
||||||
|
|
||||||
enum { //Change Member Infos
|
enum e_guild_member_info { //Change Member Infos
|
||||||
GMI_POSITION =0,
|
GMI_POSITION =0,
|
||||||
GMI_EXP,
|
GMI_EXP,
|
||||||
GMI_HAIR,
|
GMI_HAIR,
|
||||||
@ -622,7 +623,7 @@ enum e_guild_skill {
|
|||||||
|
|
||||||
|
|
||||||
//These mark the ID of the jobs, as expected by the client. [Skotlex]
|
//These mark the ID of the jobs, as expected by the client. [Skotlex]
|
||||||
enum {
|
enum e_job {
|
||||||
JOB_NOVICE,
|
JOB_NOVICE,
|
||||||
JOB_SWORDMAN,
|
JOB_SWORDMAN,
|
||||||
JOB_MAGE,
|
JOB_MAGE,
|
||||||
@ -780,7 +781,7 @@ enum {
|
|||||||
JOB_MAX,
|
JOB_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum e_sex {
|
||||||
SEX_FEMALE = 0,
|
SEX_FEMALE = 0,
|
||||||
SEX_MALE,
|
SEX_MALE,
|
||||||
SEX_SERVER
|
SEX_SERVER
|
||||||
@ -801,4 +802,11 @@ enum bound_type {
|
|||||||
#error MAX_ZENY is too big
|
#error MAX_ZENY is too big
|
||||||
#endif
|
#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_ */
|
#endif /* _MMO_H_ */
|
||||||
|
@ -87,12 +87,6 @@
|
|||||||
#define MAX_CHAR_BILLING 0
|
#define MAX_CHAR_BILLING 0
|
||||||
#define MAX_CHAR_VIP 0
|
#define MAX_CHAR_VIP 0
|
||||||
#endif
|
#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
|
* No settings past this point
|
||||||
|
@ -1052,7 +1052,7 @@ ACMD_FUNC(jobchange)
|
|||||||
|
|
||||||
if (pcdb_checkid(job))
|
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.
|
clif_displaymessage(fd, msg_txt(sd,12)); // Your job has been changed.
|
||||||
else {
|
else {
|
||||||
clif_displaymessage(fd, msg_txt(sd,155)); // You are unable to change your job.
|
clif_displaymessage(fd, msg_txt(sd,155)); // You are unable to change your job.
|
||||||
|
@ -7830,6 +7830,19 @@ static const struct _battle_data {
|
|||||||
{ "teleport_on_portal", &battle_config.teleport_on_portal, 0, 0, 1, },
|
{ "teleport_on_portal", &battle_config.teleport_on_portal, 0, 0, 1, },
|
||||||
{ "cart_revo_knockback", &battle_config.cart_revo_knockback, 1, 0, 1, },
|
{ "cart_revo_knockback", &battle_config.cart_revo_knockback, 1, 0, 1, },
|
||||||
{ "guild_notice_changemap", &battle_config.guild_notice_changemap, 2, 0, 2, },
|
{ "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
|
#ifndef STATS_OPT_OUT
|
||||||
/**
|
/**
|
||||||
|
@ -540,6 +540,20 @@ extern struct Battle_Config
|
|||||||
int teleport_on_portal;
|
int teleport_on_portal;
|
||||||
int cart_revo_knockback;
|
int cart_revo_knockback;
|
||||||
int guild_notice_changemap;
|
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;
|
} battle_config;
|
||||||
|
|
||||||
void do_init_battle(void);
|
void do_init_battle(void);
|
||||||
|
@ -2590,9 +2590,11 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
|
|||||||
if( sd ) {
|
if( sd ) {
|
||||||
if( sd->mission_mobid == md->mob_id ||
|
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 == 1 && mob_is_goblin(md, sd->mission_mobid) ) ||
|
||||||
( battle_config.taekwon_mission_mobname == 2 && mob_is_samename(md, sd->mission_mobid) ) ) { //TK_MISSION [Skotlex]
|
( battle_config.taekwon_mission_mobname == 2 && mob_is_samename(md, sd->mission_mobid) ) )
|
||||||
if( ++sd->mission_count >= 100 && (temp = mob_get_random_id(0, 0xE, sd->status.base_level)) ) {
|
{ //TK_MISSION [Skotlex]
|
||||||
pc_addfame(sd, 1);
|
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;
|
sd->mission_mobid = temp;
|
||||||
pc_setglobalreg(sd,"TK_MISSION_ID", temp);
|
pc_setglobalreg(sd,"TK_MISSION_ID", temp);
|
||||||
sd->mission_count = 0;
|
sd->mission_count = 0;
|
||||||
|
55
src/map/pc.c
55
src/map/pc.c
@ -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
|
// 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)
|
unsigned char pc_famerank(int char_id, int job)
|
||||||
{
|
{
|
||||||
int i;
|
uint8 i;
|
||||||
|
|
||||||
switch(job){
|
switch(job){
|
||||||
case MAPID_BLACKSMITH: // Blacksmith
|
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;
|
jobexp = b_sd->status.job_exp;
|
||||||
|
|
||||||
job = pc_mapid2jobid(b_sd->class_|JOBL_BABY, b_sd->status.sex);
|
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
|
{ // Success, proceed to configure parents and baby skills
|
||||||
p1_sd->status.child = b_sd->status.char_id;
|
p1_sd->status.child = b_sd->status.char_id;
|
||||||
p2_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) ) {
|
if( pc_has_permission(sd, PC_PERM_ALL_SKILL) ) {
|
||||||
for( i = 0; i < MAX_SKILL; i++ ) {
|
for( i = 0; i < MAX_SKILL; i++ ) {
|
||||||
switch(i) {
|
switch(i) {
|
||||||
@ -1601,7 +1614,7 @@ int pc_calc_skilltree(struct map_session_data *sd)
|
|||||||
}
|
}
|
||||||
} while(flag);
|
} 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
|
/* Taekwon Ranker Bonus Skill Tree
|
||||||
============================================
|
============================================
|
||||||
- Grant All Taekwon Tree, but only as Bonus Skills in case they drop from ranking.
|
- 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;
|
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_setstand(sd);
|
||||||
pc_setrestartvalue(sd,1);
|
pc_setrestartvalue(sd,1);
|
||||||
}
|
}
|
||||||
@ -6542,7 +6555,7 @@ int pc_skillup(struct map_session_data *sd,uint16 skill_id)
|
|||||||
sd->status.skill_point--;
|
sd->status.skill_point--;
|
||||||
if( !skill_get_inf(skill_id) )
|
if( !skill_get_inf(skill_id) )
|
||||||
status_calc_pc(sd,SCO_NONE); // Only recalculate for passive skills.
|
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.
|
pc_calc_skilltree(sd); // Required to grant all TK Ranker skills.
|
||||||
else
|
else
|
||||||
pc_check_skilltree(sd, skill_id); // Check if a new skill can Lvlup
|
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)
|
* 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;
|
return 0;
|
||||||
|
|
||||||
if( pc_checkskill(sd, SG_DEVIL) && !pc_nextjobexp(sd) )
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*==========================================
|
/**
|
||||||
* Called when player changes job
|
* Called when player changes job
|
||||||
* Rewrote to make it tidider [Celest]
|
* Rewrote to make it tidider [Celest]
|
||||||
*------------------------------------------*/
|
* @param sd
|
||||||
int pc_jobchange(struct map_session_data *sd,int job, int upper)
|
* @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;
|
int b_class;
|
||||||
|
|
||||||
nullpo_ret(sd);
|
nullpo_retr(false,sd);
|
||||||
|
|
||||||
if (job < 0)
|
if (job < 0)
|
||||||
return 1;
|
return false;
|
||||||
|
|
||||||
//Normalize job.
|
//Normalize job.
|
||||||
b_class = pc_jobid2mapid(job);
|
b_class = pc_jobid2mapid(job);
|
||||||
if (b_class == -1)
|
if (b_class == -1)
|
||||||
return 1;
|
return false;
|
||||||
switch (upper) {
|
switch (upper) {
|
||||||
case 1:
|
case 1:
|
||||||
b_class|= JOBL_UPPER;
|
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.
|
//That is, if you try to jobchange into dancer, it will turn you to bard.
|
||||||
job = pc_mapid2jobid(b_class, sd->status.sex);
|
job = pc_mapid2jobid(b_class, sd->status.sex);
|
||||||
if (job == -1)
|
if (job == -1)
|
||||||
return 1;
|
return false;
|
||||||
|
|
||||||
if ((unsigned short)b_class == sd->class_)
|
if ((unsigned short)b_class == sd->class_)
|
||||||
return 1; //Nothing to change.
|
return false; //Nothing to change.
|
||||||
|
|
||||||
// changing from 1st to 2nd job
|
// changing from 1st to 2nd job
|
||||||
if ((b_class&JOBL_2) && !(sd->class_&JOBL_2) && (b_class&MAPID_UPPERMASK) != MAPID_SUPER_NOVICE) {
|
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
|
// 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
|
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);
|
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
|
}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
|
// The player already used his bonus points, so we have to reset his status points
|
||||||
pc_resetstate(sd);
|
pc_resetstate(sd);
|
||||||
}
|
}
|
||||||
sd->status.status_point -= 52;
|
sd->status.status_point -= battle_config.transcendent_status_points;
|
||||||
clif_updatestatus(sd,SP_STATUSPOINT);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
|
@ -25,7 +25,6 @@
|
|||||||
#define MAX_PC_SKILL_REQUIRE 5
|
#define MAX_PC_SKILL_REQUIRE 5
|
||||||
#define MAX_PC_FEELHATE 3
|
#define MAX_PC_FEELHATE 3
|
||||||
#define DAMAGELOG_SIZE_PC 100 // Any idea for this value?
|
#define DAMAGELOG_SIZE_PC 100 // Any idea for this value?
|
||||||
#define MAX_PC_BONUS_SCRIPT 20
|
|
||||||
#define MAX_SPIRITBALL 15
|
#define MAX_SPIRITBALL 15
|
||||||
|
|
||||||
//Update this max as necessary. 55 is the value needed for Super Baby currently
|
//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);
|
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_itemheal(struct map_session_data *sd,int itemid, int hp,int sp);
|
||||||
int pc_percentheal(struct map_session_data *sd,int,int);
|
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);
|
void pc_setoption(struct map_session_data *,int);
|
||||||
bool pc_setcart(struct map_session_data* sd, int type);
|
bool pc_setcart(struct map_session_data* sd, int type);
|
||||||
void pc_setfalcon(struct map_session_data* sd, int flag);
|
void pc_setfalcon(struct map_session_data* sd, int flag);
|
||||||
|
@ -8028,13 +8028,13 @@ BUILDIN_FUNC(successrefitem)
|
|||||||
){ // Fame point system [DracoRPG]
|
){ // Fame point system [DracoRPG]
|
||||||
switch (sd->inventory_data[i]->wlv){
|
switch (sd->inventory_data[i]->wlv){
|
||||||
case 1:
|
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;
|
break;
|
||||||
case 2:
|
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;
|
break;
|
||||||
case 3:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
status_change_end(&sd->bl, SC_COMBO, INVALID_TIMER);
|
||||||
return false;
|
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);
|
unit_cancel_combo(&sd->bl);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -15717,13 +15717,13 @@ void skill_weaponrefine (struct map_session_data *sd, int idx)
|
|||||||
{ // Fame point system [DracoRPG]
|
{ // Fame point system [DracoRPG]
|
||||||
switch(ditem->wlv){
|
switch(ditem->wlv){
|
||||||
case 1:
|
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;
|
break;
|
||||||
case 2:
|
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;
|
break;
|
||||||
case 3:
|
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;
|
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_produceeffect(sd,0,nameid);
|
||||||
clif_misceffect(&sd->bl,3);
|
clif_misceffect(&sd->bl,3);
|
||||||
if(itemdb_wlv(nameid) >= 3 && ((ele? 1 : 0) + sc) >= 3) // Fame point system [DracoRPG]
|
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 {
|
} else {
|
||||||
int fame = 0;
|
int fame = 0;
|
||||||
tmp_item.amount = 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.
|
//Add fame as needed.
|
||||||
switch(++sd->potion_success_counter) {
|
switch(++sd->potion_success_counter) {
|
||||||
case 3:
|
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;
|
break;
|
||||||
case 5:
|
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;
|
break;
|
||||||
case 7:
|
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;
|
break;
|
||||||
case 10:
|
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;
|
sd->potion_success_counter = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2575,10 +2575,8 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
|
|||||||
int8 i;
|
int8 i;
|
||||||
|
|
||||||
bonus += sd->bonus.hp;
|
bonus += sd->bonus.hp;
|
||||||
if ((i=pc_checkskill(sd,CR_TRUST)) > 0)
|
if ((i = pc_checkskill(sd,CR_TRUST)) > 0)
|
||||||
bonus += i * 200;
|
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)
|
if ((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE && sd->status.base_level >= 99)
|
||||||
bonus += 2000; // Supernovice lvl99 hp bonus.
|
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%
|
bonus -= 100; //Default hprate is 100, so it should be add 0%
|
||||||
|
|
||||||
//+200% for top ranking Taekwons over level 90.
|
//+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;
|
bonus += 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2719,7 +2717,7 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) {
|
|||||||
bonus += 2 * i;
|
bonus += 2 * i;
|
||||||
|
|
||||||
//+200% for top ranking Taekwons over level 90.
|
//+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;
|
bonus += 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user