Модостроение. Редактирование и создание скриптов
|
|
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 за это полезное сообщение: |
|
|
FantomICW | Дата: Вс, 10.11.2013, 12:11 | Сообщение # 331 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| Добрый день! Хотелось бы из рестриктора запустить функцию, которая бы выбрасывала и портила все оружие, которое есть у ГГ, не считая ножа. Возможно ли такое?
Именно так и сделано при старте новой игры в оригинальном ЗП функцией damage_actor_items_on_start. А выбросить можно функцией drop_item. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
strelok200 | Дата: Вт, 12.11.2013, 18:42 | Сообщение # 332 |
Бывалый
Свобода
Сообщений: 126
| можно ли написать такой скрипт? При нахождении ГГ около любой аномалии (не дальше 2-х метров), на экран выводилась информация (Название аномалии, ну проч.). Если да, то как сделать проверку на то, что ГГ близок к аномалии и какая рядом аномалия?
|
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 12.11.2013, 23:43 | Сообщение # 333 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| strelok200, В сктрипте bind_anomaly_field.script в функции anomaly_field_binder:update, добавляешь вызов: Код my_script.anom_field_update(self.object) Создаешь скрипт my_script.script в функции anom_field_update пишешь: Код function anom_field_update(anomaly) if db.actor then local act_pos = db.actor:position() local anom_pos = anomaly:position() if act_pos:distance_to_sqr(anom_pos) < 4 then --[[Код который выполняется если ГГ на расстоянии менее 2 метров от аномалии, переменная anomaly содержит объект-аномалию, параметры которой можно считать]] end end end
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Азазель | Дата: Чт, 21.11.2013, 19:36 | Сообщение # 334 |
Новичок
Пользователи
Сообщений: 77
| Доброго времени суток. Такой ряд вопросов назрел. Есть ли туториалы и разборы скриптов Smart cover в чн ? Очень понадобились онные. В частности добавление большего кол-ва idle анимаций. И вообще что данные скрипты из себя представляют кроме набора анимаций.
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 22.11.2013, 12:10 | Сообщение # 335 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата Азазель ( ) Есть ли туториалы и разборы скриптов Smart cover в чн Я в этом сильно сомневаюсь, поскольку ЧН не сильно популярен у модостроителей.
Цитата Азазель ( ) И вообще что данные скрипты из себя представляют кроме набора анимаций. В основном это таблици и функции используемые другим скриптом для настройки поведения НПС (там не только список анимаций, но и много других параметров) в самарт коверах.
Цитата Азазель ( ) В частности добавление большего кол-ва idle анимаций. Поскольку это скрипты, то и исследуй из как скрипты.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Азазель | Дата: Пт, 22.11.2013, 20:38 | Сообщение # 336 |
Новичок
Пользователи
Сообщений: 77
| denis2000, Хм. Поковырялся больше.. Есть скрипт смарт ковер. Который задает имена и как вы и сказали там есть и о поведении строки. Вообщем спасибо. Пойду дальше изучать.
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 27.11.2013, 22:21 | Сообщение # 337 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер. Для квеста в СГМ 2.1 понадобилось сделать группу сталкеров, преследующих игрока. Оптимальной для НПС оказалась следующая логика.
[cut=Логика][move@walker2] move_pursue_actor = true move_pursue_range = 15|45 move_pursue_formation = back[/cut]
Определяющими являются дистанции 15 и 45 метров. Если дистанция до ГГ меньше 15, то НПС останавливается с оружием на изготовку. Если это дружественный НПС, то он не будет перекрывать линию огня. Если дистанция от 15 до 45, то НПС с оружием в руках преследует игрока рысью. Но игрок может сохранять нужную дистанцию, не давая НПС слишком приближаться. Если расстояние больше 45, то НПС бежит как олимпийский чемпион. При разумной скорости игрока оторваться от НПС невозможно. Дистанции можно менять.
Проблема в том, что больше 6-ти НПС под эту схему поставить нельзя. Можно сделать 30 неписей. В погоню рванут максимум шестеро. Схемы поведения НПС прописаны в файле xr_move. Есть ли в СГМ ограничения на использование данной схемы поведения НПС и можно ли снять проблему 6 НПС? Заранее благодарен за советы.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Ср, 27.11.2013, 23:02 | Сообщение # 338 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, для параметра move_pursue_formation = back в файле xr_move.script определены только шесть позиций.
[cut=позиции]back = {point_1 = {dir = vector():set(0.3,0,-1), dist = 2.2}, point_2 = {dir = vector():set(-0.3,0,-1), dist = 3.4}, point_3 = {dir = vector():set(0.3,0,-1), dist = 4.6}, point_4 = {dir = vector():set(-0.3,0,-1), dist = 5.8}, point_5 = {dir = vector():set(0.3,0,-1), dist = 7}, point_6 = {dir = vector():set(-0.3,0,-1), dist = 8.2}}[/cut]
Поэтому либо не используйте move_pursue_formation, либо добавляйте позиции.
Кстати вроде как back - это "пятится назад" или "ракоход". Интересно, у вас сталкеры догоняют ГГ двигаясь задом вперёд?
Терпение...... И все получится!
Сообщение отредактировал makdm - Ср, 27.11.2013, 23:10 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Пт, 29.11.2013, 20:44 | Сообщение # 339 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| makdm, Дмитрий, спасибо за совет. Сталкеры движутся вполне обычно. Задом наперед никто не ходит. Возможно у параметра неудачное название.
Добавлено (29.11.2013, 20:44) --------------------------------------------- Добрый вечер. Для эксперимента в чистом ЗП попробовал сделать персональный тайник. Добавил секцию тайника.
[zat_test_stalker_container_1]:inventory_box visual = dynamics\devices\dev_rukzak\dev_rukzak.ogf story_id = zat_test_stalker_container_1
Функции для рюкзака в xr_effects
function zat_test_stalker_container_1_spawn(actor, npc) alife():create("zat_test_stalker_container_1",vector():set(-317.32217407227,19.277782440186,610.07440185547),315400,212) end function zat_test_stalker_container_1_item_spawn(actor, npc) spawn_object_in("wpn_ak74","zat_test_stalker_container_1") end
Повесил вызов функций в ui_main_meny. Рюкзак заспавнился нормально. При наведении появляется надпись "обыскать ящик". При попытке заспавнить в рюкзаке автомат получаю вылет: attempt to call field 'zat_test_stalker_container_item_1_spawn
Как написать функцию, чтобы не вылетало?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 29.11.2013, 23:07 | Сообщение # 340 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Написали одну функцию, а вызываете другую: zat_test_stalker_container_1_item_spawn zat_test_stalker_container_item_1_spawn Передаваемые параметры функции spawn_object_in - неверные, нужно так: spawn_object_in(actor, npc, {"wpn_ak74","zat_test_stalker_container_1"})
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Сб, 30.11.2013, 11:51 | Сообщение # 341 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Доброе утро. В СГМ есть функции спавна сквада через скрипт. create_force("val_a2_snork_squad","val_monster_burrow_2") -- указан сквад и смарт. create_force("zat_mad_dog_squad",-349.61730957031,39.804275512695,-294.8235168457,256767,303) -- спавн по координатам.
Есть ли в чистом Зове Припяти такая возможность?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 30.11.2013, 12:52 | Сообщение # 342 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, В xr_effects.script есть функция спавна сквада на смарте: function create_squad(actor, obj, p), но если добавишь функцию create_force из SGM, то будет и она.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
FantomICW | Дата: Сб, 30.11.2013, 12:55 | Сообщение # 343 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| sergej5500, доброго утра. Есть функция create_squad из xr_effects.script. Ее можно вызвать двумя способами: 1) Красиво через логику: Код %=create_squad(squad : smart)% 2) Не очень красиво через скрипт: Код xr_effects.create_squad(nil, nil, {"squad", "smart"}) Если нужно заспавнить по координатам, то в _g.script надо переносить как-раз функцию create_force из SGM: [cut=Код]Код function create_force(squad_sect,x,y,z,lv,gv) local squads_list=utils.parse_spawns(squad_sect) for k,v in pairs(squads_list) do for i=1,v.prob do if y~=nil then local board=sim_board.get_sim_board() local squad=board:create_force(v.section,x,y,z,lv,gv) for k in squad:squad_members() do board:setup_squad_and_group(k.object) end squad:update() else local board=sim_board.get_sim_board() local smart=board.smarts_by_names[x] local squad=board:create_squad(smart,v.section) board:enter_smart(squad,smart.id) for k in squad:squad_members() do board:setup_squad_and_group(k.object) end squad:update() end end end end [/cut]
Сообщение отредактировал FantomICW - Сб, 30.11.2013, 12:57 |
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
Lazur | Дата: Сб, 30.11.2013, 12:57 | Сообщение # 344 |
Новичок
Пользователи
Сообщений: 82
| Здравствуйте. В моде Dynamic_helment визуал сменяется не только в зависимости от костюма, но и от надетого шлема. Там используется функция set_visual_name, которая доступна для ГГ. И вот пришла кой-какая идейка, но для её реализации нужна замена визуала детектора. Для класса детектора в lua_help.script подобной функции не нашёл, значит замену визуала не сделать? Или можно, но придётся заменять текущий детектор на какой-либо?
На пыльных тропинках аномальных полей Заспавнятся наши следы...
|
|
|
Эти 0 пользователя(ей) поблагодарили Lazur за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 30.11.2013, 13:09 | Сообщение # 345 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Lazur, Только если переспавнить детектор с новым визуалом. Хотя ничего ведь не мешает проверить.
Цитата FantomICW ( ) Не очень красиво через скрипт Ну почему же, ведь xr_logic.script читая твою строку %=create_squad(squad : smart)%, именно так эту функцию и запустит.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
|