Другое SAMPFUNCS | API C++

toxa1373

Новичок
4
1
Всем привет, как получить определенный объект в зоне стрима, к примеру мне надо получить сколько штук 980 объектов в зоне стрима?
 

CleanLegend

Известный
Всефорумный модератор
476
928
Всем привет, как получить определенный объект в зоне стрима, к примеру мне надо получить сколько штук 980 объектов в зоне стрима?
Так же как и игроков, через цикл

Код:
for (int j = 0; j < SAMP_MAX_OBJECTS; j++)
{

}
 

Frixen

Известный
131
8
Код:
        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);

Почему мой говнокод крашит?)
Слизал от сюда:

Lua:
--- 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
 

san0

Известный
Друг
411
267
Почему мой говнокод крашит?)
Насколько знаю, самп при установке хуков не возвращает назад VP
Можно поступить просто так:
C++:
static const char kAffectsPedRestore[] = "\x83\xEC\x0C\x56\x8B\xF1";
memcpy((void*)0x004B35A0, &kAffectsPedRestore, sizeof(kAffectsPedRestore) - 1);
P.S memset - функция заполнения, а не записи конкретного значения.
 

Frixen

Известный
131
8
Насколько знаю, самп при установке хуков не возвращает назад VP
Можно поступить просто так:
C++:
static const char kAffectsPedRestore[] = "\x83\xEC\x0C\x56\x8B\xF1";
memcpy((void*)0x004B35A0, &kAffectsPedRestore, sizeof(kAffectsPedRestore) - 1);
P.S memset - функция заполнения, а не записи конкретного значения.
без virtualprotect?
 

Frixen

Известный
131
8
C++:
    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 и else
 

BlackKnigga

Известный
BH Team
922
443
C++:
    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 и else
Потому что код выполняется при нажатой клавише не один раз.
Используй isKeyPressed
 

ZKelo

Известный
82
25
Как проверить что удалённый игрок виден на экране локального игрока? И как узнать координаты частей тела этого удалённого игрока?
 

CleanLegend

Известный
Всефорумный модератор
476
928
Как проверить что удалённый игрок виден на экране локального игрока? И как узнать координаты частей тела этого удалённого игрока?
Переводишь кординаты противника из игровых в экранные и если Z экранная больше 1, то игрок виден.
Насчет получения костей:
C++:
CPed* Ped = GAME->GetPools()->GetPed((DWORD*)actorInfo);
Ped->GetTransformedBonePosition(BONE_SPINE1, &vPos);
 
  • Нравится
Реакции: ZKelo

Шурик

Активный
216
42
Каким образом можно подключить ImGui в проект SF?
Пытался по этому примеру, не помогает.
Код:
// 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;
}
 

BratokHR

Известный
3
0
Так вот вопрос, при работе с текстурами, нужно ли обрабатывать потерю устройства или api само это делает?
 

Revalto

Известный
532
225
Почему крашит?

upload_2018-4-12_18-19-37.png

Код:
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.
};
 

BlackKnigga

Известный
BH Team
922
443
Почему крашит?


Код:
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.
};
Сначала цвет, потом длина строки