Пример #1
0
struct view_data *merc_get_viewdata(int class_) {
    int i = merc_search_index(class_);
    if(i < 0)
        return 0;

    return &mercenary_db[i].vd;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
bool merc_class(int class_)
{
	return (bool)(merc_search_index(class_) > -1);
}