Модостроение. Редактирование и создание скриптов
|
|
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 за это полезное сообщение: |
|
|
sniper777 | Дата: Чт, 18.07.2013, 22:20 | Сообщение # 241 |
Мастер
Пользователи
Сообщений: 598
| Снимаю вопрос, решил сам Добавлено (18.07.2013, 22:20) --------------------------------------------- Прописал нпс анимпоинт, вылет: [cut noguest=лог][/cut]
[cut=тл][/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили sniper777 за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 18.07.2013, 22:39 | Сообщение # 242 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sniper777, Похоже неверное имя смартковера в логике.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sniper777 | Дата: Пт, 19.07.2013, 09:42 | Сообщение # 243 |
Мастер
Пользователи
Сообщений: 598
| Можно ли в скрипте спавна добавить параметр direction?
[cut=тл][/cut]
|
|
|
Эти 0 пользователя(ей) поблагодарили sniper777 за это полезное сообщение: |
|
|
FantomICW | Дата: Пт, 19.07.2013, 09:54 | Сообщение # 244 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| sniper777, насколько я знаю, параметр direction в скриптах можно сделать если спавнишь через Net Packet.
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
makdm | Дата: Пт, 19.07.2013, 09:57 | Сообщение # 245 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата (sniper777) Можно ли в скрипте спавна добавить параметр direction? Можно. Откройте файл gamedata\configs\xr_effects.script
Найдите функцию spawn_object
В ней есть возможность поворота объекта по оси Y при спавне.
Терпение...... И все получится!
Сообщение отредактировал makdm - Пт, 19.07.2013, 10:10 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
strelok200 | Дата: Вт, 30.07.2013, 12:04 | Сообщение # 246 |
Бывалый
Свобода
Сообщений: 126
| Помогите разобраться пожалуйста. По условию (инфопоршень) должна появиться отметка перехода на другую локацию (ЗП) pda.script function fill_primary_objects() for k,v in pairs(primary_objects_tbl) do local obj_id = get_story_object_id(v.target) if(obj_id) then level.map_add_object_spot(obj_id, "primary_object", v.hint) end end change_anomalies_names() fill_sleep_zones() if (db.actor:has_info("polkovnik_info1")) then --Условие make_changers1() --Функция end end
Непосредственно сама функция function make_changers1() for k,v in pairs(pre_changer_tbl) do local obj_id = get_story_object_id(v.target) if(obj_id) then level.map_add_object_spot(obj_id, "level_changer_up", v.hint) end end end
Таблица с переходом
local pre_changer_tbl = { {target = "mil_to_dar", hint="mil_to_dar_name"}, }
Но ничего не происходит, отметки нету
|
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 30.07.2013, 19:45 | Сообщение # 247 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| strelok200, Отсутствует объект со story_id = mil_to_dar видимо.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
makdm | Дата: Ср, 31.07.2013, 23:41 | Сообщение # 248 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Всем, привет! Теперь и у меня вопрос ко всем Сталкерам. Платформа: COP 1.6.0.2 Задача: При гибели НПС , имеющего в руках Гаусс-пушку, сделать так, чтобы пушка самоликвидировалась со взрывом.
[cut noguest=Проблема]Прописыаем взрывчаику в файле weapons.ltx
[gauss_explosive]:explosive_grenade $spawn = "dynamic_objects\scene_objects\gauss_explosive" story_id = gauss_explosive hit_type_blast = chemical_burn hit_type_frag = chemical_burn visual = dynamics\light\light_signal.ogf
Прописываем в файле death_manager..script в функции keep_item(npc, item) после строки
local section = item:section()
следующее
if section == "wpn_gauss" then local obj = item and item:id() and alife():object(item:id()) if obj then alife():release( obj, true ) end alife():create( "gauss_explosive", vector():set(npc:position()),npc:level_vertex_id(), npc:game_vertex_id() ) level.add_call( function () if get_story_object("gauss_explosive") ~= nil then return true end end, function () expl_obj = get_story_object("gauss_explosive") expl_obj:explode(0) end ) return end
И если ГГ убивает врага с расстояния 30...40 метров, то вылета нет. И всё красиво получается: НПС - падает. Оружие самоликвидируется со взрывом. Если ближе, то вылет рандомный. Причём вылет с пустым логом. (Всё "виснет" и сброс только через Диспетчер Задач).
Тогда, я просто взял и сделал вот так: if section == "wpn_gauss" then local obj = item and item:id() and alife():object(item:id()) if obj then alife():release( obj, true ) end return end И вылет пропал. В упор уничтожал НПС( 2..3 метра) - вылета нет Значит проблема со спавном взрывчатки и её подрывом? Но тут вроде тоже всё правильно. Причём, если убрать удаление "Гаусс-пушки", а оставить только взрыв, то и тогда вылета нет. Получается так, что по отдельности ( удаление Гаусса( синий цвет) и взрыв( зелёный цвет) ) работают правильно, а вот вместе - никак.[/cut]
В чём проблема?
Терпение...... И все получится!
Сообщение отредактировал makdm - Чт, 01.08.2013, 01:05 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 01.08.2013, 10:32 | Сообщение # 249 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| makdm, 1. Вылет не "рандомный", для него нужны совершенно определенные условия 2. Вылет не зависит от расстояния на котором находиться НПС от ГГ 3. Вылет происходит не при сочетании удаления ствола и спавна взрывчатки, а именно при удалении ствола. 4. Свол не будет удален если до своей смерти НПС выронил его из рук по причине ранения. И теперь причины вылета: это известная проблема при удаления оружия убитого НПС. Что нужно для вылета: 1. НПС (враждебные или нет не важно) находящиеся в непосредственной близости от места события и которым не запрещено подбирать выпавшее оружие 2. НПС который гибнет и роняет оружие 3. Класс выпавшего оружия выше класса оружия НПС наблюдающих за этим. Что происходит: Во время смерти НПС оружие становиться "бесхозным" и отрабатывает скрипт подбора оружия для "видящих" это других НПС, в этот момент объект удаляется и вылет неизбежен.
На сколько я помню в SGM тоже было удаление оружия павших врагов и Николай вродебы устранил эту проблему.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
makdm | Дата: Чт, 01.08.2013, 10:56 | Сообщение # 250 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| denis2000, спасибо. Дело в том, что всем сталкерам, которые окружают НПС прописано в файле работ следующее
[cut=Работа на смарте][walker@standart] gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false wounded = wounded@work meet = no_meet ;---------------------------------------------------
[logic@walker_1] suitable = {=check_npc_name(kiborg)} true active = walker@wait_1 prior = 200
[walker@wait_1]:walker@standart path_walk = walker_1_walk path_look = walker_1_look
[wounded@work] hp_state = 0|wounded_heavy@help_heavy hp_state_see = 0|wounded_heavy@help_heavy hp_victim = 0|nil hp_fight = 0|false hp_cover = 0|false ;-----------------------------------------------------[/cut]
Как видно из скриптов всем НПС запрещено подбирать оружие, а также НПС запрещено быть ранеными.
Попробую заспавнить одного НПС на пустой локации с гаусс-пушкой.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 01.08.2013, 11:46 | Сообщение # 251 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| makdm, Код gather_items_enabled = false - это ведь не означает, что скрипт работать не будет, это означает что НПС не будут реагировать на предметы. С другой стороны есть логика на смарте или индивидуальная, а есть боевая схема в которой параметры логики могут и не работать.
Цитата (makdm) Попробую заспавнить одного НПС на пустой локации с гаусс-пушкой. Да это стоит попробовать. Можно конечно и не на пустой а в метрах 100 от других НПС.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
makdm | Дата: Чт, 01.08.2013, 13:16 | Сообщение # 252 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата (denis2000) На сколько я помню в SGM тоже было удаление оружия павших врагов и Николай вродебы устранил эту проблему. Проблема не устранена, а наоборот имеет место вылет. Сталкеры жалуются на безлоговый вылет во время атаки на Церковь. Так вот там спавнятся бандиты из sim_default_bandit_enemy_3 Если не повезло с рандомом, то спавнится бандюк с Абаканом. У Николая по кондлисту, если основная ветка на Болотах не выполнена, то оружие, указанное в файле death_items_control.ltx подлежит уничтожению при смерти НПС. Вот когда удаляется Абакан, то и происходит вылет без лога у церкви. Вылет аналогичный моему.
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 01.08.2013, 13:36 | Сообщение # 253 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата (makdm) Проблема не устранена, а наоборот имеет место вылет. Значит не устранена, но по крайней мере известно почему этот вылет происходит.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
makdm | Дата: Чт, 01.08.2013, 14:17 | Сообщение # 254 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Провёл тест на пустой локации Лиманск. Один ГГ против сталкера с Гаусс-пушкой. Выстрел метров за 40 из снайперки - вылета нет. Оружие удалено со взрывом. Три раза и всё чётко. Расстрел в упор из пулемёта - первый раз - без вылета второй раз - вылет
stack trace:
001B:070DE345 xrGame.dll, CDialogHolder::CleanInternals()
[error][ 87] : Параметр задан неверно.
Бог его знает, в чём проблема.
Терпение...... И все получится!
Сообщение отредактировал makdm - Чт, 01.08.2013, 14:17 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 01.08.2013, 18:07 | Сообщение # 255 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата (makdm) Бог его знает, в чём проблема. Проблема с удалением оружия, а вот каким образом лечить непонятно.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
|