[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Моддинг » 5.3. Идеи скриптов и их обсуждение » Lua + паки карт (Сделать lua-скрипты в паке карт)
Lua + паки карт
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Идея: Сделать lua-скрипты в паке карт для игры по онлайну
Тема зародилась тут. Паки карт поддерживают замену lua-скриптов, а это очень мощный инструмент для создания модов и всего-всего! если измудриться можно даже онлайн-миссию сделать!

Основная проблема: при отключении lua-скрипта stdvs.lua для мультиплеерной карты игра не начинается, камера начинает хаотично крутиться и ничего не происходит. Отсюда вывод: в любом паке карт для каждой карты должен быть stdvs.lua. Значит надо прицепить свой lua-скрипт, обрабатывающий некоторые события.

Надо:
составить общий список событий, вызываемых в lua скриптах(надо проглядеть все lua файлы и посмотреть все функции, которые не вызываются внутри этого же lua-скрипта)
После этого надо попробовать создать свой lua-скрипт со своими функциями, и там прописать обработку эти событий. Затем в паке карт к нужной карте попытаться прицепить этот lua-скрипт, т.е. чтобы в свойствах карты в строке lua-скрипты было:

Code
stdvs,wormpot,myscript.lua

и посмотреть эффект

Некоторая информация по lua тут

p.s. у меня нет червей, не могу этого сам проделать, так что помогайте! возможно мы перевернём мир Worms!


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
эм... а ты тупо отключил стдвс и все? пробовал просто сменить тип какой-нить одиночной миссии на 0 и запустить ее в онлайне или хотя бы в оффлайн мультиплеере? в принципе это должно сработать.



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

mod.worms.pro - мод Worms Renewation для Worms4
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
я говорю именно о паках карт+lua,
проблема как раз в том, что все карты, добавляемые через пак карт я сделал мультиплеерными. от stdvs не избавиться( и кстати другие просто не будут доступны в онлайн-игре вроде бы...

я сейчас составляю список функций-обработчиков в lua-скриптах, надо попробовать их поставить в своих скриптх. Кстати, я 1 файл нашёл.. там 2 раза функция объявлена
вот, Deathmatch4.lua:

Code
Deathmatch4.lua:41:    PlayIntroMovie()
Deathmatch4.lua:48:    EFMV_Terminated()
Deathmatch4.lua:53:    DoOncePerTurnFunctions()
Deathmatch4.lua:5 8:    TurnEnded()
Deathmatch4.lua:62:    DoOncePerTurnFunctions()

Поэтому мне кажется можно поверх своего обработчика написать новый.

firsacho, проверь плз..
например к стандартной карте, в которой есть обработчик TurnEnded() прикрепи файл myscript.lua(см. в прикреплённых файлах). он перекрывает функцию TurnEnded().
Важно понять, что будет работать: обе функции, или только в myscript.lua или наооборот..

кстати, насчёт AI бота...
открой stdlib.lua:

Code
function RunAILogic()
  -- ovverride this function to now have AI.
  SendMessage("AI.PerformDefaultAITurn");
  -- actually called to start the AI turn.
  SendMessage("AI.ExecuteActions");
end

какие-нибудь мысли есть?)

насчёт распределения ролей.. тут посложнее. Есть функция в lib_help.lua:

Code
function lib_GetRandom(min, max)
    SendMessage("RandomNumber.Get")
    local RawRand = GetData("RandomNumber.Uint")
    local MyRand = min + math.mod(RawRand, max+1-min)
    return MyRand
end

так вот, по-моему не зря тут вызывают GetData("RandomNumber.Uint"), а не math.random, которая есть в lua. по-моему lib_GetRandom(min, max) вернёт одинковое число для всех игроков, таким образом назначение ролей вполне реально) надо только определить игрока, у которого запущен скрипт...

ещё, до меня кое-что допёрло!) файл stdlib.lua содержит многие стандартные обработчики событий, они перекрываются обработчиками из других файлов.. наверно

Прикрепления: myscript.lua (0.3 Kb)


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
у меня есть некоторые догадки по назначению ролей...

кусок кода из lib_help.lua

Code
function lib_SetupMultiplayerTeam(TeamName, NumWorms, Worm1Name, Worm2Name, Worm3Name, Worm4Name, Worm5Name, Worm6Name,
                    Skill, Grave, Flag, Speech, IsLocal, AlliedGroup, Handicap,
                    HatAttachment, GlassesAttachment, TashAttachment, GlovesAttachment,vWormSpawnIndex)

    local lock, team
    local WormSpawnIndexA
    WormSpawnIndexA=vWormSpawnIndex
    lock, team = EditContainer(lib_GetTeamContainerName(TeamIndex))  
    team.Active = true
    team.Name = TeamName
    team.TeamColour = 0
    team.Skill = Skill
    team.GraveIndex = Grave
    team.FlagGfxName = Flag
    team.AlliedGroup = AlliedGroup
    team.IsLocal = IsLocal
    team.ATT_Hat = HatAttachment
    team.ATT_Glasses = GlassesAttachment
    team.ATT_Tash = TashAttachment
    team.ATT_Gloves = GlovesAttachment
    if Skill>0 then
       team.IsAIControlled = true
    else
       team.IsAIControlled = false
    end

меня интересует
team.IsLocal = IsLocal
давайте подумаем. если у 2-х игроков 1 и тот же скрипт, он выполняется в одинаковом порядке, значит если у одного игрока team.IsLocal будет = true, или 1, а у другого false или 0, значит эта переменная означает, что это команда 1-го игрока. надо попытаться это проверить....


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
короче.. раньше на lua толком внимания не обращал, щас понимаю, что это мега-мощная штука. глядите сами:

вот пример кода:

Code
function lib_SetupCrate(DataId)
    local CrateContainerData = QueryContainer(DataId)
    SendMessage("GameLogic.ResetCrateParameters")
    SetData("Crate.Type", CrateContainerData.Type)
    SetData("Crate.Contents", CrateContainerData.Contents)
    SetData("Crate.NumContents", CrateContainerData.NumContents)
    SetData("Crate.Index", CrateContainerData.Index)
    SetData("Crate.LifetimeSec", CrateContainerData.LifetimeSec)
    SetData("Crate.GroundSnap", CrateContainerData.GroundSnap)
    SetData("Crate.Parachute", CrateContainerData.Parachute)
    SetData("Crate.Spawn", CrateContainerData.Spawn)
    SetData("Crate.FallSpeed", CrateContainerData.FallSpeed)
    SetData("Crate.Gravity", CrateContainerData.Gravity)
    SetData("Crate.TeamDestructible", CrateContainerData.TeamDestructible)
    SetData("Crate.TeamCollectable", CrateContainerData.TeamCollectable)
    SetData("Crate.UXB", CrateContainerData.UXB)
    SetData("Crate.Hitpoints", CrateContainerData.Hitpoints)
    SetData("Crate.Pushable", CrateContainerData.Pushable)
    SetData("Crate.RandomSpawnPos", CrateContainerData.RandomSpawnPos)
    SetData("Crate.CanDropFromChute", CrateContainerData.CanDropFromChute)
    SetData("Crate.WaitTillLanded", CrateContainerData.WaitTillLanded)
    SetData("Crate.TrackCam", CrateContainerData.TrackCam)
    SetData("Crate.Scale", CrateContainerData.Scale)
    SetData("Crate.AddToWormInventory", CrateContainerData.AddToWormInventory)
    SetData("Crate.CustomGraphic", CrateContainerData.CustomGraphic)
end

все эти переменные определяются в Local.xml

