функция тегов

$Mr.R1ch$

Активный
Автор темы
303
43
Версия MoonLoader
Другое
приветствую, недавно полазил в коде одного скрипта и увидел функцию тега, она же используется для переключения пола персонажа (мужской и женский), и хотел бы упростить себе работу и попробовать сделать, но ничего не получилось (пример в скрипт, {gender} - пол персонажа, /me {gender:достал|достала} пистолет с кобуры). Хотелось бы такое реализовать
 

$Mr.R1ch$

Активный
Автор темы
303
43
rabotaet 100%:
local gender = 1

function change_tags(text)
    if text:find("%{gender%:(.+)%|(.+)%}") then
        local man_case, woman_case = text:match("%{gender%:(.+)%|(.+)%}")
        text = text:gsub("%{gender%:(.+)%|(.+)%}", gender == 1 and man_case or woman_case)
    end
    return text
end
не работает (или я делал чё то не то хз)
 

$Mr.R1ch$

Активный
Автор темы
303
43
свой код кинь, где ты встроил и используешь функцию
Lua:
local gender = 1
function change_tags(text)
    if text:find("%{gender%:(.+)%|(.+)%}") then
        local man_case, woman_case = text:match("%{gender%:(.+)%|(.+)%}")
        text = text:gsub("%{gender%:(.+)%|(.+)%}", gender == 1 and man_case or woman_case)
    end
    return text
end


imgui.OnFrame(function() return MainWindow[0] and not isGamePaused() end, function(window)
    imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
     --imgui.SetNextWindowSize(imgui.ImVec2(2305, 1035), imgui.Cond.Always)
     imgui.Begin(u8'Тестовое окно!', MainWindow, imgui.WindowFlags.NoResize + imgui.WindowFlags.AlwaysAutoResize)

if imgui.Button('test') then
           sampAddChatMessage('{gender:мужской пол|женский пол}', -1)
        end
  imgui.End()
end)
 

chromiusj

$TheWorldIsFvcked
Модератор
5,699
4,006
Lua:
local gender = 1
function change_tags(text)
    if text:find("%{gender%:(.+)%|(.+)%}") then
        local man_case, woman_case = text:match("%{gender%:(.+)%|(.+)%}")
        text = text:gsub("%{gender%:(.+)%|(.+)%}", gender == 1 and man_case or woman_case)
    end
    return text
end


imgui.OnFrame(function() return MainWindow[0] and not isGamePaused() end, function(window)
    imgui.SetNextWindowPos(imgui.ImVec2(sizeX / 2, sizeY / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
     --imgui.SetNextWindowSize(imgui.ImVec2(2305, 1035), imgui.Cond.Always)
     imgui.Begin(u8'Тестовое окно!', MainWindow, imgui.WindowFlags.NoResize + imgui.WindowFlags.AlwaysAutoResize)

if imgui.Button('test') then
           sampAddChatMessage('{gender:мужской пол|женский пол}', -1)
        end
  imgui.End()
end)
ну так функцию вызывай
sampAddChatMessage(change_tags('{gender:мужской пол|женский пол}'),-1)
 

$Mr.R1ch$

Активный
Автор темы
303
43
ну так функцию вызывай
sampAddChatMessage(change_tags('{gender:мужской пол|женский пол}'),-1)
это я понял, но я пытаюсь вызвать функцию в отыгровках, которые находятся в ini таблице, но не работает а сожалению.

Lua:
local ini = inicfg.load({
   main = {
      sex = 0
  }
}, "setting.ini")

local function change_tags(text)
    if text:find("%{gender%:(.+)%|(.+)%}") then
        local man_case, woman_case = text:match("%{gender%:(.+)%|(.+)%}")
        text = text:gsub("%{gender%:(.+)%|(.+)%}", ini.main.sex == 0 and man_case or woman_case)
    end
    return text
end

local guncfg = inicfg.load({
   weapon = {
      brassknuckle = "/me надел кастет",
      brassknuckle1 = "/me снял кастет",
      golfclub = "/me взял биту в руку",
      golfclub1 = "/me спрятал биту",
      nitestick = "/me {gender:снял|сняла} дубинку с поясного держателя"
  }
}, "weapon.ini")
выводит нормально, но не определяет пол (в условии прописано, если переменная в ини "sex" равно нулю, то определить как мужской пол, а если 1 - то женский, но ничего не сработало)
 

Fellespe.

Участник
76
15
это я понял, но я пытаюсь вызвать функцию в отыгровках, которые находятся в ini таблице, но не работает а сожалению.

Lua:
local ini = inicfg.load({
   main = {
      sex = 0
  }
}, "setting.ini")

local function change_tags(text)
    if text:find("%{gender%:(.+)%|(.+)%}") then
        local man_case, woman_case = text:match("%{gender%:(.+)%|(.+)%}")
        text = text:gsub("%{gender%:(.+)%|(.+)%}", ini.main.sex == 0 and man_case or woman_case)
    end
    return text
end

local guncfg = inicfg.load({
   weapon = {
      brassknuckle = "/me надел кастет",
      brassknuckle1 = "/me снял кастет",
      golfclub = "/me взял биту в руку",
      golfclub1 = "/me спрятал биту",
      nitestick = "/me {gender:снял|сняла} дубинку с поясного держателя"
  }
}, "weapon.ini")
выводит нормально, но не определяет пол (в условии прописано, если переменная в ини "sex" равно нулю, то определить как мужской пол, а если 1 - то женский, но ничего не сработало)
Ничего не понял из твоего объяснения, нормально распиши и код, где используется функция ну либо ты ее не используешь и поэтому нихера не работает, сама функция работает 100%, взял из скрипта, который сам и писал
 

$Mr.R1ch$

Активный
Автор темы
303
43
Ничего не понял из твоего объяснения, нормально распиши и код, где используется функция ну либо ты ее не используешь и поэтому нихера не работает, сама функция работает 100%, взял из скрипта, который сам и писал
грубо говоря мне всегда будет выводиться отыгровка мужского пола, а если я поставлю женский - то будет по прежнему выводится мужской (это только так в ини)
 

$Mr.R1ch$

Активный
Автор темы
303
43
Lua:
local ini = inicfg.load({
   main = {
      sex = 0 -- переменная, от которой работает сама система
  }
}, "setting.ini")

local function change_tags(text)
    if text:find("%{gender%:(.+)%|(.+)%}") then
        local man_case, woman_case = text:match("%{gender%:(.+)%|(.+)%}")
        text = text:gsub("%{gender%:(.+)%|(.+)%}", ini.main.sex == 0 and man_case or woman_case)
    end
    return text
end

local guncfg = inicfg.load({
   weapon = {
      nitestick = "/me {gender:снял|сняла} дубинку с поясного держателя" -- сам тег в отыгровке, (/me снял дубинку с поясного держателя, даже при ini.main.sex == 0 или 1)
  }
}, "weapon.ini")

--onFrame
if imgui.Button("Test") then
  sampAddChatMessage(guncfg.weapon.nitestick, -1)
-- sampAddChatMessage(change_tags(guncfg.weapon.nitestick), -1)
end