Added support for 2017's guild leader change
This commit is contained in:
@@ -5999,7 +5999,7 @@ ACMD_FUNC(changegm)
|
||||
return -1;
|
||||
}
|
||||
|
||||
guild_gm_change(sd->status.guild_id, pl_sd);
|
||||
guild_gm_change(sd->status.guild_id, pl_sd->status.char_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -13240,9 +13240,19 @@ void clif_parse_GuildChangeMemberPosition(int fd, struct map_session_data *sd)
|
||||
if(!sd->state.gmaster_flag)
|
||||
return;
|
||||
|
||||
|
||||
// Guild leadership change
|
||||
if( len == 16 && RFIFOL(fd,12) == 0 ){
|
||||
guild_gm_change(sd->status.guild_id, RFIFOL(fd, 8));
|
||||
return;
|
||||
}
|
||||
|
||||
for(i=idxgpos;i<len;i+=12){
|
||||
guild_change_memberposition(sd->status.guild_id,
|
||||
RFIFOL(fd,i),RFIFOL(fd,i+4),RFIFOL(fd,i+8));
|
||||
int position = RFIFOL(fd,i+8);
|
||||
|
||||
if( position > 0 ){
|
||||
guild_change_memberposition(sd->status.guild_id,RFIFOL(fd,i),RFIFOL(fd,i+4),position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1760,22 +1760,29 @@ int guild_broken(int guild_id,int flag) {
|
||||
* @param guild_id
|
||||
* @param sd New guild master
|
||||
*/
|
||||
int guild_gm_change(int guild_id, struct map_session_data *sd) {
|
||||
int guild_gm_change(int guild_id, uint32 char_id) {
|
||||
struct guild *g;
|
||||
nullpo_ret(sd);
|
||||
|
||||
if (sd->status.guild_id != guild_id)
|
||||
return 0;
|
||||
char *name;
|
||||
int i;
|
||||
|
||||
g = guild_search(guild_id);
|
||||
|
||||
nullpo_ret(g);
|
||||
|
||||
if (strcmp(g->master, sd->status.name) == 0) //Nothing to change.
|
||||
ARR_FIND(0, MAX_GUILD, i, g->member[i].char_id == char_id);
|
||||
|
||||
if( i == MAX_GUILD ){
|
||||
// Not part of the guild
|
||||
return 0;
|
||||
}
|
||||
|
||||
name = g->member[i].name;
|
||||
|
||||
if (strcmp(g->master, name) == 0) //Nothing to change.
|
||||
return 0;
|
||||
|
||||
//Notify servers that master has changed.
|
||||
intif_guild_change_gm(guild_id, sd->status.name, strlen(sd->status.name)+1);
|
||||
intif_guild_change_gm(guild_id, name, strlen(name)+1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -1827,6 +1834,7 @@ int guild_gm_changed(int guild_id, uint32 account_id, uint32 char_id) {
|
||||
if( g->member[i].sd && g->member[i].sd->fd ) {
|
||||
clif_guild_basicinfo(g->member[i].sd);
|
||||
clif_guild_memberlist(g->member[i].sd);
|
||||
clif_guild_belonginfo(g->member[i].sd); // Update clientside guildmaster flag
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ int guild_send_dot_remove(struct map_session_data *sd);
|
||||
int guild_skillupack(int guild_id,uint16 skill_id,uint32 account_id);
|
||||
int guild_break(struct map_session_data *sd,char *name);
|
||||
int guild_broken(int guild_id,int flag);
|
||||
int guild_gm_change(int guild_id, struct map_session_data *sd);
|
||||
int guild_gm_change(int guild_id, uint32 char_id);
|
||||
int guild_gm_changed(int guild_id, uint32 account_id, uint32 char_id);
|
||||
|
||||
void guild_castle_map_init(void);
|
||||
|
||||
@@ -10112,7 +10112,7 @@ BUILDIN_FUNC(guildchangegm)
|
||||
if (!sd)
|
||||
script_pushint(st,0);
|
||||
else
|
||||
script_pushint(st,guild_gm_change(guild_id, sd));
|
||||
script_pushint(st,guild_gm_change(guild_id, sd->status.char_id));
|
||||
|
||||
return SCRIPT_CMD_SUCCESS;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user