Jump to content
  • 0
Sign in to follow this  
thairoinfo

tomb delay after mvp death

Question

3 answers to this question

Recommended Posts

  • 0

Can i ask why ? :o

 

Anyway, you need to add a timer on the function that spawn the tomb there is nothing more to say :)

 

Note: You can also change your MvP to be "script spawned" and deal with the tomb in a customized way. But the source edit seems easier and faster :)

Share this post


Link to post
Share on other sites
  • 0

Note: I have no idea if this will work, because of the st struct.

 

src/map/npc.c:

 

// MvP tomb [GreenBox]
void run_tomb(struct map_session_data* sd, struct npc_data* nd) {
    char buffer[200];
    char time[10];
 
    nullpo_retv(nd);
    strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time));
 
    // TODO: Find exact color?
    snprintf(buffer, sizeof(buffer), msg_sd(sd,857), nd->u.tomb.md->db->name); // "[ ^EE0000%s^000000 ]"
    clif->scriptmes(sd, nd->bl.id, buffer);
 
    clif->scriptmes(sd, nd->bl.id, msg_sd(sd,858)); // "Has met its demise"
 
    snprintf(buffer, sizeof(buffer), msg_sd(sd,859), time); // "Time of death : ^EE0000%s^000000"
    clif->scriptmes(sd, nd->bl.id, buffer);
 
    clif->scriptmes(sd, nd->bl.id, msg_sd(sd,860)); // "Defeated by"
 
    snprintf(buffer, sizeof(buffer), msg_sd(sd,861), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : msg_sd(sd,15)); // "[^EE0000%s^000000]" / "Unknown"
    clif->scriptmes(sd, nd->bl.id, buffer);
 
    clif->scriptclose(sd, nd->bl.id);

To:
// MvP tomb [GreenBox]
void run_tomb(struct map_session_data* sd, struct npc_data* nd) {
	char buffer[200];
	char time[10];

	nullpo_retv(nd);
	strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time));

	st->state = RERUNLINE;
	st->sleep.tick = 5000;

	// TODO: Find exact color?
	snprintf(buffer, sizeof(buffer), msg_sd(sd,857), nd->u.tomb.md->db->name); // "[ ^EE0000%s^000000 ]"
	clif->scriptmes(sd, nd->bl.id, buffer);

	clif->scriptmes(sd, nd->bl.id, msg_sd(sd,858)); // "Has met its demise"

	snprintf(buffer, sizeof(buffer), msg_sd(sd,859), time); // "Time of death : ^EE0000%s^000000"
	clif->scriptmes(sd, nd->bl.id, buffer);

	clif->scriptmes(sd, nd->bl.id, msg_sd(sd,860)); // "Defeated by"

	snprintf(buffer, sizeof(buffer), msg_sd(sd,861), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : msg_sd(sd,15)); // "[^EE0000%s^000000]" / "Unknown"
	clif->scriptmes(sd, nd->bl.id, buffer);

	clif->scriptclose(sd, nd->bl.id);
}
Edited by Omnipotent

Share this post


Link to post
Share on other sites
  • 0

tomb is spawned too fast that may issues when player picks an item


I found this source in rathena's git

 

but i don't know how to adapt into Herc one

 


/**
 * 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
 * @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]
 */
void mvptomb_create(struct mob_data *md, char *killer, time_t time)
{
	struct npc_data *nd;

	if ( md->tomb_nid )
		mvptomb_destroy(md);

	CREATE(nd, struct npc_data, 1);

	nd->bl.id = md->tomb_nid = npc_get_new_npc_id();

	nd->ud.dir = md->ud.dir;
	nd->bl.m = md->bl.m;
	nd->bl.x = md->bl.x;
	nd->bl.y = md->bl.y;
	nd->bl.type = BL_NPC;

	safestrncpy(nd->name, msg_txt(NULL,656), sizeof(nd->name));

	nd->class_ = 565;
	nd->speed = 200;
	nd->subtype = NPCTYPE_TOMB;

	nd->u.tomb.md = md;
	nd->u.tomb.kill_time = time;
	nd->u.tomb.spawn_timer = INVALID_TIMER;

	if (killer)
		safestrncpy(nd->u.tomb.killer_name, killer, NAME_LENGTH);
	else
		nd->u.tomb.killer_name[0] = '\0';

	map_addnpc(nd->bl.m, nd);
	if(map_addblock(&nd->bl))
		return;
	status_set_viewdata(&nd->bl, nd->class_);
	status_change_init(&nd->bl);
	unit_dataset(&nd->bl);

	mvptomb_setdelayspawn(nd);
}

 

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.