Войти на сайт Регистрация Лента форума Пользователи Правила сайта Поиск по форуму
Модератор форума: 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 по ссылке из шапки и соседнюю тему "Курс молодого бойца",
возможно Ваш вопрос уже рассматривался.


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


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
makdmДата: Пн, 20.10.2014, 09:33 | Сообщение # 1006
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

sergej5500, надеюсь после правок НИ начинал?

Давай сделаем так, для начала, пропиши Сидору в specific_character, какой - нибудь слабенький автомат, например АКСУ или МП-5.
Сделай rank = 50. (<rank>50</rank>)
В логику пропиши can_select_weapon = false. Начни НИ.
Теперь посмотри, что получится.

Если не получится, то попробуй наоборот. Максимальный ранг и РПГ в specific_character. В логику can_select_weapon = false

Твоя задача - Сидор должен прекратить перевыбирать оружие.


Терпение......
И все получится!
 
alex_xp_77Дата: Вт, 21.10.2014, 16:44 | Сообщение # 1007
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

Доброго дня !! можно ли посадить торговца, например сидоровича, только например поменять ему фамилию , например на петровича?? что нужно изменять в настройках, конфигах, подскажите пожалуста !!



Сообщение отредактировал alex_xp_77 - Вт, 21.10.2014, 17:45
 
denis2000Дата: Вт, 21.10.2014, 17:04 | Сообщение # 1008
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

alex_xp_77, В дескрипшене персонажа есть тег: <name>st_jup_a12_stalker_assaulter</name>
Имя можно написать прямо туда или в виде ссылки на строку из файла st_characters.xml


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

Всем добрый день. В СГМ есть особые инвентарные ящики - утилизаторы. Кладете в него оружие. Взамен получаете деньги.

Логика утилизатора.

[logic]
active = ph_idle@enable

[ph_idle@enable]
nonscript_usable = true
tips = st_utilizator_box_check_descr


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

level_spot = actor_box

Результат нулевой. Метка не появляется. Утилизатор работает нормально. Строку level_spot = actor_box для пробы вставлял в обе секции логики утилизатора.

В чем может быть причина сбря?
 
makdmДата: Сб, 25.10.2014, 12:43 | Сообщение # 1010
Рожденный в СССР
Разработчики
Сообщений: 1294
Награды: 29
Репутация: [ 1909 ]

Цитата sergej5500 ()
В чем может быть причина сбря?

sergej5500, причина в том, что ни схема ph_idle, ни биндер bind_physic_object не обрабатывают параметр level_spot

Для обработки параметра необходимо в скрипт ph_idle.script прописать следующее:

1. В функцию set_scheme пишем

Код
st.level_spot  = utils.cfg_get_string(ini, section, "level_spot", npc, false, "", "nil")


2. В метод reset_scheme() пишем

Код
if self.st.level_spot == "actor_box"  then
level.map_add_object_spot(self.object:id(), "ui_pda2_actor_box_location", "st_ui_pda_actor_box")
end


Терпение......
И все получится!
 
alex_xp_77Дата: Пт, 31.10.2014, 14:22 | Сообщение # 1011
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

Добрый день подскажите пожалуста, какова логика для нпс, для того что бы он сидел, если не сложно поподробнее, как его посадить например на ящик? вот тут http://SSMaker.ru/decacc22/ мне уже отвечали но по луа получил вылет, просто в логике еще новичек , видать что то не так , и по точкам что в них надо прописывать, по моему на скадовске азот сидел на стуле, да и сталкер в спальне, но карт у меня нету , делаю для тч, списать не от куда , помогите пожалуста понять!!Заранее большое спасибо!!

 
denis2000Дата: Пт, 31.10.2014, 15:01 | Сообщение # 1012
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

alex_xp_77, Логика НПС walker:
Код
[logic]
active = walker

[walker]
path_walk = bar_dolg_bunker_rest_1_walk    
path_look = bar_dolg_bunker_rest_1_look    


В SDK создается две связанные точки пути bar_dolg_bunker_rest_1_walk - та где сидит, bar_dolg_bunker_rest_1_look - та куда смотрит, в имени точки куда смотрит приписывается анимация |a=sit.
В all.spawn это выглядит так:
Код
[bar_dolg_bunker_rest_1_look]
points = p0
p0:name = wp00|a=sit
p0:flags = 0x1
p0:position = 219.80143737793,-5.44817924499512,125.315498352051
p0:game_vertex_id = 1198
p0:level_vertex_id = 54653

[bar_dolg_bunker_rest_1_walk]
points = p0
p0:name = wp00
p0:flags = 0x1
p0:position = 217.560607910156,-5.21441125869751,123.737777709961
p0:game_vertex_id = 1198
p0:level_vertex_id = 53915


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
alex_xp_77Дата: Пт, 31.10.2014, 20:55 | Сообщение # 1013
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
Награды: 6
Репутация: [ 41 ]

Но как я понял именно, bar_dolg_bunker, это расположение обьекта (нпс) то есть вписывать не обязательно Denis?? Так как нпс стоять будет на (например тестовой локации) Хотя ответ ваш исчерпывающий))Благодарен!!
Сделал как вы писали выше Денис, но при том что я прописал получается в игре вот это http://SSMaker.ru/6dba51d2/ , нпс просто стоит но не садится, вроде все сделал верно вот тут
точка look http://SSMaker.ru/a8270323/
точка walk http://SSMaker.ru/b1db4c94/
логика нпс http://SSMaker.ru/c1539d48/
помгите понять уважаемый Денис где ошибка ??
может смарт нужно прямо на ящике делать?7
Добрый вечер всем !! Было моей ошибкой просить вас сделать невозможное, нпс сидят в присяди, но скинуть ноги с ящика не дает им анимация которой для тч просто нету, хотя Денису 2000 отдельный поклон!!Очень благодарен за помошь!!




Сообщение отредактировал alex_xp_77 - Пн, 03.11.2014, 17:17
 
denis2000Дата: Вс, 02.11.2014, 19:23 | Сообщение # 1014
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

alex_xp_77,
1. Флаг то нулевой не будет работать, единицу ставьте
2. Имя точки то поставьте не |a=sit, а например wp00|a=sit
3. Я сомневаюсь что НПС залезет на ящик, сетка на ящике не связана с сеткой остальной локации.
4. Я сомневаюсь что данная анимация будет корректно работать на таком высоком объекте, посадка должна быть не выше стула.


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

Доброй ночи. Возник такой вопрос.

В СГМ на Затоне имеется 200 рестрикторов такого типа.

[cut=Рестриктор][1626]

; cse_abstract properties
section_name = space_restrictor
name = zat_artefact_spawner_mod_00100
position = -206.499969482422, 6.18735694885254, 606.899963378906
direction = 0, 0, 0
id = 65535
version = 128
script_version = 12
spawn_id = 9149

; cse_alife_object properties
game_vertex_id = 126
level_vertex_id = 530718
object_flags = 0xffffff3e
custom_data = <<END
[logic]
cfg = scripts\zaton\create_zones\zat_create_zone_3.ltx
END

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

; cse_alife_space_restrictor properties
restrictor_type = 3

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

[cut=Логика рестриктора][logic]
active = sr_universal

[sr_universal]
scheme_type = create_zone
create_zone_when = every_night
create_zone_items = af_cristall,af_fireball
create_zone_level = zaton
create_zone_radius = 4
create_zone_prob = 0.1[/cut]

Видимо, данный рестриктор должен спавнить артефакты. Как аномальная зона. Проходя СГМ, я на Затоне несколько раз находил артефакты за пределами традиционных аномальных зон.

Попробовал для интереса сделать подобную вещь на подключенном Кордоне.

[cut=Рестриктор][13953]

; cse_abstract properties
section_name = space_restrictor
name = esc_artefact_mod_spawner_0001
position = -245.303436279297, -13.9353618621826, -28.8752555847168
direction = 0, 0, 0
version = 128
script_version = 12
spawn_id = 12581

; cse_alife_object properties
game_vertex_id = 1628
level_vertex_id = 15311
object_flags = 0xffffff3e
custom_data = <<END
[logic]
cfg = scripts\escape\create_zones\esc_create_zones_1.ltx
END

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

; cse_alife_space_restrictor properties
restrictor_type = 3

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

[cut=Логика][logic]
active = sr_universal

[sr_universal]
scheme_type = create_zone
create_zone_when = every_night
create_zone_items = af_cristall,af_fireball
create_zone_level = escape
create_zone_radius = 50
create_zone_prob = 0.99[/cut]

[cut=Коды из sr_universal]function action_universal:get_create_zone_spawn()
return sgm_flags.table_mod_schemes[self.object:id()].create_zone_spawner_table[math.random(table.getn(sgm_flags.table_mod_schemes[self.object:id()].create_zone_spawner_table))]
end
function action_universal:create_zone_activate(scheme_param,when)
if scheme_param.create_zone_cond=="true" then
local var_fix=""
if when=="surge_day" then
var_fix="_sd"
elseif when=="black_day" then
var_fix="_bd"
elseif when=="every_night" then
var_fix="_an"
end
if sgm_flags["bool_"..when.."_end"]==true and (sgm_functions.read_obj_variable(self.object,"c_z_allow"..var_fix)==nil or sgm_functions.read_obj_variable(self.object,"c_z_allow"..var_fix)=="false") then
sgm_functions.write_obj_variable(self.object,"c_z_allow"..var_fix,"true")
elseif sgm_flags["bool_"..when.."_end"]==false and sgm_functions.read_obj_variable(self.object,"c_z_allow"..var_fix)~=nil then
sgm_functions.clear_obj_variable(self.object,"c_z_allow"..var_fix)
sgm_functions.clear_obj_variable(self.object,"c_z_spawned"..var_fix)
end
if sgm_functions.read_obj_variable(self.object,"c_z_allow"..var_fix)~=nil and sgm_functions.read_obj_variable(self.object,"c_z_allow"..var_fix)=="true" and sgm_functions.read_obj_variable(self.object,"c_z_spawned"..var_fix)==nil then
if scheme_param.create_zone_full_spawn=="true" then
local x=self.object:position().x+math.random(-scheme_param.create_zone_radius,scheme_param.create_zone_radius)
local y=self.object:position().y
local z=self.object:position().z+math.random(-scheme_param.create_zone_radius,scheme_param.create_zone_radius)
for k,v in pairs(scheme_param.create_zone_spawner_table) do
if math.random(100)<=scheme_param.create_zone_prob*100 then
create(v,x,y,z,self.object:level_vertex_id(),self.object:game_vertex_id())
end
end
else
local x=self.object:position().x+math.random(-scheme_param.create_zone_radius,scheme_param.create_zone_radius)
local y=self.object:position().y
local z=self.object:position().z+math.random(-scheme_param.create_zone_radius,scheme_param.create_zone_radius)
if math.random(100)<=scheme_param.create_zone_prob*100 then
create(self:get_create_zone_spawn(),x,y,z,self.object:level_vertex_id(),self.object:game_vertex_id())
end
end
sgm_functions.write_obj_variable(self.object,"c_z_spawned"..var_fix,"used")
end
end
end

function action_universal:update(delta)
local actor=db.actor
local obj=self.object
local scheme_param=sgm_flags.table_mod_schemes[self.object:id()]
if xr_logic.try_switch_to_another_section(self.object,self.st,actor) then
return
end
if scheme_param.update==nil then
self:check_logic_condlists(self.object,self.st.saved_ini,self.st.saved_section)
scheme_param.update=time_global()+2500
end
if scheme_param.update~=nil then
if time_global()>=scheme_param.update then
scheme_param.update=nil
end
end
if scheme_param.scheme_type=="noweap_zone" then
self:noweap_zone_activate(scheme_param)
end
if scheme_param.scheme_type=="throw_zone" then
self:throw_zone_activate(scheme_param)
end
if scheme_param.scheme_type=="sound_zone" then
self:sound_zone_activate(scheme_param)
end
if scheme_param.scheme_type=="ambush_zone" then
if check_seconds(2) then
self:ambush_zone_activate(scheme_param)
end
end
if scheme_param.scheme_type=="create_zone" then
if check_seconds(1) then
if level.name()==scheme_param.create_zone_level then
self:create_zone_activate(scheme_param,scheme_param.create_zone_when)
end
end
end
if scheme_param.scheme_type=="level_change_zone" then
if scheme_param.level_change_cond=="true" or has_alife_info("show_mod_level_changers") then
self:level_change_setup_spots(scheme_param)
end
if utils.npc_in_zone(db.actor,self.object) then
if sgm_flags.table_level_changes[self.object:id()]==false then
sgm_flags.table_level_changes[self.object:id()]=true
if scheme_param.level_change_silent_travel=="true" then
if scheme_param.level_change_cond=="true" or has_alife_info("show_mod_level_changers") then
set_ui_disabled()
sgm_flags.bool_travel_level_change=true
end
else
if scheme_param.level_change_cond=="true" or has_alife_info("show_mod_level_changers") then
run_choose_box("yes_or_no","level_change",scheme_param.level_change_message_possible)
else
if scheme_param.level_change_hidden_mode=="false" then
run_choose_box("ok","level_change",scheme_param.level_change_message_impossible)
end
end
end
end
if sgm_flags.bool_travel_level_change==true then
local x=tonumber(scheme_param.level_change_travel_coord[1])
local y=tonumber(scheme_param.level_change_travel_coord[2])
local z=tonumber(scheme_param.level_change_travel_coord[3])
local travel_hours=tonumber(scheme_param.level_change_travel_time[1])
local travel_minutes=tonumber(scheme_param.level_change_travel_time[2])
self:level_change_activate(x,y,z,scheme_param.level_change_autosave,travel_hours,travel_minutes)
end
if sgm_flags.bool_throw_level_change==true then
local x=tonumber(scheme_param.level_change_throw_coord[1])
local y=tonumber(scheme_param.level_change_throw_coord[2])
local z=tonumber(scheme_param.level_change_throw_coord[3])
local h=tonumber(scheme_param.level_change_throw_coord[4])
if exists(scheme_param.level_change_throw_coord[5]) then
if exists(scheme_param.level_change_throw_coord[6]) then
if has_alife_info(tostring(scheme_param.level_change_throw_coord[6])) and dont_has_alife_info(tostring(scheme_param.level_change_throw_coord[5])) then
give_info(tostring(scheme_param.level_change_throw_coord[5]))
end
else
if dont_has_alife_info(tostring(scheme_param.level_change_throw_coord[5])) then
give_info(tostring(scheme_param.level_change_throw_coord[5]))
end
end
end
self:level_change_throw_actor(x,y,z,h)
sgm_flags.bool_throw_level_change=false
end
else
if sgm_flags.table_level_changes[self.object:id()]==nil or sgm_flags.table_level_changes[self.object:id()]==true then
sgm_flags.table_level_changes[self.object:id()]=false
end
end
self:level_change_check_and_complete()
end
end

--\Команды: CREATE_ZONE\--
if scheme_param.scheme_type=="create_zone" then
scheme_param.create_zone_cond = to_string(sgm_functions.check_section_condlist(ini,section,"create_zone_cond","true"))
scheme_param.create_zone_when = to_string(sgm_functions.check_section_condlist(ini,section,"create_zone_when","black_day"))
scheme_param.create_zone_items = sgm_functions.cfg_get_string(ini,section,"create_zone_items",nil)
scheme_param.create_zone_level = to_string(sgm_functions.check_section_condlist(ini,section,"create_zone_level","zaton"))
scheme_param.create_zone_full_spawn = to_string(sgm_functions.check_section_condlist(ini,section,"create_zone_full_spawn","false"))
scheme_param.create_zone_radius = to_number(sgm_functions.check_section_condlist(ini,section,"create_zone_radius",5))
scheme_param.create_zone_prob = to_number(sgm_functions.check_section_condlist(ini,section,"create_zone_prob",0.2))
if exists(scheme_param.create_zone_items) then
scheme_param.create_zone_spawner_table=parse_names(scheme_param.create_zone_items)
end
end[/cut]

Результат нулевой. Я сделал 12 рестрикторов. Расположил их компактно. Заспавнил себе Сварога. Несколько раз ходил в нужное место днем и ночью. Ни одного артефакта не нашёл. Вопрос: почему не заспавнились артефакты?
 
denis2000Дата: Вт, 04.11.2014, 14:15 | Сообщение # 1016
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

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

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

denis2000,

Спасибо за информацию. Решил сделать выбросы на подключенном Кордоне. Для пробы сделал укрытие.

[cut=Секция][67550000001]

; cse_abstract properties
section_name = space_restrictor
name = esc_smart_terrain_1_surge_1
position = -121.03, -30.05, -382.25
direction = 0, 0, 0
id = 65535
version = 128
script_version = 12
spawn_id = 2106

; cse_alife_object properties
game_vertex_id = 1692
level_vertex_id = 136999
object_flags = 0xffffff3e

; cse_shape properties
shapes = 4
shape_0:type = box
shape_0:axis_x = 12.12,0,0
shape_0:axis_y = 0,6.25,0
shape_0:axis_z = 0,0,18.42
shape_0:offset = 0,0,0

shape_1:type = box
shape_1:axis_x = 8,0,0
shape_1:axis_y = 0,6.25,0
shape_1:axis_z = 0,0,13
shape_1:offset = -20.73,0.36,24.84

shape_2:type = box
shape_2:axis_x = 6.5,0,0
shape_2:axis_y = 0,6.25,0
shape_2:axis_z = 0,0,3.9
shape_2:offset = -13.97,0.36,26.25

shape_3:type = box
shape_3:axis_x = 2.5,0,0
shape_3:axis_y = 0,6.25,0
shape_3:axis_z = 0,0,1.85
shape_3:offset = -15.82,0.36,23.63

; cse_alife_space_restrictor properties
restrictor_type = 3

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

Сам рестриктор и первый шейп расположены в этом здании.



На нем висит маркер укрытия.

Три других шейпа накрывают первый этаж соседнего дома.




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


Сообщение отредактировал sergej5500 - Вт, 04.11.2014, 14:27
 
denis2000Дата: Вт, 04.11.2014, 15:24 | Сообщение # 1018
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Один рестриктор - одно укрытие! Переключение маркера между разными рестрикторами, а не шейпами одного рестриктора.

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

denis2000,

Спасибо за помощь. Еще один момент.

1. Имеется смарт - Южный Блокпост - esc_smart_terrain_1.

2. На нем три домика. Три укрытия.

esc_smart_terrain_1_surge_1
esc_smart_terrain_1_surge_2
esc_smart_terrain_1_surge_3.

3. В каждом домике прописано по три работы неписям при выбросе.

4. Как писать правильно работы? Индивидуально по конкретному укрытию?

esc_smart_terrain_1_surge_1_1_walk
esc_smart_terrain_1_surge_1_1_look

Или нумерация должна быть общая для смарта?

esc_smart_terrain_1_surge_1_walk
esc_smart_terrain_1_surge_1_look
...
esc_smart_terrain_1_surge_9_walk
esc_smart_terrain_1_surge_9_look
 
denis2000Дата: Вт, 04.11.2014, 20:51 | Сообщение # 1020
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

sergej5500, Нумерация общая для смарта. Не важно в каком укрытии работа, главное чтобы внутри рестриктора защиты от выброса.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Поиск: