![]() |
Пишем сюда полезные функции !
|
Функция телепортирует игрока в машине
Использование: InCarDataSync(i,x,y,z); [I - Ид игрока, x,y,z - Координаты для телепортирования] C++: Код:
voidP.S. Функция сама проверяет существует игрок или нет |
Функция отправляет пулю в указанного игрока
Использование: BulletData(i); [I - Ид игрока] C++: Код:
voidP.S. Функция сама проверяет существует игрок или нет |
Функция отправляет фейк позицию игрока с помощью синхры
Использование: OnFootSync(X,Y,Z); [X,Y,Z - Координаты для отправки] C++: Код:
void |
Функция телепортирует игрока в определенную точку.
Код: Код:
void actor_teleport(float x, float y, float z) |
Цитата:
Код:
#include "game_api\game_api.h" |
Цитата:
Цитата:
Цитата:
Цитата:
|
Телепортирует машину игрока
C++: Код:
void |
Цитата:
PEDSELF->GetVehicle()->Teleport(0.0f, 0.0f, 0.0f); |
Телепорт по метке!
C++: Код:
void |
Я думаю, по названиям функций понятно.
C++: Код:
int |
int GetWantedLevel()
{ return *(DWORD*)0x58DB60; } Там байт храниться. Так же это всё можно найти в пЛокалПлеер. |
Получает разрешение экрана.
Вызов: POINT Screen = get_screen_resolution(); C++: Код:
POINT |
Выдача оружия через эмуляцию RPC
C++: Код:
voidСмена скина через эмуляцию RPC C++: Код:
voidОтправка фейковой позиции... C++: Код:
voidФейк смерть от игрока C++: Код:
void |
Возвращает ID игрока , на заданном радиусе от прицела.
C++: [CODE] 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 ) ) ; } int GetPlayerTarget ( int radius ) { static int iX ; static int iY ; for ( int i = 0 ; i getSAMP ( ) -> getPlayers ( ) -> iIsListed [ i ] != 1 ) continue ; if ( SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] == NULL ) continue ; if ( SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] -> pPlayerData == NULL || SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] -> pPlayerData -> pSAMP_Actor == NULL ) continue ; D3DXVECTOR3 vecPos ; vecPos . x = SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] -> pPlayerData -> pSAMP_Actor -> pGTA_Ped -> base . matrix [ 12 ] ; vecPos . y = SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] -> pPlayerData -> pSAMP_Actor -> pGTA_Ped -> base . matrix [ 13 ] ; vecPos . z = SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] -> pPlayerData -> pSAMP_Actor -> pGTA_Ped -> base . matrix [ 14 ] ; D3DXVECTOR3 screenPos ; CalcScreenCoors ( & vecPos , & screenPos ) ; if ( screenPos . z iX + ( radius ) ) || ( screenPos . y > iY + ( radius ) ) || ( screenPos . x Использование : C++: Код:
static |
Цитата:
C++: [CODE] bool OnMouseHover ( float x , float y , float w , float h ) { POINT MousePosition = SF -> getGame ( ) -> getCursorPos ( ) ; return ( MousePosition . x >= x && MousePosition . x = y && MousePosition . y |
3D круг с этой темы - https://blast.hk/threads/25508/
C++: Код:
voidпример использования: C++: Код:
krug3dЦитата:
|
Эмулирует анимацию стана как при попадании пули в скин.
Полезно для разработчиков сайлент аимов Цитата:
C++: Код:
EmulateStunShotРассчитывает кватернион поворота к указанному игроку. Цитата:
C++: Код:
RotateMeToPlayer |
Рассчитывет вектор прицеливания камеры к скину указанного игрока, кроме обхода античита на сайлент аим это необходимо для прострела стен на 0.3.7.
Это потому что далеко не на всех серверах система урона синхрит дамаг обязательно через RPC_GiveTakeDamage Цитата:
C++: Код:
AimVectorToPlayerКастомная функция расчёта урона для текущего оружия в руках. Та что с мта классов выдаёт почему-то не валидные значения, моя функция умеет выдавать рандомно валидный урон дробовиков с которых любят палить сайлент аим всякие античиты по типу веапон конфига. Цитата:
C++: Код:
floatРассчитывает валидный разброс к рандомной части тела и выдаёт валидный бодипарт для RPC_GiveDamage Можно использовать для поражения целей внутри транспортных средств почти не трогая сам транспорт либо для раздачи хэдшотов. Цитата:
Цитата:
Цитата:
C++: Код:
SendFakeWeaponDataПерезаписывает трассеры пуль в скин указанного игрока, полезно для сайлент аимов чтобы не палится на видеозаписях попадая в стенку. Цитата:
Цитата:
|
Цитата:
Код: Код:
int GetSprintLevel() |
Функция разбивает расстояние между 2 векторами на кучу векторов с некоторым шагом.
Использование: split(float x0, float y0, float z0, float x1, float y1, float z1, float step) x0, y0, z0 - начальные координаты (первый вектор) x1, y1, z1 - конечные координаты (второй вектор) step - шаг, с которым будет поделено расстояние между векторами. Возвращает вектор с разбитым расстоянием. C++: [CODE] std :: vector split ( float x0 , float y0 , float z0 , float x1 , float y1 , float z1 , float step ) { CVector direction = { x1 - x0 , y1 - y0 , z1 - z0 } ; float distance = direction . Normalize ( ) ; std :: vector path ; CVector begin = { x0 , y0 , z0 } ; CVector cursor = { x0 , y0 , z0 } ; path . push_back ( cursor ) ; while ( ( cursor - begin ) . Length ( ) |
Цитата:
|
Полезные функции для работы с памятью:
C++: Код:
voidC++: Код:
voidпример: C++: Код:
WriteMemory |
C++:
Код:
stdНе совсем для SF , но может кому и пригодиться. Для тех кому не нравится форматировать строки через массив чар. Автор вроде как : 5nw . Пример : C++: Код:
int |
Включение/выключение рендера чата и клавиш "T", "F6":
C++: Код:
staticПоддержка русских букв ImGui для VS2013 и прочих, где нету литералов по типу u8: C++: Код:
#pragma execution_character_set("utf-8") |
Преобразование RGBA в ImVec4
C++: Код:
constПреобразование RGBA в float C++: Код:
#define RGBA_TO_FLOAT(r,g,b,a) (float)r/255.0f, (float)g/255.0f, (float)b/255.0f, (float)a/255.0f |
Длина вектор
C++: Код:
float |
C++:
Код:
uint8_there if someone need to get current player weapon name usage: ("%s", getPlayerWeapon(playerid)); Target Selector with multiple options for samp Цитата:
|
удобная функция для установки таймеров
Цитата:
Цитата:
Цитата:
|
Круглый слайдер для "ImGui"
Цитата:
|
C++:
Код:
boolC++: Код:
boolC++: Код:
//usage "%u" getPlayerVehicleModelID_V2(id...)C++: Код:
// usage "%s" getPlayerVehicleName(id...); |
Конвертация utf8 в ansi
C++: Код:
char |
Цитата:
Код:
ImVec4example usage ImGui::PushStyleColor(ImGuiCol_Text, TotalRainbow(20)); //or in your header file: extern ImVec4 TotalRainbow(int speed = 20) ImGui::Text("vodka"); ImGui::PopStyleColor(1); C++: Код:
D3DCOLORexample use ImVec4 color; render->D3DBox(,,,CustomImVec4_D3DCOLOR(color)); ImGui::ColorEdit3("##BoxColor", (float*)&color); |
Описание:находит ближайшего к вашему педу игрока, на определенном радиусе от прицела.
Код: C++: [CODE] void vect3_copy ( const float in [ 3 ] , float out [ 3 ] ) { memcpy ( out , in , sizeof ( float ) * 3 ) ; } float GetDistance ( D3DXVECTOR3 target_1 , D3DXVECTOR3 target_2 ) { return sqrt ( ( target_2 . x - target_1 . x ) * ( target_2 . x - target_1 . x ) + ( target_2 . y - target_1 . y ) * ( target_2 . y - target_1 . y ) + ( target_2 . z - target_1 . z ) * ( target_2 . z - target_1 . z ) ) ; } int GetNearestPed ( float radius ) { int nearestPED = - 1 ; float maxRadius = 20000.0f , currentRadius ; D3DXVECTOR3 posPed , myPosPed , screenPos ; actor_info * MyActorInfo = SF -> getSAMP ( ) -> getPlayers ( ) -> pLocalPlayer -> pSAMP_Actor -> pGTA_Ped ; vect3_copy ( MyActorInfo -> base . matrix + 12 , myPosPed ) ; for ( int i = 0 ; i getSAMP ( ) -> getPlayers ( ) -> iIsListed [ i ] != 1 || SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] == NULL || SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] -> pPlayerData == NULL || SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] -> pPlayerData -> pSAMP_Actor == NULL || SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] -> pPlayerData -> pSAMP_Actor -> pGTA_Ped == NULL ) continue ; actor_info * ActorInfo = SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ i ] -> pPlayerData -> pSAMP_Actor -> pGTA_Ped ; vect3_copy ( ActorInfo -> base . matrix + 12 , posPed ) ; SF -> getGame ( ) -> convert3DCoordsToScreen ( posPed . x , posPed . y , posPed . z , & screenPos . x , & screenPos . y ) ; static float iX = GetSystemMetrics ( SM_CXSCREEN ) * 0.5299999714f ; static float iY = GetSystemMetrics ( SM_CYSCREEN ) * 0.4f ; if ( ( ( abs ( iX - screenPos . x ) ) > radius ) || ( ( abs ( iY - screenPos . y ) ) > radius ) ) continue ; currentRadius = GetDistance ( myPosPed , posPed ) ; if ( currentRadius Пример: C++: [CODE] int id = GetNearestPed ( 100 ) ; if ( id |
поворачивает камеру на координаты
C++: [CODE] float * xCam = ( float * ) 0xB6F258 ; DWORD * ptrActor = ( DWORD * ) 0xB6F5F0 ; // global vars void rotateCamToXY ( float x , float y ) { DWORD * pActorMtrx = ( DWORD * ) ( ( * ptrActor ) + 0x14 ) ; CVector2D pPos ( * ( float * ) ( ( * pActorMtrx ) + 0x30 ) , * ( float * ) ( ( * pActorMtrx ) + 0x34 ) ) ; CVector2D cPos ( * ( float * ) ( 0xB6F9CC ) , * ( float * ) ( 0xB6F9D0 ) ) ; float ac = sqrt ( pow ( fabs ( cPos . fX - x ) , 2 ) + pow ( fabs ( cPos . fY - y ) , 2 ) ) ; float alpha = asin ( fabs ( cPos . fX - x ) / ac ) ; float beta = acos ( fabs ( cPos . fX - x ) / ac ) ; if ( ( pPos . fX > x ) && ( pPos . fY x ) && ( pPos . fY > y ) ) * xCam = beta ; if ( ( pPos . fX y ) ) * xCam = ( alpha + ( 1.57 ) ) ; if ( ( pPos . fX |
[QUOTE="astap_"]
поворачивает камеру на координаты C++: [CODE] float * xCam = ( float * ) 0xB6F258 ; DWORD * ptrActor = ( DWORD * ) 0xB6F5F0 ; // global vars void rotateCamToXY ( float x , float y ) { DWORD * pActorMtrx = ( DWORD * ) ( ( * ptrActor ) + 0x14 ) ; CVector2D pPos ( * ( float * ) ( ( * pActorMtrx ) + 0x30 ) , * ( float * ) ( ( * pActorMtrx ) + 0x34 ) ) ; CVector2D cPos ( * ( float * ) ( 0xB6F9CC ) , * ( float * ) ( 0xB6F9D0 ) ) ; float ac = sqrt ( pow ( fabs ( cPos . fX - x ) , 2 ) + pow ( fabs ( cPos . fY - y ) , 2 ) ) ; float alpha = asin ( fabs ( cPos . fX - x ) / ac ) ; float beta = acos ( fabs ( cPos . fX - x ) / ac ) ; if ( ( pPos . fX > x ) && ( pPos . fY x ) && ( pPos . fY > y ) ) * xCam = beta ; if ( ( pPos . fX y ) ) * xCam = ( alpha + ( 1.57 ) ) ; if ( ( pPos . fX C++: Код:
void |
Описание: находит ближайшую кость противника к прицелу.
Код: C++: [CODE] CVector GetBonePos ( INT ID , eBone eBone , BOOL isOnScreen ) { if ( SF -> getSAMP ( ) -> getPlayers ( ) -> iIsListed [ ID ] != 1 || SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ ID ] == NULL || SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ ID ] -> pPlayerData == NULL || SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ ID ] -> pPlayerData -> pSAMP_Actor == NULL || SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ ID ] -> pPlayerData -> pSAMP_Actor -> pGTA_Ped == NULL ) return CVector ( 0.0F , 0.0F , 0.0F ) ; if ( isOnScreen ) { CVector BonePosition ; CVector2D BonePositionOnScreen ; GAME -> GetPools ( ) -> GetPed ( ( DWORD * ) SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ ID ] -> pPlayerData -> pSAMP_Actor -> pGTA_Ped ) -> GetTransformedBonePosition ( eBone , & BonePosition ) ; SF -> getGame ( ) -> convert3DCoordsToScreen ( BonePosition . fX , BonePosition . fY , BonePosition . fZ , & BonePositionOnScreen . fX , & BonePositionOnScreen . fY ) ; return CVector ( BonePositionOnScreen . fX , BonePositionOnScreen . fY , 0.0F ) ; } else { CVector BonePosition ; GAME -> GetPools ( ) -> GetPed ( ( DWORD * ) SF -> getSAMP ( ) -> getPlayers ( ) -> pRemotePlayer [ ID ] -> pPlayerData -> pSAMP_Actor -> pGTA_Ped ) -> GetTransformedBonePosition ( eBone , & BonePosition ) ; return CVector ( BonePosition . fX , BonePosition . fY , BonePosition . fZ ) ; } } eBone GetNearestBone ( int iID ) { eBone currentBone [ ] = { BONE_RIGHTKNEE , BONE_LEFTKNEE , BONE_RIGHTELBOW , BONE_LEFTELBOW , BONE_SPINE1 , BONE_RIGHTSHOULDER , BONE_LEFTSHOULDER , BONE_HEAD } , nearestBone ; float currentRadius , maxRadius = 20000 ; CVector posBone ; for ( int i = 0 ; i Пример: C++: Код:
eBone nearestBone |
Разработчики, только перешедшие с клео\луа на C++ негодуют из-за необходимости использовать разного рода таймеры и лапшу из GetTickCount'ов вместо полюбившихся функций wait. Но особо ярых фанатов клео это не устраивает, отчего они начинают использовать потоки ради функций вроде Sleep для того чтобы не блокировать цикл игры. Однако это не безопасно. Функции ни GTA ни SAMP'а абсолютно не предназначены для использования в разных потоках и их использование может привести к рандомным крашам.
Выход есть! Example: Код:
#include Выполнение функции foo приостанавливается на время, переданное функции this_coro::wait, и продолжается с того же места. Все это работает в одном потоке, благодаря чему можно не переживать за потокобезопасность вызываемых внутри функций. В бесконечных или очень больших циклах требуется вызывать wait(0), все по канонам клео. Функция coro_wait::process должна вызываться в потоке игры (перехваченном как в примере, либо в функции mainloop для SF API). Требуется библиотека Boost.Context! Исходный код: GitHub - allwanttokissme/coro_wait: Suspending coroutines by time Suspending coroutines by time. Contribute to allwanttokissme/coro_wait development by creating an account on GitHub. github.com хуки sampapi |
Цитата:
|
Цитата:
|
| Время: 06:03 |