Скриптование - Страница 20 - Скрипты / конфиги / движок - AMK Team
Перейти к контенту

Рекомендуемые сообщения

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

 
 

Stalkerin. Там есть много хороших статей касательно данной темы.
Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения.

 

Справочное руководство по языку Lua 5.1
https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ru
Справочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены.

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

 

Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу.

 

Вопросы которые будут удалятся, следовательно их задавать не нужно:
-- Где находится та или иная функция?
Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;
-- Как сделать что-то/то-то?
С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;
-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.
-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.
Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов?
В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос.

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий
https://www.amk-team.ru/forum/topic/6185-skriptovanie/

Помогите разобраться с логикой нпс. Какую схему логики лучше всего прописать охраннику? walker и camper конечно подходят, но дабы такие охранники стояли на месте, в path_walk для каждого из них придется создавать точки с их координатами, что нехило добавляет лишней работы и вынуждает писать для каждого отдельный скрипт с логикой. Также параллельно пытаюсь разобраться с такими страшными вещами как Смарттерейны и гулаги.

Изменено пользователем dimka.qwer

Вопрос по кастом статикам в ЗП:

cust_static:wnd():SetWidth(num)

cust_static:wnd():SetHeight(cw)

cust_static:wnd():SetWndPos(pos)

custom_static:wnd():SetColor(col)

Не один из методов не работает.В ТЧ всё работало..Собсно ПЫС это полностью вырезали,или чем-то заменили?

Изменено пользователем Влад

Склепал скрипт для проигрывания определенных партиклов в определенные погодные периоды.

Вообщем намекните что нетак я сделал. Вылет с логом, намекающим на неработоспособность bind_stalker.script

  if weather_types[level.name()]==0 then
    local  = level.get_weather()

      if weather ==  then
        if not self.particles then
            self.particles=particles_object("anomaly2\\snow_vuga")
            self.particles:play_at_pos( db.actor:position() )
        end
    end

    if self.particles then
        self.particles:move_to(db.actor:position(),vector():set(0,0,0))
    end

    for k,v in pairs(snow_times) do
        if weather =="weather_surge" then 
            need_play = true
        end
    end

    local need_play = false

    if need_play==true then
        if self.particles and not self.particles:playing() then
            self.particles:play()
        end
    else
        if self.particles and self.particles:playing() then
            self.particles:stop_deffered()
        end
    end
  end

  if weather_types[level.name()]==0 then
    local weather  = level.get_weather()
    if not self.particles then
        self.particles=particles_object("anomaly2\\snow")
        self.particles:play_at_pos( db.actor:position() )
    end

    if self.particles then
        self.particles:move_to(db.actor:position(),vector():set(0,0,0))
    end

    for k,v in pairs(snow_times) do
            if(weather == "weather_rainy" or weather == "weather_stormy") then 
            need_play = true
        end
    end

    local need_play = false

    if need_play==true then
        if self.particles and not self.particles:playing() then
            self.particles:play()
        end
    else
        if self.particles and self.particles:playing() then
            self.particles:stop_deffered()
        end
    end
  end

 

 

Дублирование вообще разрешено в скриптах?

 

Я вообще неочень ориентируюсь в скриптах :ny_ph34r:

Galil

[spoiler=Делай работу над ошибками :D]

local ? = level.get_weather()

не задано имя локальной переменной

...

if weather == ? then

чему они должны равнятся?

...

if not self.particles then

self.particles=particles_object("anomaly2\\snow_vuga")

self.particles:play_at_pos( db.actor:position() )

||

\/

что такое self.? откуда его взял?

...

need_play = true

end

end

 

local need_play = false

...

сначала задаём переменную,а только потом юзаем.т.е.,так:

local need_play = false

...

проверка/действия

...

need_play = true

end

end

 

 

 

Вопрос по кастом статикам в ЗП:

cust_static:wnd():SetWidth(num)

