Другое - SAMPFUNCS | API C++(https://blast.hk/threads/6498/)Есть ли уроки по обучению .sf (На основе самп-примеров)?
Информация - [SF] Полезные функции(https://blast.hk/threads/10970/)
Знаю только эти фичи
Другое - SAMPFUNCS | API C++(https://blast.hk/threads/6498/)Есть ли уроки по обучению .sf (На основе самп-примеров)?
-- lua code
local callback = ffi.cast('void(__thiscall *)(void *_this, char *killer, char *killed, uint32_t clKiller, uint32_t clKilled, uint8_t reason)', hook)
local detour_addr = tonumber(ffi.cast('uintptr_t', callback))
local hook_addr = getModuleHandle('samp.dll') + 0x2B2A3B
memory.setint8(hook_addr, 0xE8, true)
memory.setuint32(hook_addr + 1, detour_addr - hook_addr - 5, true)
// c++ code
void(__thiscall* callback)(void*, char*, char*, uint32_t, uint32_t, uint8_t) =
(void(__thiscall *) (void *_this, char *killer, char *killed, uint32_t clKiller, uint32_t clKilled, uint8_t reason))
(hook);
uintptr_t detour_addr = (uintptr_t)callback;
uintptr_t hook_addr = (uintptr_t)GetModuleHandleA("samp.dll") + 0x2B2A3B;
*reinterpret_cast<INT8 *>(hook_addr) = (INT8)0xE8;
*reinterpret_cast<DWORD *>(hook_addr + 1) = detour_addr - hook_addr - 5;
*reinterpret_cast<INT8 *>(hook_addr) = (INT8)0xE8;
void OnTimer(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime)
{
if (GetAsyncKeyState(0x2E) & 0x8000) //если нажал на delete
{
DWORD CPED = *(DWORD*)0xB6F5F0; //CPed
DWORD CWeaponSlot = *(DWORD*)(CPED + 0x0718); //CPed.m_cWeaponSlot
DWORD CWeaponSlot1 = *(DWORD*)(CWeaponSlot * 0x1C);
DWORD CWeaponSlots = *(DWORD*)(CPED + 0x5A0); //CPed.m_aclWeaponSlots
DWORD CWeaponState = *(DWORD*)(CWeaponSlots + CWeaponSlot1);
*(DWORD*)(CWeaponState + 0xC) += 40;
}
}
Перед записью в память установи права на запись при помощи VirtualProtect, после как закончишь восстанови предыдущие права.пытаюсь перевести с lua на c++, но чет хуево получается
Lua:-- lua code local callback = ffi.cast('void(__thiscall *)(void *_this, char *killer, char *killed, uint32_t clKiller, uint32_t clKilled, uint8_t reason)', hook) local detour_addr = tonumber(ffi.cast('uintptr_t', callback)) local hook_addr = getModuleHandle('samp.dll') + 0x2B2A3B memory.setint8(hook_addr, 0xE8, true) memory.setuint32(hook_addr + 1, detour_addr - hook_addr - 5, true)виснет игра из-за этой строки:C++:// c++ code void(__thiscall* callback)(void*, char*, char*, uint32_t, uint32_t, uint8_t) = (void(__thiscall *) (void *_this, char *killer, char *killed, uint32_t clKiller, uint32_t clKilled, uint8_t reason)) (hook); uintptr_t detour_addr = (uintptr_t)callback; uintptr_t hook_addr = (uintptr_t)GetModuleHandleA("samp.dll") + 0x2B2A3B; *reinterpret_cast<INT8 *>(hook_addr) = (INT8)0xE8; *reinterpret_cast<DWORD *>(hook_addr + 1) = detour_addr - hook_addr - 5;
C++:*reinterpret_cast<INT8 *>(hook_addr) = (INT8)0xE8;
хотел попробовать написать аммохак
в чем проблема? не работает
Код:void OnTimer(HWND hwnd, UINT msg, UINT idTimer, DWORD dwTime) { if (GetAsyncKeyState(0x2E) & 0x8000) //если нажал на delete { DWORD CPED = *(DWORD*)0xB6F5F0; //CPed DWORD CWeaponSlot = *(DWORD*)(CPED + 0x0718); //CPed.m_cWeaponSlot DWORD CWeaponSlot1 = *(DWORD*)(CWeaponSlot * 0x1C); DWORD CWeaponSlots = *(DWORD*)(CPED + 0x5A0); //CPed.m_aclWeaponSlots DWORD CWeaponState = *(DWORD*)(CWeaponSlots + CWeaponSlot1); *(DWORD*)(CWeaponState + 0xC) += 40; } }
void narko_usable()
{
char fmttext[13];
int id = SF->getSAMP()->getPlayers()->sLocalPlayerID;
stRemotePlayer *pPlayer = SF->getSAMP()->getPlayers()->pRemotePlayer[id];
int integer_health = (int)pPlayer->pPlayerData->fActorHealth;
sprintf(fmttext, "/usedrugs %d", 160-integer_health/10);
stLocalPlayer *player = SF->getSAMP()->getPlayers()->pLocalPlayer;
player->Say(fmttext);
timer = GetTickCount() + 60000;
}
2 варианта:покажи как правильно получить
int integer_health = SF->getSAMP()->getPlayers()->pLocalPlayer->onFootData.byteHealth;
float myhp = SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->hitpoints;
Можете показать нормальный показ текущего времени? Что бы было все как по часам, а то мне какую дичь прислали, выдаёт левое время..
char Clock[32];
SYSTEMTIME time;
GetLocalTime(&time);
snprintf(Clock, sizeof(Clock) - 1, " %02d:%02d:%02d", time.wHour, time.wMinute, time.wSecond);
Можно любой, но проект сделан под IDE Visual Studio.Какой компилятор используется для SF