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

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

1 час назад, 666Ian сказал:

А ещё лучше было бы, чтобы все эти изменения в клиентском объекте оставались бы сами навсегда, как состояние там или кол-во патронов в той же пушке. 

Состояние предмета и патроны меняются в процессе эксплуатации, поэтому они изначально сохранялись. Все остальное нет смысла сохранять, потому что оно не меняется и просто читается каждый раз из конфига. Соответственно, если нужно сохранять новые данные, то это нужно писать отдельно либо в движке, либо в скриптах. В скриптах это достаточно хлопотно, слишком много телодвижений - под каждый класс свой биндер и тоже самое в se_ скриптах.

 

1 час назад, 666Ian сказал:

Тот же биндер на физобьекты обрабатывает сразу все объекты, если даже выделить секцию, например артефакт медуза, то таких медуз по зоне будет дофига, и у всех модифицированные свойства будут? Тогда какой в этом смысл.

Нет, экземпляр биндера создается для каждого объекта отдельно, в том и смысл))) Биндер физ. объектов я привел в пример как тот, который можно взять за основу. По-нормальному конечно, для артов нужен свой биндер, для оружия свой и т.д. У всех объектов же разные параметры.

Изменено пользователем RayTwitty
  • Нравится 2
Ссылка на комментарий
29 минут назад, RayTwitty сказал:

Состояние предмета и патроны меняются в процессе эксплуатации, поэтому они изначально сохранялись. Все остальное нет смысла сохранять, потому что оно не меняется и просто читается каждый раз из конфига. Соответственно, если нужно сохранять новые данные, то это нужно писать отдельно либо в движке, либо в скриптах. В скриптах это достаточно хлопотно, слишком много телодвижений - под каждый класс свой биндер и тоже самое в se_ скриптах.

 

Нет, экземпляр биндера создается для каждого объекта отдельно, в том и смысл))) Биндер физ. объектов я привел в пример как тот, который можно взять за основу. По-нормальному конечно, для артов нужен свой биндер, для оружия свой и т.д. У всех объектов же разные параметры.

Тогда я не так понял. Блин. Про арты и оружие свой биндер, то понятное дело, а по биндеру я представил bind_destroyble_object.script(ну или как он там. Скрипт который к ящикам подключен и дверям там, рычагам), когда расписывал свои мысли, ну и видимо не в ту сторону посмотрел... Плохо понимаю в этом деле просто. Мне бы пример всё-таки. По-другому писать-то и не научился пока.

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

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

Можно пойти по пути древнего мода имени Шокера и добавлять свойства через имитацию прокачки: в частности, в моде было свойство "взято с трупа" и сопутствующий ему повышенный износ предмета.

Прокачка как раз пишется в нетпакет (таблица upgrades в STATE-части), но обработка прокачки есть только в ЧН/ЗП и подобных движках.

  • Сочувствую 1

Мини-моды: ТЧ ЧН ЗП

Шпаргалка

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

@Norman Eisenherz это мне помогали, есть такой код. Для чн. У меня огср движок и может там есть это, да и ковыряя пакеты оружия, артов и брони мне выводило в лог этот самый upgrades. Только я точно пробовал применять на арты и получал вылет, что нельзя артэфакту это ставить якобы, хоть лог до этого и выдавал будто бы применить это можно к ним. Может из-за того, что конфиги не заполнены по аналогии с зп или чн. Не знаю возможно ли это в общем сделать. Ну вариант хуже или лучше варианта от рейтвитти? Попробую на пушку сейчас сделать, но что-то вспоминая мод ганслингер на тч и систему апгрейдов оружия с него, которая заключал в переспавне секций как я помню, сильно сомневаюсь в работоспособности этого способа даже на огср движке великом и могучем 

 

Я ещё вроде видел то, о чем тут мечтаю, в моде prosectors project, но вряд ли у меня стащить оттуда выйдет. Там скрипты совсем по-другому написаны и, наверное, движок с огср отличается. А ещё там дата зашифрована с ней возится конечно мне тоже гемор

 

Решил всё-таки способом @RayTwitty попробовать подумать ещё раз. Правда, если пример получить невозможно с которого бы я все слизал, можно хоть подсказку какой биндер имеется ввиду. Я о том, что куда пробовать: делать что-то в скрипте se_item(вообще без понятия что) или прямо создавать биндер на подобии bind_heli, bind_physic_object опираясь вдобавок на подобные статьи из интернета, после чего пройтись, если мне нужна броня, по конфигам всех броников где подключить им этот биндер. В самом биндере достаточно будет использовать методы (save, load), которые сами все сделают. Или мне нужно полностью биндер делать с апдейтами там и остальными методами, полноценный. Я просто не вижу пока, может не нашел, где и как используется save,load. Пока думается, что при выходе предмета в онлайн все само сработает как надо:) как-то там. При этом апдейт мне вроде не нужен, поэтому нет в нем нужды, как и в нет дестрой, правильно? 

 

Всё что имею. Меняю свойства - цену и модельку

Скрытый текст
function outfit_changer()
db.actor:iterate_inventory(
	function( dummy, obj )
	if isOutfit(obj) then
	change_property(obj)
      end
    end
  )
end

function change_property(obj)
local item_id = obj:id()
--
local pos = db.actor:position()
db.actor:drop_item_and_teleport(obj, vector():set(pos.x + 5, pos.y, pos.z))
alife():set_switch_offline(item_id, true)
alife():set_switch_online(item_id, false)
alife():set_interactive(item_id, false)
local pk = m_netpk.get(obj)
if pk and pk:isOk() then
local data = pk:get()
local description = pk:dumpDesc()
log1(description)
data.visual_name = "weapons\\wpn_rpg_7.ogf"
pk:set(data)
end		
to_online(item_id)
end

function to_online(id)

	local iTimer = time_global() + 3000
	
	local function check_timer()
		return time_global() > iTimer
	end

	local function spawn_callback(id, obj)
		obj:transfer_item(obj, db.actor )
		obj:get_outfit().cost = 10
	end
	
	local function action_timer()
		alife():set_switch_offline(id, false)
		alife():set_switch_online(id, true)
		alife():set_interactive(id, true)
		
		level.client_spawn_manager():add(id, 0, spawn_callback)
		
	end

	level.add_call(check_timer, action_timer)
end

 

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

Дальше я жму сохранить игру, следующее действие - загрузить.

У броника, конкретно у куртки новичка только правда(все тесты на этой куртке), есть свой вроде как рабочий биндер. Подключен он прямо в конфиге, как там у вертолетов, машин и т.д

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

Скрытый текст
function init(obj)
	local noutfit_binder = outfit_binder(obj)
	obj:bind_object(noutfit_binder)
end

---------------------------------------------------------------------------------------------
class "outfit_binder" (object_binder)
function outfit_binder:__init(obj) super(obj)
	self.initialized = false
	self.loaded = false
end

function outfit_binder:reload(section)
	object_binder.reload(self, section)
end

function outfit_binder:reinit()
	object_binder.reinit(self)
end

function outfit_binder:net_spawn(data)
	if not object_binder.net_spawn(self, data) then
		return false
	end

	return true
end

function outfit_binder:update(delta)
	object_binder.update(self, delta)

end

function outfit_binder:net_destroy()
	object_binder.net_destroy(self)
end

function outfit_binder:net_save_relevant()
	return true
end

function outfit_binder:keep_saved_data_anyway()
	return true
end

function outfit_binder:save(packet)
	object_binder.save(self, packet)
end

function outfit_binder:load(reader)
	self.loaded = true

	object_binder.load(self, reader)
end

 

 

 

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

Ох, Ёлки зеленые, кучерявые... :508:

@666Ian , дружище, по порядку.

15 часов назад, 666Ian сказал:

У меня огср движок

Это очень хорошо. На нем есть как минимум 4 варианта, как сделать то что ты хочешь.

0) Нетпакеты сразу забудь. Вообще. Оно тебе не надо, совсем, тем более если на ogsr.

1)

15 часов назад, 666Ian сказал:

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

Переспавн секций (по условию, скриптом, с заранее-прописанными свойствами в километровых полотнищах конфигов) - это метод топорный, тупой, негибкий, НО! - простой понятный как бревно и рабочий вообще везде. И в том же ogsr прекрасно можно этим заниматься, если не осилить все остальное.

2) Можно писать свои свойства в кастом-дату серверного объекта. В ogsr она доступна по адресу sobj.custom_data , причем доступна как для чтения, так и для записи. Туда можно записать свои сериализованные свойства (конкретно для ДАННОГО объекта), и применять их при net_spawn в биндере. Недостаток тут есть - custom_data иногда все же используется/перезаписывается всякими другими скриптами, и не так уж много данных в нее влезет. Но рамки использования достаточно широкие, и в принципе это может быть удобная и гибкая система кастомизации свойств объектов, хоть и не всех.

3) Можно писать свои свойства в script_vars_storage (см. ogsr-wiki), Записывая туда также id объекта, для которого это записано. И соответственно опять же применять их при net_spawn в биндере. Немножко больше мороки, но зато этот метод лишен минусов варианта с кастом-датой. Записывать можно - сколько душе угодно, и чего угодно, не опасаясь что какие-то посторонние скрипты туда зачем-то полезут.

Все выше-перечисленные методы реализуются на ogsr сугубо одними скриптами, вообще без залезания в движок.

Ну и...

4) Метод самый простой и удобный. Но в каком-то смысле и "непростой"... :az1000106:

Берешь исходники движка. И пишешь туда сохранение всех тех свойств которые ты желаешь сохранять, в серверный объект(ы). В классы серверных объектов.

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

Единственный минус этого метода - надо знать C++ и уметь собирать движок. В остальном одни плюсы...

16 часов назад, 666Ian сказал:

Пока думается, что при выходе предмета в онлайн все само сработает как надо:) как-то там.

Неа. Все что штатно движок грузит из конфига - если ты хочешь чтоб оно грузилось из кастом-даты / script_vars_storage / серверного объекта, то надо это делать ручками. "Само" оно только из конфига будет загружаться.

24.07.2023 в 17:36, 666Ian сказал:

Я вообще все свойства хотел менять в перспективе, такая же фишка интересная: вот есть у тебя ствол, ты с этим стволом в руках влез в какой-нибудь кисель или ещё лучше уронил его туда и вот уже пушка пройдя через условия поменяла свойства

Но вообще, по хорошему...

Такое делать надо через движок. Чтобы не вязнуть в скриптовой мороке и пардон, тормозах.

Движок это всё шустрее обработает.

  • Нравится 3
  • Полезно 1

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

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

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

Ссылка на комментарий
22 часа назад, 666Ian сказал:

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

Пример тут в двух словах не получится привести. Могу как вариант посоветовать посмотреть Shadows Addon, там есть биндер автомобилей (sa_cars.script) и сохранение/загрузка топлива (se_car.script).

 

Но если у тебя кастомный движок типа OGSR, то нафиг это все надо - сделай себе форк и добавь необходимые параметры прямо в движок.

  • Нравится 1
  • Согласен 1
Ссылка на комментарий
2 часа назад, RayTwitty сказал:

если у тебя кастомный движок типа OGSR, то нафиг это все надо - сделай себе форк и добавь необходимые параметры прямо в движок.

Истинная правда, так оно и есть.

Но людям бывает очень страшно к движку даже подойти, и в это наше C++ окунуться.

Боятся, понимаешь...

Скрытый текст

 

Вспоминая себя, кстати... я пожалуй не боялся. Мне было лень. Когда исходники только появились, в движке столько багов и косяков было, так было лень все это разгребать, править... данунафиг. Да и знаний по С++ на тот момент не было.

А в движке OGSR добрые люди уже без моего участия все (ну почти), косяки разгребли, исправили, причесали... Не движок - конфетка. Насколько это вообще можно сказать в отношении X-Ray. Такой движок грех не форкнуть под свои нужды.

 

А если по теме. Люди, не надо бояться движка. Он не кусается. Уж тем более теперь, когда все доведено до ума.

  • Спасибо 1
  • Нравится 1
  • Согласен 1
  • Смешно 1

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

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

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

Ссылка на комментарий
14 часов назад, RayTwitty сказал:

Пример тут в двух словах не получится привести. Могу как вариант посоветовать посмотреть Shadows Addon, там есть биндер автомобилей (sa_cars.script) и сохранение/загрузка топлива (se_car.script).

 

Но если у тебя кастомный движок типа OGSR, то нафиг это все надо - сделай себе форк и добавь необходимые параметры прямо в движок.

а есть что на эту тему? Попробуем форк.. Уточню, если понял неправильно. Форк движка, по сути просто правка движка, огср позволит мне сохранять свойства предмета также легко, как я сохраняю сейчас condition предмета? Т.е я сделаю аналог set_condition(numberдля любого свойства, например, цены и смогу условно через set_cost(number) менять стоимость любого предмета? И сделать это не так уж и сложно, что даже у меня есть шансы)? Если хватит терпения у кого меня посвятить в это дело, то я готов пробовать. Вроде прикольная штука была бы и простая. Скриптами я наныл, еще не понял как, но понимать вроде начинаю и вижу там какие-то дебри

  • Нравится 1
Ссылка на комментарий

S.T.A.L.K.E.R. Anomaly - НПС говорит не все фразы.

Столкнулся с проблемами. В "Charasters_desc" прописал НПСу путь к голосу персонажа(в моём случае это голос наёмника). По итогу НПС молчит, говорит фразы только во время ранения, и только если тычить в него стволом. Других фраз(фразы во время перестрелки, обычные рандомные фразы и т.д.) он вообще не говорит. К тому же, если взять его в напарники, то он не высылает в чат никаких СМС в адрес ГГ(СМС про локации, мутантов и т.д.). Из-за этих двух проблем мой непись будто неживой. Что делать?

Изменено пользователем Murarius
Добавлено  Murarius,

Перемещено.

Ссылка на комментарий
47 минут назад, gam сказал:

Как угадать, что это

Ну например в гугл вбить...

Указал он платформу. S.T.A.L.K.E.R. Anomaly вполне себе платформа, не знать о существовании которой - грех.

Изменено пользователем Zander_driver
  • Нравится 1

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

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

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

Ссылка на комментарий
53 минуты назад, Zander_driver сказал:

не знать о существовании которой - грех.

Я неверно выразился - с моей виндой хр не на всякий сайт можно пробиться. А этот мод мне не знаком. Но тут оффтоп уже.

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

Ребята, подскажите пожалуйста, через какую функцию в скрипте можно удалить предмет у НПС в ТЧ? В интернете и на форуме искал, но не нашёл. Буду признателен, если поможете.

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

"нᴀᴄᴛ᧐ящиʍ ʍ᧐дʍᴇйᴋᴇᴩ᧐ʍ ʍ᧐жᴇᴛ ᴄᴛᴀᴛь ᴛ᧐ᴧьᴋ᧐ ᴨ᧐иᴄᴛинᴇ ɸᴀнᴀᴛ ᴧюбиʍ᧐й иᴦᴩы." ©

xgeVogt.png

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

@Dalarcsis по всякому можно. ты лучше опиши подробнее в какой момент удалить. если просто с ничего удалить, то можно перебрать всех нпс, выбрать нужных по имени профиля, перебрать их инвентари на наличие нужного предмета и удалить предмет, если он есть. Хотя можно по идее просто перебор всех объектов уже видит этот предмет и удалить его можно без перебора инвентарей нпс. Можно в диалогах удалить, в оригинале гск так делает, а в моддинге так делает большинство модеров(статистика из воздуха). Ну это мои варианты. я такой себе скриптер. просто мне пришло . уведомление - я откликнулся)

Вариантов с диалогом у меня нет под рукой.

Переборов много разных, попробуй так

  for a = 1, 65534, 1 do
    local sobj = alife():object( a )
    if sobj and sobj:section()=="секция предмета" and sobj.parent_id == npc.id then -- если секция предмета и предмет находится у нпс какого-нибудь в собственности
      alife():release( sobj, true )
    end
  end

 

 

 

Меня тоже интересует кое-что. Как можно сохранить переменную и привязать её к определенному сейву? Вот чтобы у каждого сейва эта переменная была своя? Я сейчас смог так на костылях реализовать сохранение переменной через файловый менеджер, переименовывая определенный файл в значение переменной, а потом на нетспавне считывать это имя файла как переменную, типо сохранил... Ну понятное дело, что это все более-менее работает в рамках прохождения всей игры на одном и том же сохранении. Так бывает конечно, но такую реализацию я бы отложил на самый крайний случай. Я вижу там разрабы сохраняют уровни сложности, тайники что ли, логику. Пытался посмотреть. Пока ничего не понял особо, ну понял что нет-пакеты) все пока что.

У меня ОГСР, поэтому я еще смотрю в сторону такого способа

function save_number(number)
local setting_ini = ini_file("important_number.ltx", true)
setting_ini.readonly = false

setting_ini:w_float("имя_сейва", "1", number) -- тут хотелось бы получать еще имя сейва... number то я могу получать
end

И вроде оно сохраняет, т.е точно сохраняет, но имя сейва получить при сохранении как не знаю. Я нашел случайно, но еще не пытался это в свои скрипты пихать такое в скрипте xr_effects из зп.

-- Сюжетное сохранение в важных местах
function scenario_autosave(actor, npc, p)
	local save_name = p[1]
	if save_name == nil then
		abort("You are trying to use scenario_autosave without save name")
	end

	if IsImportantSave() then
		local save_param = user_name().." - "..game.translate_string(save_name)

		get_console():execute("save "..save_param)
	end
end

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

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

  • Полезно 1
Ссылка на комментарий

@666Ian Мне бы конкретно удалить после определённой фразы, ГГ или НПС. Т.е да, в диалогах. Но так, спасибо, что откликнулся!

"нᴀᴄᴛ᧐ящиʍ ʍ᧐дʍᴇйᴋᴇᴩ᧐ʍ ʍ᧐жᴇᴛ ᴄᴛᴀᴛь ᴛ᧐ᴧьᴋ᧐ ᴨ᧐иᴄᴛинᴇ ɸᴀнᴀᴛ ᴧюбиʍ᧐й иᴦᴩы." ©

xgeVogt.png

Ссылка на комментарий
4 минуты назад, Dalarcsis сказал:

@666Ian Мне бы конкретно удалить после определённой фразы, ГГ или НПС. Т.е да, в диалогах. Но так, спасибо, что откликнулся!

там в переборе ошибка, если что. скопировал код, не глянул, но кстати даже так может выдать ошибку xD Так я и делаю сам моды. Методом тыка.

19 минут назад, 666Ian сказал:
  for a = 1, 65534, 1 do
    local sobj = alife():object( a )
    if sobj and sobj:section()=="секция предмета" and sobj:parent()~=nil then
      alife():release( sobj, true )
    end
  end

 

А вот с диалогами. Блин возится буду с час, искать смотреть. да по сути на диалог можно тот же перебор повесить) Если он работает корректно.

Ну вот я нашел функцию из зп по-быстрому. Вроде бы должна работать.

function delete_item(first_speaker, second_speaker)
	local section = "секция"
	if second_speaker:object("секция") ~= nil then alife():release(alife():object(second_speaker:object(section):id()), true) end
end

Хотя к слову, зачем вообще возиться-то тебе с предметом? Если нпс умирает и все удаляет дез_менджер?

  • Полезно 1
Ссылка на комментарий
30 минут назад, 666Ian сказал:

Меня тоже интересует кое-что. Как можно сохранить переменную и привязать её к определенному сейву? Вот чтобы у каждого сейва эта переменная была своя? ...

У меня ОГСР

Опять 25.

Ну у тебя же уже есть рабочий пример сохранения в xvars. (Я уж молчу о том что он и в OGSR-Wiki как был так и есть). Зачем опять эти костыли, да еще прости-господи, нет-пакеты?

Сохрани свою переменную в xvars и не парься.

  • Смешно 1

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

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

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

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

@Zander_driver точно, просто на любой предмет писать эту переменную? А потом её читать? Или как? А на что писать. На ту же броньку и не парится? Я просто отмучался там и забыл уже, а ты напомнил мне как я страдал

ну на броник я бы точно не стал, о чем я боже... А как, а на что? На болт? Ладно пойду посплю. может завтра лучше подумается

блин точно. на игрока и писать. надеюсь не опозорился хоть раз

Изменено пользователем 666Ian
  • Жуть! 1
Ссылка на комментарий

@666Ian Спасибо огромное, завтра утром проверю. А по поводу смерти НПС и очистки менеджером: он и не умирает, т.к. играет роль квестовика. Поэтому, хочу подзапариться. Можно, конечно, было убрать из профиля предмет, но я хотел сделать вариативность - забрать силой, или потолковать. Вот тут и понадобилось очистить инвентарь от предмета:) Спасибо ещё раз.

"нᴀᴄᴛ᧐ящиʍ ʍ᧐дʍᴇйᴋᴇᴩ᧐ʍ ʍ᧐жᴇᴛ ᴄᴛᴀᴛь ᴛ᧐ᴧьᴋ᧐ ᴨ᧐иᴄᴛинᴇ ɸᴀнᴀᴛ ᴧюбиʍ᧐й иᴦᴩы." ©

xgeVogt.png

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

@Zander_driverа что такого? Неправильно понял в итоге я? Или ты с моих тупняков в шоке? Вообще поинтересуюсь, может знаешь, присел на xvars значит. Удобно. Классно. Но если я буду записывать сразу 100 переменных, там ничего не треснет? Не сломается? И ещё раз, я же правильно делаю, что на игрока пишу и с него читаю, или можно как-то по уму это делать, грамотно? 

У меня все работает, кстати, поэтому я доволен как бы в любом случае) хварс тема. 

  • Нравится 1
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

AMK-Team.ru

×
×
  • Создать...