Halford

[CoP] Ковыряемся в файлах

6 718 сообщений в этой теме

Народ, а кто знает, как сделать ANM файл движения камеры над каким-либо местом локации,

такие как в папке scenario_cam. Хочу сделать сценку застолья на пенечке с анимациями выпивки

и закуски по типу клипа с отключением UI. В левел-эдиторе нашел какой-то редактор ANM - но разобраться

не могу, записывает всег один кадр.

 

 

MustaNG, вот посмотри - здесь при разговоре будет держать оружие в руках

[logic@val_freedom_trader]

active = walker@freedom ; активируем первую схему - патруль между двумя точками

suitable = {=check_npc_name(val_freedom_trader)} ; проверяем - наш ли этот чувак

prior = 100

on_hit = hit

on_death = death

 

 

[walker@freedom]

path_look = guard_1_look ;вейпоинты в way_zaton.ltx - куда смотрит

path_walk = guard_1_walk ;вейпоинты в way_zaton.ltx - где ходит

def_state_standing = guard_na ;анимация с оружием в руках

meet = meet ;разговаривать будет

 

[meet]

close_snd_hello = zat_a2_stalker_barmen_greeting ; озвучка - приветствие, без звука - nil

close_snd_bye = zat_a2_stalker_barmen_farewell ; озвучка - прощание, без звука - nil

close_anim = guard_na ;при разговоре оружие в руках

close_victim = actor

far_anim = hello ;анимация на расстоянии far_distance

far_victim = actor

close_distance = 3

far_distance = 5

close_snd_distance = 2 ;расстояние отыгрывания озвучки приветствия-прощания при подходе-отходе

abuse = false

use = true

allow_break = false

meet_on_talking = false

 

[wounded]

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

 

[danger]

ignore_distance = 0

ignore_distance_grenade = 0

ignore_distance_corpse = 0

ignore_distance_hit = 0

ignore_distance_sound = 0

 

[hit]

 

[death]

 

Изменено пользователем nuklia

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Люди, кто знает, как сделать подствольный дробовик? :unsure:

Ну чтоб дробь вылетала, а не балончик подствольной гранаты.

Заранее благодарен. :good:

Изменено пользователем stalker.odinochka

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот бы кто помог... Создавал смарты на новой локации и все получилось кроме того что в определенном месте через каждые несколько секунды спавнются копии смартов и при том бесконечное количество раз.... Помогите как исправить...

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Скажите, кто в курсе, а как сделать так, чтобы выброс не убивал сталкеров а зомбировал их?

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

stalker.odinochk..., лучше пропиши патрон дробовика стволу и в энциклопедию - типа ствол

рассверлен умельцами под охотничий патрон и имеет в наличии ствольные вкладыши под различные патроны,

чем гранатомет уродовать.

 

БолотныйДоктор, подробно опиши метод создания, на кофейной гуще трудно гадать.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

nuklia То то и оно, что стволу легко прописать дробь.

А я хочу сделать именно подствольный дробовик.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажите, чем и как редактировать xrGame.dll ?

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Серый Волк, hex редактор в руки и в перёд!

Нет такой утилиты... Библиотеки движка - скрытая ф****.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как лечится этот вылет? Вылетает при взятии нового оружия в руки.

Expression    : error handler is invoked!
Function      : handler_base
File          : D:\prog_repository\sources\trunk\xrCore\xrDebugNew.cpp
Line          : 764
Description   : application is aborting

Поиск выдал несколько подобных логов, но они были связаны с костюмами. На них внятного ответа не было.

Изменено пользователем goroskob

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

andref

function level_changer()

if not has_alife_info("info_new_level") then

put_spots()

db.actor:give_info_portion("info_new_level")

end

end

 

function put_spots()

for i=1,65534 do

local obj = alife():object(i)

if obj then

if obj:name() == "Название 1-го левел чэнджера" then

level.map_add_object_spot_ser(obj.id,"level_changer_up","Подпись 1")

elseif obj:name() == "Название 2-го левел чэнджера" then

level.map_add_object_spot_ser(obj.id,"level_changer_up","Подпись 2")

elseif .....

end

end

end

С обозначением переходов получилось вот только в этой функции упущен один завершающий оператор END, а также допущена ошибка в условии "elseif ....." должно быть "elseif твоё условие then" или просто "else".

А так большое спасибо)

----------------------------------------

 

nuklia создавал смарты так же как и ты в твоем туторе про созданию смартов...

Изменено пользователем БолотныйДоктор

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Что-то я не понял - что плодится, смарт-террейн не может - он в алл.спавне создается.

А если сквады(неписи) - то может что в респавне не то или скрипты респавна изменены.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

копии моих всех моих новых сквадов помимо положенных мест спавнятся все ещё в одной точке притом очень часто буквально каждые 5 секунд... И все эти копии бегут на свои положенные места хотя там уже оригеналы есть....

Изменено пользователем БолотныйДоктор

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Похоже, что эксклюзивные сквады (у которых прописаны таргет_смарт и спавн_поинт) записаны

в респавн. Просмотри, есть-ли подобные сквады в файлах configs/scripts/..../smart/ в секциях респавна.

Респавнить нужно только сквады симулянтов из squad_descr.ltx , а эксклюзивные сквады спавнить

путем записи их в секцию [start_position_...] в simulation.ltx или функцией сreate_squad в логике

рестриктора(или еще чего) к примеру zat_b14_spawner.ltx .

А вот почему такой частый респавн - наверное в скриптах где-то частота респавна изменена.

Изменено пользователем nuklia

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

В респавнах сквады симулянтов - это правильно, но зачем респавнить в каждом смарте - это будет

бесконечная бойня и горы трупов. Лучше убрать большую часть респавнов, оставить немного, да и еще

условия для респавна попрописывать, а изначально расставить в нужных смартах эксклюзивные сквады.

Посмотри стандартные смарты того-же Затона - там большая часть пустых.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Подскажет кто? ситуация:

Вылет происходит изредка, выдает "Submit bug", на этом зависает и всё (но лог не выдает).

Изменено пользователем Серый Волк

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
nuklia Можешь по подробнее пожалуйста) на примере) Пожалуйста буду очень благодарен)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

В этой теме вопросы создания сквадов тесно обсуждались в мае-июне.

Вот нашел свою старую статью:

Спавн эксклюзивных сквадов

(буду делать для Затона - иначе запутаемся в террейнах и путях):

Создадим сквад из имеющегося уже специфик характера первого попавшегося

к примеру долговца - sim_default_duty_4, определим его в ближайший от начала игры

смарт-террейн - это zat_a1 , а так-же определим точку его спавна из этого смарта -

zat_a1_guard_1_walk (смотрим way_zaton.ltx) - точка двойная, будет ходить по ней

и смотреть в точки zat_a1_guard_1_look

; Здесь содержатся дескрипшены сквадов, которые потом можно создавать используя спец функции.

[zat_bolvan_1_squad]:online_offline_group

faction = stalker

npc = sim_default_duty_4

target_smart = zat_a1

spawn_point = zat_a1_guard_1_walk

story_id = zat_bolvan_1_squad

 

 

Теперь добавим этот сквад в стартовую позицию Затона

;;;;;;;;;;;;;;;;;;;;;; FINAL ZATON ;;;;;;;;;;;;;;;;;;;;;;;;;

 

[start_position_zaton]

zat_bolvan_1_squad = zat_a1

 

 

и в уникальные сквады Затона

;--------- ZATON UNIQUE SQUADS --------

[zat_bolvan_1_squad]:default_squad

sim_avail = false

 

 

Все - сквад готов, команда на спавн получена, начинайте новую игру и

встретите его у камней. У нас получился одиночный дефолтный сквад

 

Теперь пойдем дальше - создадим настоящего эксклюзива с индивидуальной

логикой. Прежде всего создаем специфик характер:

<specific_character id="val_freedom_trader" team_default = "1">

<name>val_freedom_trader_name</name>

<icon>ui_npc_u_freedom_2_mask</icon>

<map_icon x="1" y="0"></map_icon>

<bio></bio>

 

<class>val_freedom_trader</class>

<community>freedom</community> <terrain_sect>stalker_terrain</terrain_sect>

 

<rank>450</rank>

<reputation>0</reputation>

<money min="10000" max="27500" infinitive="1"/>

<visual>actors\stalker_freedom\stalker_freedom_2_mask</visual>

<snd_config>characters_voice\human_01\freedom\</snd_config>

<supplies>

[spawn] \n

device_torch \n

wpn_lr300 \n

ammo_5.56x45_ss190 = 5 \n

wpn_hpsa \n

ammo_9x19_fmj = 5 \n

grenade_f1 = 10 \n

#include "gameplay\character_items.xml"

#include "gameplay\character_food.xml"

#include "gameplay\character_drugs.xml"

</supplies>

#include "gameplay\character_criticals_1.xml"

<start_dialog>zat_a2_stalker_barmen_start_dialog</start_dialog>

 

<actor_dialog>zat_a2_linker_b14_quest_init</actor_dialog>

<actor_dialog>zat_a2_linker_b14_quest_done</actor_dialog>

<actor_dialog>zat_a2_linker_b14_quest_strange_item</actor_dialog>

<actor_dialog>zat_a2_linker_b14_quest_sell_artefact</actor_dialog>

<actor_dialog>zat_a2_linker_b14_quest_wrong</actor_dialog>

<actor_dialog>zat_b57_barmen_about_bloodsucker_lair_dialog</actor_dialog>

<actor_dialog>zat_b57_barman_reward_dialog</actor_dialog>

<actor_dialog>zat_b22_barmen_about_vampire_actor1</actor_dialog>

