AKKK1 6 Опубликовано 16 Июля 2010 Я тоже не понимаю почему всех стоячих неписей делают на remark поставте волкера с одной точкой (точка локк по желанию) или вобще чампера. Строгое предупреждение от модератора n6260 Пишем грамотно. Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 28 Июля 2010 (изменено) В лагере новичков Волк и Фанат кроме того что эксклюзивные занимают работу предназначенную только для них А остальные просто эксклюзивные т.к у них в алл спавне прописанно выделенное [137] ; cse_abstract properties section_name = stalker name = esc_lager1 position = -209.067367553711,-19.7512016296387,-132.083114624023 direction = 0.062321275472641,0.00316426996141672,0.0140644172206521 ; cse_alife_trader_abstract properties money = 5000 character_profile = esc_stalker_novice ; cse_alife_object properties game_vertex_id = 61 distance = 9.80000019073486 level_vertex_id = 43968 object_flags = 0xffffffbf custom_data = <<END [smart_terrains] esc_lager = true [spawn] conserva END ; cse_visual properties visual_name = actors\novice\green_stalker_2 ; cse_alife_creature_abstract properties g_team = 0 g_squad = 1 g_group = 5 health = 1 dynamic_out_restrictions = dynamic_in_restrictions = upd:health = 1 upd:timestamp = 0x617a6b75 upd:creature_flags = 0x6b upd:position = -209.067367553711,-19.7512016296387,-132.083114624023 upd:o_model = 0 upd:o_torso = 0.00316426996141672,0.062321275472641,0 upd:g_team = 0 upd:g_squad = 1 upd:g_group = 5 ; 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 = 2,2,0,1,1 predicate4 = 0,2,0,2 ; cse_ph_skeleton properties upd:start_dialog = ; se_stalker properties ЗЫ Я удалял выделенное в алл спавне и неписи прекрасно занимают работы только гулаг уже не является для них эксклюзивным Изменено 28 Июля 2010 пользователем AKKK1 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 28 Июля 2010 Помоему только через нет пакет вобщем изменить секцию смарт террайн на нужную Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 10 Января 2011 Якут я не занимаюсь зп но по анологии с тч active = kamp@koster_marsh_baza01 combat_ignore = 10 незнаю что это наверно дистанция игнорирования боя [kamp@koster_marsh_baza01] center_point = kamp_center_marsh01 meet = meet_guide а разве в зп не такой формат meet = meet@..имя combat_ignore_cond = always а вот тут у тебя игнор боя в любом случае points = p0 p0:name = wp00|a=sit_ass это зачем схема камп сама усадит непися p0:position = -157.044052124023,0.613676309585571,-310.872619628906 p0:game_vertex_id = 1070 p0:level_vertex_id = 65989 пример из тч [esc2_bandit_les_kamp_1] points = p0 p0:name = name00 p0:position = 312.993621826172,3.61605930328369,117.678817749023 p0:game_vertex_id = 143 p0:level_vertex_id = 571664 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 16 Января 2011 Если нпс в гулаге то все просто t = { section = "logic@esc_lager_kamp1",для любой работы логика [logic@esc_lager_kamp1] active = kamp1@esc_lager [kamp1@esc_lager] center_point = camp_center path_walk = camp_center_task soundgroup = esc_lager meet = meet@lager если нет то по анологично Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 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 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 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 пользователем Министр Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 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 это все что я хоть немного понимаю может более знаюшие помогут разобраться полностью. Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 31 Января 2011 А почему не попробовать прописать обьекту логику типа монолита ? [logic] active = ph_idle [ph_idle] tips = tip_monolith on_use = nil %+sar2_monolith_miracle =sar_monolith_miracle% (функция из хр эфект открываюшая окно с вариантом жеания в зависимости от того что натворил гг в зоне) наверно можно на базе это го создать ,запустить свой собственный скриптовый диаог с любым обьектом. Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 31 Января 2011 Я действитеьно не знаю как это реализовать по секции [ph_idle] есть тоько это 3.10. Набор дополнительных настроек логики у разных объектов. Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты. Может кто то знает больше Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 3 Февраля 2011 Ну чтож вопрос : Как поговорить с физическим обьектом.?(допустим балон в бункере сидора). Заюзать его (обьект) можно используя практически не описанную секцию [ph_idle] пример загадать желание [logic] active = ph_idle [ph_idle] tips = tip_monolith on_use = nil %+sar2_monolith_miracle =sar_monolith_miracle% насколько я понимаю при юзе обьекта срабатывает функция из хр ефект данная секция дает возможность вывод на экран описания любого обьекта или запуск любой функции при юзе обьекта так вот нужен пример функции при срабатывании которой открываеться окно диалога с простейшими фразами . Хотя есть и другие фишки (можно огнемет газом из балонна заправить) Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 19 Февраля 2011 (изменено) Disord [logic] active = ph_idle [ph_idle] tips = spi_spoki on_use = %+budu_v_bunkere_spat% и сдесь имя функции из xr_effects tips = spi_spoki зарегестрированн в string_table_ui.xml ? <?xml version="1.0" encoding="windows-1251" ?> <string_table> <string id="cant_walk"> <text>Вы слишком истощены, чтобы двигаться</text> </string> <string id="cant_walk_weight"> <text>Вы слишком перегружены, чтобы двигаться</text> </string> <string id="dar_poltergeist_hold_the_door"> <text>Кто-то удерживает дверь.</text> </string> <string id="Global Map"> <text>Глобальная карта</text> </string> <string id="gun_jammed"> <text>Оружие заклинило. Нужно перезарядить.</text> </string> <string id="inventory_box_use"> <text>Обыскать ящик ($$ACTION_USE$$)</text> </string> <string id="Local Map"> <text>Локальная карта</text> </string> <string id="st_game_saved"> <text>игра сохранена</text> </string> <string id="tip_car_locked"> <text>Заблокировано</text> </string> <string id="tip_car_use"> <text>Открыть дверь ($$ACTION_USE$$)</text> </string> <string id="tip_door_close"> <text>Нажмите ($$ACTION_USE$$), чтобы закрыть дверь</text> </string> <string id="tip_door_coded"> <text>Дверь закодирована</text> </string> <string id="tip_door_decode"> <text>Нажмите ($$ACTION_USE$$), чтобы декодировать дверь</text> </string> <string id="tip_door_decoding"> <text>Идет процесс декодирования</text> </string> <string id="tip_door_locked"> <text>Дверь заперта</text> </string> <string id="tip_door_open"> <text>Нажмите ($$ACTION_USE$$), чтобы открыть дверь</text> </string> <string id="tip_gate_close"> <text>Нажмите ($$ACTION_USE$$) для того, чтобы закрыть ворота</text> </string> <string id="tip_gate_locked"> <text>Ворота заблокированы</text> </string> <string id="tip_gate_open"> <text>Нажмите ($$ACTION_USE$$) для того, чтобы открыть ворота</text> </string> <string id="tip_monolith"> <text>ЗАГАДАТЬ ЖЕЛАНИЕ ($$ACTION_USE$$)</text> </string> </string_table> Грубо говоря при юзе обьекта срабатывает функция . Ну и для примера вот [8388] ; cse_abstract properties section_name = physic_object name = sar_monolith position = 24.0560283660889,58.6652679443359,42.6767501831055 direction = 0,0.00899999216198921,0 ; cse_alife_object properties game_vertex_id = 2402 distance = 0 level_vertex_id = 9864 object_flags = 0xffffff3a custom_data = <<END [collide] ignore_static [logic] cfg = scripts\sar_monolith.ltx END ; cse_visual properties visual_name = physics\anomaly\artefact_monolit ; cse_ph_skeleton properties ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 fixed_bones = link логика [logic] active = ph_idle [ph_idle] tips = tip_monolith on_use = nil %+sar2_monolith_miracle =sar_monolith_miracle% функция в xr_effects function sar_monolith_miracle(actor, npc) --' Убил лидеров группировок if has_alife_info("mil_lukash_dead") and has_alife_info("bar_voronin_dead") then game.start_tutorial("mov_desire_3") return end --' Много денег if db.actor:money() >= 50000 then game.start_tutorial("mov_desire_2") return end --' Хорошая репутация if db.actor:character_reputation() >= 1000 then game.start_tutorial("mov_desire_1") return end --' плохая репутация if db.actor:character_reputation() <= -1000 then game.start_tutorial("mov_desire_4") return end game.start_tutorial("mov_desire_5") end Изменено 19 Февраля 2011 пользователем AKKK1 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 19 Февраля 2011 Что значит [use] on_info = %+budu_v_ bunkere_spat% Для on_info = нужна функция условие on_info = {=имя_функции} если возврашает труе то только потом эфект %+budu_v_ bunkere_spat% Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 19 Февраля 2011 on_actor_inside = %=cit_gulag_1_restavn% sr_idle@out Должна сработать функция с именем %=cit_gulag_1_restavn% прописаная в xr_effects.script. Она есть? Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 20 Февраля 2011 Disord Eсли тебе надо чтоб гг при юзе обьекта доустим диван, матрас, ящик (у меня балон ) засыпал то рестрикторы и поршни не нужны все проше [logic] active = ph_idle [ph_idle] tips = spi_spoki on_use = %=budu_v_bunkere_spat% добавляеш в string_table_ui.xml строку типа <string id="spi_spoki"> <text>ПОСПАТЬ ($$ACTION_USE$$)</text> </string> В xr_effects function budu_v_bunkere_spat() sleep_manager.sleep_three_hours() Старт функции сна из файла sleep_manager.script end При подходе к обьекту выскочит Поспать нажмите F Жмем F и ГГ засыпает . Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 20 Февраля 2011 (изменено) Хантер Eсть много вариантов толкованния вылета данного типа Вот лично мое мнение Он происходит 1. при попытке отправить обьект в твоем случае object [esc_lager3] за пределы ограничивающего рестриктора в загрузке работ гулага esc_lager --' Лагерь новичков на Escape if type == "esc_lager" then -- охранники t = { section = "logic@esc_lager_zoneguard1", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone",} Мне кажется что ты попытался отправить обитателя лагеря за его пределы или я ошибаюсь? если да, то просто удали у всех работ гулага esc_lager - esc_lager_guard_kill_zone, должно быть так, для всех работ : --' Лагерь новичков на Escape if type == "esc_lager" then -- охранники t = { section = "logic@esc_lager_zoneguard1", idle = 0, prior = 9, state = {0, 1}, [b] in_rest = "", out_rest = "",} Изменено 20 Февраля 2011 пользователем Куфзук Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 20 Февраля 2011 Хантер gulag_escape.script --' Лагерь новичков на Escape if type == "esc_lager" then -- охранники t = { section = "logic@esc_lager_zoneguard1", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", } table.insert(sj, t) t = { section = "logic@esc_lager_zoneguard2", idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", } table.insert(sj, t) t = { section = "logic@esc_lager_walker3", idle = 0, prior = 8, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_walker4", idle = 0, prior = 8, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) -- у костра днём t = { section = "logic@esc_lager_kamp1", idle = 0, prior = 6, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_kamp1", idle = 0, prior = 6, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_kamp1", idle = 0, prior = 6, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) -- Волк, собственной персоной. t = { section = "logic@esc_lager_volk", idle = 0, prior = 16, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info.profile_name == "esc_wolf" end } table.insert(sj, t) -- Шустрый t = { section = "logic@esc_lager_shustryi", idle = 0, prior = 16, state = {0,1}, online = true, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "esc_shustryi" end } table.insert(sj, t) t = { section = "logic@esc_lager_kamp1", idle = 0, prior = 16, state = {2}, online = true, in_rest = "", out_rest = "", predicate = function(obj_info) return obj_info.profile_name == "esc_shustryi" end } table.insert(sj, t) -- Фанат t = { section = "logic@esc_lager_fanat", idle = 0, prior = 16, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info.profile_name == "esc_fanat" end } table.insert(sj, t) -- спящие ночью t = { section = "logic@esc_lager_sleeper1", idle = 0, prior = 3, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_sleeper2", idle = 0, prior = 3, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_kamp1", idle = 0, prior = 3, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) -- спящие ночью и днёи t = { section = "logic@esc_lager_sleeper5", idle = 0, prior = 5, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_kamp1", idle = 0, prior = 0, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_sleeper7", idle = 0, prior = 0, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend1", idle = 0, prior = 15, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend2", idle = 0, prior = 14, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend3", idle = 0, prior = 13, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend4", idle = 0, prior = 12, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend5", idle = 0, prior = 11, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend6", idle = 0, prior = 10, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend7", idle = 0, prior = 9, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend8", idle = 0, prior = 8, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend9", idle = 0, prior = 16, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info.name == "esc_novice_attacker1" end } table.insert(sj, t) t = { section = "logic@esc_lager_defend10", idle = 0, prior = 16, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info.name == "esc_vagon_wounded" end } table.insert(sj, t) t = { section = "logic@esc_lager_defend11", idle = 0, prior = 5, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" } table.insert(sj, t) t = { section = "logic@esc_lager_defend12", idle = 0, prior = 20, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info.profile_name == "esc_fanat" end } table.insert(sj, t) t = { section = "logic@esc_lager_defend13", idle = 0, prior = 20, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone", predicate = function(obj_info) return obj_info.profile_name == "esc_wolf" and not (has_alife_info("agroprom_military_case_have") and has_alife_info("esc_fanat_spawn")) end } table.insert(sj, t) end Добавлено через 36 мин.: 2 конфликт с схемой обхода аномалий (аномалия в принципе тот же рестриктор) если точка пути обьекта попадет в аномалию (зону рестриктора) вылет . Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 26 Февраля 2011 (изменено) В консоли нечего не поучится Засунь зто в \S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\creatures\actor.ltx (замени то что там на это) [actor_terrain] 255,255,000,255 [actor]:common_ph_friction_params_on_npc_death GroupControlSection = spawn_group $spawn = "actor" $ed_icon = ed\ed_actor $player = on $prefetch = 16 cform = skeleton class = O_ACTOR money = 40; rank = 3; script_binding = bind_stalker.actor_init visual = actors\hero\stalker_novice.ogf destroyed_vis_name = physics\Dead_Body\skelet_crash terrain = actor_terrain max_item_mass = 200.0 jump_speed = 6. crouch_coef = 0.45 climb_coef = 0.7 run_coef = 2.1 sprint_koef = 2.6 run_back_coef = 1.8 walk_back_coef = 0.8 air_control_param = 0.1 walk_accel = 17 ;радиус в котром над предметами выводятся их названия pickup_info_radius = 5 ;3 ef_creature_type = 17 ; option for evaluation functions ; attach params attachable_items = device_torch,attachable_item,hand_radio ph_box0_center = 0.0, 0.9, 0.0 ph_box0_size = 0.35, 0.9, 0.35 ph_box1_center = 0.0, 0.75, 0.0 ph_box1_size = 0.35, 0.75, 0.35 ph_box2_center = 0.0, 0.6, 0.0 ph_box2_size = 0.35, 0.6, 0.35 stalker_restrictor_radius = .05;0.55;0.75;0.9 stalker_small_restrictor_radius = .05; medium_monster_restrictor_radius = 0.1 ph_crash_speed_min = 14 ph_crash_speed_max = 30 ph_collision_damage_factor = 1.0 ph_mass = 80 weapon_bone0 = bip01_r_finger1 weapon_bone1 = bip01_l_finger1 weapon_bone2 = bip01_r_finger11 damage = actor_damage hit_probability_gd_novice = 0.20 hit_probability_gd_stalker = 0.30 hit_probability_gd_veteran = 0.40 hit_probability_gd_master = 0.50 hit_sounds = actor_hit_snds ;actor condition immunities_sect = actor_immunities_gd_master condition_sect = actor_condition heavy_breath_snd = actor\breath_1 ;звук тяжелого дыхания при усталости heavy_blood_snd = affects\heartbeat; heart\8 material = creatures\actor camera_height_factor = 0.85 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-----(AMK SNIPER ADDON v1.0)----- ;дисперсия стрельбы с учетом ходьбы и бега disp_base = 0.51 ;угол (в градусах) разлета пуль, когда актер стоит на месте disp_aim = 0.04 ;0.51 disp_vel_factor = 1.0 ;на сколько увеличится дисперсия при скрости в 10 м/с (не обязательно при беге) disp_accel_factor = 2.0 ;еще на сколько увеличится, если актер бежит (+ скорость) disp_crouch_factor = -0.3 ;уменьшение если актер сидит disp_crouch_no_acc_factor = -0.6 ;уменьшение если актер сидит + no acceleration ;disp_jump_factor = 2.0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;----- missile_throw_offset = 0.3, 0.5, 0.5 body_remove_time = 30000 ;время уничтожения трупа (с учетом TimeFactor) sleep_time_factor = 1000 ;400 ;во сколько раз время идет быстрее, когда актер спит max_sleep_hours = 12 ;species of monster species = actor ;---STEP MANAGER------------------------------------------------------ LegsCount = 2 step_params = stalker_step_manager foot_bones = stalker_foot_bones memory_update_time = 100 ; visibility parameters DynamicObjectsCount = 32 min_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла visibility_threshold = 1.0 ; значение, при достижении суммой которого объект считается видимым always_visible_distance = 1.0 time_quant = 0.005 decrease_value = 0.1 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам velocity_factor = 0.5 luminocity_factor = 0.5;0 ; фактор освещения (только для Актёра) transparency_threshold = 0.4 ; 0.25 still_visible_time = 5000 ; время, которое объект всё ещё считается видимым, даже если он уже не во фрустуме [actor_immunities_gd_novice] burn_immunity = 0.0 ;коэффициенты иммунитета strike_immunity = 0.0 shock_immunity = 0.0 wound_immunity = 0.0 radiation_immunity = 0.0 telepatic_immunity = 0.0 chemical_burn_immunity = 0.0 explosion_immunity = 0.0 fire_wound_immunity = 0.0 [actor_immunities_gd_stalker] burn_immunity = 0.65 ;коэффициенты иммунитета strike_immunity = 0.65 shock_immunity = 0.65 wound_immunity = 0.65 radiation_immunity = 0.65 telepatic_immunity = 0.65 chemical_burn_immunity = 0.65 explosion_immunity = 0.3 fire_wound_immunity = 0.65 [actor_immunities_gd_veteran] burn_immunity = 0.8 ;коэффициенты иммунитета strike_immunity = 0.8 shock_immunity = 0.8 wound_immunity = 0.8 radiation_immunity = 0.8 telepatic_immunity = 0.8 chemical_burn_immunity = 0.8 explosion_immunity = 0.6 fire_wound_immunity = 0.8 [actor_immunities_gd_master] burn_immunity = 1.0 ;коэффициенты иммунитета strike_immunity = 1.0 shock_immunity = 1.0 wound_immunity = 1.0 radiation_immunity = 1.0 telepatic_immunity = 1.0 chemical_burn_immunity = 1.0 explosion_immunity = 1.0 fire_wound_immunity = 1.0 [actor_condition] satiety_v = 0.000001 ;скорость уменьшения сытости со временем radiation_v = 0.001 ;скорость уменьшения радиации satiety_power_v = 0.000055 ;увеличение силы при уменьшении сытости satiety_health_v = 0.0001 ;увеличение здоровья при уменьшении сытости satiety_critical = 0.0 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться radiation_health_v = 0.0001 ;уменьшение здоровья при воздействии радиации morale_v = 0.0001 ;скорость восстановления морали psy_health_v = 0.001 ;скорость восстановления psy-здоровья alcohol_v = -0.0005 health_hit_part = 1.0 ;процент хита, уходящий на отнимание здоровья power_hit_part = 0.1 ;процент хита, уходящий на отнимание силы max_power_leak_speed = 0.0 ;накопление усталости (макс граница, до которой восстанавливается сила) в секунду игрового времени max_walk_weight = 90 bleeding_v = 0.00001 ;потеря крови при номинальной ране в секунду wound_incarnation_v = 0.3 ;скорость заживления раны min_wound_size = 0.00001 ;минимальный размер раны, после которого она считается зажившей ;--when actor in sleep satiety_v_sleep = 0.00001 radiation_v_sleep = 0.0003 satiety_power_v_sleep = 0.0001 satiety_health_v_sleep = 0.00001 radiation_health_v_sleep = 0.001 morale_v_sleep = 0.0 psy_health_v_sleep = 0.0 alcohol_v_sleep = -0.0005 bleeding_v_sleep = 0.0 wound_incarnation_v_sleep = 0.0 max_power_leak_speed_sleep = -0.00001; ;health_restore_v = 0.0001 ;;;;;;;; ;actor_condition only jump_power = 0.01 ;0.005 ;умешьшение силы с прыжком без учета веса ноши jump_weight_power = 0.05 ;0.045 ;умешьшение силы с прыжком с учетом веса ноши, для максимального допустимого веса overweight_jump_k = 5;10 ;10 ;коэффициент влияние перегрузки прыжок с весом (умножается на jump_weight_power) stand_power = -0.01 walk_power = 0.00002 ;умешьшение силы за секнду во время ходьбы без учета веса ноши walk_weight_power = 0.0001; ;умешьшение силы за секнду во время ходьбы с учетом веса ноши, для максимального допустимого веса overweight_walk_k = 5;9 ;10 ;коэффициент влияние перегрузки ноши (умножается на walk_weight_power) accel_k = 3;5 ;коэффициент на бег (умножается walk_power, walk_weight_power) sprint_k = 75;150;185;180;200; ;коэффициент на "sprint" бег (умножается walk_power, walk_weight_power) ; хромота limping_health_begin = 0.1 ;порог здоровья меньше которого актер начинает хромать limping_health_end = 0.2 ;порог здоровья больше которого актер перестает хромать limping_power_begin = 0.1 ;порог силы меньше которого актер начинает хромать limping_power_end = 0.2 ;порог силы больше которого актер перестает хромать use_limping_state = on cant_walk_power_begin = 0.01 ;порог силы меньше которого актер не может двигаться cant_walk_power_end = 0.10 ;порог силы больше которого актер сможет двигаться cant_sprint_power_begin = 0.20 ;порог силы меньше которого актер не может бежать в спринте cant_sprint_power_end = 0.30 ;порог силы больше которого актер сможет бежать в спринте can_sleep_callback = dream.can_sleep_callback sleep_video_name_callback = dream.sleep_video_name_callback [actor_damage] ;bone_name = <hit_scale>,<fwd_damage_anim_index>,<wound_scale> ;<hit_scale> - коэфф. изменения хита (уменьшения здоровья) ;<wound_scale> - коэфф. изменения величины открытой раны ;-1 - нет анимаций, четный номер - спереди, нечетный номер - сзади, УКАЗЫВАЕТСЯ ТОЛЬКО ПЕРЕДНИЙ!!! ЗАДНИЙ НА АВТОМАТЕ default = 1.0, -1, 1.0 bip01_pelvis = 1.0, 10, 1.5 bip01_spine = 1.0, 10, 1.5 bip01_spine1 = 1.0, 0, 1.5 bip01_spine2 = 1.0, 0, 1.5 bip01_neck = 1.0, 0, 1.5 bip01_head = 0.2, 0, 1.5 eyelid_1 = 0.0, 0, 0.0 eye_left = 0.0, 0, 0.0 eye_right = 0.0, 0, 0.0 jaw_1 = 0.0, 0, 0.0 bip01_l_clavicle = 1.0, 4, 1.5 bip01_l_upperarm = 1.0, 4, 1.5 bip01_l_forearm = 1.0, 4, 1.5 bip01_l_hand = 1.0, 4, 0.5 bip01_l_finger0 = 0.0, 4, 0.0 bip01_l_finger01 = 0.0, 4, 0.0 bip01_l_finger02 = 0.0, 4, 0.0 bip01_l_finger1 = 0.0, 4, 0.0 bip01_l_finger11 = 0.0, 4, 0.0 bip01_l_finger12 = 0.0, 4, 0.0 bip01_l_finger2 = 0.0, 4, 0.0 bip01_l_finger21 = 0.0, 4, 0.0 bip01_l_finger22 = 0.0, 4, 0.0 bip01_r_clavicle = 1.0, 2, 1.5 bip01_r_upperarm = 1.0, 2, 1.5 bip01_r_forearm = 1.0, 2, 1.5 bip01_r_hand = 1.0, 2, 0.0 bip01_r_finger0 = 0.0, 2, 0.0 bip01_r_finger01 = 0.0, 2, 0.0 bip01_r_finger02 = 0.0, 2, 0.0 bip01_r_finger1 = 0.0, 2, 0.0 bip01_r_finger11 = 0.0, 2, 0.0 bip01_r_finger12 = 0.0, 2, 0.0 bip01_r_finger2 = 0.0, 2, 0.0 bip01_r_finger21 = 0.0, 2, 0.0 bip01_r_finger22 = 0.0, 2, 0.0 bip01_l_thigh = 1.0, 8, 1.5 bip01_l_calf = 1.0, 8, 1.5 bip01_l_foot = 1.0, 8, 1.5 bip01_l_toe0 = 1.0, 8, 1.5 bip01_r_thigh = 1.0, 6, 1.5 bip01_r_calf = 1.0, 6, 1.5 bip01_r_foot = 1.0, 6, 1.5 bip01_r_toe0 = 1.0, 6, 1.5 [actor_animation] ;углы дворота ног актера во время стрейфов (в градусах) fwd_l_strafe_yaw = 45 back_l_strafe_yaw = 45 fwd_r_strafe_yaw = 45 back_r_strafe_yaw = 45 l_strafe_yaw = 0 r_strafe_yaw = 0 [actor_hit_snds] burn =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 shock =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 strike =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 wound =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 radiation =monsters\biting\def_0; actor\hurt1,actor\hurt2,actor\hurt3,actor\hurt4 telepatic =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 fire_wound =actor\bullet_hit_1,actor\bullet_hit_2,actor\bullet_hit_3,actor\bullet_hit_4 ; actor\pain_1,actor\pain_3,actor\pain_4,actor\pain_5,actor\pain_6,actor\pain_7,actor\pain_8 chemical_burn =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 explosion =affects\tinnitus3a wound_2 =actor\hurt1,actor\hurt2,actor\hurt3,actor\hurt4 physic_strike =actor\pain1,actor\pain2,actor\pain3; ,actor\hurt4 ЗЫ . Для ТЧ Изменено 26 Февраля 2011 пользователем AKKK1 Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 26 Февраля 2011 (изменено) Некоторое время назад было предложение верней возмушение почему меченый безнаказанно хватает все с столов в баре ? ну и вот в свете новых знаний а именно ковыряния схемы ph_idle практически не документированной всего одна строчка в описании Для всех физических объектов есть секция ph_idle, поддерживающая кондлист в которую можно при необходимости переводить объекты. В общем научился вызывать любю функцию при юзе обьекта для этого достаточно прописать обьекту следующее (секция болон в алл спавне ). ; cse_abstract properties section_name = physic_object name = trader_physic_object0007 position = -250.935073852539,-24.7987232208252,-135.995330810547 direction = 0,4.36330795288086,0 ; cse_alife_object properties game_vertex_id = 0 distance = 0 level_vertex_id = 594270 object_flags = 0xfffffffa custom_data = <<END [collide] ignore_static [logic] cfg = scripts\esc_balon.ltx END ; cse_visual properties visual_name = physics\balon\balon_01 ; cse_ph_skeleton properties skeleton_name = ; cse_alife_object_physic properties physic_type = 0x3 mass = 10 логика [logic] active = ph_idle [ph_idle] tips = tip_bolon используем добавляем свой тип в snring_table_ui.xml типа так <string id="tip_bolon"> <text>ПОГОВОРИ СО МНОЙ ($$ACTION_USE$$)</text> показываемый текст </string> on_use = %=функция_запускаемая_при_юзе% нажатии f или enter у меня Думаю с этим все понятно вернемся к нашим баранам так вот хлеб водка консервы являются итемами (короче их можно брать выкидывать пользовать из инвенторИ). а нужно чтоб при попытке взять сьесть (была отдача ха ха) соответственно добавил новый тип в snring_table_ui.xml ну и изменил секцию консервы(в баре на столе перед новичком) так (выделенное) [4593] ; cse_abstract properties section_name = physic_object name = bar_conserva position = 129.616775512695,-3.60408997535706,28.8814792633057 direction = 0,0,0 ; cse_alife_object properties game_vertex_id = 1168 distance = 0 level_vertex_id = 76465 object_flags = 0xfffffffa custom_data = <<END [logic] cfg = scripts\bar_bread.ltx END ; cse_visual properties visual_name = food\conserv1 ; cse_alife_item properties condition = 1 upd:num_items = 0 логика scripts\bar_bread.ltx [logic] active = ph_idle [ph_idle] tips = tip_bar_bread on_use = %=act_punch% функция act_punch получаем удар в рожу теряем 80% денег (при попытке взять сьесть чужую консерву) а именно лежащую на столе перед новичком function act_punch(npc) if db.actor:position():distance_to_sqr(npc:position()) > 4 then return end local active_slot = db.actor:active_slot() if active_slot ~= 1 and active_slot ~= 2 then return end local active_item = db.actor:active_item() if active_item then db.actor:drop_item(active_item) end set_inactivate_input_time(30) local snd_obj = xr_sound.get_safe_sound_object([[affects\hit_fist]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) level.add_cam_effector("camera_effects\\fusker.anm", 999, false, "") test_script.out_money_and_dream() end ну и test_script function out_money_and_dream() local money = db.actor:money() local money_out = money * (math.random(5,8)/10) db.actor:give_money(-money_out) end Спасибо Allender АМК-2 Спасибо Stalk 15 ------- Видео http://video.yandex.ru/users/krepishev-al/view/1/ Изменено 27 Февраля 2011 пользователем Cyclone Поделиться этим сообщением Ссылка на сообщение
AKKK1 6 Опубликовано 11 Марта 2011 =VENOM= Подошел в смысле на конкретную точку где гг кабы должен быть ? Или туда где гг находтся в данный момент ? ( на другой локе к примеру). Поделиться этим сообщением Ссылка на сообщение