예제 #1
0
파일: guild.c 프로젝트: casioza/server000
int guild_send_memberinfoshort(struct map_session_data *sd,int online)
{ // cleaned up [LuzZza]
	struct guild *g;
	
	nullpo_ret(sd);
		
	if(sd->status.guild_id <= 0)
		return 0;

	if(!(g = guild_search(sd->status.guild_id)))
		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){
		int i=guild_getindex(g,sd->status.account_id,sd->status.char_id);
		if(i>=0)
			g->member[i].sd=NULL;
		else
			ShowError("guild_send_memberinfoshort: Failed to locate member %d:%d in guild %d!\n", sd->status.account_id, sd->status.char_id, g->guild_id);
		return 0;
	}
	
	if(sd->state.connect_new)
	{	//Note that this works because it is invoked in parse_LoadEndAck before connect_new is cleared.
		clif_guild_belonginfo(sd,g);
		clif_guild_notice(sd,g);
		sd->guild_emblem_id = g->emblem_id;
	}
	return 0;
}
예제 #2
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;
}
예제 #3
0
int guild_send_memberinfoshort(struct map_session_data *sd,int online)
{ // cleaned up [LuzZza]
	struct guild *g;
	
	nullpo_retr(0, sd);
		
	if(!(g = guild_search(sd->status.guild_id)))
		return 0;

	//Moved to place before intif_guild_memberinfoshort because
	//If it's not a member, needn't send it's info to intif. [LuzZza]
	guild_check_member(g);
	
	if(sd->status.guild_id <= 0)
		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){
		int i=guild_getindex(g,sd->status.account_id,sd->status.char_id);
		if(i>=0)
			g->member[i].sd=NULL;
		return 0;
	}
	
	if(sd->state.guild_sent)
		return 0;

	clif_guild_belonginfo(sd,g);
	clif_guild_notice(sd,g);
	
	sd->state.guild_sent = 1;
	sd->guild_emblem_id = g->emblem_id;
	
	return 0;
}