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/
amik 256 Опубликовано 22 Января 2011 Поделиться Опубликовано 22 Января 2011 Люди может кто написать шпору по добавлению секций в acdc.pl? Пролазил две темы в поиске ответа на свой вопрос, нечего по сути не нашел. Ну собственно и вопрос задам. Как и куда прописать новую секцию аномалии (допустим zone_teleport_ххх) в acdc.pl чтобы чистый acdc_ТЧ его собрал? Искал подобные секции там нечего не увидел... Спасибо. Добавлено через 71 мин.: У меня acdc_x1 #author: bardak #this modified version by xiani Там секций типа ее:zone_mincer => 'se_zone_anom нету... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558326
Bombastik 0 Опубликовано 22 Января 2011 Поделиться Опубликовано 22 Января 2011 Доброго времени суток. Такая картина: Адаптировал Blowout_Mod_1.0 Под пак локаций на версию 1,0004. Решил сверху прикрутить Stalkers_are_not_blind_0.99, но вылетает с логом: FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...s\s.t.a.l.k.e.r\gamedata\scripts\bind_stalker.script:2: attempt to index global 'xr_motivator' (a nil value) Кто знает, что это такое, и как это лечиццо? Заранее благодарен. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558421
TRAMP14 1 Опубликовано 22 Января 2011 Поделиться Опубликовано 22 Января 2011 2 строку bind_stalker пожалуйста В файле xr_motivator изменения какие либо проводились? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558431
Bombastik 0 Опубликовано 22 Января 2011 Поделиться Опубликовано 22 Января 2011 function init (obj) xr_motivator.AddToMotivator(obj) end (первые 3 строки) xr_motivator дописывалось: ... --' Для зомбированных чуваков говорим что аномалий не существует -- if self.object:character_community() == "zombied" then local manager = self.object:motivation_action_manager() manager:remove_evaluator (stalker_ids.property_anomaly) manager:add_evaluator (stalker_ids.property_anomaly, property_evaluator_const(false)) if outfit_evaluator then manager:add_evaluator(1101, property_evaluator_const(false)) end else if ogsm_hideout then local manager = self.object:motivation_action_manager() manager:add_evaluator(ogsm_hideout.property_blowout, property_evaluator_const(false)) ... ... if tonumber(_G.main_menu.get_main_menu():GetGSVer()) <= 1.0004 then dialog_manager.load(self.object, reader) else self.npc_script_version = alife():object(self.object:id()).script_version dialog_manager.load(self.object, reader, self.npc_script_version) end dialog_manager.load(self.object, reader) trade_manager.load(self.object, reader) end ... ... -- Эвалюаторы, которые имеют высший приоритет, и, соответственно, перебивают остальные скрипты собой function addCommonPrecondition(action) --action:add_precondition (world_property(xr_evaluators_id.reaction,false)) if ogsm_hideout then action:add_precondition(world_property(ogsm_hideout.property_blowout, false)) action:add_precondition(world_property(ogsm_hideout.property_hideout_lost, false)) action:add_precondition(world_property(ogsm_hideout.property_inhide, false)) end action:add_precondition (world_property(xr_evaluators_id.stohe_meet_base + 1,false)) action:add_precondition (world_property(xr_evaluators_id.sidor_wounded_base + 0, false)) action:add_precondition (world_property(xr_evaluators_id.chugai_heli_hunter_base, false)) action:add_precondition (world_property(xr_evaluators_id.abuse_base, false)) if anomaly_evader then action:add_precondition (world_property(1099,false)) end if outfit_evaluator then action:add_precondition (world_property(1101,false)) -- outfit evaluator end end Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558455
Министр 4 Опубликовано 22 Января 2011 Поделиться Опубликовано 22 Января 2011 (изменено) TRAMP14, мало того, что ф-ия "убога", так и причем не один из указанных аргументов не используется, следовательно в ней они не нужны. function bandits_die() return has_alife_info("esc_kill_bandits_quest_kill") and not has_alife_info("esc_kill_bandits_noquest_kill") end Изменено 22 Января 2011 пользователем Министр Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558463
AKKK1 6 Опубликовано 22 Января 2011 Поделиться Опубликовано 22 Января 2011 (изменено) Добавлю про check_fighting Использование функции check_fighting сама функция находится в файле \gamedata\scripts\xr_conditions.script вот она -- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка function check_fighting(actor, npc, p) local enemy = db.storage[npc:id()].enemy local sid if enemy and enemy:alive() then sid = enemy:story_id() for i, v in pairs(p) do --printf("_bp: %s.check_fighting(%d)", npc:name(), v) if type(v) == 'number' and sid == v then --printf("TRUE") return true end end end --printf("_bp: check_fighting() = false") return false end Вызывается из логики НПС секция [combat_ignore] пример логика бандитов АТП (игнорируюе Шустрого) файл gamedata\config\misc\gulag_escape.ltx ;------------------------------------------------------------------------------------------------- ;-- ESCAPE FACTORY BANDITS ;------------------------------------------------------------------------------------------------- [logic@esc_fabrika_bandit_walker1] active = walker1@esc_fabrika_bandit combat_ignore = combat_ignore [walker1@esc_fabrika_bandit] path_walk = day_walk1 path_look = day_look1 def_state_moving = raid def_state_moving_fire = raid_fire def_state_campering = threat def_state_campering_fire = threat_fire combat_ignore_cond = {=check_fighting(004)} игнорируют НПС с story_id = 4 004 это story_id Шустрого вот его секция в алл спавне cse_abstract properties section_name = stalker name = esc_shustryi position = 118.689079284668,-7.4942798614502,7.65357303619385 direction = 0,0,0 ; cse_alife_trader_abstract properties money = 5000 character_profile = esc_shustryi ; cse_alife_object properties game_vertex_id = 118 distance = 8.39999961853027 level_vertex_id = 422012 object_flags = 0xffffffbf custom_data = <<END [smart_terrains] esc_lager = true END story_id = 4 ; cse_visual properties visual_name = actors\novice\green_stalker_1 ; cse_alife_creature_abstract properties g_team = 0 g_squad = 0 g_group = 0 health = 2 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 2 upd:timestamp = 0x69206669 upd:creature_flags = 0x6e upd:position = 118.689079284668,-7.4942798614502,7.65357303619385 upd:o_model = 0 upd:o_torso = 0,0,0 upd:g_team = 0 upd:g_squad = 0 upd:g_group = 0 ; cse_alife_monster_abstract properties upd:next_game_vertex_id = 65535 upd:prev_game_vertex_id = 65535 upd:distance_from_point = 0 upd:distance_to_point = 0 ; cse_alife_human_abstract properties predicate5 = 1,1,0,0,2 predicate4 = 1,1,0,0 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties Игнорируемых НПС может быть несколько пример часть логики стукача на арм складах [5281] ; cse_abstract properties section_name = stalker name = mil_freedom_member0001 position = -178.503997802734,-16.9659557342529,352.31005859375 direction = 0,0,0 ; cse_alife_trader_abstract properties money = 5000 character_profile = mil_Svoboda_stukach ; cse_alife_object properties game_vertex_id = 1828 distance = 24.5 level_vertex_id = 144846 object_flags = 0xfffff7ff custom_data = <<END [logic] active = walker0 on_death = death combat_ignore = combat_ignore [walker0] path_walk = mil_freedom_courier_wait_path path_look = mil_freedom_courier_wait_look on_actor_dist_le = 12 | %=killactor% on_info = {+mil_actor_in_khutor_zone} walker1 [walker1] path_walk = mil_freedom_stukach_walk4 path_look = mil_freedom_stukach_look4 on_actor_dist_le_nvis = 12 | %=killactor% on_signal = arrive | remark1 combat_ignore_cond = {=check_fighting(712:713:714:719)} false [remark1] no_rotate = true no_move = true anim = wait_rac snd = mil_pavlik_to_ara on_signal = sound_end | %+mil_courier_call% remark2 on_actor_dist_le_nvis = 12 | %=killactor% target = mil_courier_look_point, 0 combat_ignore_cond = {=check_fighting(712:713:714:719)} false [remark2] anim = guard on_info = {+mil_ara_end} kamp1 on_actor_dist_le_nvis = 12 | %=killactor% target = mil_courier_look_point, 0 combat_ignore_cond = {=check_fighting(712:713:714:719)} false [kamp1] center_point = mil_freedom_khutor_center meet_enable = true meet_dialog = mil_dolg_relax_dialog danger = danger path_walk = mil_freedom_khutor_center_task radius = 3 on_actor_dist_le_nvis = 12 | %=killactor% combat_ignore_cond = {=check_fighting(712:713:714:719)} false Изменено 22 Января 2011 пользователем kokkai Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558471
TRAMP14 1 Опубликовано 23 Января 2011 Поделиться Опубликовано 23 Января 2011 Министр это функция из скриптов игры. Ещё хотел спросить по теме: что именно делает строка return? В справочнике написано что она "возвращает" а что именно возвращает? И как ето помогает? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558547
IQDDD 5 Опубликовано 23 Января 2011 Поделиться Опубликовано 23 Января 2011 return без явного объявления возвращает nil, что в условий эквивалентно логической лжи. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558651
Virus_450 0 Опубликовано 23 Января 2011 Поделиться Опубликовано 23 Января 2011 Кто может подсказать, как заспаунить НПС или предмет скриптом, но чтоб был game_story_id. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558676
AKKK1 6 Опубликовано 23 Января 2011 Поделиться Опубликовано 23 Января 2011 (изменено) Для АМК. Спавн с выдачей SID_а: function spawn_mervin22() local obj=alife():create("esc_mervin22",vector():set(9.693,56.273,48.022),5205,2417) local params=amk.read_stalker_params(obj) params.custom="[logic]ncfg = scriptsnewesc_mervin22.ltx" params.sid=30139 amk.write_stalker_params(params,obj) end Для контроля назначнных SID_ов надо зарегистрировать Вашего НПС в файле: game_story_ids.ltx (gamedataconfig) по аналогии с остальными. Номер sid надо брать, чтобы он не дублировался с существующими, лучше назначить с "запасом", напрмер, как в примере, иначе будут вылеты с указанием на "дублирование сида". Удаление НПС по SID_у: function del_mervin22() local sim = alife() local se_obj = sim:story_object(30139) if se_obj then sim:release(se_obj, true) end end Автор не я взято с СП Изменено 23 Января 2011 пользователем Министр Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558692
ColR_iT 171 Опубликовано 23 Января 2011 Поделиться Опубликовано 23 Января 2011 (изменено) AKKK1, а без помощи функций АМК можно продемонстрировать? Уж очень было бы полезным... // Из ф-ий АМК там используется только разбор нет-пакета непися. Эта штука достаточна "объемная", лучше самому в скриптах АМК посмотреть. Министр. Изменено 23 Января 2011 пользователем Министр Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558697
Malandrinus 615 Опубликовано 23 Января 2011 Поделиться Опубликовано 23 Января 2011 IQDDD, return без явного объявления возвращает nil, что в условий эквивалентно логической лжи. Это почти так. Иногда встречал вылеты в такой ситуации и смысл сообщения был в том, что "значения нет вообще", а не то, что оно равно nil. В частности, пусть есть функция fun1, принимающая bool. Пусть есть вторая fun2, просто с return. У меня иногда был вылет в такой ситуации: fun1(fun2()) Особенно, если fun1 - движковая, а не скриптовая. В общем, если нужно вернуть логическое значение - верните nil или false, но не "ничего". AKKK1, Для АМК. Спавн с выдачей SID_а: Есть только одна проблема. При этом sid не регистрируется в игре, т.е. он назначен объекту, а поиск по нему делать не выйдет (ну и соответственно в логике не будет работать). Причём, вроде даже не поможет вывести объект в оффлайн, поскольку регистрация происходит при создании/загрузке серверного объекта. Т.е. придётся ждать смены уровня или сохранения/загрузки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-558934
Nazgool 250 Опубликовано 24 Января 2011 Поделиться Опубликовано 24 Января 2011 (изменено) ...смысл сообщения был в том, что "значения нет вообще", а не то, что оно равно nil...иногда был вылет в такой ситуации: fun1(fun2()) О, вот и хороший пример. Спасибо. Р.S. При вскрытии luа5.1.dll в сообщениях об ошибках используется словосочитание "no value". Что-то не хватило ума его проэмулировать. Теперь могу :-) ...если нужно вернуть логическое значение - верните nil или false, но не "ничего". И не только в движке встречаются "непонятки". Я не раз попадал в подобные ситуации и в "чистом" Luа. Как раз замена значений, например, объявленных локальных переменных на конкретное значение , прекращало серию "непонятных" ошибок. Так что хочу подтвердить - (конечно ситуация ситуации рознь, но...) лучше используйте какое-либо значение. Изменено 24 Января 2011 пользователем Gun12 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-559019
gruber 2 481 Опубликовано 24 Января 2011 Поделиться Опубликовано 24 Января 2011 Иногда просматривая примеры логики из ресурсов игры,сталкиваюсь с командами и оверрайдами ,не описаными ни в одном справочнике.Ниже я сделал подборку таких примеров.Если кто то сможет дать пояснения по каким либо строкам или хотя бы предположить их назначение,буду очень благодарен,да и многим думаю пригодится hp_state = 0|wounded_heavy@help_heavy hp_state_see = 0|wounded_heavy@help_heavy hp_victim = 0|nil hp_fight = 0|false hp_cover = 0|false psy_state = 0 [danger@val_escort_captive] ignore_types = corpse какие типы можно еще сюда включить ignore_distance_sound = 2 ignore_distance_corpse = 0 -не противоречит ли это первой строке danger_inertion_time_hit = 1000 danger_inertion_time_sound = 500 danger_inertion_time_ricochet = 1000 no_retreat = true radius = 1 [follower@val_escort_captive_go_to_nap1] stub_for_corpse = true dont_change_job = true snd = speech -этот тип стоит у всех участников сцены ,но фразы они произносят разные on_actor_dist_le = 3 | mob_camp2 %=monster_berserk% -- интересует эффект в знаках процента on_info = nil %=disable_combat_handler% -так же on_info2 = {=hitted_by(412)} nil %=hit_npc(412:bip01_head:400:2700)% -сдесь так же ,особенно последнее условие combat_ignore_keep_when_attacked = true [sr_idle] on_actor_inside = sr_timer@1 %=play_snd(characters_voice\scenario\radar\rad_hat_1)% -можно ли прописывать путь к файлу звука непосредственно из логики не прописывая его в соунд теме скрипт и в скрипт саунд team = escape_attack_team -что дает присвоение тима reactions = ignore ---что дает эта команда no_rotate = true enemy_idle = 60000 radius = 20 show_spot = false leader = 720 stub_for_corpse = true distance = 0.5 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-559022
Якут 0 Опубликовано 24 Января 2011 Поделиться Опубликовано 24 Января 2011 (изменено) написал логику НПС в ЗП, но если НПС начинает обыскивать трупы он не возвращается на место а остаеться на месте где труп. active = walker@zaton_layr_0001 danger = danger_ignore@zaton_layr_0001 [danger_ignore@zaton_layr_0001] ignore_distance = 5 [walker@zaton_layr_0001] def_state_standing = ward_noweap path_walk = zaton_otomstit_stalker_01_way path_look = zaton_otomstit_stalker_01_look invulnerable = true meet = meet@zaton_layr_0001 on_info = {+info_zaton_layr_0001} walker@zaton_layr_000101 [walker@zaton_layr_000101] invulnerable = true path_walk = zaton_otomstit_stalker_02_way on_signal = path_end | walker@zaton_layr_00011 %+zaton_layr_0001_kvest% [walker@zaton_layr_00011] invulnerable = true path_walk = zaton_otomstit_stalker_03_way on_info = {+info_zaton_layr_tryp_1} remark@zaton_layr_00111 [remark@zaton_layr_00111] anim = ward_noweap path_walk = zaton_otomstit_stalker_03_way target = story | actor no_move = true meet = meet@zaton_layr_0001 [meet@zaton_layr_0001] close_anim = nil close_victim = nil far_anim = nil far_victim = nil close_distance = 0 far_distance = 0 close_snd_distance = 3 abuse = false use = {=actor_enemy} false, true allow_break = false meet_on_talking = false meet_on_talking = false Можно ли как-то запретить этому НПС обыскивать трупы Изменено 24 Января 2011 пользователем Якут Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-559074
AKKK1 6 Опубликовано 24 Января 2011 Поделиться Опубликовано 24 Января 2011 gruber Спасибо мне тоже интересно что все это значит . Давайте попробуем разобраться. on_actor_dist_le = 3 | mob_camp2 %=monster_berserk% -- интересует эффект в знаках процента насколько я понимаю при дистанции = 3 вкючается схема mob_camp2 с эфектом %=monster_berserk% файл хр_эфект.скрипт вот функция function monster_berserk(actor, npc) npc:berserk() end что это значит ? может berserk некий параметр поведения? on_info = nil %=disable_combat_handler% сдесь более менее понятно -- Вызов этой функции отключит обработчик [combat] боя для персонажа. -- Используется в случаях, когда все необходимые действия, такие как переключение на другую секцию, -- уже выполнены, и повторно выполнять их во время боя нельзя (а условия секции [combat] проверяются на каждом -- апдейте, когда персонаж в бою, если, конечно, не отключены вызовом этой функции). function disable_combat_handler(actor, npc) if db.storage[npc:id()].combat then db.storage[npc:id()].combat.enabled = false end if db.storage[npc:id()].mob_combat then db.storage[npc:id()].mob_combat.enabled = false end end -- Вызов этой функции отключит обработчик [combat_ignore] перехвата боя для персонажа. function disable_combat_ignore_handler(actor, npc) if db.storage[npc:id()].combat_ignore then db.storage[npc:id()].combat_ignore.enabled = false end end on_info2 = {=hitted_by(412)} nil %=hit_npc(412:bip01_head:400:2700)% Функция function hit_npc(actor, npc, p) тоже более менее понятно (если кто более досконально разберет буду только рад) local h = hit() local rev = p[5] and p[5] == 'true' h.draftsman = npc h.type = hit.wound if type(p[1]) == 'number' then local hitter = level_object_by_sid(p[1]) if not hitter then return end if rev then h.draftsman = hitter h.direction = hitter:position():sub(npc:position()) else h.direction = npc:position():sub(hitter:position()) end else if rev then h.draftsman = nil h.direction = npc:position():sub(patrol(p[1]):point(0)) else h.direction = patrol(p[1]):point(0):sub(npc:position()) end end h:bone(p[2]) h.power = p[3] h.impulse = p[4] --printf("HIT EFFECT: (%s, %s,%d,%d) health(%s)", npc:name(), p[2], h.power, h.impulse, npc.health) npc:hit(h) end --[[ Дать обьекту, заданному story_id, хит. параметры: actor, npc, p[sid,bone,power,impulse,hit_src=npc:position()] 1. sid - story_id обьекта, по которому наносится хит. 2. bone - строка. Имя кости, по которой наносится удар. 3. power - сила удара 4. impulse - импульс 5. hit_src - если число, то рассматривается как story_id обьекта, со стороны которого наносится хит (он же является и инициатором хита), иначе это точка (waypoint), из которой по объекту наносится хит. Если не задано, то берется позиция обьекта, из которого была вызвана данная функция.--]] [sr_idle] on_actor_inside = sr_timer@1 %=play_snd(characters_voice\scenario\radar\rad_hat_1)% -можно ли прописывать путь к файлу звука непосредственно из логики не прописывая его в соунд теме скрипт и в скрипт саунд функция так же хотеось увидеть полный разбор от знаюших. -- играть звук в голове актёра function play_snd(actor, npc, p) if p[1] then local snd_obj = xr_sound.get_safe_sound_object(p[1]) --snd_obj:play(actor, p[2] or 0, sound_object.s2d) snd_obj:play_no_feedback(actor, sound_object.s2d, p[2] or 0, vector(), 1.0) end end -- играть звук от указанного объекта function play_snd_from_obj(actor, npc, p) if p[1] and p[2] then local snd_obj = xr_sound.get_safe_sound_object(p[2]) local obj = level_object_by_sid(p[1]) if obj ~= nil then printf("can't find object with story id %s", tostring(p[1])) -- snd_obj:play_at_pos(obj, obj:position(), sound_object.s3d) snd_obj:play_no_feedback(obj, sound_object.s3d, 0, obj:position(), 1.0) en end end -- играть звук от указанного объекта function play_snd_now(actor, npc, p) xr_sound.set_sound_play(npc, p[1]) end это все что я хоть немного понимаю может более знаюшие помогут разобраться полностью. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-559142
Nazgool 250 Опубликовано 24 Января 2011 Поделиться Опубликовано 24 Января 2011 (изменено) Иногда просматривая примеры логики из ресурсов игры,сталкиваюсь с командами и оверрайдами ,не описаными ни в одном справочнике Там много чего есть непонятного. Когда-то написал скрипт (никаких великих целей не ставил, поэтому потратил на него минут ... несколько), которым просмотрел папки config\scripts и config\misk и выбрал название всех секций и все записи, используемые в каждой из секций. До этого я считал, что знаю достаточно о логике :-) All_sections_SoC Правда писал специально для SciTE, поэтому на расширение не обращайте внимания Да и на значения тоже. Мне главнее были ключи. Изменено 24 Января 2011 пользователем Gun12 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-559219
antreg 179 Опубликовано 25 Января 2011 Поделиться Опубликовано 25 Января 2011 Добрый день! Существует ли такая схема логики для НПС в ТЧ 1.0004, чтобы этот самый НПС следовал за актёром, пока актёр не дойдёт в назначенную точку? Т.е нужна логика "догоняющего" НПС. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-559298
ColR_iT 171 Опубликовано 25 Января 2011 Поделиться Опубликовано 25 Января 2011 antreg, в чистом 1004 этого нет. Но есть мод который реализует такую возможность Схема "Компаньоны". Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-559304
gruber 2 481 Опубликовано 25 Января 2011 Поделиться Опубликовано 25 Января 2011 (изменено) Есть схема фоловер,которая вроде бы отключена в игре,но тем не менее используется в некоторых моментах,к примеру в логике конвоиров долговца ,там в схеме одному из них присваивают "лидер" -остальные повторяют его действия и следуют по его пути,наверное можно лидером назначить актора leader = 720 stub_for_corpse = true distance = 0.5 -вот пример из тех ,что я спрашивал,просто я думал подробнее узнать о этой схеме и ее нюансах Изменено 25 Января 2011 пользователем gruber Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/71/#findComment-559310
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти