[ Обновленные темы · Новые сообщения · Участники · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Моддинг » Моддинг Worms Forts » [Скрипты] Карты с движущимися/разрушаемыми объектами в WF (мой скрипт + идеи)
[Скрипты] Карты с движущимися/разрушаемыми объектами в WF
4erveR
Модераторы
Сообщений: 1511
Реп: 77 / Инв: 13
Написал скрипт на движущиеся объекты!
Скачать
Исходник

С помощью летающей платформы в виде стрелки можно перемещаться между двумя большими островами. Для ее активации надо взять ящик в виде кружащихся звезд. Перемещаясь на платформе, необходимо постоянно ползти или прыгать - т.к. червь не "приклеивается" к ней. И пауза не останавливает движение! Подробнее на видео.

Также небольшие технические детали:
На карте объект graphs\scenery\holygrail.xom заменил на graphs\scenery\bouncyarrow.xom. У него изменил размер и поворот. Повернул не идеально (не параллельно воде), но вроде сойдет. Направление стрелки постоянно, т.к. я не нашел как в скрипте менять поворот.




 
4erveR
Модераторы
Сообщений: 1511
Реп: 77 / Инв: 13
немного открытой инфы про детейлы:

- список используемых на карте детейлов не поддается изменению (нельзя добавить/удалить элемент)
- можно изменить параметры элемента ("путь", имя для скриптов, позиция, ориентация, масштаб)
- список детейлов карты поддается импорту и экспорту
- "путь" указывает непонятно куда, выглядит по образцу graphs\scenery\*.xom (таких файлов в игре нет)
на скрине импортировал список детейлов из me3.xom (там их вроде больше всего) в t3.xom:


- модели детейлов хранятся в bundles, для каждой карты там свой файл. как бандл связывается с картой - не понял, но явно не через скрипт (мб через имя файла или какую-то инфу в файле карты).
- в бандле каждой модели присвоено имя по типу того, что в "пути", но "папки" с большой буквы и слэш прямой (Graphs/Scenery/*.xom)
- свои модели тоже не добавить, только заменить


вряд ли кто это сходу поймет, но мб пригодится

алсо детейлы можно приводить в движение через скрипты (скорость тоже можно задавать). интересно было бы потестить осязаемые (collidable) движимые объекты.
 
4erveR
Модераторы
Сообщений: 1511
Реп: 77 / Инв: 13
Цитата 4erveR ()
интересно было бы потестить осязаемые (collidable) движимые объекты.

таки потестил - червь не "приклеивается" к ним, а наоборот, объекты выскальзывают из-под червя. мб у кого-то есть идеи режима на основе этой особенности?

апд. придумал: можно сделать карту с несколькими островами (или заюзать существующую), где между ними будут летать объекты (н-р блоки), с помощью которых можно перемещаться на др. остров.

ну или миссия, где по параллельным траекториям циклически движутся объекты, чем дальше от начала - тем больше скорость, а червю надо ползая по ним дойти до конца. объяснил как мог.
 
4erveR
Модераторы
Сообщений: 1511
Реп: 77 / Инв: 13
пробовал заменять details на другие модели - не сработало:
3ds (причем экспортированные в самом xv) - не может прочитать
xom3d - разная структура и не импортирует
xom ветви - заменилось, но игра вылетела

также пытался прописать у описанного в xom карты детейла "путь" к модели блока - тоже вылетело
апд. брал также "пути" из бандла карты - часть работает, часть вылетает
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Я в ВФ абсолютно не разбираюсь, так что увы советов дать не могу. Но молодцом!)



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

mod.worms.pro - мод Worms Renewation для Worms4
 
4erveR
Модераторы
Сообщений: 1511
Реп: 77 / Инв: 13
Написал скрипт на движущиеся объекты! Подробнее в шапке, а здесь будет исходник:
Код
--***********************************************************
--                Moving objects test.
--***********************************************************

function InitialiseLevel()
    LoadLevel("landscapes/MP/ScriptPack/M4.xom",true)
    TriggerCrateCollected = {false, false} --подобран ли ящик-триггер
    PlatformPoints = {"buildHere0028", "buildHere0040"} --позиции платформы
end

function MakeTriggerCrate(N) --создание ящика-триггера
    crate = CreateCrate()
    crate.Contents = kWF_TRIGGER_CRATE
    crate.NumContents = 1
    crate.TeamDestructible = -1
    crate.WormCollectable = -1
    crate.TeamCollectable = -1
    crate.GroundSnap = false
    crate.FixedPosition = true
    crate.UXB = false
    crate.Destructible = false
    crate.Pushable = false
    crate.CollectableByPayload = false
    crate.Collectable = true
    crate.Model = "Crate.Critical"
    crate.SpinBaby = true
    crate.ScaleFactor = 0.5
    crate.CrateId = N --+1000
    SpawnCrate( crate.Index, PlatformPoints[N] )
end

function HideWormsNow()
    ObjData = GetDetailObjectData("holygrail") --настройка параметров объекта
    ObjData.IsVisible = true
    ObjData.IsCollidable = true
    ObjData.CanBeDamaged = false
    ObjData.CanBeDestroyed = false
    ObjData.DisappearsWhenDestroyed = true
    ObjData.TimerEventsAreRepeating = false
    ObjData.MovementSpeed = 1.5
    ObjData.TimeToReachMovementSpeed = 3.0
    ObjData.MaxHealth = 100.0
    ObjData.CurrentHealth = 100.0
    WarpDetailObjectToPoint("holygrail", PlatformPoints[1]) --мгновенное перемещение на стартовую позицию
    local CrateN = 1 --создание ящиков-триггеров
    while CrateN <= 2 do
  MakeTriggerCrate(CrateN)
    CrateN = CrateN + 1
    end
end

function CrateCollected(CrateIndex,WormIndex)
    crate = GetCrateData(CrateIndex)
    if crate.Contents == kWF_TRIGGER_CRATE then --проверка на ящик-триггер
  TriggerCrateCollected[crate.CrateId] = true
  WarpDetailObjectToPoint("holygrail", PlatformPoints[crate.CrateId]) --мгновенное перемещение на позицию рядом с ящиком
  if crate.CrateId == 1 then --плавное перемещение на другую позицию
   ObjData.TimeToReachMovementSpeed = 3.0
   MoveDetailObjectToPoint("holygrail", PlatformPoints[2])
  elseif crate.CrateId == 2 then
   ObjData.TimeToReachMovementSpeed = 5.0
   MoveDetailObjectToPoint("holygrail", PlatformPoints[1])
  end
    end
    collectgarbage()
end

function TurnEnded()
    local CrateN = 1 --восстановление взятых ящиков
    while CrateN <= 2 do
  if TriggerCrateCollected[CrateN] then
   MakeTriggerCrate(CrateN)
   TriggerCrateCollected[CrateN] = false
  end
    CrateN = CrateN + 1
    end
end
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
Интересно) а можно объект по вейпоинтам пускать)? и спаунить и уничтожать)? представь можно сделать не как платформу, тем более червю прыгать приходится, а как движимая преграда. Можно например создать поток быстро летящих пуль?



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

mod.worms.pro - мод Worms Renewation для Worms4
 
4erveR
Модераторы
Сообщений: 1511
Реп: 77 / Инв: 13
Цитата firsacho ()
спаунить и уничтожать

не совсем так - можно скрывать (делать невидимым и неосязаемым), ну и обратное

Цитата firsacho ()
а можно объект по вейпоинтам пускать

в смысле по пути состоящему из точек? сложновато будет, вроде не видел функции, обрабатывающей событие конца движения. отследить состояние можно только(?) через переменную:
Код
moving = IsDetailObjectMoving("Sheep001")

из обработчиков в examples видел только такие:
Код
function DetailObjectCollisionWithWeapon(ObjectName)
function DetailObjectCollisionWithWorm(ObjectName, WormIndex)
function DetailObjectDamaged(ObjectName, AssailantTaskId, DamageAmount)

upd. придумал решение - как-то рассчитать время движения и использовать несколько SetDetailObjectTimerEvent - для каждого участка.

Цитата firsacho ()
создать поток быстро летящих пуль

в теории можно, как-то так:
Код
ObjData = GetDetailObjectData("bullet001")
ObjData.IsVisible = true
ObjData.IsCollidable = true
ObjData.TimerEventsAreRepeating = true
ObjData.MovementSpeed = 10.0 --число от балды
ObjData.TimeToReachMovementSpeed = 0.0
SetDetailObjectTimerEvent("bullet001", kEventMoveToPoint, 0, "wfRefPointSheepDip")

но если выполнить SetDetailObjectTimerEvent во время хода, игра вроде как вылетит. также как и спавн ящика. мб я накосячил во время теста этих функций, но маловероятно.
 
firsacho
Админы
Сообщений: 3812
Реп: 84 / Инв: 15
4erveR, вообще штука интересная и можно много штук классных сделал. Пусть для платформ движимых не очень подходит... но можно например двери разъезжающиеся делать, либо платформы быстро спаунить из воды подъемные... много что можно придумать)



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

mod.worms.pro - мод Worms Renewation для Worms4
 
Emishka_Roper
Проверенные
Сообщений: 317
Реп: 27 / Инв: 1
А на W4M такое уже было? Если нет, то легко ли будет сделать смотря на этот скрипт?
 
4erveR
Модераторы
Сообщений: 1511
Реп: 77 / Инв: 13
Emishka_Roper, там вроде как нет возможности перемещать детейлы
 
Форум » Моддинг » Моддинг Worms Forts » [Скрипты] Карты с движущимися/разрушаемыми объектами в WF (мой скрипт + идеи)
  • Страница 1 из 1
  • 1
Поиск: