Скриптование - Страница 607 - Скрипты / конфиги / движок - 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/
14 часов назад, RayTwitty сказал:

Пример тут в двух словах не получится привести. Могу как вариант посоветовать посмотреть Shadows Addon, там есть биндер автомобилей (sa_cars.script) и сохранение/загрузка топлива (se_car.script).

 

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

а есть что на эту тему? Попробуем форк.. Уточню, если понял неправильно. Форк движка, по сути просто правка движка, огср позволит мне сохранять свойства предмета также легко, как я сохраняю сейчас condition предмета? Т.е я сделаю аналог set_condition(numberдля любого свойства, например, цены и смогу условно через set_cost(number) менять стоимость любого предмета? И сделать это не так уж и сложно, что даже у меня есть шансы)? Если хватит терпения у кого меня посвятить в это дело, то я готов пробовать. Вроде прикольная штука была бы и простая. Скриптами я наныл, еще не понял как, но понимать вроде начинаю и вижу там какие-то дебри

  • Нравится 1

S.T.A.L.K.E.R. Anomaly - НПС говорит не все фразы.

Столкнулся с проблемами. В "Charasters_desc" прописал НПСу путь к голосу персонажа(в моём случае это голос наёмника). По итогу НПС молчит, говорит фразы только во время ранения, и только если тычить в него стволом. Других фраз(фразы во время перестрелки, обычные рандомные фразы и т.д.) он вообще не говорит. К тому же, если взять его в напарники, то он не высылает в чат никаких СМС в адрес ГГ(СМС про локации, мутантов и т.д.). Из-за этих двух проблем мой непись будто неживой. Что делать?

Изменено пользователем Murarius
13 часов назад, Maks Velikoda сказал:

S.T.A.L.K.E.R. Anomaly

Если Вы, что-то модифицируете, указывайте платформу. Как угадать, что это - Choc\ЧН\COP?:)

  • Смешно 1
47 минут назад, gam сказал:

Как угадать, что это

Ну например в гугл вбить...

Указал он платформу. S.T.A.L.K.E.R. Anomaly вполне себе платформа, не знать о существовании которой - грех.

Изменено пользователем Zander_driver
  • Нравится 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

53 минуты назад, Zander_driver сказал:

не знать о существовании которой - грех.

Я неверно выразился - с моей виндой хр не на всякий сайт можно пробиться. А этот мод мне не знаком. Но тут оффтоп уже.

Ребята, подскажите пожалуйста, через какую функцию в скрипте можно удалить предмет у НПС в ТЧ? В интернете и на форуме искал, но не нашёл. Буду признателен, если поможете.

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

беспорядок в голове и творческий кризис.

@Dalarcsis по всякому можно. ты лучше опиши подробнее в какой момент удалить. если просто с ничего удалить, то можно перебрать всех нпс, выбрать нужных по имени профиля, перебрать их инвентари на наличие нужного предмета и удалить предмет, если он есть. Хотя можно по идее просто перебор всех объектов уже видит этот предмет и удалить его можно без перебора инвентарей нпс. Можно в диалогах удалить, в оригинале гск так делает, а в моддинге так делает большинство модеров(статистика из воздуха). Ну это мои варианты. я такой себе скриптер. просто мне пришло . уведомление - я откликнулся)

Вариантов с диалогом у меня нет под рукой.

Переборов много разных, попробуй так

  for a = 1, 65534, 1 do
    local sobj = alife():object( a )
    if sobj and sobj:section()=="секция предмета" and sobj.parent_id == npc.id then -- если секция предмета и предмет находится у нпс какого-нибудь в собственности
      alife():release( sobj, true )
    end
  end

 

 

 

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

У меня ОГСР, поэтому я еще смотрю в сторону такого способа

function save_number(number)
local setting_ini = ini_file("important_number.ltx", true)
setting_ini.readonly = false

setting_ini:w_float("имя_сейва", "1", number) -- тут хотелось бы получать еще имя сейва... number то я могу получать
end

И вроде оно сохраняет, т.е точно сохраняет, но имя сейва получить при сохранении как не знаю. Я нашел случайно, но еще не пытался это в свои скрипты пихать такое в скрипте xr_effects из зп.

-- Сюжетное сохранение в важных местах
function scenario_autosave(actor, npc, p)
	local save_name = p[1]
	if save_name == nil then
		abort("You are trying to use scenario_autosave without save name")
	end

	if IsImportantSave() then
		local save_param = user_name().." - "..game.translate_string(save_name)

		get_console():execute("save "..save_param)
	end
end

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

Меня интересует, если я пытаюсь идти верной дорогой в своих хотелках, то как это всё дело загрузить потом? 

  • Полезно 1

@666Ian Мне бы конкретно удалить после определённой фразы, ГГ или НПС. Т.е да, в диалогах. Но так, спасибо, что откликнулся!

беспорядок в голове и творческий кризис.

4 минуты назад, Dalarcsis сказал:

@666Ian Мне бы конкретно удалить после определённой фразы, ГГ или НПС. Т.е да, в диалогах. Но так, спасибо, что откликнулся!

там в переборе ошибка, если что. скопировал код, не глянул, но кстати даже так может выдать ошибку xD Так я и делаю сам моды. Методом тыка.

19 минут назад, 666Ian сказал:
  for a = 1, 65534, 1 do
    local sobj = alife():object( a )
    if sobj and sobj:section()=="секция предмета" and sobj:parent()~=nil then
      alife():release( sobj, true )
    end
  end

 

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

Ну вот я нашел функцию из зп по-быстрому. Вроде бы должна работать.

function delete_item(first_speaker, second_speaker)
	local section = "секция"
	if second_speaker:object("секция") ~= nil then alife():release(alife():object(second_speaker:object(section):id()), true) end
end

Хотя к слову, зачем вообще возиться-то тебе с предметом? Если нпс умирает и все удаляет дез_менджер?

  • Полезно 1
30 минут назад, 666Ian сказал:

Меня тоже интересует кое-что. Как можно сохранить переменную и привязать её к определенному сейву? Вот чтобы у каждого сейва эта переменная была своя? ...

У меня ОГСР

Опять 25.

Ну у тебя же уже есть рабочий пример сохранения в xvars. (Я уж молчу о том что он и в OGSR-Wiki как был так и есть). Зачем опять эти костыли, да еще прости-господи, нет-пакеты?

Сохрани свою переменную в xvars и не парься.

  • Смешно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

@Zander_driver точно, просто на любой предмет писать эту переменную? А потом её читать? Или как? А на что писать. На ту же броньку и не парится? Я просто отмучался там и забыл уже, а ты напомнил мне как я страдал

ну на броник я бы точно не стал, о чем я боже... А как, а на что? На болт? Ладно пойду посплю. может завтра лучше подумается

блин точно. на игрока и писать. надеюсь не опозорился хоть раз

Изменено пользователем 666Ian
  • Жуть! 1

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

беспорядок в голове и творческий кризис.

@Zander_driverа что такого? Неправильно понял в итоге я? Или ты с моих тупняков в шоке? Вообще поинтересуюсь, может знаешь, присел на xvars значит. Удобно. Классно. Но если я буду записывать сразу 100 переменных, там ничего не треснет? Не сломается? И ещё раз, я же правильно делаю, что на игрока пишу и с него читаю, или можно как-то по уму это делать, грамотно? 

У меня все работает, кстати, поэтому я доволен как бы в любом случае) хварс тема. 

  • Нравится 1
10.08.2023 в 13:25, 666Ian сказал:

Но если я буду записывать сразу 100 переменных, там ничего не треснет? Не сломается?

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

10.08.2023 в 13:25, 666Ian сказал:

я же правильно делаю, что на игрока пишу и с него читаю, или можно как-то по уму это делать, грамотно?

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

 

Ты не правильно даже говоришь об этом. xvars не имеет никакого отношения ни к игроку, ни к каким-то там объектам... Ты пишешь не "на игрока". А именуешь переменные неким образом, отчего тебе почему-то кажется что "это записано на игрока" ... кажется тебе это. Неправильно.

И в тот раз, мы не в объект писали. Просто в xvars, просто в имени переменной содержится id объекта... а оно может и не содержаться. К объектам никакого отношения нет, это просто переменная которую ты можешь обозвать как угодно. Вложив что-либо в название для того чтобы с чем-то другим не перепутать, и только.

 

 

  • Согласен 1
  • Полезно 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Приветствую!

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

p.s. А где интересно сам механизм захвата заспавненного сталкера под гулаг - в скриптах или же в движке?

 

UPD: такс, нашёл, гулаг объекту назначается в частности в скрипте se_respawn вызовом obj:brain():update(), и далее проверка - нет гулага, объект удаляется. Вот потому у мну и пустыня... Вопрос, что мешает этому brain():update() назначить сталкерам гулаг?!! По условиям тех же гулагов (capacity и т.д.) всё норм.

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

OGSE 0.6.9.3, переназначение клавиш и кнопок для обработки новых действий:

Spoiler
[ogse_rebind_key.script]
local dik_key_to_name = {

--[256] = "MOUSE_1",	-- похоже, враньё в lua_help
--[512] = "MOUSE_2",	-- аналогично
--[1024] = "MOUSE_3",	-- та же песня
[337] = "MOUSE_1",
[338] = "MOUSE_2",
[339] = "MOUSE_3",

 

 

В ТЧ 1.0006 событие "нажать / отпустить ЛКМ или ПКМ" успешно ловится (в скриптовом окне) при ссылке на таблицу DIK_keys с "неправильными" кодами кнопок мыши.
Как понимать указанный выше комментарий в OGSE?

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

Шпаргалка

04.09.2023 в 04:49, Norman Eisenherz сказал:

image.pngКак понимать указанный выше комментарий в OGSE?

Вот так и понимай, выше неправильные коды, правильные - 0xED(=200) + num

1. ED (hex) = 237 (16^1 * 14 + 16^0 * 13), иначе не сходится.

2. Картинка сложилась: в [lua_help.script] указаны действующие ссылки и неправильные значения, а при проверке if dik == DIK_keys.MOUSE_1 и т. п. читаются движковые значения.

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

Шпаргалка

Подскажите, пожалуйста, можно ли делать проверку расстояния от актора до произвольных координат, не привязанных к игровому объекту?
Мне нужна просто проверка расстояния до заданной мной фиксированной точки на локации, не хотелось бы спавнить объекты без необходимости. Как это сделать правильно?
Anomaly 1.5.2. Вот пример (оно работает, если что):

function is_swamp()
	local actor = db.actor	
	local obj_pos = vector():set(44.860466003418,-3.8407301902771,-361.91436767578)
	if actor and obj_pos then
		if actor:position():distance_to(obj_pos) < 75 then
			log("ambient_sound: actor in swamp zone! ")
			--return true
		end
	end
end

 

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

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

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

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

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

Войти

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

Войти
×
×
  • Создать...