Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: denis2000, FantomICW  
Модостроение. Спавн и логика
denis2000Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Спавн и логика

Создание объектов на локации и логика поведения этих объектов

Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (wiki), Lua_help.script, Help из SDK 0.7

Сборник модостроения ЗП v10.10.11 (автор: XOBAH): *.CHM, *.HTML
[cut noguest=Если у вас не открывается файл CHM]Если у вас не открывается файл:
1. Запустите [Пуск]=>[Выполнить] (либо хот-кей [WIN]+[R])
2. Введите команду (без кавычек) "regsvr32 %windir%\system32\hhctrl.ocx"
3. Если вылезло окно об успешном завершении вы все сделали правильно и можете перезагружать компьютер (а может и не надо)
Также: файлы МОГУТ не открываться если в пути к файлу есть: символы кириллицы, "_", "#"
Также: есть не стандартные программы-просмоторщики CHM файлов. Например: FBReader[/cut]

[cut=Где найти лог игры после вылета]Что такое LOG ошибки, и как мне его найти?
Это система отладки происходивших вылетов, которая подается игрой в форме текста, хотя не всегда.
Для того чтоб найти LOG необходимо зайти вот сюда:

В Win хр лог находится:

C:\Documents and Settings\All Users\Документы\S.T.A.L.K.E.R. - Зов Припяти\logs

Затем открываете первый файл в формате TXT, и в нем отбираете с низу 25 строчек. После кидаете эти 25 строчек в сообщение на форум.

В Win7 лог находится C:\Users\Public\Documents\S.T.A.L.K.E.R. - Зов Припяти\logs

Путь к папке с логом можно найти открыв файл fsgame.ltx который находится в корневой директории ЗП, за это отвечает строка:
...
$app_data_root$ = true | false| $fs_root$| users\
(тут мы указываем что папка пользователя, будет хранится рядом с Fsgame.ltx)
...
$logs$ = true| false| $app_data_root$| logs\
(а тут мы указываем что в папке пользователя, в подпапке Logs будут храниться наши логи)
...
[/cut][cut=Получение более подробной информации о вылете (ХОВАН)]
Открываем файл _g.script и ищем такую функцию: function abort(fmt, ...)
Там есть заккомментированная строчка "--error_log(reason)", ее и надо расскомментировать, должно получиться вот так:
Code
function abort(fmt, ...)
                    local reason = string.format(fmt, ...)
                    error_log(reason)
end

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

Первый:
Code
Expression    : !m_error_code
Function      : raii_guard::~raii_guard
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp
Line          : 748
Description   : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:478: bad argument #2 to 'format' (string expected, got nil)

Второй:
Code
Expression    : 0
Function      : ErrorLog
File          : D:\prog_repository\sources\trunk\xrServerEntities\script_engine_script.cpp
Line          : 49
Description   : 'Attempt to read a non-existant string field 'path_walk' in section 'walker@mechanic'

[/cut]


Перед тем, как задать вопрос в этой теме, прочтите все предыдущие страницы,
статьи в wiki по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
denis2000Дата: Ср, 22.06.2016, 09:50 | Сообщение # 1306
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата men_stalker ()
Может ли быть что у [m_trader] вообще нету возможности прописывания логики?

Ну да, а в ТЧ в ЧН и в ЗП в некоторых модах Сидорович без логики работает?
Вы где то упустили важные правки. Смотрите урок, смотрите, как все организовано в ЧН смотрите в конце концов, как перенесен Сидор в модах (например Проект Спектрум, там к стати два варианта на сложном скелете сидящий в каморке и на обычном скелете сталкера, ходящий по локации).


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вс, 24.07.2016, 18:10 | Сообщение # 1307
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Добрый день. Возник такой вопрос.

Поставил смарт-террайн в Зове Припяти. Сделал сквад из 6 сталкеров. Прописал им эксклюзивные работы.

[cut=Сквад]
Цитата
[esc_b1_stalker_guard_squad]:online_offline_group
faction = stalker
npc = esc_b1_stalker_guard_0, esc_b1_stalker_guard_1, esc_b1_stalker_guard_2, esc_b1_stalker_guard_0, esc_b1_stalker_guard_1, esc_b1_stalker_guard_2
target_smart = esc_b1
spawn_point = esc_b1_spawn
story_id = esc_b1_stalker_guard_squad

[esc_b1_stalker_guard_0]:stalker
$spawn = "respawn\esc_b1_stalker_guard_0"
character_profile = sim_default_stalker_0
spec_rank = novice
community = stalker

[esc_b1_stalker_guard_1]:stalker
$spawn = "respawn\esc_b1_stalker_guard_1"
character_profile = sim_default_stalker_1
spec_rank = regular
community = stalker

[esc_b1_stalker_guard_2]:stalker
$spawn = "respawn\esc_b1_stalker_guard_2"
character_profile = sim_default_stalker_2
spec_rank = experienced
community = stalker
[/cut]

[cut=Обычная логика][logic@esc_b1_stalker_guard]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true

[walker@esc_b1_stalker_guard]
meet = meet

[animpoint@esc_b1_stalker_guard]
meet = meet

[remark@esc_b1_stalker_guard]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%

[meet]
abuse = false
allow_break = false
meet_on_talking = false
trade_enable = true
close_distance = 5
close_anim = guard_na
close_victim = actor
use = {!actor_has_weapon !actor_enemy !has_enemy} true, false
snd_on_use = {=actor_has_weapon !actor_enemy} meet_hide_weapon, nil

;

[logic@esc_b1_stalker_guard_1]:logic@esc_b1_stalker_guard
prior = 200
active = walker@esc_b1_stalker_guard_1

[walker@esc_b1_stalker_guard_1]:walker@esc_b1_stalker_guard
path_walk = guard_1_walk
path_look = guard_1_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_1

[remark@esc_b1_stalker_guard_1]:remark@esc_b1_stalker_guard
on_game_timer = 75 | walker@esc_b1_stalker_guard_1 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_2]:logic@esc_b1_stalker_guard
prior = 190
active = walker@esc_b1_stalker_guard_2

[walker@esc_b1_stalker_guard_2]:walker@esc_b1_stalker_guard
path_walk = guard_2_walk
path_look = guard_2_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_2

[remark@esc_b1_stalker_guard_2]:remark@esc_b1_stalker_guard
on_game_timer = 75 | walker@esc_b1_stalker_guard_2 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_3]:logic@esc_b1_stalker_guard
prior = 180
active = walker@esc_b1_stalker_guard_3

[walker@esc_b1_stalker_guard_3]:walker@esc_b1_stalker_guard
path_walk = guard_3_walk
path_look = guard_3_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_3

[remark@esc_b1_stalker_guard_3]:remark@esc_b1_stalker_guard
on_game_timer = 75 | walker@esc_b1_stalker_guard_3 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_4]:logic@esc_b1_stalker_guard
prior = 170
active = walker@esc_b1_stalker_guard_4

[walker@esc_b1_stalker_guard_4]:walker@esc_b1_stalker_guard
path_walk = guard_4_walk
path_look = guard_4_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_4

[remark@esc_b1_stalker_guard_4]:remark@esc_b1_stalker_guard
on_game_timer = 75 | walker@esc_b1_stalker_guard_4 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_5]:logic@esc_b1_stalker_guard
prior = 160
active = animpoint@esc_b1_stalker_guard_5

[animpoint@esc_b1_stalker_guard_5]:animpoint@esc_b1_stalker_guard
cover_name = esc_b1_guard_animpoint_1
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_5

[remark@esc_b1_stalker_guard_5]:remark@esc_b1_stalker_guard
on_game_timer = 75 | animpoint@esc_b1_stalker_guard_5 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_6]:logic@esc_b1_stalker_guard
prior = 150
active = animpoint@esc_b1_stalker_guard_6

[animpoint@esc_b1_stalker_guard_6]:animpoint@esc_b1_stalker_guard
cover_name = esc_b1_guard_animpoint_2
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_6

[remark@esc_b1_stalker_guard_6]:remark@esc_b1_stalker_guard
on_game_timer = 75 | animpoint@esc_b1_stalker_guard_6 %-esc_b1_base_guard%[/cut]

[cut=Логика для выброса][logic@esc_b1_stalker_guard_surge]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true

[walker@esc_b1_stalker_guard_surge]
meet = meet

[remark@esc_b1_stalker_guard_surge]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%

[meet]
abuse = false
allow_break = false
meet_on_talking = false
trade_enable = true
close_distance = 5
close_anim = guard_na
close_victim = actor
use = {!actor_has_weapon !actor_enemy !has_enemy} true, false
snd_on_use = {=actor_has_weapon !actor_enemy} meet_hide_weapon, nil

;

[logic@esc_b1_stalker_guard_surge_1]:logic@esc_b1_stalker_guard_surge
prior = 200
active = walker@esc_b1_stalker_guard_surge_1

[walker@esc_b1_stalker_guard_surge_1]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_1_walk
path_look = guard_surge_1_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_1

[remark@esc_b1_stalker_guard_surge_1]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_1 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_2]:logic@esc_b1_stalker_guard_surge
prior = 190
active = walker@esc_b1_stalker_guard_surge_2

[walker@esc_b1_stalker_guard_surge_2]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_2_walk
path_look = guard_surge_2_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_2

[remark@esc_b1_stalker_guard_surge_2]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_2 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_3]:logic@esc_b1_stalker_guard_surge
prior = 180
active = walker@esc_b1_stalker_guard_surge_3

[walker@esc_b1_stalker_guard_surge_3]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_3_walk
path_look = guard_surge_3_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_3

[remark@esc_b1_stalker_guard_surge_3]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_3 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_4]:logic@esc_b1_stalker_guard_surge
prior = 170
active = walker@esc_b1_stalker_guard_surge_4

[walker@esc_b1_stalker_guard_surge_4]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_4_walk
path_look = guard_surge_4_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_4

[remark@esc_b1_stalker_guard_surge_4]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_4 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_5]:logic@esc_b1_stalker_guard_surge
prior = 160
active = walker@esc_b1_stalker_guard_surge_5

[walker@esc_b1_stalker_guard_surge_5]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_5_walk
path_look = guard_surge_5_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_5

[remark@esc_b1_stalker_guard_surge_5]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_5 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_6]:logic@esc_b1_stalker_guard_surge
prior = 150
active = walker@esc_b1_stalker_guard_surge_6

[walker@esc_b1_stalker_guard_surge_6]:walker@esc_b1_stalker_guard_surge
path_walk = guard_surge_6_walk
path_look = guard_surge_6_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_6

[remark@esc_b1_stalker_guard_surge_6]:remark@esc_b1_stalker_guard_surge
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_6 %-esc_b1_base_guard%[/cut]

[cut=Работы в алл.спавн][449]

; cse_abstract properties
section_name = smart_cover
name = esc_b1_guard_animpoint_1
position = -133.295883178711, -30.1381225585938, -379.260009765625
direction = 0, 3.14159297943115, 0
id = 65535
version = 128
script_version = 12
spawn_id = 790

; cse_alife_object properties
game_vertex_id = 17
distance = 4.1999998
level_vertex_id = 122061
object_flags = 0xffffffbf

; cse_shape properties
shapes = 1
shape_0:type = sphere
shape_0:offset = 0,0,0
shape_0:radius = 2

; cse_smart_cover properties
description = animpoint_sit_low
hold_position_time = 0.62996501
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
is_combat_cover = 1
MP_respawn = 1

; se_smart_cover properties
last_description = animpoint_sit_low
loopholes = animpoint_sit_low, 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[450]

; cse_abstract properties
section_name = smart_cover
name = esc_b1_guard_animpoint_2
position = -133.186416625977, -30.1384048461914, -384.589233398438
direction = 5.40000000910368e-005, 0, -7.00000009601354e-006
id = 65535
version = 128
script_version = 12
spawn_id = 791

; cse_alife_object properties
game_vertex_id = 17
distance = 9.0999994
level_vertex_id = 122056
object_flags = 0xffffffbf

; cse_shape properties
shapes = 1
shape_0:type = sphere
shape_0:offset = 0,0,0
shape_0:radius = 2

; cse_smart_cover properties
description = animpoint_sit_low
hold_position_time = 1.121894
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
is_combat_cover = 1
MP_respawn = 1

; se_smart_cover properties
last_description = animpoint_sit_low
loopholes = animpoint_sit_low, 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[esc_b1_guard_1_look]
points = p0,p1,p2
p0:name = wp00|a=binocular|p=10|t=44000
p0:flags = 0x1
p0:position = -132.189956665039,-30.4367370605469,-328.622436523438
p0:game_vertex_id = 108
p0:level_vertex_id = 122925

p1:name = wp00|a=guard|p=10|t=39000
p1:flags = 0x1
p1:position = -132.697830200195,-30.4474086761475,-328.464416503906
p1:game_vertex_id = 108
p1:level_vertex_id = 122132

p2:name = wp00|a=guard_chasovoy|p=10|t=13000
p2:flags = 0x1
p2:position = -132.667037963867,-30.45046043396,-328.723815917969
p2:game_vertex_id = 108
p2:level_vertex_id = 122131

[esc_b1_guard_1_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -132.852493286133,-25.7893009185791,-354.693786621094
p0:game_vertex_id = 95
p0:level_vertex_id = 122101

[esc_b1_guard_2_look]
points = p0,p1,p2
p0:name = wp00|a=guard|p=10|t=42000
p0:flags = 0x1
p0:position = -158.046096801758,-30.259241104126,-330.411834716797
p0:game_vertex_id = 108
p0:level_vertex_id = 92768

p1:name = wp00|a=binocular|p=10|t=41000
p1:flags = 0x1
p1:position = -158.310607910156,-30.2621364593506,-330.633544921875
p1:game_vertex_id = 108
p1:level_vertex_id = 92768

p2:name = wp00|a=guard_chasovoy|p=10|t=13000
p2:flags = 0x1
p2:position = -158.558868408203,-30.2622699737549,-330.658538818359
p2:game_vertex_id = 108
p2:level_vertex_id = 91930

[esc_b1_guard_2_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -158.911880493164,-30.4787406921387,-347.960693359375
p0:game_vertex_id = 92
p0:level_vertex_id = 91909

[esc_b1_guard_3_look]
points = p0,p1,p2
p0:name = wp00|a=guard|p=10|t=10|t=43000
p0:flags = 0x1
p0:position = -158.606658935547,-30.1854248046875,-356.474212646484
p0:game_vertex_id = 107
p0:level_vertex_id = 91897

p1:name = wp00|a=sit_ass|p=10|t=33000
p1:flags = 0x1
p1:position = -158.464492797852,-30.1963806152344,-356.156341552734
p1:game_vertex_id = 107
p1:level_vertex_id = 92735

p2:name = wp00|a=guard_chasovoy|p=10|t=12000
p2:flags = 0x1
p2:position = -158.246566772461,-30.1823024749756,-356.565093994141
p2:game_vertex_id = 107
p2:level_vertex_id = 92735

[esc_b1_guard_3_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -147.889556884766,-30.1396903991699,-356.919769287109
p0:game_vertex_id = 92
p0:level_vertex_id = 105120

[esc_b1_guard_4_look]
points = p0,p1,p2
p0:name = wp00|a=sit_ass|p=10|t=39000
p0:flags = 0x1
p0:position = -135.815322875977,-30.1376800537109,-370.718322753906
p0:game_vertex_id = 17
p0:level_vertex_id = 118901

p1:name = wp00|a=guard|p=10|t=33000
p1:flags = 0x1
p1:position = -135.258758544922,-30.1376476287842,-370.151275634766
p1:game_vertex_id = 17
p1:level_vertex_id = 119694

p2:name = wp00|a=guard_chasovoy|p=10|t=39000
p2:flags = 0x1
p2:position = -134.54963684082,-30.1376113891602,-369.574920654297
p2:game_vertex_id = 17
p2:level_vertex_id = 120498

[esc_b1_guard_4_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -125.466621398926,-30.1500015258789,-370.526397705078
p0:game_vertex_id = 111
p0:level_vertex_id = 130964

[esc_b1_guard_surge_1_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -138.286712646484,-30.4574108123779,-327.342742919922
p0:game_vertex_id = 108
p0:level_vertex_id = 115714

[esc_b1_guard_surge_1_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -138.739166259766,-25.439302444458,-356.944152832031
p0:game_vertex_id = 95
p0:level_vertex_id = 115679

[esc_b1_guard_surge_2_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -144.096069335938,-30.556884765625,-342.284118652344
p0:game_vertex_id = 108
p0:level_vertex_id = 109118

[esc_b1_guard_surge_2_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -143.550567626953,-29.689302444458,-351.596527099609
p0:game_vertex_id = 92
p0:level_vertex_id = 109926

[esc_b1_guard_surge_3_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -155.508148193359,-30.2657032012939,-354.145446777344
p0:game_vertex_id = 92
p0:level_vertex_id = 96125

[esc_b1_guard_surge_3_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -142.984802246094,-29.689302444458,-353.545745849609
p0:game_vertex_id = 92
p0:level_vertex_id = 110784

[esc_b1_guard_surge_4_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -132.395095825195,-30.2897415161133,-344.633636474609
p0:game_vertex_id = 108
p0:level_vertex_id = 122907

[esc_b1_guard_surge_4_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -133.1767578125,-29.689302444458,-354.844268798828
p0:game_vertex_id = 95
p0:level_vertex_id = 122100

[esc_b1_guard_surge_5_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -114.594375610352,-30.2213115692139,-369.159820556641
p0:game_vertex_id = 109
p0:level_vertex_id = 143861

[esc_b1_guard_surge_5_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -121.740524291992,-30.0499992370605,-370.309661865234
p0:game_vertex_id = 111
p0:level_vertex_id = 135244

[esc_b1_guard_surge_6_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -135.4990234375,-30.1378078460693,-373.130920410156
p0:game_vertex_id = 17
p0:level_vertex_id = 118898

[esc_b1_guard_surge_6_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -126.629096984863,-30.0499992370605,-374.66650390625
p0:game_vertex_id = 94
p0:level_vertex_id = 129364[/cut]

Заспавнил сквад. Походил, посмотрел. Активировал выброс. Убедился, что сталкеры выполняют свои работы без замечаний.

Поставил на этом смарте 6 работ для дефолтных сквадов. И 6 работ для выброса.

[cut=Дефолтные работы]

[esc_b1_surge_1_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -167.285629272461,-30.1688995361328,-330.092315673828
p0:game_vertex_id = 108
p0:level_vertex_id = 82554

[esc_b1_surge_1_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -168.706130981445,-25.4347991943359,-352.967712402344
p0:game_vertex_id = 87
p0:level_vertex_id = 80831

[esc_b1_surge_2_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -151.503067016602,-30.202766418457,-356.528747558594
p0:game_vertex_id = 92
p0:level_vertex_id = 101093

[esc_b1_surge_2_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -166.219909667969,-25.4347991943359,-354.846130371094
p0:game_vertex_id = 87
p0:level_vertex_id = 84136

[esc_b1_surge_3_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -171.248733520508,-27.9342384338379,-376.114135742188
p0:game_vertex_id = 110
p0:level_vertex_id = 77565

[esc_b1_surge_3_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -168.793075561523,-25.4347991943359,-357.028503417969
p0:game_vertex_id = 87
p0:level_vertex_id = 80819

[esc_b1_surge_4_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -153.045776367188,-30.2292613983154,-355.841552734375
p0:game_vertex_id = 92
p0:level_vertex_id = 98640

[esc_b1_surge_4_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -166.616104125977,-29.6847991943359,-354.872222900391
p0:game_vertex_id = 103
p0:level_vertex_id = 83335

[esc_b1_surge_5_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -167.324554443359,-30.5494747161865,-342.617248535156
p0:game_vertex_id = 108
p0:level_vertex_id = 82537

[esc_b1_surge_5_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -168.090194702148,-29.6026268005371,-356.961700439453
p0:game_vertex_id = 103
p0:level_vertex_id = 81671

[esc_b1_surge_6_look]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -186.210678100586,-30.3860969543457,-354.545806884766
p0:game_vertex_id = 104
p0:level_vertex_id = 64025

[esc_b1_surge_6_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -169.829605102539,-29.6847991943359,-354.228271484375
p0:game_vertex_id = 104
p0:level_vertex_id = 79162

[esc_b1_walker_1_look]
points = p0,p1,p2
p0:name = wp00|a=binocular|p=10|t=41000
p0:flags = 0x1
p0:position = -167.522048950195,-30.0842094421387,-328.332794189453
p0:game_vertex_id = 108
p0:level_vertex_id = 82557

p1:name = wp00|a=guard|p=10|t=42000
p1:flags = 0x1
p1:position = -167.812545776367,-30.081148147583,-328.294769287109
p1:game_vertex_id = 108
p1:level_vertex_id = 81708

p2:name = wp00|a=guard_chasovoy|p=10|t=11000
p2:flags = 0x1
p2:position = -168.118942260742,-30.068229675293,-328.051025390625
p2:game_vertex_id = 108
p2:level_vertex_id = 81708

[esc_b1_walker_1_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -167.995758056641,-25.4347991943359,-352.900421142578
p0:game_vertex_id = 87
p0:level_vertex_id = 81681

[esc_b1_walker_2_look]
points = p0,p1,p2
p0:name = wp00|a=binocular|p=10|t=39000
p0:flags = 0x1
p0:position = -153.719314575195,-30.2233276367188,-327.627197265625
p0:game_vertex_id = 108
p0:level_vertex_id = 97845

p1:name = wp00|a=guard|p=10|t=38000
p1:flags = 0x1
p1:position = -153.952651977539,-30.2136001586914,-326.956726074219
p1:game_vertex_id = 18
p1:level_vertex_id = 97846

p2:name = wp00|a=guard_chasovoy|p=10|t=11000
p2:flags = 0x1
p2:position = -154.002166748047,-30.2081184387207,-326.575561523438
p2:game_vertex_id = 18
p2:level_vertex_id = 97846

[esc_b1_walker_2_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -152.101959228516,-30.5187568664551,-348.334869384766
p0:game_vertex_id = 92
p0:level_vertex_id = 100292

[esc_b1_walker_3_look]
points = p0,p1
p0:name = wp00|a=sit_ass|p=10|t=39000
p0:flags = 0x1
p0:position = -174.371597290039,-30.2146110534668,-354.878509521484
p0:game_vertex_id = 104
p0:level_vertex_id = 74863

p1:name = wp00|a=guard_chasovoy|p=10|t=12000
p1:flags = 0x1
p1:position = -174.56217956543,-30.2176513671875,-354.988555908203
p1:game_vertex_id = 104
p1:level_vertex_id = 74863

[esc_b1_walker_3_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -176.187393188477,-28.3585643768311,-370.049865722656
p0:game_vertex_id = 110
p0:level_vertex_id = 72922

[esc_b1_walker_4_look]
points = p0,p1
p0:name = wp00|a=sit_ass|p=10|t=33000
p0:flags = 0x1
p0:position = -179.899429321289,-26.4625854492188,-384.9267578125
p0:game_vertex_id = 110
p0:level_vertex_id = 69711

p1:name = wp00|a=guard_chasovoy|p=10|t=13000
p1:flags = 0x1
p1:position = -179.927383422852,-26.443229675293,-385.128936767578
p1:game_vertex_id = 110
p1:level_vertex_id = 69711

[esc_b1_walker_4_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = -176.19075012207,-28.8572406768799,-366.735931396484
p0:game_vertex_id = 110
p0:level_vertex_id = 72925

[445]

; cse_abstract properties
section_name = smart_cover
name = esc_b1_animpoint_1
position = -178.141067504883, -28.4921321868896, -368.347015380859
direction = -0.120428003370762, -1.57079601287842, 0.036651998758316
id = 65535
version = 128
script_version = 12
spawn_id = 794

; cse_alife_object properties
game_vertex_id = 110
distance = 7
level_vertex_id = 71674
object_flags = 0xffffffbf

; cse_shape properties
shapes = 1
shape_0:type = sphere
shape_0:offset = 0,0,0
shape_0:radius = 2

; cse_smart_cover properties
description = animpoint_sit_low
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
is_combat_cover = 1
MP_respawn = 1

; se_smart_cover properties
last_description = animpoint_sit_low
loopholes = animpoint_sit_low, 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[446]

; cse_abstract properties
section_name = smart_cover
name = esc_b1_animpoint_2
position = -173.799255371094, -28.7090454101563, -368.374420166016
direction = -0.169296994805336, 1.57079601287842, 0.0558510012924671
id = 65535
version = 128
script_version = 12
spawn_id = 795

; cse_alife_object properties
game_vertex_id = 110
distance = 2.8
level_vertex_id = 75509
object_flags = 0xffffffbf

; cse_shape properties
shapes = 1
shape_0:type = sphere
shape_0:offset = 0,0,0
shape_0:radius = 2

; cse_smart_cover properties
description = animpoint_sit_low
enter_min_enemy_distance = 15
exit_min_enemy_distance = 10
is_combat_cover = 1
MP_respawn = 1

; se_smart_cover properties
last_description = animpoint_sit_low
loopholes = animpoint_sit_low, 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[/cut]

Заспавнил сквад для теста.

[cut=Сквад для теста][test_squad_1]:online_offline_group
faction = stalker
npc = sim_default_stalker_0, sim_default_stalker_1, sim_default_stalker_2, sim_default_stalker_0, sim_default_stalker_1, sim_default_stalker_2
target_smart = esc_b1
spawn_point = esc_b1_spawn[/cut]

Ожидал, что тестовый сквад займет дефолтные работы. Но эти сталкеры полезли на эксклюзивные работы. Заняли чужие секции walker. Анимпойнты заняли свои собственные (дефолтные). После активации выброса тестовый сквад занял места, предназначенные дефолтным сталкерам. После окончания выброса валкеры из тестового сквада снова залезли на чужие работы.

[cut=Скрины]



[/cut]

Почему строка suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true не срабатывает?
 
denis2000Дата: Вс, 24.07.2016, 21:56 | Сообщение # 1308
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Не уверен что такая конструкция работает бес проблем: [logic@esc_b1_stalker_guard_surge_1]:logic@esc_b1_stalker_guard_surge

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
sergej5500Дата: Вт, 26.07.2016, 20:11 | Сообщение # 1309
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Цитата denis2000 ()
Не уверен что такая конструкция работает бес проблем: [logic@esc_b1_stalker_guard_surge_1]:logic@esc_b1_stalker_guard_surge


Я использовал такой способ записи многократно. Никаких проблем не было.

Для пробы переписал логику.

[cut=Обычная логика][meet]
abuse = false
allow_break = false
meet_on_talking = false
trade_enable = true
close_distance = 5
close_anim = guard_na
close_victim = actor
use = {!actor_has_weapon !actor_enemy !has_enemy} true, false
snd_on_use = {=actor_has_weapon !actor_enemy} meet_hide_weapon, nil

;

[logic@esc_b1_stalker_guard_1]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 200
active = walker@esc_b1_stalker_guard_1

[walker@esc_b1_stalker_guard_1]
meet = meet
path_walk = guard_1_walk
path_look = guard_1_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_1

[remark@esc_b1_stalker_guard_1]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_1 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_2]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 190
active = walker@esc_b1_stalker_guard_2

[walker@esc_b1_stalker_guard_2]
meet = meet
path_walk = guard_2_walk
path_look = guard_2_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_2

[remark@esc_b1_stalker_guard_2]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_2 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_3]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 180
active = walker@esc_b1_stalker_guard_3

[walker@esc_b1_stalker_guard_3]
meet = meet
path_walk = guard_3_walk
path_look = guard_3_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_3

[remark@esc_b1_stalker_guard_3]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_3 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_4]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 170
active = walker@esc_b1_stalker_guard_4

[walker@esc_b1_stalker_guard_4]
meet = meet
path_walk = guard_4_walk
path_look = guard_4_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_4

[remark@esc_b1_stalker_guard_4]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_4 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_5]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 160
active = animpoint@esc_b1_stalker_guard_5

[animpoint@esc_b1_stalker_guard_5]
meet = meet
cover_name = esc_b1_guard_animpoint_1
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_5

[remark@esc_b1_stalker_guard_5]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | animpoint@esc_b1_stalker_guard_5 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_6]
suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true
prior = 150
active = animpoint@esc_b1_stalker_guard_6

[animpoint@esc_b1_stalker_guard_6]
meet = meet
cover_name = esc_b1_guard_animpoint_2
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_6

[remark@esc_b1_stalker_guard_6]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | animpoint@esc_b1_stalker_guard_6 %-esc_b1_base_guard%[/cut]

[cut=Логика для выброса][meet]
abuse = false
allow_break = false
meet_on_talking = false
trade_enable = true
close_distance = 5
close_anim = guard_na
close_victim = actor
use = {!actor_has_weapon !actor_enemy !has_enemy} true, false
snd_on_use = {=actor_has_weapon !actor_enemy} meet_hide_weapon, nil

;

[logic@esc_b1_stalker_guard_surge_1]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 200
active = walker@esc_b1_stalker_guard_surge_1

[walker@esc_b1_stalker_guard_surge_1]
meet = meet
path_walk = guard_surge_1_walk
path_look = guard_surge_1_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_1

[remark@esc_b1_stalker_guard_surge_1]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_1 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_2]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 190
active = walker@esc_b1_stalker_guard_surge_2

[walker@esc_b1_stalker_guard_surge_2]
meet = meet
path_walk = guard_surge_2_walk
path_look = guard_surge_2_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_2

[remark@esc_b1_stalker_guard_surge_2]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_2 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_3]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 180
active = walker@esc_b1_stalker_guard_surge_3

[walker@esc_b1_stalker_guard_surge_3]
meet = meet
path_walk = guard_surge_3_walk
path_look = guard_surge_3_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_3

[remark@esc_b1_stalker_guard_surge_3]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_3 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_4]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 170
active = walker@esc_b1_stalker_guard_surge_4

[walker@esc_b1_stalker_guard_surge_4]
meet = meet
path_walk = guard_surge_4_walk
path_look = guard_surge_4_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_4

[remark@esc_b1_stalker_guard_surge_4]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_4 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_5]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 160
active = walker@esc_b1_stalker_guard_surge_5

[walker@esc_b1_stalker_guard_surge_5]
meet = meet
path_walk = guard_surge_5_walk
path_look = guard_surge_5_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_5

[remark@esc_b1_stalker_guard_surge_5]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_5 %-esc_b1_base_guard%

;

[logic@esc_b1_stalker_guard_surge_6]
suitable = {=check_npc_name(esc_b1_stalker_guard_) =surge_started} true
prior = 150
active = walker@esc_b1_stalker_guard_surge_6

[walker@esc_b1_stalker_guard_surge_6]
meet = meet
path_walk = guard_surge_6_walk
path_look = guard_surge_6_look
on_info = {!actor_enemy =see_actor =actor_has_weapon =dist_to_actor_le(15)} remark@esc_b1_stalker_guard_surge_6

[remark@esc_b1_stalker_guard_surge_6]
anim = threat
target = story | actor
meet = no_meet
on_info = {-esc_b1_base_guard} %+esc_b1_base_guard =play_sound(zat_a2_base_guard)%
on_game_timer = 75 | walker@esc_b1_stalker_guard_surge_6 %-esc_b1_base_guard%[/cut]

Ситуация никак не изменилась. Неписи sim_default становятся на работы валкеров, если нет выброса. Игнорируют строку suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} true.

Во время выброса неписи чужие работы не занимают.
 
denis2000Дата: Вт, 26.07.2016, 20:39 | Сообщение # 1310
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Вот давайте посмотрим как у вас называются пути.
Например раз path_walk = guard_1_walk, то имя пути соответственно: esc_b1_guard_1_walk.
А теперь смотрим скрипт дефолтовых работ на смарте gulag_general.script:
Код
while level.patrol_path_exists(gname.."_guard_"..it.."_walk") do

поскольку gname="esc_b1" имя пути it="1","2",... то имена путей esc_b1_guard_1_walk, esc_b1_guard_2_walk это имнеа путей дефолтных работ.
А значит с данными путями будут существовать ДВЕ РАБОТЫ, одна для дефолтовых НПС и еще одна эксклюзивная! Вот и весь парадокс: симуляционный сквад занимает вполне законные дефолтные работы которые вы им и создали, совершенно игнорируя эксклюзивы на которые им ходить запрещено!
Так что строка suitable = {=check_npc_name(esc_b1_stalker_guard_) !surge_started} честно работает!


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
БарменДата: Вс, 21.08.2016, 22:20 | Сообщение # 1311
Ветеран
Свобода
Сообщений: 370
Награды: 11
Репутация: [ 105 ]

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

Код
[logic]
active = animpoint@wounded
prior = 200

[animpoint@wounded]
cover_name = wounded_smart_cover
avail_animations = ???
combat_ignore_cond = true
combat_ignore_keep_when_attacked = true
wounded = wounded

[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

И что какую анимацию нужно прописывать, в строке avail_animations. Или на smart_cover, лежащей сталкер не работает?
 
denis2000Дата: Вс, 21.08.2016, 22:59 | Сообщение # 1312
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата Бармен ()
какую анимацию нужно прописывать, в строке avail_animations

Любую доступную в смартковере.
Цитата Бармен ()
Или на smart_cover, лежащей сталкер не работает?

Пробуйте и узнаете.
А вообще раненный делается на вейпоинте.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
БарменДата: Вс, 21.08.2016, 23:02 | Сообщение # 1313
Ветеран
Свобода
Сообщений: 370
Награды: 11
Репутация: [ 105 ]

Цитата denis2000 ()
А вообще раненный делается на вейпоинте.

Ну я это заметил, минуту назад когда посмотрел, в других проектах.
 
progkuchumovДата: Чт, 15.09.2016, 21:18 | Сообщение # 1314
Отмычка
Пользователи
Сообщений: 38
Награды: 0
Репутация: [ 40 ]

Здравствуйте, уважаемые!

Подскажите пожалуйста, как в ЗП сделать, чтобы НПС звал ГГ, пока к нему не подойдешь? Сколько способов не перепробовал - ни один не работает. Анимацию махания рукой я сделал в way локации параметром a=hello_wpn. Пробовал там же указать звук через s=звуковая_схема - не работает, или я не правильно указываю что то.


 
sergej5500Дата: Чт, 15.09.2016, 21:30 | Сообщение # 1315
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

progkuchumov,

Звуковое сопровождение у сталкера можно вызвать из логики. Что то вроде:

on_info = {=dist_to_actor_le(15) -stalker_play_sound} %+stalker_play_sound =play_sound(stalker_play_sound_sheme)%

Параметры:

dist_to_actor_le(15) - при дистанции до сталкера меньше 15 метров он начнёт говорить.

stalker_play_sound - инфопорция, выдаваемая при озвучке.

stalker_play_sound_sheme - название звуковой схемы, которую выдаст сталкер. Схема прописывается в файл gamedata\configs\misc\script_sound
 
progkuchumovДата: Чт, 15.09.2016, 23:08 | Сообщение # 1316
Отмычка
Пользователи
Сообщений: 38
Награды: 0
Репутация: [ 40 ]

Благодарю за помощь, помогло.

Подскажите пожалуйста, как запретить нпсу, чтобы он свои вещи продавал - оружие там, патроны? Смешно, но такую мелочь не могу найти -уже хотел полностью торговлю с ним запретить, поставил trade_enable = false - и ничего, все равно торговля идет. И если можно, ткните меня пожалуйста, где можно посмотреть настройку всех подобных параметров нпс в сталкер зов припяти. Потому что каждую такую мелочь по полдня ищу в сети и натыкаюсь на кучу неработающих вариантов. Смотрел в вики настройку логики - и тоже ничего не нашел. sad


 
GlomarДата: Чт, 15.09.2016, 23:28 | Сообщение # 1317
Хозяин Зоны
Пользователи
Сообщений: 23464
Награды: 62
Репутация: [ 4001 ]

Цитата progkuchumov ()
где можно посмотреть настройку всех подобных параметров нпс в сталкер зов припяти

В интернете можно скачать сборники уроков по модостроению. Есть и видеоуроки.


 
progkuchumovДата: Пт, 16.09.2016, 03:01 | Сообщение # 1318
Отмычка
Пользователи
Сообщений: 38
Награды: 0
Репутация: [ 40 ]

Цитата Glomar ()
В интернете можно скачать сборники уроков по модостроению. Есть и видеоуроки.


Не поверите, у меня 20 вкладок открыто со всякими гайдами и сборниками, и нигде нет того, что мне нужно - или примеры не рабочие. Вот скачал я один сборник - там только показываются конфигурационные файлы торговцев и как им добавлять товары в продажу. Что я и так знаю...

Или не рабочие примеры. Вот trade_enable = false - по гайдам этот параметр отключает торговлю. Но он не работает, и не понятно, почему (((

Добавлено (15.09.2016, 23:53)
---------------------------------------------
Вот нашел:

trade = misc\trade_voron.ltx

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

Добавлено (16.09.2016, 03:01)
---------------------------------------------
Прошу прощения, еще раз почитал - разобрался. Если можно, удалите мои сообщения.


 
GlomarДата: Пт, 16.09.2016, 07:36 | Сообщение # 1319
Хозяин Зоны
Пользователи
Сообщений: 23464
Награды: 62
Репутация: [ 4001 ]

Цитата progkuchumov ()
Прошу прощения, еще раз почитал - разобрался. Если можно, удалите мои сообщения.

Если нашёл Николай ответ, то можешь его оставить в своём посте. Возможно другим пользователям пригодиться.


 
progkuchumovДата: Пт, 16.09.2016, 09:28 | Сообщение # 1320
Отмычка
Пользователи
Сообщений: 38
Награды: 0
Репутация: [ 40 ]

Да все элементарно оказалось. Я думал, что надо какой то параметр в логике просто прописать. А надо было создать конфигурационный файл торговли с персонажем по аналогии с торговцами, и подключить его в логике:

trade = misc\trade\trade_персонаж.ltx

В нем и указать, что он может покупать в разделе generic_buy , и продавать generic_sell.

Только два момента все равно оказались непонятными мне:
1. Почему trade_enable = false не отключает торговлю с персонажем? Видимо, надо еще какой то параметр прописать, но я так этого и не нашел.
2. Я запретил в файле торговли продажу патронов, но персонаж все равно продает патроны. Видимо, где то еще какой то параметр срабатывает, а какой - непонятно.


 
Поиск: