Да, я для примера просто сделалТы разные адреса смотришь
Да, я для примера просто сделалТы разные адреса смотришь
_, id = sampGetVehicleIdByCarHandle(storeCarCharIsInNoSave(PLAYER_PED))
Ну можешь в хуке ID_VEHICLE_SYNC получать машинуКак получить ID машины, в которой сидит мой персонаж?
Или же аналог:
Lua:_, id = sampGetVehicleIdByCarHandle(storeCarCharIsInNoSave(PLAYER_PED))
1. https://github.com/BlastHackNet/SAM...ea58f/include/sampapi/0.3.7-R3-1/CInput.h#L281. как получить/изменить список введенных ранее команд и как их изменить/удалить?
2. как хукнуть отправку самповской команды (например /pagesize)?
hook.after += [](CMDPROC& return_value, const char*& szName) {
if (return_value) {
// if local command
}
else {
// unknown command; sends to server
}
};
1. В шаблоне плагина уже есть добавление сообщения1.Ваш вопрос: Дайте код для вывода сообщения в чат при запуске САМПА и еще код на активацию по команде
#include <Windows.h>
#include "main.h"
SAMPFUNCS *SF = new SAMPFUNCS();
void CALLBACK cmd_callback(std::string arg)
{
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "CMD");
}
void __stdcall mainloop()
{
static bool initialized = false;
if (!initialized)
{
if (GAME && GAME->GetSystemState() == eSystemState::GS_PLAYING_GAME && SF->getSAMP()->IsInitialized())
{
initialized = true;
SF->getSAMP()->getChat()->AddChatMessage(D3DCOLOR_XRGB(0, 0xAA, 0), "SAMPFUNCS Plugin loaded.");
SF->getSAMP()->registerChatCommand("cmd", cmd_callback);
}
}
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReasonForCall, LPVOID lpReserved)
{
if (dwReasonForCall == DLL_PROCESS_ATTACH)
SF->initPlugin(mainloop, hModule);
return TRUE;
}
// Глоб. область
struct stSeed
{
int id;
float distance;
CVector position;
std::string seed;
}seed[SAMP_MAX_3DTEXTS];
// Бессконечный цикл
auto it = *std::min_element(std::begin(seed), std::end(seed), [](const stSeed& a, const stSeed& b) {return a.distance < b.distance; });
msg(formatString("[%d] Distance: %0.2f", it.id, it.distance));
Ну так вот, незаполненная структура имеет distance 0, поэтому ты и получаешь 0Почему выводит 0? В imgui вывожу через цикл структуры и там заполняются, но не все структуры.
C++:// Глоб. область struct stSeed { int id; float distance; CVector position; std::string seed; }seed[SAMP_MAX_3DTEXTS]; // Бессконечный цикл auto it = *std::min_element(std::begin(seed), std::end(seed), [](const stSeed& a, const stSeed& b) {return a.distance < b.distance; }); msg(formatString("[%d] Distance: %0.2f", it.id, it.distance));
Process.Start(samp, IP_CONNECT);
ну тебе аргументы надо в нужном формате к игре прописать, и библиотеку с сампом подгрузить1. Делаю лаунчер для своего сервера на C# через Visual Studio. Мне нужно запускать прямое подключение к серверу, используя другую директорию игры (которую пользователь может настроить в настройках). Если использовать(у меня в переменных прописан путь к сампу и IP сервера), то запускается гта, которая указана в настройках самого сампа.C++:Process.Start(samp, IP_CONNECT);
потому что самп запускает игру, путь к которой лежит в реестреЕсли использовать(у меня в переменных прописан путь к сампу и IP сервера), то запускается гта, которая указана в настройках самого сампа.C++:Process.Start(samp, IP_CONNECT);
Если использовать (у меня в переменных прописан путь к сампу и IP сервера), то запускается гта, которая указана в настройках самого сампа.
public void setSettings(string newpath)
{
RegistryKey SAMP = Registry.CurrentUser.OpenSubKey("Software\\SAMP", true);
if (SAMP != null)
{
object savepath = newpath;
SAMP.SetValue("gta_sa_exe", newpath);
}
}
public string getSettings()
{
string path;
RegistryKey SAMP = Registry.CurrentUser.OpenSubKey("Software\\SAMP");
if (SAMP != null)
{
object SAMP_path = SAMP.GetValue("gta_sa_exe");
path = Convert.ToString(SAMP_path);
}
return path;
}
private void play_Click(object sender, EventArgs e)
{
if (nickname.Text.Length > 2 && nickname.Text.Length < 21)
{
string gamepath = getSettings();
setSettings(gamepath, nickname.Text, false);
string samp_path = gamepath.Replace("gta_sa.exe", "samp.exe");
if (File.Exists(samp_path))
{
Process iStartProcess = new Process();
iStartProcess.StartInfo.FileName = samp_path;
iStartProcess.StartInfo.Arguments = " АЙПИ_СЕРВЕРА";
iStartProcess.Start();
}
else
{
MessageBox.Show("Файл " + samp_path + " не найден!");
}
}
else
{
MessageBox.Show("Ошибка: длина ника должна содержать от 3 до 20 символов!");
}
}
DWORD CPed = 0xB6F5F0;
ReadProcessMemory(handle, (PBYTE*)CPed + 0x540, &Read, sizeof(Read), 0);
WriteProcessMemory(handle, (LPVOID)CPed, &NewValue, sizeof(NewValue), 0);
1. что ты делаешь это пиздецПривет, попытался выдать себе HP, почему так не работает? компилятор не жалуется.
Всё работает но HP не выдаются, сервер HMS.2:DWORD CPed = 0xB6F5F0; ReadProcessMemory(handle, (PBYTE*)CPed + 0x540, &Read, sizeof(Read), 0); WriteProcessMemory(handle, (LPVOID)CPed, &NewValue, sizeof(NewValue), 0);
2. сними протект
автору желаю выучить матчасть6. разберись что какая функция делает перед тем писать ее в свой код