Code

     <XIntResourceDetails id='Crate.AddToWormInventory'>
       <Value>0</Value>
       <Name>Crate.AddToWormInventory</Name>
       <Flags>64</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.CanDropFromChute'>
       <Value>1</Value>
       <Name>Crate.CanDropFromChute</Name>
       <Flags>96</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.DelayMillisec'>
       <Value>0</Value>
       <Name>Crate.DelayMillisec</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.Gravity'>
       <Value>1</Value>
       <Name>Crate.Gravity</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.GroundSnap'>
       <Value>0</Value>
       <Name>Crate.GroundSnap</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.HealthInCrates'>
       <Value>25</Value>
       <Name>Crate.HealthInCrates</Name>
       <Flags>96</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.Hitpoints'>
       <Value>25</Value>
       <Name>Crate.Hitpoints</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.Index'>
       <Value>-1</Value>
       <Name>Crate.Index</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.LifetimeTurns'>
       <Value>-1</Value>
       <Name>Crate.LifetimeTurns</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.NumContents'>
       <Value>1</Value>
       <Name>Crate.NumContents</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.Parachute'>
       <Value>1</Value>
       <Name>Crate.Parachute</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.Pushable'>
       <Value>1</Value>
       <Name>Crate.Pushable</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.RandomSpawnPos'>
       <Value>0</Value>
       <Name>Crate.RandomSpawnPos</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.Showered'>
       <Value>0</Value>
       <Name>Crate.Showered</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.TeamCollectable'>
       <Value>-1</Value>
       <Name>Crate.TeamCollectable</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.TeamDestructible'>
       <Value>-1</Value>
       <Name>Crate.TeamDestructible</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.TrackCam'>
       <Value>1</Value>
       <Name>Crate.TrackCam</Name>
       <Flags>96</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.UXB'>
       <Value>0</Value>
       <Name>Crate.UXB</Name>
       <Flags>98</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='Crate.WaitTillLanded'>
       <Value>1</Value>
       <Name>Crate.WaitTillLanded</Name>
       <Flags>96</Flags>
     </XIntResourceDetails>

то есть вызывая SetData("Crate.Scale", CrateContainerData.Scale) или соответсвующий GetData мы записываем или извлекаем из xml-файла какие-то данные=) круто, да?)

а вот ещё, нашёл код, который возможно содержит в себе какую-нито инфу о текущем игроке.. тока чё-то хз, как ей пользоваться)

Code
   <XIntResourceDetails id='User.Changed'>
       <Value>0</Value>
       <Name>User.Changed</Name>
       <Flags>96</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='User.NameCheck'>
       <Value>0</Value>
       <Name>User.NameCheck</Name>
       <Flags>96</Flags>
     </XIntResourceDetails>
     <XIntResourceDetails id='User.Room'>
       <Value>0</Value>
       <Name>User.Room</Name>
       <Flags>96</Flags>
     </XIntResourceDetails>


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
научился бы ты писать на луа скрипты, и заодно бы нас научил... то что они мега мощные это давно известно... но мега запарные. Кста ты писал про динамическое изменение, да я вспомнил, были миссии с такой чтукой... там где пасхалка - машина на карте проподала при взрыве и карта где вокруг частокол, там в миссии ворота открылись...



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

mod.worms.pro - мод Worms Renewation для Worms4
 
Kevin
Проверенные
Сообщений: 519
Реп: 15
//\\
||
||
Вот это круто)



 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
У меня опыта побольше будет работы с Worms Lua скриптами. Я там почти все функции знаю, и какая когда вызывается, короче тут нужен программер, который это будет делать. К примеру, когда я делал перезарядное авиоудар для W3D.
Я отлавливал функцию выбора оружия, сравнивал его и в зависемости от выбраного создавал новый аирстрайк. В итоге у меня получилась мега крутая штука. Выбераешь перед выстрелом Банану, у тебя Банановый Страйк, выбераешь Динамит, Динамитный и так далее. Причем на игре создание оружие никак не сказывается. это лишь подмена переменных.
Что касается онлайн миссий, может быть проблема синхронизации, но создавать тригеры я умею. Я же 5 Челенджеров создал, в которых даже выводиться на экран количество сбитых целей.
Более того, я даже знаю как подымать воду, считывать здоровье у червей, узнавать умер червь или нет, и т.п. Когда закончу возиться с картами (Сейчас столько проектов для новых карт, с появлением 3DImport'а что времени не хватает на все), буду дальше изучать скрипты, там можно и гравитацию менять, и таймер создавать я умею, короче, если что обращайтесь =) Эмиттеры - они же эффекты в игре, не всегда активируются автоматом, поэтому есть скрипты которые их активируют, проблема только со спаунами, они должны определять позицию эмиттера, там где он появится и где будет находиться. Можно даже воскришать червей =) И заражать их, делать под свою команду, вообще там возможностей неперечислить. cool


 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
Еще добавлю, Скрипты загружаются от функции initialise которая и лежит в stdlib.lua, остальное лишь прикрепляющие файлы, в которых содержаться функции вызываемые из stdlib.lua. Короче все что она делает это создает команды червей, и схему в зависемости от данных, а затем передает управление вормподу, который и делает дополнительные операции. В луа есть удобная фитча, функция перегружаемая, т.е. написав функцию с таким же именем она полностью заменяет оригинал, тут надо быть внемательным, т.к. можно повредить игровой процесс если не верно воссоздать оригинал.

Свои знания буду писать тут W3D Wiki. Как будет время...


 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
АлексБонд, вопрос:
как ты узнаёшь, кто есть кто.. то есть как скрипт узнаёт, что он у игрока номер 1, а у второго, что у игрока номер 2?


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
AlexBond
Админы
Сообщений: 1042
Реп: 106 / Инв: 8
В worms3d скрипт у всех игроков одинаковый, он синхронизируется и выполняется на каждой машине одновременно, даже случайные чиста выбиваются одинаковые. Поэтому я не знаю тонкостей онлайн игры... Может в w4 все подругому. Я знаю одно скрипты берут данные червей у хостера, а исполнительный комп уже определяется самой игрой. Черви имеют номера команды, или же цвет, который можно считать с помощью скрипта.

 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
у нас всё также, рандом тоже один, общий, и это круто)

то есть нумерация команд у 1-го и 2-го игрока одинаковая, то есть если игрок 1 играет 1-ой командой, игрок 2 - 2-ой командой, тогда в скрипте у игрока 1 и в скрипте у игрока 2 к примеру такой код:

Code
    lock, team = EditContainer("Team.Data00")  
     team.Active = true
     team.Name = "The Lightsiders"
     team.TeamColour = 0
     team.ATT_Glasses = "WXFE.A.Glasses.Pirate"
     team.ATT_Hat = "WXFE.A.Hat.Pirate"
     --team.ATT_Gloves = "WXFE.A.Gloves.Pirate"
     CloseContainer(lock)

изменит именно команду 1-го игрока? то есть оба игрока увидят одинаковый результат?

ещё, поподробнее рассказать о порядке выполнения скрипта?

Quote (AlexBond)
Скрипты загружаются от функции initialise которая и лежит в stdlib.lua, остальное лишь прикрепляющие файлы, в которых содержаться функции вызываемые из stdlib.lua.

тут ты говоришь, что initialise лежит в stdlib.lua. А у нас не так)
Вот наш stdlib:
Code

-- Called at the start of a game
function StartFirstTurn()
    WaitUntilNoActivity = false
    SendMessage("Timer.StartGame")
    StartTurn()
end

function StartTurn()
    done_once_per_turn_functions = false
    SendMessage("GameLogic.ActivateNextWorm")
    -- do this after activating the worm so his details appear in the HUD
    SendMessage("Timer.StartHotSeatTimer")  
    --SendMessage("Weapon.Create")
    SetWind()
    --TurnStarted()
    SendMessage("GameLogic.Turn.Started")  
    TurnStarted() -- moved here so TeleportIn camera can override startofturn camera
    RunAILogic()
end

function RunAILogic()
  -- ovverride this function to now have AI.
  SendMessage("AI.PerformDefaultAITurn");
  -- actually called to start the AI turn.
  SendMessage("AI.ExecuteActions");
