Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
Dennis_Chikin 3 664 Опубликовано 22 Мая 2014 Поделиться Опубликовано 22 Мая 2014 Вешать на циклическую проверку в апдейте, и ждать, когда этот самый local repair_kit = db.actor:object("repair_kit_weapon") появится. Ну, чтоб не тормозило, я себе сварганил табличку функций, куда нужные добавляются, а после срабатывания - убираются. local tasks_list = {} -- имя, группа( 50, 200, 1000, 5000 ), функция -- local t50, t200, t1000, t5000 = {}, {}, {}, {} -- группы { строка для wathdog, функция } local t50n, t200n, t1000n, t5000n = 0, 0, 0, 0 -- функций в группе local t50i, t200i, t1000i, t5000i = 1, 1, 1, 1 -- текущая функция в группе local t50t, t200t, t1000t, t5000t = 0, 0, 0, 0 -- время следующего обновления local t50q, t200q, t1000q, t5000q = 50, 200, 1000, 5000 -- через сколько обновлять function task_add( tname, tgroup, f ) if ( tgroup or 200 ) == 200 then t200n = t200n + 1; table_insert( t200, { f, tname } ) elseif tgroup == 1000 then t1000n = t1000n + 1; table_insert( t1000, { f, tname } ) elseif tgroup == 5000 then t5000n = t5000n + 1; table_insert( t5000, { f, tname } ) elseif tgroup == 50 then t50n = t50n + 1; table_insert( t50, { f, tname } ) end end function task_del( tname, tgroup ) -- log( "info", "task_delete, task: [%s], gp: %s", tname, ( tgroup or "any" ) ) if tgroup or 200 == 200 then for i = 1, t200n do if t200[i][2] == tname then t200n = t200n - 1; table_remove( t200, i ); return end end end if tgroup or 1000 == 1000 then for i = 1, t1000n do if t1000[i][2] == tname then t1000n = t1000n - 1; table_remove( t1000, i ); return end end end if tgroup or 5000 == 5000 then for i = 1, t5000n do if t5000[i][2] == tname then t5000n = t5000n - 1; table_remove( t5000, i ); return end end end for i = 1, t50n do if t50[i][2] == tname then t50n = t50n - 1; table_remove( t50, i ) end end end и function actor_binder:update( delta ) ... if t200i == 0 then -- ни чем не заняты ? if global_time_ms >= t200t then t200t, t200i = global_time_ms + t200q, 1 -- kostri_update() -- используем этот цикл под что-нибудь полезное end else gp_fn = t200[t200i] -- выполняем последовательно что там еще есть if gp_fn then t200i, amk.oau_watchdog = t200i + 1, gp_fn[2]; gp_fn[1]() else t200i = 0 -- и используем остаток end end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-849514
Full Noob 1 Опубликовано 22 Мая 2014 Поделиться Опубликовано 22 Мая 2014 Блин ничего не понял , я в скриптах просто не очень шарю пока. Завтра попробую разобраться если смогу. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-849530
Full Noob 1 Опубликовано 23 Мая 2014 Поделиться Опубликовано 23 Мая 2014 (изменено) А чё за global_time_ms? Expression : fatal error Function : CScriptEngine::lua_errorFile : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cppLine : 73Description :Arguments : LUA error: ...e.r. - hardcore\gamedata\scripts\bind_stalker.script:204: attempt to perform arithmetic on global 'global_time_ms' (a nil value) Таймер вроде как работает т.к. при изменении global_time_ms на time_global() не вылетает, но тайм глобал в минутах или как? Я написал 20 и в итоге ждать пришлось, так и не дождался. А что такое global_time_ms игра получается не знает. Изменено 23 Мая 2014 пользователем Full Noob 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-849681
Dennis_Chikin 3 664 Опубликовано 23 Мая 2014 Поделиться Опубликовано 23 Мая 2014 А это чтобы 2 раза не вставать. local global_time_ms = time_global(), ну или типа того... Проверок-то 4 штуки, на 50, 200, 1000 и 5000ms, да и внутри не по разу используется. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-849684
Full Noob 1 Опубликовано 23 Мая 2014 Поделиться Опубликовано 23 Мая 2014 (изменено) У меня почемуто через тайм_глобал не работает) Я сделал так: local need_to_repair_weapon = nil local repairconditionfornew = 0local repairprocess = 0 function actor_binder:use_obj(obj)if obj:section()=="repair_kit_weapon" thenrepairconditionfornew = obj:condition()alife():create("repair_kit_weapon",db.actor:position(),db.actor:level_vertex_id(),db.actor:game_vertex_id(),db.actor:id())need_to_repair_weapon = 20repairprocess = 1endend if repairprocess==1 thenneed_to_repair_weapon = need_to_repair_weapon-1if need_to_repair_weapon<1 thenhm_repair.action_repair(repairconditionfornew)need_to_repair_weapon = 0repairprocess = 0endend Вот блин а после загрузки сохранения ремкомплект опять целый, видимо потому что не предусмотрено ему изменение состояния...как быть? Изменено 23 Мая 2014 пользователем Full Noob Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-849689
Full Noob 1 Опубликовано 24 Мая 2014 Поделиться Опубликовано 24 Мая 2014 Блин решил попробовать сделать ремкомплект оружием которое нельзя поместить в слот и который используется на K, но как его использовать на К? Видел в солянке ДМХ были как в зп так называемые ГОРЯЧИЕ КЛАВИШИ на юз аптеки консервы антирада и бинта вроде на F1-F4, вот мне также надо только с ремкомплектом. Почитал про назначение скриптам горячих кнопок там походу только через меню работать будет, да и не понятно даже что надо писать что не надо. Написал в актор_биндер.апдейт: if DIK_keys.DIK_K==1 then if db.actor:object("repair_kit_weapon") then hm_repair.action_repair() end end в итоге когда я достаю оружие у меня треск потому что сразу автоматом срабатывает ремкомплект как будто я нажимаю постоянно К. Может объясните что как писать прально ) 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-850071
naxac 2 571 Опубликовано 24 Мая 2014 Поделиться Опубликовано 24 Мая 2014 (изменено) Почитал про назначение скриптам горячих кнопок там походу только через меню работать будет, да и не понятно даже что надо писать что не надо.Не то, видать, читал. Почитай это: Назначение скриптам горячих кнопок. Часть 3.А по поводу состояния предмета - если он у тебя на классе антирада, то помимо скриптового "obj:set_condition...", нужно писать кондишен в объект через нет_пэкет, Изменено 24 Мая 2014 пользователем naxac Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-850306
Full Noob 1 Опубликовано 25 Мая 2014 Поделиться Опубликовано 25 Мая 2014 Я не умею нет-пакеты юзать, но спасибо по статье сделал работает, но вот только не мог бы ты обьяснить что из этого надо а что нет? Тут просто не очень хорошие пояснения, мне бы лишнее убрать если оно тут есть. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-850411
naxac 2 571 Опубликовано 25 Мая 2014 Поделиться Опубликовано 25 Мая 2014 @Full Noob, лишнего в статье нет ничего. Если тебе нужно только нажатия отлавливать, делай по первому варианту - и всё. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-850434
Капрал Хикс 561 Опубликовано 25 Мая 2014 Поделиться Опубликовано 25 Мая 2014 Заранее извиняюсь, если было - ткните куда копать. Как скриптово узнать, что открыта вкладка КПК "Карта"? Дано: прикручиваю к своей сборке установку своих меток на карте в КПК из адддона Shadows'а 0.6 к РМА... Так вот, всё работает, но эти кнопки установки-удаления меток рисуются поверх всех окон и вкладок КПК... Ранее уже сталкивался с подобным, решения не нашёл. Заранее спасибо всем. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-850558
Scarabay 98 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 @Капрал Хикс, вроде при открытии каждой вкладки выдается свой поршень, но вот где именно и с правками ли движка - не знаю. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-850815
Капрал Хикс 561 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 Как оказалось, всё проще, без движковых правок. http://www.amk-team.ru/forum/index.php?showtopic=7450&page=4#entry463992. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-850885
J.A.A. 2 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 Ребята, подскажите, если знаете: Как скриптово реализовать отключения звука (чтоб вообще тишина была)? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-850955
Сталкер Лом 356 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 (изменено) J.A.A., погляди в bind_stalker.script функции use_inventory_item(obj) и anabiotic_callback2() - в этих функциях при сне\приёме анабиотика включается\выключается звук. Примерно это будет выглядеть так: --Выключение звука _G.mus_vol = get_console():get_float("snd_volume_music") _G.amb_vol = get_console():get_float("snd_volume_eff") get_console():execute("snd_volume_music 0") get_console():execute("snd_volume_eff 0") --Ворачиваем всё обратно get_console():execute("snd_volume_music "..tostring(_G.mus_vol)) get_console():execute("snd_volume_eff "..tostring(_G.amb_vol)) _G.amb_vol = 0 _G.mus_vol = 0 Изменено 26 Мая 2014 пользователем Сталкер Лом Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-850972
Full Noob 1 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 Вот у меня тут вопросик опять по ремкомплекту возник: как отрисовать на худе что-либо? Мне нужно отрисовать на худе иконку ремкомплекта и его состояние(если он имеется в наличии). Возомжно ли это? Просто он у меня будет спрятан в слоте 4 и посмотреть состояние можно будет только в ящике т.к по непонятной причине если самому запихнуть предмет из инвентаря в слот 4 то игра вылетает без лога, что не даёт просто возвращать его в рюкзак на юзе. Из за этого и пришлось ему юз на K прикручивать. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-851042
Капрал Хикс 561 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 Рано я возрадовался... Все инфопоршни вкладок в КПК, кроме ui_pda, не работают. Похоже, без движковых правок тут всё же не обойтись. А жаль... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-851080
Dennis_Chikin 3 664 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 Поставить лог на actor_binder:info_callback(), и посмотреть, что реально когда выдается. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-851084
Капрал Хикс 561 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 Проверил через мобилу модмейкера от Singapur22 выдачу нужного мне поршня ui_pda_map_global - не выдаётся он. ui_pda - выдаётся исправно, тот нет. P.S. В Shadows Addon кнопки меток кстати тоже поверх всех вкладок и окон висят. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-851165
k01jan 816 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 (изменено) ! Cannot find saved game ~ z_mod: Инициализация z_uprising... ! Cannot find saved game ~ z_uprising: передали предустановки.! Cannot find saved game ~ z_mod:on_item_take: поимели detector_simple! Cannot find saved game ~ z_mod:on_item_take: поимели device_torch! Cannot find saved game ~ z_mod:on_item_take: поимели novice_outfit! Cannot find saved game ~ z_mod:on_item_take: поимели wpn_binoc! Cannot find saved game ~ z_mod:on_item_take: поимели device_pda! Cannot find saved game ~ z_uprising: ЛОГирование ВКЛючено.! Cannot find saved game ~ z_uprising: ОК!! Cannot find saved game ~ z_mod:on_info: инфопорш esc_kill_gunslinger! Cannot find saved game ~ z_mod:on_info: инфопорш storyline_actor_start! Cannot find saved game ~ z_mod:on_info: инфопорш global_dialogs! Cannot find saved game ~ z_mod:on_info: инфопорш level_changer_icons! Cannot find saved game ~ z_mod:on_item_take: поимели boltIntro start 8633* MEMORY USAGE: 311336 K! Cannot find saved game ~ z_mod:on_info: инфопорш esc_trader_hello_played! Cannot find saved game ~ z_mod:on_info: инфопорш ui_talk! Cannot find saved game ~ z_mod:on_info: инфопорш ui_trade_hide! Cannot find saved game ~ z_mod:on_info: инфопорш esc_trader_experienced! Cannot find saved game ~ z_mod:on_info: инфопорш esc_trader_tutorial_chosen! Cannot find saved game ~ z_mod:on_info: инфопорш esc_trader_can_leave! Cannot find saved game ~ z_mod:on_info: инфопорш tutorial_wounded_start! Cannot find saved game ~ z_mod:on_info: инфопорш ui_talk_hide! Cannot find saved game ~ z_mod:on_info: инфопорш ui_trade! Cannot find saved game ~ z_mod:on_info: инфопорш ui_talk! Cannot find saved game ~ z_mod:on_info: инфопорш ui_trade_hide! Cannot find saved game ~ z_mod:on_info: инфопорш ui_car_body! Cannot find saved game ~ z_mod:on_info: инфопорш ui_car_body_hide- Disconnect! Cannot find saved game ~ z_mod:on_item_drop: дропнули bolt! Cannot find saved game ~ z_mod:on_item_drop: дропнули device_pda! Cannot find saved game ~ z_mod:on_item_drop: дропнули wpn_binoc! Cannot find saved game ~ z_mod:on_item_drop: дропнули novice_outfit! Cannot find saved game ~ z_mod:on_item_drop: дропнули device_torch! Cannot find saved game ~ z_mod:on_item_drop: дропнули detector_simple- Destroying level + ! Cannot find saved game ~ z_mod:on_info: инфопорш ui_pda ! Cannot find saved game ~ z_mod:on_info: инфопорш ui_pda_events ! Cannot find saved game ~ z_mod:on_info: инфопорш ui_pda_contacts ! Cannot find saved game ~ z_mod:on_info: инфопорш ui_pda_ranking ! Cannot find saved game ~ z_mod:on_info: инфопорш ui_pda_actor_info ! Cannot find saved game ~ z_mod:on_info: инфопорш ui_pda_encyclopedia ! Cannot find saved game ~ z_mod:on_info: инфопорш ui_pda_hide @Капрал Хикс, кстати, да. Через раз появляются. ! Cannot find saved game ~ z_mod:on_info: инфопорш ui_pda_map_local ещё.Похоже, или только первый раз срабатывают. Или - по времени. Но явно - не получится нормально отслеживать и использовать. Изменено 26 Мая 2014 пользователем k01jan Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-851166
abramcumner 1 229 Опубликовано 26 Мая 2014 Поделиться Опубликовано 26 Мая 2014 Похоже, или только первый раз срабатывают. Или - по времени. Но явно - не получится нормально отслеживать и использовать.Выдается только в первый раз потому, что в последующие разы она уже есть у ГГ. Можно при получении инфопорции дизейблить ее, тогда она будет выдаваться и во второй раз, и в третий. Или в декларацию инфопорций прописать дизейбл остальных. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/280/#findComment-851179
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти