Резервное копирование и восстановление метатаблиц - PullRequest
0 голосов
/ 09 декабря 2018

Хорошо, я знаю, как довольно хорошо работать с метатаблицами, но я пытаюсь сделать резервную копию функций игры (используя getrawmetatable (game)). Например, вот скрипт для отключения функции Kick () в вашей игре

local getrawmetatable = getrawmetatable or debug.getmetatable
local make_writeable = make_writeable or setreadonly or changereadonly or 
   change_writeable
make_writeable(getrawmetatable(game), false)
local backup = getrawmetatable(game).__namecall
getrawmetatable(game).__namecall = function(u, ...)
   local m = ({...})[select('#', ...)]
   local packed = {...}
   local a = {}
   for i = 1, #packed - 1 do
      a[i] = packed[i]
   end
   if m == 'Kick' then
      warn('Kick attempt at ' .. os.time() .. ' (' .. tostring(unpack(a)) .. 
   ')')
      return true
   end
   return backup and backup(u, ...) or u[m](u, unpack(a))
end

Я знаю, что вы можете восстановить таблицу обратно в исходную, используя

local mt = getrawmetatable(game)
mt.__namecall = backup

Но есть ли способ сделать резервную копию всех вызовов имен (в файл или что-то еще)а затем восстановить их в исходные функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...