Parameters: UINT32 length, char[] commandtextHow to hook the outcomimg RPC_ServerCommamd?
bool CALLBACK OutRPC(stRakNetHookParams *params)
{
if (params->packetId == RPCEnumeration::RPC_ServerCommand) {
}
return true;
}
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_RPC, OutRPC);
How to hook the outcomimg RPC_ServerCommamd?
bool CALLBACK outcomingRPC(stRakNetHookParams* params)
{
if (params->packetId == RPCEnumeration::RPC_ServerCommand)
{
DWORD commandlength; char commandtext[228];
params->bitStream->ResetReadPointer();
params->bitStream->Read(commandlength);
params->bitStream->Read(commandtext, commandlength);
params->bitStream->ResetReadPointer();
commandtext[commandlength] = 0;
if (!strcmp(commandtext, "text"))
{
//action
}
};
return true;
}
//to !init in mainloop
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_RPC, OutRPC);
https://github.com/BrunoBM16/samp-packet-list/wiki[QUOTE = "cakebou, post: 348810, member: 128690"] DWORD commandlength; char commandtext [228]; params-> bitStream-> ResetReadPointer (); params-> bitStream-> Read (commandlength); params-> bitStream-> Read (commandtext, commandlength); params-> bitStream-> ResetReadPointer (); commandtext [commandlength] = 0; [/ QUOTE]
Where do you take this variables from?
в таком случае файл не выгрузился или используется другой программойПоявилась проблема: после выгрузки плагина (pfree), загрузить его обратно (pload) невозможно, так же как и перекомпилировать, мол "файл уже открыт где-то".
В самом плагине лишь 3 дополнительных потока и ImGui, всё это закрывается/выгружается в SF->getGame()->registerGameDestructorCallback.
В консоле пишет что выгрузило :( В чём может быть проблема? Неверно поток закрыт?в таком случае файл не выгрузился или используется другой программой
возможноВ консоле пишет что выгрузило :( В чём может быть проблема? Неверно поток закрыт?
else if (SF->getGame()->getCurrentState() == CHEAT_STATE_VEHICLE)
{
sprintf(buf, " [%.2f, %.2f, %.2f]",
SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3],
SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3 + 1],
SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3 + 2]);
mainFont->Print(buf, -1, 1.0f, (float)GetSystemMetrics(SM_CYSCREEN) - 20);
}
ничего не понятно по твоему куску кодакрашит игру сразу после того как вылез с тачки
C++:else if (SF->getGame()->getCurrentState() == CHEAT_STATE_VEHICLE) { sprintf(buf, " [%.2f, %.2f, %.2f]", SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3], SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3 + 1], SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3 + 2]); mainFont->Print(buf, -1, 1.0f, (float)GetSystemMetrics(SM_CYSCREEN) - 20); }
void addHUDItem(float& x, D3DCOLOR color, char* text)
{
mainFont->Print(text, color, 1.0f + x, (float)GetSystemMetrics(SM_CYSCREEN) - 20);
(x) += mainFont->DrawLength(text);
}
void renderHUD()
{
float x = 0.0f;
char buf[MAX_PATH];
D3DCOLOR color_disabled = D3DCOLOR_ARGB(191, 255, 255, 255);
D3DCOLOR color_enabled = D3DCOLOR_ARGB(220, 44, 167, 212);
D3DCOLOR color_text = D3DCOLOR_ARGB(191, 255, 255, 255);
if (SF->getGame()->getCurrentState() == CHEAT_STATE_ACTOR)
{
if (set.hud_time_status)
{
SYSTEMTIME lt;
GetLocalTime(<);
sprintf(buf, "[%02d:%02d:%02d]", lt.wHour, lt.wMinute, lt.wSecond);
addHUDItem(x, color_text, buf);
}
addHUDItem(x, cheat_state_onfoot.inv ? color_enabled : color_disabled, " [Inv]");
addHUDItem(x, cheat_state_onfoot.airbrk ? color_enabled : color_disabled, " [AirBrk]");
addHUDItem(x, cheat_state_onfoot.fly ? color_enabled : color_disabled, " [Fly]");
addHUDItem(x, cheat_state_onfoot.fly ? color_enabled : color_disabled, " [Fly]");
//COORDS
sprintf(buf, " [%.2f, %.2f, %.2f]",
SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE)->base.matrix[4 * 3],
SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE)->base.matrix[4 * 3 + 1],
SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE)->base.matrix[4 * 3 + 2]);
addHUDItem(x, color_text, buf);
//FPS
sprintf(buf, " [FPS: %0.0f]", getFPS());
addHUDItem(x, color_text, buf);
}
else if (SF->getGame()->getCurrentState() == CHEAT_STATE_VEHICLE)
{
if (set.hud_time_status)
{
SYSTEMTIME lt;
GetLocalTime(<);
sprintf(buf, "[%02d:%02d:%02d]", lt.wHour, lt.wMinute, lt.wSecond);
addHUDItem(x, color_text, buf);
}
addHUDItem(x, cheat_state_vehicle.inv ? color_enabled : color_disabled, " [Inv]");
addHUDItem(x, cheat_state_vehicle.airbrk ? color_enabled : color_disabled, " [AirBrk]");
addHUDItem(x, cheat_state_vehicle.fly ? color_enabled : color_disabled, " [Fly]");
//COORDS
sprintf(buf, " [%.2f, %.2f, %.2f]",
SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3],
SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3 + 1],
SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3 + 2]);
addHUDItem(x, color_text, buf);
//FPS
sprintf(buf, " [FPS: %0.0f]", getFPS());
addHUDItem(x, color_text, buf);
}
}
попробуй сделать таккогда бегаю по карте тупо то все норм, если сяду в тачку то тоже норм, а если вылезу с тачки то краш
C++:void addHUDItem(float& x, D3DCOLOR color, char* text) { mainFont->Print(text, color, 1.0f + x, (float)GetSystemMetrics(SM_CYSCREEN) - 20); (x) += mainFont->DrawLength(text); } void renderHUD() { float x = 0.0f; char buf[MAX_PATH]; D3DCOLOR color_disabled = D3DCOLOR_ARGB(191, 255, 255, 255); D3DCOLOR color_enabled = D3DCOLOR_ARGB(220, 44, 167, 212); D3DCOLOR color_text = D3DCOLOR_ARGB(191, 255, 255, 255); if (SF->getGame()->getCurrentState() == CHEAT_STATE_ACTOR) { if (set.hud_time_status) { SYSTEMTIME lt; GetLocalTime(<); sprintf(buf, "[%02d:%02d:%02d]", lt.wHour, lt.wMinute, lt.wSecond); addHUDItem(x, color_text, buf); } addHUDItem(x, cheat_state_onfoot.inv ? color_enabled : color_disabled, " [Inv]"); addHUDItem(x, cheat_state_onfoot.airbrk ? color_enabled : color_disabled, " [AirBrk]"); addHUDItem(x, cheat_state_onfoot.fly ? color_enabled : color_disabled, " [Fly]"); addHUDItem(x, cheat_state_onfoot.fly ? color_enabled : color_disabled, " [Fly]"); //COORDS sprintf(buf, " [%.2f, %.2f, %.2f]", SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE)->base.matrix[4 * 3], SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE)->base.matrix[4 * 3 + 1], SF->getGame()->actorInfoGet(ACTOR_SELF, ACTOR_ALIVE)->base.matrix[4 * 3 + 2]); addHUDItem(x, color_text, buf); //FPS sprintf(buf, " [FPS: %0.0f]", getFPS()); addHUDItem(x, color_text, buf); } else if (SF->getGame()->getCurrentState() == CHEAT_STATE_VEHICLE) { if (set.hud_time_status) { SYSTEMTIME lt; GetLocalTime(<); sprintf(buf, "[%02d:%02d:%02d]", lt.wHour, lt.wMinute, lt.wSecond); addHUDItem(x, color_text, buf); } addHUDItem(x, cheat_state_vehicle.inv ? color_enabled : color_disabled, " [Inv]"); addHUDItem(x, cheat_state_vehicle.airbrk ? color_enabled : color_disabled, " [AirBrk]"); addHUDItem(x, cheat_state_vehicle.fly ? color_enabled : color_disabled, " [Fly]"); //COORDS sprintf(buf, " [%.2f, %.2f, %.2f]", SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3], SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3 + 1], SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_TYPE_CAR)->base.matrix[4 * 3 + 2]); addHUDItem(x, color_text, buf); //FPS sprintf(buf, " [FPS: %0.0f]", getFPS()); addHUDItem(x, color_text, buf); } }
struct vehicle_info *vinfo = SF->getGame()->vehicleInfoGet(VEHICLE_SELF, VEHICLE_ALIVE);
if(vinfo == nullptr) return;
// vinfo->base.matrix[4 * 3];