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

@UriZzz

  if level.map_has_object_spot(obj.id, "green_location") ~= 0 then ...

где obj - серверный объект нпс.

  • Спасибо 1
  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

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

имея id, можно получить сам объект

Просто там дело было в вылете: https://ap-pro.ru/forum/100-9999-826159-16-1452077092

И вопрос касательно того, что значат цифры 1394:

child registered but not found [1394]

Думал это может story_id а выходит, просто id, который никем кроме движка не указывается.

Отсюда вопрос, как зная id из вылета, найти объект с таким id?

-

13 минут назад, aka_sektor сказал:

Отсюда вопрос, как зная id из вылета, найти объект с таким id?

Вот так

21 час назад, aka_sektor сказал:

alife():object(id) - возвращает объект, с таким номером.

 

  • Согласен 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.

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

как зная id из вылета, найти объект с таким id?

Боюсь, что в данном случае - никак, потому что этого объекта уже нет.  
Здесь, емнип, имеется парент, у которого есть зарегистрированный в игре  потомок, но реально потомка уже не существует.
Точно такой же вылет был, причем в качестве парента указывался объект "лестница". Так и не смогла отрыть, что же за "чайлд" мог быть у лестницы...

След от кругов на воде - это тоже след (с)

8 минут назад, Okichi сказал:

Так и не смогла отрыть, что же за "чайлд" мог быть у лестницы...

Такие вылеты и такие взаимосвязи ловятся перебором серверных объектов при загрузке сейва.

На постоянку такие проверки вешать на лоад конечно не надо. Но если вылет возник - то повесить. Перебрать все 65к объектов, у них проверить парент, получить этот парент, проверить его класс, и соответствует ли он тому набору классов, которому позволено иметь чилды.

При нормально устроенной игре, эта вся канитель не даст ничего, т.е. 65к проверок вернут нулевой результат. А если вот такой вылет возникает, то как раз и будет поймана эта пара до исчезновения чилда, до вылета, до вообще всего что такая парочка могла бы натворить. И выводится в лог - владелец такой-то, секция такая то. Чилд такой-то, секция такая-то. Дальше уже дело техники, выяснить что это за фигня и как так получилось, что они воссоединились. Устраняется причина, а затем и описанная проверка.

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

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

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

Дело в том, что на момент, когда мы стали ловить этот вылет, объекта-потомка с таким id в игре УЖЕ не было. 
Конечно же, он наверняка существовал N сэйвов назад, но у нас этих N не было, а были последние несколько - и в них объекта-потомка с таким id не существовало тоже.
Поскольку вылет такой случался при автосэйве (переход с локи на локу) и только  в нем - а автосэйв при этом на другой локации создавался нормально, то дальше не копали.
 

След от кругов на воде - это тоже след (с)

04.04.2020 в 10:03, Zander_driver сказал:

Где treasure, obj, npc - это клиентские объекты тайника, перемещаемого итема, и НПС, соответственно. И делать надо в цикле, перебирая все итемы в тайнике.

А как сделать? Я же заранее не знаю, что окажется в тайнике.

10 минут назад, DMT сказал:

не знаю, что окажется в тайнике.

А зачем это знать?

Функции iterate_inventory в тайниках тоже работают, перебирая инвентарь тайника.

  • Спасибо 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.

04.04.2020 в 19:48, Okichi сказал:

в данном случае - никак, потому что этого объекта уже нет.  

Парадокс.:huh:

 

А вот тут писали:

  

17.02.2012 в 00:03, smeh сказал:

LuaChecker-0.3 Может я не правильно пользуюсь?

 

17.02.2012 в 23:01, Artos сказал:

проверяй файлы чекером. Только не тем, который ты упоминал, а "Syntax Checker" (by Gun12), который тебе уже посоветовал Капрал Хикс

 

17.02.2012 в 11:19, Капрал Хикс сказал:

script Syntax Checker - есть на stalkerin.gameru.net. Не виснет на больших скриптах и может скрипты проверять группой.

 

Вот он: http://stalkerin.gameru.net/modules.php?name=Downloads&d_op=viewtheoned&lid=447

 

Есть ли какое-то принципиальное отличие от чекера представленного в утилите SciTe: https://modfaq.ru/SciTE

