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

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

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

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

Как это в логике реализуется?

on_info = {~nn} myval ... бла-бла..., на сколько помню.

 

47 минут назад, _Val_ сказал:

А из поршня спавнишь все что душе угодно

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

 

if ... then

  for i, v in ipairs( { "mysect", mylvid, mygvid }, ... } ) do

   alife():object( v[1], level.vertex_position( v[2] ), v[2], v[3] )

  end

end

 

upd: единственно что, трюк с level.vertex_position() работает только для текущей локации. Для спавна произвольных объектов на произвольной локации координаты все-же придется снять, до одного знака после точки.

Изменено пользователем Dennis_Chikin
2 часа назад, Dennis_Chikin сказал:

Жуть какая...

Сам боюсь - но было же когда-то и так))

Кстати - позволяет работать, не пользуясь услугами продвинутых скриптеров. Думаешь - пациент понял, что ты ему прописал?

upd))

И да - "mysect" - это только секция непися или предмета? А как тогда насчет кастом даты?

Плодить мутантов без логики как-то не комильфо...

Изменено пользователем _Val_
  • Согласен 1

   УРАГАН.png

                 Краткий гид по моду Тайные Тропы 2

                                      ПАРТИКЛЫ TERRA

 

 

 

Тогда ещё вопросик.

    if level.name() == "l04_darkvalley" then
    get_console():execute("start_my_script_level_name_=_"..level.name())
    alife():create("m_boodsucker_e",vector():set(27.416481018066,1.3818007707596,-476.2585144043),207244,950)
    end

- эта функция срабатывает не только при переходе на данную локацию, но ещё и при любой загрузке на ней. А как сделать, чтобы только при переходе она срабатывала? Наверное необходимы скрипты AMK - они есть, так как пробую эту функцию в моде на основе AMK. Кто знает, подскажите.

Важнейшая задача цивилизации - научить человека мыслить.

3 часа назад, _Val_ сказал:

and not has_alife_info("info")

@Fenrir02 

Ну вот - а мой ужос заодно и проверяет, происходило ли это когда-нибудь))

   УРАГАН.png

                 Краткий гид по моду Тайные Тропы 2

                                      ПАРТИКЛЫ TERRA

 

 

 

Значит вот так:

if level.name()=="l04_darkvalley" and not has_alife_info("info") then

alife():create("m_boodsucker_e",vector():set(27.416481018066,1.3818007707596,-476.2585144043),207244,950)

db.actor:give_info_portion("info")

end

???

И функцию эту вешать на net_spawn?

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

Важнейшая задача цивилизации - научить человека мыслить.

