Модостроение. Редактирование и создание скриптов
|
|
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 за это полезное сообщение: |
|
|
Geonezis | Дата: Сб, 04.08.2012, 16:29 | Сообщение # 91 |
Разработчик «Смерти вопреки»
Свобода
Сообщений: 2360
| denis2000, как Вы и предполагали вызов snd:play_no_feedback(...) не подразумевает остановку. Использование snd:play(...) решило проблему. Большое спасибо. С вашей помощью почти закончил gui- рацию.
Смерти Вопреки Spectrum Project AP_Prodaction
Сообщение отредактировал GEONEZIS - Сб, 04.08.2012, 16:30 |
|
|
Эти 0 пользователя(ей) поблагодарили Geonezis за это полезное сообщение: |
|
|
vladikzam | Дата: Ср, 15.08.2012, 12:56 | Сообщение # 92 |
Гражданский
Пользователи
Сообщений: 17
| Нашёл скрипт , касающийся Давида [cut]Code [logic] active = move@waiting on_death = death
[death] on_info = %+zat_monsters_wave_defence_commander_killed =zat_monsters_wave_commander_death%
[move@waiting] move_dest_number = 1219831 move_look_vertex = 1219848 move_state_when_center = guard move_state_when_move = walk meet = meet invulnerable = {-zat_monsters_wave_fail -zat_monsters_wave_reward} true, false combat_ignore_cond = {=check_enemy_name(zat_b18_dog_noah)} true on_info = {=actor_neutral} %=actor_friend%, {=actor_enemy} %=actor_friend% on_info2 = {+zat_monsters_wave_fail} nil, {+zat_monsters_wave_complete} nil on_info3 = {+zat_monsters_wave_on_firepos} move@defence %=play_s2d_sound(characters_voice\human_01\stalker\alife\defence\actor_come_1_pda)% [move@defence] scheme_type = shooter shooter_pos = 1219831 shooter_fire_look = enemy shooter_idle_look = 1219848 shooter_clip = -1 shooter_reload = 1 shooter_type_wpn = rifle shooter_ignore_actor = true shooter_need_see = true shooter_need_dist = 60 shooter_move_state = assault shooter_idle_state = threat shooter_fire_state = threat_fire shooter_home_teleport = true combat_ignore_cond = {=check_enemy_name(zat_b18_dog_noah)} true invulnerable = {-zat_monsters_wave_appeared_1_controller} true, false on_info = {=actor_neutral} %=actor_friend%, {=actor_enemy} %=actor_friend% on_info2 = {+zat_monsters_wave_fail} nil, {+zat_monsters_wave_3_controller_destroyed} nil %=play_s2d_sound(characters_voice\human_01\stalker\alife\defence\end_defence_2_pda)% [/cut] Вопрос. Что нужно в нём изменить, чтобы Давид стал неуязвимым? Или не в нём? Просто не знаю где искать ещё.. Монстров очень много - валят его только так. Плевать, что чит - нервы дороже. Помогите. Заранее благодарен.
Добавлено (15.08.2012, 12:56) --------------------------------------------- Ещё вопрос. В анонсе мода есть упоминание о спаунере. Насколько я понял это скриптовая тема. Как активировать спаунер? Дело в том, что прописывание в строке экзешного файла "Объект" -cheat_mode блокирует запуск игры. Лаунчер презренно игнорирует кликания . Что делать? Слышал, что в bin надо лезть и тоже самое делать с биновским лаунчером, но тоже чего то без эффекта. Может кто-нибудь совет даст как иначе эту проблему решить? Или может кто-нибудь выложит как правильно должна строка выглядеть? Заранее благодарен.
vladikzam
|
|
|
Эти 0 пользователя(ей) поблагодарили vladikzam за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 15.08.2012, 20:09 | Сообщение # 93 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| vladikzam Пропишите во всех секциях значение: invulnerable = true Давид станет бессмертным. Файл нужно править до взятия квеста
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 15.08.2012, 22:45 | Сообщение # 94 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| vladikzam, Какой спаунер и где вы его видели?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
vladikzam | Дата: Чт, 16.08.2012, 11:34 | Сообщение # 95 |
Гражданский
Пользователи
Сообщений: 17
| " Какой спаунер и где вы его видели?" В папке со скриптами есть файл UI_MAIN_MENU.SCRIPT . Если его внимательно изучить, то в нём есть команды для активации спаунера. Например [cut]if dik==DIK_keys.DIK_Q then --/self:OnMessageQuitWin() elseif dik==DIK_keys.DIK_SUBTRACT then self:screenshot_mode_on() elseif dik==DIK_keys.DIK_ADD then self:screenshot_mode_off() elseif db.actor~=nil and dik==DIK_keys.DIK_F5 then self:mod_options() elseif db.actor~=nil and dik==DIK_keys.DIK_F6 then create("ID_PERSA",db.actor:position().x+10,db.actor:position().y,db.actor:position().z+1,db.actor:level_vertex_id() ,db.actor:game_vertex_id())
elseif db.actor~=nil and dik==DIK_keys.DIK_T then self.OnButton_return_game() run_choose_box("yes_or_no","remove_bad_outfit","Удалить текущий бронекостюм?") elseif db.actor~=nil and dik==DIK_keys.DIK_6 then self.OnButton_return_game() level.show_weapon(true) end if find_in_string(command_line(),"-cheat_mode") and find_out_string(command_line(),"-test") then if db.actor~=nil and dik==DIK_keys.DIK_0 then self:set_0_factor() elseif db.actor~=nil and dik==DIK_keys.DIK_1 then self:set_1_factor() elseif db.actor~=nil and dik==DIK_keys.DIK_2 then self:set_2_factor() elseif db.actor~=nil and dik==DIK_keys.DIK_3 then self:set_3_factor() elseif db.actor~=nil and dik==DIK_keys.DIK_4 then self:set_4_factor() elseif db.actor~=nil and dik==DIK_keys.DIK_5 then self:set_5_factor() elseif db.actor~=nil and dik==DIK_keys.DIK_F1 then self:mod_modes() elseif db.actor~=nil and dik==DIK_keys.DIK_F2 then self.OnButton_return_game() run_dynamic_element(ui_mod_spawner.spawn_item_dialog(),false,true) elseif db.actor~=nil and dik==DIK_keys.DIK_F3 then self:deliver_mp3_and_bonus() elseif db.actor~=nil and dik==DIK_keys.DIK_F4 then self:inc_actor_rank() elseif db.actor~=nil and dik==DIK_keys.DIK_P then self:set_rich_actor() end[/cut]
А не работает. ))))
Добавлено (16.08.2012, 11:34) --------------------------------------------- Quote (sergej5500) Пропишите во всех секциях значение: invulnerable = true
А вот в строчках invulnerable = {-zat_monsters_wave_fail -zat_monsters_wave_reward} true, false слово false удалять или заменить на true ? Чтобы получилось invulnerable = {-zat_monsters_wave_fail -zat_monsters_wave_reward} true, true или надо чтобы было так invulnerable = {-zat_monsters_wave_fail -zat_monsters_wave_reward} true ?
vladikzam
|
|
|
Эти 0 пользователя(ей) поблагодарили vladikzam за это полезное сообщение: |
|
|
sergej5500 | Дата: Чт, 16.08.2012, 12:28 | Сообщение # 96 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| vladikzam Замените строки вида invulnerable = {-zat_monsters_wave_fail -zat_monsters_wave_reward} true, false на строку invulnerable = true
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Чт, 16.08.2012, 17:37 | Сообщение # 97 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| vladikzam, 1. Научись пользоваться спойлерами! В следующий раз будет предупреждение. 2. Чит-режим и спавнер две большие разницы! 3. Вот так:
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
lychagin0 | Дата: Чт, 16.08.2012, 21:39 | Сообщение # 98 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| denis2000, добрый вечер,можно ли использовать функцию kill_npc для убийства монстра?
Да конечно. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
CERBE[R] | Дата: Пт, 17.08.2012, 01:02 | Сообщение # 99 |
Гражданский
Пользователи
Сообщений: 2
| Всем привет ребят! Я тут новенький)) но в Sigerous Mod играю с версии 1.3. по моему мнению это лучший мод для ЗВ! Моя проблема в том, что я хочу немного изменить один параметр, но не знаю где он =( Я хочу изменить число зомби с 400 до 1200)) P.S Это задание после сопроваждения военных и стрелка, во фриплеи, после большого выброса. Пожалуйста помогите! Буду очень благодарен! Заранее спасибо
[R|C.C.G]_CERBE[R]
|
|
|
Эти 0 пользователя(ей) поблагодарили CERBE[R] за это полезное сообщение: |
|
|
Глюк | Дата: Пт, 17.08.2012, 02:18 | Сообщение # 100 |
Почетный Вольный
Вольные сталкеры
Сообщений: 2606
| Quote (CERBE|R|) Я хочу изменить число зомби с 400 до 1200 Находишь в каталоге с игрой файл gamedata\scripts\sgm_tasks.script. В нем ищешь следующую строку sgm_functions.write_variable("zone_cleaning_value",400) для версии мода 2.1 или write_mod_param("zone_cleaning_value",400) для версии мода 2.2 и меняешь 400 на 1200.
Быть собой, верить в себя, не изменять себе...
|
|
|
Эти 0 пользователя(ей) поблагодарили Глюк за это полезное сообщение: |
|
|
Азазель | Дата: Пн, 03.09.2012, 05:07 | Сообщение # 101 |
Новичок
Пользователи
Сообщений: 77
| Здраствуйте. Видел в одном моде на чн сделали в инвентаре аж 2 дополнительных слота под пистолеты. Как такое реализовать в зп ? Хотя бы один слот....
Ну для начала: Что положено быку, то не положено Юпитеру! Название мода не подскажете? denis2000
Добавлено (30.08.2012, 00:27) --------------------------------------------- denis2000, БЫЛА ССЫЛКА. Вот наконец нашел. Resistance Mod ver. 0.2
И где там два слота под пистолеты? denis2000
Добавлено (03.09.2012, 05:07) --------------------------------------------- denis2000, Там скрин есть. И не один.
1. Перечитайте правила выкладывания ссылок на сайт 2. На том ресурсе всего 2 скрина, которые не показывают 2 слота под пистолеты, в описании тоже 0 XOBAH
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 03.09.2012, 21:45 | Сообщение # 102 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Азазель, То есть сам мод вы не запускали и только по скринам сделали далеко идущие выводы.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Азазель | Дата: Сб, 22.09.2012, 19:02 | Сообщение # 103 |
Новичок
Пользователи
Сообщений: 77
| Добрый день. Хотелось бы узнать как осуществить такое. Пример: - Отдаем Кардану мп5 - Спустя пару часов готов апгрейд который заказывали.
Или тоже самое но через день. В скриптах полный нуб поэтому просьба написать подробно (насколько это вопще возможно)
Это не возможно, поскольку нет функции передающей установленные апгрейды и нет функции скриптовой установки апгрейда. denis2000
Возможно я немного не так выразился. Меня интересует лишь часть "Спустя несколько часов" - тоесть чтобы оружие с апгрейдом отдавал потом а не сразу. А насчет того что скриптовой установки апгрейда нет я знаю. Поэтому буду халтурить как и все. Выдавать готовое оружие отдельный ствол.
Тогда попытайтесь описать алгоритм при помощи которого вы собираетесь это сделать. denis2000Добавлено (22.09.2012, 19:02) --------------------------------------------- Да собственно без проблем. 1. Приходим к механику. Говорим какой надо апгрейд. Отдаем ствол и деньги. 2. Через некоторое время (через час или через день) приходим и забираем готовый ствол.
На самом деле в апгрейде никакой скриптовой части кроме диалога нет. Отдаем ствол получаем с апгрейдом. Просто в конфиге в конце файла будут на основе обычного прописаны нужные изменения в результате не один новый ствол. Которые и буду выдавать.
Вот для части "подождать" пока механик якобы сделает апгрейд и нужен скрипт. Которые делает возможным продолжение диалога только спустя час или день.
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 23.09.2012, 13:40 | Сообщение # 104 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Quote (Азазель) Да собственно без проблем. Ах если бы, да кабы. Quote (Азазель) 1. Приходим к механику. Говорим какой надо апгрейд. Отдаем ствол и деньги. Приходим к механику - без коментариев Говорим какой надо апгрейд - тоже возможно, но нет возможности убрать уже установленные апгрейды из списка поскольку нет функции передающей установленные апгрейды Отдаем ствол и деньги - без проблем. Quote (Азазель) 2. Через некоторое время (через час или через день) приходим и забираем готовый ствол. Без проблем. Одно НО! Апгрейд не установлен! У вас в алгоритме нет установки апгрейда!
Quote (Азазель) На самом деле в апгрейде никакой скриптовой части кроме диалога нет. Отдаем ствол получаем с апгрейдом. Просто в конфиге в конце файла будут на основе обычного прописаны нужные изменения в результате не один новый ствол. Которые и буду выдавать. А вот в этих словах есть здравая идея - одно большущее НО! Количество вариантов стволов со всеми возможными комбинациями апгрейдов будет огромным.
Quote (Азазель) Вот для части "подождать" пока механик якобы сделает апгрейд и нужен скрипт. Которые делает возможным продолжение диалога только спустя час или день. А здесь то в чем проблема!? Эта функция очень часто используется в SGM 2.2.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 30.09.2012, 17:52 | Сообщение # 105 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Всем Добрый Вечер! Как написать скрипт, удаляющий все объекты, в названии которых есть фрагмент "mar_mine_field_" одновременно со всей локации Болота вне зависимости от расстояния до Главного Героя. Нужно удалить с локации все оставшиеся мины, если ГГ получил инфопорцию "mar_army_cargo_talk_commander". Заранее благодарен за подсказки.
Если SGM v2.2, то там есть функция release_objects_by_section, которая сможет удалить предметы СО ВСЕХ локаций, которые содержат строчку переданную в качестве параметра. Для Вашего случая можно просто вызвать release_objects_by_section("mar_mine_field_"). Если не SGM v2.2, то вот необходимая функция: [cut]function release_objects_by_section(find_string) for a=1,65534 do local obj = alife():object(a) if obj then if obj:section_name()~=nil and string.find(obj:section_name(),find_string) and obj.id~=nil then local sect=obj:section_name() alife():release(alife():object(obj.id),true) end end end end[/cut]XOBAH
Сообщение отредактировал sergej5500 - Вс, 30.09.2012, 19:13 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
|