Другое С/С++ Вопрос - Ответ

BlackKnigga

Известный
BH Team
922
443
Я знаю, что есть в PlayerSync. Я же говорю, я не могу получить свой PlayerSync. Я его должен САМ заполнить и отправить серверу. И отправлять примерно раз в 40мс. Единственный способ узнать какую анимацию мне присвоил сервер, это получить РПЦ.
Можешь хукать свой исходящий player_sync
 

winrare

Новичок
75
1
Можешь хукать свой исходящий player_sync
Я все это делаю в RakSAMP,е, я сам должен заполнять свой PlayerSync, если я его не заполню данными о своей анимации (которые я должен получить из РПЦ), то просто отправлю нулевой ид анимации.
 

BlackKnigga

Известный
BH Team
922
443
Я все это делаю в RakSAMP,е, я сам должен заполнять свой PlayerSync, если я его не заполню данными о своей анимации (которые я должен получить из РПЦ), то просто отправлю нулевой ид анимации.
Lua:
INCOMING_RPCS[RPC.APPLYANIMATION]             = {'onApplyPlayerAnimation', {playerId = 'int16'}, {animLib = 'string8'}, {animName = 'string8'}, {loop = 'bool'}, {lockX = 'bool'}, {lockY = 'bool'}, {freeze = 'bool'}, {time = 'int32'}}
Из samp.lua
 

winrare

Новичок
75
1
Lua:
INCOMING_RPCS[RPC.APPLYANIMATION]             = {'onApplyPlayerAnimation', {playerId = 'int16'}, {animLib = 'string8'}, {animName = 'string8'}, {loop = 'bool'}, {lockX = 'bool'}, {lockY = 'bool'}, {freeze = 'bool'}, {time = 'int32'}}
Из samp.lua
Я в первом посте написал, что взял структуру пакета из samp.lua, но у меня неправильно считываются булевы параметры.
Как получить все данные из пакета ApplyAnimation? В RakSAMP,е функции обработки этого пакета нет. Попробовал сделать порядок считывания данных как в events.lua.
В итоге все нормально считывается, кроме четырех булевых значений: loop, lockX, lockY, freeze. Они считываются неправильно, причем они все одновременно либо true, либо false. Если вместо четырех считываний bool сделать одно BYTE, то по первым 4 битам этого байта можно определить значения, но тогда неправильно считывается time. По идее можно все четыре булевых значения и время записать в один int, а потом его разобрать по битам, но это неудобно. Может есть вариант проще или я что-то не правильно делаю?
 

winrare

Новичок
75
1
Нашел решение проблемы, оказалось что у BitStream есть метод ReadBit, который считывает ровно один бит и записывает его в bool. Вот рабочий код.
C++:
WORD playerId;

BYTE animLibLenght;
char animLib[257];

BYTE animNameLenght;
char animName[257];

float delta;

bool loop, lockX, lockY, freeze;

WORD time;


bsData.Read(playerId);

bsData.Read(animLibLenght);
bsData.Read(animLib, animLibLenght);
animLib[animLibLenght] = '\0';

bsData.Read(animNameLenght);
bsData.Read(animName, animNameLenght);
animName[animNameLenght] = '\0';

bsData.Read(delta);

loop = bsData.ReadBit();
lockX = bsData.ReadBit();
lockY = bsData.ReadBit();
freeze = bsData.ReadBit();

bsData.Read(time);
 
  • Нравится
Реакции: Ya Zaregalsya

MrYurkoo

Известный
102
9
Может кто-нибудь подсказать код для SAMP'a, который отвечает за выключение NameTag'ов над головой персонажа?
 

ishi

Известный
493
110
пытаюсь использовать указатель на строку вместо самой строки, но не работает - игра крашит
как исправить?
C++:
bool CALLBACK Present(CONST RECT *pSourceRect, CONST RECT *pDestRect, HWND hDestWindowOverride,
   CONST RGNDATA *pDirtyRegion)
{
   if (SUCCEEDED(SF->getRender()->BeginRender()))
   {
     char sstring;
     char* pointer1 = &sstring;
     strcat(pointer1, "wtf ");
     //int watafakerNumbaVan = rand();
     //int secondMistaHellwin = rand();
     //printf(pointerToStringForRenderBlenderBenderSenderblamberflambermbermbermbermber, "%d", watafakerNumbaVan);
     //printf(pointerToStringForRenderBlenderBenderSenderblamberflambermbermbermbermber, "%d", secondMistaHellwin);
     pFont->Print(pointer1, D3DCOLOR_ARGB(117, 0, 92, 0), 700, 0, false);
     SF->getRender()->EndRender();
   };

   return true;
};
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Ну во первых - char может хранить только 1 символ.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Массив создаст размером 144 байта
 
  • Нравится
Реакции: ishi

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Советую юзать std::string
Код:
std::string str = "wtf";
 pFont->Print(str.c_str(), D3DCOLOR_ARGB(117, 0, 92, 0), 700, 0);
 
  • Нравится
Реакции: ishi

ishi

Известный
493
110
Как сделать unregister колбека dx? (в эпи почему-то только регистрация)