Модостроение. Редактирование и создание скриптов
|
|
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 за это полезное сообщение: |
|
|
sergej5500 | Дата: Ср, 06.03.2013, 16:27 | Сообщение # 151 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| banananua, В профилях "Альфы" прописано characters_voice\human_01\military\. Соответственно, у них озвучка военных. Чтобы прописать им озвучку наёмников нужно эту строку заменить на characters_voice\human_03\killer\. Тогда они загворят по немецки. Файл character_desc_extended в папке gamedata\configs\gameplay.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
Earth2Space | Дата: Сб, 09.03.2013, 09:51 | Сообщение # 152 |
Механик-водитель 6-го моторизованного квада
Долг
Сообщений: 344
| Имеется ошибка в xr_wounded.script, скорее всего здесь: Код local wounded_time = xr_logic.pstor_retrieve(self.npc, "wounded_time") if wounded_time ~= nil and wounded_time <= 200000 then xr_sound.set_sound_play(self.npc:id(),"help_thanks") end xr_logic.pstor_store(self.npc, "wounded_time", nil) end , т.к. если вышеприведенный кусок заменить на Код local begin_wounded = xr_logic.pstor_retrieve(self.npc, "begin_wounded") local current_time = time_global() if begin_wounded ~= nil and current_time - begin_wounded <= 60000 then xr_sound.set_sound_play(self.npc:id(), "help_thanks") end xr_logic.pstor_store(self.npc, "begin_wounded", nil) , то игра загружается. Есть тут что?
Стол заказов | Правки движка | O.G.S.E. 0.6.9.3
|
|
|
Эти 0 пользователя(ей) поблагодарили Earth2Space за это полезное сообщение: |
|
|
ted80 | Дата: Сб, 09.03.2013, 10:05 | Сообщение # 153 |
Гражданский
Пользователи
Сообщений: 15
| После вылета игры на раб.стол-открой блокнот и нажми Ctrl+V, или ПКМ->Вставить Там будет конкретный лог с ошибкой - имя_скрипта+строка_с_ошибкой, тут и узнаеш где искать ))
|
|
|
Эти 0 пользователя(ей) поблагодарили ted80 за это полезное сообщение: |
|
|
Earth2Space | Дата: Сб, 09.03.2013, 10:34 | Сообщение # 154 |
Механик-водитель 6-го моторизованного квада
Долг
Сообщений: 344
| Разобрался путем научного тыка: после xr_logic.pstor_store(self.npc, "wounded_time", nil) стоял end лишний.
Стол заказов | Правки движка | O.G.S.E. 0.6.9.3
|
|
|
Эти 0 пользователя(ей) поблагодарили Earth2Space за это полезное сообщение: |
|
|
Earth2Space | Дата: Сб, 09.03.2013, 13:26 | Сообщение # 155 |
Механик-водитель 6-го моторизованного квада
Долг
Сообщений: 344
| Как заставить всех NPC говорить с ГГ? В ...\gamedata\scripts\gulag_general.script менял Код ""use= {=is_wounded} false, {!is_squad_commander} false, {=actor_enemy} false, {=has_enemy} false, {=actor_has_weapon} false, {=dist_to_actor_le(3)} true, false\n".. "snd_on_use = {=is_wounded} nil, {=actor_enemy} nil, {!is_squad_commander} meet_use_no_talk_leader, {=actor_has_weapon} meet_use_no_weapon, {=has_enemy} meet_use_no_fight, {=dist_to_actor_le(3)} meet_use_no_default, nil\n".. на Код "use = {=is_wounded} false, {=actor_enemy} false, {=has_enemy} false, {=actor_has_weapon} false, {=dist_to_actor_le(3)} true, false\n".. "snd_on_use = {=is_wounded} nil, {=actor_enemy} nil, {=actor_has_weapon} meet_use_no_weapon, {=has_enemy} meet_use_no_fight, {=dist_to_actor_le(3)} meet_use_no_default, nil\n".. результата ноль.
По идее это заставит говорить НПС, но только тех которые на смарте и получили работу не эксклюзивную. denis2000
Стол заказов | Правки движка | O.G.S.E. 0.6.9.3
|
|
|
Эти 0 пользователя(ей) поблагодарили Earth2Space за это полезное сообщение: |
|
|
FantomICW | Дата: Сб, 09.03.2013, 15:32 | Сообщение # 156 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| Добрый день! Интересуюсь достижением "Отмеченный Зоной" (marked_by_zone). Вернее, эффектом, который оно дает. Скажите, какая функция разрешает выживать ГГ во время выброса при наличие этого ачивмента?
Сообщение отредактировал FantomICW - Сб, 09.03.2013, 16:30 |
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 10.03.2013, 01:02 | Сообщение # 157 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| FantomICW, Эффект выживания зависит от кондлиста survive в файле surge_manager.ltx секция [settings], сама функция CSurgeManager:update() в скрипте surge_manager.script конкреные строки: Код if(xr_logic.pick_section_from_condlist(get_story_object("actor"), nil, self.survive)=="true") then if(db.actor.health<=h.power) then h.power = db.actor.health - 0.05 if(h.power<0) then h.power = 0 end end end
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
FantomICW | Дата: Вс, 10.03.2013, 01:23 | Сообщение # 158 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| denis2000, а возможно ли через коллбек сделать так, чтобы при определенном одетом бронике выброс был не страшен?
Зачем через колбек? И колбэк чего? Эта задача решается в surge_manager.script. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
stalker343 | Дата: Вт, 12.03.2013, 10:46 | Сообщение # 159 |
Гражданский
Пользователи
Сообщений: 7
| Подскажите пожалуйста, как можно сделать рандомное воспроизведение звуковых файлов в скрипте (например как в НС, предупреждение при начале выброса). Извините, если это уже спрашивали.
Сообщение отредактировал stalker343 - Вт, 12.03.2013, 10:48 |
|
|
Эти 0 пользователя(ей) поблагодарили stalker343 за это полезное сообщение: |
|
|
ted80 | Дата: Вт, 12.03.2013, 16:05 | Сообщение # 160 |
Гражданский
Пользователи
Сообщений: 15
| Цитата (stalker343) Подскажите пожалуйста, как можно сделать рандомное воспроизведение звуковых файлов в скрипте
Не проверял, но должно работать прим. zvuk_1, zvuk_2, zvuk_3 путь до звука относительно папки sounds - без разширения файла самая простая функция попробуй так :
Код function new_sound() local sound_1 = [[zvuk_1]] local sound_2 = [[zvuk_2]] local sound_3 = [[zvuk_3]] local music = { sound_1,sound_2,sound_3 } local rand_music = music[math.random(#music)] local snd_obj snd_obj = xr_sound.get_safe_sound_object(rand_music) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 1, vector(), 1.0) end
как применить- где и когда - думай сам
Сообщение отредактировал ted80 - Вт, 12.03.2013, 16:18 |
|
|
Эти 0 пользователя(ей) поблагодарили ted80 за это полезное сообщение: |
|
|
avalon | Дата: Пн, 18.03.2013, 20:39 | Сообщение # 161 |
Гражданский
Пользователи
Сообщений: 7
| Всем привет! Слезно прошу Вас всех, потому что уже устал от этого – как полностью отключить Dinamic News COP 1.02 в оружейной сборке от Енота? Дело в том, что я в конфигах и скриптах почти ни когда не ковырялся, поэтому если откликнитесь, напешите подробные пути к файлам и какие значение нужно менять. И еще одна огромная просьба – как увеличить порог износа оружия (не порог починки) в сборке от Енота, что бы стволы запредельно быстро не изнашивались, хотя бы на 20-25%. За помощь каждого отблагодарю в ЛС!
|
|
|
Эти 0 пользователя(ей) поблагодарили avalon за это полезное сообщение: |
|
|
FantomICW | Дата: Пн, 18.03.2013, 21:09 | Сообщение # 162 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| avalon, насколько я знаю, надо удалить или закоментировать строки динамических новостей в скриптах - папке scripts (закокоментировать символом --) 1) в _g.script строки из функции function start_game_callback() Код --VSm --VScallback.init() --VSm 2) в bind_monster.script Цитата --VSm --VScallback.OnMutantSpawn(self.object) --VSm и Код --VSm --VScallback.OnMutantDeth(victim, who) --VSm И таким-же образом надо сделать со всеми функциями, которые относятся к дин. новостям. Кроме этих файлов затронуты bind_stalker.script, surge_manager.script, xr_motivator.script. В этих файлах ищи (Ctrl+F) по тэгу VS. Он приведет тебя к функциям мода. Повторюсь, строки в скриптах можно либо коментировать, либо просто удалять.
Сообщение отредактировал FantomICW - Пн, 18.03.2013, 21:10 |
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
lychagin0 | Дата: Вт, 02.04.2013, 12:37 | Сообщение # 163 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| Добрый день. Подскажите: -- получение всех боеспособных членов данного гулага Код function get_gulag_members(gname) local gulag_members = {} local gulag = xr_gulag.get_gulag_by_name(gname) if gulag == nil then gulag_members[1] = nil return gulag_members end for k,v in pairs(gulag.Object) do if (v == true or ( v:alive() and -- not(xr_wounded.is_heavy_wounded_by_id(k) or xr_wounded.is_psy_wounded_by_id(k)))) and gulag.Object_begin_job[k] == true then if type(v) ~= "boolean" then table.insert(gulag_members,v:id()) end end end return gulag_members end
Получаю вылет:
[cut noguest=Лог]Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ...r. - Зов Припяти\gamedata\scripts\heli_target.script:253: bad argument #1 to 'pairs' (table expected, got nil) [/cut]
Не пойму, что не так. Заранее спасибо.
Сообщение отредактировал lychagin0 - Вт, 02.04.2013, 12:41 |
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
mizabrik | Дата: Вт, 02.04.2013, 15:39 | Сообщение # 164 |
Почетный инженер «Свободы»
Свобода
Сообщений: 360
| lychagin0, gulag.Object не определен. С гулагами в скриптах не знаком, но, видимо он пуст. Советую поправить проверку: Код if gulag == nil or gulag.Object == nil then gulag_members[1] = nil return gulag_members end
Сообщение отредактировал VlAleVas - Вт, 02.04.2013, 15:49 |
|
|
Эти 0 пользователя(ей) поблагодарили mizabrik за это полезное сообщение: |
|
|
lychagin0 | Дата: Вт, 02.04.2013, 17:53 | Сообщение # 165 |
Легенда Зоны
Вольные сталкеры
Сообщений: 1303
| VlAleVas, Это я понимаю. По идее, надо бы чтобы в таблице gulag_members каждый член был в свою очередь таблицей, и вот в эту подтаблицу и заносить нужные id. Похоже, я накосячил в объявлении таблицы, но как это сделать правильно - даже вариантов нет.
|
|
|
Эти 0 пользователя(ей) поблагодарили lychagin0 за это полезное сообщение: |
|
|
|