<actor_dialog>zat_b22_barmen_about_vampire_actor2</actor_dialog>

<actor_dialog>zat_b22_barmen_about_vampire_actor3</actor_dialog>

<actor_dialog>zat_b22_barmen_about_vampire_actor4</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b7_actor_start</actor_dialog>

<actor_dialog>zat_b22_barmen_b5_daring_quest_stalkers</actor_dialog>

<actor_dialog>zat_b22_barmen_about_after_quest_b5_dealer_actor4</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b30_about_new_detector</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b30_about_compass</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b30_compass_give_dialog</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b30_compass_double_dialog</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b30_compass_revert_dialog</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b30_take_business_actor_dialog</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_army</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_about_sci_guards</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_about_sci_helpers</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b30_about_halfart_jup_b1</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_oasis_art_sell</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b52_about_snag</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b52_about_nimble</actor_dialog>

<actor_dialog>zat_a2_linker_b29_actor_info</actor_dialog>

<actor_dialog>zat_a2_linker_b29_actor_get_adv_task</actor_dialog>

<actor_dialog>zat_a2_linker_b29_actor_give_adv_task</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_b30_take_money_actor_dialog</actor_dialog>

<actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog>

 

<actor_dialog>actor_break_dialog</actor_dialog>

 

</specific_character>

 

 

<character id="val_freedom_trader">

<class>val_freedom_trader</class>

</character>

 

 

;-------------------------наш свободовец------------------

[val_freedom_trader]:stalker

$spawn = "respawn\val_freedom_trader"

character_profile = val_freedom_trader

spec_rank = regular

community = freedom

story_id = val_freedom_trader

 

 

Создаем сквад

; Здесь содержатся дескрипшены сквадов, которые потом можно создавать используя спец функции.

[val_freedom_trader_squad]:online_offline_group ; наш свободовец

faction = freedom

npc = val_freedom_trader

target_smart = zat_a1

spawn_point = zat_a1_walker_1_walk

story_id = val_freedom_trader_squad

 

 

;;;;;;;;;;;;;;;;;;;;;; FINAL ZATON ;;;;;;;;;;;;;;;;;;;;;;;;;

 

[start_position_zaton]

val_freedom_trader_squad = zat_a1

 

 

;--------- ZATON UNIQUE SQUADS --------

[val_freedom_trader_squad]:default_squad

sim_avail = false

 

 

Пропишем в смарт-террейне путь к файлу логики чувака

[smart_terrain];zat_a1

squad_id = 54

max_population = 3

 

[exclusive] ; пропишем нашего свободовца в эксклюзивы

val_freedom_trader = zaton\val_freedom_trader.ltx ; где лежит файл логики

 

 

И в заключение сам файл логики

[logic@val_freedom_trader]

active = walker@freedom ; активируем первую схему - патруль между двумя точками

suitable = {=check_npc_name(val_freedom_trader)} ; проверяем - наш ли этот чувак

prior = 100

on_hit = hit

on_death = death

 

 

[walker@freedom]

path_look = guard_1_look ;вейпоинты в way_zaton.ltx - куда смотрит

path_walk = guard_1_walk ;вейпоинты в way_zaton.ltx - где ходит

def_state_standing = guard_na

on_actor_dist_le_nvis = 10 | walker@freedom_1 ;дистанция до игрока <= 10 без проверки на видимость | переход на др схему

;on_info = {=actor_has_item(detector_advanced)} %=teleport_npc(esc_a1_freedom_guard_1_walk)%

meet = no_meet

 

[walker@freedom_1]:walker@freedom ; производная от первой схемы с изменениями

path_walk = guard_2_walk

path_look = guard_2_look

on_actor_dist_ge_nvis = 10 | walker@freedom ;если дистанция до игрока > 8 без проверки на видимость | возврат в первую схему

meet = meet

 

[meet]

close_snd_hello = zat_a2_stalker_barmen_greeting ; озвучка - приветствие, без звука - nil

close_snd_bye = zat_a2_stalker_barmen_farewell ; озвучка - прощание, без звука - nil

close_anim = guard_na

close_victim = actor

far_anim = nil

far_victim = nil

close_distance = 2

far_distance = 0

close_snd_distance = 3

abuse = false

;use = {=actor_has_item(detector_advanced)} true, false ;условие диалога -есть детектор"медведь" -говорит

use = true

allow_break = false

meet_on_talking = false

 

[wounded]

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

 

[danger]

ignore_distance = 0

ignore_distance_grenade = 0

ignore_distance_corpse = 0

ignore_distance_hit = 0

ignore_distance_sound = 0

 

[hit]

 

[death]

 

 

Сами понимаете, что если сразу двоих сделаете - передерутся и

долговец скорее всего победит - надо кому-нибудь группировку сменить.

 

Создание эксклюзивного сквада из трех человек.

Сперва создадим три специфик-характера для нашего сквада;

<specific_character id="zat_a1_stalker_cop" team_default="1">

