Corrected MVP Tomb behavior (fixes #1429)
* On Aegis there is a 9~ second delay before the tomb is spawned.
This commit is contained in:
parent
bec9845499
commit
160f24d66a
@ -228,6 +228,10 @@ mob_slave_keep_target: yes
|
|||||||
// See http://irowiki.org/wiki/MVP#Gravestone
|
// See http://irowiki.org/wiki/MVP#Gravestone
|
||||||
mvp_tomb_enabled: yes
|
mvp_tomb_enabled: yes
|
||||||
|
|
||||||
|
// Delay before the MVP tomb is spawned.
|
||||||
|
// Default: 9 seconds
|
||||||
|
mvp_mob_delay: 9000
|
||||||
|
|
||||||
// Whether or not the size of specially summoned mobs influences experience, drop rates,
|
// Whether or not the size of specially summoned mobs influences experience, drop rates,
|
||||||
// and stats. The rates will be doubled for large mobs, and halved for small ones.
|
// and stats. The rates will be doubled for large mobs, and halved for small ones.
|
||||||
// This is only invoked under the 'monster' command, @monsterbig, and @monstersmall. (Note 1)
|
// This is only invoked under the 'monster' command, @monsterbig, and @monstersmall. (Note 1)
|
||||||
|
@ -8229,6 +8229,7 @@ static const struct _battle_data {
|
|||||||
{ "max_summoner_parameter", &battle_config.max_summoner_parameter, 120, 10, SHRT_MAX, },
|
{ "max_summoner_parameter", &battle_config.max_summoner_parameter, 120, 10, SHRT_MAX, },
|
||||||
{ "skill_amotion_leniency", &battle_config.skill_amotion_leniency, 0, 0, 300 },
|
{ "skill_amotion_leniency", &battle_config.skill_amotion_leniency, 0, 0, 300 },
|
||||||
{ "mvp_tomb_enabled", &battle_config.mvp_tomb_enabled, 1, 0, 1 },
|
{ "mvp_tomb_enabled", &battle_config.mvp_tomb_enabled, 1, 0, 1 },
|
||||||
|
{ "mvp_tomb_delay", &battle_config.mvp_tomb_delay, 9000, 0, INT_MAX, },
|
||||||
{ "feature.atcommand_suggestions", &battle_config.atcommand_suggestions_enabled, 0, 0, 1 },
|
{ "feature.atcommand_suggestions", &battle_config.atcommand_suggestions_enabled, 0, 0, 1 },
|
||||||
{ "min_npc_vendchat_distance", &battle_config.min_npc_vendchat_distance, 3, 0, 100 },
|
{ "min_npc_vendchat_distance", &battle_config.min_npc_vendchat_distance, 3, 0, 100 },
|
||||||
{ "atcommand_mobinfo_type", &battle_config.atcommand_mobinfo_type, 0, 0, 1 },
|
{ "atcommand_mobinfo_type", &battle_config.atcommand_mobinfo_type, 0, 0, 1 },
|
||||||
|
@ -513,6 +513,7 @@ extern struct Battle_Config
|
|||||||
int vcast_stat_scale;
|
int vcast_stat_scale;
|
||||||
|
|
||||||
int mvp_tomb_enabled;
|
int mvp_tomb_enabled;
|
||||||
|
int mvp_tomb_delay;
|
||||||
|
|
||||||
int atcommand_suggestions_enabled;
|
int atcommand_suggestions_enabled;
|
||||||
int min_npc_vendchat_distance;
|
int min_npc_vendchat_distance;
|
||||||
|
@ -139,12 +139,44 @@ static int mobdb_searchname_array_sub(struct mob_db* mob, const char *str)
|
|||||||
return strcmpi(mob->jname,str);
|
return strcmpi(mob->jname,str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tomb spawn time calculations
|
||||||
|
* @param nd: NPC data
|
||||||
|
*/
|
||||||
|
int mvptomb_setdelayspawn(struct npc_data *nd) {
|
||||||
|
if (nd->u.tomb.spawn_timer != INVALID_TIMER)
|
||||||
|
delete_timer(nd->u.tomb.spawn_timer, mvptomb_delayspawn);
|
||||||
|
nd->u.tomb.spawn_timer = add_timer(gettick() + battle_config.mvp_tomb_delay, mvptomb_delayspawn, nd->bl.id, 0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tomb spawn with delay (timer function)
|
||||||
|
* @param tid: Timer ID
|
||||||
|
* @param tick: Time
|
||||||
|
* @param id: Block list ID
|
||||||
|
* @param data: Used for add_timer_func_list
|
||||||
|
*/
|
||||||
|
int mvptomb_delayspawn(int tid, unsigned int tick, int id, intptr_t data) {
|
||||||
|
struct npc_data *nd = BL_CAST(BL_NPC, map_id2bl(id));
|
||||||
|
|
||||||
|
if (nd) {
|
||||||
|
if (nd->u.tomb.spawn_timer != tid) {
|
||||||
|
ShowError("mvptomb_delayspawn: Timer mismatch: %d != %d\n", tid, nd->u.tomb.spawn_timer);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
nd->u.tomb.spawn_timer = INVALID_TIMER;
|
||||||
|
clif_spawn(&nd->bl);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create and display a tombstone on the map
|
* Create and display a tombstone on the map
|
||||||
|
* @param md: the mob to create a tombstone for
|
||||||
|
* @param killer: name of player who killed the mob
|
||||||
|
* @param time: time of mob's death
|
||||||
* @author [GreenBox]
|
* @author [GreenBox]
|
||||||
* @param md : the mob to create a tombstone for
|
|
||||||
* @param killer : name of who has killed the mob
|
|
||||||
* @param time : time at wich the killed happen
|
|
||||||
*/
|
*/
|
||||||
void mvptomb_create(struct mob_data *md, char *killer, time_t time)
|
void mvptomb_create(struct mob_data *md, char *killer, time_t time)
|
||||||
{
|
{
|
||||||
@ -171,6 +203,7 @@ void mvptomb_create(struct mob_data *md, char *killer, time_t time)
|
|||||||
|
|
||||||
nd->u.tomb.md = md;
|
nd->u.tomb.md = md;
|
||||||
nd->u.tomb.kill_time = time;
|
nd->u.tomb.kill_time = time;
|
||||||
|
nd->u.tomb.spawn_timer = INVALID_TIMER;
|
||||||
|
|
||||||
if (killer)
|
if (killer)
|
||||||
safestrncpy(nd->u.tomb.killer_name, killer, NAME_LENGTH);
|
safestrncpy(nd->u.tomb.killer_name, killer, NAME_LENGTH);
|
||||||
@ -183,13 +216,14 @@ void mvptomb_create(struct mob_data *md, char *killer, time_t time)
|
|||||||
status_set_viewdata(&nd->bl, nd->class_);
|
status_set_viewdata(&nd->bl, nd->class_);
|
||||||
status_change_init(&nd->bl);
|
status_change_init(&nd->bl);
|
||||||
unit_dataset(&nd->bl);
|
unit_dataset(&nd->bl);
|
||||||
clif_spawn(&nd->bl);
|
|
||||||
|
|
||||||
|
mvptomb_setdelayspawn(nd);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Destroys MVP Tomb
|
/**
|
||||||
* @param md
|
* Destroys MVP Tomb
|
||||||
*/
|
* @param md: Mob data
|
||||||
|
*/
|
||||||
void mvptomb_destroy(struct mob_data *md) {
|
void mvptomb_destroy(struct mob_data *md) {
|
||||||
struct npc_data *nd;
|
struct npc_data *nd;
|
||||||
|
|
||||||
@ -5026,6 +5060,7 @@ void do_init_mob(void){
|
|||||||
add_timer_func_list(mob_timer_delete,"mob_timer_delete");
|
add_timer_func_list(mob_timer_delete,"mob_timer_delete");
|
||||||
add_timer_func_list(mob_spawn_guardian_sub,"mob_spawn_guardian_sub");
|
add_timer_func_list(mob_spawn_guardian_sub,"mob_spawn_guardian_sub");
|
||||||
add_timer_func_list(mob_respawn,"mob_respawn");
|
add_timer_func_list(mob_respawn,"mob_respawn");
|
||||||
|
add_timer_func_list(mvptomb_delayspawn,"mvptomb_delayspawn");
|
||||||
add_timer_interval(gettick()+MIN_MOBTHINKTIME,mob_ai_hard,0,0,MIN_MOBTHINKTIME);
|
add_timer_interval(gettick()+MIN_MOBTHINKTIME,mob_ai_hard,0,0,MIN_MOBTHINKTIME);
|
||||||
add_timer_interval(gettick()+MIN_MOBTHINKTIME*10,mob_ai_lazy,0,0,MIN_MOBTHINKTIME*10);
|
add_timer_interval(gettick()+MIN_MOBTHINKTIME*10,mob_ai_lazy,0,0,MIN_MOBTHINKTIME*10);
|
||||||
}
|
}
|
||||||
|
@ -353,6 +353,8 @@ int mob_clone_delete(struct mob_data *md);
|
|||||||
void mob_reload(void);
|
void mob_reload(void);
|
||||||
|
|
||||||
// MvP Tomb System
|
// MvP Tomb System
|
||||||
|
int mvptomb_setdelayspawn(struct npc_data *nd);
|
||||||
|
int mvptomb_delayspawn(int tid, unsigned int tick, int id, intptr_t data);
|
||||||
void mvptomb_create(struct mob_data *md, char *killer, time_t time);
|
void mvptomb_create(struct mob_data *md, char *killer, time_t time);
|
||||||
void mvptomb_destroy(struct mob_data *md);
|
void mvptomb_destroy(struct mob_data *md);
|
||||||
|
|
||||||
|
@ -88,6 +88,7 @@ struct npc_data {
|
|||||||
struct mob_data *md;
|
struct mob_data *md;
|
||||||
time_t kill_time;
|
time_t kill_time;
|
||||||
char killer_name[NAME_LENGTH];
|
char killer_name[NAME_LENGTH];
|
||||||
|
int spawn_timer;
|
||||||
} tomb;
|
} tomb;
|
||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user