Модостроение. Редактирование и создание скриптов
|
|
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 за это полезное сообщение: |
|
|
tema796 | Дата: Пт, 14.10.2011, 16:50 | Сообщение # 16 |
Гражданский
Пользователи
Сообщений: 20
| XOBAH, нет Добавлено (14.10.2011, 16:50) --------------------------------------------- надо в определенном действие
|
|
|
Эти 0 пользователя(ей) поблагодарили tema796 за это полезное сообщение: |
|
|
SpiritWolf | Дата: Ср, 26.10.2011, 14:11 | Сообщение # 17 |
Отмычка
Пользователи
Сообщений: 30
| Как сделать вывод динамических сообщений на экран? PS: В ЗП
Сообщение отредактировал SpiritWolf - Ср, 26.10.2011, 16:01 |
|
|
Эти 0 пользователя(ей) поблагодарили SpiritWolf за это полезное сообщение: |
|
|
denis2000 | Дата: Ср, 26.10.2011, 16:23 | Сообщение # 18 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| SpiritWolf, Простенький скрипт: [cut]В файл xr_motivator.script в функцию motivator_binder:death_callback после строк: Code function motivator_binder:death_callback(victim, who) добавить строки:Code --Передача СМС о смерти сталкеров monster_classes = { [clsid.bloodsucker_s] = "Кровосос", [clsid.boar_s] = "Кабан", [clsid.dog_s] = "Собака", [clsid.flesh_s] = "Плоть", [clsid.pseudodog_s] = "Псевдособака", [clsid.poltergeist_s] = "Полтергейтс", [clsid.gigant_s] = "ПсевдоГигант", [clsid.zombie_s] = "Зомби", [clsid.snork_s] = "Снорк", [clsid.psy_dog_s] = "Пси собака", [clsid.psy_dog_phantom_s] = "Призрак псевдособаки", [clsid.controller_s] = "Контролёр", [clsid.tushkano_s] = "Тушканчик", } local m_game_vertex = who:game_vertex_id() local lvert = game_graph():vertex(m_game_vertex) local lid = lvert:level_id() local mlevel = alife():level_name(lid) local m_s_level = mlevel local victim_name = victim:character_name() local killer_name = who:character_name() local victim_comm = victim:character_community() local killer_comm = who:character_community() local post_message_prob = 0.8 if killer_comm=="monster" then local m_clsid = get_clsid(who) killer_name = monster_classes[m_clsid] end if killer_name==victim_name then killer_name="Выброс" killer_comm="Зона" end if killer_comm~=nil then local m_text_kill_string=killer_name.." ("..game.translate_string(killer_comm).."), Лищил жизни "..victim_name.."("..game.translate_string(victim_comm).."). Територия: "..game.translate_string(m_s_level) local news_text = "%c[255,160,160,160]".."Новости:".."\\n".."%c[default]"..m_text_kill_string local news_caption = game.translate_string("st_tip") local texture = "ui_iconsTotal_weapons" db.actor:give_game_news(news_caption, news_text, texture, 0, 15*1000) play_snd_at_actor([[device\pda\pda_news]]) end Также в этот же файл или в скрипт _g.script нужно добавить функцию Code function play_snd_at_actor(sound,count1,count2) local snd_souce if count1==nil or count2==nil then snd_souce=sound_object(sound) snd_souce:play(db.actor,0,sound_object.s2d) elseif count1~=nil and count2~=nil then local rnd_snd=math.random(count1,count2) snd_souce=sound_object(sound..rnd_snd) snd_souce:play(db.actor,0,sound_object.s2d) end end [/cut] Инструкцию обновил. Файл для примера.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
SpiritWolf | Дата: Ср, 26.10.2011, 17:04 | Сообщение # 19 |
Отмычка
Пользователи
Сообщений: 30
| Expression : !m_error_code Function : raii_guard::~raii_guard File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp Line : 748 Description : ....l.k.e.r. - cop\gamedata\scripts\bind_stalker.script:2: attempt to call field 'AddToMotivator' (a nil value)
Что-то сделал не так. У меня по инструкции все работает. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили SpiritWolf за это полезное сообщение: |
|
|
tema796 | Дата: Пн, 31.10.2011, 16:46 | Сообщение # 20 |
Гражданский
Пользователи
Сообщений: 20
| привет ребят у меня вопрос как восстановить старые анимации? сами анимации есть а что в скриптах писать?это надо для зов припяти
1. Для начала научиться читать правила! Устное предупреждение П.4.1 2. Для начала посмотреть на Инсайде XOBAH
Добавлено (31.10.2011, 16:33) --------------------------------------------- забыл дописать анимации нпс
А ссылочку смотрели? Там как раз анимация НПС!!! XOBAH
Добавлено (31.10.2011, 16:46) --------------------------------------------- там для тч
Они не сильно отличаются. Даже так: У них почти нет различий. А переписывать весь урок ради Вас, чтобы исправить несколько отличий, которые легко самому определить, вряд ли кто будет, может быть позже. XOBAH
Сообщение отредактировал tema796 - Пн, 31.10.2011, 16:33 |
|
|
Эти 0 пользователя(ей) поблагодарили tema796 за это полезное сообщение: |
|
|
Ааз | Дата: Ср, 02.11.2011, 21:21 | Сообщение # 21 |
Хозяин Зоны
Зомби
| Вопрос такой: возможно ли выполнить через скрипт удаления оружия, которое выпадает из рук НПС при смерти, если погибший находился в момент гибели в онлайне? Просто я решил выдать товарищам на локациях оружие немного более мощное, чем обычно. Так вот, чтобы ГГ не ходил уже на Кордоне со СПАСом, нужно, чтобы оружие при смерти НПС с вероятностью в 90-95% убиралось. Иначе неминуемо наступит нарушение баланса.
Это наверняка приведет к вылетам. Поэтому лучше увеличить износ выпавшего оружия и ввсти ограничение на уровень износа при котором можно ствол отремонтировать. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили Ааз за это полезное сообщение: |
|
|
Xecator | Дата: Вс, 27.11.2011, 18:58 | Сообщение # 22 |
Отмычка
Пользователи
Сообщений: 31
| Поставил Geonezis Addon, там встроенные динамические новости. Адаптировал AtmosFear 3, и теперь во время игры постоянно выскакивают сообщения: "неучтенная секция погоды". Как вообще убрать сообщения о погоде, в каком файле и какие строки?
|
|
|
Эти 0 пользователя(ей) поблагодарили Xecator за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 27.11.2011, 22:01 | Сообщение # 23 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Expl0id, Добавь неучтенную секцию погоды в скрипт динамических новостей по аналогии.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Xecator | Дата: Вс, 27.11.2011, 23:24 | Сообщение # 24 |
Отмычка
Пользователи
Сообщений: 31
| Да я вроде добавил, изменил названия секций погоды старые на атмосферовские, но при игре все равно вылазит "неучтенка". Наверное я не оттуда брал названия секций atmosfear. В каком точно они файле лежат?
|
|
|
Эти 0 пользователя(ей) поблагодарили Xecator за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 28.11.2011, 00:51 | Сообщение # 25 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Expl0id, Смотри какая именно секция не учтена и добавляй ее.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Xecator | Дата: Пн, 28.11.2011, 10:09 | Сообщение # 26 |
Отмычка
Пользователи
Сообщений: 31
| Да я говорю же, не знаю из какого файла эти секции брать, там их полно, в одном потенциальных секций 6, а в другом штук 20. Как файл называется, dynamic_weather_graphs.ltx или suns.ltx? Или вообще другое?
|
|
|
Эти 0 пользователя(ей) поблагодарили Xecator за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 28.11.2011, 15:44 | Сообщение # 27 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Expl0id, Вот поэтому я тебе и говорю выведи в сообщении имя неучтенной секции! [cut]В файле news.script в функции weather_news(), вместо Code local news_text = "неучтенная секция погоды" сделай Code local news_text = "неучтенная секция погоды="..weather_section [/cut] Читай сообщения в них будет имя неучтенных секций.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Xecator | Дата: Пн, 28.11.2011, 17:42 | Сообщение # 28 |
Отмычка
Пользователи
Сообщений: 31
| Спасибо за совет, все получилось. Указал мне секцию af3_slight_clear_0. Нашел ее папку, а там... Там всего 110 секций! Там идет так: ясная_0, ясная_1, ясная_2, также и с туманными и т.д.. Всего 110 секций. Я понимаю что надо для всех ясных в news.script прописать одни и те же сообщения, только как это будет в скрипте: Code if weather_section == "af3_slight_clear_0" or "af3_slight_clear_1" or "af3_slight_clear_2" or ... then или как?
|
|
|
Эти 0 пользователя(ей) поблагодарили Xecator за это полезное сообщение: |
|
|
XOBAH | Дата: Пн, 28.11.2011, 18:24 | Сообщение # 29 |
Техник Вольных
Вольные сталкеры
Сообщений: 912
| Expl0id, В SGM 2.0 (да и в SGM 1.7, но с разницей) есть глобальная функция find_in_string(where,what), которая ищет необходимый текст в строке, использовать так (с представленными Вами секциями): if find_in_string(weather_section, "af3_slight_clear_" then -- Удовлетворит все Ваши секции
|
|
|
Эти 0 пользователя(ей) поблагодарили XOBAH за это полезное сообщение: |
|
|
Xecator | Дата: Вт, 29.11.2011, 18:17 | Сообщение # 30 |
Отмычка
Пользователи
Сообщений: 31
| Ничего себе, какая крутая функция... Да с ней получилось все 110 секций в 6 запихнуть! Спасибо за совет!
Добавлено (29.11.2011, 18:17) --------------------------------------------- Да, и вот еще. Все секции запихнул в news.script, все работает, только есть один момент... В общем, на секцию погоды есть такие сообщения: "Солнышко", "солнечно" и типа того. Ночью, в 1 час на погодную секцию ...clear... приходит сообщение - "Солнышко...". Так вот, как в скрипт новостей в разделе погоды прописать, чтобы он проверял ночной интервал(по времени), и если это ночь выводил сообщения типа "Ночь","Темно"?
Вообщето разные секции погоды для разного времени суток. Ты рано радовался что все в одну проверку запихнул. Теперь придется обратно дробить условие. denis2000
|
|
|
Эти 0 пользователя(ей) поблагодарили Xecator за это полезное сообщение: |
|
|
|