<name>st_zat_a1_stalker_cop_name</name>

<icon>ui_inGame2_Gluhar</icon>

<map_icon x="1" y="0">

</map_icon>

<bio>Опытный сталкер. Детальная информация отсутствует.</bio>

<class>zat_a1_stalker_cop</class>

<community>stalker</community>

<terrain_sect>stalker_terrain</terrain_sect>

<snd_config>characters_voice\human_02\stalker\</snd_config>

<rank>55</rank>

<reputation>0</reputation>

<money min="8000" max="8000" infinitive="0" />

<visual>actors\stalker_neutral\stalker_neutral_2_face_2</visual>

 

<supplies>

[spawn] \n

wpn_ak74u \n

ammo_5.45x39_fmj = 1 \n

wpn_pm \n

ammo_9x18_pmm = 1 \n

 

#include "gameplay\character_items_nd.xml"

#include "gameplay\character_food.xml"

#include "gameplay\character_drugs_2.xml"

</supplies>

#include "gameplay\character_criticals_4.xml"

 

<start_dialog>zat_b38_stalker_cop_start_dialog</start_dialog>

 

<actor_dialog>zat_a2_stalker_barmen_b7_actor_start</actor_dialog>

<actor_dialog>zat_b38_stalker_cop_task_dialog</actor_dialog>

<actor_dialog>zat_b38_cop_about_himself_dialog</actor_dialog>

<actor_dialog>zat_b38_stalker_cop_b52_about_nimble</actor_dialog>

<actor_dialog>zat_b38_stalker_cop_b52_about_snag</actor_dialog>

<actor_dialog>zat_b38_stalker_cop_about_sci_guards</actor_dialog>

<actor_dialog>zat_b38_stalker_cop_about_sci_helpers</actor_dialog>

 

<actor_dialog>actor_break_dialog</actor_dialog>

 

</specific_character>

 

<!---------------------------------------------------------------------------------------------------->

<specific_character id="zat_a1_helper_1" team_default="1">

<name>zat_a1_helper_1_name</name>

<icon>ui_inGame2_neutral_2</icon>

<map_icon x="1" y="0">

</map_icon>

<bio>Опытный сталкер. Детальная информация отсутствует.</bio>

 

<class>zat_a1_helper_1</class>

<community>stalker</community>

<terrain_sect>stalker_terrain</terrain_sect>

<snd_config>characters_voice\human_03\stalker\</snd_config>

 

<rank>35</rank>

<reputation>0</reputation>

 

<visual>actors\stalker_neutral\stalker_neutral_2</visual>

<supplies>

 

[spawn] \n

wpn_binoc \n

detector_advanced = 1 \n

device_torch \n

wpn_mp5 \n

wpn_beretta = 1 \n

ammo_9x19_fmj = 1 \n

af_fireball = 1 \n

 

</supplies>

<start_dialog>zat_b53_artefact_hunter_1_gathering_artefacts</start_dialog>

#include "gameplay\character_criticals_4.xml"

 

#include "gameplay\character_dialogs_no_guide.xml"

</specific_character>

 

<!--------------------------------------------------------------------------------------------------->

<specific_character id="zat_a1_helper_2" team_default="1">

<name>zat_a1_helper_2_name</name>

<icon>ui_inGame2_neutral_1</icon>

<map_icon x="1" y="0">

</map_icon>

<bio>Опытный сталкер. Детальная информация отсутствует.</bio>

 

<class>zat_a1_helper_2</class>

<community>stalker</community>

<terrain_sect>stalker_terrain</terrain_sect>

<snd_config>characters_voice\human_02\stalker\</snd_config>

 

<rank>20</rank>

<reputation>0</reputation>

 

<visual>actors\stalker_neutral\stalker_neutral_1</visual>

<supplies>

 

[spawn] \n

wpn_toz34 \n

ammo_12x70_buck = 1 \n

wpn_pm \n

ammo_9x19_fmj = 1 \n

medkit = 1 \n

 

#include "gameplay\character_items_nd.xml"

#include "gameplay\character_food.xml"

</supplies>

 

<start_dialog>zat_b53_artefact_hunter_2_gathering_artefacts</start_dialog>

 

#include "gameplay\character_criticals_4.xml"

#include "gameplay\character_dialogs.xml"

</specific_character>

 

<!----------------------------------------------------------------------------------------------------->

 

 

<character id="zat_a1_stalker_cop">

<class>zat_a1_stalker_cop</class>

</character>

 

<character id="zat_a1_helper_1">

<class>zat_a1_helper_1</class>

</character>

 

<character id="zat_a1_helper_2">

<class>zat_a1_helper_2</class>

</character>

 

 

;------------------трое из ларца---------------------

[zat_a1_stalker_cop]:stalker

$spawn = "respawn\zat_a1_stalker_cop"

character_profile = zat_a1_stalker_cop

spec_rank = regular

community = stalker

story_id = zat_a1_stalker_cop

 

[zat_a1_helper_1]:stalker

$spawn = "respawn\zat_a1_helper_1"

character_profile = zat_a1_helper_1

spec_rank = regular

community = stalker

story_id = zat_a1_helper_1

 

[zat_a1_helper_2]:stalker

$spawn = "respawn\zat_a1_helper_2"

character_profile = zat_a1_helper_2

spec_rank = regular

community = stalker

story_id = zat_a1_helper_2

 

 

Создаем сквад

; Здесь содержатся дескрипшены сквадов, которые потом можно создавать используя спец функции.

[zat_a1_brigada_squad]:online_offline_group

faction = stalker

target_smart = zat_a1

spawn_point = zat_a1_walker_3_walk

npc = zat_a1_stalker_cop, zat_a1_helper_1, zat_a1_helper_2

 

 

;--------- ZATON UNIQUE SQUADS --------

[zat_a1_brigada_squad]:default_squad

sim_avail = false

 

 

А теперь внимание! Мы не будем прописывать наш сквад в стартовую позицию Затона

т.к. спавнить будем функцией "create_squad" которую поместим в логику спейс-рестриктора.

Это будет альтернативой всеми нами любимого скрипта alife():create(".....")

Для этого создадим спейс-рестриктор в олл.спавне

[20000]

; cse_abstract properties

section_name = space_restrictor

name = zat_a1_spawner

position = 244.724090576172,18.1142883300781,530.155517578125

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 292

distance = 0

level_vertex_id = 1385170

object_flags = 0xffffff3e

custom_data = <<END

[logic]

cfg = scripts\zaton\zat_a1_spawner.ltx

END

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 1

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

 

Секцию можно воткнуть и в начало файла. Место расположения рестриктора

чуть вперед от начальной точки спавна актора в начале игры между

наклоненным сухим деревом и камнем, чтобы сработала логика, надо

пройти между ними.

Создаем логику рестриктора:

[logic]

active = sr_idle@spawn_stalker

 

[sr_idle@spawn_stalker]

on_info = {=actor_in_zone(zat_a1_spawner)} sr_idle@item_spawn %=create_squad(zat_a1_brigada_squad:zat_a1)%

 

[sr_idle@item_spawn]

on_game_timer = 150 | sr_idle@nil %=spawn_object(disel_generator:zat_a1_walker_4_walk)%

 

[sr_idle@nil]

 

 

В логику рестриктора добавил еще функцию "spawn_object" для спавна предметов

(кому-то на голову свалится дизель-генератор через 15 секунд после спавна сквада)

Так-же обратите внимание на то что в логике рестриктора можно указать или смарт-террейн

для спавна(zat_a1_brigada_squad:zat_a1) или точку пути (disel_generator:zat_a1_walker_4_walk).

 

Пока все. Собираем - запускаем - наблюдаем.

Логику чувакам пока не подключал - делается так-же как и для одиночного эксклюзива.

Но пока стоит обратить внимание на то, что и без логики, если у командира сквада

нормальные диалоги с инфопоршнями и прочим для выдачи квестов, то и дефолтная пойдет

для простых сцен.

 

 

Смарт-каверы в ЗП.

Применяются в основном в двух случаях:

1.- вместо точек путей в логике эксклюзивов.

2.- для кампов - посиделки у костра.

Начнем с посиделок.Добавим в олл.спавн в зону нужного нам смарт-террейна

несколько смарт-каверов и камп-зону

[20001]

; cse_abstract properties

section_name = camp_zone

name = zat_a1_camp

position = 241.788421630859,14.009066619873,467.594360351563

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 6

distance = 0

level_vertex_id = 1382565

object_flags = 0xffffff3e

custom_data = <<END

[camp]

cfg = scripts\camp.ltx

END

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 5.84479999542236

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

 

[20002]

; cse_abstract properties

section_name = smart_cover

name = zat_a1_animpoint_1

position = 241.788421630859,14.009066619873,466.594360351563

direction = 0,3.13,0

 

; cse_alife_object properties

game_vertex_id = 6

distance = 0

level_vertex_id = 1382565

object_flags = 0xffffffbf

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 2

 

; cse_smart_cover properties

cse_smart_cover__unk1_sz = animpoint_sit_low

cse_smart_cover__unk2_f32 = 0

enter_min_enemy_distance = 15

exit_min_enemy_distance = 10

 

; se_smart_cover properties

last_description = animpoint_sit_low

loopholes = animpoint_sit_low,1

 

 

[20003]

; cse_abstract properties

section_name = smart_cover

name = zat_a1_animpoint_2

position = 240.788421630859,14.009066619873,468.594360351563

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 6

distance = 0

level_vertex_id = 1382565

object_flags = 0xffffffbf

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 2

 

; cse_smart_cover properties

cse_smart_cover__unk1_sz = animpoint_sit_low

cse_smart_cover__unk2_f32 = 0

enter_min_enemy_distance = 15

exit_min_enemy_distance = 10

 

; se_smart_cover properties

last_description = animpoint_sit_low

loopholes = animpoint_sit_low,1

 

 

[20004]

; cse_abstract properties

section_name = smart_cover

name = zat_a1_animpoint_3

position = 242.788421630859,14.009066619873,468.594360351563

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 6

distance = 0

level_vertex_id = 1382565

object_flags = 0xffffffbf

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 2

 

; cse_smart_cover properties

cse_smart_cover__unk1_sz = animpoint_sit_low

cse_smart_cover__unk2_f32 = 0

enter_min_enemy_distance = 15

exit_min_enemy_distance = 10

 

; se_smart_cover properties

last_description = animpoint_sit_low

loopholes = animpoint_sit_low,1

 

 

Все - лагерь для посиделок готов, собираем все с предыдущими наработками.

Важный момент - шейп камп-зоны должен покрывать смарт-каверы, иначе получатся

слишком скучные посиделки - не будут травить анекдоты и прочее.

За направление взгляда отвечает дирекшн смарт-кавера.

 

p.s. Вот еще кое-что нашел:

Создание места для сна в ЗП на добавленных локациях.

Разместим секцию спейс-рестриктора в олл.спавне(привязка имени к

определенному смарт-террейну(esc_b1) не обязательна но желательна для ясности)

[15001]

; cse_abstract properties

section_name = space_restrictor

name = bar_dolg_bunker_sr_sleep

position = 219.5344470977783,-5.39998846054077,123.680816650391

direction = 0,0,0

version = 0x7c

script_version = 8

 

; cse_alife_object properties

game_vertex_id = 2746

distance = 0

level_vertex_id = 54650

object_flags = 0xffffff3e

custom_data = <<END

[story_object]

story_id = bar_dolg_bunker_sr_sleep_id

 

[logic]

cfg = scripts\sr_sleep.ltx

END

 

; cse_shape properties

shapes = shape0

shape0:type = box

shape0:axis_x = 5.02119588851929,0,0

shape0:axis_y = 0,5.0482006072998,0

shape0:axis_z = 0,0,2.23479747772217

shape0:offset = 0,0,0

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

 

Регистрируем наше койкоместо в скриптах.

;стр.-288

local sleep_zones_tbl =

{

{target = "marsh_baza_sr_sleep_id", hint = "st_ui_pda_sleep_place"},

{target = "marsh_baza_sr_sleep_kazarm_id", hint = "st_ui_pda_sleep_place"},

{target = "zat_a2_sr_sleep_id", hint = "st_ui_pda_sleep_place"},

{target = "jup_a6_sr_sleep_id", hint = "st_ui_pda_sleep_place"},

{target = "pri_a16_sr_sleep_id", hint = "st_ui_pda_sleep_place"},

{target = "esc_b1_sr_sleep_id", hint = "st_ui_pda_sleep_place"},

{target = "bar_dolg_bunker_sr_sleep_id", hint = "st_ui_pda_sleep_place"},

}

 

function fill_primary_objects()

 

 

;стр.-2846

function sleep(actor, npc)

local sleep_zones = {

"zat_a2_sr_sleep",

"jup_a6_sr_sleep",

"pri_a16_sr_sleep",

"esc_b1_sr_sleep",

"marsh_baza_sr_sleep",

"marsh_baza_sr_sleep_kazarm",

"bar_dolg_bunker_sr_sleep",

"actor_surge_hide_2"

}

 

for k,v in pairs(sleep_zones) do

 

 

 

Создание укрытия от выброса - surge_hide :

Пропишем нужному нам смарт-терейну укрытие

[esc_sim_13]:default

surge = 1 ; прописали возможность укрытия

territory = 1

sim_avail = true

 

 

Регистрируем наше укрытие

;escape

esc_surge_hide_sim_13

 

 

Зарегистрируем нашу локацию в скриптах

--'******************************************************

--'* Реестр смарт-террейнов. Игровое поле симуляции.

--'******************************************************

 

--' В этом ltx хранятся дескрипторы сквадов.

squad_ltx = system_ini()

setting_ini = ini_file("misc\\simulation.ltx")

 

local group_id_by_levels = {zaton = 1,

pripyat = 2,

jupiter = 3,

labx8 = 4,

jupiter_underground = 5,

escape = 6}

 

 

строка 1196

function surge_stats()

local sim_obj_registry = simulation_objects.get_sim_obj_registry().objects

local sim_squads = {

["zaton"] = {},

["jupiter"] = {},

["pripyat"] = {},

["escape"] = {}

}

local sim_smarts = {

["zaton"] = {},

["jupiter"] = {},

["pripyat"] = {},

["escape"] = {}

}

строка 1241

print_smarts_and_squads_by_level("zaton")

print_smarts_and_squads_by_level("jupiter")

print_smarts_and_squads_by_level("pripyat")

print_smarts_and_squads_by_level("escape")

 

 

строка 38

self.levels_respawn = {zaton = false, jupiter = false, pripyat = false, escape = false}

строка 194

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_after_surge")

elseif(level.name()=="jupiter") then

xr_sound.set_sound_play(db.actor:id(), "jup_a6_stalker_medik_after_surge")

elseif not has_alife_info("pri_b305_fifth_cam_end") then

xr_sound.set_sound_play(db.actor:id(), "pri_a17_kovalsky_after_surge")

elseif(level.name()=="escape") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_after_surge")

строка 249

if(level.name()=="zaton") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_2")

elseif(level.name()=="jupiter") then

xr_sound.set_sound_play(db.actor:id(), "jup_a6_stalker_medik_phase_2")

elseif not has_alife_info("pri_b305_fifth_cam_end") then

xr_sound.set_sound_play(db.actor:id(), "pri_a17_kovalsky_surge_phase_2")

elseif(level.name()=="escape") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_2")

строка 273

if(level.name()=="zaton") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_1")

elseif(level.name()=="jupiter") then

xr_sound.set_sound_play(db.actor:id(), "jup_a6_stalker_medik_phase_1")

elseif not has_alife_info("pri_b305_fifth_cam_end") then

xr_sound.set_sound_play(db.actor:id(), "pri_a17_kovalsky_surge_phase_1")

elseif(level.name()=="escape") then

xr_sound.set_sound_play(db.actor:id(), "zat_a2_stalker_barmen_surge_phase_1")

строка 329

self.levels_respawn = {zaton = true, jupiter = true, pripyat = true, escape = true}

строка 352

self.levels_respawn = {zaton = true, jupiter = true, pripyat = true, escape = true}

строка 638

packet:w_bool(self.levels_respawn.zaton)

packet:w_bool(self.levels_respawn.jupiter)

packet:w_bool(self.levels_respawn.pripyat)

packet:w_bool(self.levels_respawn.escape)

строка 665

self.levels_respawn.zaton = packet:r_bool()

self.levels_respawn.jupiter = packet:r_bool()

self.levels_respawn.pripyat = packet:r_bool()

self.levels_respawn.escape = packet:r_bool()

 

 

переходим к олл.спавн - создаем секцию укрытия

[xxxx]

; cse_abstract properties

section_name = space_restrictor

name = esc_surge_hide_sim_13

position = -11.2279901504517,2.46390247344971,57.3380393981934

direction = 0,0,0

version = 0x7c

script_version = 8

 

; cse_alife_object properties

game_vertex_id = 934

distance = 0

level_vertex_id = 3366

object_flags = 0xffffff3e

 

; cse_shape properties

shapes = shape0

shape0:type = box

shape0:axis_x = 3.27519989013672,0,0

shape0:axis_y = 0,5.44060039520264,0

shape0:axis_z = 0,0,7.41159915924072

shape0:offset = 0,0,0

 

; cse_alife_space_restrictor properties

restrictor_type = 0

 

 

Создаем точки пути по колличеству мест в укрытии

[esc_sim_13_surge_1_look]

points = p0

p0:name = name00

p0:position = -11.0934257507324,2.45600557327271,56.0012626647949

p0:game_vertex_id = 1051

p0:level_vertex_id = 286804

 

 

[esc_sim_13_surge_1_walk]

points = p0

p0:name = name00

p0:position = -12.587254524231,2.45982217788696,54.6062545776367

p0:game_vertex_id = 1051

p0:level_vertex_id = 284937

 

 

[esc_sim_13_surge_2_look]

points = p0

p0:name = name00

p0:position = -11.7026491165161,2.45731353759766,55.4043731689453

p0:game_vertex_id = 1051

p0:level_vertex_id = 285862

 

 

[esc_sim_13_surge_2_walk]

points = p0

p0:name = name00

p0:position = -11.7085494995117,2.45401954650879,54.6906051635742

p0:game_vertex_id = 1051

p0:level_vertex_id = 285861

 

 

[esc_sim_13_surge_3_look]

points = p0

p0:name = name00

p0:position = -11.700403213501,2.46191310882568,55.9261016845703

p0:game_vertex_id = 1051

p0:level_vertex_id = 285863

 

 

[esc_sim_13_surge_3_walk]

points = p0

p0:name = name00

p0:position = -10.5211238861084,2.45401906967163,54.5706977844238

p0:game_vertex_id = 1051

p0:level_vertex_id = 287736

 

 

[esc_sim_13_surge_4_look]

points = p0

p0:name = name00

p0:position = -12.1378507614136,2.46710777282715,55.9775772094727

p0:game_vertex_id = 1051

p0:level_vertex_id = 285863

 

 

[esc_sim_13_surge_4_walk]

points = p0

p0:name = name00

p0:position = -12.5659475326538,2.4704270362854,55.9364585876465

p0:game_vertex_id = 1051

p0:level_vertex_id = 284939

 

 

[esc_sim_13_surge_5_look]

points = p0

p0:name = name00

p0:position = -11.3268537521362,2.45915699005127,56.0716171264648

p0:game_vertex_id = 1051

p0:level_vertex_id = 286804

 

 

[esc_sim_13_surge_5_walk]

points = p0

p0:name = name00

p0:position = -11.4233283996582,2.45504951477051,55.4901466369629

p0:game_vertex_id = 1051

p0:level_vertex_id = 286803

 

 

[esc_sim_13_surge_6_look]

points = p0

p0:name = name00

p0:position = -11.951548576355,2.46743059158325,56.5034790039063

p0:game_vertex_id = 1051

p0:level_vertex_id = 285864

 

 

[esc_sim_13_surge_6_walk]

points = p0

p0:name = name00

p0:position = -10.5399560928345,2.45401906967163,55.9832763671875

p0:game_vertex_id = 1051

p0:level_vertex_id = 287738

 

 

[esc_sim_13_surge_7_look]

points = p0

p0:name = name00

p0:position = -11.060601234436,2.46146583557129,56.6575355529785

p0:game_vertex_id = 1051

p0:level_vertex_id = 286805

 

 

[esc_sim_13_surge_7_walk]

points = p0

p0:name = name00

p0:position = -12.5727767944336,2.47284889221191,57.334114074707

p0:game_vertex_id = 1051

p0:level_vertex_id = 284941

 

 

[esc_sim_13_surge_8_look]

points = p0

p0:name = name00

p0:position = -11.7709636688232,2.46654939651489,57.2202682495117

p0:game_vertex_id = 1051

p0:level_vertex_id = 285865

 

 

[esc_sim_13_surge_8_walk]

points = p0

p0:name = name00

p0:position = -11.6660528182983,2.4660382270813,56.7951736450195

p0:game_vertex_id = 1051

p0:level_vertex_id = 285864

 

 

[esc_sim_13_surge_9_look]

points = p0

p0:name = name00

p0:position = -11.4014568328857,2.4647479057312,57.3022918701172

p0:game_vertex_id = 1051

p0:level_vertex_id = 286806

 

 

[esc_sim_13_surge_9_walk]

points = p0

p0:name = name00

p0:position = -10.5875377655029,2.46077871322632,57.3240737915039

p0:game_vertex_id = 1051

p0:level_vertex_id = 287740

 

 

[esc_sim_13_surge_10_look]

points = p0

p0:name = name00

p0:position = -12.009449005127,2.47024631500244,58.7685432434082

p0:game_vertex_id = 1051

p0:level_vertex_id = 285867

 

 

[esc_sim_13_surge_10_walk]

points = p0

p0:name = name00

p0:position = -12.5359506607056,2.47053003311157,58.6904754638672

p0:game_vertex_id = 1051

p0:level_vertex_id = 284943

 

 

[esc_sim_13_surge_11_look]

points = p0

p0:name = name00

p0:position = -11.6696643829346,2.47010707855225,58.7928047180176

p0:game_vertex_id = 1051

p0:level_vertex_id = 285867

 

 

[esc_sim_13_surge_11_walk]

points = p0

p0:name = name00

p0:position = -11.7617807388306,2.47143888473511,58.0255508422852

p0:game_vertex_id = 1051

p0:level_vertex_id = 285866

 

 

[esc_sim_13_surge_12_look]

points = p0

p0:name = name00

p0:position = -11.1556959152222,2.46973323822021,58.9260101318359

p0:game_vertex_id = 1051

p0:level_vertex_id = 286808

 

 

[esc_sim_13_surge_12_walk]

points = p0

p0:name = name00

p0:position = -10.5822420120239,2.46985769271851,58.7564964294434

p0:game_vertex_id = 1051

p0:level_vertex_id = 287742

 

 

Изменено пользователем nuklia

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да вроде все так делаю ну из одной точки у меня все равно лезут копии сквадов и получется месиво большое :wacko2:

Изменено пользователем БолотныйДоктор

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуй удалить все секции респавнов во всех смартах в тех файлах, что выкладывал - с твоими

смартами сплошная бойня на кордоне - одних убивают, вместо них новые респавнятся, у них и времени

то нет до работ в гулагах дойти. Да еще и тормозит из-за столпотворения.

Так не стоит заселять локации, не получится мало-мальский сюжетец создать. Заселяй эксклюзивными

сквадами, а респавн делай с условием, чтобы не плодились бесконтрольно.

Кстати у меня тоже на кордоне половина спавнится в тоннеле возле блокпоста, хотя им прописаны

конкретные точки спавна - почему так происходит, я так и не понял, потому некоторых ответственных

товарищей спавнил через олл.спавн.

Изменено пользователем nuklia

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!


Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.


Войти

  • Пользователи, читающие эту тему   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.