Софт RakSAMP Lite

varkon

Известный
179
16
подробнее плиз
Lua:
function require("samp.events").onShowDialog(id, style, title, button1, button2, text) --
    if title:find( " ЗАГОЛОВОК ДИАЛОГА ") then  -- дучше всего искать по заголовку, нежели по ID.
        if text:find("Какой-то текст (в диалоге), который тебе нужно найти ") then
            sampSendDialogResponse(id, 1, 0, 0, "") -- Нажимаем кнопку под номером №1 ( например, "ОК")
        end
    end
end
 

IntelCoreI7

Участник
32
7
if text:find("Какой-то текст (в диалоге), который тебе нужно найти ") then
так это же вроде если текст В САМОМ диалоге, а мне нужно текст с кнопки.
2024-10-04_18-28-58.png
 

varkon

Известный
179
16
так это же вроде если текст В САМОМ диалоге, а мне нужно текст с кнопки. Посмотреть вложение 253420
Это пример, адаптируй под свои нужды
Lua:
function sampGetListboxItemByText(text, searchText, plain) -- куда-то вставить, например куда ни будь
    plain = plain ~= false
    local i = 0
    for line in text:gmatch("[^\r\n]+") do
        if (plain and line == searchText) or (not plain and line:find(searchText)) then
            return i
        end
        i = i + 1
    end
    return -1
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if dialogId == 25526 or title:find("{BFBBBA}Выбор места спавна") then -- двойная проверка по ид / названию
        newTask(function() -- запуск "таймера"
            wait(500) -- ждем 500 мс
            local text_spawn = sampGetListboxItemByText(text, "Дом №786", false) -- выбираем пункт диалога с названием Дом №786
            sendDialogResponse(dialogId, 1, text_spawn, "") -- нажимаем на него
            sendDialogResponse(dialogId, 0, 0, "") -- "закрываем" диалог
            return false -- что бы не показывался диалог, но по-моему, он один хер показывается
        end)
     end
end
 

IntelCoreI7

Участник
32
7
Это пример, адаптируй под свои нужды
Lua:
function sampGetListboxItemByText(text, searchText, plain) -- куда-то вставить, например куда ни будь
    plain = plain ~= false
    local i = 0
    for line in text:gmatch("[^\r\n]+") do
        if (plain and line == searchText) or (not plain and line:find(searchText)) then
            return i
        end
        i = i + 1
    end
    return -1
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
    if dialogId == 25526 or title:find("{BFBBBA}Выбор места спавна") then -- двойная проверка по ид / названию
        newTask(function() -- запуск "таймера"
            wait(500) -- ждем 500 мс
            local text_spawn = sampGetListboxItemByText(text, "Дом №786", false) -- выбираем пункт диалога с названием Дом №786
            sendDialogResponse(dialogId, 1, text_spawn, "") -- нажимаем на него
            sendDialogResponse(dialogId, 0, 0, "") -- "закрываем" диалог
            return false -- что бы не показывался диалог, но по-моему, он один хер показывается
        end)
     end
end
[18:41:48] [LUA] C:\Share\bot_v2\scripts\libs\addon.lua:176: C:\Share\bot_v2\scripts\libs\addon.lua:15: bad argument #1 to 'writeUInt16' (number expected, got nil)
stack traceback:
[C]: in function 'error'
C:\Share\bot_v2\scripts\libs\addon.lua:160: in function 'tick'
C:\Share\bot_v2\scripts\libs\addon.lua:176: in function <C:\Share\bot_v2\scripts\libs\addon.lua:174>

123:
function sampGetListboxItemByText(text, searchText, plain) -- куда-то вставить, например где не сток функции
    plain = plain ~= false
    local i = 0
    for line in text:gmatch("[^\r\n]+") do
        if (plain and line == searchText) or (not plain and line:find(searchText)) then
            return i
        end
        i = i + 1
    end
    return -1
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
        newTask(function() -- запуск "таймера"
            wait(500) -- ждем 500 мс
            local text_spawn = sampGetListboxItemByText(text, "Создать игровой мир", false) -- выбираем пункт диалога с названием Дом №786
            sendDialogResponse(id, 2, text_spawn, "") -- нажимаем на него
            sendDialogResponse(id, 0, 0, "") -- "закрываем" диалог
            return false -- что бы не показывался диалог, но по-моему, он один хер показывается
        end)
     end

[18:41:48] [LUA] C:\Share\bot_v2\scripts\libs\addon.lua:176: C:\Share\bot_v2\scripts\libs\addon.lua:15: bad argument #1 to 'writeUInt16' (number expected, got nil)
stack traceback:
[C]: in function 'error'
C:\Share\bot_v2\scripts\libs\addon.lua:160: in function 'tick'
C:\Share\bot_v2\scripts\libs\addon.lua:176: in function <C:\Share\bot_v2\scripts\libs\addon.lua:174>

123:
function sampGetListboxItemByText(text, searchText, plain) -- куда-то вставить, например где не сток функции
    plain = plain ~= false
    local i = 0
    for line in text:gmatch("[^\r\n]+") do
        if (plain and line == searchText) or (not plain and line:find(searchText)) then
            return i
        end
        i = i + 1
    end
    return -1
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
        newTask(function() -- запуск "таймера"
            wait(500) -- ждем 500 мс
            local text_spawn = sampGetListboxItemByText(text, "Создать игровой мир", false) -- выбираем пункт диалога с названием Дом №786
            sendDialogResponse(id, 2, text_spawn, "") -- нажимаем на него
            sendDialogResponse(id, 0, 0, "") -- "закрываем" диалог
            return false -- что бы не показывался диалог, но по-моему, он один хер показывается
        end)
     end


