Так же как и игроков, через циклВсем привет, как получить определенный объект в зоне стрима, к примеру мне надо получить сколько штук 980 объектов в зоне стрима?
for (int j = 0; j < SAMP_MAX_OBJECTS; j++)
{
}
DWORD protect;
// Godmode patch
VirtualProtect((void*)(0x004B35A0), 5, PAGE_EXECUTE_READWRITE, &protect);
memset((void *)(0x004B35A0), 0x560CEC83, 3);
memset((void *)(0x004B35A0 + 4), 0xF18B, 2);
VirtualProtect((void*)(0x004B35A0), 5, protect, &protect);
--- Main
local patchAddr = 0x004B35A0
function main()
if not isSampLoaded() then return end
wait(1000)
orig1 = readMemory(patchAddr, 4, true)
orig2 = readMemory(patchAddr + 4, 2, true)
writeMemory(patchAddr, 4, 0x560CEC83, true)
writeMemory(patchAddr + 4, 2, 0xF18B, true)
wait(-1)
end
Насколько знаю, самп при установке хуков не возвращает назад VPПочему мой говнокод крашит?)
static const char kAffectsPedRestore[] = "\x83\xEC\x0C\x56\x8B\xF1";
memcpy((void*)0x004B35A0, &kAffectsPedRestore, sizeof(kAffectsPedRestore) - 1);
без virtualprotect?Насколько знаю, самп при установке хуков не возвращает назад VP
Можно поступить просто так:
P.S memset - функция заполнения, а не записи конкретного значения.C++:static const char kAffectsPedRestore[] = "\x83\xEC\x0C\x56\x8B\xF1"; memcpy((void*)0x004B35A0, &kAffectsPedRestore, sizeof(kAffectsPedRestore) - 1);
if (SF->getGame()->isKeyDown(81) && veh)
{
if (gmc == false)
{
gmc = true;
SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->vehicle->flags = CollisionProtect + BulletProtect; //защита от столкновений (машина игрока)
SF->getSAMP()->getChat()->AddChatMessage(-1, "1");
}
else
{
gmc = false;
SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->vehicle->flags ^= CollisionProtect + BulletProtect; //защита от столкновений (машина игрока)
SF->getSAMP()->getChat()->AddChatMessage(-1, "2");
}
}
Потому что код выполняется при нажатой клавише не один раз.Почему при зажатой клавише выполняется сразу if и elseC++:if (SF->getGame()->isKeyDown(81) && veh) { if (gmc == false) { gmc = true; SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->vehicle->flags = CollisionProtect + BulletProtect; //защита от столкновений (машина игрока) SF->getSAMP()->getChat()->AddChatMessage(-1, "1"); } else { gmc = false; SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->vehicle->flags ^= CollisionProtect + BulletProtect; //защита от столкновений (машина игрока) SF->getSAMP()->getChat()->AddChatMessage(-1, "2"); } }
да я просто пытался зажимной гм кар сделать и что-то не успешноПотому что код выполняется при нажатой клавише не один раз.
Используй isKeyPressed
Переводишь кординаты противника из игровых в экранные и если Z экранная больше 1, то игрок виден.Как проверить что удалённый игрок виден на экране локального игрока? И как узнать координаты частей тела этого удалённого игрока?
CPed* Ped = GAME->GetPools()->GetPed((DWORD*)actorInfo);
Ped->GetTransformedBonePosition(BONE_SPINE1, &vPos);
// ImGui - null/dummy example application (compile and link imgui with no inputs, no outputs)
#include "imgui.h"
#include <stdio.h>
int main(int, char**)
{
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
// Build atlas
unsigned char* tex_pixels = NULL;
int tex_w, tex_h;
io.Fonts->GetTexDataAsRGBA32(&tex_pixels, &tex_w, &tex_h);
for (int n = 0; n < 5000; n++)
{
printf("NewFrame() %d\n", n);
io.DisplaySize = ImVec2(1920, 1080);
io.DeltaTime = 1.0f / 60.0f;
ImGui::NewFrame();
static float f = 0.0f;
ImGui::Text("Hello, world!");
ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
ImGui::ShowDemoWindow(NULL);
ImGui::Render();
}
printf("DestroyContext()\n");
ImGui::DestroyContext();
return 0;
}
Само, если говоришь про текстуры созданные через апиТак вот вопрос, при работе с текстурами, нужно ли обрабатывать потерю устройства или api само это делает?
std::cmatch res;
bool CALLBACK incomingRPC(stRakNetHookParams *params) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC.
{
if (params->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage)
{
uint32_t len, color;
char msg[144];
params->bitStream->ResetReadPointer();
params->bitStream->Read(len);
params->bitStream->Read(color);
params->bitStream->Read(msg, len);
msg[len] = '\0';
if (color == 4283445418 && std::regex_match(msg, res, std::regex("Администратор (.*) выдал бан чата игроку"))){
SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", res);
}
};
return true; // успешно завершаем обработку RPC.
};
Сначала цвет, потом длина строкиПочему крашит?
Код:std::cmatch res; bool CALLBACK incomingRPC(stRakNetHookParams *params) // определение callback-функции, которая будет вызвана, если от сервера был получен новый RPC. { if (params->packetId == ScriptRPCEnumeration::RPC_ScrClientMessage) { uint32_t len, color; char msg[144]; params->bitStream->ResetReadPointer(); params->bitStream->Read(len); params->bitStream->Read(color); params->bitStream->Read(msg, len); msg[len] = '\0'; if (color == 4283445418 && std::regex_match(msg, res, std::regex("Администратор (.*) выдал бан чата игроку"))){ SF->getSAMP()->getChat()->AddChatMessage(-1, "%s", res); } }; return true; // успешно завершаем обработку RPC. };