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

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

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

Господа, подскажите пожалуйста, что и где подкрутить чтобы откорректировать цветовую гамму игры? Запустил оригинал сталкера сегодня и чуть не расплакался от той самой оригинальной картинки на мониторе. Солянка делает картинку какой-то желтоватой чтоли... Какой-то менее выразительней в плане цветопередачи, не знаю описать. Будто насыщенность выкрутили и температуру картинки сделали желтой, не знаю. Оригинальная картинка была какая-то розовато-синяя, чтоли. Подскажите пожалуйста?

Ссылка на комментарий

Привет, снова я. Имеем такую функцию:

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

			local current_outfit = db.actor:item_in_slot(7)
			if current_outfit then
				local outfit_section = current_outfit:section()
				if outfit_properties[outfit_section] then
					outfit_protection = outfit_properties[outfit_section]
				end
				news_manager.send_tip(db.actor, "%c[250, 0, 255, 0]".."Б-р-р-р, прохладно.", nil, nil, nil)
			end

 

 

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

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

Мать: ASRock X470 Master SLI. Процессор: AMD Ryzen 9 3900X 12-Core(4200 MHz).
Память: Patriot Memory 3200 C16 Series. DDR4-3200(1600МГц), 16Гбх2(32Гб).
Видео: GeForce GTX 1060 6GB. Блок питания: CoolerMaster 750 Вт. Корпус: Zalman i3 Edge.

Химера конечно сильный хищник, а все держится дома. Чего же ты пришел к ней домой и пытаешься её убить? © Болотный Доктор

Ссылка на комментарий

@Romann
Здравствуйте!

Как вариант, можно однократно вызвать сообщение с помощью инфопоршня:

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

			local current_outfit = db.actor:item_in_slot(7)
			if current_outfit then
				if not has_alife_info("check_outfit") then
					db.actor:give_info_portion("check_outfit")
					-- Здесь одноразовое срабатывание при надевании костюма
				end
				local outfit_section = current_outfit:section()
				if outfit_properties[outfit_section] then
					outfit_protection = outfit_properties[outfit_section]
				end
			else
				if has_alife_info("check_outfit") then
					db.actor:disable_info_portion("check_outfit")
					news_manager.send_tip(db.actor, "%c[250, 0, 255, 0]".."Б-р-р-р, прохладно.", nil, nil, nil)
					-- Здесь одноразовое срабатывание при снятии костюма
				end
			end

 

 

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

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

Ссылка на комментарий

Здрасьте.

 

При появлении в инвентаре любого нового броника у надетой брони вырубается ПНВ. Скорее всего, проблема решается правкой движка (поправьте меня, если нет), поэтому в качестве простого варианта хочу добавить костыль в скрипты – включать ПНВ обратно через отлов события "поднять предмет".

Проблема: обнаруженная в скриптах конструкция "level.add_pp_effector("name.ppe", ###, false)" включает эффектор ненадолго и сразу для всей карты (как дополнительный эффект погоды, что ли), а надо сымитировать включение ПНВ в броне и оставить его до следующего нажатия клавиши "ПНВ вкл./выкл.".

Как это сделать?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий

Что делает эта ф-ция?

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

function mob_capture(mob, reset_actions)
    if reset_actions == nil then
        abort("mob_capture: reset_actions parameter's value is not specified")
    end

    if reset_actions then
        reset_action(mob, script_name())
    else
        if not mob:get_script() then
            mob:script(true, script_name())
        end
    end
end

 

И что делают эти классы\методы?

reset_action(mob, script_name())

mob:script(true, script_name())

Ссылка на комментарий

@Graff46, это для установления контроля за мобом. Т.е. он будет выполнять то, что ты ему скриптом скажешь. Например бежать в определенном направлении.  Для примера, посмотри вот этот скрипт

https://github.com/dsh2dsh/op2ogse/blob/3f7514f804eaf1dc875cc3ce8513d8537dd53bc2/gamedata/scripts/dsh_battle_radius.script#L135