В общем, народ, я ничего не понимаю. Как мне правильно подключить скрипты этих новостей, чтобы они работали? Потому что я не понимаю, как это делать((

Все зовут меня Пришедший из Ниоткуда...Почему?Потому что я пришел из ниоткуда и иду в никуда...

По обоим последним постам: вы требуете угадать, что у вас в кармане.

Смотрите имеющиеся моды, и разбирайтесь, как оно там работает.

 

has_alife_info("info")  - дожно быть прописано это самое инфо, причем не использующееся где-то еще. И, да, можно в net_spawn(), но сначала определиться, что именно надо. И, да, как правило, все нужное уже где-то сделано.

 

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

Да, уже разобрался. Просто побольше хочется узнать. Если что прошу прощение за флуд и "глупые вопросы".

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

Важнейшая задача цивилизации - научить человека мыслить.

5 часов назад, _Val_ сказал:

И да - "mysect" - это только секция непися или предмета? А как тогда насчет кастом даты?

Плодить мутантов без логики как-то не комильфо...

Любого объекта. cd - добавить строку в туда же, и прописывать при создании. Иили скриптом же и генерить.

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

С одноразовыми - тем более - извращение: с НИ их в офлайне держать.

Изменено пользователем Dennis_Chikin
1 час назад, Dennis_Chikin сказал:

По обоим последним постам: вы требуете угадать, что у вас в кармане.

Смотрите имеющиеся моды, и разбирайтесь, как оно там работает.

 

has_alife_info("info")  - дожно быть прописано это самое инфо, причем не использующееся где-то еще. И, да, можно в net_spawn(), но сначала определиться, что именно надо. И, да, как правило, все нужное уже где-то сделано.

 

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

Да я это понимаю, я просто не понимаю, где конкретно подключаются скрипты. В патче уже есть сильно урезанный набор скриптов от АМК, т.е. все нужные файлы там есть, а вот где подключать скрипты - не понимаю. Совсем. Можешь какой-то пример привести, что именно надо прописывать(я про код)? Потому что в скриптах не шарю совсем, никогда ими не занимался - только редактировал конфиги.

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

Все зовут меня Пришедший из Ниоткуда...Почему?Потому что я пришел из ниоткуда и иду в никуда...

Мне сюда весь код амк-мода запостить ? Поиск дает пересечение по 40 файлам, причем параметр для поиска учитывает явно не все варианты, которые там есть.

 

Ну пропишете Вы в _g.script

function start_game_callback()
...
  amk.on_game_start(obj)
 

- и получите вылет прямо при запуске.

 

@Dennis_Chikin obj, кстати, в выше приведенном примере совсем не нужен. Только движок лишний раз дёргает, пытаясь найти obj.script

Не подскажите как сделать убор оружия при обыске мёртвых неписей/монстров/тайников? Не могу понять каким скриптом вызвать действия при обыске перечисленных предметов.

Важнейшая задача цивилизации - научить человека мыслить.

3 часа назад, Fenrir02 сказал:

Не подскажите как сделать убор оружия при обыске мёртвых неписей/монстров/тайников? Не могу понять каким скриптом вызвать действия при обыске перечисленных предметов.

ИМХО, нужно отслеживать выдачу/забирание инфопоршенов при обыске трупа/тайника. Не помню, как они правильно называются.

Сталкер - наше всё!

Господа модмейкеры, возникла трабла:

При спавне сквада вылетает с таким логом:

Expression : abstract 
Function : CALifeSimulatorBase::spawn_item 
File : alife_simulator_base.cpp 
Line : 113 
Description : Cannot find item with section 
Arguments : jup_squad_monolit_on_jupiter 

Сам конфиг сквада:

[jup_squad_monolit_on_jupiter]:online_offline_group
relationship = neutral
npc = sim_default_stalker_2
target_smart = jup_sim_18
spawn_point = monolit_on_jup_mon_spawn
story_id = jup_squad_monolit_on_jupiter

Конфиг сквада в simulation_objects_props.ltx:

[jup_squad_monolit_on_jupiter]:default_squad
sim_avail = false 

Вызов из логики (смарт этот остался еще от ПЫСов, так что проблема явно не в нем):

on_info = {+test1213} nil %=create_squad(jup_squad_monolit_on_jupiter:jup_sim_18)%

 

Где накосячил? Сам уже не знаю.

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

А где приблизительно нужно копать, чтобы найти эти инфопоршни? Может в bind_monster.script?

Важнейшая задача цивилизации - научить человека мыслить.

"ui_inventory",  "ui_trade", "ui_car_body"

и  "ui_inventory_hide", "ui_trade_hide", "ui_car_body_hide" на закрытие.

 

Выбирать нужные.

  • Согласен 1

Да с поршнями всё работает. Но вот ещё одна проблема: чёрт меня дернул - повесил на скрипт взятия предмета вот такое условие 
          if time_global() > userObj[1] + userObj[2] then
          end
end

Теперь время в игре замедлилось. То есть всё движется медленно: перезарядка оружия, бег, другие объекты. Пробовал переустанавливать все - не помогло. Не подскажите что делать?

 

Прошу прощения за флуд. Проблему решил - перезапуском компа):blush:

Важнейшая задача цивилизации - научить человека мыслить.

Пытаюсь разобраться в работе логики NPC. Написал новый биндер и тестовую схему, но сталкер стоит на месте как вкопаный. В чем, собственно, может быть причина? В родных скриптах игры каких-то особых манипуляций со сталкерами при добавлении им логики я не нашел.

 

Скрытый текст


class "CSchemeEval" (property_evaluator)

function CSchemeEval:__init(storage) super(nil, "CSchemeEval")
	self.st = storage;
end

function CSchemeEval:evaluate()
	return self.st.enabled;
end

class "CSchemeAction" (action_base);

function CSchemeAction:__init(storage) super(nil, "CSchemeAction")
	self.st = storage;
end

function CSchemeAction:initialize()
	action_base.initialize(self);
	self.object:set_dest_level_vertex_id(db.actor:level_vertex_id());
end

function CSchemeAction:execute()
	action_base.execute(self);
end

function CSchemeAction:finalize()
	action_base.finalize(self);
end

local ACTION_BASE = 5000;
local EVAL_BASE = 10000;

function addToBinder(npc, storage)
	local manager = npc:motivation_action_manager();

	manager:add_evaluator(EVAL_BASE + 1, CSchemeEval(storage));

	local action = CSchemeAction(storage);
	action:add_precondition(world_property(stalker_ids.property_alive, true));
	action:add_precondition(world_property(stalker_ids.property_danger, false));
	action:add_precondition(world_property(stalker_ids.property_enemy, false));
	action:add_precondition(world_property(stalker_ids.property_anomaly, false));
	action:add_precondition(world_property(EVAL_BASE + 1, true));
	action:add_effect(world_property(EVAL_BASE + 1, false));
	manager:add_action(ACTION_BASE + 1, action);

	action = manager:action(xr_actions_id.alife);
	action:add_precondition(world_property(EVAL_BASE + 1, false));
end

 

Скрытый текст


function bind(object)
	object:bind_object(CNpcBinder(object));
end

class "CNpcBinder" (object_binder)

function CNpcBinder:__init(object) super(object) 
end

function CNpcBinder:net_spawn(sobject)
	self.st = {
		enabled = true;
	};
	
	local manager = self.object:motivation_action_manager()
	manager:remove_evaluator	(stalker_ids.property_anomaly)
	manager:add_evaluator		(stalker_ids.property_anomaly, property_evaluator_const(false));
	
	scheme.addToBinder(self.object, self.st);
		return true;
end

function CNpcBinder:reinit() 
	self.state_mgr = state_mgr.bind_manager(self.object)
	self.move_mgr = move_mgr.move_mgr(self.object)
	self.move_mgr:initialize()
end

function CNpcBinder:update(delta)
	if self.state_mgr then
		if self.object:alive() then
			self.state_mgr:update()	
		else
			self.state_mgr = nil;
		end
	end	
end

 

 

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

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

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

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

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

Войти

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

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

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