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

winrare

Новичок
75
1
А ты уверен, что он будет существовать и для пикапа не стоит проверка на вирт. мир?
Не уверен. Ну ладно, значит никак.

Есть ещё вопрос. Как сервер определяет, что я встал на маркер? С пикапом понятно, я отправляю пакет с его id. А вот исходящих пакетов с маркерами я в списке пакетов (который в events.lua) не нашел.
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,696
1,468
Это значит то, что сервер проверяет твою позицию с позицией маркера в определенном радиусе.
 
  • Нравится
Реакции: winrare

NarutoUA

NarutoUA
BH Team
692
1,549
что нужно сделать что-бы выстрел пуль не были видны при отправке пуль
визуально выстрел пули не видны, а если смотреть со стороны то выстрел пули видны

float vect3_null[3] = { 0.0f, 0.0f, 0.0f };
g_RakClient->SendFakeBulletSyncData(&self->base.matrix[12], vect3_null, &self->base.matrix[12], 0, -1);

void RakClient::SendFakeBulletSyncData(float aimHit[3], float bodyPos[3], float hitPos[3], BYTE hitType, uint16_t id)
{
stBulletData bSync;
ZeroMemory(&bSync, sizeof(bSync));
BitStream bsBulletSync;
bSync.fOrigin[0] = aimHit[0];
bSync.fOrigin[1] = aimHit[1];
bSync.fOrigin[2] = aimHit[2];
bSync.fCenter[0] = bodyPos[0];
bSync.fCenter[1] = bodyPos[1];
bSync.fCenter[2] = bodyPos[2];
bSync.fTarget[0] = hitPos[0];
bSync.fTarget[1] = hitPos[1];
bSync.fTarget[2] = hitPos[2];
bSync.byteType = hitType;
bSync.sTargetID = id;
bSync.byteWeaponID = g_Players->pLocalPlayer->byteCurrentWeapon;
bsBulletSync.Write((BYTE)ID_BULLET_SYNC);
bsBulletSync.Write((PCHAR)&bSync, sizeof(stBulletData));
g_RakClient->Send(&bsBulletSync, HIGH_PRIORITY, UNRELIABLE_SEQUENCED, 0);
}
А ты думаешь, что пули с твоего компьютера летят прямо в другой комп?
 
  • Ха-ха
Реакции: Ya Zaregalsya

winrare

Новичок
75
1
Как в C++ использовать скрипты на Lua? Погуглил, все советуют разное, кто-то LuaBridge, кто-то swig. Что все-таки лучше использовать?
 

winrare

Новичок
75
1
Собственно назревает вопрос. Нахуя?
Есть класс описывающий игрока. Игроков много, каждый должен выполнять разные задачи. Удобнее это сделать, через скриптовый язык. У каждого игрока должен быть свой скрипт на Lua. Вызов определенных методов игрока должен вызывать соответствующие коллбэки в Lua. И наоборот, вызов определенных функций в Lua, должен вызывать методы в классе. Так я смогу легко прописать логику каждому игроку.
 

444555

Новичок
24
5
Есть класс описывающий игрока. Игроков много, каждый должен выполнять разные задачи. Удобнее это сделать, через скриптовый язык. У каждого игрока должен быть свой скрипт на Lua. Вызов определенных методов игрока должен вызывать соответствующие коллбэки в Lua. И наоборот, вызов определенных функций в Lua, должен вызывать методы в классе. Так я смогу легко прописать логику каждому игроку.
я так и не понял, зачем вызывать колбеки в луа, если можно вызывать их в плюсах
 

winrare

Новичок
75
1
я так и не понял, зачем вызывать колбеки в луа, если можно вызывать их в плюсах
Затем, что у меня много различных поведений для игроков. Каждый из них должен по разному реагировать на вызов колбека. Если я буду вызывать колбэки в луа, то у меня будет один универсальный класс для всех игроков, и у каждого игрока будет свой особый скрипт. Если же все писать в плюсах, то в каждом колбэке придется пихать код для всех типов игроков. Что-то типа switch(тип игрока) и 100 кейсов для каждого типа. И так в каждом колбеке. Лютый говнокод получится.
 

444555

Новичок
24
5
Указатели и их переменные выглядят вот так:
C:
int dpId;
byte dS;
TCHAR title;
TCHAR descr;
TCHAR b1;
TCHAR b2;
int *dpIdP = &dpId;
byte *dSP = &dS;
TCHAR *titleP = &title;
TCHAR *descrP = &descr;
TCHAR *b1P = &b1;
TCHAR *b2P = &b2;
Вот так выглядит функция, которая использует один из указателей:
C:
bool CALLBACK OP(stRakNetHookParams *params)
{
   if (params->packetId == 61)
   {   
     params->bitStream->Read(*dpIdP);
     params->bitStream->Read(*dSP);
     params->bitStream->Read(*titleP);
     params->bitStream->Read(*descrP);
     params->bitStream->Read(*b1P);
     params->bitStream->Read(*b2P);
     SF->getSAMP()->getChat()->AddChatMessage(444444,*dpIdP);
    }
}
Вот так выглядит ошибка:
Код:
невозможно преобразовать аргумент 2 из "int" в "const char *"
Как вывести в чат сообщение через bool callback (хук), используя указатель на переменную вместо переменной?
Примечательно то, что если выводить не указатель а саму переменную, вывод будет нормальный не смотря на то что он не const char, однако в случае с указателем как раз на это ссылается студия.

И главный вопрос. В чём конкретно я ошибся?
 
Последнее редактирование:

BlackKnigga

Известный
BH Team
922
446
Указатели и их переменные выглядят вот так:
C:
int dpId;
byte dS;
TCHAR title;
TCHAR descr;
TCHAR b1;
TCHAR b2;
int *dpIdP = &dpId;
byte *dSP = &dS;
TCHAR *titleP = &title;
TCHAR *descrP = &descr;
TCHAR *b1P = &b1;
TCHAR *b2P = &b2;
Вот так выглядит функция, которая использует один из указателей:
C:
bool CALLBACK OP(stRakNetHookParams *params)
{
   if (params->packetId == 61)
   {  
     params->bitStream->Read(*dpIdP);
     params->bitStream->Read(*dSP);
     params->bitStream->Read(*titleP);
     params->bitStream->Read(*descrP);
     params->bitStream->Read(*b1P);
     params->bitStream->Read(*b2P);
     SF->getSAMP()->getChat()->AddChatMessage(444444,*dpIdP);
    }
}
Вот так выглядит ошибка:
Код:
невозможно преобразовать аргумент 2 из "int" в "const char *"
Как вывести в чат сообщение через bool callback (хук), используя указатель на переменную вместо переменной?
Примечательно то, что если выводить не указатель а саму переменную, вывод будет нормальный не смотря на то что он не const char, однако в случае с указателем как раз на это ссылается студия.

И главный вопрос. В чём конкретно я ошибся?
А зачем все это извращение?