end

function Timer_HotSeatTimedOut()
    SendMessage("Timer.StartTurn")
end

function GameLogic_EndTurn_Immediate()
    -- this called by surrender and skip go  
    -- do all the work here as EndTurn() by itself would be illegal
    SendMessage("Weapon.Delete")
    SendMessage("Utility.Delete")
    SendMessage("Timer.EndTurn")  
    SendMessage("Weapon.DisableWeaponChange")
    EndTurn()
end

function Timer_RetreatTimedOut()
    EndTurn()
end

-- The worm whose turn it is has been damaged
function Worm_Damaged_Current()
    SendMessage("Weapon.Delete")
    SendMessage("Utility.Delete")
    SendMessage("Timer.EndRetreatTimer")
    SendMessage("Timer.EndTurn")   
    SendMessage("Weapon.DisableWeaponChange")
    EndTurn()
end

function Timer_TurnTimedOut()
    SendMessage("Weapon.Delete")
    SendMessage("Utility.Delete")
    SendMessage("Weapon.DisableWeaponChange")
    EndTurn()
end

-- Everything has come stopped moving
function Timer_PostActivityTimedOut()
    SendMessage("GameLogic.AboutToApplyDamage")
    SendMessage("GameLogic.ApplyDamage")
    CheckActivity()
end
     

function CheckActivity()
    Activity = GetData("ObjectCount.Active")
    if Activity == 0 then
       DoPostActivity()
    else
       WaitUntilNoActivity = true
    end
end

function DoPostActivity()
    if done_once_per_turn_functions == true then
       SendMessage("GameLogic.Turn.Ended")  
       TurnEnded()
    else  
       -- Done only once
       SendMessage("Net.DisableAllInput")
       SendMessage("Worm.ApplyPoison")
       SendMessage("GameLogic.AboutToApplyDamage")
       SendMessage("GameLogic.ApplyDamage")
       SetData("DoubleDamage", 0)
       DoOncePerTurnFunctions()
       done_once_per_turn_functions = true
       local GameOver = GetData("FCS.GameOver")
       -- do no further processing if sudden death drew the game
       if GameOver == 0 then
          CheckActivity() -- in case an earthquake or similar was just started
       end
    end
end

-- override this
function TurnStarted()
end

-- override this
function TurnEnded()
    CheckOneTeamVictory()       
end

-- decides if the game has been won or drawn at the end of every turn
-- Note do this last in the TurnEnded function as it finishes with the StartTurn Message
function CheckOneTeamVictory()
    -- Changed to use alliances rather than teams so 2 teams vs 1 can end correctly
    SendMessage("WormManager.GetActiveAlliances")
    AllianceCount = GetData("AllianceCount")
    if AllianceCount == 0 then
       RoundOver()
       -- all the teams have just snuffed it
       SendMessage("GameLogic.Draw")
    elseif AllianceCount == 1 then
       RoundOver()
       -- only one team remains
       -- PC: changed this call to catch naughty use of GetActiveTeamIndex usage. Use the new  
       -- call to get the last team with a worm thats alive on it.
       SendMessage("WormManager.GetSurvivingTeam")
       WinningTeam = GetData("SurvivingTeamIndex")
       SendIntMessage("GameLogic.Win", WinningTeam)
    else
       StartTurn()
    end
     
end

function EndTurn()
    -- note: could this happen multiple times per turn (eg from WormDamagedCurrent)?
    -- if so does it matter?

    -- Poisoning now moved to DoPostActivity

    SendMessage("GameLogic.EndTurn")
    
    Activity = GetData("ObjectCount.Active")
    if Activity == 0 then
       SendMessage("Timer.StartPostActivity") -- pause
    else
       WaitUntilNoActivity = true
    end
end

-- If there was some activity its finished now
function GameLogic_NoActivity()
    if WaitUntilNoActivity == true then
       -- reset WaitUntilNoActivity before calling message below because zero time might
       -- cause it to call back immediately and set it true again
       WaitUntilNoActivity = false
       SendMessage("Timer.StartPostActivity")
    end
end

function SetWind()
    SelectRandomWind()
end

function SelectRandomWind()
    -- First the speed
    SendMessage("RandomNumber.Get")
    RandomNumber = GetData("RandomNumber.Float")
    MaxWind = GetData("Wind.MaxSpeed")
    WindCap = GetData("Wind.Cap")/10 -- Scheme can set the maximum value 1-10 as appears in HUD
    SetData("Wind.Speed", WindCap*RandomNumber*RandomNumber*MaxWind) -- now squared to make high winds less common

    -- Now a direction
    SendMessage("RandomNumber.Get")
    RandomNumber = GetData("RandomNumber.Float")
    Direction = RandomNumber * 2 * 3.14
    SetData("Wind.Direction", Direction)    
end

function DoOncePerTurnFunctions()
end

function RoundOver()
end

function SetWormpotModes()
end

а Initialize обычно в других файлах определяется. Кстати, объясни поточнее, как тут функции перегружаются как определить, какая функция какую перегружает? просто порядок их определения не очень ясен..


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
Кто нибудь, попробуйте добавить в наш stdlib.lua в конец файла это:

Code
function Weapon_Fired_Start()
   SetData("Text.TestComment", "FIRE!")  
   SetData("CommentaryPanel.Comment", "Text.TestComment")
   SendMessage("CommentaryPanel.ScriptText")
    SendMessage("Timer.EndTurn")  
    SendMessage("Weapon.DisableWeaponChange")
end

и запустите какую-нибудь игру(не по инету, на компе), затем выстрелите
меня интересуют 2 вещи, выведится ли при выстреле текст FIRE!, вылетит ли вообще игра, или будет всё корректно работать.. короче это важно! если всё заработает, значит можно писать свои обработчики аналогичные тем, которые в Worms3D(у нас обработчика выстрела нету( )


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
DrHitman27
Админы
Сообщений: 2115
Реп: 52
Quote (Герыч)
у нас обработчика выстрела нету

это что такое?


 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
эта функция, которая вызывается при выстреле из оружия. Я её написал в прошлом посте. Я прошу вас попробовать написать её в луа файле, и посмотреть, вызовется ли она? (то есть есть ли этот обработчик в W4)

________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
DrHitman27
Админы
Сообщений: 2115
Реп: 52
попробую как проверю отпишусь

 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
интересно, но я думаю не заработает, слово должно быть пробито в файле перевода.



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

mod.worms.pro - мод Worms Renewation для Worms4
 
Герыч
Админы
Сообщений: 1240
Реп: 60 / Инв: 5
какое слово???при чём тут перевод?) Фирсачо, это никак с локализацией не связано... это связано с интерпретатором луа, точнее с тем, как он встроен в W4. Я так подозреваю(даже вроде где-то об этом читал), что луа позовляет вызывать функции из программы, в которую луа встроен.. короче, если разработчики W4 захотели, чтобы SetData позволял бы что-то сделать, то они прописали его в интерпретаторе Lua как доступную, вот и всё)

P.S. когда скажете мне результат этого скрипта??? angry
P.P.S. я тут щас весь в учёбе, так что появляюсь редко.. извините плохого Одмина..


________________________
__|____|____|____|____|__
|____|____|____|____|____|
__|___бицца головой___|__
|____|____|сюда|____|____|
__|____|____|____|____|__
|____|____|____|____|____|
 
DrHitman27
Админы
Сообщений: 2115
Реп: 52
не работает и не вылетает
что-то не так там


 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
может лучше это добавить в stdvs.lua? или в какой нить дополнительный скрипт



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

mod.worms.pro - мод Worms Renewation для Worms4
 
Форум » Моддинг » 5.3. Идеи скриптов и их обсуждение » Lua + паки карт (Сделать lua-скрипты в паке карт)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: