- 6,006
- 4,322
как в sampapi создается команда? дайте самый простой пример плз
Другое - С/С++ Вопрос - Ответ
enum test { one = 1, two = 2 }; Подскажите пожалуйста, как вывести "one" или "two" std::cout
как в sampapi создается команда? дайте самый простой пример плз
как в sampapi создается команда? дайте самый простой пример плз
if (SampVersion == 1) sampapi::v037r1::RefInputBox()->AddCommand("test", ActivateCommand);
![]()
Другое - С/С++ Вопрос - Ответ
enum test { one = 1, two = 2 }; Подскажите пожалуйста, как вывести "one" или "two" std::coutwww.blast.hk
так же не стоит забывать, что необходимо при выгрузке плагина также удалять команду, иначе в последующем вводе команды, будет крашC++:if (SampVersion == 1) sampapi::v037r1::RefInputBox()->AddCommand("test", ActivateCommand);
Нет, просто я дурак и дал не верный ответ. Вот этот код должен работатьесли выводит пустую строку, значит проблема с либой ?
иди в сторону функции CLoadingScreen::LoadSplashes, которая загружает txd в память -как заменять лоадинг скрин через хук
0x5900B0а где можно чекать эти функции?иди в сторону функции CLoadingScreen::LoadSplashes, которая загружает txd в память -0x5900B0
Посмотреть вложение 235677
#ifndef MAIN_HPP
#define MAIN_HPP
#include <vector>
#include "sampapi/sampapi.h"
#include "hooks.hpp"
#include "patch.hpp"
#include "network.hpp"
class Plugin
{
public:
Plugin();
~Plugin();
void Initialize();
// Инициализация указателей происходит в методах клсса Plugin
Patch* patch;
Hooks* hooks;
Network* network;
//
std::uintptr_t SAMPHandle;
std::vector<RakNet::BitStream> accessories;
bool isKeyDown = false;
} plugin;
#endif
#ifndef NETWORK_HPP
#define NETWORK_HPP
#include "rakhook/rakhook.hpp"
#include "sampapi/CPlayerPool.h"
class Network
{
private:
static const char* clientVersion;
// Необходимо как-либо получить доступ к объявлению класса Plugin
Plugin* plugin;
public:
Network(Plugin* plugin);
~Network();
bool OnSendRPC(std::int32_t& id, RakNet::BitStream* bs, PacketPriority& priority, PacketReliability& reliability, char& orderingChannel, bool& sh_timestamp);
bool OnReceiveRPC(std::uint8_t& id, RakNet::BitStream* bs);
};
#endif
всм просто инклудни main.hpp в networkУ меня есть проект с такой структурой:
src/
├── hooks.hpp
├── hooks.cpp
├── patch.hpp
├── patch.cpp
├── network.hpp
├── network.cpp
├── main.hpp
└── main.cpp
Как я могу грамотно организовать получение основного класса Plugin в остальных классах, которые находятся в одноименных файлах?
C++:#ifndef MAIN_HPP #define MAIN_HPP #include <vector> #include "sampapi/sampapi.h" #include "hooks.hpp" #include "patch.hpp" #include "network.hpp" class Plugin { public: Plugin(); ~Plugin(); void Initialize(); // Инициализация указателей происходит в методах клсса Plugin Patch* patch; Hooks* hooks; Network* network; // std::uintptr_t SAMPHandle; std::vector<RakNet::BitStream> accessories; bool isKeyDown = false; } plugin; #endif
Покажу на примере класса Network (network.hpp):
C++:#ifndef NETWORK_HPP #define NETWORK_HPP #include "rakhook/rakhook.hpp" #include "sampapi/CPlayerPool.h" class Network { private: static const char* clientVersion; // Необходимо как-либо получить доступ к объявлению класса Plugin Plugin* plugin; public: Network(Plugin* plugin); ~Network(); bool OnSendRPC(std::int32_t& id, RakNet::BitStream* bs, PacketPriority& priority, PacketReliability& reliability, char& orderingChannel, bool& sh_timestamp); bool OnReceiveRPC(std::uint8_t& id, RakNet::BitStream* bs); }; #endif
в таком случае получаю подобную шнягувсм просто инклудни main.hpp в network
Если есть возможность, то можешь хукать самповский конструктор NetGameкак сделать функцию, которая будет загружаться только после загрузочного экрана
#pragma once мб поможетв таком случае получаю подобную шнягу
Посмотреть вложение 235765