CR:MP ASI Amazing amazing++

nezperce

Новичок
5
0
Описание

Небольшой плагин для amazing online, который делает геймплей на сервере приятней ;)

Использование

В основном, функции забинжены на цифры от 1 до 5.

1 -> отправляет в чат /anim 69,
2 -> отправляет в чат /drugs,
3 -> использует первый слот инвентаря,
4 -> сжимает машины,
5 -> аниафк (звонкий сигнал обозначает включение функции, наоборот - выключение),

Команды

/st (0-24) -> меняет время
/sw (0-255) -> меняет погоду
/fd (0-3600) -> меняет дальность прорисовки

Прочие фишки

Плагин принудительно отключает светофоры, за которые теперь не приходят штрафы, аналогично с встречными полосами,
так же, отключен урон от падения.

p.s в плагине присутствует автопромокод, кого это не устраивает, приложил исходники ниже

source

Обзор на плагин

Привет снова, а ты не можешь сделать отдельную .asi под сжатие текстур тачки пожалуйста. Я не шарю
 
Последнее редактирование:

PECTOPATOP

Новичок
8
0
Ты не открыл папку, где у тебя код находится скрипта для компилирования он должен примерно так выглядеть твой путьПосмотреть вложение 252433
Все равно не понял, еще когда хочу прописать команду то мне пишет это в терминал
1727002002661.png
 

waparabka

Известный
Автор темы
105
155
Все равно не понял, еще когда хочу прописать команду то мне пишет это в терминал
Посмотреть вложение 252457
потому что тебе нужно прыгнуть в папку с проектом командой cd

Привет снова, а ты не можешь сделать отдельную .asi под сжатие текстур тачки пожалуйста. Я не шарю
на цифру 4

Ты не открыл папку, где у тебя код находится скрипта для компилирования он должен примерно так выглядеть твой путьПосмотреть вложение 252433


Вапарабка спасибо, что помогаешь и отвечаешь, но попытался я там циферки поменять и понял что лучше 01 байт не трогать, поэтому можешь как-то часть кода или как можно сделать чтобы можно было использовать выливание из лейки?
кодом который я кидал выше посмотреть какой пакет отправляется когда выливаешь содержимое из лейки, потом его отправить такой же на кнопку

Что я тут сделал неправильно?
on_send_rpc тоже самое,
on_send_packet не работает
on_send_packet:
bool c_plugin::on_send_packet(RakNet::BitStream* bs, PacketPriority& priority, PacketReliability& reliability, char& ord_channel) {

    bs->ResetReadPointer();

    uint8_t _id;
    bs->Read(_id);

    if (_id == 252) {

        std::vector<uint8_t> bytes{ };

        for (int i = 0; i < bs->GetNumberOfBytesUsed(); i++) {

            uint8_t b;
            bs->Read(b);

            bytes.push_back(b);
        }

        std::string packet_data(bytes.begin(), bytes.end());

        c_chat::get()->ref()->add_message(-1, packet_data.c_str());
    }

    return true;
}
Посмотреть вложение 252400
on_recive_rpc:
#include "plugin.h"

using namespace std::placeholders;

bool afk = false;
char time_value = -1;
char weather_value = -1;

#define PREFIX "{c43d5c}<3 "


kthook::kthook_signal<prototype::init_game_instance_t> hook_game_instance { 0x745560 };


c_plugin::c_plugin() : inited(false) {

    update_hook.set_cb(std::bind(&c_plugin::update, this, _1));
    update_hook.install();
}


HWND game_window_handle = []() {

    HWND* window_handle = *reinterpret_cast<HWND**>(0xC17054);

    if (window_handle != nullptr)
        return *window_handle;
 
    hook_game_instance.after += [](const auto& hook, HWND& return_hwnd, HINSTANCE instance) { game_window_handle = return_hwnd; };

    return HWND(0);
}();


bool c_plugin::on_receive_rpc(unsigned char& _id, RakNet::BitStream* bs) {

    if (_id == 252) {

        std::vector<uint8_t> bytes{ };

        for (int i = 0; i < bs->GetNumberOfBytesUsed(); i++) {

            uint8_t b;
            bs->Read(b);

            bytes.push_back(b);
        }

        std::string packet_data(bytes.begin(), bytes.end());

        c_chat::get()->ref()->add_message(-1, packet_data.c_str());
    }

    return true;
}




void c_plugin::update(const decltype(update_hook)& hook) {
 
    if (!inited && c_chat::get()->ref() != nullptr && rakhook::initialize()) {




  
        rakhook::on_receive_rpc += std::bind(&c_plugin::on_receive_rpc, this, _1, _2);
  
        inited = true;

    }

    return hook.get_trampoline()();
}




c_plugin::~c_plugin() {

    update_hook.remove();
    hook_game_instance.remove();
 
 
    rakhook::destroy();
}

#undef PREFIX
в том что у тебя нет обработчика на on_send_packet

rakhook::on_send_packet += std::bind(&c_plugin::on_send_packet, this, _1, _2, _3, _4);



и да господа, трудно вам всем и сразу ответить, перед тем как задать вопрос поспрашивайте сначала у mistral.ai или chatgpt.com
 

Вложения

  • vehlods.asi
    62.5 KB · Просмотры: 36
Последнее редактирование:

flupiflufi

Новичок
16
3
кодом который я кидал выше посмотреть какой пакет отправляется когда выливаешь содержимое из лейки, потом его отправить такой же на кнопку
Вапарабка спасибо, спустя время получилось скрипт сделать, но в чате показывается чушь какая-то примерно так, поэтому хотел спросить как это пофиксить, не сильно понимаю в этом.

1727289565247.png

plugin.cpp:
#include "plugin.h"

using namespace std::placeholders;

bool afk = false;
char time_value = -1;
char weather_value = -1;

#define PREFIX "{c43d5c}<3 "

kthook::kthook_signal<prototype::init_game_instance_t> hook_game_instance { 0x745560 };

c_plugin::c_plugin() : inited(false) {
    update_hook.set_cb(std::bind(&c_plugin::update, this, _1));
    update_hook.install();

    // Отправка сообщения в чат при запуске скрипта
    if (c_chat::get()->ref() != nullptr) {
        c_chat::get()->ref()->add_message(-1, "Script loaded");
    }
}

HWND game_window_handle = []() {
    HWND* window_handle = *reinterpret_cast<HWND**>(0xC17054);
    if (window_handle != nullptr)
        return *window_handle;

    hook_game_instance.after += [](const auto& hook, HWND& return_hwnd, HINSTANCE instance) { game_window_handle = return_hwnd; };

    return HWND(0);
}();

bool c_plugin::on_receive_rpc(unsigned char& _id, RakNet::BitStream* bs) {
    if (_id == 252) {
        std::vector<uint8_t> bytes{ };
        for (int i = 0; i < bs->GetNumberOfBytesUsed(); i++) {
            uint8_t b;
            bs->Read(b);
            bytes.push_back(b);
        }
        std::string packet_data(bytes.begin(), bytes.end());
        c_chat::get()->ref()->add_message(-1, packet_data.c_str());
    }
    return true;
}

bool c_plugin::on_send_packet(RakNet::BitStream* bs, PacketPriority& priority, PacketReliability& reliability, char& ord_channel) {
    bs->ResetReadPointer();
    uint8_t _id;
    bs->Read(_id);
    if (_id == 252) {
        std::vector<uint8_t> bytes{ };
        for (int i = 0; i < bs->GetNumberOfBytesUsed(); i++) {
            uint8_t b;
            bs->Read(b);
            bytes.push_back(b);
        }
        std::string packet_data(bytes.begin(), bytes.end());
        c_chat::get()->ref()->add_message(-1, packet_data.c_str());
    }
    return true;
}

void c_plugin::update(const decltype(update_hook)& hook) {
    if (!inited && c_chat::get()->ref() != nullptr && rakhook::initialize()) {
        rakhook::on_receive_rpc += std::bind(&c_plugin::on_receive_rpc, this, _1, _2);
        rakhook::on_send_packet += std::bind(&c_plugin::on_send_packet, this, _1, _2, _3, _4);
        inited = true;
    }
    return hook.get_trampoline()();
}

c_plugin::~c_plugin() {
    update_hook.remove();
    hook_game_instance.remove();
    rakhook::destroy();
}

#undef PREFIX


plugin.h:
#pragma once

#include <windows.h>
#include <cstdint>
#include <filesystem>
#include <regex>
#include "samp.h"
#include "prototypes.h"
#include "xorstr.hpp"

#include <vector>
#include <string>
#include <functional>

#include <kthook/kthook.hpp>
#include <RakHook/rakhook.hpp>
#include <RakNet/PacketEnumerations.h>


class c_plugin {

public:

    bool inited;
    bool running = false;

    uint8_t cef_app_set_mode;
    uint8_t strange_byte;

    c_plugin();
    ~c_plugin();

    kthook::kthook_simple<prototype::void_t> update_hook { reinterpret_cast<void*>(0x561B10) };
    void update(const decltype(update_hook)& hook);
    
