Подключение скриптов через Scripts.xml - Форум
W4Tweaks
Меню сайта
Последние файлы
Последние темы


Вход



Мини-чат
 
500

Статистика
Онлайн:

Сегодня заходили: Cyborg, 4erveR


Друзья сайта

Если вы хотите увидеть в этом спиcке свой сайт загляните сюда

Наш баннер:



· Регистрация · Вход
[ Новые сообщения · Участники · Подписки · Поиск · RSS ]
Страница 1 из 11
Форум » Worms 4 Mayhem » 1.2. Вопросы по твикам » Подключение скриптов через Scripts.xml (Проблемы в подклчении.)
Подключение скриптов через Scripts.xml
firsacho
Дата: СБ, 21.02.2009, 11:03:19 | Сообщение # 1
firsacho
ICQ = 453-163-541
Группа: Админы
Сообщений: 3636
Репутация: 71
Статус: Offline
Вот такая проблема, которая вводит меня в недоумение - Уже давно замечено, что при отключении скрипта stdvs у мультиплеерных картах следует вылет, даже если его скопировать и переименовать а затем подключить под новым именем - опять же следует вылет, то есть где то стоит проверка на присутствии этого скрипта в мультиплеерных картах. То же самое заметил и в скриптах миссий. Здесь все намного хуже: например у ChallengeCrate должен обязательно стоять скрипт ChallengeCrate, даже если вместо него вставить такой же с другим названием- вылет. При создании своей миссии также вылет. То есть прийдется изменять готовые скрипты миссий. Также не знаю обязательно ли скрипт с миссией должен соответствовать ID миссии.

Есть такая идея решения этой проблемы. Допустим взять stdvs, скопировать, удалить из него все что является скриптом кроме структуры файла, чтоб ошибки не возникало, и подключить копию stdvs вторым скриптом.
Но, вопрос к герычу - я не знаю какая структура должна быть у файла скрипта минимально, чтобы он не нес никаких функций, и в то же время не вызывал ошибки? Просто скрипт-пустышка (blank), который можно уже дописывать, чтоб писать свой скрипт.





Смысл жизни в том, чтобы жизнь имела смысл... (firsacho 2005)
Рай придуман, чтобы не страшно было умирать. Ад придуман, чтобы не страшно было жить. (firsacho 2007)
Мир делиться на два типа людей: Бездарные трудоголики и Талантливые лентяи. (firsacho 2008)

www.w4mod.tk - моя модификация для worms4

www.fir-st.narod.ru - моя домашняя творческая страничка

www.botarena.by.ru - мой сайт об игре robot arena 2 (битвы роботов)
 
Герыч
Дата: СБ, 21.02.2009, 11:52:12 | Сообщение # 2
Герыч
Админ
Группа: Админы
Сообщений: 1240
Репутация: 60
Статус: Offline
смотри как это можно решить. Вообще, как работает 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. При этом строку:

Code
OldAFunction=a

надо писать до переопределения функции.

Теперь ближе к червям. В 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

Про подключение сриптов я тоже не супер разобрался...


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Дата: СБ, 21.02.2009, 12:08:10 | Сообщение # 3
Герыч
Админ
Группа: Админы
Сообщений: 1240
Репутация: 60
Статус: Offline
а, на вопрос то толком не ответил) короче можешь написать MyScript.lua, в котором будет такой текст:

Code
OldInitialise=Initialise
function Initialise()
    OldInitialise()
end

OldSetSpecialWeapon=SetSpecialWeapon
function SetSpecialWeapon(TeamIndex, WeaponName)
    OldSetSpecialWeapon(TeamIndex, WeaponName)
end

OldDoOncePerTurnFunctions=DoOncePerTurnFunctions
function DoOncePerTurnFunctions()
    OldDoOncePerTurnFunctions()
end

OldSetupScheme=SetupScheme
function SetupScheme()
    OldSetupScheme()
end

