Exemplo n.º 1
0
int guild_member_withdraw(int guild_id, int account_id, int char_id, int flag, const char* name, const char* mes)
{
	int i;
	struct guild* g = guild_search(guild_id);
	struct map_session_data* sd = map_charid2sd(char_id);
	struct map_session_data* online_member_sd;

	if(g == NULL)
		return 0; // no such guild (error!)
	
	i = guild_getindex(g, account_id, char_id);
	if( i == -1 )
		return 0; // not a member (inconsistency!)

	online_member_sd = guild_getavailablesd(g);
	if(online_member_sd == NULL)
		return 0; // noone online to inform

	if(!flag)
		clif_guild_leave(online_member_sd, name, mes);
	else
		clif_guild_expulsion(online_member_sd, name, mes, account_id);

	// remove member from guild
	memset(&g->member[i],0,sizeof(struct guild_member));
	clif_guild_memberlist(online_member_sd);

	// update char, if online
	if(sd != NULL && sd->status.guild_id == guild_id)
	{
		// do stuff that needs the guild_id first, BEFORE we wipe it
		if (sd->state.storage_flag == 2) //Close the guild storage.
			storage_guild_storageclose(sd);
		guild_send_dot_remove(sd);

		sd->status.guild_id = 0;
		sd->guild_emblem_id = 0;
		
		clif_charnameupdate(sd); //Update display name [Skotlex]
		//TODO: send emblem update to self and people around
	}
	return 0;
}
Exemplo n.º 2
0
int guild_member_leaved(int guild_id,int account_id,int char_id,int flag,
	const char *name,const char *mes) // rewrote [LuzZza]
{
	int i;
	struct guild *g = guild_search(guild_id);
	struct map_session_data *sd = map_charid2sd(char_id);
	struct map_session_data *online_member_sd;

	if(g == NULL)
		return 0;
	
	for(i=0;i<g->max_member;i++) {
		if( g->member[i].account_id == account_id &&
			g->member[i].char_id == char_id ){

				if((online_member_sd = guild_getavailablesd(g)) == NULL)
					return 0;

				if(!flag)
					clif_guild_leave(online_member_sd, name, mes);
				else
					clif_guild_expulsion(online_member_sd, name, mes, account_id);

				memset(&g->member[i],0,sizeof(struct guild_member));
				clif_guild_memberlist(online_member_sd);

				if(sd != NULL && sd->status.guild_id == guild_id) {
					if (sd->state.storage_flag == 2) //Close the guild storage.
						storage_guild_storageclose(sd);
					sd->status.guild_id=0;
					sd->guild_emblem_id=0;
					sd->state.guild_sent=0;
					
					guild_send_dot_remove(sd);
					clif_charnameupdate(sd); //Update display name [Skotlex]
				}
				return 0;
		}
					
	}

	return 0;
}