Помогите, пожалуйста с текстдравами

_ex$tanOr_

Участник
Автор темы
125
19
Версия MoonLoader
Другое
Скрипт, который по текстдраву, который ниже, определяет какую клавишу нажать. У меня при включение(вводе кмд) выдает ошибку, помогите, пожалуйста
sa-mp-000.png
Код:
[13:30:39.047887] (error)    posadka.lua: C:\MOP030B\DRP-CLEAR\moonloader\posadka.lua:26: attempt to concatenate upvalue 'nameKey' (a nil value)
stack traceback:
    C:\MOP030B\DRP-CLEAR\moonloader\posadka.lua: in function <C:\MOP030B\DRP-CLEAR\moonloader\posadka.lua:14>
[13:30:39.047887] (error)    posadka.lua: Script died due to an error. (321FAECC)
Код
Lua:
require("lib.moonloader")
sampev = require("lib.samp.events")
local active = false

local keys = require "vkeys"
local encoding = require 'encoding'

encoding.default = 'CP1251'
u8 = encoding.UTF8
TextDraw_id = 2140
msg_active = false
nameKey = nil

function main()
  if not isSampLoaded() or not isSampfuncsLoaded() then return end
  while not isSampAvailable() do wait(100) end
  sampRegisterChatCommand("posad", function()   active = not active
    sampAddChatMessage((active and "{FF8C00}[floodAlt] Включен" or "{FF8C00}[floodAlt] Выключен"), -1)
  end)
  while true do
  wait(0)
if active then
  setVirtualKeyDown(key_for_press, true)
  wait(500)
  setVirtualKeyDown(key_for_press, false)
  sampAddChatMessage("Клавиша была нажата - "..nameKey, 0xFFFF00)
  active = false
end
end
end

function sampev.onTextDrawSetString(id, text)
  if id == TextDraw_id then
  if text:match("%~w%~PRESS %[ %~b%~%~k%~%~GROUP_CONTROL_BWD%~%~w%~ %]") then
  active = true
  key_for_press = VK_H
  nameKey = "H"
  end
  if text:match("%~w%~PRESS %[ %~b%~%~k%~%~SNEAK_ABOUT%~%~w%~ %]") then
  msg_active = true
  key_for_press = VK_MENU
  nameKey = "Alt"
  end
  if text:match("%~w%~PRESS %[ %~b%~%~k%~%~PED_SPRINT%~%~w%~ %]") then
  msg_active = true
  key_for_press = VK_SPACE
  nameKey = "Проблем"
  end
    end
end
 

_ex$tanOr_

Участник
Автор темы
125
19
Ну, во первых это не текстдрав а gametext, отловить его поможет
Lua:
require('lib.samp.events').onDisplayGameText = function(style, time, text)
print(text)
end
Во вторых, переменной nameKey не существует из-за чего и ошибка
Тобишь всю функцию sampev.onTextDrawSetString я убираю?
Сделал проверку на nameKey

Lua:
function main()
  if not isSampLoaded() or not isSampfuncsLoaded() then return end
  while not isSampAvailable() do wait(100) end
  sampRegisterChatCommand("posad", function()   active = not active
    sampAddChatMessage((active and "{FF8C00}[floodAlt] Включен" or "{FF8C00}[floodAlt] Выключен"), -1)
  end)
  while true do
  wait(0)
if active and nameKey ~= nil then
  setVirtualKeyDown(key_for_press, true)
  wait(500)
  setVirtualKeyDown(key_for_press, false)
  sampAddChatMessage("Клавиша была нажата - "..nameKey, 0xFFFF00)
  active = false
end
end
end
 

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,199
Ну, во первых это не текстдрав а gametext, отловить его поможет
Lua:
require('lib.samp.events').onDisplayGameText = function(style, time, text)
print(text)
end
Во вторых, переменной nameKey не существует из-за чего и ошибка
Это текстдрав.
Скрипт, который по текстдраву, который ниже, определяет какую клавишу нажать. У меня при включение(вводе кмд) выдает ошибку, помогите, пожалуйста
Код:
[13:30:39.047887] (error)    posadka.lua: C:\MOP030B\DRP-CLEAR\moonloader\posadka.lua:26: attempt to concatenate upvalue 'nameKey' (a nil value)
stack traceback:
    C:\MOP030B\DRP-CLEAR\moonloader\posadka.lua: in function <C:\MOP030B\DRP-CLEAR\moonloader\posadka.lua:14>
[13:30:39.047887] (error)    posadka.lua: Script died due to an error. (321FAECC)
Код
Lua:
require("lib.moonloader")
sampev = require("lib.samp.events")
local active = false

local keys = require "vkeys"
local encoding = require 'encoding'

encoding.default = 'CP1251'
u8 = encoding.UTF8
TextDraw_id = 2140
msg_active = false
nameKey = nil

function main()
  if not isSampLoaded() or not isSampfuncsLoaded() then return end
  while not isSampAvailable() do wait(100) end
  sampRegisterChatCommand("posad", function()   active = not active
    sampAddChatMessage((active and "{FF8C00}[floodAlt] Включен" or "{FF8C00}[floodAlt] Выключен"), -1)
  end)
  while true do
  wait(0)
if active then
  setVirtualKeyDown(key_for_press, true)
  wait(500)
  setVirtualKeyDown(key_for_press, false)
  sampAddChatMessage("Клавиша была нажата - "..nameKey, 0xFFFF00)
  active = false
end
end
end

function sampev.onTextDrawSetString(id, text)
  if id == TextDraw_id then
  if text:match("%~w%~PRESS %[ %~b%~%~k%~%~GROUP_CONTROL_BWD%~%~w%~ %]") then
  active = true
  key_for_press = VK_H
  nameKey = "H"
  end
  if text:match("%~w%~PRESS %[ %~b%~%~k%~%~SNEAK_ABOUT%~%~w%~ %]") then
  msg_active = true
  key_for_press = VK_MENU
  nameKey = "Alt"
  end
  if text:match("%~w%~PRESS %[ %~b%~%~k%~%~PED_SPRINT%~%~w%~ %]") then
  msg_active = true
  key_for_press = VK_SPACE
  nameKey = "Проблем"
  end
    end
end
Lua:
local sampev = require('lib.samp.events')

function sampev.onTextDrawSetString(id, text)
    if text:find('~w~Press ~g~~k~~CONVERSATION_NO~ ~w~%(%d+/10%)') then -- буква N
        --code
    end
end
 

_ex$tanOr_

Участник
Автор темы
125
19
Это текстдрав.

Lua:
local sampev = require('lib.samp.events')

function sampev.onTextDrawSetString(id, text)
    if text:find('~w~Press ~g~~k~~CONVERSATION_NO~ ~w~%(%d+/10%)') then -- буква N
        --code
    end
end
Я так и не понял. На скрине текстдрав или же gametext?
 

_ex$tanOr_

Участник
Автор темы
125
19
Текстдрав на сколько я понял.
У меня еще вопросик есть.
Что означает
"%~w%~PRESS %[ %~b%~%~k%~%~SNEAK_ABOUT%~%~w%~ %]
всё, кроме PRESS [SNEAK_ABOUT]

Я просто это взял с другой темки и хочу переделать под себя
 

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,199
У меня еще вопросик есть.
Что означает
"%~w%~PRESS %[ %~b%~%~k%~%~SNEAK_ABOUT%~%~w%~ %]
всё, кроме PRESS [SNEAK_ABOUT]

Я просто это взял с другой темки и хочу переделать под себя
шифт


Более адекватный код.
Lua:
sampev = require("lib.samp.events")
local active = false
local encoding = require 'encoding'

encoding.default = 'CP1251'
u8 = encoding.UTF8

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
   
    sampRegisterChatCommand("posad", function()
        active = not active
        sampAddChatMessage(active and "{FF8C00}[floodAlt] Включен" or "{FF8C00}[floodAlt] Выключен", -1)
    end)
end

function sampev.onTextDrawSetString(id, text)
    if active then
        if text:find('~w~Press ~g~~k~~CONVERSATION_NO~ ~w~%(%d+/10%)') then -- буква N
            sendKey(128)
            sampAddChatMessage("Нажата буква N", -1)
        end
        if text:find('~w~Press ~g~~k~~GROUP_CONTROL_BWD~ ~w~%(%d+/10%)') then -- буква H
            sendKey(192)
            sampAddChatMessage("Нажата буква H", -1)
        end
        if text:find('~w~Press ~g~~k~~CONVERSATION_YES~ ~w~%(%d+/10%)') then -- буква Y
            sendKey(64)
            sampAddChatMessage("Нажата буква Y", -1)
        end
    end
end

function sendKey(key)
    local _, myId = sampGetPlayerIdByCharHandle(PLAYER_PED)
    local data = allocateMemory(68)
    sampStorePlayerOnfootData(myId, data)
    setStructElement(data, 36, 1, key, false)
    sampSendOnfootData(data)
    freeMemory(data)
end
 

_ex$tanOr_

Участник
Автор темы
125
19
шифт


Более адекватный код.
Lua:
sampev = require("lib.samp.events")
local active = false
local encoding = require 'encoding'

encoding.default = 'CP1251'
u8 = encoding.UTF8

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
 
    sampRegisterChatCommand("posad", function()
        active = not active
        sampAddChatMessage(active and "{FF8C00}[floodAlt] Включен" or "{FF8C00}[floodAlt] Выключен", -1)
    end)
end

function sampev.onTextDrawSetString(id, text)
    if active then
        if text:find('~w~Press ~g~~k~~CONVERSATION_NO~ ~w~%(%d+/10%)') then -- буква N
            sendKey(128)
            sampAddChatMessage("Нажата буква N", -1)
        end
        if text:find('~w~Press ~g~~k~~GROUP_CONTROL_BWD~ ~w~%(%d+/10%)') then -- буква H
            sendKey(192)
            sampAddChatMessage("Нажата буква H", -1)
        end
        if text:find('~w~Press ~g~~k~~CONVERSATION_YES~ ~w~%(%d+/10%)') then -- буква Y
            sendKey(64)
            sampAddChatMessage("Нажата буква Y", -1)
        end
    end
end

function sendKey(key)
    local _, myId = sampGetPlayerIdByCharHandle(PLAYER_PED)
    local data = allocateMemory(68)
    sampStorePlayerOnfootData(myId, data)
    setStructElement(data, 36, 1, key, false)
    sampSendOnfootData(data)
    freeMemory(data)
end
Где коды клавиш sendkey найти?
 

Quasper

Известный
835
354
Это текстдрав.

Lua:
local sampev = require('lib.samp.events')

function sampev.onTextDrawSetString(id, text)
    if text:find('~w~Press ~g~~k~~CONVERSATION_NO~ ~w~%(%d+/10%)') then -- буква N
        --code
    end
end
Схуяли текстдрав когда это гейм текст, обрати внимание на фонтс