dukekan 5 Опубликовано 17 Июня 2017 Поделиться Опубликовано 17 Июня 2017 Всем привет. У меня есть вопрос, кто может - подскажите пожалуйста. Есть идея упростить адаптацию заранее правильно подготовленной модификации к другим, но не хватает знаний по устройству классов Lua. С текстурами и бинарными файлами понятно, их или полностью заменять или оставлять оригинальные. Но в некоторых случаях, к примеру, при создании текстуры инвентаря, размещать элементы на большой текстуре инвентаря справа снизу, и своим предметам прописать эти координаты. Сами же конфиги предметов инклюдить, а не дописывать напрямую в стандартные файлы. Тоже адаптация нужна будет, но хоть поменьше. А вот со скриптами - непонятно. Возможно ли наследование классов Lua от друг друга? Тогда можно будет переопределить к примеру метод update класса actor_binder в своём классе, в нём вызвать метод родителя, для правильной работы механизмов игры и чужих скриптов, а далее уже дописывать свои необходимые действия в этот метод. И чужое не ломаем, и своё дописали так, что работает и адаптировать этот скрипт просто - положили в папку scripts и готово. Возможно ли такое? Ссылка на комментарий
advisor890 1 Опубликовано 19 Июня 2017 Поделиться Опубликовано 19 Июня 2017 Есть функция спавна НПС через нет-пакет. Делал для ЧН. Скрытый текст 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 который уже присвоен другому объекту, то тоже вылет. Ссылка на комментарий
=VENOM= 50 Опубликовано 20 Июня 2017 Поделиться Опубликовано 20 Июня 2017 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 или после перехода на другую локацию (что по сути то же самое). Ссылка на комментарий
advisor890 1 Опубликовано 20 Июня 2017 Поделиться Опубликовано 20 Июня 2017 @=VENOM= Если пробовать без кавычек, то не вылетает. Но метка все равно не отображается. Save/load пробовал, не влияет. Ссылка на комментарий
=VENOM= 50 Опубликовано 20 Июня 2017 Поделиться Опубликовано 20 Июня 2017 Пришлось проверить самому . Использую стандартную пару амк-функций read_stalker_params/write_stalker_params. Присваиваю новоиспечённому сталкеру новенький story_id, и после перехода на другую локацию или save/load легко отлавливаю его по этому самому story_id. В квестах всё же такого персонажа трудновато будет использовать - ведь до старта задания нам нужно будет успеть заспонить сталкера, приписать ему story_id, а затем ещё и перейти на другую локацию, чтобы этот самый сталкер стал доступен по story_id. Хотя, конечно, можно исхитриться как-нибудь . Например, создать такого сталкера с новым story_id, тут же засунуть его в оффлайн (чтобы не попался нам на глаза раньше положенного срока), затем перейти на другую локацию (по понятным причинам ситуацию save/load game рассматривать не будем) а при выдаче квеста и постановки на сталкера метки сразу же перевести его на автоматический режим онлайн/оффлайн. Это вариант навскидку, что первое в голову пришло. Ссылка на комментарий
advisor890 1 Опубликовано 20 Июня 2017 Поделиться Опубликовано 20 Июня 2017 @=VENOM= Ну вот ты сам видишь сколько мороки выходит. Я здесь весь форум облазил, но так и не нашел похожих образцов, за исключением функции level_changer и аномалии. Функции эти были под ТЧ, хотя не знаю есть ли разница. Ссылка на комментарий
=VENOM= 50 Опубликовано 20 Июня 2017 Поделиться Опубликовано 20 Июня 2017 Да, этот вариант подходит, только если нам совсем никак не хочется перекомпилировать all.spawn. А если хочется, тогда вообще никаких проблем - пихаем в all.spawn нового подходящего NPC с новым же подходящим story_id, ну, а дальше всё стандартно. Ссылка на комментарий
gam 117 Опубликовано 20 Июня 2017 Поделиться Опубликовано 20 Июня 2017 =VENOM=. advisor890 делая спавн через или как-както, используют функцию create_npc(888). Первый аргумент предполагает секцию\кастом дату, но не иды и прочее. Ссылка на комментарий
=VENOM= 50 Опубликовано 20 Июня 2017 Поделиться Опубликовано 20 Июня 2017 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. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 24 Июня 2017 Поделиться Опубликовано 24 Июня 2017 Если мы точно знаем, что повис action_planner:update(), и точно знаем, у какого непися он повис - выяснить, НА ЧЕМ ИМЕННО он повис - все равно ни как нельзя ? Или эта информация все-таки может быть как-то вытянута ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
vampirnik77 121 Опубликовано 27 Июня 2017 Поделиться Опубликовано 27 Июня 2017 Возник вопрос, а можно ли отловить что игрок ввел в консоль? 1 Официальная страница проекта Neof-One Crew Ссылка на комментарий
tsap-tsap 0 Опубликовано 1 Июля 2017 Поделиться Опубликовано 1 Июля 2017 Играю в солянку 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 0 Опубликовано 1 Июля 2017 Поделиться Опубликовано 1 Июля 2017 (изменено) Приветствую. Где найти скрипт, отвечающий за механику стрельбы в ЗП? Я бы хотел создать новый класс оружия, для болтовой снайперской винтовки. Заранее спасибо. В принципе можно использовать и класс помпового дробовика, но у него патроны дозаряжаются по одному, а я не знаю как заставить пополниться обойму за одну анимацию, + у дробовика несоответствующая стрельба. Изменено 1 Июля 2017 пользователем Del0v Ссылка на комментарий
gam 117 Опубликовано 1 Июля 2017 Поделиться Опубликовано 1 Июля 2017 Только что, Del0v сказал: Где найти скрипт, отвечающий за механику стрельбы Есть подобная реализация, сделанная Bak в http://www.amk-team.ru/forum/topic/4653-ai-additions/, попробуй спросить у Автора. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 1 Июля 2017 Поделиться Опубликовано 1 Июля 2017 4 часа назад, tsap-tsap сказал: if amk_mod.check_npc_in_hideout(db.actor) function check_npc_in_hideout(npc,hide) Просто стоит посмотреть в скрипт, который пытаетесь использовать. Кстати, тема для таких вопросов выбрана не вполне удачная, поскольку внесено очень большое количество изменений, делающих неработоспособным то, к чему все привыкли по другим модам. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 2 Июля 2017 Поделиться Опубликовано 2 Июля 2017 Такой вопрос. Работаю с ТЧ 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 Как бы тут всё ясно, по строке я проблему проверил. Но вопрос в другом. Игра не вылетает. А в логи еррор. Есть ли смысл фиксить, заплаточки пилить? Не соответствует правилам. Ссылка на комментарий
UnLoaded 313 Опубликовано 2 Июля 2017 Поделиться Опубликовано 2 Июля 2017 1 час назад, CRAZY_STALKER666 сказал: Есть ли смысл фиксить, заплаточки пилить? А что именно фиксить ? Отсутствие, в конфигах твоей геймдаты, XML-секции "newspaper_video" ? У меня к примеру эта секция присутствует в двух конфигах. И что фиксить ? Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 2 Июля 2017 Поделиться Опубликовано 2 Июля 2017 3 часа назад, UnLoaded сказал: У меня к примеру эта секция присутствует в двух конфигах. И что фиксить ? Да, отсутствует. Но игра не вылетает. На кто знает этот втулкер, у меня на тестах "эпилога" на калькуляторе всё хорошо было, а после релиза началось... Ну, если не сложно - скинь, пожалуйста, саму секцию. Не соответствует правилам. Ссылка на комментарий
Kondr48 314 Опубликовано 2 Июля 2017 Поделиться Опубликовано 2 Июля 2017 Цитата Есть ли смысл фиксить, заплаточки пилить? Есть, не знаю отчего зависит, но на некоторых ПК иногда подобные ошибки все-таки приводят к вылету. Да и вообще накапливание ошибок в ходе игры не самая хорошая идея =) 1 Ссылка на комментарий
UnLoaded 313 Опубликовано 2 Июля 2017 Поделиться Опубликовано 2 Июля 2017 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 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти