Example #1
0
int guild_send_memberinfoshort(struct map_session_data *sd,int online)
{
	struct guild *g;
	int  i;
	
	nullpo_retr(0, sd);

	if(sd->status.guild_id<=0)
		return 0;
	g=guild_search(sd->status.guild_id);
	if(g==NULL)
		return 0;

	intif_guild_memberinfoshort(g->guild_id,
		sd->status.account_id,sd->status.char_id,online,sd->status.base_level,sd->status.class_);

	if( !online ){	// ログアウトするならsdをクリアして終了
		i=guild_getindex(g,sd->status.account_id,sd->status.char_id);
		if(i>=0)
			g->member[i].sd=NULL;
		return 0;
	} else if (sd->fd) {
		//Send XY dot updates. [Skotlex]
		for(i=0; i < MAX_GUILD; i++) {
			if (!g->member[i].sd || g->member[i].sd == sd ||
				g->member[i].sd->bl.m != sd->bl.m)
				continue;
			clif_guild_xy_single(sd->fd, g->member[i].sd);
		}
	}

	if( sd->state.guild_sent!=0 )	// ギルド初期送信データは送信済み
		return 0;

	// 競合確認
	guild_check_conflict(sd);

	// あるならギルド初期送信データ送信
	guild_check_member(g);	// 所属を確認する
	if(sd->status.guild_id==g->guild_id){
		clif_guild_belonginfo(sd,g);
		clif_guild_notice(sd,g);
		sd->state.guild_sent=1;
		sd->guild_emblem_id=g->emblem_id;
	}
	return 0;
}
Example #2
0
int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int online,int lv,int class_)
{ // cleaned up [LuzZza]
	
	int i,alv,c,idx=-1,om=0,oldonline=-1;
	struct guild *g = guild_search(guild_id);
	
	if(g == NULL)
		return 0;
	
	for(i=0,alv=0,c=0,om=0;i<g->max_member;i++){
		struct guild_member *m=&g->member[i];
		if(!m->account_id) continue;
		if(m->account_id==account_id && m->char_id==char_id ){
			oldonline=m->online;
			m->online=online;
			m->lv=lv;
			m->class_=class_;
			idx=i;
		}
		alv+=m->lv;
		c++;
		if(m->online)
			om++;
	}
	
	if(idx == -1 || c == 0) {
		// ギルドのメンバー外なので追放扱いする
		struct map_session_data *sd = map_id2sd(account_id);
		if(sd && sd->status.char_id == char_id) {
			sd->status.guild_id=0;
			sd->guild_emblem_id=0;
		}
		ShowWarning("guild: not found member %d,%d on %d[%s]\n",	account_id,char_id,guild_id,g->name);
		return 0;
	}
	
	g->average_lv=alv/c;
	g->connect_member=om;

	//Ensure validity of pointer (ie: player logs in/out, changes map-server)
	g->member[idx].sd = guild_sd_check(guild_id, account_id, char_id);

	if(oldonline!=online) 
		clif_guild_memberlogin_notice(g, idx, online);
	
	if(!g->member[idx].sd)
		return 0;

	//Send XY dot updates. [Skotlex]
	//Moved from guild_send_memberinfoshort [LuzZza]
	for(i=0; i < g->max_member; i++) {
		
		if(!g->member[i].sd || i == idx ||
			g->member[i].sd->bl.m != g->member[idx].sd->bl.m)
			continue;

		clif_guild_xy_single(g->member[idx].sd->fd, g->member[i].sd);
		clif_guild_xy_single(g->member[i].sd->fd, g->member[idx].sd);
	}

	return 0;
}
Example #3
0
int guild_recv_memberinfoshort(int guild_id,int account_id,int char_id,int online,int lv,int class_)
{ // cleaned up [LuzZza]
	
	int i,alv,c,idx=-1,om=0,oldonline=-1;
	struct guild *g = guild_search(guild_id);
	
	if(g == NULL)
		return 0;
	
	for(i=0,alv=0,c=0,om=0;i<g->max_member;i++){
		struct guild_member *m=&g->member[i];
		if(m->account_id==account_id && m->char_id==char_id ){
			oldonline=m->online;
			m->online=online;
			m->lv=lv;
			m->class_=class_;
			idx=i;
		}
		if(m->account_id>0){
			alv+=m->lv;
			c++;
		}
		if(m->online)
			om++;
	}
	
	if(idx == -1 || c == 0) {
		// ギルドのメンバー外なので追放扱いする
		struct map_session_data *sd = map_id2sd(account_id);
		if(sd && sd->char_id == char_id) {
			sd->status.guild_id=0;
			sd->guild_emblem_id=0;
			sd->state.guild_sent=0;
		}
		if(battle_config.error_log)
			ShowWarning("guild: not found member %d,%d on %d[%s]\n",	account_id,char_id,guild_id,g->name);
		return 0;
	}
	
	g->average_lv=alv/c;
	g->connect_member=om;

	for(i=0;i<g->max_member;i++) {
		struct map_session_data *sd= map_id2sd(g->member[i].account_id);
		g->member[i].sd = (sd && sd->status.char_id == g->member[i].char_id &&
			sd->status.guild_id == g->guild_id && !sd->state.waitingdisconnect) ? sd : NULL;
	}
	
	if(oldonline!=online) 
		clif_guild_memberlogin_notice(g, idx, online);
	

	if(!g->member[idx].sd)
		return 0;

	//Send XY dot updates. [Skotlex]
	//Moved from guild_send_memberinfoshort [LuzZza]
	for(i=0; i < MAX_GUILD; i++) {
		
		if(!g->member[i].sd || i == idx ||
			g->member[i].sd->bl.m != g->member[idx].sd->bl.m)
			continue;

		clif_guild_xy_single(g->member[idx].sd->fd, g->member[i].sd);
	}			

	return 0;
}