Added support for 2017's guild leader change

This commit is contained in:
Lemongrass3110
2017-06-03 17:03:56 +02:00
parent 52ac564215
commit b51617cb73
5 changed files with 30 additions and 12 deletions

View File

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

View File

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

View File

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

View File

@@ -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);

View File

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