Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
C++ Структура NpcInfo
#1
Доброго времени суток Smile
Ребят, подскажите.
В моем приложении используется структура пакета S->C NpcInfo
Сейчас она такова.
Код:
struct NpcInfo
{
    int _npcObjId;
    int _npcId;
    int _isAttackable;
    int x;
    int y;
    int z;
    int h;
    int _u1;
    int _mAtkSpd;
    int _pAtkSpd;
    int _runSpd;
    int _walkSpd;
    int _swimRunSpd;
    int _swimWalkSpd;
    int _flRunSpd;
    int _flWalkSpd;
    int _flyRunSpd;
    int _flyWalkSpd;
    double _u2;
    double _pAtkSpd2 /*/ 277.478340719*/;
    double colRadius;
    double colHeight;
    int _rhand;
    int _chest;
    int _lhand;
    char _isNameAbove; // 2.2: name above char 1=true ... ??; 2.3: 1 - normal, 2 - dead
    char running;
    char incombat;
    char dead;
    char _showSpawnAnimation; // invisible ?? 0=false  1=true   2=summoned (only works if model has a summon animation)
    int _nameNpcString;
    std::wstring _name;
    int _titleNpcString;
    std::wstring _title;
    int _titleColor; // 0- светло зеленый титул(моб), 1 - светло синий(пет)/отображение текущего МП
    int pvp_flag;
    int karma; // hmm karma ??
    int _abnormalEffect; // C2
    int clan_id;
    int clan_crest_id;
    int ally_id;
    int ally_crest_id;
    char isFlying; // C2
    char _team; // team aura 1-blue, 2-red
    double currentColRadius; // тут что-то связанное с colRadius
    double currentColHeight; // тут что-то связанное с colHeight
    int _enchantEffect; // C4
    int _u3; // int _npc.isFlying() ? 1 : 0; // C6
    int _u4;
    int _formId;// great wolf type
    char _showName; // show name
    char _showtitle; // show title
    int _abnormalEffect2;
    int _state;
    int _u5; // <-- Transform id
    int _HP;
    int _maxHP;
    int _MP;
    int _maxMP;
    char _u6;    // <-- хз, ниче не меняется
    int _u7;    // <-- хз, ниче не меняется
    int _u8;    // <-- хз, ниче не меняется
    int _u9;    // <-- Что то связаное с петом 65600 (0x00010040). Мб 65536 + лвл
};


Меня интересует, какого типа должен быть _name и _title?
Пробовал wchar_t _name[]; - не работает.
Точнее сохранить имя НПЦ не получается....
П.С. Программа анализирует входящий трафик от сервера к клиенту.
По этой структуре, всё что до имени НПЦ можно нормально использовать. Всё что после - нельзя Sad
Ответ
#2
ALFOS Написал:По этой структуре, всё что до имени НПЦ можно нормально использовать. Всё что после - нельзя Sad

Пакет нужно десериализовать ("разбирать"), просто наложить структуру на память нельзя.
Ответ
#3
PHP код:
<?php 
#include "PacketReader.h"
#include <cstring>

C_PacketReader::C_PacketReader()
{
//Constructor
this->Reset();
}

C_PacketReader::~C_PacketReader()
{
//Destructor
memset(this, 0, sizeof(C_PacketReader));
}

//-----------------------------------------------------------------------

void C_PacketReader::SetPointer(const char * const c_Pointer)
{
this->c_Packet = c_Pointer;
}

const
char *C_PacketReader::GetPointer()
{
return
this->c_Packet;
}

//-----------------------------------------------------------------------

void C_PacketReader::SetPosition(const unsigned short h_Position)
{
this->h_Position = h_Position;
}

unsigned short C_PacketReader::GetPosition()
{
return
this->h_Position;
}

//-----------------------------------------------------------------------

void C_PacketReader::Reset()
{
memset(this, 0, sizeof(C_PacketReader));
this->SetPosition(0);
}

//-----------------------------------------------------------------------

long long C_PacketReader::ReadL()
{
int _size = sizeof(this->c_Packet)/sizeof(this->c_Packet[0]);
long long * const l_RetVal = (long long * const) &this->c_Packet[this->h_Position];

if (
this->c_Packet == 0 ) { return 0; }

if ( (
this->h_Position + 8) <= _size)
{
this->h_Position += 8;
return *
l_RetVal;
}

return
0;
}

double C_PacketReader::ReadF()
{
double * const d_RetVal = (double * const) &this->c_Packet[this->h_Position];
this->h_Position += 8;
return *
d_RetVal;
}

int C_PacketReader::ReadD()
{
int * const i_RetVal = (int * const) &this->c_Packet[this->h_Position];
this->h_Position += 4;
return *
i_RetVal;
}

/*float C_PacketReader::ReadF()
{
int _size = sizeof(this->c_Packet)/sizeof(this->c_Packet[0]);
float * const i_RetVal = (float * const) &this->c_Packet[this->h_Position];

if ( this->c_Packet == 0 ) { return 0; }

if ( (this->h_Position + 4) <= _size)
{
this->h_Position += 4;
return *i_RetVal;
}

return 0;
}*/

short C_PacketReader::ReadH()
{
int _size = sizeof(this->c_Packet)/sizeof(this->c_Packet[0]);
short * const h_RetVal = (short * const) &this->c_Packet[this->h_Position];

if (
this->c_Packet == 0 ) { return 0; }

if ( (
this->h_Position + 2) <= _size)
{
this->h_Position += 2;
return *
h_RetVal;
}

return
0;
}

char C_PacketReader::ReadC()
{
char * const c_RetVal = (char * const) &this->c_Packet[this->h_Position];
this->h_Position += 1;
return *
c_RetVal;
}

void C_PacketReader::ReadB(char * const c_Buffer, const unsigned int i_Size)
{
int _size = sizeof(this->c_Packet)/sizeof(this->c_Packet[0]);

if (
this->c_Packet == 0 ) { return; }

if ( (
this->h_Position + i_Size) <= _size)
{
memcpy(&c_Buffer[0], &this->c_Packet[this->h_Position], i_Size);
this->h_Position += i_Size;
}
}

std::wstring C_PacketReader::ReadS()
{
std::wstring s_Ret = L"";

if (
this->c_Packet == 0 ) { return L""; }

while ( (
short)this->c_Packet[this->h_Position] != 0)
{
s_Ret += (short)this->c_Packet[this->h_Position];

this->h_Position += 2;
}

this->h_Position += 2;

return
s_Ret;
}

Сделал как то так)
Ответ
#4
c_Packet имеет тип const char *

Вот тут ошибка:
while ( (short)this->c_Packet[this->h_Position] != 0)

С нулём сравнивается однобайтовое (char) значение.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Структура пакета SystemMsg (531 Lindvior) Alay 0 1,271 02-12-2017, 11:24 AM
Последний пост: Alay
  Структура сборок серверов MalPorro 42 8,005 12-19-2014, 12:38 PM
Последний пост: DiagoD
  Структура пакета Mousepro 7 3,212 04-02-2014, 03:51 PM
Последний пост: Mousepro
  Структура пакетов. Drack 5 2,191 06-15-2012, 10:19 PM
Последний пост: [STIGMATED]

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)