смотри как это можно решить. Вообще, как работает lua. Он загружает все скрипты в один текст, то есть к примеру идёт так: текст из stdlib.lua
текст из stdvs.lua
текст из других файлов
потом полученный текст выполняется последовательно.
В lua код не обязательно находится в теле функции, к примеру(это псевдокод, подразумевается, что DisplayComment выводит на экран текст):
Code
DisplayComment("Вне функции")
function a()
DisplayComment("В функции")
end
a()
DisplayComment("Ещё раз вне функции")
Этот код выведет:
Code
Вне функции
В функции
Ещё раз вне функции
В lua можно переопределять функции:
Code
function a()
DisplayComment("1")
end
function a()
DisplayComment("2")
end
a()
тут вызовется не первая, а вторая функция(на экран выведется 2).
В lua есть несколько типов данных: строки(текст), числа, таблицы, функции. То есть мы можем хранить ссылку на функцию в переменной, поэтому можно написать такой код:
Code
function a()
DisplayComment("1")
end
OldAFunction=a
function a()
DisplayComment("2")
end
a()
OldAFunction()
тут на экран выведется 2 1. При этом строку:
надо писать до переопределения функции. Теперь ближе к червям. В stdvs к примеру есть функция
Code
function Initialise()
StartedSuddenDeath = false
SetupScheme()
lib_SetupMultiplayerWormsAndTeams()
SendMessage("WormManager.Reinitialise")
lib_SetupMinesAndOildrums() -- do this after worms are set up to get correct worm collision
local scheme = QueryContainer("GM.SchemeData")
if scheme.RoundTime == 0 then
StartSuddenDeath() -- do this after worms are set up to readjust health
local GameOver = GetData("FCS.GameOver")
-- do no further processing if sudden death drew the game
if GameOver ~= 0 then
return
end
end
if scheme.MineFactoryOn == true then
SendMessage("GameLogic.CreateRandMineFactory")
end
if scheme.TelepadsOn == true then
SendMessage("GameLogic.PlaceTelepads")
end
SetData("Camera.StartOfTurnCamera","Default")
SetWormpotModes()
WaitingForStartFirstTurn = false
StartFirstTurn()
end
В своём скрипте фактически можно написать так:
Code
OldInitialize=Initialize
function Initialise()
-- тут проводим свою инициализацию
OldInitialize() --когда необходимо вызываем старый обработчик
-- продолжаем свою инициализацию
end
Про подключение сриптов я тоже не супер разобрался...