Правила сайта FAQ Мини-чат
Для добавления необходима авторизация!
30.12.2024, Понедельник, 20:50


  • Страница 1 из 1
  • 1
Создаем телепорт - SoC
Сообщение #1
Создание телепорта в ТЧ




В следующем уроке мы рассмотрим пример создания телепортов через скрипт.
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #2
Цитата Frankenshtayn
4. direction = 0,0,0 это «направление взгляда» нашего телепорта (0,0,0, - на север)

Изменяя данные координаты можно разворачивать плоскость телепорта куда угодно по горизонтали, вертикали и вокруг собственной оси. Полный разворот на 360 градусов соответствует 6 единицам.
Например, если указать координаты 0,-1.5,0 то "лицо" телепорта развернется вокруг своей вертикальной оси по часовой стрелке на 90 градусов.
Однако, не следует забывать и вот об этой части секции телепорта:
; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2.5

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

[960]
; cse_abstract properties
section_name = zone_teleport
name = teleport_visual
position = 134.899993896484,5.5,-51.5
direction = 1.5,0,0

; cse_alife_object properties
game_vertex_id = 2245
distance = 10
level_vertex_id = 75918
object_flags = 0xffffff3e

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 1.5

; cse_alife_space_restrictor properties
restrictor_type = 3

; cse_alife_custom_zone properties
max_power = 0

; cse_alife_anomalous_zone properties
offline_interactive_radius = 30
artefact_spawn_count = 32
artefact_position_offset = 0xa12b

Располагать логичнее на тех же координатах, что и сам телепорт, и "привинчивать" ту же ориентацию, что и у его невидимой "активной" части.



Такой как есть
Уважение: 596
Награды: 67
Сообщение #3
Телепорт через скрипт

Внимание! Данный телепорт действует только в пределах одной локации!!!


Итак, создадим телепорт для ТЧ через скрипт.
Что для этого надо? Немногое:

1.
По пути gamedata\scripts\ создадим скриптовый файл с именем bind_mteleport.script и в этот файл помещаем следующее:


2.
Чтобы наш телепорт работал необходимо прицепить функцию actor_update() к биндеру актера, для чего в файле bind_stalker.script найдем функцию:
function actor_binder:update(delta)
В ней найдем вызов обновления рестрикторов bind_restrictor.actor_update(delta) под которым вставим строку с вызовом нашей функции обновления: bind_mteleport.actor_update(delta)

т.е. оригинальный биндер актора выглядит так:


а так должен выглядеть правленный:



3.

Далее, открываем файл zone_teleport.ltx по пути gamedata\config\misc и в самый конец его вставляем:

Код
[m_teleport_1]:zone_teleport     
teleport   = standart
script_binding           = bind_mteleport.bind
;Параметры нашего телепорта
radius    = 1
;Высота захвата телепорта
z_radius   = 1

;Куда телепортируемся (телепортация всегда идет в пределах карты)
poz_x    = 106.72
poz_y    = 18.09
poz_z    = 169.16
; Угол зрения при появлении. Если параметра нет то не меняется
rotate = 3.8


это секция нашего телепорта

[m_teleport_1] - имя нашего телепорта(для каждого создаваемого телепорта должно быть свое)

poz_x = 106.72
poz_y = 18.09
poz_z = 169.16
--координаты куда происходит телепортация

4.

Далее создадим любой скриптовый файл, ну например ddd.script и в этот файл помещаем функцию спавна нашего телепорта:

Код
function spawn_perebros()
alife():create("m_teleport_1",vector():set(-90.52,1.23,-37.37),119023,321)
end


где:
spawn_perebros название функции(для каждого создаваемого телепорта свое)
m_teleport_1 имя телепорта в файле zone_teleport.ltx
(-90.52,1.23,-37.37),119023,321) координаты,левел и гейм вертексы точки спавна нашего телепорта

5.

Ну и последнее. Надо как-то вызвать наш телепорт. Для этого можно такую конструкцию:

Код
<action>ddd.spawn_perebros</action>

где
ddd - имя скриптового файла с нашей функцией спавна телепорта
spawn_perebros - имя нашей функции

например, вставить в любой диалог, любому НПС и после диалога с ним появится наш телепорт по заданным координатам (-90.52,1.23,-37.37),119023,321)
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #4
Frankenshtayn, а можно расписать поподробнее пятый пункт (Телепорт через скрипт), пытаюсь установить на Локации Кордон, но при диалоге с Сидоровичем ни чего не происходит, дополните пожалуста инструкцию по вызову скрипта на примере Сидоровича.
Вольный сталкер
Уважение: 245
Награды: 32
Облучение: 20%
Сообщение #5
filoret, Конструкцию наверно вставили не туда/не в тот диалог.
Куда вставляли? Если вставляли.

Уважение: 660
Награды: 97
Облучение: 0%
Сообщение #6
volazar, потому и пишу вопрос, т.к. не знаю куда ее прописать, "тыкаю" ее куда угодно и бесталку. Сейчас установлено: ТЧ 1.0004+НС+допа+ОПП+ЧШ, вот и хочу что-бы после диалога с Сидоровичем, например после получения ремкомплекта, он выдавал их и открывался самопальный телепорт.
Если идти пошагово по инструкции от Frankenshtayn:
1.В моей сборке уже присутствует;
2.В моей сборке уже присутствует;
3.Создаю свой телепорт

т.е. точка приземления на северном блок-посту
4. создал файл по инструкции ddd.script

т.е. телепорт создается прямо у выхода из бункера Сидоровича
5. <action>ddd.spawn_perebros</action> -- хочу прописать Сидоровичу

Frankenshtayn, спасибо за помощь, но как я понял, Вы привели пример на all.spawn(не) и увязали ее с подземкой агропрома, я пока с этим не работаю, почему и пытаюсь пока разобраться со скриптами и похоже удалось.
Т.к. уже на Кордоне образовался у меня Фанат и веток диалогов у него мало, я данную конструкцию привязал к нему. После обращения: «И что у Вас тут интересного?» и окончания диалога, сработал телепорт. Вот что мне нужно было:
D:\Program Files (x86)\GSC World Publishing\S.T.A.L.K.E.R\gamedata\config\gameplay\dialogs_escape.XML

Отлично сработали точки телепорта и его телепортация на северный блок-пост Кордона.


Сейчас новая проблема))), а как его сделать разовым, что-бы после использования он ликвидировался.

Ну если я, т.е мы с Frankenshtayn, включили телепорт, значит будем его вместе отключать.
Создаем новый скрипт файл например: ddd_del.SCRIPT


Опять прописываем в диалог Фанату отключение телепорта: <action>ddd_del.del_tele_lov</action>

И на заданный ему вопрос: «А что ты думаешь о ЗОНЕ?» и его диалога, телепорт отключится.
Конечно, можно бы было вообще дописать диалог Фанату вкл./выкл. телепорта, но это уже уроки моддингаот volazar – «создание диалогов».

Внимание!. Данный телепорт делался на сборке: ТЧ 1.0004+НС+допа+ОПП+(ЧШ), и координаты могут не совпать с другими сборками, лучше их устанавливать самостоятельно.

Сообщение отредактировал filoret - Пятница, 12.07.2013, 17:51

Вольный сталкер
Уважение: 245
Награды: 32
Облучение: 20%
Сообщение #7
filoret, Ну, гадая что и как ты делал, ничего путного не посоветуем... А вообще вот посмотри:
(пропустим шаг 1 и 2, т.к. если правильно понимаю, здесь все в порядке)
шаг з:

шаг4:

Профиль непися с диалогом:

Сам диалог с экшеном:

Вот результат:


Все это проделано буквально за 20 минут, и все работает. Из этого значит, что ты где-то ошибся... где?... Отгадать не могу... Проверяй все свои файлы, при отрицательном результате, выложи сюда свои правки, попробуем помочь.
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #8
Цитата (filoret)
спасибо за помощь, но как я понял, Вы привели пример на all.spawn(не) и увязали ее с подземкой агропрома, я пока с этим не работаю

filoret, эээ... Или мы не понимем друг друга, или Вы невнимательно просмотрели скрины... Там аллспавн вообще не упомянут... На первом скрине - секция телепорта в zone_teleport.ltx, на втором скрине - функция спавна этого телепорта скриптовым методом в скрипте fr_tm.script, на третьем скрине я показал, что диалог о появлении телепорта зарегестрирован в профиле НПС, ну а на четвертом - сам диалог с экшеном....
Цитата (filoret)
Отлично сработали точки телепорта и его телепортация на северный блок-пост Кордона.

Замечательно! Значит правильно и в нужное место вставлен экшен.
Цитата (filoret)
Сейчас новая проблема))), а как его сделать разовым, что-бы после использования он ликвидировался.

Удалить его можно так:
вызвать в нужный момент любым доступным способом функцию:
Код
function del_tele_lov()
for a=10,65634,1 do
local obj=alife():object(a)
if obj and string.find(obj:name(),"kordon_teleport_1") then
alife():release(obj,true)
end
end
end
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #9
Телепорт через скрипт

Телепорт с возможностью телепортации ГГ на другую локацию

Для телепортации ГГ на другую локацию создадим скриптовый файл, например abc.script и в него вставляем такой код:

Небольшое пояснение:
Функции телепортации и удаления телепорта должны лежать в одном скрипте с нетпакетом(в данном примере в abc.script)
20101 - сид нашего телепорта регестрируем в game_story_ids.ltx В общем все просто, вызываем функцию my_tele_start() и происходит телепортация на выбранную Вами локацию(естественно нужно не ошибиться с координатами и вертексами), затем необходимо удалить данный телепорт, т.к. он остается на своем месте, и в следующи раз в него можно "нечаянно вляпаться" и опять телепортироваться. Для его удаления вызываем удобным для Вас способом функцию delete_my_tele() и телепорт удалится.
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #10
Привет всем. Скопировал сдесь и хотел опробовать (Телепорт через скрипт). У меня происходит вылет при загрузке игры(тч 10004 - без модов.) все файлы прилагаю подскажите может что то упустил?




Хотел собрать телепорт появляющися после диалога, а он не заработал((((. Кому не трудно подскажите что нужно править.

Сообщение отредактировал Giznyhvatit - Среда, 13.11.2013, 19:36

Сообщение #11
Giznyhvatit, Вылет говорит об ошибке (скорей всего синтаксис) в файле bind_mteleport.
Выложи сам файл, посмотрим.

Уважение: 660
Награды: 97
Облучение: 0%
Сообщение #12
Цитата volazar ()
Вылет говорит об ошибке (скорей всего синтаксис) в файле bind_mteleport.

Володя, если в этом скрипте у Giznyhvatit, больше ничего нет, то ошибки быть не должно(то что показано под спойлером - без ошибок, проверил чекером, да и сравнил на всякий случай со своим рабочим))... А кроме синтаксической ошибки в bind_mteleport, такой вылет может говорить только об отсутствии этого скрипта...
А вообще ты прав - хотелось бы посмотреть файлы...
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #13
привет, все файлы в спойлерах <_< , то что в спойлерах вставлял в свои файлы. У меня вопрос, какие файлы отвечают за телепорт и все что с ним связано? рестриктор в алл.спавне не нужен?
Сообщение отредактировал Giznyhvatit - Вторник, 22.10.2013, 23:04

Сообщение #14
Приветствую, Сергей! Ну, не знаю, этот вылет(причем при загрузке!!!) может быть в двух случаях:
Цитата volazar ()
Вылет говорит об ошибке (скорей всего синтаксис) в файле bind_mteleport.

или
Цитата Frankenshtayn ()
вылет может говорить только об отсутствии этого скрипта...

в других случаях(если ошибка где-то "дальше") , вылет скорее всего происходил бы при диалоге.
ЗЫ... А при НИ есть вылет?
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #15
Цитата Giznyhvatit ()
У меня вопрос, какие файлы отвечают за телепорт и все что с ним связано? рестриктор в алл.спавне не нужен?

Нет... аллспавн не нужен
А файлы... Вот все подробно расписано(100% рабочее!)
http://stalker-gamers.ru/forum/10-240-1450-16-1334345945
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #16
Спасибо за помощь! очень помогли!!!

офтоп

Сообщение отредактировал Giznyhvatit - Вторник, 22.10.2013, 23:44

Сообщение #17
Как сделать телепортацию ГГ в ТЧ, после принятия водки? Перемещение героя происходит в пределах одной локации. Не обязательно что бы был телепорт, главное что после принятия водки ГГ перемещается на указаные координаты

Так же нашел функцию телепортации по одной локации, подскажите пожалуйста, куда её вставит для разового перемещения? То есть после тестов, я удалю эту функцию. Я это вижу так, функцию вставляем в скриптовый файл, а сам файл вызываем после принятия бутылки водки
[code]
function teleportate_to_()
local a = vector()
a.x = -241.71509460448
a.y = -26.742816052856
a.z = -304.54711914063
db.actor:set_actor_position(a)
end

Сообщение отредактировал Askar - Четверг, 06.05.2021, 08:05


Уважение: 0
Награды: 0
Облучение: 0%
Сообщение #18
Цитата Askar ()
Как сделать телепортацию ГГ в ТЧ, после принятия водки?

Для начала лезем в bind_stalker.script
и там находим функцию:
Код
function actor_binder:net_destroy()

и в ней, где то под строчкой
Код
self.object:set_callback(callback.take_item_from_box, nil)

вставляем вот эту строку:
Код
self.object:set_callback(callback.use_object, nil)

Далее ищем функцию:
Код
function actor_binder:reinit()

и в ней, например под строкой
Код
self.object:set_callback(callback.take_item_from_box, self.take_item_from_box, self)

Вставляешь строку:
Код
self.object:set_callback(callback.use_object, self.use_inventory_item, self)

Далее, в самом конце файла, после самого последнего end, вставляешь такую конструкцию:
Код
function actor_binder:use_inventory_item(obj)
if string.find(obj:section(), "vodka") then
dds_spawn.oblom()
end
end

Где vodka - нужный итем, dds_spawn - скриптовый файл, в котором лежит функция телепортации, oblom() имя фукции телепортации, которая лежит в файле dds_spawn.
Функцию телепортации можно вставлять в принципе в любой скриптовый файл. Лучше всего создать свой скриптовый файл, например my_script_funk.script и поместить его по пути gamedata\scripts, и в нем испытывать фсе свои изобретения, дабы не ушатать скрипты ТЧ.
В предложенном мной примере, есть нюанс - либо надо ставить условие на однократное срабатывание функции телепорта, либо создавать (копировать) уникальную бутылку водки в единичном экземпляре и по ее использованию уже вызывать функцию телепорта. Если же оставить всё так как есть, то после каждой выпитой бутылки ГГ будет "улетать" в координаты указанные в функции телепортации.
Веселый Роджер
Уважение: 936
Награды: 112
Сообщение #19
Цитата Frankenshtayn ()
Frankenshtayn

Спасибо большое

Уважение: 0
Награды: 0
Облучение: 0%
  • Страница 1 из 1
  • 1
Поиск: