|
@@ -5392,6 +5392,7 @@ void clif_skillinfoblock(struct map_session_data *sd)
|
|
|
|
|
|
WFIFOHEAD(fd, MAX_SKILL * 37 + 4);
|
|
|
WFIFOW(fd,0) = 0x10f;
|
|
|
+ bool haveCallPartnerSkill = false;
|
|
|
for ( i = 0, len = 4; i < MAX_SKILL; i++)
|
|
|
{
|
|
|
if( (id = sd->status.skill[i].id) != 0 )
|
|
@@ -5399,7 +5400,12 @@ void clif_skillinfoblock(struct map_session_data *sd)
|
|
|
// workaround for bugreport:5348
|
|
|
if (len + 37 > 8192)
|
|
|
break;
|
|
|
-
|
|
|
+
|
|
|
+ // skip WE_CALLPARTNER and send it in special way
|
|
|
+ if (id == WE_CALLPARTNER) {
|
|
|
+ haveCallPartnerSkill = true;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
WFIFOW(fd,len) = id;
|
|
|
WFIFOL(fd,len+2) = skill_get_inf(id);
|
|
|
WFIFOW(fd,len+6) = sd->status.skill[i].lv;
|
|
@@ -5416,10 +5422,16 @@ void clif_skillinfoblock(struct map_session_data *sd)
|
|
|
WFIFOW(fd,2)=len;
|
|
|
WFIFOSET(fd,len);
|
|
|
|
|
|
+ // adoption fix
|
|
|
+ if (haveCallPartnerSkill) {
|
|
|
+ clif_addskill(sd, WE_CALLPARTNER);
|
|
|
+ clif_skillinfo(sd, WE_CALLPARTNER, 0);
|
|
|
+ }
|
|
|
+
|
|
|
// workaround for bugreport:5348; send the remaining skills one by one to bypass packet size limit
|
|
|
for ( ; i < MAX_SKILL; i++)
|
|
|
{
|
|
|
- if( (id = sd->status.skill[i].id) != 0 )
|
|
|
+ if( (id = sd->status.skill[i].id) != 0 && ( id != WE_CALLPARTNER || !haveCallPartnerSkill ) )
|
|
|
{
|
|
|
clif_addskill(sd, id);
|
|
|
clif_skillinfo(sd, id, 0);
|