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; }
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; }