Тогда уж на curl + openssl писать, как раз под си, но все апи придется самому реализовывать, параллельно читая доку к бот апи тг. Как по мне, легче взять готовое, отработанное решение, чем городить лясопедыМужики все делают на TCP 😎
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
Все инструкции есть в репозитории. Ставь WSL с ubuntu какой-нибудь и на ней собирайПриветствую, пытаюсь собрать загрузчик состоящих из двух частей - серверной и клиентской, с клиентской стороны все нормально клиент лоадер собран, а вот с серверной возникли проблемы, собрал директорию с помощью cmake, далее пытался собрать sln решение, но как мне подсказал интернет оно написано для linux -
Как мне быть? Скачать образ и накатить на виртуальную машину? Или собрать через Windows Subsystem for Linux? Какого формата будет скомпилированный файл и как его запустить на локалке?C++:#include <arpa/inet.h> #include <netdb.h> #include <netinet/in.h> #include <sys/socket.h> #include <sys/types.h> #include <unistd.h>
Или я движусь совсем не в том направлении? Типо как мне собрать sln файл на линукс (этого я не понимаю) если там 2к ошибок, что-то не так явно
Сурс (https://github.com/EquiNoxAdv/loader-master)
Хук на WndProcКак проверить, была ли отпущена определённая клавиша? Например: wasKeyReleased(vkeys.VK_RBUTTON)
RakNet::BitStream bs;
bs.ResetWritePointer();
Synchronization::OnfootData onfootData{};
std::memcpy(&onfootData,
&RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_onfootData,
sizeof(Synchronization::OnfootData));
onfootData.m_controllerState.m_bPedWalk = 1;
onfootData.m_controllerState.m_value = static_cast<uint8_t>(1024);
bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
onfootData.m_controllerState.m_bPedWalk = 0;
onfootData.m_controllerState.m_value = static_cast<uint8_t>(0);
bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = 0;
input[0].ki.dwFlags = KEYEVENTF_SCANCODE;
input[0].ki.wScan = 0x38;
input[1].type = INPUT_KEYBOARD;
input[1].ki.wVk = 0;
input[1].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
input[1].ki.wScan = 0x38;
SendInput(2, input, sizeof(INPUT));
ратку опять кинь, прожмется алтАльт как прожать? Так не воркает:
А так прожимает только 1 раз + ко всему - костыльС++:RakNet::BitStream bs; bs.ResetWritePointer(); Synchronization::OnfootData onfootData{}; std::memcpy(&onfootData, &RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_onfootData, sizeof(Synchronization::OnfootData)); onfootData.m_controllerState.m_bPedWalk = 1; onfootData.m_controllerState.m_value = static_cast<uint8_t>(1024); bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC)); bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData)); rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1); onfootData.m_controllerState.m_bPedWalk = 0; onfootData.m_controllerState.m_value = static_cast<uint8_t>(0); bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC)); bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData)); rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
C++:input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = 0; input[0].ki.dwFlags = KEYEVENTF_SCANCODE; input[0].ki.wScan = 0x38; input[1].type = INPUT_KEYBOARD; input[1].ki.wVk = 0; input[1].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; input[1].ki.wScan = 0x38; SendInput(2, input, sizeof(INPUT));
забыл? тебе в тг написали ты кинул свой твинк и с него типу ратку кинулиКакую ратку?
В тему с заказами зайди, там много весело "неактуально", а потом - я сменил ТГ юз, ушел в работу в реальной жизни. ТГ юз занял идиот который заскамил типов, попросив обратно ТГ юз - он отказал. В итоге скамит и по сей день, к этому я не имею никакого отношениязабыл? тебе в тг написали ты кинул свой твинк и с него типу ратку кинули
Актуально, парни, помогите кликнуть злой альт на Радмире. 215 пакет не отправляется от клиента (при нажатии альта его просто нет - вход в квартиру)Альт как прожать? Так не воркает:
А так прожимает только 1 раз + ко всему - костыльС++:RakNet::BitStream bs; bs.ResetWritePointer(); Synchronization::OnfootData onfootData{}; std::memcpy(&onfootData, &RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_onfootData, sizeof(Synchronization::OnfootData)); onfootData.m_controllerState.m_bPedWalk = 1; onfootData.m_controllerState.m_value = static_cast<uint8_t>(1024); bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC)); bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData)); rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1); onfootData.m_controllerState.m_bPedWalk = 0; onfootData.m_controllerState.m_value = static_cast<uint8_t>(0); bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC)); bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData)); rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
C++:input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = 0; input[0].ki.dwFlags = KEYEVENTF_SCANCODE; input[0].ki.wScan = 0x38; input[1].type = INPUT_KEYBOARD; input[1].ki.wVk = 0; input[1].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; input[1].ki.wScan = 0x38; SendInput(2, input, sizeof(INPUT));
Актуально, как на синхре прожимать альт? Или я что то не так делаю? Вроде же m_value - это specialKey?Альт как прожать? Так не воркает:
А так прожимает только 1 раз + ко всему - костыльС++:RakNet::BitStream bs; bs.ResetWritePointer(); Synchronization::OnfootData onfootData{}; std::memcpy(&onfootData, &RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_onfootData, sizeof(Synchronization::OnfootData)); onfootData.m_controllerState.m_bPedWalk = 1; onfootData.m_controllerState.m_value = static_cast<uint8_t>(1024); bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC)); bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData)); rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1); onfootData.m_controllerState.m_bPedWalk = 0; onfootData.m_controllerState.m_value = static_cast<uint8_t>(0); bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC)); bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData)); rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
C++:input[0].type = INPUT_KEYBOARD; input[0].ki.wVk = 0; input[0].ki.dwFlags = KEYEVENTF_SCANCODE; input[0].ki.wScan = 0x38; input[1].type = INPUT_KEYBOARD; input[1].ki.wVk = 0; input[1].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP; input[1].ki.wScan = 0x38; SendInput(2, input, sizeof(INPUT));
m_value - short (16 бит), а я кастил к uint8_t, т.е.Актуально, как на синхре прожимать альт? Или я что то не так делаю? Вроде же m_value - это specialKey?
for (int i = 0; i < objectsPool->m_nSize; i++) {
CBuilding* obj = objectsPool->GetAt(i);
}
static RpAtomic* atomic_callback(RpAtomic* atomic, void* obj) {
if (atomic->geometry) {
atomic->geometry->flags |= rpGEOMETRYMODULATEMATERIALCOLOR;
RpGeometryForAllMaterials(atomic->geometry, material_callback, obj);
}
return atomic;
}
static RpMaterial* material_callback(RpMaterial* material, void* obj)
{
if (!material || !material->texture)
return material;
material->color.blue = 255;
material->color.red = 0;
material->color.green = 0;
return material;
}
CCustomBuildingPipeline::CustomPipeAtomicSetupкакая функция в гта отвечает за рендер build-object? типо пробывал CEntity::Render оно онли игроков с машинами, или же при
C++:for (int i = 0; i < objectsPool->m_nSize; i++) { CBuilding* obj = objectsPool->GetAt(i); } static RpAtomic* atomic_callback(RpAtomic* atomic, void* obj) { if (atomic->geometry) { atomic->geometry->flags |= rpGEOMETRYMODULATEMATERIALCOLOR; RpGeometryForAllMaterials(atomic->geometry, material_callback, obj); } return atomic; } static RpMaterial* material_callback(RpMaterial* material, void* obj) { if (!material || !material->texture) return material; material->color.blue = 255; material->color.red = 0; material->color.green = 0; return material; }
и при попытке передать в atomic_callback крашит