Модостроение. Редактирование и создание скриптов
|
|
denis2000 | Дата: Пн, 10.10.2011, 21:17 | Сообщение # 1 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Редактирование и создание скриптов Редактирование и создание скриптов на языке LUA Если у вас появились вопросы по применению скриптов в игре. Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7
Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML [cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл: 1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R]) 2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx" 3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо) Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#" Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]
[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти? Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда. Для того чтоб найти LOG необходимо зайти вот сюда:
В Win хр лог находится:
C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs
Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.
В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs
Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка: ... $app_data_root$ = true | false| $fs_root$| users\(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx) ... $logs$ = true| false| $app_data_root$| logs\(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи) ... [/cut][cut=Получение более подробной информации о вылете (ХОВАН)] Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...) Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так: Code function abort(fmt, ...) local reason = string.format(fmt, ...) error_log(reason) end Вот для примера два одинаковых вылета, первый с функцией по умолчанию, второй - с поправленной функцией
Первый: Code Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil) Второй: Code Expression : 0 Function : ErrorLog File : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp Line : 49 Description : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic' [/cut]
Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы, статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
strelok200 | Дата: Чт, 20.03.2014, 19:33 | Сообщение # 466 |
Бывалый
Свобода
Сообщений: 126
| alex_xp_77, Вроде бы в сети уже есть выдранный выброс из АМК, а локацию подключить несложно- просто прописываешь укрытия на ней по аналогии с другими
|
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 20.03.2014, 22:20 | Сообщение # 467 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| alex_xp_77, strelok200, Может конечно и есть выброс от АМК отдельно, но я не видел такого. В любом случае понадобятся знания скриптов, без них затея с выбросом бессмысленна.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
strelok200 | Дата: Пт, 21.03.2014, 07:46 | Сообщение # 468 |
Бывалый
Свобода
Сообщений: 126
| Перепутал, есть выброс выдранный из OGSM http://ogsmod.ru/blowout-mod-v1-0/
|
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
alex_xp_77 | Дата: Сб, 22.03.2014, 21:20 | Сообщение # 469 |
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Добрый вечер дорогие форумчане, у меня вопрос касаем game_maps_single, есть такой текстовый документ в X-Ray SDK, да и в игре тоже, хотел поменять визуал ПДА, что бы видно было мои новые карты, но как снять метки, точнее, как снять правильно величины terraina, и прописать их в этом документе, и еще прописал название моих локаций вот в этой строке в game_maps_single вот тут http://SSMaker.ru/9373b9f8/ и последовал вылет такой [cut noguest=http://SSMaker.ru/ce9f4399/][/cut] Кто владеет информацией как снять правильно величину локации, и можно ли это сделать в sdk, и как исправить лог, у меня слабая надежда все же на то, что ругается на то что нету моей локации в textures.ltx, текстуру террейна добавил в папку с игрой!!На что ругается мне не понятно!!
|
|
|
Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 22.03.2014, 22:28 | Сообщение # 470 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| alex_xp_77, Вот инструкция для ЧН, но для ЗП или ТЧ отличия несущественные - принцип сохранился.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 25.03.2014, 17:24 | Сообщение # 471 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый день. В СГМ есть ф-ия удаления лишних отрядов Альфы.
[cut=Функция]function submodule_alfa_control(squad) if find_in_string(squad:name(),"alfa_squad") then local squad_level="" if find_in_string(squad:name(),"zat_") then squad_level="zaton" elseif find_in_string(squad:name(),"jup_") then squad_level="jupiter" elseif find_in_string(squad:name(),"pri_") then squad_level="pripyat" end if squad_level~="" and sgm_functions.read_variable("alfa_squad_"..string.sub(squad:name(),1,1).."_count")> r_alfa_params("number","max_squads_count_on_"..squad_leve l,7) then if squad.position:distance_to(db.actor:position())>100 then squad:remove_squad() sgm_functions.dec_counter("alfa_squad_"..string.sub(squad:name(),1,1).."_count") end end end end [/cut] 403 строка: Код if squad_level~="" and sgm_functions.read_variable("alfa_squad_"..string.sub(squad:name(),1,1).."_count")> r_alfa_params("number","max_squads_count_on_"..squad_leve l,7) then
Иногда возникают вылеты из-за этой функции.
[cut=Лог]FATAL ERROR
[error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ...r. - Зов Припяти\gamedata\scripts\sgm_modules.script:403: attempt to compare number with nil
stack trace: [/cut]
Онлайн-радиус в сборке увеличен до 200 метров. Других изменений для этой функции не делал. В чем причина вылетов и как их устранить?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 25.03.2014, 21:57 | Сообщение # 472 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Или функция sgm_functions.read_variable или функция r_alfa_params возвращает nil вместо числа - это следствие, ищите причину.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
makdm | Дата: Вт, 25.03.2014, 22:01 | Сообщение # 473 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата sergej5500 ( ) В чем причина вылетов и как их устранить? Причина в том, что переменная sgm_functions.read_variable("alfa_squad_"..string.sub(squad:name(),1,1).."_count") равна nil. А вот почему - не понятно ( про этот вылет часто писали в теме ошибок SGM 2.2 ).
Вылет лечится так. Перед строчкой if squad_level~="" and пишите
if sgm_functions.read_variable("alfa_squad_"..string.sub(squad:name(),1,1).."_count") == nil then return end
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Сб, 29.03.2014, 21:16 | Сообщение # 474 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер.
В СГМ есть функция.
[cut=Функция]function release_npc(actor,npc) if npc~=nil then if npc~=nil and get_story_object(npc:profile_name())~=nil then unregister_story_id(npc:profile_name()) end if alife():object(npc:id()) then alife():release(alife():object(npc:id()),true) end end end[/cut]
Вызывается из кастом-даты НПС и удаляет его. Прошу прояснить два вопроса.
1. Обязательна ли для удаляемого НПС стори-ид? 2. Обязательно ли удаляемому НПС быть в онлайне?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Сб, 29.03.2014, 21:57 | Сообщение # 475 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, 1. Не обязательно. 2. Да обязятельно. Если НПС оффлайн, то его логика не активна.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
FantomICW | Дата: Пн, 07.04.2014, 20:52 | Сообщение # 476 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| некит025, по броникам система следующая: 1. Создаем желательно новый скрипт, и там пишем функцию: Код function dynamic_outfit_effector() if db.actor:item_in_slot(7) ~= nil then if db.actor:item_in_slot(7):section() == "scientific_outfit" then ... elseif db.actor:item_in_slot(7):section() == "exo_outfit" then ... end end end Вместо трех точек - действие любые. Вчера скидывал тебе функцию запуска эффекта. При желании, можно все это дело через таблицу сократить. Я думаю, в этом случае можно повесить функцию в bind_stalker.script-->actor_binder:update(delta): Код твой_скрипт.dynamic_outfit_effector()
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
некит025 | Дата: Вт, 08.04.2014, 14:53 | Сообщение # 477 |
Гражданский
Пользователи
Сообщений: 20
| FantomICW, гмм... достаточно просто, это как с арефактами получается, буду пробывать, спасибо! Добавлено (08.04.2014, 14:53) --------------------------------------------- FantomICW, Еще раз здравствуйте, моглибы вы перечислить все эффекты которые есть в игре, тоесть начиная от пошатывания камеры, заканчивая воздействием контролёра, и визуальные, и... которые наносят ущерб, я имею ввиду чтоб был эффект как в радиацию заходишь, но облучения не получаешь, или заходишь в пси поле и опятьше никаких повреждений, если такое возможно конечно, в моём случае при одевании костюма, идёт несколько эффектов сразу, но они визуальные, от них нет повреждения, а во втором костюме наоборот, никаких эффектов, только повреждения от пси воздействие например, понимаю, что начинаю надоедать вопросами, но помогите пожалуйста.
|
|
|
Эти 0 пользователя(ей) поблагодарили некит025 за это полезное сообщение: |
|
|
FantomICW | Дата: Вт, 08.04.2014, 15:57 | Сообщение # 478 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| некит025, думаю, на перечисление всех эффектов уйдет ну где-то так часа 2)) Глянь файлы effectors.ltx и postrocess.ltx в configs/misc. Сами файлы ppe и anm лежат в anims. Еще в СГМ есть классная вещь - Гуи-проигрыватель многих эффектов. В ui_main_menu.script есть строки вызова. Форма находится в ui_mod_elements.script.
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
sergej5500 | Дата: Вт, 15.04.2014, 10:32 | Сообщение # 479 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый день. Заинтересовал такой вопрос. Можно ли написать скрипт, отслеживающий наличие на активном стволе глушителя? Если на стволе глушитель есть, то износ ствола при стрельбе умножить на 100, например. То есть без глушителя condition_shot_dec = 0.0001, а с глушителем condition_shot_dec = 0.01. Добавлено (15.04.2014, 10:32) --------------------------------------------- Доброе утро. Требуется функция, измеряющая дистанцию от актора до сквадов с именами stalker_sim_squad_novice, stalker_sim_squad_advanced, stalker_sim_squad_veteran и т.д. В общем со сквадами, в имени которых есть *_sim_squad_*. Дополнительное условие - проверяемый сквад не враждебен игроку. Стори Ид у этих сквадов нет. Функция должна вызываться из логгики рестриктора и прописываться в xr_conditions.
Как можно составить данную функцию? Заранее благодарен за советы.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 15.04.2014, 13:08 | Сообщение # 480 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата sergej5500 ( ) Можно ли написать скрипт, отслеживающий наличие на активном стволе глушителя? Если на стволе глушитель есть, то износ ствола при стрельбе умножить на 100, например. Вообще конечно глушитель в реальности на износ если и влияет, то крайне слабо, гораздо больше влияет тип боеприпаса и внешние условия среды (например температура и влажность воздуха) Отследить то наличие глушителя можно бес проблем проанализировав нетпакет оружия (смотри в этой теме уже обсуждалось), как повлиять на параметр износа при этом? Два варианта: скриптовый апгрейд в котором изменен соответствующий параметр или прямое воздействие на ячейку памяти движка.
Цитата sergej5500 ( ) функция, измеряющая дистанцию от актора до сквадов с именами Пробуй так:[cut] Код function dist_to_simsquad_le(actor, obj, p) local dist = p[1] local board = sim_board.get_sim_board() for k,v in pairs(board.squads) do local squad = alife():object(v) if string.find(squad:section_name(), "_sim_squad_") then if squad:position():distance_to_sqr(actor:position()) <= dist * dist then return true end end end return false end [/cut]
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
|