Перейти к контенту

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

Тема для обсуждения скриптов всего и всех в серии игр 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/

В этой битве титанов ни на чью сторону вставать не буду, скажу что прав и тот, и тот, а вот почему - кто ответит, тому ачивка "желание монолиту". Сам это вкусил в процессе написания одного супер модуля ;).

  • Спасибо 1

 

 

Хотя можешь и не проверять, а открыть файл bind_smart_terrain.script и в методе net_spawn увидишь db.add_smart_terrain( self.se_smart_terrain ) Затем открой файл db.script. Дальше, надеюсь всё и так ясно.

Это забавно. А ничего, что тут совсем другое действие?)

@makdm@Zander_driver, спасиба, мужики! Обе схемы заработали. Назовём тогда "схема за 05.07.2015 от makdm с правками от Zander_driver". :D  В момент сейва глючные объекты удаляются не только на текущем уровне, но сразу на всех. Думаю, попробовать её же и при старте/загрузке игры включать, чтобы заранее грохала, особенно если попадется старый глючный сейв...

Как переместить сквад на другую локацию в ЗП? Имею в виду не мелкие, а Затон, Юпитер и т.д.

@MrGROX,  удаляешь на локации убытия и проспавниваешь на локации прибытия.

Именно так делали разрабы Сталкера в ЗП все переходы сквадов с локации на локацию.

Справедливости сказать, в ЗП нпс-ы вполне себе переходят по связанным графпоинтам с локации на локацию, и даже сквад может так перейти...но не всегда. Частенько вылетает, когда ведомые в скваде теряют лидера. А одиночки (или сквады из 1-го нпс) нормально ходят между локами.

@Clayman, мне как раз таки и нужно, чтобы всего один НПС переходил. Просто хотелось бы узнать, что в скрипте писать. А насчёт удаления и последующего спавна - нет, абсолютно не подойдёт такой вариант.

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

 

 

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

Не в скрипте, а в конфиге(ltx-файл) логики для этого НПСа. Так что, с этим вопросом в ковырялку ЗП. 

  • Нравится 1

 

 

А насчёт удаления и последующего спавна - нет, абсолютно не подойдёт такой вариант.

А собственно почему? Давно нет никаких проблем с тем чтобы сохранить все мыслимое, что интересует у тех нпс, и затем у новых заспавненных восстановить в том же виде.

Доброго времени суток! Помогите разобраться со скриптами. Хочу сделать отдельный скрипт для внесения функций на точки переходов между локациями. Создаю пустой скрипт mapspots.script, вписываю его и функцию в bind_stalker.script так:

 

function actor_binder:info_callback(npc, info_id)
printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)
--' Сюжет
-- Отметки на карте
mapspots.add_lc_spot_to_map()
end


В скрипте mapspots.script пишу следующее:

 

function has_lc_to_marsh_1()
if db.actor:has_info("actor_teleport_to_marsh_1") then
local obj_id = get_story_object_id("esc_to_marsh_1")
--if(obj_id) then
level.map_add_object_spot_ser(obj_id, "level_changer_down_left", "lc_to_marsh_name")
end
end

function has_lc_to_escape_1()
if db.actor:has_info("actor_teleport_to_marsh_1") then
local obj_id = get_story_object_id("marsh_to_esc_1")
--if(obj_id) then
level.map_add_object_spot_ser(obj_id, "level_changer_up_right", "lc_to_esc_name")
end
end

function add_lc_spot_to_map()
if db.actor == nil then
return
end
-- перечислим функции, которые обрабатываем
has_lc_to_marsh_1()
has_lc_to_escape_1()
end

 

Всё сохраняю, запускаю игру и получаю вылет:

Expression : !m_error_code
Function : raii_guard::~raii_guard
File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line : 748
Description : ...call of pripyat\gamedata\scripts\bind_stalker.script:133: attempt to index global 'mapspots' (a nil value)

Но если я заношу все функции, напрямую в bind_stalker.script (или, например, в dialogs_локация.script), и вписываю в bind_stalker.script так

function actor_binder:info_callback(npc, info_id)
printf("*INFO*: npc='%s' id='%s'", npc:name(), info_id)
--' Сюжет
ui_clc_menu.level_changer_choise(info_id)
-- Отметки на карте
add_lc_spot_to_map()
end


то вылета нет, подскажите, что я делаю неправильно? (Прошу сильно не пинать, я со скриптами впервые работаю :) ).

Изменено пользователем Grif_on
Description : ...call of pripyat\gamedata\scripts\bind_stalker.script:133: attempt to index global 'mapspots' (a nil value)

Такая строка говорит о том что у вас в mapspots.script синтаксическая ошибка. или, файл скрипта называется не так.

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

Как прописать custom_data определенному объекту через скрипт? Собственно, в наличии серверный объект obj.

 

 

Как прописать custom_data определенному объекту через скрипт?

Править нет-пакет. Чем ? Модуль от Artos'а, АМКшные модули и др. и др.

Знающие, подскажите. Мод FAE для ТЧ. Если запустить таймер из amk.script, как его возможно сбросить или отключить?

 

 

Если запустить таймер из amk.script, как его возможно сбросить или отключить?

Ну это уже не серьезно: если есть какая-то система таймеров, и Вы знаете ф-цию запуска, то что мешает посмотреть в том-же скриптовом модуле ф-цию остановки\сброса\перезапуска ?

  • Согласен 1

@UnLoaded, Просто я еще в скрипте таймера еще не разбирался, а необходимость сброса/отмены таймера назрела.

 

 

если есть какая-то система таймеров, и Вы знаете ф-цию запуска, то что мешает посмотреть в том-же скриптовом модуле ф-цию остановки\сброса\перезапуска ?

между прочим, за последние несколько постов, самая полезная мысль. А тролльная перепалка, это конечно весело, но вряд ли полезно.

  • Согласен 2

 

 

вот хоть товарищу помоги, у него необходимость возникла. А я переживу.

Спасибо, но я уже сам разобрался. Ничего сложного там нету.

Как прописать custom_data определенному объекту через скрипт?

Завалялась вот функция:

local obj=alife():create("esc_stalk",vector():set(-63.919,6.269,-36.914),283878,3051)
local params=amk.read_stalker_params(obj)
params.custom="[logic]\ncfg = scripts\\name.ltx" ---- путь к файлу логики.
params.sid=12547
amk.write_stalker_params(params,obj)

Работать будет только с АМК модом.

Изменено пользователем BoBaH_671
  • Полезно 1

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

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

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

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

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

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

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

Войти

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

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

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