cust_static:wnd():SetHeight(cw)

cust_static:wnd():SetWndPos(pos)

custom_static:wnd():SetColor(col)

Не один из методов не работает.В ТЧ всё работало..Собсно ПЫС это полностью вырезали,или чем-то заменили?

 

Изменено пользователем Влад

Влад,

есть же lua_help.script

cust_static:wnd():SetWidth(num)

cust_static:wnd():SetHeight(cw)

SetWndSize(vector2);

 

cust_static:wnd():SetWndPos(pos)

SetWndPos(vector2)

или всё сразу

SetWndRect(Frect);

 

custom_static:wnd():SetColor(col)

убрали совсем. В зависимости от задачи можно как-либо обойтись без этого

Несколько вопросов к скриптерам:

можно ли в скрипте прописать две и более функции alife():create ?

может кто-нибудь объяснить, как автоматически запускать скрипт при старте игры через bind_stalker.script

dimka.qwer

можно ли в скрипте прописать две и более функции alife():create

да,можно.

как автоматически запускать скрипт при старте игры через bind_stalker.script

находим:

function actor_binder:on_item_drop (obj)

для проверки итема на выброс из инвентаря.

function actor_binder:on_item_take (obj)

на взятие итема

function actor_binder:update(delta)

"общий апдейтер".

 

Изменено пользователем Влад

Блин, никак не могу разобраться с bind_stalker.script

 

Имеется следующая функция спавна в файле mod_spawn.script

function mod_spawn ()

alife():create("esc_hunt",vector():set(-213.69770812988,-23.183309555054,-122.53145599365),39933,59)

end

 

Что нужно прописать в bind_stalker, чтобы вызвать один раз эту функцию при запуске игры ?

Изменено пользователем dimka.qwer
Что нужно прописать в bind_stalker, чтобы вызвать один раз эту функцию при запуске игры ?

Почему непременно в bind_stalker? Если так уж надо именно там, то в actor_binder:net_spawn или actor_binder:reinit

Также можно в _g.start_game_callback, но надо учесть, что это вообще первый запускаемый скрипт и там ещё ничего не инициализировано.

 

А как сделать проверку того, чтобы скрипт загружался один раз при запуске? Ибо при простом прописывании функции, при каждой новой загрузке спаунится клон создаваемого непися

Возможно мой ответ будет , глупым и весомым, но можно все повесить на колбэк апдейта если у вас такой имеется.

 

function mod_spawn ()
if not db.actor:has_info("spawn_esc_hunt")  then
alife():create("esc_hunt",vector():set(-213.69770812988,-23.183309555054,-122.53145599365),39933,59)
db.actor:give_info_portion("spawn_esc_hunt")
end
end

 

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

 

если колбэк не стоит , просто вызывайте в bind_stalker.script function actor_binder:update(delta) перед закрытием функциию

Vano_Santuri,

а что мешает сделать с инфопрошеном, но там где я написал в предыдущем посте? И это не будет грузить апдейт

 

 

Я не скриптер, но отвечу. Можно попробовать поставить колбэк на спавн того же болта при старте новой игры...

 

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

Я уже через bind_stalker сделал... А диалоги я сразу отбросил как вариант, потому что нехилый лаг случается во время диалогового спавна.

Проблема-вопрос.

Первый работаю с all.spawn. Для начала хочу изменить стартовый набор ГГ. Скачал xrSpawner v0.13.1 Beta. Открыл в нем all.spawn.

На шел вот это:

Vif58PGb7gVg.jpg

Добавил то что выделена красным. Потом жму "Принять изменения". Потом Файл->Сохранить.

Начинаю новую игру, но нового предмета нет.

После этого открываю опять алл.спавн и вижу что он остался таки каким был (нету моего добавленного предмета). Может я не так сохранил\добавил?

 

З.Ы. Файл алл.спавн из мода "Зона Поражения 1.1".

Изменено пользователем Shadows

Вобщем исправил я свой первоначальный скрипт, игра запустилась, но... скрипт не срабатывает.

Долго думая я переделал его.

И опять при загрузке ловлю вылет с логом, намекающим на неработоспособность bind_stalker.

Вот новый вариант моего скрипта.

  if weather_types[level.name()]==0 then
    local weather = level.get_weather()
    local play_vuga = false
    local play_snow = false
    if play_vuga = false then
        if not self.particles then
            self.particles=particles_object("anomaly2\\snow_vuga")
            self.particles:play_at_pos( db.actor:position() )
        end
        if self.particles then
            self.particles:move_to(db.actor:position(),vector():set(0,0,0))
        end
    end

    if  weather == "weather_surge" or
        weather == "weather_thunder" then
            play_vuga = true
        end
    elseif  weather == "weather_rainy" or
        weather == "weather_stormy" or
        weather == "weather_grey" or 
        weather == "weather_foggy" then
            play_snow = true
        end
    end

    if play_vuga = true then
        if self.particles and not self.particles:playing() then
            self.particles:play()
        end
    else
        if self.particles and self.particles:playing() then
            self.particles:stop_deffered()
        end
    end

    if play_snow = false then
        if not self.particles then
            self.particles=particles_object("anomaly2\\snow")
            self.particles:play_at_pos( db.actor:position() )
        end
        if self.particles then
            self.particles:move_to(db.actor:position(),vector():set(0,0,0))
        end
    end


    if play_snow = true then
        if self.particles and not self.particles:playing() then
            self.particles:play()
        end
    else
        if self.particles and self.particles:playing() then
            self.particles:stop_deffered()
        end
      end
  end

 

 

 

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

По поводу self. - все работает с ним. А вообще он был в скрипте от Monnoroch.

 

И еще один вопрос на засыпку - при каких случаях НПС может заснуть(желательно перечислить все)?

Изменено пользователем Galil

Labus,

парой постов ранее здесь как раз об этом шла речь. Правда будет срабатывать и при переходе на другой уровень, поскольку это по сути загрузка заново.

Svoboда,

 

custom_data = <<END

[smart_terrain]

none = true

 

cfg = scripts\az_patrul_1.ltx

END

 

А чтобы ходил не тупо по маршруту, если такая простая логика, то лучше так - а тайминги и вероятности проставишь сам.

[piyan_kapitan_look]

points = p0,p1,p2

p0:name = wp00|t=1000

p0:flags = 0x1

p0:position = -147.18115234375,-0.584499299526215,-305.457458496094

p0:game_vertex_id = 447

p0:level_vertex_id = 90847

 

p1:name = wp01|t=1000

p1:flags = 0x2

p1:position = -151.469772338867,1.54915750026703,-294.154266357422

p1:game_vertex_id = 447

p1:level_vertex_id = 86489

 

p2:name = wp02|t=1000

p2:flags = 0x3

p2:position = -154.860473632813,0.0715790092945099,-300.463287353516

p2:game_vertex_id = 447

p2:level_vertex_id = 82560

 

 

[piyan_kapitan_walk]

points = p0,p1,p2

p0:name = wp00

p0:flags = 0x1

p0:position = -146.631423950195,-0.615138828754425,-305.455871582031

p0:game_vertex_id = 447

p0:level_vertex_id = 91609

p0:links = p1(1),p2(1)

 

p1:name = wp01

p1:flags = 0x2

p1:position = -150.6865234375,1.56070673465729,-293.817443847656

p1:game_vertex_id = 447

p1:level_vertex_id = 87210

p1:links = p0(1),p2(1)

 

p2:name = wp02

p2:flags = 0x3

p2:position = -155.097885131836,0.12029841542244,-300.179504394531

p2:game_vertex_id = 447

p2:level_vertex_id = 81791

p2:links = p0(1),p1(1)

 

Изменено пользователем Arhara

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...