Модостроение. Спавн и логика
|
|
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 за это полезное сообщение: |
|
|
makdm | Дата: Вт, 26.11.2013, 15:55 | Сообщение # 706 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата sergej5500 ( ) Один или 2 остаются на огневом рубеже, оружие на изготовку и кричат "Быть наготове" sergej5500, используйте оверрайд post_combat_time
Пропишите, если это работа на смарте, то в логику работы, а если это логика НПС, то в активную схему.
post_combat_time = 0,0
После этого, action_post_combat_wait не будет работать и НПС сразу после боя начнут выполнять работу, прописанную в логике.
Терпение...... И все получится!
Сообщение отредактировал makdm - Вт, 26.11.2013, 16:03 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
Азазель | Дата: Вт, 26.11.2013, 23:43 | Сообщение # 707 |
Новичок
Пользователи
Сообщений: 77
| Всем здрасте. Снова я и снова с тупым вопросом А что поделать. Другие сами решаются. В косяк в чн. Сменил логику Каланче. Вместо смарт ковера. Поставил обычный валкер. (не знаю почему но отчаянно гробится meet логика. Именно та часть что отвечает за поворот на актора) И нпс спавнится. Все отлично. Вот только стоит этот чудак в углу рядом с той точкой что должен стоять. (оригинал, координаты не менял как и спавн) При этом к актору он не поворачивается. Но! Если с разбегу в него втемяшиться. Или попрыгать по предметам забрашись тем самым в этот угол. Одним словом попробовать сдвинуть нпс. Он просыпается и встает в точку пребывания. И реагирует на актора и все дела. Данный баг был и в зп. Не всегда. Но подезреваю что связан он с тем что НПС. Не может нормально повернутся в аи сетке.. Бред конечно. Но баг действительно возникает в таких проблематичных местах. Вопрос по сей лекции: а исправить то как ?
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
makdm | Дата: Ср, 27.11.2013, 13:37 | Сообщение # 708 |
Рожденный в СССР
Разработчики
Сообщений: 1294
| Цитата Азазель ( ) оригинал, координаты не менял как и спавн
Азазель, это и есть ответ на Ваш вопрос.
В Вашем случае для поворота НПС относительно оси Y, необходимо установить path_look. Но и этого мало. Точки path_walk и path_look, должны быть связаны флагом. Так что, разбирайте all.spawn и приводите всё в соответствие. Также немного нужно переделать секцию [meet], чтобы НПС поворачивался в сторону ГГ, при диалоге с ним.
Если нет желания ковырять all.spawn, тогда используйте переход с walker на схему remark при приближении ГГ к НПС.
Терпение...... И все получится!
Сообщение отредактировал makdm - Ср, 27.11.2013, 14:03 |
|
|
Эти 0 пользователя(ей) поблагодарили makdm за это полезное сообщение: |
|
|
FantomICW | Дата: Ср, 27.11.2013, 17:13 | Сообщение # 709 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| Азазель, как сказал makdm, или через ремарк, или через meet. Дополнлишь, что для meet можно использовать следующее: Код victim = расстояние_в_цифрах | actor close_victim = actor ;В зависимости от параметра close_distance far_victim = actor ;В зависимости от far_distance По умолчанию close_distance - 3, far_distance - 5. Для remark: Код target = story | actor
Сообщение отредактировал FantomICW - Ср, 27.11.2013, 17:13 |
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
Азазель | Дата: Ср, 27.11.2013, 20:02 | Сообщение # 710 |
Новичок
Пользователи
Сообщений: 77
| FantomICW, Ну я конечно слаб в логике но не настолько. Логика meet данная еще у пыс есть. Не то что у меня. А суть проблемы именно в застревании нпса. Данный баг часто встречал если нпсу надо встать рядом со стеной. Он останавливался лицом к стене и не реагировал пока в него со всей дури не втемяшишься.
|
|
|
Эти 0 пользователя(ей) поблагодарили Азазель за это полезное сообщение: |
|
|
NIV | Дата: Сб, 30.11.2013, 20:25 | Сообщение # 711 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| Подскажите, пожалуйста, как заспанить оружие с установленными апгрейтами?
В файле w_toz34.ltx дописал новый ствол:
Код [wpn_toz34_kardan]:wpn_toz34 $spawn = "weapons\wpn_toz34_kardan" description = st_wpn_sig550_strelok_descr inv_name = st_wpn_sig550_strelok
upgrades = up_gr_firstab_toz34, up_gr_firstcd_toz34, up_gr_firstef_toz34, up_gr_seconab_toz34, up_gr_seconcd_toz34, up_gr_thirdab_toz34, up_gr_thirdcd_toz34, up_gr_thirdef_toz34 installed_upgrades = up_firsta_toz34, up_firstc_toz34, up_seconc_toz34, up_thirda_toz34, up_thirdc_toz34 upgrade_scheme = upgrade_scheme_toz34
Оружие спанится через all.spawn в ящике. Текстовое описание оружия соответствует st_wpn_sig550_strelok_descr, но само оружие апгрейтов не имеет, и дерево апгрейтов для него не открывается. Что нужно исправить?
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
Сообщение отредактировал NIV - Сб, 30.11.2013, 20:39 |
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
denis2000 | Дата: Сб, 30.11.2013, 21:46 | Сообщение # 712 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| NIV, В файл inventory_upgrades.ltx добавляли ствол?
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 01.12.2013, 01:32 | Сообщение # 713 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Доброй ночи. Такой вопрос. Каким образом на тайники Стрелка вешаются метки тайников?
Пытался сделать метку на "персональный" рюкзак в чистом ЗП. Мои правки.
[cut=Рестриктор спавна рюкзака.][logic] active = sr_idle@start
[sr_idle@start] on_info = {=zat_1001_test_dist -zat_1001_test_spawn} sr_idle@spot %+zat_1001_test_spawn =zat_1001_test_spawn%
[sr_idle@spot] on_info = {-zat_1001_test_spot} sr_idle@nil %+zat_1001_test_spot =give_treasure(personal_inventory_box_1_mapspot)%
[sr_idle@nil] [/cut]
[cut=секрет Затон][list_zaton] personal_inventory_box_1_mapspot
zat_hiding_place_1 zat_hiding_place_2 zat_hiding_place_3 zat_hiding_place_4 zat_hiding_place_5 zat_hiding_place_6 zat_hiding_place_7 zat_hiding_place_8 zat_hiding_place_9 zat_hiding_place_10 zat_hiding_place_11 zat_hiding_place_12 zat_hiding_place_13 zat_hiding_place_14 zat_hiding_place_15 zat_hiding_place_16 zat_hiding_place_17 zat_hiding_place_18 zat_hiding_place_19 zat_hiding_place_20 zat_hiding_place_21 zat_hiding_place_22 zat_hiding_place_23 zat_hiding_place_24 zat_hiding_place_25 zat_hiding_place_26 zat_hiding_place_27 zat_hiding_place_28 zat_hiding_place_29 zat_hiding_place_30 zat_hiding_place_31 zat_hiding_place_32 zat_hiding_place_33 zat_hiding_place_34 zat_hiding_place_35 zat_hiding_place_36 zat_hiding_place_37 zat_hiding_place_38 zat_hiding_place_39 zat_hiding_place_40 zat_hiding_place_41 zat_hiding_place_42 zat_hiding_place_43 zat_hiding_place_44 zat_hiding_place_45 zat_hiding_place_46 zat_hiding_place_47 zat_hiding_place_48 zat_hiding_place_49 zat_hiding_place_50 zat_hiding_place_51 zat_hiding_place_52 zat_hiding_place_53 zat_hiding_place_54 zat_hiding_place_55
[personal_inventory_box_1_mapspot] empty = true
[zat_hiding_place_1] wpn_pm = 1, 1 ammo_9x18_fmj = 2, 1
[zat_hiding_place_2] medkit = 1, 1 drug_radioprotector = 2, 1
[zat_hiding_place_3] ammo_9x18_fmj = 3, 1 ammo_9x19_fmj = 2, 1
[zat_hiding_place_4] wpn_ak74 = 1, 1 ammo_5.45x39_fmj = 3, 1
[zat_hiding_place_5] conserva = 3, 1
[zat_hiding_place_6] ammo_gauss = 1, 1 medkit_army = 3, 1
[zat_hiding_place_7] wpn_spas12 = 1, 1 ammo_12x70_buck = 2, 1
[zat_hiding_place_8] antirad = 2, 1 bandage = 3, 1
[zat_hiding_place_9] antirad = 1, 1 medkit_scientic = 1, 1
[zat_hiding_place_10] medkit = 1, 1 bandage = 2, 1
[zat_hiding_place_11] medkit = 1, 1 bandage = 1, 1 ammo_5.45x39_fmj = 2, 1
[zat_hiding_place_12] medkit = 2, 1
[zat_hiding_place_13] ammo_9x19_fmj = 2, 1 ammo_5.56x45_ss190 = 3, 1
[zat_hiding_place_14] bandage = 3, 1 medkit_army = 2, 1 drug_coagulant = 1, 1 drug_booster = 1, 1
[zat_hiding_place_15] stalker_outfit = 1, 1 vodka = 1, 1
[zat_hiding_place_16] wpn_mp5 = 1, 1 ammo_9x19_fmj = 3, 1 grenade_rgd5 = 2, 1
[zat_hiding_place_17] grenade_rgd5 = 2, 1 medkit = 1, 1 bandage = 1, 1
[zat_hiding_place_18] wpn_svd = 1, 1 ammo_7.62x54_7h1 = 1, 1
[zat_hiding_place_19] grenade_f1 = 3, 1 medkit = 2, 1
[zat_hiding_place_20] ammo_5.45x39_fmj = 2, 1 wpn_ak74 = 1, 1 ammo_vog-25 = 2, 1 wpn_addon_grenade_launcher = 1, 1
[zat_hiding_place_21] ammo_5.56x45_ss190 = 2, 1 ammo_9x39_pab9 = 3, 1
[zat_hiding_place_22] wpn_l85 = 1, 1 ammo_5.56x45_ss190 = 2, 15
[zat_hiding_place_23] bread = 1, 1 kolbasa = 1, 1 conserva = 1, 1 vodka = 2, 1 energy_drink = 2, 1
[zat_hiding_place_24] energy_drink = 2, 1 ammo_5.56x45_ss190 = 3, 1 ammo_5.45x39_fmj = 3, 1 medkit = 2, 1
[zat_hiding_place_25] wpn_addon_scope = 1, 1 wpn_addon_grenade_launcher = 1, 1 ammo_vog-25 = 3, 1
[zat_hiding_place_26] ammo_11.43x23_fmj = 2, 1 wpn_colt1911 = 1, 1
[zat_hiding_place_27] wpn_toz34 = 1, 1 ammo_12x70_buck = 2, 1
[zat_hiding_place_28] vodka = 1, 1 wpn_pm = 1, 1
[zat_hiding_place_29] wpn_lr300 = 1, 1 ammo_5.56x45_ss190 = 2, 1 bandage = 1, 1
[zat_hiding_place_30] wpn_desert_eagle = 1, 1 ammo_11.43x23_fmj = 2, 1 ammo_11.43x23_fmj = 1, 1
[zat_hiding_place_31] drug_antidot = 2, 1 drug_radioprotector = 1, 1 drug_coagulant = 1, 1 bandage = 2, 1
[zat_hiding_place_32] ammo_pkm_100 = 1, 1 ammo_pkm_100 = 1, 1
[zat_hiding_place_33] bandage = 3, 1 medkit = 2, 1
[zat_hiding_place_34] wpn_beretta = 1, 1 ammo_9x19_fmj = 3, 1
[zat_hiding_place_35] grenade_f1 = 3, 1
[zat_hiding_place_36] ammo_m209 = 3, 1 wpn_addon_grenade_launcher_m203 = 1, 1
[zat_hiding_place_37] ammo_5.45x39_fmj = 3, 1
[zat_hiding_place_38] ammo_7.62x54_7h1 = 2, 1
[zat_hiding_place_39] medkit = 2, 1 drug_anabiotic = 2, 1 drug_antidot = 1, 1 bandage = 2, 1
[zat_hiding_place_40] ammo_vog-25 = 3, 1 medkit_scientic = 1, 1 energy_drink = 1, 1 energy_drink = 1, 1
[zat_hiding_place_41] wpn_wincheaster1300 = 1, 1 ammo_12x70_buck = 2, 1
[zat_hiding_place_42] ammo_5.45x39_fmj = 2, 1 medkit = 1, 1
[zat_hiding_place_43] ammo_9x39_pab9 = 4, 1 ammo_11.43x23_fmj = 2, 1
[zat_hiding_place_44] bandage = 3, 1 vodka = 1, 1 energy_drink = 2, 1
[zat_hiding_place_45] wpn_lr300 = 1, 1 ammo_5.56x45_ss190 = 2, 1 ammo_m209 = 4, 1
[zat_hiding_place_46] ammo_gauss = 1, 1 medkit_army = 3, 1
[zat_hiding_place_47] grenade_rgd5 = 3, 1
[zat_hiding_place_48] conserva = 1, 1 vodka = 1, 1
[zat_hiding_place_49] wpn_vintorez = 1, 1
[zat_hiding_place_50] drug_coagulant = 2, 1 medkit = 2, 1 energy_drink = 3, 1 ammo_5.45x39_fmj = 2, 1
[zat_hiding_place_51] ammo_gauss = 1, 1 medkit_army = 3, 1
[zat_hiding_place_52] bandage = 2, 1 medkit= 1, 1
[zat_hiding_place_53] vodka = 3, 1
[zat_hiding_place_54] ;helm_respirator = 1, 1 ammo_11.43x23_fmj = 3, 1 wpn_sig220 = 1, 1 bandage = 3 medkit = 3 antirad = 2 conserva = 2 energy_drink = 3, 1
[zat_hiding_place_55] wpn_ak74 = 1, 1 [/cut]
[cut=Функция спавна рюкзака через скрипт]function mod_distanse(actor, npc) if dont_has_alife_info("zat_test_quest_spawn_items") then local actor_pos=db.actor:position() local zat_test1=actor_pos:distance_to(vector():set(-318.35098266602,14.892880439758,516.04516601563),312637,124)<12.0 if zat_test1 then give_info("zat_test_quest_spawn_items") end end if has_alife_info("zat_test_quest_spawn_items") and dont_has_alife_info("zat_test_quest_spawn_items_spawn") then alife():create("personal_inventory_box_1",vector():set(-318.35098266602,14.892880439758,516.04516601563),312637,124) give_info("zat_test_quest_spawn_items_spawn") end if has_alife_info("zat_test_quest_spawn_items_spawn") and dont_has_alife_info("zat_test_quest_spawn_items_spawn1") then xr_effects.spawn_object_in(actor, npc, {"wpn_ak74","personal_inventory_box_1"}) give_info("zat_test_quest_spawn_items_spawn1") end end[/cut]
[cut=Секция в алл.спавн][1867]
; cse_abstract properties section_name = space_restrictor name = personal_inventory_box_1_mapspot position = -318.350982666016, 14.8928804397583, 516.045166015625 direction = 0, 0, 0 version = 128 script_version = 12
; cse_alife_object properties game_vertex_id = 124 distance = 0 level_vertex_id = 312637 object_flags = 0xffffff3e custom_data = [secret]
; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 0.863488972187042
; cse_alife_space_restrictor properties restrictor_type = 3
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;[/cut]
Рюкзак спавнится. Автомат в нем тоже. Метка на карте не появляется. Что еще нужно прописать и где?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
FantomICW | Дата: Вс, 01.12.2013, 02:15 | Сообщение # 714 |
Лидер «Свободы»
Свобода
Сообщений: 4438
| sergej5500, попробуй подправить секцию тайника: Код [personal_inventory_box_1_mapspot] empty = {-zat_test_quest_spawn_items} true, false Добавлено (01.12.2013, 02:15) --------------------------------------------- Кстати, спавн предметов в тайник также можно проделать через рестриктор.
Сообщение отредактировал FantomICW - Вс, 01.12.2013, 02:14 |
|
|
Эти 0 пользователя(ей) поблагодарили FantomICW за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 01.12.2013, 11:06 | Сообщение # 715 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| Цитата FantomICW ( ) sergej5500, попробуй подправить секцию тайника:
Спасибо, но не помогает. Спавн предметов - это уже частность. Нужна метка на тайнике.
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
NIV | Дата: Вс, 01.12.2013, 17:14 | Сообщение # 716 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| Цитата denis2000 ( ) В файл inventory_upgrades.ltx добавляли ствол? Спасибо, получилось заспанить оружие с апргрейдами! Только дерево апгрейдов пока недоступно, разбираюсь с этим.
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
Сообщение отредактировал NIV - Вс, 01.12.2013, 17:18 |
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 01.12.2013, 17:34 | Сообщение # 717 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, А разве на пустой тайник метка становиться?
Цитата NIV ( ) Только дерево апгрейдов пока недоступно, разбираюсь с этим. Дерево не доступно потому, что ствол не прописан данному механику в апгрейды.
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
sergej5500 | Дата: Вс, 01.12.2013, 17:44 | Сообщение # 718 |
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
| denis2000, Возникла мысль прописать в конфиг тайника level_spot. Можно ли отследить, когда ящик станет пуст (игрок все забрал), затем метку убрать?
|
|
|
Эти 0 пользователя(ей) поблагодарили sergej5500 за это полезное сообщение: |
|
|
denis2000 | Дата: Вс, 01.12.2013, 18:04 | Сообщение # 719 |
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
| sergej5500, Это давно реализовано в treasure_manager.script
"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..." (Чугунный всадник)
|
|
|
Эти 0 пользователя(ей) поблагодарили denis2000 за это полезное сообщение: |
|
|
NIV | Дата: Вс, 01.12.2013, 18:05 | Сообщение # 720 |
Полевой исследователь
Ученые сталкеры
Сообщений: 167
| sergej5500, я выдавал сообщение о тайнике так: Код function red_kardan_give_secret () local yantar_kardan_treasure_id_id = get_story_object_id("yantar_kardan_treasure_id")
level.map_add_object_spot_ser(yantar_kardan_treasure_id_id, "treasure", "") news_manager.send_treasure(0) end где yantar_kardan_treasure_id, это story_id соответствующего ящика в all.spawn Код [story_object] story_id = yantar_kardan_treasure_id
Вопрос про автоматическое снятие меток меня тоже интересует. Пытался смотреть, как сделан treasure_manager в Чн - там большие отличия от ЗП.
Изменяем реальность S.T.A.L.K.E.R. CoP: "Цена Новых Исследований" / "New Investigations' Value"
|
|
|
Эти 0 пользователя(ей) поблагодарили NIV за это полезное сообщение: |
|
|
|