|
Модостроение. Спавн и логика
|
|
| denis2000 | Дата: Пн, 10.10.2011, 21:20 | Сообщение # 1 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| Спавн и логика Создание объектов на локации и логика поведения этих объектов Если у вас появились вопросы по созданию динамических объектов в игре (НПС, монстры, аномалии, и т.п.) и настройке их "поведения". Задавайте их в этой теме - умные головы, модосторители и просто разбирающиеся в программировании люди вам ответят.
Много интересного материала здесь (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 по ссылке из шапки и соседнюю тему "Курс молодого бойца", возможно Ваш вопрос уже рассматривался.
Если произошел вылет - выкладываем лог! Вопрос ставим четко, не забываем указывать версию игры, установленные моды их версии, установленные фиксы модов и подробно ваши правки. Помните чем подробнее вопрос, тем точнее ответ.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 12.10.2014, 20:08 | Сообщение # 991 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| alex_xp_77, В ТЧ респавн делался при помощи специального рестриктора: Код section_name = respawn restrictor_type = 0 В его кастом дате было например такое: Код [respawn] respawn_section = flesh_weak,19, flesh_normal,14 max_spawn = 3 idle_spawn = medium Обрабатывал это скрипт: se_respawn.script
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Чт, 16.10.2014, 12:07 | Сообщение # 992 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Всем привет. Написал фрагмент кода для рестриктора.
[cut=Фрагмент][sr_idle@esc_b2_bandit_enemy_task_timer] on_game_timer = 10800 | sr_idle@esc_b2_bandit_enemy_save on_info = {=is_squad_enemy_to_actor(esc_b2_stalker_squad)} sr_idle@end
[sr_idle@esc_b2_bandit_enemy_save] on_info = {-esc_b2_bandit_enemy_task_start_save} %+esc_b2_bandit_enemy_task_start_save =scenario_autosave(st_save_esc_b2_bandit_enemy_task_start)% on_info2 = {+esc_b2_bandit_enemy_task_start_save} sr_idle@esc_b2_bandit_enemy_task_start on_info3 = {=is_squad_enemy_to_actor(esc_b2_stalker_squad)} sr_idle@end[/cut]
После отработки таймера произойдет автосейв, затем стартует квест. Код работает. Но если игрок спит, то автосейв происходит немедленно после пробуждения. Нет времени среагировать. Какой функцией можно проверить, спит ли игрок в момент остановки таймера. Если спит, то включить мини-таймер на 30 секунд. Чтобы квест стартовал не сразу после пробуждения.
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| denis2000 | Дата: Чт, 16.10.2014, 12:48 | Сообщение # 993 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Проверяй инфопорцию actor_is_sleeping.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| makdm | Дата: Пн, 20.10.2014, 00:02 | Сообщение # 994 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, попробуй в секцию логики [logic@esc_b2_trader] дописать can_select_weapon = false
Терпение...... И все получится!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| sergej5500 | Дата: Пн, 20.10.2014, 00:43 | Сообщение # 995 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| makdm, Совет отчасти помог. Сидор больше не забирает винтовки. Но в продаже стволы появляются не сразу.
Если сделать заказ, затем лечь спать и потом вернуться к Сидору, то ствола нет. Чтобы ствол появился, надо или сделать сейв и загрузиться с него или убежать от Сидора, чтобы тот ушёл в оффлайн. Затем вернуться.
Сразу после отработки таймера ствол появится, если в торговле прописано две винтовки.
У торговца на Скадовске аналогичная схема торговли. У торговца на Янове тоже. У тех стволы появляются без задержек.
[cut=Торговец на Скадовске][meet] abuse = true use = {!actor_enemy} true, false trade_enable = true meet_on_talking = false
;
[remark@zat_stalker_trader] gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false combat_ignore_cond = true combat_ignore_keep_when_attacked = true anim = ward_noweap meet = meet invulnerable = true target = story | actor on_info = %=control_npc_position(zat_stalker_trader_spawn_point:0.3)%
;
[logic@zat_stalker_trader] active = remark@zat_stalker_trader suitable = {=check_npc_name(zat_stalker_trader)} true prior = 300 post_combat_time = 0,0 trade = misc\trade\order_traders\zat_stalker_trader.ltx[/cut]
Строки can_select_weapon = false у него нет. Но автоматы он не "прикарманивает". Может быть, дело в Скадовске, как таковом. Какой параметр на Скадовске блокирует выбор неписем лучшего оружия?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| makdm | Дата: Пн, 20.10.2014, 09:33 | Сообщение # 996 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, надеюсь после правок НИ начинал?
Давай сделаем так, для начала, пропиши Сидору в specific_character, какой - нибудь слабенький автомат, например АКСУ или МП-5. Сделай rank = 50. (<rank>50</rank>) В логику пропиши can_select_weapon = false. Начни НИ. Теперь посмотри, что получится.
Если не получится, то попробуй наоборот. Максимальный ранг и РПГ в specific_character. В логику can_select_weapon = false
Твоя задача - Сидор должен прекратить перевыбирать оружие.
Терпение...... И все получится!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| alex_xp_77 | Дата: Вт, 21.10.2014, 16:44 | Сообщение # 997 |
|
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Доброго дня !! можно ли посадить торговца, например сидоровича, только например поменять ему фамилию , например на петровича?? что нужно изменять в настройках, конфигах, подскажите пожалуста !!
Сообщение отредактировал alex_xp_77 - Вт, 21.10.2014, 17:45 |
| |
|
| Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вт, 21.10.2014, 17:04 | Сообщение # 998 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| alex_xp_77, В дескрипшене персонажа есть тег: <name>st_jup_a12_stalker_assaulter</name> Имя можно написать прямо туда или в виде ссылки на строку из файла st_characters.xml
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Сб, 25.10.2014, 11:35 | Сообщение # 999 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Всем добрый день. В СГМ есть особые инвентарные ящики - утилизаторы. Кладете в него оружие. Взамен получаете деньги.
Логика утилизатора.
[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 для пробы вставлял в обе секции логики утилизатора.
В чем может быть причина сбря?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
| makdm | Дата: Сб, 25.10.2014, 12:43 | Сообщение # 1000 |
 Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата 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
Терпение...... И все получится!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
| alex_xp_77 | Дата: Пт, 31.10.2014, 14:22 | Сообщение # 1001 |
|
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Добрый день подскажите пожалуста, какова логика для нпс, для того что бы он сидел, если не сложно поподробнее, как его посадить например на ящик? вот тут http://SSMaker.ru/decacc22/ мне уже отвечали но по луа получил вылет, просто в логике еще новичек , видать что то не так , и по точкам что в них надо прописывать, по моему на скадовске азот сидел на стуле, да и сталкер в спальне, но карт у меня нету , делаю для тч, списать не от куда , помогите пожалуста понять!!Заранее большое спасибо!!
|
| |
|
| Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
| denis2000 | Дата: Пт, 31.10.2014, 15:01 | Сообщение # 1002 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| 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
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| alex_xp_77 | Дата: Пт, 31.10.2014, 20:55 | Сообщение # 1003 |
|
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Но как я понял именно, 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 |
| |
|
| Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
| denis2000 | Дата: Вс, 02.11.2014, 19:23 | Сообщение # 1004 |
 Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| alex_xp_77, 1. Флаг то нулевой не будет работать, единицу ставьте 2. Имя точки то поставьте не |a=sit, а например wp00|a=sit 3. Я сомневаюсь что НПС залезет на ящик, сетка на ящике не связана с сеткой остальной локации. 4. Я сомневаюсь что данная анимация будет корректно работать на таком высоком объекте, посадка должна быть не выше стула.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
| |
|
| Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
| sergej5500 | Дата: Вт, 04.11.2014, 01:45 | Сообщение # 1005 |
 Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Доброй ночи. Возник такой вопрос.
В СГМ на Затоне имеется 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 рестрикторов. Расположил их компактно. Заспавнил себе Сварога. Несколько раз ходил в нужное место днем и ночью. Ни одного артефакта не нашёл. Вопрос: почему не заспавнились артефакты?
|
| |
|
| Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
|