[18:41:48] [LUA] C:\Share\bot_v2\scripts\libs\addon.lua:176: C:\Share\bot_v2\scripts\libs\addon.lua:15: bad argument #1 to 'writeUInt16' (number expected, got nil)
stack traceback:
[C]: in function 'error'
C:\Share\bot_v2\scripts\libs\addon.lua:160: in function 'tick'
C:\Share\bot_v2\scripts\libs\addon.lua:176: in function <C:\Share\bot_v2\scripts\libs\addon.lua:174>

123:
function sampGetListboxItemByText(text, searchText, plain) -- куда-то вставить, например где не сток функции
    plain = plain ~= false
    local i = 0
    for line in text:gmatch("[^\r\n]+") do
        if (plain and line == searchText) or (not plain and line:find(searchText)) then
            return i
        end
        i = i + 1
    end
    return -1
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
        newTask(function() -- запуск "таймера"
            wait(500) -- ждем 500 мс
            local text_spawn = sampGetListboxItemByText(text, "Создать игровой мир", false) -- выбираем пункт диалога с названием Дом №786
            sendDialogResponse(id, 2, text_spawn, "") -- нажимаем на него
            sendDialogResponse(id, 0, 0, "") -- "закрываем" диалог
            return false -- что бы не показывался диалог, но по-моему, он один хер показывается
        end)
     end


кое что изменил но блять теперь он че то стал иногда с нихуя флудить нажатием диалогов
кое что изменил но блять теперь он че то стал иногда с нихуя флудить нажатием диалогов
 
Последнее редактирование:

varkon

Известный
179
16
[18:41:48] [LUA] C:\Share\bot_v2\scripts\libs\addon.lua:176: C:\Share\bot_v2\scripts\libs\addon.lua:15: bad argument #1 to 'writeUInt16' (number expected, got nil)
stack traceback:
[C]: in function 'error'
C:\Share\bot_v2\scripts\libs\addon.lua:160: in function 'tick'
C:\Share\bot_v2\scripts\libs\addon.lua:176: in function <C:\Share\bot_v2\scripts\libs\addon.lua:174>

123:
function sampGetListboxItemByText(text, searchText, plain) -- куда-то вставить, например где не сток функции
    plain = plain ~= false
    local i = 0
    for line in text:gmatch("[^\r\n]+") do
        if (plain and line == searchText) or (not plain and line:find(searchText)) then
            return i
        end
        i = i + 1
    end
    return -1
end

function sampev.onShowDialog(id, style, title, button1, button2, text)
        newTask(function() -- запуск "таймера"
            wait(500) -- ждем 500 мс
            local text_spawn = sampGetListboxItemByText(text, "Создать игровой мир", false) -- выбираем пункт диалога с названием Дом №786
            sendDialogResponse(id, 2, text_spawn, "") -- нажимаем на него
            sendDialogResponse(id, 0, 0, "") -- "закрываем" диалог
            return false -- что бы не показывался диалог, но по-моему, он один хер показывается
        end)
     end





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

kyrtion

\0
Проверенный
1,515
616
Прикол в том что скрипт должен нажать 4 кнопки а не 1. Он дальше 1 кнопки не идёт
кнопка ответа диалога от 0 до 1.
0 - ложь, то левая сторона
1 - истинна
а по спискам начиная с 0, если там будет вроде, с описанием диалога, в таком случае первая строка убрать (или добавить -1 в списке)
 

IntelCoreI7

Участник
32
7
кнопка ответа диалога от 0 до 1.
0 - ложь, то левая сторона
1 - истинна
а по спискам начиная с 0, если там будет вроде, с описанием диалога, в таком случае первая строка убрать (или добавить -1 в списке)
Подробнее плиз
 

kyrtion

\0
Проверенный
1,515
616
Как перезагрузить луа? Если через runcommand то крашит
брать новый раксамп в тг:
 

kyrtion

\0
Проверенный
1,515
616
SERVER WebSocket + Hono + Bun:
JavaScript:
import { Hono } from "hono";
import { createBunWebSocket } from "hono/bun";
import type { ServerWebSocket } from "bun";

const { upgradeWebSocket, websocket } = createBunWebSocket<ServerWebSocket>();

const app = new Hono();

app.get(
  "/yourwebsocket",
  upgradeWebSocket((c) => {
    return {
      onOpen(event, ws) {
        console.log(`New client: `, event, ws);
      },
      onMessage(event, ws) {
        console.log(`Message from client: ${event.data}`);
        ws.send("Hello from server! Привет мир!");
      },
      onClose(event, ws) {
        console.log("Connection closed");
      },
    };
  })
);

export default {
  fetch: app.fetch,
  websocket,
};

CLIENT RakSAMP + Библиотеки в libs и в корень папки (там где стоит .exe):
(архив в конце поста ссылки)
Lua:
require('addon')
local encoding = require('encoding'); encoding.default = 'CP1251'; local u8 = encoding.UTF8
local ws = require('websocketsamp')

local last_message = ''

local function runWebSocket()
  return newTask(function()
    while true do
      if ws.GetConnectionStatus() == 'OPEN' then
        local output = ws.GetMessage()
        if output ~= '' and output ~= last_message then
          print(u8:decode(output))
        end
      else
        ws.Connect('ws://localhost:3000/yourwebsocket');
      end
      wait(100)
    end
  end)
end

-- for dev
function onRequestConnect()
  return false
end

function onLoad()
  local task = runWebSocket()
end

function onInput(cmd)
  print(cmd)
  if cmd:find('!w (.+)') then
    last_message = cmd:match('!w (.+)')
    ws.SendMessage(u8:encode(last_message))
    return false
  end
end

function onDisconnect()
  ws.Disconnect()
end
 
Последнее редактирование: