Перейти к контенту

[SoC] Ковыряемся в файлах


Рекомендуемые сообщения

 

 

ошибкой "Can't open section..."

Если движок ругается, значит у вас нет секции на которую вы хотите переключить логику нпс. Или же не читается ваш файл с логикой.


 

 

почему не работает от имени Прапора

Если начинается диалог со слов "Привет", значит твой стартовый диалог перебивается дефолтным старотовым(dm_hello_dialog). Значит, возможно, либо не выполняются условия твоего диалога, либо в профиле нпс дефолтный диалог стоит первым. Так же такое бывает, если нажать на диалог, когда нпс говорит в ремарке.

  • Спасибо 1
  • Полезно 2

Вообще-то я белая и пушистая...

Ссылка на комментарий

 

 

Если движок ругается, значит у вас нет секции на которую вы хотите переключить логику нпс. Или же не читается ваш файл с логикой.
[logic@gar_angar_drug2]
active = walker@gar_angar_drug2
 
[walker@gar_angar_drug2]
..........
 
[kamp@gar_angar_drug2]
..........

в таком виде все прекрасно. Делаю так:

[logic@gar_angar_drug2]
active = {+gar_breakthrough_complete} kamp@gar_angar_drug2, walker@gar_angar_drug2

[walker@gar_angar_drug2]
..........

[kamp@gar_angar_drug2]
..........

при загрузке сохранения и при начале НИ вылет, с вышеописанной руганью. Тестю это на 1.0005, похоже что для тега active такой способ не поддерживается. Может в 1.0006 добавлено ? Вы на какой версии это проверяли ?

  • Не нравится 1
Ссылка на комментарий
function gulag:get_job_path_name( job )
	local section = job.section

	if not self.ltx:line_exist( section, "active" ) then
		abort( "gulag: ltx=%s  no 'active' in section %s", self.ltx_name, section )
	end

	local active_section = self.ltx:r_string( section, "active" )
	local path_field

	for i, v in ipairs( path_fields ) do
		if self.ltx:line_exist( active_section, v ) then
			path_field = v
			break
		end
	end

	if not path_field then
		abort( "gulag: ltx=%s, there is no path in section %s", self.ltx_name, active_section )
	end

	if path_field == "center_point" then --' TODO убрать затык
		local path_name = self.name .. "_" .. self.ltx:r_string( active_section, path_field )

		if level.patrol_path_exists( path_name .. "_task" ) then
			return path_name .. "_task"
		else
			return path_name
		end
	else
		return self.name .. "_" .. self.ltx:r_string( active_section, path_field )
	end
end

 

Имеющий да усмотрит.

Изменено пользователем Dennis_Chikin
  • Нравится 1
Ссылка на комментарий

@AndreySol,  вообще такой метод работает и на четвертом.

Кстати из твоего описания я так и не понял, чего ты хочешь добиться. Чтобы при выдаче поршня непись переходил в другую секцию?

У тебя как-то так...

[logic@gar_angar_drug3]
active = walker@gar_angar_drug3

[walker@gar_angar_drug3]
path_walk = drug3_walk
path_look = drug3_look
on_info = {+gar_breakthrough_rush} walker@gar_angar_rush_drug3
on_info2 = {+gar_breakthrough_complete} kamp@gar_angar_drug3

А я бы сделал так...

[logic@gar_angar_drug3]
active = {-gar_breakthrough_rush}walker@gar_angar_drug3, {+gar_breakthrough_rush -gar_breakthrough_complete} walker@gar_angar_rush_drug3...

[walker@gar_angar_drug3]
path_walk = drug3_walk
path_look = drug3_look
on_info = {+gar_breakthrough_rush} walker@gar_angar_rush_drug3
on_info2 = {+gar_breakthrough_complete} kamp@gar_angar_drug3

Секции актив читаются слева направо с проверкой условий. Непись переходит в секцию, условие для которой будет выполнено первым.

И для четкого разграничения условий актив не бойся выдавать дополнительные поршни.

Откуда угодно. Из логики непися при переходе в другую секцию, по сигналу из точек пути.

Ссылка на комментарий

А вы бы таки в приведенный кусочек кода распечаточку-то вставили бы... ;)

Ссылка на комментарий

 

 

с вышеописанной руганью

Оффтоп...

Вообще вылета быть не должно, если правильно написана секция, в которую нужно переходить. То бишь 

.......
on_info = {+info} walker@1 

[walker@1]
.........

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

А я один раз, пока не изменил стиль и шрифт Нотепада++ не мог избавится от вылета из-за того, что было написано не look, а 1ook)))

Ссылка на комментарий

 

 

похоже что для тега active такой способ не поддерживается

Действительно, такой способ для гулагов не поддерживается ни на каком патче.

Тогда есть три варианта решения этой проблемы.

1. Менять состояние гулага по этим инфопоршням, не забывая расписывать логику всему гулагу для новых состояний.

2. Не меняя состояние гулага, выдавать логику заданному нпс в соответствии с инфопоршнями. Приблизительно вот так.
   if type == "esc_blokpost" then
        if has_alife_info("info1") then
                t = { section = "logic@esc_blockpost_patrol1",....}
        else
                t = { section = "logic@esc_blockpost_patrol2",....}

При этом надо будет добавить новые секции логики в .ltx гулага.

3. Открываем xr_gulag.script и добавляем поддержку конд листа.

В function gulag:get_job_path_name( job ), вместо строки local active_section = self.ltx:r_string( section, "active" ) пишем вот так:

    local active_section_cond = xr_logic.cfg_get_condlist(self.ltx, section, "active", self)
    local active_section = xr_logic.pick_section_from_condlist(db.actor, self, active_section_cond.condlist)

  • Спасибо 1

Вообще-то я белая и пушистая...

Ссылка на комментарий

 

А я один раз, пока не изменил стиль и шрифт Нотепада++ не мог избавится от вылета из-за того, что было написано не look, а 1ook)))

У меня был случай, вылетало из-за того что было написано не cristall_flower, а cristаll_flower. В чем разница? во втором буква а на кириллице...
История отлова этого вылета была долгой.

  • Нравится 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

Ссылка на комментарий

Ребят, есть вопрос по поводу логики...

[logic]


active = walker@at_hule
combat_ignore = combat_ignore
inv_max_weight = 10000
danger = danger_condition@vitek_voron

[walker@at_hule]
path_walk = bill_1_walk
path_look = bill_1_look
meet = meet@at_hule

[meet@at_hule]
meet_state = 4|vitek_voron_talk_free@vitek_voron_hello
meet_state_wpn = 4|vitek_voron_talk_free@vitek_voron_hello
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = true

[danger_condition@vitek_voron]
ignore_distance = 0

[combat_ignore]
combat_ignore_cond = always

 

 

По этой логики он работает прекрасно, когда подходишь, приветствует фразами vitek_voron_hello_1 и vitek_voron_hello_2, рандомно...К этому вопросов нет.

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

Для примера сидорович, когда к нему подходишь он говорит фразу приветсвия, и когда отходишь он говорит тип проветришься заходи...Как через мою логику прописать чтобы к примеру если отходишь метров на 10 то он бы тоже говорил фразу?

Ссылка на комментарий

@Wolkodav, можно попробовать так:

 

[walker@at_hule]
path_walk = bill_1_walk
path_look = bill_1_look
meet = meet@at_hule
on_actor_dist_le = 3|%+say_hello%
on_actor_dist_ge = 7|%-say_hello%
 
[meet@at_hule]
meet_state = 4|{-say_hello}vitek_voron_talk_free@vitek_voron_hello|6|{+say_hello}vitek_voron_talk_free@vitek_voron_bay
meet_state_wpn = 4|{-say_hello}vitek_voron_talk_free@vitek_voron_hello|6|{+say_hello}vitek_voron_talk_free@vitek_voron_bay
victim = 10|actor
victim_wpn = 10|actor
use = true
use_wpn = true

Но нужно тестировать.

Изменено пользователем Barmolini
Ссылка на комментарий

@Wolkodav, если есть рандомные фразы, пиши звуковую схему (удобнее в дальнейшем юзать), если одна фраза, то можно и функцию написать, а по поводу воспроизведения вот у себя взял:

on_actor_dist_le = 10 | walker 
; когда игрок подойдет ближе 10 м.
on_actor_dist_le_nvis = 10 | walker 
; то же самое, но без проверки на видимость
on_actor_dist_ge = 10 | walker 
; когда игрок будет на расстоянии больше 10 м.
on_actor_dist_ge_nvis = 10 | walker 
; то же самое, но без проверки на видимость
Ссылка на комментарий

Wolkodav Я бы попробовал вот так, на тест:

[walker@at_hule]
path_walk = bill_1_walk
path_look = bill_1_look
on_actor_dist_le_nvis = 9 | remark@new_wait

[remark@new_hello]
target = actor
snd_anim_synс = true
anim = hello
snd = trader_hello_what_have_you_got
on_signal = action_end | remark@new_wait

[remark@new_bye]
on_actor_dist_ge_nvis = 12 |remark@new_wait
snd_anim_synс = true
anim = hello
snd = trader_bye
on_signal = action_end | remark@new_wait

[remark@new_wait]
target = actor
anim = guard
on_actor_dist_le_nvis = 3 | {-voron_hello_played} remark@new_hello %+voron_hello_played%
on_actor_dist_ge_nvis = 5 | {-voron_bye_played +voron_hello_played} remark@new_bye %+voron_bye_played%
on_actor_dist_ge_nvis = 12 | walker@at_hule %-voron_hello_played -voron_bye_played%

 

 

Изменено пользователем amik

Мой архив

Сталкером не занимаюсь.

Ссылка на комментарий

[smart_terrain]

type = gar_ost

capacity = 1

cond = {+freeplay}

 

Ну и где этот самый freeplay выдается ?

Этот самый freeplay выдается вручную, для проверки.

 

 

путь напиши, и проверь существующие.

Написать - в каком смысле? А существующие пути вроде правильны. Или их надо в way_l03_agroprom.ltx прописывать?

Изменено пользователем AndrewMor

Сталкер - наше всё!

Ссылка на комментарий

Зачем оно вообще в смарте ?

 

А вообще, слона обычно едят по частям.

Если убрать все переключения отовсюду, крота сразу прописать эксклюзивом в смарт, он с начала игры в него пойдет ?

Ссылка на комментарий

 

 

Зачем оно вообще в смарте ?

Крот должен пойти под этот смарт после выдачи поршня. До его выдачи он должен быть под своей сюжетной логикой.

 

 

 

Если убрать все переключения отовсюду, крота сразу прописать эксклюзивом в смарт, он с начала игры в него пойдет ?

Не проверял, поэтому не знаю.

Сталкер - наше всё!

Ссылка на комментарий

"Крот должен пойти под этот смарт после выдачи поршня."

 

Ну так условие тогда прописывается Кроту, а не смарту.

[smart_terrains]

none = {-freeplay}

gar_ost = {+freeplay}

- вполне достаточно.

 

А для поверки вообще оставить gar_ost = true

 

Угум, сначала делаем все сразу , а потом начинаем гадать, что не работает.

 

И, да, предикаты в работах прописываются тогда, когда их много, и сталкеров много. Чтобы ни кто чужую работу не занял. Если смарт на одного сталкера с одной работой - только тормоза лишние, и место для ошибок понаделать.

  • Полезно 1
Ссылка на комментарий
И, да, предикаты в работах прописываются тогда, когда их много, и сталкеров много. Чтобы ни кто чужую работу не занял.

А такой вот вопрос: к примеру имеем три работы с одинаковым предикатом, допустим по секции спавна. Приоритеты будут работать для этих предикатных работ ? И что главнее: предикат или приоритет ?

Изменено пользователем AndreySol
Ссылка на комментарий

Если предикат не проходит - отлуп: пусть занимает какую-нибудь другую. Далее - по приоритету. Если приоритеты одинаковые... Теоретически - первая в таблице, на практике - там довольно странный и загадочный код переназначения.

 

Гм... Еще раз перечитал, и сам ничего не понял.

 

Если по другому сформулировать, то любой непись стремится занять свободную работу с наибольшим приоритетом. Но, если там есть предикат, и непись не прошел по условию, на эту работу его не пустят.

Пример с Кордоном: работа для Волка имеет наивысший приоритет. Поэтому, пока она свободна, на нее пытаются назначить всех подряд. Но подходит только Волк, так что он на ней в итоге и оказывается.

Если таких работ будет 3 - Волк займет одну, с максимальным приоритетом, остальные 2 останутся свободными.

 

upd: А, да, самое главное западло: если работа для Волка будет иметь приоритет ниже, чем другие, Волк может попасть на любую, а его работа останется свободной, и, соответственно, кто-то из неписей может оказаться без работы.

 

Просто у работ с предикатами приоритеты должны быть максимальны.

И, да, я гулаговый скрипт переписал: там если есть предикат - приоритет автоматически поднимается, + альтернативный формат описания работ.

 

типа вот так:

["esc_lager"] = {    -- Лагерь новичков на Кордоне-- "logic@esc_lager_sleeper1"    -- бункер доктора-- "logic@esc_lager_sleeper2"    -- ближний бункер к Волку-- "logic@esc_lager_sleeper3"    -- ближний бункер к Волку-- "logic@esc_lager_sleeper5"    -- в развалинах-- "logic@esc_lager_sleeper6"    -- бункер доктора-- "logic@esc_lager_sleeper7"    -- дом на входе-- "logic@esc_lager_defend1"    -- напротив костра    -- занято под Фаната-- "logic@esc_lager_defend2"    -- за кустом у развалюхи-- "logic@esc_lager_defend3"    -- ХРЕНОВЫЙ. чуть дальше и правее 2. Наемники видят !-- "logic@esc_lager_defend4"    -- типа за бункером, между ним и кустом. todo: в олспавне сдвинуть чуть дальше.-- "logic@esc_lager_defend5"    -- ХРЕНОВЫЙ. Типа за бочкой.-- "logic@esc_lager_defend6"    -- ближний бункер к Волку-- "logic@esc_lager_defend7"    -- ближний бункер к Волку-- "logic@esc_lager_defend8"    -- дальний-- "logic@esc_lager_defend9"    -- дальний (Когда-то был Петруха)-- "logic@esc_lager_defend10"    -- дальний (Толик. Был.)-- "logic@esc_lager_defend11"    -- дальний-- "logic@esc_lager_defend12"    -- Фанат. И ему здесь смерть, по тому что он первый, кого видят наймы еще от дороги.-- "logic@esc_lager_defend13"    -- дальний, и таки Волк.    -- охранники    { section = "logic@esc_lager_zoneguard1", -- "logic@esc_lager_zoneguard1",    idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_zoneguard2", -- "logic@esc_lager_zoneguard2",    idle = 0, prior = 9, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_walker3",    idle = 0, prior = 8, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_walker4",    idle = 0, prior = 8, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend2",    idle = 0, prior = 14, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend4",    idle = 0, prior = 12, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend6",    idle = 0, prior = 10, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend7",    idle = 0, prior = 9, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    -- у костра днём    { section = "logic@esc_lager_kamp1",    idle = 0, prior = 6, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_kamp1",    idle = 0, prior = 6, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_kamp1",    idle = 0, prior = 6, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    -- спящие ночью    { section = "logic@esc_lager_sleeper1",    idle = 0, prior = 5, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_sleeper2",    idle = 0, prior = 5, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_sleeper3",    idle = 0, prior = 5, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend8",    idle = 0, prior = 8, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend9",    idle = 0, prior = 7, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend10",    idle = 0, prior = 7, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    -- спящие ночью и днём    { section = "logic@esc_lager_sleeper5",    idle = 0, prior = 4, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_sleeper6",    idle = 0, prior = 3, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_sleeper7",    idle = 0, prior = 3, state = {0,1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend11",    idle = 0, prior = 6, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },                        -- где-то тут был Толик    { section = "logic@esc_lager_defend14",    -- Волка скорее всего нет    idle = 0, prior = 5, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend15",    -- если Толик помер.    idle = 0, prior = 4, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_sleeper5",    -- если все еще не лезет.    idle = 0, prior = 3, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    -- Волк, собственной персоной.    { section = "logic@esc_lager_volk",    idle = 0, prior = 19, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone",    predicate = function(obj_info) return obj_info["profile_name"] == "esc_wolf" end },    { section = "logic@esc_lager_defend13",    idle = 0, prior = 20, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone",    predicate = function(obj_info) return obj_info["profile_name"] == "esc_wolf" end },    -- and not (has_alife_info("agroprom_military_case_have") and has_alife_info("esc_fanat_spawn") ) end },    -- Фанат    { section = "logic@esc_lager_fanat",    idle = 0, prior = 19, state = {0, 1},    in_rest = "", out_rest = "esc_lager_guard_kill_zone",    predicate = function(obj_info) return obj_info["profile_name"] == "esc_fanat" end },    { section = "logic@esc_lager_defend12",    idle = 0, prior = 20, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone",    predicate = function(obj_info) return obj_info["profile_name"] == "esc_fanat" end },    -- резерв на случай смерти Волкофаната.    { section = "logic@esc_lager_sleeper1",    idle = 0, prior = 2, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_kamp1",    idle = 0, prior = 2, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend5", -- ХРЕНОВЫЙ. Но резерв.    idle = 0, prior = 2, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    -- Шустрый    { section = "logic@esc_lager_shustryi_sleep",    idle = 0, prior = 18, state = {0, 2}, in_rest = "", out_rest = "",    predicate = function(obj_info) return ( obj_info["profile_name"] == "esc_shustryi" )        and has_alife_info( "tutorial_wounded_give_info" ) end },    { section = "logic@esc_lager_kamp1",    idle = 0, prior = 18, state = {1}, in_rest = "", out_rest = "",    predicate = function(obj_info) return ( obj_info["profile_name"] == "esc_shustryi" )        and has_alife_info( "tutorial_wounded_give_info" ) end },    { section = "logic@esc_lager_shustryi",    idle = 0, prior = 17, state = {0, 1, 2}, in_rest = "", out_rest = "",    predicate = function(obj_info) return ( obj_info["profile_name"] == "esc_shustryi" )        and has_alife_info( "tutorial_wounded_start" ) end },    { section = "logic@esc_lager_shustryi",    idle = 0, prior = 16, state = {0, 1, 2}, in_rest = "", out_rest = "", online = false,    predicate = function(obj_info) return obj_info["profile_name"] == "esc_shustryi" end },    -- резерв на случай смерти Шустрого    { section = "logic@esc_lager_sleeper2",    idle = 0, prior = 2, state = {0}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_kamp1",    idle = 0, prior = 2, state = {1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend3", -- ХРЕНОВЫЙ. Но резерв.    idle = 0, prior = 2, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_kamp1", -- ну наплодили... больше некуда, кроме как к костру    idle = 0, prior = 1, state = {0, 1}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend1", -- Занято под Фаната    idle = 0, prior = 1, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone" },    { section = "logic@esc_lager_defend16", -- Толик. Пусть дальше спит.    idle = 0, prior = 16, state = {2}, in_rest = "", out_rest = "esc_lager_guard_kill_zone",    predicate = function(obj_info) return obj_info["name"] == "esc_vagon_wounded" end }},

 

- это уже со всеми фиксами типа бегающего Шустрого, вылета по нехватке работ, переключениях при дохлых неписях и т.д. - и все равно гораздо нагляднее.

Изменено пользователем Dennis_Chikin
  • Спасибо 1
Ссылка на комментарий
как можно внимательнее выставлять предикаты и приоритеты

И это далеко не всегда помогает, вроде смотришь - все логично и хорошо, а на деле нифига не работает. По уму нужно переписывать и xr_gulag и gulag_general и вообще все, так как кривоту работы этого всего барахла не описать. А когда подходишь к финальной стадии правки этой системы перед тобой открывается нечто... Система начинает работать как задумывалось, но не как на деле, и да, при желании можно написать систему жизни как в ЗП (и даже лучше), причем без лишней муки создания кучи гулагов и кучи работ.

 

Ну, да - переписывать нафиг. Но в принципе - работает, кроме странного переназначения, в котором разрыв в приоритетах останавливает цикл. И, да, на самом деле оно не нужно. dc

 

Подскажите, как правильно передать аргументы?

Мсье знает толк...

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

На кордоне на блок посту военных спавн бочек происходит постоянно, стоит их взорвать и отойти недалеко, и они опять будут стоять, и так постоянно. И это без всякой перезагрузки, отойти до деревни новичков допустим, и обратно прийти.

Как убрать это недоразумение(читерство, а то горючка на халяву), не подскажете? 

Хотя сейчас только два раза заспавнилось. Взорвал три бочки возле кпп, потом ту бочку возле казармы, пришёл к кпп они уже стоят, взорвал пошёл к казарме, тоже стоит, взорвал, пошёл к кпп там уже нет, пошёл к казарме тоже нет. Короче не появились больше. Всего по два раза заспавнились сейчас.

Изменено пользователем alex5773
Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...