OGSR / OGSR-Engine

OGSR Project - Evolution of X-Ray Engine for S.T.A.L.K.E.R.: Shadow of Chernobyl
https://discord.gg/Q6QDxbNcfR
Other
465 stars 88 forks source link

Консольная команда для скриптов #409

Closed bigmack2304 closed 2 years ago

bigmack2304 commented 2 years ago

Добавил консольную команду "user_command" для ввода (новых/ пользовательских) команд. Также добавил коллбек "on_user_command" в скрипты, который возвращает строку введенную в команду "user_command" . Данный функционал позволит управлять какими-либо переменными скриптов прямо из консоли. Пример с использованием...

bind_stalker.script

-- для начала нужно добавить новый колбек в список
function actor_binder:net_destroy()
...
self.object:set_callback(callback.on_user_command, nil)
end

function actor_binder:reinit()
...
self.object:set_callback( callback.on_user_command, self.on_user_command, self ) 
end

-- теперь добавим функцию с обработкой колбека
-- в этом примере обрабатываются только первые 2 значения после user_command, команда - значение

function actor_binder:on_user_command(cmd)
local cmd_lengh = string.len(cmd)
local com_space = string.find(cmd, " ")
    if (com_space ~= nil) then
    local command = string.sub(cmd, 1, (com_space - 1))
    local com_value_end = string.find(cmd, " ", (com_space + 1))
    if (com_value_end == nil) then com_value_end = cmd_lengh end
    local com_value = string.sub(cmd, (com_space + 1), com_value_end)
    command = string.gsub(command, " ", "")     
    com_value = string.gsub(com_value, " ", "")
    --log3("~ on_user_command: command: ["..command.."], type: "..type(command))
    --log3("~ on_user_command: value: ["..com_value.."], type: "..type(com_value))
    ------------------------------------------------
    -- тут можно ловить вызов колбека
    -- изначально command и com_value в формате string это нужно учитывать
    comand_test(command, com_value)     -- вызываем свою функцию
    end
  end

function comand_test(com, value) 
local value_number = tonumber(value)      -- конвертировать строку в число (если это нужно)
    if (value_number ~= nil) then                              
        if (com == "demo" and value_number == 5) then          -- если ввели "user_command demo 5"
            log3("com 1 ok")
        end
    end
    if (com == "demo" and value == "kek") then          -- если ввели "user_command demo kek"
        log3("com 2 ok")
    end
end