Added support for 2016's guild packets
Thanks to @mrdiablo for his help.
This commit is contained in:
parent
c212b2ed05
commit
9412ebb9f7
@ -403,8 +403,8 @@ struct guild * inter_guild_fromsql(int guild_id)
|
||||
}
|
||||
|
||||
// load guild member info
|
||||
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `account_id`,`char_id`,`hair`,`hair_color`,`gender`,`class`,`lv`,`exp`,`exp_payper`,`online`,`position`,`name` "
|
||||
"FROM `%s` WHERE `guild_id`='%d' ORDER BY `position`", schema_config.guild_member_db, guild_id) )
|
||||
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `m`.`account_id`,`m`.`char_id`,`m`.`hair`,`m`.`hair_color`,`m`.`gender`,`m`.`class`,`m`.`lv`,`m`.`exp`,`m`.`exp_payper`,`m`.`online`,`m`.`position`,`m`.`name`,coalesce(UNIX_TIMESTAMP(`c`.`last_login`),0) "
|
||||
"FROM `%s` `m` INNER JOIN `%s` `c` on `c`.`char_id`=`m`.`char_id` WHERE `m`.`guild_id`='%d' ORDER BY `position`", schema_config.guild_member_db, schema_config.char_db, guild_id) )
|
||||
{
|
||||
Sql_ShowDebug(sql_handle);
|
||||
aFree(g);
|
||||
@ -428,6 +428,7 @@ struct guild * inter_guild_fromsql(int guild_id)
|
||||
if( m->position >= MAX_GUILDPOSITION ) // Fix reduction of MAX_GUILDPOSITION [PoW]
|
||||
m->position = MAX_GUILDPOSITION - 1;
|
||||
Sql_GetData(sql_handle, 11, &data, &len); memcpy(m->name, data, zmin(len, NAME_LENGTH));
|
||||
Sql_GetData(sql_handle, 12, &data, NULL); m->last_login = atoi(data);
|
||||
m->modified = GS_MEMBER_UNMODIFIED;
|
||||
}
|
||||
|
||||
|
@ -571,6 +571,7 @@ struct guild_member {
|
||||
char name[NAME_LENGTH];
|
||||
struct map_session_data *sd;
|
||||
unsigned char modified;
|
||||
uint32 last_login;
|
||||
};
|
||||
|
||||
struct guild_position {
|
||||
|
@ -8219,9 +8219,17 @@ void clif_guild_masterormember(struct map_session_data *sd)
|
||||
/// Guild basic information (Territories [Valaris])
|
||||
/// 0150 <guild id>.L <level>.L <member num>.L <member max>.L <exp>.L <max exp>.L <points>.L <honor>.L <virtue>.L <emblem id>.L <name>.24B <master name>.24B <manage land>.16B (ZC_GUILD_INFO)
|
||||
/// 01b6 <guild id>.L <level>.L <member num>.L <member max>.L <exp>.L <max exp>.L <points>.L <honor>.L <virtue>.L <emblem id>.L <name>.24B <master name>.24B <manage land>.16B <zeny>.L (ZC_GUILD_INFO2)
|
||||
/// 0a84 <guild id>.L <level>.L <member num>.L <member max>.L <exp>.L <max exp>.L <points>.L <honor>.L <virtue>.L <emblem id>.L <name>.24B <manage land>.16B <zeny>.L <master char id>.L (ZC_GUILD_INFO3)
|
||||
void clif_guild_basicinfo(struct map_session_data *sd) {
|
||||
int fd;
|
||||
struct guild *g;
|
||||
#if PACKETVER < 20160622
|
||||
int cmd = 0x1b6;
|
||||
int offset = NAME_LENGTH;
|
||||
#else
|
||||
int cmd = 0xa84;
|
||||
int offset = 0;
|
||||
#endif
|
||||
|
||||
nullpo_retv(sd);
|
||||
fd = sd->fd;
|
||||
@ -8229,8 +8237,8 @@ void clif_guild_basicinfo(struct map_session_data *sd) {
|
||||
if( (g = sd->guild) == NULL )
|
||||
return;
|
||||
|
||||
WFIFOHEAD(fd,packet_len(0x1b6));
|
||||
WFIFOW(fd, 0)=0x1b6;//0x150;
|
||||
WFIFOHEAD(fd,packet_len(cmd));
|
||||
WFIFOW(fd, 0)=cmd;
|
||||
WFIFOL(fd, 2)=g->guild_id;
|
||||
WFIFOL(fd, 6)=g->guild_lv;
|
||||
WFIFOL(fd,10)=g->connect_member;
|
||||
@ -8243,12 +8251,16 @@ void clif_guild_basicinfo(struct map_session_data *sd) {
|
||||
WFIFOL(fd,38)=0; // Virtue: (down) Wicked [-100,100] Righteous (up)
|
||||
WFIFOL(fd,42)=g->emblem_id;
|
||||
safestrncpy(WFIFOCP(fd,46),g->name, NAME_LENGTH);
|
||||
#if PACKETVER < 20160622
|
||||
safestrncpy(WFIFOCP(fd,70),g->master, NAME_LENGTH);
|
||||
#endif
|
||||
safestrncpy(WFIFOCP(fd,70+offset),msg_txt(sd,300+guild_checkcastles(g)),16); // "'N' castles"
|
||||
WFIFOL(fd,70+offset+16) = 0; // zeny
|
||||
#if PACKETVER >= 20160622
|
||||
WFIFOL(fd,70+offset+20) = g->member[0].char_id; // leader
|
||||
#endif
|
||||
|
||||
safestrncpy(WFIFOCP(fd,94),msg_txt(sd,300+guild_checkcastles(g)),16); // "'N' castles"
|
||||
WFIFOL(fd,110) = 0; // zeny
|
||||
|
||||
WFIFOSET(fd,packet_len(0x1b6));
|
||||
WFIFOSET(fd,packet_len(cmd));
|
||||
}
|
||||
|
||||
|
||||
@ -8280,18 +8292,27 @@ void clif_guild_allianceinfo(struct map_session_data *sd)
|
||||
}
|
||||
|
||||
|
||||
/// Guild member manager information (ZC_MEMBERMGR_INFO).
|
||||
/// 0154 <packet len>.W { <account>.L <char id>.L <hair style>.W <hair color>.W <gender>.W <class>.W <level>.W <contrib exp>.L <state>.L <position>.L <memo>.50B <name>.24B }*
|
||||
/// Guild member manager information
|
||||
/// 0154 <packet len>.W { <account>.L <char id>.L <hair style>.W <hair color>.W <gender>.W <class>.W <level>.W <contrib exp>.L <state>.L <position>.L <memo>.50B <name>.24B }* (ZC_MEMBERMGR_INFO)
|
||||
/// state:
|
||||
/// 0 = offline
|
||||
/// 1 = online
|
||||
/// memo:
|
||||
/// probably member's self-introduction (unused, no client UI/packets for editing it)
|
||||
/// 0aa5 <packet len>.W { <account>.L <char id>.L <hair style>.W <hair color>.W <gender>.W <class>.W <level>.W <contrib exp>.L <state>.L <position>.L }* (ZC_MEMBERMGR_INFO2)
|
||||
void clif_guild_memberlist(struct map_session_data *sd)
|
||||
{
|
||||
int fd;
|
||||
int i,c;
|
||||
struct guild *g;
|
||||
#if PACKETVER < 20161026
|
||||
int cmd = 0x154;
|
||||
int size = 104;
|
||||
#else
|
||||
int cmd = 0xaa5;
|
||||
int size = 34;
|
||||
#endif
|
||||
|
||||
nullpo_retv(sd);
|
||||
|
||||
if( (fd = sd->fd) == 0 )
|
||||
@ -8299,27 +8320,31 @@ void clif_guild_memberlist(struct map_session_data *sd)
|
||||
if( (g = sd->guild) == NULL )
|
||||
return;
|
||||
|
||||
WFIFOHEAD(fd, g->max_member * 104 + 4);
|
||||
WFIFOW(fd, 0)=0x154;
|
||||
WFIFOHEAD(fd, g->max_member * size + 4);
|
||||
WFIFOW(fd, 0)=cmd;
|
||||
for(i=0,c=0;i<g->max_member;i++){
|
||||
struct guild_member *m=&g->member[i];
|
||||
if(m->account_id==0)
|
||||
continue;
|
||||
WFIFOL(fd,c*104+ 4)=m->account_id;
|
||||
WFIFOL(fd,c*104+ 8)=m->char_id;
|
||||
WFIFOW(fd,c*104+12)=m->hair;
|
||||
WFIFOW(fd,c*104+14)=m->hair_color;
|
||||
WFIFOW(fd,c*104+16)=m->gender;
|
||||
WFIFOW(fd,c*104+18)=m->class_;
|
||||
WFIFOW(fd,c*104+20)=m->lv;
|
||||
WFIFOL(fd,c*104+22)=(int)cap_value(m->exp,0,INT32_MAX);
|
||||
WFIFOL(fd,c*104+26)=m->online;
|
||||
WFIFOL(fd,c*104+30)=m->position;
|
||||
memset(WFIFOP(fd,c*104+34),0,50); //[Ind] - This is displayed in the 'note' column but being you can't edit it it's sent empty.
|
||||
safestrncpy(WFIFOCP(fd,c*104+84),m->name,NAME_LENGTH);
|
||||
WFIFOL(fd,c*size+ 4)=m->account_id;
|
||||
WFIFOL(fd,c*size+ 8)=m->char_id;
|
||||
WFIFOW(fd,c*size+12)=m->hair;
|
||||
WFIFOW(fd,c*size+14)=m->hair_color;
|
||||
WFIFOW(fd,c*size+16)=m->gender;
|
||||
WFIFOW(fd,c*size+18)=m->class_;
|
||||
WFIFOW(fd,c*size+20)=m->lv;
|
||||
WFIFOL(fd,c*size+22)=(int)cap_value(m->exp,0,INT32_MAX);
|
||||
WFIFOL(fd,c*size+26)=m->online;
|
||||
WFIFOL(fd,c*size+30)=m->position;
|
||||
#if PACKETVER < 20161026
|
||||
memset(WFIFOP(fd,c*size+34),0,50); //[Ind] - This is displayed in the 'note' column but being you can't edit it it's sent empty.
|
||||
safestrncpy(WFIFOCP(fd,c*size+84),m->name,NAME_LENGTH);
|
||||
#else
|
||||
WFIFOL(fd,c*size+34)=m->last_login;
|
||||
#endif
|
||||
c++;
|
||||
}
|
||||
WFIFOW(fd, 2)=c*104+4;
|
||||
WFIFOW(fd, 2)=c*size+4;
|
||||
WFIFOSET(fd,WFIFOW(fd,2));
|
||||
}
|
||||
|
||||
@ -19560,6 +19585,21 @@ void packetdb_readdb(bool reload)
|
||||
-1, 0, 0, 26, 0, 0, 0, 0, 14, 2, 23, 2, -1, 2, 3, 2,
|
||||
21, 3, 5, 0, 66, 0, 0, 8, 3, 0, 0, -1, 0, -1, 0, 0,
|
||||
106, 0, 0, 0, 0, 4, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
//#0x0A40
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
//#0x0A80
|
||||
0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
//#0x0AC0
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //0x0AFF is currently defined as maximum
|
||||
};
|
||||
struct {
|
||||
void (*func)(int, struct map_session_data *);
|
||||
|
Loading…
x
Reference in New Issue
Block a user