Модостроение. Редактирование и создание скриптов
|
|
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 за это полезное сообщение: |
|
|
strelok200 | Дата: Пн, 09.06.2014, 11:34 | Сообщение # 496 |
Бывалый
Свобода
Сообщений: 126
| Приветствую, народ! Подскажите пожалуйста с чем связана такая проблема [cut=Ф-ция]function hit_hud() if db.actor.health < 0.3 and not has_alife_info("gg_hit") then alife():create("hit_dop_item", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) db.actor:eat(db.actor:object("hit_dop_item")) db.actor:give_info_portion("gg_hit") end if db.actor.health >= 0.3 and has_alife_info("gg_hit") then db.actor:disable_info_portion("gg_hit") end end [/cut] Предмет выдается, однако почему-то сразу не используется
|
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 09.06.2014, 12:33 | Сообщение # 497 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| strelok200, Может, как раз, причина в том что: "Предмет не сразу выдается", а уж потом "почему-то сразу не используется".
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
strelok200 | Дата: Пн, 09.06.2014, 13:50 | Сообщение # 498 |
Бывалый
Свобода
Сообщений: 126
| denis2000, Однако если у ГГ в инвентаре уже есть предмет, то ф-ция нормально сработает Добавлено (09.06.2014, 13:50) --------------------------------------------- Т.е. старый предмет используется и новый появится
|
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 09.06.2014, 14:25 | Сообщение # 499 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| strelok200, То есть спавнить предмет нужно в функции hit_hud(), а периодически проверять его наличие и задействовать при появлении нужно например в функции bind_stalker.update()
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
strelok200 | Дата: Пн, 09.06.2014, 19:59 | Сообщение # 500 |
Бывалый
Свобода
Сообщений: 126
| denis2000, Проверять нужно здоровье у ГГ, если коэф. ниже 30%, то сразу же выдавать и использовать предмет
Проверяйте, выдавайте и используйте - кто-же против. Только учитывайте, что между выдачей и использованием нужно время, а у вас происходит попытка использования предмета который еще не появился в инвентаре. Или можете попробовать спавнить под ноги ГГ, затем перенос в инвентарь и затем использование предмета. denis2000Добавлено (09.06.2014, 19:59) --------------------------------------------- denis2000, Спасибо, немного переделаю систему. У меня ещё такой вопрос- как рандомно выводить текстуру на худ? Рандомно должно выбираться положение на экране
|
|
|
Эти 0 пользователя(ей) поблагодарили strelok200 за это полезное сообщение: |
|
|
denis2000 | Дата: Пн, 09.06.2014, 20:05 | Сообщение # 501 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата strelok200 ( ) как рандомно выводить текстуру на худ? Объект(CustomStatic):SetWndRect(Frect():set(X1coord,Y1coord,X2coord,Y2coord)), где X1coord,Y1coord - координаты левого верхнего угла, X2coord,Y2coord - координаты правого нижнего угла элемента.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
Kosha | Дата: Чт, 19.06.2014, 22:50 | Сообщение # 502 |
Отмычка
Пользователи
Сообщений: 32
| Скажите можно ли скрипт респавна в чн сделать не по смарт_террайну а по координатам? И условием спавна сделать вход ГГ на локацию?
|
|
|
Эти 0 пользователя(ей) поблагодарили Kosha за это полезное сообщение: |
|
|
FantomICW | Дата: Чт, 19.06.2014, 22:54 | Сообщение # 503 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| Kosha, а не удобней ли было бы делать респавн через рестриктор?
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
Kosha | Дата: Чт, 19.06.2014, 22:59 | Сообщение # 504 |
Отмычка
Пользователи
Сообщений: 32
| Может и удобнее... Но я так на спортивный интерес хочу попробовать через скрипт)
Хорошо. Тогда прошу задать условие респавна. К примеру, сойдет ли респавн каждый день в 12:00? FantomICW
И условием спавна сделать вход ГГ на локацию? - писал же выше)
Сообщение отредактировал Kosha - Пт, 20.06.2014, 00:40 |
|
|
Эти 0 пользователя(ей) поблагодарили Kosha за это полезное сообщение: |
|
|
NIV | Дата: Пт, 20.06.2014, 10:59 | Сообщение # 505 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| Здравствуйте! Я опять про определение нажатия кнопок мыши. С огнестрельным оружием понятно - схема сделана еще в Солянке. А как определять нажатия кнопок мыши для холодного оружия? Ему ведь тоже патроны прописаны, но предыдущая схема, кажется, не работает.
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
|
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 20.06.2014, 11:49 | Сообщение # 506 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Цитата NIV ( ) предыдущая схема, кажется, не работает Не напомните, какая именно предыдущая схема?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
NIV | Дата: Пт, 20.06.2014, 11:54 | Сообщение # 507 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| Цитата denis2000 ( ) предыдущая схема В смысле, Соляночная.
Тогда можно попробовать использовать колбэк weapon_no_ammo, как это я делал здесь, для взрывчатки. denis2000
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
|
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
FantomICW | Дата: Пт, 20.06.2014, 11:55 | Сообщение # 508 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| FantomICW, не хочу в этом случае использовать апдейт актера, так что задействуем немного другие методы. Сначала создаем свой скрипт с таким наполнением: Код level_respawn_enabled = false
function level_respawn() if level_respawn_enabled == true and level.name() == "название_уровня" then действие_для_респавна level_respawn_enabled = false end end Дальше проводим работу в bind_stalker.script. В конец метода net_destroy добавляем: Код название_нового_скрипта.level_respawn_enabled = true В конец метода reinit (хотя, честно, я не уверен, может, стоит прописать не в reinit, а в net_spawn) пишем: Код название_нового_скрипта.level_respawn()
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
a4927860 | Дата: Сб, 21.06.2014, 10:50 | Сообщение # 509 |
Новичок
Пользователи
Сообщений: 81
| Добрый день!
Возникли следующие вопросы: 1) можно ли скриптом менять отношение нпс? (цель - сделать нпс френдли на 30 сек) 2) как правильно будет выглядеть цикл-таймер к которому могут обращаться скрипты из других функций (файлов) Нужно для проверки истечения времени для 9 функций у которых разное время окончания. [cut=Сейчас я использую проверку в мотиваторе]
Код if time_global() - self.last_update > 10000 then sr_light.check_light(object) hero_ability.ev10() self.last_update = time_global() end
но она меня абсолютно не устраивает потому как просто раз в 10 сек выполняет действие/
[/cut]
[cut noguest=PS to denis2000, ]нашел хороший звук для твоего аномального костюма Код local pos = vector() pos:mad(device().cam_pos,device().cam_dir,0.75) pos:mad(pos,device().cam_top,-0.3) pos:mad(pos,device().cam_right,0.3) sound_object([[monsters\poltergeist\tele_damage_0]]):play_at_pos(db.actor, vector():set(pos.x,pos.y,pos.z), 1, 1) [/cut]
Сообщение отредактировал a4927860 - Сб, 21.06.2014, 10:52 |
|
|
Эти 0 пользователя(ей) поблагодарили a4927860 за это полезное сообщение: |
|
|
FantomICW | Дата: Сб, 21.06.2014, 11:23 | Сообщение # 510 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| a4927860, приветствую. Во-первых, есть целый набор game_relations.script. Во-вторых, движковые функции в роде: Код local npc = get_story_object_id("sid") npc:set_relation(game_object.friend, db.actor)
|
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
|