strelok200 0 Опубликовано 6 Июня 2011 Поделиться Опубликовано 6 Июня 2011 Есть два вопроса: 1) Как сделать чтобы дружественные неписи не стреляли во врага пленника 2) Что сделать надо, чтобы можно было разговаривать с врагом Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Kirag 39 Опубликовано 6 Июня 2011 Поделиться Опубликовано 6 Июня 2011 Возникла такая задача: Дано: id непися, онлайн-объект прилагается. В схемы лезть нельзя. Нужно: Заставить НПС смотреть туда и только туда, куда надо, плевать, под какой он схемой. Особенно по вертикали. Перемещение не важно, может хоть на месте стоять. Критично, чтобы смотрел на воздушную цель и сопровождал ее. Пробовал так: state_mgr.set_state( npc, "threat_fire", nil, nil, {look_position = target_pos}, nil, nil, {yaw_delta=10} ) Если ставить на апдейт - дергается. Пытается уйти (видимо, из схемы) и снова посмотреть - приказ из апдейта. Если запихнуть в fastcall - стоит и смотрит. По горизонтали - более-менее. По вертикали - куда попало, либо горизонтально, либо вообще носом в землю, а нужно наверх. Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
KD87 718 Опубликовано 6 Июня 2011 Поделиться Опубликовано 6 Июня 2011 (изменено) Callisto, вы меня простите, но мне, как автору этой штуки, немного интересно - а что это за ключи такие - [-l] [-soc1]? Это какая-то модифицированная версия? -soc1 - вообще не помню, чтобы был такой ключ, а -l, кстати, нужен только при распаковке level.spawn. Если же вы хотите распаковать спавн в папку, для этого есть ключ -o. К слову, если ключ стоит в квадратных скобочках - он не работает. В общем, синтаксис вызова для распаковки выглядит примерно так: acdc.pl -d all.spawn -o my_dir. По делу: во-первых, советую скачать последнюю версию. Во-вторых, сообщите, какая секция у этого kat_m_rat_e_0000 и какой класс вы сопоставили этой секции в таблице section_to_class. Если ответить на эти вопросы сложно, заливайте свой спавн. Изменено 6 Июня 2011 пользователем KD87 Ссылка на комментарий
Malandrinus 615 Опубликовано 7 Июня 2011 Поделиться Опубликовано 7 Июня 2011 Kirag, Заставить НПС смотреть туда и только туда, куда надо, плевать, под какой он схемой. Особенно по вертикали. насколько я понимаю, все схемы и состояния так или иначе сводятся к вызову одного из вариантов функции set_sight. Вот чуть более полное описание аргументов, чем сейчас в справочнике: // куда смотрит void set_sight(enum SightManager::ESightType <sight_type>, const vector*, DWORD dwLookOverDelay); void set_sight(enum SightManager::ESightType <sight_type>, const vector&, bool <torso_look???>); void set_sight(enum SightManager::ESightType <sight_type>, const vector*); void set_sight(enum SightManager::ESightType <sight_type>, bool <torso_look>, bool <path>); // на кого смотрит void set_sight(game_object* <object_to_look>); void set_sight(game_object* <object_to_look>, bool <torso_look>); void set_sight(game_object* <object_to_look>, bool <torso_look>, bool <fire_object>); void set_sight(game_object* <object_to_look>, bool <torso_look>, bool <fire_object>, bool <no_pitch>); Думаю, одна из них сработает так, как тебе надо. Однако с логикой всё равно может конфликтовать. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Disord 1 Опубликовано 7 Июня 2011 Поделиться Опубликовано 7 Июня 2011 strelok200, 1) combat_ignore поставь им. 2) укажи в meet'e use = true Ссылка на комментарий
Disord 1 Опубликовано 7 Июня 2011 Поделиться Опубликовано 7 Июня 2011 (изменено) Ребяты, выручайте Уже есть опыт в создании гулагов, сегодня перешёл на новую локацию - старые болота из SMP (не ЧН). Вот, сделал гулаг для 8 военных, прописал работы в новом файле, зарегистрировал его в табличке в скрипте xr_gulag, логика и пути - тоже сделал. Проблема в том, что все НПС расходятся куда попало, вместо того, чтобы занять рабочее место. local t = {} function load_job(sj, gname, type, squad, groups) --/ ЗАПАДНЫЙ БЛОКПОСТ - 8 ЧЕЛОВЕК if type == "zap_soldier" then t = { section = "logic@zap_soldier_zoneguard1", idle = 0, prior = 10, state = {0, 1}, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@zap_soldier_zoneguard2", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@zap_soldier_zoneguard3", idle = 0, prior = 8, state = {0, 1}, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@zap_soldier_zoneguard4", idle = 0, prior = 7, state = {0, 1}, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@zap_soldier_zoneguard5", idle = 0, prior = 6, state = {0, 1}, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@zap_soldier_zoneguard6", idle = 0, prior = 5, state = {0, 1}, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@zap_soldier_zoneguard7", idle = 0, prior = 4, state = {0, 1}, in_rest = "", out_rest = "" } table.insert(sj, t) t = { section = "logic@zap_soldier_zoneguard8", idle = 0, prior = 3, state = {0, 1}, in_rest = "", out_rest = "" } table.insert(sj, t) end end function load_states(gname, type) if type == "zap_soldier" then return function(gulag) local actor = db.actor if actor ~= nil then if level.get_time_hours() >= 6 and level.get_time_hours() <= 22 then return 0 --/ день else return 1 --/ ночь end else return gulag.state end end end return nil end -------------------------------------------------------------------------- -- Dynamic ltx -------------------------------------------------------------------------- function load_ltx(gname, type) return nil end function checkStalker(npc_community, gulag_type, npc_rank, se_obj) if gulag_type == "zap_soldier" then return npc_community == "military" end return false end function checkMonster(npc_community, gulag_type) return false end --' в работах поле object хранит id объекта level_gulags = {gulag_general, gulag_escape, gulag_garbage, gulag_agroprom, gulag_agroprom_underground, gulag_dark_valley, gulag_labx18, gulag_bar, gulag_military, gulag_radar, gulag_radar_u, gulag_yantar, gulag_pripyat, gulag_kishka, gulag_sarcofag, gulag_deadcity, gulag_garbage_old, gulag_predbannik, gulag_swamp_old} Остальное, думаю, не имеет смысла показывать, т.к. почитав на форумах, понял, что проблема именно здесь должна быть - или синтаксическая ошибка в скрипте (не смог найти) или что-то ещё... Изменено 7 Июня 2011 пользователем Disord Ссылка на комментарий
strelok200 0 Опубликовано 7 Июня 2011 Поделиться Опубликовано 7 Июня 2011 Не помогло! Враг не хочет со мной разговаривать Добавлено через 204 мин.: Disord, Что делать? Создаю глобальный мод с новыми локациямЭ Ссылка на комментарий
Полтергейст 38 Опубликовано 8 Июня 2011 Поделиться Опубликовано 8 Июня 2011 Кто-нибудь пробовал убрать сохранение работ и объектов в смарте, чтобы они каждый раз заново регистрировались при загрузке из сохранения? Реально ли это вообще сделать? Ссылка на комментарий
Gektor 0 Опубликовано 10 Июня 2011 Поделиться Опубликовано 10 Июня 2011 Добрый вечер. Такой вопрос: Как правильно поставить на новый уровень камп (посиделки у костра) чтобы он работал. Игра зов припяти. Заранее спасибо. Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу. Ссылка на комментарий
AKKK1 6 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 strelok200 1. Использование функции 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 вот вроде и все P.S Игнорируемых НПС может быть несколько пример часть логики стукача на арм складах [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 2. Смотри логику Кузнецова и солдат под мостом Ссылка на комментарий
Gektor 0 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 (изменено) День добрый. Такая проблема: Поставил на новый уровень Camp скопированный с затона (zat_b100). Поправил имена смарт террайна кампа и смарт каверов по типу затоновских и конфиг смарта. Но сталкер заспавненый на локации его игнорирует, а сквады спавница отказываются. Как решить проблему? Где я накосячил? И ещё, новую локацию гдето в скриптах надо регить? Или только в конфигах? Заранее спасибо. Изменено 11 Июня 2011 пользователем Gektor Команда ReWrite Team. От сталкера отошли. Пересели за другую платформу. Ссылка на комментарий
TRAMP14 1 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 (изменено) Здравствуйте. Скажите пожалуйста как переместить вещь в слот? Что-то я никак не могу припомнить (может потому что незнаю как?)..... Поможет ли db.actor:item_in_slot(1) = "обьект"? Или как то по другому это делается? Изменено 11 Июня 2011 пользователем TRAMP14 Ссылка на комментарий
iDreD 5 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 (изменено) TRAMP14, db.actor:move_to_ruck(db.actor:item_in_slot(1)) --Перемещаем объект в рюкзак db.actor:move_to_belt(db.actor:item_in_slot(1)) --Перемещаем объект на пояс db.actor:move_to_slot(db.actor:object("test")) --Перемещаем объект в слот db.actor:move_to_slot_and_activate(db.actor:object("test")) --Перемещаем объект в слот и активируем db.actor:can_move_to_ruck(db.actor:item_in_slot(1)) --Перемещаем объект в рюкзак db.actor:can_move_to_belt(db.actor:item_in_slot(1)) --Перемещаем объект на пояс db.actor:can_move_to_slot(db.actor:object("test")) --Перемещаем объект в слот http://www.amk-team.ru/forum/index.php?sho...st&p=596057 Изменено 11 Июня 2011 пользователем iDreD Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
TRAMP14 1 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 А в чистой игре такое есть? ТЧ Ссылка на комментарий
iDreD 5 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 TRAMP14, скорее всего нет. Но попробовать стоит. Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
TRAMP14 1 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 Таких как вы представили нет. Нашёл в xr_sos лучше - self.object:set_item (object.activate, self.object:best_weapon ()) Вот только как пользоватся? Второе это оружие, а вот первое это что? Ссылка на комментарий
iDreD 5 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 (изменено) TRAMP14, помоему это функция для НПС, не? ==================================== Поставь вот эти dll'ки http://www.amk-team.ru/forum/index.php?sho...st&p=598450 Тогда, вероятно, получишь доступ к тем функциям, которые я указал. Изменено 11 Июня 2011 пользователем iDreD Работа в Sculptris 3D [туториал] Страничка на Проза.ру Ссылка на комментарий
dragunof 3 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 Ребят такой вопрос. Как проверить активен ли у меня 5 слот? ▲ ▲ ▲ Ссылка на комментарий
Nazgool 250 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 (изменено) draguno Cм. lua_help.script С++ class game_object ... function item_in_slot(number) ... Изменено 11 Июня 2011 пользователем Gun12 Ссылка на комментарий
Kirag 39 Опубликовано 11 Июня 2011 Поделиться Опубликовано 11 Июня 2011 (изменено) dragunof if db.actor:active_slot() == 5 then --значит, 5-й слот активен end P.S. Не прокатит с 0 (ножевым) слотом - db.actor:active_slot() выдает 0 и при активном ноже, и при убранном оружии (в ТЧ, по крайней мере) Изменено 11 Июня 2011 пользователем Kirag Мои работы: Ночные прицелы + смена ножевого слота AI вертолетов + ПЗРК Soul Cube Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти