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

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

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

Всем привет. У меня есть вопрос, кто может - подскажите пожалуйста.

Есть идея упростить адаптацию заранее правильно подготовленной модификации к другим, но не хватает знаний по устройству классов Lua.

 

С текстурами и бинарными файлами понятно, их или полностью заменять или оставлять оригинальные. Но в некоторых случаях, к примеру, при создании текстуры инвентаря, размещать элементы на большой текстуре инвентаря справа снизу, и своим предметам прописать эти координаты. Сами же конфиги предметов инклюдить, а не дописывать напрямую в стандартные файлы. Тоже адаптация нужна будет, но хоть поменьше.

 

А вот со скриптами - непонятно. Возможно ли наследование классов Lua от друг друга? Тогда можно будет переопределить к примеру метод update класса actor_binder в своём классе, в нём вызвать метод родителя, для правильной работы механизмов игры и чужих скриптов, а далее уже дописывать свои необходимые действия в этот метод. И чужое не ломаем, и своё дописали так, что работает и адаптировать этот скрипт просто - положили в папку scripts и готово. Возможно ли такое?

 

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

Есть функция спавна НПС через нет-пакет. Делал для ЧН.

 

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

function create_npc(
p_story_id,
p_position,
p_lvertex_id,
p_gvertex_id
)
local obj = alife():create("sar_test", p_position, p_lvertex_id, p_gvertex_id)

local packet = net_packet()
obj:STATE_Write(packet)

-- свойства cse_alife_object
local game_vertex_id = packet:r_u16()
local distance = packet:r_float()
local direct_control = packet:r_u32()
local level_vertex_id = packet:r_u32()
local object_flags = packet:r_h32()
local custom_data = packet:r_stringZ()
local story_id = packet:r_s32()
local spawn_story_id = packet:r_s32()

-- свойства cse_alife_trader_abstract

local money = packet:r_u32()
local specific_character = packet:r_stringZ()
local trader_flags = packet:r_h32()
local character_profile = packet:r_stringZ()
local community_index = packet:r_h32()
local rank = packet:r_h32()
local reputation = packet:r_h32()
local character_name = packet:r_stringZ()

-- свойства cse_visual

local visual_name = packet:r_stringZ()

-- теперь заполняем нужные параметры

-- свойства cse_alife_object

packet:w_begin(game_vertex_id)
packet:w_float(distance)
packet:w_u32(direct_control)
packet:w_u32(level_vertex_id)
packet:w_h32(object_flags)
packet:w_stringZ(custom_data)
packet:w_s32(p_story_id)
packet:w_s32(spawn_story_id)

-- свойства cse_alife_trader_abstract

packet:w_u32(money)
packet:w_stringZ(specific_character)
packet:w_h32(trader_flags)
packet:w_stringZ(character_profile)
packet:w_h32(community_index)
packet:w_h32(reputation)
packet:w_stringZ(character_name)

-- свойства cse_visual

packet:r_stringZ(visual_name)

packet:r_seek(0)
obj:STATE_Read(packet, packet:w_tell())
end

function test()
this.create_npc(1503, vector():set(55.121288299561,11.802981376648,13.02761554718), 9331, 1655)
end

 

 

Функция работает, но почему-то не хочет присваиваться story_id. Причем если story_id вообще не писать, то нпс просто не заспавнится.

Story_id в game_story_ids.ltx я прописал, так что я не могу понять в чем проблема. Хотя если даже и story_id c файле не прописан, нпс заспаунится.
Я Вешал метку на нпс методом:

function add_mapspot()
local obj = alife():story_object("1503")
level.map_add_object_spot(obj.id,"green_location","тест")
end

чтобы проверить работоспособность, но происходит вылет. Тоже самое если делать квест и вписывать в поле target_story_ids мой story_id, вылет.
Кстати если в скрипте задать story_id который уже присвоен другому объекту, то тоже вылет.

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

function add_mapspot()
local obj = alife():story_object("1503")
level.map_add_object_spot(obj.id,"green_location","тест")
end

Кавычки лишние при указании идентификатора объекта. Так будет лучше:

local obj = alife():story_object(1503)

if obj then - далее по тексту. Есть ещё одна мысль - попробуй получить новоявленный объект по story_id не сразу, а после save/load game или после перехода на другую локацию (что по сути то же самое).

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

Пришлось проверить самому :) . Использую стандартную пару амк-функций read_stalker_params/write_stalker_params. Присваиваю новоиспечённому сталкеру новенький story_id, и после перехода на другую локацию или save/load легко отлавливаю его по этому самому story_id. В квестах всё же такого персонажа трудновато будет использовать - ведь  до старта задания нам нужно будет успеть заспонить сталкера, приписать ему story_id, а затем ещё и перейти на другую локацию, чтобы этот самый сталкер стал доступен по story_id. Хотя, конечно, можно исхитриться как-нибудь :) . Например, создать такого сталкера с новым story_id, тут же засунуть его в оффлайн (чтобы не попался нам на глаза раньше положенного срока), затем перейти на другую локацию (по понятным причинам ситуацию save/load game рассматривать не будем) а при выдаче квеста и постановки на сталкера метки сразу же перевести его на автоматический режим онлайн/оффлайн. Это вариант навскидку, что первое в голову пришло.

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

@=VENOM= Ну вот ты сам видишь сколько мороки выходит. Я здесь весь форум облазил, но так и не нашел похожих образцов, за исключением функции level_changer и аномалии. Функции эти были под ТЧ, хотя не знаю есть ли разница.

 

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

Да, этот вариант подходит, только если нам совсем никак не хочется перекомпилировать all.spawn. А если хочется, тогда вообще никаких проблем - пихаем в all.spawn нового подходящего NPC с новым же подходящим story_id, ну, а дальше всё стандартно.

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

advisor890 не использует функцию create_npc(888). У него прописана функция create_npc(1503, vector():set(55.121288299561,11.802981376648,13.02761554718), 9331, 1655), где 1503 - новый story_id, далее координаты, левел и гейм вертексы соответственно. Объект создаётся вполне стандартной функцией alife():create("sar_test", p_position, p_lvertex_id, p_gvertex_id), где "sar_test" - это секция создаваемого NPC, далее снова координаты, левел и гейм вертексы соответственно. А вот story_id присваивается уже далее в функциях чтения/записи нет-пакета только что созданного NPC.

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

Если мы точно  знаем, что повис action_planner:update(), и точно знаем, у какого непися он повис   - выяснить, НА ЧЕМ ИМЕННО он повис - все равно ни как нельзя ? Или эта информация все-таки может быть как-то вытянута ?

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

Играю в солянку 2016. Пробую кое-что изменить-добавить. Вот часть кода:

    if amk_mod.check_npc_in_hideout(db.actor)  or                      -- если ГГ находится в укрытии или
       amk_mod.blowout_type() ~= 0     then                                   -- локация с неполным выбросом        
            self:Register(xml:Init3tButton("btn_2", self),    "btn_2")      -- кнопка поспать

Проблема: не срабатывает 1-ое условие. Со вторым условием все в порядке:  находясь, допустим,  в пещере, кнопка появляется. Вопрос знатокам: Что не так в скрипте?


 

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

Приветствую. Где найти скрипт, отвечающий за механику стрельбы в ЗП? Я бы хотел создать новый класс оружия, для болтовой снайперской винтовки. Заранее спасибо. В принципе можно использовать и класс помпового дробовика, но у него патроны дозаряжаются по одному, а я не знаю как заставить пополниться обойму за одну анимацию, + у дробовика несоответствующая стрельба.

Изменено пользователем Del0v
Ссылка на комментарий
Только что, Del0v сказал:

Где найти скрипт, отвечающий за механику стрельбы

 

Есть подобная реализация, сделанная Bak в http://www.amk-team.ru/forum/topic/4653-ai-additions/, попробуй спросить у Автора.

Ссылка на комментарий
4 часа назад, tsap-tsap сказал:

 if amk_mod.check_npc_in_hideout(db.actor)

function check_npc_in_hideout(npc,hide)

 

Просто стоит посмотреть в скрипт, который пытаетесь использовать.

 

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

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

Такой вопрос. Работаю с ТЧ 1.0007 rc1. В логе наблюдаю такое.

Цитата

[06/27/17 15:36:16]    FATAL ERROR
[06/27/17 15:36:16]     
[06/27/17 15:36:16]    [error]Expression    : xml_doc.NavigateToNode(path,index)
[06/27/17 15:36:16]    [error]Function      : CUIXmlInit::InitWindow
[06/27/17 15:36:16]    [error]File          : ui\UIXmlInit.cpp
[06/27/17 15:36:16]    [error]Line          : 87
[06/27/17 15:36:16]    [error]Description   : XML node not found
[06/27/17 15:36:16]    [error]Arguments     : newspaper_video

Как бы тут всё ясно, по строке я проблему проверил.

Но вопрос в другом. Игра не вылетает. А в логи еррор. Есть ли смысл фиксить, заплаточки пилить?

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

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

Есть ли смысл фиксить, заплаточки пилить?

А что именно фиксить ? Отсутствие, в конфигах твоей геймдаты, XML-секции "newspaper_video" ? У меня к примеру эта секция присутствует в двух конфигах. И что фиксить ?

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

У меня к примеру эта секция присутствует в двух конфигах. И что фиксить ?

Да, отсутствует. Но игра не вылетает.

На кто знает этот втулкер, у меня на тестах "эпилога" на калькуляторе всё хорошо было, а после релиза началось...

 

Ну, если не сложно - скинь, пожалуйста, саму секцию.

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

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

Есть ли смысл фиксить, заплаточки пилить?

Есть, не знаю отчего зависит, но на некоторых ПК иногда подобные ошибки все-таки приводят к вылету. Да и вообще накапливание ошибок в ходе игры не самая хорошая идея =)

  • Нравится 1
Ссылка на комментарий
1 час назад, CRAZY_STALKER666 сказал:

Ну, если не сложно - скинь, пожалуйста, саму секцию.

gamedata\config\ui\ui_mm_load_dlg.xml:

    <newspaper_video x="137" y="512" width="256" height="256">
        <texture>ui\ui_mm_newspaper</texture>
    </newspaper_video>

gamedata\config\ui\ui_mm_save_dlg.xml:

    <newspaper_video x="137" y="512" width="256" height="256">
        <texture>ui\ui_mm_newspaper</texture>
    </newspaper_video>

Если надо сам ui_mm_newspaper.ogm - напиши, скину...

  • Нравится 1
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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