Другое С/С++ Вопрос - Ответ

yung milonov

Известный
1,005
514
Как получить ID машины, в которой сидит мой персонаж?
Или же аналог:
Lua:
_, id = sampGetVehicleIdByCarHandle(storeCarCharIsInNoSave(PLAYER_PED))
 

chapo

чопа сребдс // @moujeek
Модератор
8,877
11,586
1. как получить/изменить список введенных ранее команд и как их изменить/удалить?
2. как хукнуть отправку самповской команды (например /pagesize)?
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
1. как получить/изменить список введенных ранее команд и как их изменить/удалить?
2. как хукнуть отправку самповской команды (например /pagesize)?
1. https://github.com/BlastHackNet/SAM...ea58f/include/sampapi/0.3.7-R3-1/CInput.h#L28

2.
C++:
hook.after += [](CMDPROC& return_value, const char*& szName) {
    if (return_value) {
        // if local command
    }
    else {
        // unknown command; sends to server
    }
};
Ну либо можешь изъебнуться тут:
 

chapo

чопа сребдс // @moujeek
Модератор
8,877
11,586
1.Ваш вопрос: Дайте код для вывода сообщения в чат при запуске САМПА и еще код на активацию по команде
1. В шаблоне плагина уже есть добавление сообщения
1640358411366.png

2.
C++:
#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;
}
 

EclipsedFlow

Известный
Проверенный
1,045
475
Почему выводит 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));
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
Почему выводит 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));
Ну так вот, незаполненная структура имеет distance 0, поэтому ты и получаешь 0
 
  • Нравится
Реакции: EclipsedFlow

EclipsedFlow

Известный
Проверенный
1,045
475
Как получить угол камеры персонажа? (Радианы или лучше градусы)
Не с помощью SF
Спасибо заранее
 

ERKYNIS

Новичок
1
0
1. Делаю лаунчер для своего сервера на C# через Visual Studio. Мне нужно запускать прямое подключение к серверу, используя другую директорию игры (которую пользователь может настроить в настройках). Если использовать
C++:
Process.Start(samp, IP_CONNECT);
(у меня в переменных прописан путь к сампу и IP сервера), то запускается гта, которая указана в настройках самого сампа.
 

memir

🇷🇺
Всефорумный модератор
340
611
1. Делаю лаунчер для своего сервера на C# через Visual Studio. Мне нужно запускать прямое подключение к серверу, используя другую директорию игры (которую пользователь может настроить в настройках). Если использовать
C++:
Process.Start(samp, IP_CONNECT);
(у меня в переменных прописан путь к сампу и IP сервера), то запускается гта, которая указана в настройках самого сампа.
ну тебе аргументы надо в нужном формате к игре прописать, и библиотеку с сампом подгрузить
 

chapo

чопа сребдс // @moujeek
Модератор
8,877
11,586
Если использовать
C++:
Process.Start(samp, IP_CONNECT);
(у меня в переменных прописан путь к сампу и IP сервера), то запускается гта, которая указана в настройках самого сампа.
потому что самп запускает игру, путь к которой лежит в реестре

Если использовать (у меня в переменных прописан путь к сампу и IP сервера), то запускается гта, которая указана в настройках самого сампа.
C#:
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 символов!");
    }
}
 
Последнее редактирование:
  • Bug
Реакции: ERKYNIS и 4el0ve4ik

[w0te]

Потрачен
771
492
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Привет, попытался выдать себе HP, почему так не работает? компилятор не жалуется.
2:
DWORD CPed = 0xB6F5F0;
ReadProcessMemory(handle, (PBYTE*)CPed + 0x540, &Read, sizeof(Read), 0);
WriteProcessMemory(handle, (LPVOID)CPed, &NewValue, sizeof(NewValue), 0);
Всё работает но HP не выдаются, сервер HMS.
 

sc6ut

неизвестный
Модератор
382
1,089
Привет, попытался выдать себе HP, почему так не работает? компилятор не жалуется.
2:
DWORD CPed = 0xB6F5F0;
ReadProcessMemory(handle, (PBYTE*)CPed + 0x540, &Read, sizeof(Read), 0);
WriteProcessMemory(handle, (LPVOID)CPed, &NewValue, sizeof(NewValue), 0);
Всё работает но HP не выдаются, сервер HMS.
1. что ты делаешь это пиздец
2. сними протект
3. в 0xB6F5F0 хранится указатель на cped а не сам cped
4. что делает твой код только сам бог знает, хп он не меняет так точно
5. есть статичный адресс можешь юзать его (0xB793E0), тебе будет проще и нам тоже
6. разберись что какая функция делает перед тем писать ее в свой код
7. разберись и подумай что тебе надо сделать чтобы выставить значение хп
8. используй google
9. не насилуй код тем что не понимаешь
10. https://gtamods.com/wiki/Memory_Addresses_(SA)
11. если трахнул извини
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
Последнее редактирование: