Модостроение. Спавн и логика
|
|
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 за это полезное сообщение: |
|
|
alex_xp_77 | Дата: Вс, 12.10.2014, 17:43 | Сообщение # 1006 |
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Доброго всем дня!!Вот решил навестить старый добрый форум, не возникало вопросов, но теперь нужна помощь знатоков, у меня вопрос по respawn, это который в spawn element в sdk 04, но вот не понятно, я заспавнил полный дом на террейне монстров, и нпс, теперь после их зачистки, то есть если их убить они больше не появятся, кто ни будь знает для чего эта строка?? http://SSMaker.ru/bdf08c98/ тут есть клавиша респаун тайм, можно ли назначить время респавна в sdk, этим решив проблему респавна?? Если я не прав просьба откоректировать мое предположение , и если это по другому, то если можно дайте по подробнее ответ на эту проблему, заранее большое спасибо за любой ответ!!
|
|
|
Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 12.10.2014, 20:08 | Сообщение # 1007 |
Полевой исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 1008 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 1009 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Проверяй инфопорцию actor_is_sleeping.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 19.10.2014, 23:07 | Сообщение # 1010 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Добрый вечер. В СГМ есть торговцы, продающие вещи на заказ.
Решил сделать из Сидоровича нового СГМ-торговца. По аналогии прописал функции в sgm_dialogs. Написал диалог заказа. Настроил файл торговли.
[cut=Файл торговли]#include "default_sections.ltx"
[trader] buy_condition = {+sgm_achievements_client =check_night_interval(22:5)} order_trader_buy_upgraded_hidden, {+sgm_achievements_client} order_trader_buy_upgraded, order_trader_buy sell_condition = {+sgm_achievements_client +esc_b2_trader_order} order_trader_sell_upgraded, {+sgm_achievements_client} default_order_trader_sell_upgraded, {+esc_b2_trader_order} order_trader_sell, default_order_trader_sell buy_supplies = {+esc_b2_trader_mosina =check_trader_order_item(wpn_mosina)} supplies_mosina, {+esc_b2_trader_kar98k =check_trader_order_item(wpn_kar98k)} supplies_kar98k, {+esc_b2_trader_svoboda_light_outfit =check_trader_order_item(svoboda_light_outfit)} supplies_svoboda_light_outfit, {+esc_b2_trader_dolg_outfit =check_trader_order_item(dolg_outfit)} supplies_dolg_outfit, order_trader_supplies discounts = {+esc_smart_terrain_6_bandit_clean +esc_smart_terrain_7_bandit_clean} discount buy_item_condition_factor = {+sgm_achievements_client} 0.4, 0.65
[discount] buy = 1.4 sell = 0.7
[order_trader_supplies]:default_ammo_supplies minetrap_detector = 1,0.9 remote_explosive_charge = 1,0.5 demolution_ballon = 1,0.8 demolution_kanistra = 1,0.8 demolution_barrel = 1,0.8 detector_battery_1 = 1,0.8 detector_battery_2 = 1,0.5 detector_battery_3 = 1,0.2 conventer_grenade_box = 1,0.8 repair_outfit_box = 1,0.8 repair_arms_box = 1,0.8 mp3_player = 1,0.3 personal_rukzak = 1,0.9
[supplies_mosina]:order_trader_supplies wpn_mosina = 2,1.0 [supplies_kar98k]:order_trader_supplies wpn_kar98k = 1,1.0 [supplies_svoboda_light_outfit]:order_trader_supplies svoboda_light_outfit = 1,1.0 [supplies_dolg_outfit]:order_trader_supplies dolg_outfit = 1,1.0
[order_trader_buy]:default_order_trader_buy [order_trader_buy_upgraded]:default_order_trader_buy_upgraded [order_trader_buy_upgraded_hidden]:default_order_trader_buy_upgraded_hidden
[order_trader_sell]:default_order_trader_sell wpn_mosina = 1,1.7 wpn_kar98k = 1,1.7 svoboda_light_outfit = 1,1.7 dolg_outfit = 1,1.7
[order_trader_sell_upgraded]:default_order_trader_sell_upgraded wpn_mosina = 1,1.2 wpn_kar98k = 1,1.2 svoboda_light_outfit = 1,1.2 dolg_outfit = 1,1.2[/cut]
Долго не мог понять, почему Сидор не продает заказанное оружие. Костюмы продает. Обнаружил, что Сидор нагло "присваивает" заказанные стволы. Берет их в личное пользование. Для проверки гипотезы прописал в торговлю две мосинки.
На скринах видно, что одна винтовка у Сидора есть в продаже. Вторую он "зажал". На скрине винтовка у Сидоровича за спиной.
[cut=Логика Сидора][meet] close_snd_hello = nil close_snd_bye = nil use = {!actor_enemy !actor_has_weapon !has_enemy} true, false allow_break = false trade_enable = true
;
[meet_2] close_snd_hello = nil close_snd_bye = nil use = {!actor_enemy !actor_has_weapon !has_enemy} true, false allow_break = false trade_enable = false
;
[logic@esc_b2_trader] active = remark@esc_b2_trader_offline suitable = {=target_squad_name(esc_b2_trader_squad)} true prior = 300 level_spot = trader trade = misc\trade\order_traders\esc_b2_trader.ltx
;
[remark@esc_b2_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 = {!is_squad_enemy_to_actor(esc_b2_stalker_squad)} true, false target = story | actor on_info = %=control_npc_position(esc_b2_trader_control_spawn_point:1)% on_info3 = {=is_squad_enemy_to_actor(esc_b2_stalker_squad) !is_squad_enemy_to_actor(esc_b2_trader_squad)} %=set_squad_goodwill(esc_b2_trader_squad:enemy)%
;
[remark@esc_b2_trader_offline]:remark@esc_b2_trader on_info2 = {=dist_to_actor_le(3)} remark@esc_b2_trader_online %=esc_trader_sidor_sound_start%
[remark@esc_b2_trader_online]:remark@esc_b2_trader on_info2 = {=dist_to_actor_ge(5)} remark@esc_b2_trader_offline %=esc_trader_sidor_sound_final%[/cut]
Логику Сидоровичу написал на основе логики СГМ-торговца на Скадовске. Тот заказанное оружие не "зажимает".
Что надо поправить, чтобы Сидорович не "обманывал" покупателей.
Сообщение отредактировал sergej5500 - Вс, 19.10.2014, 23:30 |
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
makdm | Дата: Пн, 20.10.2014, 00:02 | Сообщение # 1011 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| sergej5500, попробуй в секцию логики [logic@esc_b2_trader] дописать can_select_weapon = false
Терпение...... И все получится!
|
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
sergej5500 | Дата: Пн, 20.10.2014, 00:43 | Сообщение # 1012 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 1013 |
Рожденный в СССР
Разработчики
Сообщений: 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 | Сообщение # 1014 |
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Доброго дня !! можно ли посадить торговца, например сидоровича, только например поменять ему фамилию , например на петровича?? что нужно изменять в настройках, конфигах, подскажите пожалуста !!
Сообщение отредактировал alex_xp_77 - Вт, 21.10.2014, 17:45 |
|
|
Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
denis2000 | Дата: Вт, 21.10.2014, 17:04 | Сообщение # 1015 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| alex_xp_77, В дескрипшене персонажа есть тег: <name>st_jup_a12_stalker_assaulter</name> Имя можно написать прямо туда или в виде ссылки на строку из файла st_characters.xml
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Сб, 25.10.2014, 11:35 | Сообщение # 1016 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 1017 |
Рожденный в СССР
Разработчики
Сообщений: 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 | Сообщение # 1018 |
Научный сотрудник.
Ученые сталкеры
Сообщений: 242
| Добрый день подскажите пожалуста, какова логика для нпс, для того что бы он сидел, если не сложно поподробнее, как его посадить например на ящик? вот тут http://SSMaker.ru/decacc22/ мне уже отвечали но по луа получил вылет, просто в логике еще новичек , видать что то не так , и по точкам что в них надо прописывать, по моему на скадовске азот сидел на стуле, да и сталкер в спальне, но карт у меня нету , делаю для тч, списать не от куда , помогите пожалуста понять!!Заранее большое спасибо!!
|
|
|
Эти 0 пользователя(ей) поблагодарили alex_xp_77 за это полезное сообщение: |
|
|
denis2000 | Дата: Пт, 31.10.2014, 15:01 | Сообщение # 1019 |
Полевой исследователь
Ученые сталкеры
Сообщений: 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 | Сообщение # 1020 |
Научный сотрудник.
Ученые сталкеры
Сообщений: 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 за это полезное сообщение: |
|
|
|