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

imring

Ride the Lightning
Всефорумный модератор
2,362
2,544
C++:
void GTAfunc_LockActor(bool boolLock)
{
    DWORD *actor = (DWORD *)PEDSELF->GetInterface();

    if (actor)
    {
        if (boolLock)
        {
            _asm
            {
                mov ebx, dword ptr[actor]
                add ebx, 64
                or dword ptr[ebx], 0x2000
            }
        }
        else
        {
            _asm
            {
                mov ebx, dword ptr[actor]
                add ebx, 64
                and dword ptr[ebx], 0xFFFFDFFF
            }
        }
    }
}
либо с сф (пиздец)
C++:
void enable_freeze(bool enable) {
    actor_info *ped = reinterpret_cast<actor_info *>(PEDSELF->GetPedInterface());
    if (enable) ped->base.__unknown_66 |= 0x20;
    else ped->base.__unknown_66 &= 0xdf;
}
либо с plugin-sdk (не проверял работает)
C++:
void enable_freeze(bool enable) {
    CPed *ped = FindPlayerPed(0);
    ped->m_nPhysicalFlags.bDontApplySpeed = enable;
}

ну или легче выдать флаг -_-
SF->getSAMP()->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->flags = 2;
код с собейта (который ты выше скинул) это и делает
 
Последнее редактирование:
  • Нравится
Реакции: Izvinisb

spr1te_cheater

Потрачен
136
55
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

UserGABE

Новичок
1
0
Привет, подскажите как это перенести на плюсы
Lua:
checkpoint = addBlipForCoord(2445.20,-1659.75,13.07) -- 018A: 1@ = create_checkpoint_at 14@ 15@ 16@
setCoordBlipAppearance(checkpoint, 2) -- 08FB: set_checkpoint 1@ type_to 0
 

_!danek!_

Новичок
9
3
Привет, подскажите как это перенести на плюсы
Lua:
checkpoint = addBlipForCoord(2445.20,-1659.75,13.07) -- 018A: 1@ = create_checkpoint_at 14@ 15@ 16@
setCoordBlipAppearance(checkpoint, 2) -- 08FB: set_checkpoint 1@ type_to 0
Самый легкий способ мне кажется вот такой, только шоб удалить чекпоинт нужно эмулировать RPC_ScrDisableCheckpoint
C++:
void CreateCheckpoint(float size, float cPos[3]) // size, pos
{
    BitStream bits;
    bits.Write(cPos[0]);
    bits.Write(cPos[1]);
    bits.Write(cPos[2]);
    bits.Write(size);
    SF->getRakNet()->emulateRecvRPC(RPC_ScrSetCheckpoint, &bits);
}

Использование.
CreateCheckpoint(2.0, cPos) // 2.0 - size, cPos - posizion
 

#Rin

Известный
Всефорумный модератор
1,214
1,043
Привет, подскажите как это перенести на плюсы
Lua:
checkpoint = addBlipForCoord(2445.20,-1659.75,13.07) -- 018A: 1@ = create_checkpoint_at 14@ 15@ 16@
setCoordBlipAppearance(checkpoint, 2) -- 08FB: set_checkpoint 1@ type_to 0

C++:
using t_CRadar__SetCoordBlip = uint16_t(__cdecl*)(uint8_t, float, float, float, uint32_t, uint8_t);
using t_CRadar__SetCoordBlipAppearance = void(__cdecl*)(uint16_t, uint8_t);
using t_CRadar__ChangeBlipScale = void(__cdecl*)(uint16_t, uint16_t);

t_CRadar__SetCoordBlip CRadar__SetCoordBlip = reinterpret_cast<t_CRadar__SetCoordBlip>(0x583820);
t_CRadar__ChangeBlipScale CRadar__ChangeBlipScale = reinterpret_cast<t_CRadar__ChangeBlipScale>(0x583CC0);
t_CRadar__SetCoordBlipAppearance CRadar__SetCoordBlipAppearance = reinterpret_cast<t_CRadar__SetCoordBlipAppearance>(0x583E50);

uint16_t checkpoint = CRadar__SetCoordBlip(4, 2445.20, -1659.75, 13.07, 5, 3);
CRadar__ChangeBlipScale(checkpoint, 3);
CRadar__SetCoordBlipAppearance(checkpoint, 2);

Стоит сказать что функция addBlipForCoord которая эмулирует опкод 018A, при Z меньше 100, воспользуется CWorld::FindGroundZForCoord, а в нашем случае такого не произойдет.
 

Dark_Knight

Me, me and me.
Друг
4,078
2,094
Вызвать эмуляцию RemovePlayer(или как-то так РПЦ называется, ид его 170+ по памяти) с нужным идом(это его со стрима удалить) и после заблокировать все пакеты связанные с этим идом.
 

spr1te_cheater

Потрачен
136
55
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вызвать эмуляцию RemovePlayer(или как-то так РПЦ называется, ид его 170+ по памяти) с нужным идом(это его со стрима удалить) и после заблокировать все пакеты связанные с этим идом.
он пользуется методом @Motya и тупо тепает игроков из зоны стрима. Поэтому пакеты он их и так блокает просто на карте видны их метки.
 
  • Нравится
Реакции: sc6ut

sc6ut

неизвестный
Модератор
382
1,085
Вызвать эмуляцию RemovePlayer(или как-то так РПЦ называется, ид его 170+ по памяти) с нужным идом(это его со стрима удалить) и после заблокировать все пакеты связанные с этим идом.
это удалит игроков, а мне надо удалить лишь их маркеры.
 

frit

Известный
389
174
Lua:
for id=0,2048
    if sampIs3dTextDefined(id) then
        string, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
    end
end

есть замена этому на плюсы?
 

kizn

\ 0 _ 0 /
Всефорумный модератор
2,406
2,090
каков аналог на с++?
Lua:
local ev = require 'lib.samp.events'

function ev.onSendGiveDamage(playerid, damage, weapon, bodypart
 

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,199
каков аналог на с++?
Lua:
local ev = require 'lib.samp.events'

function ev.onSendGiveDamage(playerid, damage, weapon, bodypart
C++:
bool CALLBACK outcomingData1(stRakNetHookParams *params)
{

    if (params->packetId == RPCEnumeration::RPC_GiveTakeDamage)
    {
        if(_enabled) //переменная по включению, если не нужна можешь удалить
        {
            bool bGiveOrTake;
            short int iPlayerID;
            float fAmmount;
            int iWeaponID, iBodyPart;


            params->bitStream->ResetReadPointer();
            params->bitStream->Read(bGiveOrTake);
            params->bitStream->Read(iPlayerID);
            params->bitStream->Read(fAmmount);
            params->bitStream->Read(iWeaponID);
            params->bitStream->Read(iBodyPart);
            params->bitStream->ResetReadPointer();
            //тут твой кодик
        }
    }
    return true;
}
//main
SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_PACKET, outcomingData1);
Lua:
for id=0,2048
    if sampIs3dTextDefined(id) then
        string, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
    end
end

есть замена этому на плюсы?
дальше думаю разберешься.

C++:
for (int i = 0; i < SAMP_MAX_3DTEXTS; i++)
    {
        if (SF->getSAMP()->getInfo()->pPools->pText3D->iIsListed[i] != 1)
            continue;
        string texts = SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[i].pText;

        float x = SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[i].fPosition[0];
        float y = SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[i].fPosition[1];
        float z = SF->getSAMP()->getInfo()->pPools->pText3D->textLabel[i].fPosition[2];
}
 
Последнее редактирование:
  • Нравится
Реакции: bet.io, frit и kizn

Romelo

dev.
Проверенный
540
626
printStringNow(string text, int time)

Как это сделать в SF?
Если я правильно тебя понял, то -
C++:
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0

void addMessage(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief);
}

addMessage("Test text", 2000, NULL, false);
 

|| NN - NoName ||

Известный
1,049
633
Если я правильно тебя понял, то -
C++:
#define FUNC_CMessages__AddMessageJumpQ 0x69F1E0

void addMessage(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))FUNC_CMessages__AddMessageJumpQ)(text, time, flag, bPreviousBrief);
}

addMessage("Test text", 2000, NULL, false);
Как и где ты это получил, если не секрет.
Вот мне надо узнать координаты метки. Как мне узнать их. Подробную инструкцию можно?