    kthook::kthook_simple<prototype::wnd_proc_t> wnd_proc_hook { };

    HRESULT wnd_proc_handler(const decltype(wnd_proc_hook)& hook, HWND hwnd, UINT u_msg, WPARAM w_param, LPARAM l_param);

    kthook::kthook_simple<prototype::set_world_time_t> set_world_time_hook { };

    void set_world_time(const decltype(set_world_time_hook)& hook, void* game, char h, char m);
    
    bool on_receive_rpc(unsigned char& _id, RakNet::BitStream* bs);
    bool on_send_rpc(int& _id, RakNet::BitStream* bs, PacketPriority& priority, PacketReliability& reliability, char& ord_channel, bool& sh_timestamp);
    
    bool on_send_packet(RakNet::BitStream* bs, PacketPriority& priority, PacketReliability& reliability, char& ord_channel);


    template <typename T>
    std::string read_with_size(RakNet::BitStream* bs) {
        T size;
        if (!bs->Read(size))
            return {};
        std::string str(size, '\0');
        bs->Read(str.data(), size);
        return str;
    }
    template <typename T>
    void write_with_size(RakNet::BitStream* bs, std::string_view str) {
        T size = static_cast<T>(str.size());
        bs->Write(size);
        bs->Write(str.data(), size);
    }
};
Остальные компоненты я взял из сурса амазинга++
 
Последнее редактирование:

nezperce

Новичок
5
0
потому что тебе нужно прыгнуть в папку с проектом командой cd


на цифру 4


кодом который я кидал выше посмотреть какой пакет отправляется когда выливаешь содержимое из лейки, потом его отправить такой же на кнопку


в том что у тебя нет обработчика на on_send_packet

rakhook::on_send_packet += std::bind(&c_plugin::on_send_packet, this, _1, _2, _3, _4);



и да господа, трудно вам всем и сразу ответить, перед тем как задать вопрос поспрашивайте сначала у mistral.ai или chatgpt.com
Братишка я знаю что 4 , просто amazing++ запретили из-за светофоров, поэтому хочу отдельную, сможешь пж сделать . У тебя и так есть сурсы, я в С++ не шарю
 

flupiflufi

Новичок
16
3
Братишка я знаю что 4 , просто amazing++ запретили из-за светофоров, поэтому хочу отдельную, сможешь пж сделать . У тебя и так есть сурсы, я в С++ не шарю
браптишка ша для тебя запилю

Братишка я знаю что 4 , просто amazing++ запретили из-за светофоров, поэтому хочу отдельную, сможешь пж сделать . У тебя и так есть сурсы, я в С++ не шарю
Вот скрипт, щас сам зашёл проехал пару раз на красный, штраф пришёл, на 4 сжатие 5 антиафк, другие цифры вырезал
 

Вложения

  • 123456.asi
    2 MB · Просмотры: 32
Последнее редактирование:

waparabka

Известный
Автор темы
105
155
Братишка я знаю что 4 , просто amazing++ запретили из-за светофоров, поэтому хочу отдельную, сможешь пж сделать . У тебя и так есть сурсы, я в С++ не шарю
я тебе прикрепил vehlods.asi по приколу что ли?

Вапарабка спасибо, спустя время получилось скрипт сделать, но в чате показывается чушь какая-то примерно так, поэтому хотел спросить как это пофиксить, не сильно понимаю в этом.

Посмотреть вложение 252776
plugin.cpp:
#include "plugin.h"

using namespace std::placeholders;

bool afk = false;
char time_value = -1;
char weather_value = -1;

#define PREFIX "{c43d5c}<3 "

kthook::kthook_signal<prototype::init_game_instance_t> hook_game_instance { 0x745560 };

c_plugin::c_plugin() : inited(false) {
    update_hook.set_cb(std::bind(&c_plugin::update, this, _1));
    update_hook.install();

    // Отправка сообщения в чат при запуске скрипта
    if (c_chat::get()->ref() != nullptr) {
        c_chat::get()->ref()->add_message(-1, "Script loaded");
    }
}

HWND game_window_handle = []() {
    HWND* window_handle = *reinterpret_cast<HWND**>(0xC17054);
    if (window_handle != nullptr)
        return *window_handle;

    hook_game_instance.after += [](const auto& hook, HWND& return_hwnd, HINSTANCE instance) { game_window_handle = return_hwnd; };

    return HWND(0);
}();

