/** * Make a player resurect an homon (player must have one) * @param sd : player pointer * @param per : hp percentage to revive homon * @param x : x map coordinate * @param y : Y map coordinate * @return 0:failure, 1:success */ int hom_ressurect(struct map_session_data* sd, unsigned char per, short x, short y) { struct homun_data* hd; nullpo_ret(sd); if (!sd->status.hom_id) return 0; // no homunculus if (!sd->hd) //Load homun data; return intif_homunculus_requestload(sd->status.account_id, sd->status.hom_id); hd = sd->hd; if (hd->homunculus.vaporize == HOM_ST_REST) return 0; // vaporized homunculi need to be 'called' if (!status_isdead(&hd->bl)) return 0; // already alive hom_init_timers(hd); if (!hd->bl.prev) { //Add it back to the map. hd->bl.m = sd->bl.m; hd->bl.x = x; hd->bl.y = y; if(map_addblock(&hd->bl)) return 0; clif_spawn(&hd->bl); } return status_revive(&hd->bl, per, 0); }
int merc_resurrect_homunculus(struct map_session_data* sd, unsigned char per, short x, short y) { struct homun_data* hd; nullpo_ret(sd); if (!sd->status.hom_id) return 0; // no homunculus if( map[sd->bl.m].flag.ancient ) return 0; // Cannot revive homunculus on Ancient WoE if (!sd->hd) //Load homun data; return intif_homunculus_requestload(sd->status.account_id, sd->status.hom_id); hd = sd->hd; if (hd->homunculus.vaporize) return 0; // vaporized homunculi need to be 'called' if (!status_isdead(&hd->bl)) return 0; // already alive merc_hom_init_timers(hd); if (!hd->bl.prev) { //Add it back to the map. hd->bl.m = sd->bl.m; hd->bl.x = x; hd->bl.y = y; map_addblock(&hd->bl); clif_spawn(&hd->bl); } status_revive(&hd->bl, per, 0); return 1; }
int bg_member_respawn(struct map_session_data *sd) { // Respawn after killed struct battleground_data *bg; if( sd == NULL || !pc_isdead(sd) || !sd->bg_id || (bg = bg_team_search(sd->bg_id)) == NULL ) return 0; if( bg->mapindex == 0 ) return 0; // Respawn not handled by Core pc_setpos(sd, bg->mapindex, bg->x, bg->y, CLR_OUTSIGHT); status_revive(&sd->bl, 1, 100); return 1; // Warped }