Скриптование - Страница 379 - Скрипты / конфиги / движок - 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/

 

 

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

Надо сразу после создания объекта и до выхода его в онлайн обнулить флаг серверного объекта use_ai_location.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

Спавню НПЦ вот так

 

 

local obj=alife():create("gar_nano",db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id())
local params=netpack_write.read_stalker_params(obj)
params.custom="[logic]\ncfg = scripts\\ep\\gar\\gar_nano.ltx"
params.sid=30198
netpack_write.write_stalker_params(params,obj)

 

 

Потом пытаюсь удалить(через диалог с другим НПЦ)

 

function del()
local sim = alife()
local se_obj = sim:story_object(30198)
if se_obj then
sim:release(se_obj, true)
end
end

 

 

Но ничего не происходит... Где я ошибаюсь?

 

P.S Выводил при спавне SID - через новости на ПДА - всё хорошо. При удалении поставил брейкпойнтый вот так

 

local sim = alife()
local se_obj = alife():story_object(30198)
news_manager.send_tip(db.actor, "stage 1", 0, "default", 10000)
if se_obj then
news_manager.send_tip(db.actor, "stage 2", 0, "default", 10000)
sim:release(se_obj, true)
end

 

 

Доходит лишь до первого...

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

Не соответствует правилам.

 

 

обнулить флаг серверного объекта use_ai_location

Вот так пробовал на ТЧ:

s_obj= alife():create("energy_drink", pos, db.actor:level_vertex_id(), db.actor:game_vertex_id())

s_obj:use_ai_locations(false) 
 
Не получается. Вылетает.

@CRAZY_STALKER666,

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

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

 

 

В XE для прописывания SIDа была специальная функция, которая одновременно с назначением и регистрировала SID в реестре

 

XE - что это такое?

И как мне тогда быть? М.б как всегда есть готовые решения? В том те TT2 использовался тот же функционал, что и у меня и не было таких проблем...

Не соответствует правилам.

 

 

Вот так пробовал на ТЧ:

На ТЧ нет функции use_ai_locations для установки, только для получения значения. Надо использовать нетпакеты.


XE - что это такое?

X-Ray extensions

  • Спасибо 1
 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

@CRAZY_STALKER666
В крайнем случае, если стоит расширение lua, можно и самому организовать свой динамический аналог game_story_ids.
И там хранить типа sid-ов объектов.
Я так делал когда-то.Если интересно.

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

@Nazgool, нет времени изобретать велосипед...

Может кому интересно будет, как я разобрался с проблемой, мало ли... Решил так - просто для этого НПЦ спавн идет через all.spawn, там прописал story_id и тогда всё удаляется прекрасно прекрасно... 

Не соответствует правилам.

Этот вариант я тоже тогда рассматривал.
Но если ты будешь спавнить что-то через секцию alife():create("any_section", vector():set(... и т.д. и нужно будет это позже удалять.
Снова for i=1,65534 ?

Если непись и вообще объект онлайновый - только что расписывал в соседней теме, как его получить, скажем, по info.

@Nazgool, не понял, о чем ты...

Вроде проблема исчерпана

Не соответствует правилам.

@CRAZY_STALKER666

Если ты будешь спавнить все объекты, которым необходимо назначать sid через all.spawn, то тогда я ни о чем.

 

Я о том что будет, если будешь спавнить что-то по имени секции динамически, т.е. (например) 

alife():create("stalker", vector():set ... bla-bla

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

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

@Nazgool, Всё, понял. Более не пригодиться задавать sid через скрипт, разве что для рестрикторов, но там проблем таких нету...

Не соответствует правилам.

Всем привет. Такую штуку заметил, напрягать стало: когда ГГ в присяде обыскивает труп, тайник или начинает диалог с НПС, он сам поднимается. Вот на видео видно: 

 

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

@TIGER_VLAD, Честно говоря не знаю но по моему в двиг лезть надо.

В жизни много плохих моментов. Пытайся избавляться от них !

@Nazgool,

Фууух. Насилу собрала массив

То что зачистили одно поле ещё не значит что буду валить всё то, что так тяжело строила.

Ты сам как думаешь, такое поведение - нормально? :)

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

Мракобесие короче. Создавалось чтобы поощрить лень программиста, а я почитав это, дико затосковал по языкам где надо обязательно заранее объявить каждую переменную и указать ее тип...

И не дай бог ты указал тип integer и стал туда записывать результат деления - будешь обруган компилятором самыми последними программистскими словами. Настоящее программирование - оно там :) а Луа это пардон, детский сад, в моем представлении.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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

На самом деле всё не так уж и плохо.
Оператор '#' прекрасно работает с "правильными" массивами.
Осталось только нам научиться работать с массивами также правильно :)
table.insert и table.remove сделаны специально для этого и должны помочь.
 
А поведение оператора '#' и его будущее в других случаях до сих пор не так однозначно.
В PiL3 об этом написано в разделе 3.5. Оператор длины
Особенно мне "нравиться" фраза самого автора:
"поэтому большую часть времени оператор длины безопасен для использования"
Как тебе такое? :):(
Изменено пользователем Nazgool

По идее для этого есть метаметод __len, можно его определить по-своему. Только вот Луа нужна 5.2

ТЧ 1.0004. SAP и Trans mod

github

Да, в 5.1 не хватает этого метода.

Впрочем можно написать функцию типа :

function table.len(t)
	local n = 0
	for _ in ipairs(t) do
		n = n + 1
	end
	return n
end

А заодно не хватает __pairs и __ipairs. Да и goto, при аккуратном использовании, помогает крепко сокращать код  :)

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

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

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

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

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

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

Войти

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

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

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