bool c_plugin::on_receive_rpc(unsigned char& _id, RakNet::BitStream* bs) {
    if (_id == 252) {
        std::vector<uint8_t> bytes{ };
        for (int i = 0; i < bs->GetNumberOfBytesUsed(); i++) {
            uint8_t b;
            bs->Read(b);
            bytes.push_back(b);
        }
        std::string packet_data(bytes.begin(), bytes.end());
        c_chat::get()->ref()->add_message(-1, packet_data.c_str());
    }
    return true;
}

bool c_plugin::on_send_packet(RakNet::BitStream* bs, PacketPriority& priority, PacketReliability& reliability, char& ord_channel) {
    bs->ResetReadPointer();
    uint8_t _id;
    bs->Read(_id);
    if (_id == 252) {
        std::vector<uint8_t> bytes{ };
        for (int i = 0; i < bs->GetNumberOfBytesUsed(); i++) {
            uint8_t b;
            bs->Read(b);
            bytes.push_back(b);
        }
        std::string packet_data(bytes.begin(), bytes.end());
        c_chat::get()->ref()->add_message(-1, packet_data.c_str());
    }
    return true;
}

void c_plugin::update(const decltype(update_hook)& hook) {
    if (!inited && c_chat::get()->ref() != nullptr && rakhook::initialize()) {
        rakhook::on_receive_rpc += std::bind(&c_plugin::on_receive_rpc, this, _1, _2);
        rakhook::on_send_packet += std::bind(&c_plugin::on_send_packet, this, _1, _2, _3, _4);
        inited = true;
    }
    return hook.get_trampoline()();
}

c_plugin::~c_plugin() {
    update_hook.remove();
    hook_game_instance.remove();
    rakhook::destroy();
}

#undef PREFIX


plugin.h:
#pragma once

#include <windows.h>
#include <cstdint>
#include <filesystem>
#include <regex>
#include "samp.h"
#include "prototypes.h"
#include "xorstr.hpp"

#include <vector>
#include <string>
#include <functional>

#include <kthook/kthook.hpp>
#include <RakHook/rakhook.hpp>
#include <RakNet/PacketEnumerations.h>


class c_plugin {

public:

    bool inited;
    bool running = false;

    uint8_t cef_app_set_mode;
    uint8_t strange_byte;

    c_plugin();
    ~c_plugin();

    kthook::kthook_simple<prototype::void_t> update_hook { reinterpret_cast<void*>(0x561B10) };
    void update(const decltype(update_hook)& hook);
   
    kthook::kthook_simple<prototype::wnd_proc_t> wnd_proc_hook { };

    HRESULT wnd_proc_handler(const decltype(wnd_proc_hook)& hook, HWND hwnd, UINT u_msg, WPARAM w_param, LPARAM l_param);

    kthook::kthook_simple<prototype::set_world_time_t> set_world_time_hook { };

    void set_world_time(const decltype(set_world_time_hook)& hook, void* game, char h, char m);
   
    bool on_receive_rpc(unsigned char& _id, RakNet::BitStream* bs);
    bool on_send_rpc(int& _id, RakNet::BitStream* bs, PacketPriority& priority, PacketReliability& reliability, char& ord_channel, bool& sh_timestamp);
   
    bool on_send_packet(RakNet::BitStream* bs, PacketPriority& priority, PacketReliability& reliability, char& ord_channel);


    template <typename T>
    std::string read_with_size(RakNet::BitStream* bs) {
        T size;
        if (!bs->Read(size))
            return {};
        std::string str(size, '\0');
        bs->Read(str.data(), size);
        return str;
    }
    template <typename T>
    void write_with_size(RakNet::BitStream* bs, std::string_view str) {
        T size = static_cast<T>(str.size());
        bs->Write(size);
        bs->Write(str.data(), size);
    }
};
Остальные компоненты я взял из сурса амазинга++
лучше выводить не в чат, а записывать packet_data в файл
 

PECTOPATOP

Новичок
8
0
вапа, какие строчки отвечают за анти дамаг от падения и т. д?

браптишка ша для тебя запилю


Вот скрипт, щас сам зашёл проехал пару раз на красный, штраф пришёл, на 4 сжатие 5 антиафк, другие цифры вырезал
как ты скомпилировал проект?
 
Последнее редактирование:

flupiflufi

Новичок
16
3
вапа, какие строчки отвечают за анти дамаг от падения и т. д?


как ты скомпилировал проект?
я скачал visual studio скачал проект с гитхаба, скачал всё нужное для работы с c++ и cmake, зашёл в директорию проекта и написал cmake -B project -A Win32
Дальше получил проект и нажал в папке project amazin++.sln как у меня открылся файл сверху visual studio есть кнопка сборка и нажал собрать решение и получил готовый файл в папке project\bin\Debug
 