Это аналог mob_home, только без путей. Там как раз используется такой захват контроля над мобом, что бы заставить его вернуться внутрь.

 

Ссылка на комментарий
23 часа назад, Norman Eisenherz сказал:

а надо сымитировать включение ПНВ в броне и оставить его до следующего нажатия клавиши "ПНВ вкл./выкл.".

Это явно из разряда "Овчинка выделки не стоит". Можно, конечно, все это скриптами наворотить(причем объем костылей и извращений будет не маленьким), вот только ради чего ?

 

Изменено пользователем AndreySol
Ссылка на комментарий
В 17.11.2018 в 07:44, Romann сказал:

а нужно: сняли броню - отправили сообщение, одели броню - не отправляем сообщение, сняли - опять отправили. Кто подскажет, как лучше сделать?

С учетом отсутствия, в оригинале, движковых сообщений(кэллбэков) о манипуляциях с содержимым слотов - видимо как всегда, нагрузить в многострадальный апдейт биндера актера проверку на содержимое слота...

Ссылка на комментарий

@AndreySol Ради того, что достало каждый раз оказываться в темноте. В оригинале это еще не такая большая проблема, а в "солянке", где броню можно снимать с трупов, уже основательно надоедает.

Я так понимаю, прямой функции "включить ПНВ" нет? Может, есть способ изобразить нажатие определенной клавиши скриптом?

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

Ссылка на комментарий

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

jpwsa5byp73nyaufrbis15dcci1y.png
 

Ссылка на комментарий
2 часа назад, DoberBull сказал:

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

Смотри в xr_motivator.script ф-цию motivator_binder:death_callback, в ней есть

sr_light.check_light(self.object)
...    
death_manager.drop_manager(self.object):create_release_item()

В sr_light может быть отключение фонарика у померших, а в death_manager может быть удаление фонарика из инвентаря моба, соответственно отключение по факту удаления.

  • Спасибо 1
Ссылка на комментарий

Из X-Ray extensions:

send_event_key_press(int<DIK_keys>) - имитация события нажатия кнопки

Как именно применить это на практике? Допустим, при нажатии клавиши F3 нужно вызвать какое-то действие. Как это сделать?

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

Ссылка на комментарий
В 18.11.2018 в 17:48, Fenrir02 сказал:

Как именно применить это на практике?

@Fenrir02,

в нужную функцию вставляем:

level.send_event_key_press(DIK_keys.DIK_F3) 

-- вместо "DIK_F3" может быть любая другая клавиша.

 

Результатом будет имитация нажатия,

как будто ты нажал на кл."F3" (не касаясь пальцем физически).

 

Только вот не помню, должна ли быть локация загружена в этот  момент,

так как используется пространство "level".

На всякий, может проверку поставить, типа "if level then ... end"

  • Спасибо 1
Ссылка на комментарий

И снова здравствуйте!

Подскажите, как с помощью скрипта разжечь костёр, к которому подходит ГГ на определённое расстояние?

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

Ссылка на комментарий

Какая платформа? Для ЗП делал так: bind_campfire.script:

function turn_off_campfire_by_name(name)
	if name then
		local campfire = campfire_table_by_name[name]
		if campfire and campfire:is_on() then
			campfire:turn_off()
		end
	end
end

function turn_on_campfire_by_name(name)
	if name then
		local campfire = campfire_table_by_name[name]
		if campfire and not campfire:is_on() then
			campfire:turn_on()
		end
	end
end

В самом верху объявил массив:

campfire_table_by_name = {}

В методе net_spawn заполняем его:

campfire_table_by_name[self.object:name()] = self.campfire

Собственно, использование:

bind_campfire.turn_off_campfire_by_name("campfire_name")
bind_campfire.turn_on_campfire_by_name("campfire_name")

 

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

Ссылка на комментарий

@Fenrir02, был такой Dynamic campfire mod от kstn. Посмотри, как там реализовано, и переработай под свои нужды.

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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