Перейти к контенту

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


Halford

Рекомендуемые сообщения

Всем доброго времени суток! перенёс в ЗП из ЧН Лиманск и хочу там добавить "водную преграду под напряжением" (как было в ЧН). Логику взял из ЧН (немного переделал):

[logic]



active = sr_idle

[sr_idle]
on_actor_inside = %=hit_actor(0.5)% sr_idle@pause
on_info = {+lim_electro_fence_off} sr_idle@nil

[sr_idle@pause]
on_timer = 250 | sr_idle
on_info = {+lim_electro_fence_off} sr_idle@nil

[sr_idle@nil]

 

Получаю вылет из-за %=hit_actor(0.5)%, может кто подскажет, есть ли в ЗП этому альтернатива?

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


Ссылка на сообщение

Всех приветствую! Подскажите по такому вопросу: подключил через программу от AMK подземку агропрома к ЗП, заспавнил там полтергейста при вхождении в рестриктор 

[logic]



active = sr_idle@line_0

[sr_idle@line_0]
on_info = {=actor_in_zone(agru_poltergeist_end_spawns)} sr_idle@line_1 %=spawn_object(agru_end_poltergeist_1:agru_poltergeist_end_1_walk:0)%

[sr_idle@line_1]

прописал ему пути движения

[agru_poltergeist_end_1_walk]

points = p0,p1,p2,p3,p4,p5

p0:name = name00

p0:position = 32.048828125,2.817538022995,34.4098777770996

p0:game_vertex_id = 2445

p0:level_vertex_id = 881

p0:links = p1(1)


p1:name = name01

p1:position = 32.0403099060059,2.72568011283875,30.8439044952393

p1:game_vertex_id = 2445

p1:level_vertex_id = 861

p1:links = p2(1)


p2:name = name02

p2:position = 29.9009552001953,2.75595903396606,29.1305198669434

p2:game_vertex_id = 2445

p2:level_vertex_id = 735

p2:links = p3(1)


p3:name = name03

p3:position = 26.9271583557129,2.88915205001831,30.27414894104

p3:game_vertex_id = 2445

p3:level_vertex_id = 532

p3:links = p4(1)

p4:name = name04

p4:position = 26.8617248535156,2.98077797889709,33.7313804626465

p4:game_vertex_id = 2445

p4:level_vertex_id = 552

p4:links = p5(1)


p5:name = name05

p5:position = 29.6680488586426,2.93270897865295,35.6558265686035

p5:game_vertex_id = 2445

p5:level_vertex_id = 719

p5:links = p0(1)

но он всё равно гоняется за ГГ по всей локации (то есть, не "соблюдает" свои пути движения). Как это можно испраить? (или я может чего не правильно делаю?). Логика полтергейста

[logic]
active = mob_walker

[mob_walker]
path_walk = agru_poltergeist_end_1_walk
braindead = true
actor_friendly = true
npc_friendly = true
on_actor_dist_le = 3 | mob_walker@attack

 

[mob_walker@attack]
path_walk = agru_poltergeist_end_1_walk
on_actor_dist_ge = 3 | mob_walker

 

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

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


Ссылка на сообщение

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

[logic]


active = mob_home

[mob_home]
path_home = agru_poltergeist_end_1_walk
braindead = true
actor_friendly = true
npc_friendly = true
home_min_radius = 4
home_max_radius = 5
on_actor_not_in_zone = agru_poltergeist_attak | %=polter_actor_ignore(true)%
on_info = {=actor_in_zone(agru_poltergeist_attak)} %=polter_actor_ignore(false)%
on_actor_dist_le = 3 | mob_home@attack


[mob_home@attack]
path_home = agru_poltergeist_end_1_walk
home_min_radius = 4
home_max_radius = 5
on_actor_dist_ge = 3 | mob_home

  Подскажите ещё по такому вопросу: на одном из форумов вычитал, что при подключении новых локаций на старых сбивается сетка кординат, правда ли это или нет? (я подключал локи через прогу от AMK)

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

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


Ссылка на сообщение

Всех приветствую! Подскажите как "работать" с enable/disable_level_changer (я так понял с помощью enable/disable_level_changer можно "разрешать/запрещать" переход (Подключил тёмную долину и даркскейп к ЗП, в скриптах локи зарегистрировал)). Сделал так:

[10997]

; cse_abstract properties
section_name = level_changer
name = val_to_desc_1
position = -44.5999984741211,1.79999995231628,-547.499877929688
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 1823
distance = 4.90000009536743
level_vertex_id = 119640
object_flags = 0xffffff3e

custom_data = <<<END
[story_object]
story_id = val_to_desc_1
END

; cse_shape properties
shapes = shape0
shape0:type = box
shape0:axis_x = 12.9620018005371,0,0
shape0:axis_y = 0,5.50719976425171,0
shape0:axis_z = 0,0,4.48839998245239
shape0:offset = 0,0,0

; cse_alife_space_restrictor properties
restrictor_type = 3

; cse_alife_level_changer properties
dest_game_vertex_id = 3763
dest_level_vertex_id = 47755
dest_position = -404.020355224609,1.17996001243591,624.253295898438
dest_direction = 0.00435000006109476,-2.5,0.00658199982717633
dest_level_name = darkscape
dest_graph_point = desc_graph_point_actor_spawn_3
silent_mode = 1

; se_level_changer properties

 

 

[10998]
; cse_abstract properties
section_name = space_restrictor
name = close_level_changer
position = 140.048614501953,-1.00104403495789,48.9994010925293
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = 1677
distance = 0
level_vertex_id = 309793
object_flags = 0xffffff3e
custom_data = <<END

 

[logic]
active = sr_idle@start

[sr_idle@start]
on_info = sr_idle@close1 %=disable_level_changer(val_to_desc_1)%

[sr_idle@close1]
on_info = {+svoboda_leader_task_complete} sr_idle@end %=enable_level_changer(val_to_desc_1)%

[sr_idle@end]
END

; cse_shape properties
shapes = shape0
shape0:type = sphere
shape0:offset = 0,0,0
shape0:radius = 2.5191171169281

; cse_alife_space_restrictor properties
restrictor_type = 3

Но переход работает в любом случае, скажите, что я делаю не так. (В xr_effects.script функции раскомментировал).


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


Ссылка на сообщение

@makdm, там так и написано, просто, когда сюда писал - интернет глючил, вот и вышло <<< вместо << :)

@Charsi, делел так - бесполезно.

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


Ссылка на сообщение

Всех приветствую! Я решил попробовать в тестовом варианте начать заселять подключенные к ЗП болота, и сразу появились несколько глупых вопросов.

1. Как заставить нпс озвучивать приветствие: заспавнил проводника с такой логикой:

[logic@mar_intro_guide]



active = walker@guider
prior = 200
suitable = {=check_npc_name(mar_intro_guide)} true
level_spot = guider

[walker@guider]
path_walk = guide_intro_walk
path_look = guide_intro_look
def_state_standing = guard_na

on_actor_dist_le = 10 | walker@guider_hello

meet = no_meet
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
use_camp = false
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[walker@guider_hello]
path_walk = guide_intro_walk
path_look = guide_intro_look
def_state_standing = hello_wpn
meet = meet@guide
on_actor_dist_ge = 10 | walker@guider
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
invulnerable = true
use_camp = false
gather_items_enabled = false
help_wounded_enabled = false
corpse_detection_enabled = false

[meet@guide]
close_snd_hello = mar_csky_guider_meet_hello
close_snd_bye = nil
close_anim = nil
close_victim = actor
far_anim = guard_na
far_victim = actor
close_distance = 0
far_distance = 10
trade_enable = false
allow_break = false
close_snd_distance = 3
use = {=actor_enemy} false, true
meet_on_talking = false
meet_dialog = mar_csky_guider_intro_dialog

но он молчит как партизан и не воспроизводит mar_csky_guider_meet_hello, хотя в script_sound_marsh звуки прописаны, что я делаю не так?

2. Насчёт посиделок у костра. Можно ли как-нибудь сделать, чтоб сталкерки не только играли на гитаре, травили анекдоты, но и в это же время ели колбаску и пили водку у костра (как в ЧН).

Как я понял в ЗП нет анимпойнта sit_ass? (sit_low беру, но сталкерки сидят как бы в воздухе, смотрится некрасиво)
Как я понял для посиделок у костра можно не прописывать логику нпс? И ещё вопрос по скавадм: хочу у костра посадить 8 нпс, как лучше сделать, всех восмирых спавнить 1 сквадом или несколькими? (я новичок в этом деле, пожалуйста, не пинайте особо за тупые вопросы :) )

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

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


Ссылка на сообщение

Опишу как я добавил мост в Лиманск из ЧН в ЗП. (все манипуляции проводил на стимовской лицензии ЗП!) Понадобятся файлы из чн: configs\misc\bridge.ltx - можно сразу скопировать по аналогичному пути в ЗП (секцию agru_door, если не иползуется, можно удалить); далее понадобятся фйлы bind_red_forest_bridge.script, db.script и xr_effects.script из папки scripts. Теперь переходим в ЗП. Копируем bind_red_forest_bridge.script в папку gamedata\scripts, Далее правим аналогичные ЧН-овским скрипты ЗП: в db.script переносим аналогично из ЧН-овского:

bridge_by_name = {}

и вниз пишем функции

function add_bridge( bridge, binder )
printf("adding bridge %s",bridge:name())
bridge_by_name[bridge:name()] = binder
add_obj( bridge )
end

function del_bridge( bridge )
bridge_by_name[bridge:name()] = nil
del_obj( bridge )
end

 

Теперь правим xr_effects.script:

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

function bridge_down()
db.bridge_by_name["red_bridge"]:anim_forward()
end
function bridge_up()
db.bridge_by_name["red_bridge"]:anim_backward()
end
function bridge_stop()
db.bridge_by_name["red_bridge"]:anim_stop()
end

function anim_obj_down(actor, npc, p)
if p[1] ~= nil then
db.anim_obj_by_name[p[1]]:anim_forward()
end
end
function anim_obj_up(actor, npc, p)
if p[1] ~= nil then
db.anim_obj_by_name[p[1]]:anim_backward()
end
end
function anim_obj_stop(actor, npc, p)
if p[1] ~= nil then
db.anim_obj_by_name[p[1]]:anim_stop()
end
end

 

Спавним сам мост:

; cse_abstract properties
section_name = red_forest_bridge
name = red_bridge
position = -144.884460449219,10.0784387588501,-270.569519042969
direction = 0,0,0

; cse_alife_object properties
game_vertex_id = ваш вертекс
distance = 0
level_vertex_id = ваш левел вертекс
object_flags = 0xffffff3a
custom_data = <[collide]
ignore_static
[animated_object]
END

; cse_visual properties
visual_name = dynamics\scene_objects\red_forest\red_forest_bridge_01_dynamic

; cse_ph_skeleton properties
skeleton_name = bridge_down
skeleton_flags = 1

; cse_alife_object_physic properties
physic_type = 0x3
mass = 10

 

ну и прописываем в acdc (если нету) red_forest_bridge   => 'cse_alife_object_physic', чтоб запаковать спавн. Запускаем игру и видим наш мост:

 

Для управления мостом используем для примера логику из ЧН (это пока лично не проверял, т.к. ещё руки недошли):

[logic]

active = sr_idle

[sr_idle]
on_info = sr_idle@1 %=bridge_up()% ; =turn_off(513)%

[sr_idle@1]
on_info = {+red_bridge_bridge_move -red_bridge_down_done} sr_idle@2 %=bridge_down()% ; =turn_on(513)%

[sr_idle@2]
on_info = {-red_bridge_bridge_move -red_bridge_down_done} sr_idle@1 %=bridge_stop()% ; =turn_off(513)%

 

Вроде ничего не упустил. Извините, что пишу не по теме, но тут человек спрашивает, я его понимаю, т.к сам довольно долго бился с этим мостом, да и может ещё кому пригодится мой пост.

Изменено пользователем Grif_on
  • Спасибо 1

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


Ссылка на сообщение

Не за что, рад, что помог :) . Забыл указать зарегистрировать bridge.ltx в system.ltx - #include "misc\bridge.ltx". Сразу не посмотрел на предыдущей странице, что @Сталкер Лом то же самое подсказал, но всё же... 

Изменено пользователем Grif_on
  • Нравится 1

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


Ссылка на сообщение

Доброго времени суток! Подключил кордон к ЗП, заспавнил сквад сталкеров, но хочу, чтоб они днём стояли у Ж/Д моста, а ночью уходили в лагерь. Прописал им таргет смарт так: target_smart = {=is_day} esc_smart_terrain_6_8, esc_smart_terrain_5_7, но почему-то сквад не идёт на указанный смарт (и не возвращается на прежний), а прётся к переходу на болота. Подскажите, в чём может быть проблема?

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


Ссылка на сообщение

 @UnLoaded, делал так:

[smart_terrain]


squad_id = 1
max_population = 1

[smart_terrain]
squad_id = 2
max_population = 1

[start_position_escape]
esc_smart_terrain_5_7_stalker_1_squad = esc_smart_terrain_5_7

[esc_smart_terrain_5_7_stalker_1_squad]:default_squad
sim_avail = true

[esc_smart_terrain_5_7_stalker_1_squad]:online_offline_group
faction = stalker
npc = sim_default_stalker_2, sim_default_stalker_1, sim_default_stalker_1, sim_default_stalker_1
target_smart = {=is_day} esc_smart_terrain_6_8, esc_smart_terrain_5_7

 

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


Ссылка на сообщение

@Clayman, локацию зарегистрировал в sim_board.script, smart_terrain.script, surge_manager.script. Сматры в  simulation_objects_props тоже прописаны так:

[esc_smart_terrain_5_7]:default_base
surge = 1
sim_avail = true

 

[esc_smart_terrain_6_8]:default
sim_avail = true

 

Заодно смарты прописал и в game_graphs.ltx

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


Ссылка на сообщение

@Clayman, для пробы заспавнил сквад на Затоне у портовых кранов, а на ночь ему поставил смарт на "Шевченко", и сквад ночью без проблем побрёл на Шевченко. Значит, похоже, косяк нужно искать где-то на поключенной локации.

Ничего понять не могу (я всё разбраюсь насчёт target_smart = {=is_day} esc_smart_terrain_6_8, esc_smart_terrain_5_7) :) Заспавнил ГГ на блокпосту военных, после чего пошёл на смарт под Ж/Д мостом (esc_smart_terrain_6_8) - сквад на месте, где надо. Вернулся на блокпост и поспал до ночи. Снова пошёл к Ж/Д мосту - сквада нет,  добежал до смарта esc_smart_terrain_5_7 - там сквада тоже нет (хотя по логике ночью должен быть там). Пробегал какое-то время по всему кордону - сквада нигде нет. Вернулся на esc_smart_terrain_5_7 - сквад там. Дождался дня. Сквад выдвинулся на выход (на смарт esc_smart_terrain_6_8, подумал я, но решил за ним проследить) - сквад на esc_smart_terrain_6_8 не пошёл, а пошёл тыняться по кордону. Я решил вернуться на военный блокпост и словил вылет:

Expression : !m_error_code
Function : raii_guard::~raii_guard
File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line : 748
Description : ...\stalker call of pripyat\gamedata\scripts\_g.script:479: bad argument #2 to 'format' (string expected, got nil)

(Хотя до этого 2 раза там был и вылета не было). Что я всем этим хочу сказать: почему-то, когда ГГ рядом сквад на нужный смарт не идёт, но когда ГГ "отходит подальше", то через время сквад как бы телепортируется на нужный смарт. Может быть, кто подскажет в чём может быть косяк? Просто хочу разобраться...

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

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


Ссылка на сообщение

@Clayman@warwer, спасибо за ответы. Я для теста спавнил сквады, состоящие из sim_default_military_ , словил тот вылет. Сейчас прописал им "индивидуальные характеры" - вылета не стало. Буду пробовать разобраться со смартами. Если что, извиняйте за глупые вопросы, я ведь только учусь :) .

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


Ссылка на сообщение

@MOnC9lTuHA

 

 

Как создается источник звука в определенной точке?

Можно через спейс рестриктор, например в ЧН включение и выключение звука трансформатора:

 

[logic]
active = sr_idle

[sr_idle]
on_info = sr_idle@2 %=play_sound_looped(lim_electro_fience_transformer)%

[sr_idle@2]
on_info = {+lim_electro_fence_off} nil %=stop_sound_looped(lim_electro_fience_transformer)%

 

 

Если при входе ГГ в рестриктор, то что-то такое:

 

[logic]
active = sr_idle

[sr_idle]
on_actor_inside = sr_idle@line_2 %=play_sound_looped(steam) %

[sr_idle@line_2]
on_actor_outside = sr_idle %=stop_sound_looped(steam)%

 

 

Если в зависимости от неких инфопоршней, то что-то такое:

 

[logic]
active = sr_idle@sound

[sr_idle@sound]
on_info = {+agru_leader_dolg_task_complete} sr_idle@warning %=play_sound_looped(agru_waterfall)%

[sr_idle@warning]
on_info = {+agru_stop_siren} sr_idle@end %=stop_sound_looped()%

[sr_idle@end]

 

 

Сам звук нужно вписать в script_sound_локация.

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


Ссылка на сообщение
Можно поподробнее про спейс рестриктор?

В секции спавна локации создаёшь рестриктор:

 

[8076]

; cse_abstract properties

section_name = space_restrictor

name = lim_electro_transformer_restr

position = 71.1540069580078,18.6341781616211,324.265960693359

direction = 0,-1.57079601287842,1.57079601287842

 

; cse_alife_object properties

game_vertex_id =  гейм вертекс локации

distance = 0

level_vertex_id = левел вертекс локации

object_flags = 0xffffff3e

custom_data = <<END

[logic]

cfg = scripts\limansk\lim_electro_transformer.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

 

 

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

 

play_sound_looped(lim_electro_fience_transformer) - воспроизводимый звук указан в скобках (то есть - lim_electro_fience_transformer), looped - значит звук будет постоянно повторяться. (Название берётся из script_sound_локация.ltx) 

Сам звук регистрируется в script_sound_локация.ltx (например, script_sound_limansk) по пути configs\misc\ примерно так:

 

[list_lim]

lim_electro_fience_transformer

 

[lim_electro_fience_transformer]

type = looped - повторяющийся

path = ambient\special\lim_transformer - путь к самому звуку без расширения из папки sounds. (эти характеристики можно посмотреть в какой-нибудь статье по модингу.)

 

Если звук на новой (подключенной) локации, то сам script_sound_локация.ltx нужно внести в оригинальный script_sound.ltx по аналогии с остальными.

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

Изменено пользователем Grif_on
  • Спасибо 1

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


Ссылка на сообщение

@BoBaH_671, знаешь в чём может быть причины вылета - в путях, а именно: в логике НПС не нужно в точках путей (walk и look) писать название смарта. То есть, в файле с путями название смарта пишется:

([zat_vovan_smart_zat_vovan_stalker_1_look]), а в файле логики НПС - нет:

[walker@zat_vovan_stalker_1]

path_walk = zat_vovan_stalker_1_walk

path_look = zat_vovan_stalker_1_look

Возможно причина вылета в этом.

  • Спасибо 1

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


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

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