- 532
- 225
- Версия SA-MP
-
- 0.3.7 (R1)
Всем привет, с вами я. Буду очень краток:
Ну и сам скрипт естественно
Активация: Автоматическая
Установка: Кидаем в папку SAMPFUNCS
Для работы нужен лишь: Visual C++ 2019 и DirectX
Минус: Байтится на другие объекты, поэтому предлагаю 2е версии, по которым он будет искать приведений
Исходный код:
Ну и сам скрипт естественно
Активация: Автоматическая
Установка: Кидаем в папку SAMPFUNCS
Для работы нужен лишь: Visual C++ 2019 и DirectX
Минус: Байтится на другие объекты, поэтому предлагаю 2е версии, по которым он будет искать приведений
Исходный код:
Код:
#include <Windows.h>
#include "main.h"
SAMPFUNCS *SF = new SAMPFUNCS();
stFontInfo* pFont;
float GetDistance3D(float x1, float y1, float z1, float x2, float y2, float z2)
{
return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) + (z2 - z1) * (z2 - z1));
}
float GetDistance(D3DXVECTOR3 target)
{
D3DXVECTOR3 player(PEDSELF->GetPosition()->fX, PEDSELF->GetPosition()->fY, PEDSELF->GetPosition()->fZ);
return sqrt((player.x - target.x) * (player.x - target.x) + (player.y - target.y) * (player.y - target.y) + (player.z - target.z) * (player.z - target.z));
}
void CalcScreenCoors(D3DXVECTOR3* vecWorld, D3DXVECTOR3* vecScreen)
{
D3DXMATRIX m((float*)(0xB6FA2C));
DWORD* dwLenX = (DWORD*)(0xC17044);
DWORD* dwLenY = (DWORD*)(0xC17048);
vecScreen->x = (vecWorld->z * m._31) + (vecWorld->y * m._21) + (vecWorld->x * m._11) + m._41;
vecScreen->y = (vecWorld->z * m._32) + (vecWorld->y * m._22) + (vecWorld->x * m._12) + m._42;
vecScreen->z = (vecWorld->z * m._33) + (vecWorld->y * m._23) + (vecWorld->x * m._13) + m._43;
double fRecip = (double)1.0 / vecScreen->z;
vecScreen->x *= (float)(fRecip * (*dwLenX));
vecScreen->y *= (float)(fRecip * (*dwLenY));
}
bool CALLBACK Present(CONST RECT* pSourceRect, CONST RECT* pDestRect, HWND hDestWindowOverride, CONST RGNDATA* pDirtyRegion)
{
if (SUCCEEDED(SF->getRender()->BeginRender())) // если рендерер готов к рисованию
{
for (int i = 0; i < SAMP_MAX_OBJECTS; i++)
{
if (!SF->getSAMP()->getInfo()->pPools->pObject->IsObjectExists(i)) continue;
D3DXVECTOR3 scPos; float x, y, z; // char name[500]; f
object_info* object = SF->getSAMP()->getInfo()->pPools->pObject->object[i]->pGTAEntity;
if (object != nullptr)
{
x = object->base.matrix[4 * 3];
y = object->base.matrix[4 * 3 + 1];
z = object->base.matrix[4 * 3 + 2];
}
if (GetDistance(D3DXVECTOR3(x, y, z)) > 350) continue;
CalcScreenCoors(&D3DXVECTOR3(x, y, z), &scPos);
int MID = SF->getSAMP()->getInfo()->pPools->pObject->object[i]->iModel;
if (scPos[2] > 0.01f && MID == 19482)
{
SF->getRender()->DrawLine(950, 800, scPos.x, scPos.y, 1, 0xFF00FF00);
}
}
SF->getRender()->EndRender(); // завершаем рисование
};
return true; // возвращаем положительный результат
};
void __stdcall mainloop()
{
static bool initialized = false;
if (!initialized)
{
if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized())
{
initialized = true;
SF->getRender()->registerD3DCallback(eDirect3DDeviceMethods::D3DMETHOD_PRESENT, Present);
pFont = SF->getRender()->CreateNewFont("Tahoma", 12, FCR_BORDER);
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "Поиск приведение by Revalto");
}
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
if (dwReasonForCall == DLL_PROCESS_ATTACH)
SF->initPlugin(mainloop, hModule);
return TRUE;
}
Вложения
Последнее редактирование: