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

Помощь тем кто хочет знать больше о игре и модах

Если у вас появились вопросы по модостроению в игре S.T.A.L.K.E.R. Задавайте их в этой теме - умные головы,
модосторители и просто разбирающиеся в программировании люди вам ответят.


Много интересного материала здесь (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)", ее и надо расскомментировать, должно получиться вот так:
Код
function abort(fmt, ...)
                     local reason = string.format(fmt, ...)
                     error_log(reason)
end

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

Первый:
Код
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)

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


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


Посты, для которых есть свои категории, из этой темы будут удаляться или перемещаться в соответсвующую тему. Персональных извещений в ЛС о переносе\удалении поста не будет, ищите сами. Учитывайте, что в системах Ucoz тема не обновляется в статистике при переносе поста.
Посты, написанные здесь-же после переноса, будут расцениваться как кросспостинг, со всеми вытекающими


[cut noguest=Первый юбилей нашей темы]

Здравствуйте господа модостроители, и все так или иначе причастные к этому.
Нашей теме исполнился 1 год.
От души поздравляю Всех Вас дорогие друзья, творческих успехов.
Хочу так же выразить отдельную благодарность denis2000 и ХОВАН.

tracker 23.06.11



[/cut]
 
denis2000Дата: Пт, 10.04.2020, 12:28 | Сообщение # 2971
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Rembo-2, Скорее всего ошибка в имени смарта на котором спавниться сквад.

"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
336968975Дата: Пт, 10.04.2020, 16:04 | Сообщение # 2972
Гражданский
Пользователи
Сообщений: 3
Награды: 0
Репутация: [ 0 ]

Не загружаются сохранения. Иногда не срабатывают скрипты в задания, в начале например, беру взрывчатку для взрыва дверей, но задание не обновляется и по прежнему весит найти взрывчатку. Решается это перепрохождением миссии. Но вот большая часть сохранений почему-то не работает. Это может быть связано с те .что установлены дополнения [ AI Additions ]

[ Absolute Structures Pack ]

[ Absolute Nature 3 Lite, for SGM 2.2 ]

[ Dinamic News 1.02 ]
 
asd123Дата: Ср, 15.04.2020, 03:01 | Сообщение # 2973
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Здравствуйте! Подскажите, можно ли бинд анимаций/бинд анимации или функции из xr_effects моста в Рыжем лесу использовать для перевода вертолёта из анимации idle на анимацию die и наоборот? Вообще, будет ли работать данный функционал на вертолёты?

p.s. Вот его функционал(вроде весь. Скачал локацию, в описании говорилось что есть мост и он в рабочем состоянии)

[cut=bind_red_forest_bridge.script]
--'******************************************************
--'* Биндер объекта моста .
--'******************************************************

function bind(obj)
obj:bind_object(bridge_binder(obj))
db.storage[obj:id()] = { }
end

class "bridge_binder" (object_binder)
function bridge_binder:__init(obj) super(obj)
self.bridge = obj
local se_koleso = alife():story_object(516)
self.se_koleso_id = se_koleso and se_koleso.id
-- printf("koleso = [%s]", tostring(self.se_koleso_id))
end
function bridge_binder:net_spawn(server_object)
if not object_binder.net_spawn(self, server_object) then
return false
end
db.add_bridge(self.bridge, self)
printf("callback!!!!bridge!!!!")
self.object:set_callback(callback.script_animation, self.animation_end_callback, self)
self.bridge:get_physics_object():stop_anim()
if self.koleso ~= nil then
self.koleso:get_physics_object():stop_anim()
end
db.add_bridge(self.bridge, self)
self.idle_snd = sound_object("device\\bridge\\bridge_move")
self.down_snd = sound_object("device\\bridge\\bridge_down")
self.start_snd = sound_object("device\\bridge\\bridge_start")
self.stop_snd = sound_object("device\\bridge\\bridge_stop")
self.idle = 50000
return true
end

function bridge_binder:net_destroy()
self.idle_snd:stop()
self.down_snd:stop()
self.start_snd:stop()
self.stop_snd:stop()
object_binder.net_destroy(self)
end

function bridge_binder:anim_forward()
self.idle_snd:stop()
self.bridge:get_physics_object():stop_anim()
if self.koleso ~= nil then
self.koleso:get_physics_object():run_anim_forward()
end
self.idle_end = self.idle + game.time()
self.start_snd:play_at_pos( self.object, self.object:position(), 0, sound_object.s3d)
self.idle_snd:play_at_pos( self.object, self.object:position(), 5, sound_object.s3d + sound_object.looped)
self.bridge_idle = true
self.bridge_anim_fwd = true
end

function bridge_binder:anim_backward()
self.idle_snd:stop()
self.bridge:get_physics_object():stop_anim()
if self.koleso ~= nil then
self.koleso:get_physics_object():run_anim_back()
end
self.idle_end = self.idle + game.time()
self.start_snd:play_at_pos( self.object, self.object:position(), 0, sound_object.s3d)
self.idle_snd:play_at_pos( self.object, self.object:position(), 5, sound_object.s3d + sound_object.looped)
self.bridge_idle = true
self.bridge_anim_fwd = false
end

function bridge_binder:anim_stop()
self.bridge:get_physics_object():stop_anim()
if self.koleso ~= nil then
self.koleso:get_physics_object():stop_anim()
end
self.bridge_idle = false
self.stop_snd:play_at_pos( self.object, self.object:position(), 0, sound_object.s3d)
end

function bridge_binder:update(delta)
object_binder.update(self, delta)
if self.se_koleso_id ~= nil and (self.koleso == nil) and (db.storage[self.se_koleso_id] ~= nil) and (db.storage[self.se_koleso_id].object ~= nil) then
self.koleso = db.storage[self.se_koleso_id].object
printf("koleso est'")
self.koleso:get_physics_object():stop_anim()
end
if self.anim_time then
self.bridge:get_physics_object():anim_time_set(self.anim_time)
self.anim_time = nil
end
if self.bridge_idle == true then
if self.idle_end <= game.time() then
if self.bridge_anim_fwd == true then
self.bridge:get_physics_object():run_anim_forward()
else
self.bridge:get_physics_object():run_anim_back()
end
end
else
self.object:get_physics_object():stop_anim()
if self.idle_snd ~= nil then
self.idle_snd:stop()
end
end
end

function bridge_binder:animation_end_callback( is_end )
printf("animation_callback!!!!!!bridge!!!!")
if is_end then
db.actor:give_info_portion("red_bridge_down_done")
self.down_snd:play_at_pos( self.object, self.object:position(), 0, sound_object.s3d)
self.bridge_idle = false
if self.koleso ~= nil then
self.koleso:get_physics_object():stop_anim()
end
else
db.actor:give_info_portion("red_bridge_actor_out")
self.down_snd:play_at_pos( self.object, self.object:position(), 0, sound_object.s3d)
self.bridge_idle = false
if self.koleso ~= nil then
self.koleso:get_physics_object():stop_anim()
end
end
end
-- Standart function for save
function bridge_binder:net_save_relevant()
return true
end
-- Saving crow
function bridge_binder:save(packet)
set_save_marker(packet, "save", false, "bridge_binder")
object_binder.save(self, packet)
xr_logic.save_obj(self.object, packet)

packet:w_bool(self.bridge_idle==true)
packet:w_bool(self.bridge_anim_fwd==true)
if self.idle_end then
packet:w_u32(self.idle_end)
else
packet:w_u32(0)
end
if self.object and self.object:get_physics_object() and self.object:get_physics_object():anim_time_get() then
packet:w_float(self.object:get_physics_object():anim_time_get())
else
packet:w_float(0)
end
set_save_marker(packet, "save", true, "bridge_binder")
end
-- Loading crow
function bridge_binder:load(packet)
set_save_marker(packet, "load", false, "bridge_binder")
object_binder.load(self, packet)
xr_logic.load_obj(self.object, packet)
self.bridge_idle = packet:r_bool()
self.bridge_anim_fwd = packet:r_bool()
self.idle_end = packet:r_u32()
self.anim_time = packet:r_float()
set_save_marker(packet, "load", true, "bridge_binder")
end[/cut]
[cut=xr_effects.script]
-- Функции для управления мостом.

function bridge_down()
db.bridge_by_name["red_bridge"]:anim_forward()
end
function bridge_up()
db.bridge_by_name["red_bridge"]:anim_backward()
end
function bridge_stop()
db.bridge_by_name["red_bridge"]:anim_stop()
end

function anim_obj_down(actor, npc, p)
if p[1] ~= nil then
db.anim_obj_by_name[p[1]]:anim_forward()
end
end
function anim_obj_up(actor, npc, p)
if p[1] ~= nil then
db.anim_obj_by_name[p[1]]:anim_backward()
end
end[/cut]
[cut=Сама секция отсека моста, использующая анимации]
; cse_abstract properties
section_name = red_forest_bridge
name = red_bridge
position = -144.884460449219, 10.0784387588501, -270.569519042969
direction = 0, 0, 0
id = 65535
version = 124
script_version = 8
spawn_id = 5686

; cse_alife_object properties
game_vertex_id = 961
level_vertex_id = 27072
object_flags = 0xffffff3a
custom_data = <<END
[collide]
ignore_static
[animated_object]
END

; cse_visual properties
visual_name = dynamics\scene_objects\red_forest\red_forest_bridge_01_dynamic

; cse_ph_skeleton properties
skeleton_name = bridge_down
skeleton_flags = 1

; cse_alife_object_physic properties
physic_type = 0x3
mass = 10[/cut]

Добавлено (15.04.2020, 03:56)
---------------------------------------------
И ещё вопрос. С чем связана проблема с забором возле моста в Лиманск в Рыжем лесу? И можно ли её как-то исправить?
[cut=Забор сил тьмы][/cut]


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Ср, 15.04.2020, 03:56
 
denis2000Дата: Ср, 15.04.2020, 09:16 | Сообщение # 2974
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата asd123 ()
Вообще, будет ли работать данный функционал на вертолёты?

Нет. Вертолет и мост объекты разного движкового класса с разными биндерами.
Поясните что вам конкретно требуется и возможно найдутся способы реализации вашего плана.

Цитата asd123 ()
С чем связана проблема с забором возле моста в Лиманск в Рыжем лесу?

Какая проблема? Прозрачность решетки? Вероятно некорректно настроен материал в части шейдера.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
asd123Дата: Ср, 15.04.2020, 13:11 | Сообщение # 2975
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

denis2000, понял) Жаль, очень жаль...
Чего я хочу? Хочу реализовать анимацию die из моделей вертолётов. Сцена такая: летит вертолёт, по нему попадают из гаусски(например), и он вместо плавного спуска начинает опускаться вращаясь.

Цитата denis2000 ()
Какая проблема? Прозрачность решетки?

Да, она. Когда отходишь от забора, то он темнеет. Спасибо за наводку, поищу модельку забора и поменяю настройку

Добавлено (17.04.2020, 08:49)
---------------------------------------------
Здравствуйте. Вопрос по логике вертушек. В общем, добавил я для теста вертолёт с 11-ю точками path_move и path_look, только почему-то он не обрабатывает 10 точек из path_look. В 11 точке(которая обновляет патруль и выводит на первую) он уже разворачивается на первую точку обзора, и снова продолжает летать, смотря только в неё. В чем проблема? Я недоглядел, или кривые настройки логики/скрипта heli_move?

Логика такая:
Код
[logic]
active = heli_move@lime_fly

[heli_move@lime_fly]
path_move = red_lime_heli_move
path_look = red_lime_heli_look
max_velocity = 60
engine_sound = true
invulnerable = true
min_mgun_attack_dist = 1
max_mgun_attack_dist = 150
min_rocket_attack_dist = 50
max_rocket_attack_dist = 180
use_rocket = true
use_mgun = true
enemy = all
upd_vis = 3


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Пт, 17.04.2020, 08:58
 
denis2000Дата: Пт, 17.04.2020, 09:12 | Сообщение # 2976
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

asd123, Возможные проблемы:
1. Проблема в настройках путей или точек пути (неверно настроены переходы между точками или флаги точек).
2. Проблема в расположении точек: из-за специфики движения вертолета по маршруту он не может достигать некоторых точек (например если точки слишком близко расположены достичь их помешают иннерционно-скростные характеристики объекта).


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
asd123Дата: Пт, 17.04.2020, 10:14 | Сообщение # 2977
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Цитата denis2000 ()
1. Проблема в настройках путей или точек пути (неверно настроены переходы между точками или флаги точек).

Хмм... Вроде переходы нормальные(логика то не бьётся, после 11-ой точки он снова начинает смотреть в первую, хотя в предыдущие 10 не смотрит), единственное что меня смущает - это flags = 0x1. Можно поподробнее,
на что вообще влияет этот параметр и нужно ли здесь ставить разные значения? А то на руках логика ТЧшных вертолётов, и там например на Янтаре, у точек путей разные flags. Вот waypoint одного из вертолётов с Янтаря ТЧ
Код
[heli_look_1]
points = p0,p1,p2,p3,p4
p0:name = wp00|e|w=1
p0:flags = 0x1
p0:position = 60.161979675293,0.035919189453125,-51.474308013916
p0:game_vertex_id = 1443
p0:level_vertex_id = 70896
p0:links = p1(1)

p1:name = wp01
p1:flags = 0x2
p1:position = 68.5319290161133,0.0297470092773438,-29.8421039581299
p1:game_vertex_id = 1508
p1:level_vertex_id = 75687
p1:links = p2(1)

p2:name = wp02
p2:flags = 0x4
p2:position = 61.4718818664551,-0.845855712890625,-10.8075866699219
p2:game_vertex_id = 1508
p2:level_vertex_id = 71781
p2:links = p3(1)

p3:name = wp03
p3:flags = 0x8
p3:position = 58.6818428039551,-0.845855712890625,22.6934432983398
p3:game_vertex_id = 1509
p3:level_vertex_id = 70154
p3:links = p4(1)

p4:name = wp04
p4:flags = 0x10
p4:position = 91.0716552734375,0.0314712524414063,12.4605712890625
p4:game_vertex_id = 1513
p4:level_vertex_id = 87195


У мутантов тоже есть группировки. © Движок X-Ray




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

asd123, Флаг - это очень важный параметр в настройках пути/точек. Флаг связывает точку пути move и точку пути look (или набор точек) куда будет "смотреть" НПС/МОБ/Вертолет.
Иными словами если вы указали в точке пути move флаг №1, то в качестве точки пути look куда будет "смотреть" вертолет будет выбрана одна из точек пути с таким же флагом.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
asd123Дата: Пт, 17.04.2020, 11:06 | Сообщение # 2979
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

denis2000, так... А числа после 0x1 можно выставлять любые? Я на стороннем ресурсе нашёл вот что:
Код
Флажок всегда начинается со значения 0x1
Флажки в move и look должны совпадать. Т.е флажок в точке, где задали параметр |e, должен совпадать с флажком в точке look, иначе получим вылет.
Флажок ВСЕГДА начинается со значения 0x1. Известные значения мне: (0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80,...), однако всречал примеры, где заданы значения 0x400, 0x800 и т.д Откуда значение берется и четкие его рамки, кроме четности (почему тогда не используется 0x6 ?) мне не известны.

Код
Сегодня(делал логику и пути вертолетов) столкнулся с таким явлением: При установке флажка flags = 0x6 по прибытии вертолета в точку с этим флагом - ловил стабильный вылет "бад_аргумент3"... При замене этого флага на flags = 0x8 вылет прекратился. Вот поэтому наверное и не используются флаги с таким значением. Хотя почему именно "06" - мне неизвестно.


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Пт, 17.04.2020, 11:07
 
denis2000Дата: Пт, 17.04.2020, 11:30 | Сообщение # 2980
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

asd123, Набор флагов представлен как 32 разрядное двоичное число, то есть всего существует 32 флага.
Если флаг установлен то соотвествующий бит этого числа равен 1, если нет то 0.
Вот пример такого числа:
00000000000000000000000000001000
В нем установлен флаг №3 (счет с нуля). Но записывать такое число крайне не удобно, поэтому в ACDC было принято решение кодировать его в HEX формате (шестнадцатеричный формат):
BIN: 00000000000000000000000000001000 == HEX: 0x8


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
asd123Дата: Вт, 21.04.2020, 20:23 | Сообщение # 2981
Mr. «Магма»
Военные сталкеры
Сообщений: 1386
Награды: 10
Репутация: [ 423 ]

Доброго времени суток. Подскажите пожалуйста, на что влияет параметр distance в alife файлах?

И ещё. Я поставил анимпоинт, но почему-то при спавне НПС, который по логике должен сразу же идти в точку анимпоинта и садиться(animpoint_sit_high), он уходит куда-то к краю локации, а потом телепортируется в анимпоинт и садится в анимацию. Это как-то связано с AI сеткой?
upd: Слегка сместил анимпоинт на сетку, теперь сразу идёт к нему. Но теперь проблема, что НПС садится неправильно - висит в воздухе. Можно как-то настроить анимпоинт, чтобы и работал хорошо, и НПС не уходил? Может, телепортация на точку анимпоинта/спавн на точке анимпоинта помогут?


У мутантов тоже есть группировки. © Движок X-Ray




Сообщение отредактировал asd123 - Вт, 21.04.2020, 20:31
 
denis2000Дата: Ср, 22.04.2020, 09:28 | Сообщение # 2982
Полевой исследователь
Ученые сталкеры
Сообщений: 2399
Награды: 35
Репутация: [ 1918 ]

Цитата asd123 ()
Подскажите пожалуйста, на что влияет параметр distance в alife файлах?

Ни на что не влияет.
Цитата asd123 ()
Можно как-то настроить анимпоинт, чтобы и работал хорошо, и НПС не уходил?

Создайте новый смартковер с новыми анимациями на нужной высоте и используйте.
Смартковер должен стоять строго на АИ-сетке (иначе он будет просто недоступен для НПС или НПС будет занимать его с различными глюками), положение НПС в нем регламентируется анимациями в нем.


"Он ловко выхватил из-под себя табуретку и очень метко и сильно бросил ее в докладчика..."
(Чугунный всадник)
 
Rembo-2Дата: Вс, 26.04.2020, 21:25 | Сообщение # 2983
Гражданский
Пользователи
Сообщений: 10
Награды: 0
Репутация: [ 0 ]

У меня вопрос появился.
По заданию необходимо из ТД проследовать на Затон, чтобы попасть на Агропром.
Но точка перехода на Затоне находится очень в неудачном месте. Появляешься и спереди отряды Альфы, а слева, враждебные бандиты, очень трудно выбраться оттуда. Я пытался переместить переход на Затоне в allspawnе, переместиться в новых координатах можно, но метка на карте остается на прежнем месте, а в новом, просто, без всяких вопросов перекидывает на ТД. А обратно появляешься снова на прежнем переходе. Т.е. на Затоне получается две точки перехода на ТД.


Сообщение отредактировал Rembo-2 - Вс, 26.04.2020, 21:28
 
sergej5500Дата: Пн, 27.04.2020, 11:31 | Сообщение # 2984
Полевой Исследователь
Ученые сталкеры
Сообщений: 3793
Награды: 29
Репутация: [ 1355 ]

Rembo-2,

После правки алл.спавн нужно начать новую игру. То есть проходить мод с самого начала.
 
term2tДата: Пн, 27.04.2020, 22:03 | Сообщение # 2985
Гражданский
Пользователи
Сообщений: 12
Награды: 4
Репутация: [ 0 ]

Доброго времени суток.
Вопрос состоит в том, как одевать сталкеров? оружие подбирают или кидаю на них. но броню кинуть не получается и не подбирают. SGM 2.2
Конкретно нужно для защитников склада Долга. Гавриленко и так в Экзике. Чтоб во фриплее не умирали. Одного оружия мало(((. Спасибо БОЛЬШОЕ заранее.
 
Поиск: