struct view_data *merc_get_viewdata(int class_) { int i = merc_search_index(class_); if(i < 0) return 0; return &mercenary_db[i].vd; }
int merc_create(struct map_session_data *sd, int class_, unsigned int lifetime) { struct s_mercenary merc; struct s_mercenary_db *db; int i; nullpo_retr(0,sd); if( sd->sc.data[SC__GROOMY] ) return 0; if( (i = merc_search_index(class_)) < 0 ) return 0; db = &mercenary_db[i]; memset(&merc,0,sizeof(struct s_mercenary)); merc.char_id = sd->status.char_id; merc.class_ = class_; merc.hp = db->status.max_hp; merc.sp = db->status.max_sp; merc.life_time = lifetime; // Request Char Server to create this mercenary intif_mercenary_create(&merc); return 1; }
int merc_data_received(struct s_mercenary *merc, bool flag) { struct map_session_data *sd; struct mercenary_data *md; struct s_mercenary_db *db; int i = merc_search_index(merc->class_); if((sd = map_charid2sd(merc->char_id)) == NULL) return 0; if(!flag || i < 0) { // Not created - loaded - DB info sd->status.mer_id = 0; return 0; } db = &mercenary_db[i]; if(!sd->md) { sd->md = md = (struct mercenary_data *)aCalloc(1,sizeof(struct mercenary_data)); md->bl.type = BL_MER; md->bl.id = npc_get_new_npc_id(); md->devotion_flag = 0; md->master = sd; md->db = db; memcpy(&md->mercenary, merc, sizeof(struct s_mercenary)); status_set_viewdata(&md->bl, md->mercenary.class_); status_change_init(&md->bl); unit_dataset(&md->bl); md->ud.dir = sd->ud.dir; md->bl.m = sd->bl.m; md->bl.x = sd->bl.x; md->bl.y = sd->bl.y; unit_calc_pos(&md->bl, sd->bl.x, sd->bl.y, sd->ud.dir); md->bl.x = md->ud.to_x; md->bl.y = md->ud.to_y; map_addiddb(&md->bl); status_calc_mercenary(md,1); md->contract_timer = INVALID_TIMER; merc_contract_init(md); } else { memcpy(&sd->md->mercenary, merc, sizeof(struct s_mercenary)); md = sd->md; } if(sd->status.mer_id == 0) mercenary_set_calls(md, 1); sd->status.mer_id = merc->mercenary_id; if(md && md->bl.prev == NULL && sd->bl.prev != NULL) { map_addblock(&md->bl); clif_spawn(&md->bl); clif_mercenary_info(sd); clif_mercenary_skillblock(sd); } return 1; }
bool merc_class(int class_) { return (bool)(merc_search_index(class_) > -1); }