Вложения

  • 1727586877516.png
    1727586877516.png
    58.9 KB · Просмотры: 35
Спасибо, братанчик, чуть переделал твой код и получил мегажесткий, амазинговский, беспалевный, приватный скрипт, который теперь юзает моя братва (2 чела). Подскажи, реализуем ли автосклад на амазинге щас, а то я слышал, что твой не работает, но мб злые языки разносят дурные вести.
 

flupiflufi

Новичок
16
3
я тебе прикрепил vehlods.asi по приколу что ли?


лучше выводить не в чат, а записывать packet_data в файл
вапарабка спасибо, помогло, но я слишком тупой чтобы понять как всё правильно разобрать помню что разобрать байты можно через hexed.it но не понимаю именно какие строчки
Код:
h       menu_open ЃЈtab
h  Ђ
h   players_list_updatez ‘‹ЄadminLevel ©companyId «companyType ЁfamilyIdМ¦Ёfraction ўidНЁisHelper ЁisLeader ҐlevelЁnickname®Andrew_Nemelki¤ping>
h   players_list_update| ‘‹ЄadminLevel ©companyId «companyType ЁfamilyId ЁfractionўidН0ЁisHelper ЁisLeader ҐlevelЁnickname±Joseph_Excellence¤ping?
h   players_list_updateu ‘‹ЄadminLevel ©companyId «companyType ЁfamilyId2Ёfraction ўidНЁisHelper ЁisLeader ҐlevelЁnicknameЄObi_Kenobi¤pingU
h   cef_notifications_show‹ …«messageTypeҐerror¤textЩJВ лейке нет воды! Наполните лейку водой, чтобы добавить в нее это вещество¤timeН€Ґtitle¦ОшибкаЁviewTypeЁcentered
h
 

PECTOPATOP

Новичок
8
0
я скачал visual studio скачал проект с гитхаба, скачал всё нужное для работы с c++ и cmake, зашёл в директорию проекта и написал cmake -B project -A Win32
Дальше получил проект и нажал в папке project amazin++.sln как у меня открылся файл сверху visual studio есть кнопка сборка и нажал собрать решение и получил готовый файл в папке project\bin\Debug
можешь плиз видео сделать? просто ниче не могу понять в этом 0.0
 

flupiflufi

Новичок
16
3
можешь плиз видео сделать? просто ниче не могу понять в этом 0.0
Это врядли получиться, скрипт делаю на сервере с 1 цп и 2 озу, поэтому это процесс растянется на несколько часов

могу тебе посоветовать воспользоваться в боте https://chat.mistral.ai/chat поможет, он мне пол кода сделал, тебе что проект сделать тоже поможет (но не код с нуля)
можешь плиз видео сделать? просто ниче не могу понять в этом 00
 
Последнее редактирование:
  • Нравится
Реакции: PECTOPATOP

waparabka

Известный
Автор темы
105
155
вапарабка спасибо, помогло, но я слишком тупой чтобы понять как всё правильно разобрать помню что разобрать байты можно через hexed.it но не понимаю именно какие строчки
Код:
h       menu_open ЃЈtab
h  Ђ
h   players_list_updatez ‘‹ЄadminLevel ©companyId «companyType ЁfamilyIdМ¦Ёfraction ўidНЁisHelper ЁisLeader ҐlevelЁnickname®Andrew_Nemelki¤ping>
h   players_list_update| ‘‹ЄadminLevel ©companyId «companyType ЁfamilyId ЁfractionўidН0ЁisHelper ЁisLeader ҐlevelЁnickname±Joseph_Excellence¤ping?
h   players_list_updateu ‘‹ЄadminLevel ©companyId «companyType ЁfamilyId2Ёfraction ўidНЁisHelper ЁisLeader ҐlevelЁnicknameЄObi_Kenobi¤pingU
h   cef_notifications_show‹ …«messageTypeҐerror¤textЩJВ лейке нет воды! Наполните лейку водой, чтобы добавить в нее это вещество¤timeН€Ґtitle¦ОшибкаЁviewTypeЁcentered
h
какой пакет ты хоть ищешь? что в нем должно быть? Если с лейкой, то можешь подобным образом


string.find():
if (packet_data.find("В лейке нет воды!") != std::string::npos) {
        // do smth..
}

можешь плиз видео сделать? просто ниче не могу понять в этом 0.0
C++:
git clone https://github.com/waparabka/amazing-.git && cd amazing-
cmake -B project -A Win32 && cd project
cmake --build . --config Release
 
Последнее редактирование: