SF Plugin [SRP-ERP] AntiSlap && Езда на крыше авто [+source]

Статус
В этой теме нельзя размещать новые ответы.

jenekbueno

Известный
Автор темы
157
69
По названию темы думаю все понятно.
Админ даёт вам поджопник - Вас не подбрасывает.
Залезаете на крышу кара с водилой - вас не тпшит обратно на землю.

Команды:
/AntiSlap - анти поджопник
/RoofCar - езда на крыше авто

C++:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS

#include <windows.h>
#include <string>
#include <assert.h>
#include <process.h>
#include "SAMPFUNCS_API.h"
#include "game_api\game_api.h"
#include "ini_file.h"

SAMPFUNCS *SF = new SAMPFUNCS();
bool ActivateRoofCar, AntiSlap, StatusRoofCar;

void CALLBACK AntiSlapCMD(std::string)
{
    AntiSlap ^= true;
    if (AntiSlap)
    {
        SF->getSAMP()->getChat()->AddChatMessage(0xff03ae53, "<AntiSlap> {ffffff}on");
        set_int_to_ini("SAMPFUNCS\\PosSettings.ini", "Settings", "AntiSlap", 1);
    }
    else if (!AntiSlap)
    {
        SF->getSAMP()->getChat()->AddChatMessage(0xffff0000, "<AntiSlap> {ffffff}off");
        set_int_to_ini("SAMPFUNCS\\PosSettings.ini", "Settings", "AntiSlap", 0);
    }
}

void CALLBACK roofcarCMD(std::string)
{
    ActivateRoofCar ^= true;
    if (ActivateRoofCar)
    {
        SF->getSAMP()->getChat()->AddChatMessage(0xff03ae53, "<RoofingCar> {ffffff}on");
        set_int_to_ini("SAMPFUNCS\\PosSettings.ini", "Settings", "RoofingCar", 1);
    }
    else if (!ActivateRoofCar)
    {
        SF->getSAMP()->getChat()->AddChatMessage(0xffff0000, "<RoofingCar> {ffffff}off");
        set_int_to_ini("SAMPFUNCS\\PosSettings.ini", "Settings", "RoofingCar", 0);
    }
}

bool CALLBACK RPC(stRakNetHookParams *params)
{
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetPlayerPos)
    {
        float SetPlayerPos[3], MyPos[3], diff;

        params->bitStream->ResetReadPointer();
        params->bitStream->Read(SetPlayerPos);

        stOnFootData *pPlayer = SF->getSAMP()->getPlayers()->GetOnFootData(SF->getSAMP()->getPlayers()->sLocalPlayerID);
        MyPos[0] = pPlayer->fPosition[0];
        MyPos[1] = pPlayer->fPosition[1];
        MyPos[2] = pPlayer->fPosition[2];
        diff = SetPlayerPos[2] - MyPos[2];

        if (AntiSlap && diff >= 4.9 && diff <= 5.1)        return false;
        if (ActivateRoofCar && StatusRoofCar)
        {
            float SummaMyPos = MyPos[0] + MyPos[1] + MyPos[2], SummaIncPos = SetPlayerPos[0] + SetPlayerPos[1] + SetPlayerPos[2], dif;
            dif = SummaMyPos - SummaIncPos;
            if (dif < 300.0 || dif > -300.0)    return false;
        }
    }
    if (params->packetId == ScriptRPCEnumeration::RPC_ScrSetCameraBehindPlayer && StatusRoofCar) return false;
    return true;
}

bool CALLBACK out_packet(stRakNetHookParams *params)
{
    if (params->packetId == PacketEnumeration::ID_PLAYER_SYNC && ActivateRoofCar)
    {
        stOnFootData data;
        memset(&data, 0, sizeof(stOnFootData));

        params->bitStream->ResetReadPointer();
        params->bitStream->IgnoreBits(8);
        params->bitStream->Read((PCHAR)&data, sizeof(stOnFootData));

        int idvehsurf = data.sSurfingVehicleID;
        if (idvehsurf != 0)        StatusRoofCar = true;
        else                    StatusRoofCar = false;
    }
    return true;
}

void CALLBACK mainloop()
{
    static bool init = false;
    if (!init)
    {
        if (GAME == nullptr)
            return;
        if (GAME->GetSystemState() != eSystemState::GS_PLAYING_GAME)
            return;
        if (!SF->getSAMP()->IsInitialized())
            return;
        init = true;
        SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_INCOMING_RPC, RPC);
        SF->getRakNet()->registerRakNetCallback(RakNetScriptHookType::RAKHOOK_TYPE_OUTCOMING_PACKET, out_packet);
        SF->getSAMP()->registerChatCommand("roofcar", roofcarCMD);
        SF->getSAMP()->registerChatCommand("antislap", AntiSlapCMD);
        SF->getSAMP()->getChat()->AddChatMessage(-1, "Езда на крыше автомобиля && AntiSlap by {01fcff}Jenek Bueno. {ffffff}CMD: /antislap /roofcar");

        if (!ini_file_exist("SAMPFUNCS\\PosSettings.ini"))
        {
            create_ini_file("SAMPFUNCS\\PosSettings.ini");
            set_int_to_ini("SAMPFUNCS\\PosSettings.ini", "Settings", "RoofingCar", 0);
            set_int_to_ini("SAMPFUNCS\\PosSettings.ini", "Settings", "AntiSlap", 0);
        }
        int a = get_int_from_ini("SAMPFUNCS\\PosSettings.ini", "Settings", "RoofingCar");
        int b = get_int_from_ini("SAMPFUNCS\\PosSettings.ini", "Settings", "AntiSlap");

        if (a == 1)        ActivateRoofCar = true;
        else             ActivateRoofCar = false;

        if (b == 1)        AntiSlap = true;
        else             AntiSlap = false;
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
    switch (dwReasonForCall)
    {
    case DLL_PROCESS_ATTACH:
        SF->initPlugin(mainloop, hModule);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
 

Вложения

  • AntiSlap && RoofingCar.sf
    92.5 KB · Просмотры: 292
Последнее редактирование:

kraft1k

Вынь х*й из головы и все получится © hnnssy
Друг
1,479
1,163
1 вопрос.
Если АнтиСлап включен, он в интерьеры будет заходить? Или как?
 

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
1 вопрос.
Если АнтиСлап включен, он в интерьеры будет заходить? Или как?
stOnFootData *pPlayer = SF->getSAMP()->getPlayers()->GetOnFootData(SF->getSAMP()->getPlayers()->sLocalPlayerID); MyPos[0] = pPlayer->fPosition[0]; MyPos[1] = pPlayer->fPosition[1]; MyPos[2] = pPlayer->fPosition[2]; result = MyPos[2] - SetPlayerPos[2]; diff = SetPlayerPos[2] - MyPos[2]; if (ActivateRoofCar && result > 0.1 && result <= 4.5) { return false; } if (AntiSlap && diff >= 4.9 && diff <= 5.2) { return false; }
Думаю тут всё ясно
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Код:
params->bitStream->Read(SetPlayerPos);
Если @FYP скажет или кто-то другой, что это работает - я просто ахуею.
 
  • Нравится
Реакции: AlexDeluxe

jenekbueno

Известный
Автор темы
157
69
В том, что так массив не читается. Надо читать каждый элемент по отдельности.
все файлы что я от себя заливаю - каждый тещу не 1 десяток раз)
я сначало по отдельности каждый элемент массива читал, но люди которые больше меня в этом шарят, сказали что таким образом запись тоже идет)
1 вопрос.
Если АнтиСлап включен, он в интерьеры будет заходить? Или как?
все нормально там
 
Последнее редактирование:
  • Нравится
Реакции: kawa operand

jenekbueno

Известный
Автор темы
157
69
обновил, теперь на евольве можно спокойно кататься и ломать машины бедным таксистам :(
на срп вроде урон не наносится, но кататься можно, правда вас кикнет если кар на котором вы стоите будет слишком быстро ехать.
 
  • Нравится
Реакции: kawa operand
Статус
В этой теме нельзя размещать новые ответы.