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

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

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

Есть идея упростить адаптацию заранее правильно подготовленной модификации к другим, но не хватает знаний по устройству классов 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 пользователей

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