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

Young123

Новичок
10
0
Помогите, компилю, но текст не выводится (делаю на самп мобайл)
Код:
#include "main.h"
#include "armhook.h"

void AddMessageJumpQ(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))(g_libGTASA+0x4D1EA4))(text, time, flag, bPreviousBrief);
}

void InitializeAndLoad() {
    while (*reinterpret_cast<unsigned char*>(g_libGTASA+0x9E75B8) != 9) {
        std::this_thread::sleep_for(std::chrono::milliseconds(100u));
    }
    AddMessageJumpQ("~r~Hello from blast.hk", 5000, 0, false);
}
 

writeline

Новичок
21
8

Есть какой либо сорц по смени имени окна уже после подключения к серверу либо инициализации плагина?

По типу такого:
73690



Может кто то, что нибудь подсказать?
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
314
660

Есть какой либо сорц по смени имени окна уже после подключения к серверу либо инициализации плагина?

По типу такого:
73690



Может кто то, что нибудь подсказать?
SetWindowText(handle, "Заголовок");
 
  • Нравится
  • Клоун
Реакции: Fott и writeline

AdCKuY_DpO4uLa

Адский дрочер
Друг
314
660
Подскажи если сможешь, почему не хочет работать? 🧐

C++:
void windtext()
{
    HWND hwnd = FindWindow(NULL, "GTA:SA:MP");
    if (hwnd == NULL)
    {
        MessageBox(NULL, "Window not found!", "Error", MB_OK);
    }

    std::string newText = "GTA:BLAST.HK";
    SetWindowText(hwnd, newText.c_str());
}
У меня работает. Возможно ты используешь это в DLL и код вызывается до того, как самп инициализировался, а до того, как самп инициализировался, работать не будет, ибо там другое название окна
 
  • Клоун
Реакции: Fott

writeline

Новичок
21
8
У меня работает
Можешь свой вариант кода скинуть пожалуйста?

Помогите, компилю, но текст не выводится (делаю на самп мобайл)
Адреса не одинаковые с ПК сампом что ли? На ПК адреса 0x69F1E0 и 0xC8D4C0
Я конечно в мобийл 0, но попробуй вот так

С++:
#include "pch.h"
#include <thread>
#include "main.h"
#include "armhook.h"

void AddMessageJumpQ(const char* text, unsigned int time, unsigned short flag, bool bPreviousBrief)
{
    ((void(__cdecl*)(const char*, unsigned int, unsigned short, bool))0x4D1EA4)(text, time, flag, bPreviousBrief);
}

void InitializeAndLoad() {
    while (*reinterpret_cast<unsigned char*>(0x9E75B8) != 9) {
        std::this_thread::sleep_for(std::chrono::milliseconds(100u));
    }
    AddMessageJumpQ("~Hello from blast.hk", 5000, 0, false);
}

}

Как можно получить ID процесса по его названию? Нашел такую функцию в интернете:
C++:
#include <psutil.h>

int main()
{
    int process_id = psutil::GetProcessId("process_name");
    return 0;
}
 
Последнее редактирование:

hhkiyuujv

Новичок
4
0
Как пользоваться сампфунксом? На вики удалили раздел со списком функций.
 

horacy

Известный
102
92
Как отключить функцию /NOP/patch в C++, найденную в IDA в samp.dll, чтобы она не работала в игре?
SAMP 03DL, пишет код в mod_sa.
sub_1006A2B0
1675866723170.png
 

horacy

Известный
102
92
Нет
Пиши плагин)
Я имел в виду, как переопределить эту функцию на C++, я пишу в проекте mod_sa, поэтому я хотел бы написать это там, если только по какой-то причине это не может. Можете ли вы привести пример кода, который заменяет sub пустой функцией?
 

ARMOR

Модератор по раксампу
Модератор
4,936
6,732
Я имел в виду, как переопределить эту функцию на C++, я пишу в проекте mod_sa, поэтому я хотел бы написать это там, если только по какой-то причине это не может. Можете ли вы привести пример кода, который заменяет sub пустой функцией?
Так нопни нужный тебе вызов этой функции
 

0x73616D

Активный
140
42
Как я могу сделать то же самое, но на C++? (Я просто хочу научиться отправлять данные в дискорд)) (.asi — .sf)
Lua:
local encoding = require 'encoding' -- подключаем для корректной отправки русских букв
encoding.default = 'CP1251'
u8 = encoding.UTF8
local sampev = require 'lib.samp.events' -- подключаем для хука отправки ответа на диалог
local effil = require 'effil' -- для ассинхронных запросов

local url = 'URL'
local data = {
   ['content'] = '', -- текст (меняется через команду, так что можно оставить пустым)
   ['username'] = 'Sended from .lua script!', -- ник отправителя
   ['avatar_url'] = 'https://c.tenor.com/Z9mXH7-MlcsAAAAS/sexy-black-man-thirst-trap.gif', -- ссылка на аватарку (можно убрать, будет дефолтная)
   ['tts'] = false, -- tts - text to speech - читалка сообщений (true/false)
   -- так же можно сделать еще много чего, подробнее тут: https://discord.com/developers/docs/resources/webhook
}

function main()
   while not isSampAvailable() do wait(0) end
   sampRegisterChatCommand('ds.msg', function(arg)
      data['username'] = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED))) -- ник отправителя = ник в игре
      data['content'] = arg -- делаем что бы текст сообщения был равен тексту который мы ввели после команды
      -- отправляем запрос
      asyncHttpRequest('POST', url, {headers = {['content-type'] = 'application/json'}, data = u8(encodeJson(data))},
      function(response)
         print('[WebHook] [OK] отправлено!')
      end,
      function(err)
         print('[WebHook] [ERROR] error: '..err)
      end)
   end)
   wait(-1)
end

-- функция для отправки ассинхронных сообщений
function asyncHttpRequest(method, url, args, resolve, reject)
   local request_thread = effil.thread(function (method, url, args)
      local requests = require 'requests'
      local result, response = pcall(requests.request, method, url, args)
      if result then
         response.json, response.xml = nil, nil
         return true, response
      else
         return false, response
      end
   end)(method, url, args)
   -- Если запрос без функций обработки ответа и ошибок.
   if not resolve then resolve = function() end end
   if not reject then reject = function() end end
   -- Проверка выполнения потока
   lua_thread.create(function()
      local runner = request_thread
      while true do
         local status, err = runner:status()
         if not err then
            if status == 'completed' then
               local result, response = runner:get()
               if result then
                  resolve(response)
               else
                  reject(response)
               end
               return
            elseif status == 'canceled' then
               return reject(status)
            end
         else
            return reject(err)
         end
         wait(0)
      end
   end)
end
 
  • Эм
Реакции: writeline и Z3roKwq

Musaigen

abobusnik
Проверенный
1,606
1,361
Я имел в виду, как переопределить эту функцию на C++, я пишу в проекте mod_sa, поэтому я хотел бы написать это там, если только по какой-то причине это не может. Можете ли вы привести пример кода, который заменяет sub пустой функцией?
Покажи эпилог функции, где видно инструкцию ret/retn