(кста, вопрос к @Charsi тоже, он советовал)

-

22 часа назад, aka_sektor сказал:

Парадокс

Ну вот выше Зандер_драйвер дал схему, как можно попробовать обнаружить. Искать по предыдущим сэйвам, в которых этот объект-потомок еще существовал.
Но иногда в некоторых модах сразу при НИ запускается удаление ненужных объектов ( то, что есть в аллспавне, например, но реально не требуется в игре). 
Тогда, если этот чайлд вот так, с НИ, удалили - то уже не найти. Тем более, что узнаем мы об этом ( получим вылет)  только тогда, когда придем на локу, где этот удаленный объект находился.

И то - не сразу, а когда будем там перегружаться или переходить на другой уровень:  вылет будет при разрушении уровня, т.к., если я правильно поняла dsh-а, при разрушении уровня игра сначала пытается удалить "потомков", и только потом - их парентов. 

След от кругов на воде - это тоже след (с)

1 час назад, Okichi сказал:

Но иногда в некоторых модах сразу при НИ запускается удаление ненужных объектов

Есть такое дело. Сам в моде так делал, когда объект не нужен со старта НИ, но в дальнейшем для квеста требуется. Но заспавнить заново проще по spawn_story_id (ессно, его изначально нужно в спавне прописать). Тогда такой объект наверно можно и отследить.

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

Кто разбирается в логике? Беглым взглядом гляньте:
 

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



[logic@ex_gar_eger]
suitable = {=check_npc_name(ex_gar_eger)}
prior = 200
active = animpoint@ex_gar_eger
level_spot = quest_npc

[animpoint@ex_gar_eger]
cover_name = ex_gar_a1_eger_cover
avail_animations = animpoint_sit_normal
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
gather_items_enabled = false
help_wounded_enabled = true
corpse_detection_enabled = false
invulnerable = false
def_state_moving = assault
on_info = {+ops_quest_taked} %=release_npc%
meet = meet@ex_gar_eger

[meet@ex_gar_eger]
close_anim         = nil
close_victim     = nil
far_anim         = nil
far_victim         = nil
close_distance = 0
far_distance     = 0
close_snd_distance = 3
use             = nil
close_snd_hello = nil
trade_enable = true
allow_break     = false
meet_on_talking = true


 

 

 

Чего неправильно может быть?

Выяснил только, что вылетает из-за строчки:

on_info = {+ops_quest_taked} %=release_npc%

 

Если убрать %=release_npc%, то вылета нет. Это для чего служит?

-

@aka_sektor, это попытка выполнить ф-ю release_npc, когда получаем поршень ops_quest_taked.
Надо проверить, существует ли эта ф-я в xr_effects.script. 
 

  • Согласен 2

След от кругов на воде - это тоже след (с)

@Okichi, да, уже выяснили что её нет. Непонятно почему  её написали, упоминаний во всем инете, кот наплакал.

Использовали в итоге destroy_object

-

06.04.2020 в 19:58, aka_sektor сказал:

кста, вопрос к @Charsi тоже, он советовал

Вопросы Charsi задавать бесполезно - он уже больше года не интересуется Сталкером и сюда не ходит.
Лично я для проверки и локального запуска скриптов пользуюсь как раз его разработки плагином к N++: https://yadi.sk/d/UIMIb8_8vZtMD

  • Полезно 3

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

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

Хочу реализовать идею для обхода НПС динамических объектов в частности автомобильной техники. Делать это на ристрикторах достаточно спорный вариант т. к. запрещающие рестрикторы не так просто спавнить и удалять, есть мысли чтобы объекты издавали пустой звук но в тегах прописать определённый ИИ радиус и тип данжер, или же сделать так чтобы НПС воспринимали объекты как аномалии. Хочется услышать конструктивные идеи на этот счет.

@Graff46, не нужно изобретать велосипед. В движке ЗП есть обход динамических физ. объектов. Перенеси оттуда. Пример такого переноса можно увидеть в моем репозитории OGSR

https://github.com/dsh2dsh/OGSR-Engine/commit/df1edaadef9fdcca7ac1c0c3ee8a16743513c85a

  • Нравится 1

@dsh метод set_ai_obstacle применяется сразу к клиентскому объекту?

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

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

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

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

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

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

Войти

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

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

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