Max szint->céh hiba (m)

Started by 5310pati, 2015-07-08, 22:12:06

2015-07-08, 22:12:06 Last Edit: 2015-07-08, 22:16:50 by 5310pati
Max szintet sikerült növelnem 255 fölé

de amikor csinálok 1 céhet levág a kliens
syserr:0708 22:06:19288 :: Unknown packet header: 93, last: 75 75
szerver és kliens oldalon is átírtam a Guild-hoz tartozó BYTE típusú változókat int-re, de nem akar működni, valamint nem találok 93-as headert a packet.h-ban
mi lehet a gond?

edit: ahogy kitörlöm a karaktert navicatban a céhből egyből visszaenged

HEADER_GC_GUILD = 75,

Mindig az utolsó két szám árulja el a hiba miben- és hollétét, nem az első.
Biztosan kimaradt valahol valami. :)

szóval ezért nem találtam a headert :D   ???
mindjárt megnézem akkor :D
az már biztos, hogy kliens mivel ha nem vagyok céhben felenged rendesen

Hát akkor kliens ha bezáródik, de ha csak kidob, akkor a szerver a gyanús.

2015-07-09, 16:24:12 #4 Last Edit: 2015-07-09, 17:37:12 by 5310pati
hát a betöltő csík után dob ki, félhomályosan kezdem látni a mapot és utána
ha naviban törlöm a céhet és a karaktert a guild_members-ből akkor felenged rendesen

edit: nem találom mi okozhatja, újból átírogattam a cuccokat de még mindig
0709 17:36:19818 :: Unknown packet header: 93, last: 75 75

Igazából anno mikor én megemeltem magamnak a maximum szintet, hasonló problémák jöttek elő, de csak  céhnél. Nekem ugyan nem záródott be a kliens (lehet mivel kivettem hogy packethibánál ne záródjon be ;) ), viszont egyéb problémák felmerültek (nem látszódtak emberek a minimappon, stb, mint az packethibánál előfordulhat). Végül egy jó időre hagytam a fenébe, aztán egyre jobban kezdett zavarni, hogy a játékosok szintje a céhben 255 felett 0ról kezdődik, így jobban belemélyültem a dolgokba, és láttam, hogy a GUILD_SUBHEADER_GC_LIST küldése során nem structúrálisan, hanem "összebarmolva" küldi a csomagot.

Na de egy szó mint száz, elküldöm az én funkcióimat:

http://pastebin.com/MigsFjsU

Mindegyik a guild.cpp-ben található.

Ezen kívül a packet.h-ban:
typedef struct SGuildMemberPacketData
{   
DWORD pid;
BYTE grade;
BYTE is_general;
BYTE job;
int level;
DWORD offer;
BYTE name_flag;
//char name[CHARACTER_NAME_MAX_LEN+1];
} TGuildMemberPacketData;


A szint változó típusát majd ne felejtsd el átírni arra amit te használsz (nekem az int bőven elég volt).

Kliensben pedig így néz ki a packet feldolgozása:

PythonNetworkStreamPhaseGame.cpp rákeresel a következő case-re: GUILD_SUBHEADER_GC_LIST és felülírod:
case GUILD_SUBHEADER_GC_LIST:
{
int iPacketSize = int(GuildPacket.size) - sizeof(GuildPacket);

for (; iPacketSize > 0;)
{
TPacketGCGuildSubMember memberPacket;
if (!Recv(sizeof(memberPacket), &memberPacket))
return false;

char szName[CHARACTER_NAME_MAX_LEN+1] = "";
if (memberPacket.byNameFlag)
{
if (!Recv(sizeof(szName), &szName))
return false;

iPacketSize -= CHARACTER_NAME_MAX_LEN+1;
}
else
{
CPythonGuild::TGuildMemberData * pMemberData;
if (CPythonGuild::Instance().GetMemberDataPtrByPID(memberPacket.pid, &pMemberData))
{
strncpy(szName, pMemberData->strName.c_str(), CHARACTER_NAME_MAX_LEN);
}
}

//Tracef(" <List> %d : %s, %d (%d, %d, %d)\n", memberPacket.pid, szName, memberPacket.byGrade, memberPacket.byJob, memberPacket.byLevel, memberPacket.dwOffer);

CPythonGuild::SGuildMemberData GuildMemberData;
GuildMemberData.dwPID = memberPacket.pid;
GuildMemberData.byGrade = memberPacket.byGrade;
GuildMemberData.strName = szName;
GuildMemberData.byJob = memberPacket.byJob;
GuildMemberData.byLevel = memberPacket.byLevel;
GuildMemberData.dwOffer = memberPacket.dwOffer;
GuildMemberData.byGeneralFlag = memberPacket.byIsGeneral;
CPythonGuild::Instance().RegisterMember(GuildMemberData);

// Messenger
if (strcmp(szName, CPythonPlayer::Instance().GetName()))
CPythonMessenger::Instance().AppendGuildMember(szName);

__RefreshTargetBoardByName(szName);

iPacketSize -= sizeof(memberPacket);
}

__RefreshGuildWindowInfoPage();
__RefreshGuildWindowMemberPage();
__RefreshMessengerWindow();
__RefreshCharacterWindow();
break;
}


Hozzá tartozó struct: (packet.h)
typedef struct packet_guild_sub_member
{
DWORD pid;
BYTE byGrade;
BYTE byIsGeneral;
BYTE byJob;
int byLevel;
DWORD dwOffer;
BYTE byNameFlag;
// if NameFlag is TRUE, name is sent from server.
// char szName[CHARACTER_ME_MAX_LEN+1];
} TPacketGCGuildSubMember;


Itt se felejtsd el átírni a változó típusát, nekem szintén int ez is.

Nem állítom hogy nálad is ez a gond, de nagyon valószínű, egy próbát megér ;)
Ha nem látod a válaszom, valamit elrontottál:

2015-07-09, 17:55:37 #6 Last Edit: 2015-07-09, 18:13:16 by 5310pati
hát ezeket nagyjából megcsináltam, kivéve azt a PythonNetworkStreamPhaseGame-es cuccot
de mindjárt kipróbálom, hogy úgy mit csinál

Üzenet összefésülés: 2015-07-09, 18:13:16

ISTEN VAGY  ;D :o

mehet archívum, mert valahol láttam 1 másik topicban is ezt a hibát/bugot