OldSetupInventoriesAndDelays=SetupInventoriesAndDelays
function SetupInventoriesAndDelays()
    OldSetupInventoriesAndDelays()
end

OldIncrementAlliedInventory=IncrementAlliedInventory
function IncrementAlliedInventory(AlliedGroup, Weapon)
    OldIncrementAlliedInventory(AlliedGroup, Weapon)
end

OldStockpile=Stockpile
function Stockpile()
    OldStockpile()
end

OldRoundOver=RoundOver
function RoundOver()
    OldRoundOver()
end

OldTurnStarted=TurnStarted
function TurnStarted()
    OldTurnStarted()
end

OldSetupTeleportIn=SetupTeleportIn
function SetupTeleportIn()
    OldSetupTeleportIn()
end

OldTeleportIn=TeleportIn
function TeleportIn()
    OldTeleportIn()
end

OldTimer_GameTimedOut=Timer_GameTimedOut
function Timer_GameTimedOut()
    OldTimer_GameTimedOut()
end

OldCheckSuddenDeath=CheckSuddenDeath
function CheckSuddenDeath()
    OldCheckSuddenDeath()
end

OldStartSuddenDeath=StartSuddenDeath
function StartSuddenDeath()
    OldStartSuddenDeath()
end

OldGameLogic_NoActivity=GameLogic_NoActivity
function GameLogic_NoActivity()
    OldGameLogic_NoActivity()
end

OldWorm_Died=Worm_Died
function Worm_Died()
    OldWorm_Died()
end

----

OldStartFirstTurn=StartFirstTurn
function StartFirstTurn()
    OldStartFirstTurn()
end

OldStartTurn=StartTurn
function StartTurn()
    OldStartTurn()
end

OldRunAILogic=RunAILogic
function RunAILogic()
    OldRunAILogic()
end

OldTimer_HotSeatTimedOut=Timer_HotSeatTimedOut
function Timer_HotSeatTimedOut()
    OldTimer_HotSeatTimedOut()
end

OldGameLogic_EndTurn_Immediate=GameLogic_EndTurn_Immediate
function GameLogic_EndTurn_Immediate()
    OldGameLogic_EndTurn_Immediate()
end

OldTimer_RetreatTimedOut=Timer_RetreatTimedOut
function Timer_RetreatTimedOut()
    OldTimer_RetreatTimedOut()
end

OldWorm_Damaged_Current=Worm_Damaged_Current
function Worm_Damaged_Current()
    OldWorm_Damaged_Current()
end

OldTimer_TurnTimedOut=Timer_TurnTimedOut
function Timer_TurnTimedOut()
    OldTimer_TurnTimedOut()
end

OldTimer_PostActivityTimedOut=Timer_PostActivityTimedOut
function Timer_PostActivityTimedOut()
    OldTimer_PostActivityTimedOut()
end
     
OldCheckActivity=CheckActivity
function CheckActivity()
    OldCheckActivity()
end

OldDoPostActivity=DoPostActivity
function DoPostActivity()
    OldDoPostActivity()
end

OldTurnEnded=TurnEnded
function TurnEnded()
    OldTurnEnded()
end

OldCheckOneTeamVictory=CheckOneTeamVictory
function CheckOneTeamVictory()
    OldCheckOneTeamVictory()
end

OldEndTurn=EndTurn
function EndTurn()
    OldEndTurn()
end

OldSetWind=SetWind
function SetWind()
    OldSetWind()
end

OldSelectRandomWind=SelectRandomWind
function SelectRandomWind()
    OldSelectRandomWind()
end

OldSetWormpotModes=SetWormpotModes
function SetWormpotModes()
    OldSetWormpotModes()
end

и если нужно в нужной функции меняй тело


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Форум » Worms 4 Mayhem » 1.2. Вопросы по твикам » Подключение скриптов через Scripts.xml (Проблемы в подклчении.)
Страница 1 из 11
Поиск:

Copyright W4Tweaks™ 2008-2016 Хостинг от uCoz