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

Народная 2010 разработка

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

"Что у нее внутри, и как это сделать лучше". Для тех, кто уже разбирается в скриптах, конфигах, текстурах и "других страшных словах" ©, и имеет желание и время действительно делать их лучше.
См. подробности в первом посте.

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

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

_And_,

 

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

Сообщение от модератора меченый(стрелок)
Привет, эти можно ;)
Изменено пользователем меченый(стрелок)

Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
ни одна запятая или идея не попадёт в солянку

Arhara, что-то я, видимо, пропустил... О чём была речь ? :crazy:

Сообщение от модератора меченый(стрелок)
и ты ,мой друг, можешь не беспокоится ;)

То, что выложено выше , было решено давно выложить, но никак не получалось , а вот сейчас получилось... А Дима, немного не в курсе ;)

Изменено пользователем меченый(стрелок)

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Monnoroch, я другое вчера пробовал. Теперь отхожу :)

 

Есть вопрос к скриптерам. Написал такую ф-цию.

function get_obj_name(obj)
    local s_name = ""
    local i = 0
    if (news_main.isGameObject(obj) and obj.section) then
        -- s_name = obj:section()
        i = string.find (obj:name(), tostring(obj:id())) --,1,true
        if i then
            -- get_console():execute("load ~#I#: начало id с символа "..i)
            s_name = string.sub(obj:name(),1,i-1)
        else
            s_name = string.sub(obj:name(),1,-1)
        end
    elseif (obj.section_name) then
        s_name = obj:name() --obj:section_name()
    end
    if (s_name == nil) then s_name = "" end    
    return s_name
end

на выходе - имя секции обжа. Может, я велосипед изобретаю, и есть где-то уже... Но собственно, вопрос в следующем: а можно заполучить имя секции игрового объекта без такой операции со стрингом?

 

И еще один вопрос. Есть ли способ скриптом проверить, есть ли объект в аллспавн и узнать номер его секции?

 

Monnoroch, я попробую поставить создание таблицы. Но как потом проверить, что работает? Переписать просто тупо нетпакет всем неписям, чтобы убедиться, что нормально сработало? Потому как начать НГ, дождаться что кто-то зависнет и потом проверить - это нереально :) Ну а в сейве с зависом - таблица нетпакетов пока пуста. И еще нюанс: нужно не нарваться на кривые или пустые данные при записи этой таблицы.

Сообщение от модератора меченый(стрелок)
Shadowman, да вроде нет, не велосипед ;)...
Изменено пользователем меченый(стрелок)

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Шадоу,не лукавь,я гдето видел у тебя же такую же функцию О_о

==

Про тестирование: а ты сам зависни непися.Понапиши ему в пстор хрени всякой или обнули.вызови завис короче.

===

ха,я думал ты написал а потом забыл и снова написал))

===

ты все-таки попробуй нетпакетно восстанавливать НПС.А ну как получится?

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Monnoroch, ну да, у меня эта ф-ция и есть. В скрипте со всеми таблицами уборщика

Просто уборщик получает имя всегда как серверного обжа, а когда понадобился игровой - оказалось, что obj:section() - это stalker, stalker_sakharov - у всех сталкеров поголовно. Не та секция короче. Вот, переписал. Решил уточнить - может, есть более простой путь. В чем лукавство-то усмотрел? :blink:

Ф-ция эта в таком виде, как я здесь показал - пока в единственном экземпляре, только на моем компе ;)

 

меченый(стрелок), то есть я так понял, что одобряешь? :D

По аллспавну - очень бы хотелось положительного ответа. Но, видимо, не судьба :(

 

Monnoroch, кстати, по нетпакету: ты сам понял, какую грандиозную вещь ты придумал? Это же фактически можно сейвы редактировать!

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

 

В личку кинуть, или запостить? ;)

Запостил.

А по файлам - вот Shoker такое написал.

-- Запись в таблицу 
function god_dialog:OnButton_btn2_clicked()
      pos_x = tostring(self.edit_box:GetText())
      pos_y = tostring(self.edit_box2:GetText())
      pos_z = tostring(self.edit_box3:GetText())
      pos_name = tostring(self.edit_box4:GetText())

if pos_x~="" and pos_y~="" and pos_z~="" and pos_name~="" then
    self.settingFileName = "gamedata\\teleports_coordinats.txt"
    local file = io.open( self.settingFileName, "a" )
    if file ~= nil then
        file:write( pos_name.."|"..pos_x.."|"..pos_y .."|"..pos_z.."\n")
        file:close()
    end
      self:ModeChanges()
end

end

Правда, это для ЗП. Работает ли в ТЧ - не проверял. Файл должен быть предварительно создан.

 

 

ха,я думал ты написал а потом забыл и снова написал))

Такая история у Дэна, по-моему наблюдается: у него в браад две функции ограбления ГГ одинакового назначения.

К тому же, список исключений, чего отбирать нельзя - был разный у каждой из ф-ций :)

 

меченый(стрелок), да, спасибо. Насчет распакованной геймдаты и пользовать как ини - это понятно :)

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

Есть класс FS, но, похоже, записать файл нельзя, можно только прочитать...

Мон, спасибо, что поправил :) К сожалению, это не решает проблемы - файл в ТЧ не запишешь. Очень жаль. Можно только в лог записать.

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

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Фиг ты ее сохранишь....нету таких функций в сталкере....

Но вообще да.Это конечно вещь жесткая.

 

НО у меня-то только онлайновые НПС.

Кстати,я тут забыл надо еще на нет_дестрой коллбэк на чистку ставить...

==

Кинь плз мне то,что я написал тебе - я винду переставил и... :(

==

В личку лучше.Ато найдутся,которые поюзают и вопить будут,если чо случится....

Я кстати заодно и допишу. :)

 

 

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Shadowman, Это работать не будет..в ТЧ пространства имен io,os,etc... нету :(

По алл.спавну , можно , если алл.спавн будет распакован :), и то ,мягко говоря, сотворить это будет трудно и ,скажем так, нерационально .. :)

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

или я неправильно понял? :)

то есть я так понял, что одобряешь?

Ага :)

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Shadowman, а вот FS - это класс а не пространство имен :)

 

Добавлено через 9 мин.:

Шадоу,ты гений!А чем тебе лог не файл?Мы ж ради интереса пишем - пусть будет в лог :)

 

=========

глянешь как работает - отпишись :)

мне самому интересно,сожрет оно такой обьем или нет...

=====

Shadowman, Ты ж тестировал мой трейд.Лог там до пары мегабайт набирался :)

====

Кстати будешь выводить - имей ввиду,нетпакет - это какбы табличка.Все имена внутренние в АМК скрипте посмотри.Там туча целая...

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
я кинул скрипт который облегчает работу с ини файлами до не хочу

меченый(стрелок), это тот, что для телепортов в спавнер? А все, понял amkII_ini. Классная штука!

Сообщение от модератора меченый(стрелок)
Точно , о нём! рад что он будет полезен! я , кстати, за то , чтобы каждый скрипт ,или почти, использовал свой фаил настройки(это позволяет пользователям настраивать скрипт под себя без знания Lua). Так сказать лояльное отношение к Юзерам ;)

 

Monnoroch, вечером попробую. Лог вполне может и навернуться от таких объемов. Хотя - попробую, конечно.

Да, я в курсе, что там у каждого непися по таблице. Это надо будет слегка поизвращаться, чтобы увидет ее в логе. Но должно получиться.

А лог, когда из апдейта шел - валил игру минут за 5-7 :)

 

Monnoroch, а зачем очищать табличку? А если при загрузке игры у непися уже мусор в пстор (тоже, кстати, надо как-то проверять предварительно и не писать, если уже биндер зависший)? Если в сейве ее не будет (т.е. она будет пустой) - то тогда и смысла нет ее создавать.

Кстати, ловлю вылет на несуществующий packet_table именно поэтому, наверное. (attempt to index global packet_table (a nil value)), хотя в мотиваторе объявил ее глобальной и вроде как запись туда в мотиваторе сработала. По-видимому, amk.write_stalker_params надо все-таки ставить внутрь условия if packet_table[npc_id] then

Изменено пользователем меченый(стрелок)

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Shadowman, а теперь посчитай 5-7 минут * десяток раз в секунду.если не больше....это ж апдейт ГГ...

 

Добавлено через 4 мин.:

Shadowman, Как вылет?У меня же написано packet_table = {}

Зачем ты ее в мотиватор то сунул,оставь у меня в скрипте.

 

Да и условие непонятно зачем.Ведь при нет_спавне ж оно туда все пишется полюбому.

А,ну только мой метод токо для новой игра подойдет - чтобы не было зависших НПС.

Попробуй с новой игры непися насильно обрушить - все должно сработать.

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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Сообщение от модератора меченый(стрелок)
Не знаю где было реализовано подобное, вспоминается только мод Zen'a ,но там не ВИЗУАЛЬНО реализован апгрейд... А по Сути, в моём скрипте, происходит замена секций оружия\костюма\итема с замещаемыми параметрами ... по сути из редми должно быть понятно... Да ,это можно назвать заменой "конфигов", но в этом самом конфиге не нужно писать все параметры ствола ,а только нужные.. к примеру увеличенную пулестойкость у броника и т.д...тут всё зависить от рациональности мышления разработчика...

З.Ы. ИМХО, не стоит спешить с добавлением всего и вся в Соль, а то потом набирается проблем. Отдельные паки типа стволов, флэшек и т.д. - вот выход, а потом уже протестированное можно ставить, если надо. Сначала все кричали давайте ремонт, потом все начали плеваться...

Изменено пользователем меченый(стрелок)
Цензура ограничивает творчество © by me

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
через дополнительные конфиги
Не вижу ничего плохого, в данном способе. Просто и без лишних заморочек. Кстати ПЫС свои уники по тому же принципу организовали.

В паке, который я недавно выложил, сделано аналогично. Апгрейд в виде простой замены одного ствола на другой. При том, что конфиг апгрейженного ствола состоит всего лишь из пары строк содержащих отличия от "родительского" конфига.

К чему изобретать велосипед... :ny_wink:

Сообщение от модератора меченый(стрелок)
+1

Хотя, чтобы сделать по другому нужно править XrGame.dll, что без знания ассемблера представляется невозможным :(

Ray, ну так многие этим и пользуются. Вроде в ОГСЕ поступили аналогично.

Изменено пользователем меченый(стрелок)

6GReQuK.png

Инсталлятор НС 2016 с графпаком на патче от 23.02.2018.
Весь набор https://goo.gl/hdehSS Отдельные архивы с обновлением https://goo.gl/5x9MVb

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
solvador, согласен впосне нормальное использование принципа наследования классов. Производный класс получает все, что есть в базовом и может перекрыть некоторые поля (начальная скорость пули, вес и т.д.). Эта идея у меня зрела давно (сразу после изучения файла уникуе_итемс). Изменено пользователем Ray

Athlon X2 5000 (Phenom FX-5000@3630 МГц, разлочены 2 ядра и 6Мб кеша), ZALMAN CNPS10X Performa, GA-MA770-UD3 rev2, 2x2048 G.Skill, Inno3D GeForce GTX650Ti Boost Herculez 2GB, Chieftec APS-550S.

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
чтобы каждый скрипт ,или почти, использовал свой фаил настройки(это позволяет пользователям настраивать скрипт под себя без знания Lua)

Вообще-то хорошо бы. Только тормознутая это штука - чтение конфигов. Надо тогда внимательно смотреть, чтобы "с водой не выплестнуть и ребенка" ;)

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

 

Arhara, не не в сидах дело. Все равно, раз начали - нужно довести до логического конца.

А СИДы - не помогут, что так - что эдак. Восстановление нужно делать с названием секции из аллспавн (цифровым). А СИД - можно либо взять из того же аллспавн, либо прочитать у зависшего непися перед переспавном. Димос подмогнет чуток с табличкой названий секций, я напишу что-нибудь для вытаскивания цифири из аллспавн (как Меченый предложил) - и будет этот вариант.

Если не получится фокус с нетпакетом - все равно будет этот запасной вариант :)

И что-то мне подсказывает, что фокус с нетпакетом должен получиться...

 

Monnoroch, я тут кстати подумал: а зачем, собственно, искусственно портить кому-то пстор после НГ. Я могу просто-напросто катануть зависшему неписю пстор аналогичного (я про свой конкретный пример - это охотник бар_охотник_респавн1), можно просто закатать ему нетпакет какого-нибудь рядом имеющегося, типа бар_охотник_респавн2. И, кстати, попортить пстор (именно мусором заполнить) - не так и просто. Нужно убирать зэкер из функции его записи. Так что непонятно, как тот мусор у него вообще мог появиться.

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

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Shadowman,

 

не заморачивайся. Если дело действительно стоящие - я проставлю всем СИДы

Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Arhara, нужно закомментировать в gamedata/config/ui/ui_custom_msgs.xml строку 184:

<texture>ui_hud_frame_clock_vergas</texture>

Она осталась в полуфинале.

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Shadowman, а,ну даже так можно.но это не 100% проверка работы системы :)

 

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Monnoroch, а чем лучше записать скриптом в пстор что-то левое? В записи из хр_лождик стоит заглушка, там левого ничего писаться не должно.

И если я эту заглушку не сниму - то и сам ничего левого не запишу :)

По-любому, тест частично будет исскусственным. Важно, чтобы перезапись "здорового" нетпакета давала результат. А тогда уже - как повезёт. имхо, без записи этой таблицы в сейв - толку будет маловато (с очисткой на нет_дестрой). Или нужно-таки ловить, где криво пишется, или вести постоянный мониторинг. Можно сеять по квестовикам, вообще-то (таблица есть уже :) )

 

меченый(стрелок), по поводу амк2_ини и того, что мне нужно сделать:

очень надеялся, что можно, зная параметр (например, name) из аллспавн (или любого другого конфига) получить имя секции. Но, по-видимому, можно только наоборот. Собственно, это к любому конфигу применимо.

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

Ну, можно, наверное, читать файл построчно и потом отсеивать, но это уже - вообще изврат.

Вобщем, придумал уже, как это сделать; не без изврата, то приемлемо :)

 

Monnoroch, не знаю. Пока что все это дело работает при загрузке сейва. Вся кухня вылетает уже после записи нетпакета в ф-ции gulag:removeObject( obj_id ) в строке if not self.npc_info[obj_id].exclusive then с ругательством на нил в поле '?'

Перезаписал нетпакетом аналогичного охотника. Этого точно делать нельзя. Хочешь, нетпакет непися покажу? ;)

! Cannot find saved game ~#i#: pstor_load_all:bar_ohotnik_respawn_1 id: 14026 ctr=4

! Cannot find saved game ~~~ updu8u2 => 0

! Cannot find saved game ~~~ updgroup => 0

! Cannot find saved game ~~~ class => sim_arhara_green_regular

! Cannot find saved game ~~~ updmodel => 1.9438806772232

! Cannot find saved game ~~~ upddir =>

! Cannot find saved game ~~~ y => -0

! Cannot find saved game ~~~ x => 1.9438806772232

! Cannot find saved game ~~~ z => 0

! Cannot find saved game ~~~ obs32u3 => -1

! Cannot find saved game ~~~ team => 20

! Cannot find saved game ~~~ killerid => 65535

! Cannot find saved game ~~~ charname => Герман Омут

! Cannot find saved game ~~~ money => 5000

! Cannot find saved game ~~~ crvu32u16u1 =>

! Cannot find saved game ~~~ updu16u1 => 1229

! Cannot find saved game ~~~ profile => stalker_green_bar1

! Cannot find saved game ~~~ smtrtaskactive => 0

! Cannot find saved game ~~~ lvid => 36450

! Cannot find saved game ~~~ infammo => 1

! Cannot find saved game ~~~ gvid => 1229

! Cannot find saved game ~~~ oflags => -65

! Cannot find saved game ~~~ group => 0

! Cannot find saved game ~~~ vsu8u1 => 0

! Cannot find saved game ~~~ obf32u1 => 10.5

! Cannot find saved game ~~~ updhealth => 1

! Cannot find saved game ~~~ upds32u4 => 1091317111

! Cannot find saved game ~~~ updteam => 20

! Cannot find saved game ~~~ huvu32u8u1 =>

! Cannot find saved game ~~~ 1 => 2

! Cannot find saved game ~~~ 2 => 1

! Cannot find saved game ~~~ 3 => 0

! Cannot find saved game ~~~ 4 => 1

! Cannot find saved game ~~~ 5 => 2

! Cannot find saved game ~~~ squad => 0

! Cannot find saved game ~~~ upds32u3 => 1091317111

! Cannot find saved game ~~~ game_death_time =>

! Cannot find saved game ~~~ 1 => 0

! Cannot find saved game ~~~ 2 => 0

! Cannot find saved game ~~~ 3 => 0

! Cannot find saved game ~~~ 4 => 0

! Cannot find saved game ~~~ 5 => 0

! Cannot find saved game ~~~ 6 => 0

! Cannot find saved game ~~~ 7 => 0

! Cannot find saved game ~~~ 8 => 0

! Cannot find saved game ~~~ smtrid => 10887

! Cannot find saved game ~~~ visual => actors\hunters\hunter1

! Cannot find saved game ~~~ baseinr =>

! Cannot find saved game ~~~ communityid => 16

! Cannot find saved game ~~~ updsquad => 0

! Cannot find saved game ~~~ reputation => 100

! Cannot find saved game ~~~ huvu32u8u2 =>

! Cannot find saved game ~~~ 1 => 1

! Cannot find saved game ~~~ 2 => 1

! Cannot find saved game ~~~ 3 => 2

! Cannot find saved game ~~~ 4 => 1

! Cannot find saved game ~~~ updpos =>

! Cannot find saved game ~~~ y => -0.00096631050109863

! Cannot find saved game ~~~ x => 132.68312072754

! Cannot find saved game ~~~ z => 70.187408447266

! Cannot find saved game ~~~ obs32u2 => 1

! Cannot find saved game ~~~ upds32u1 => 84648

! Cannot find saved game ~~~ baseoutr =>

! Cannot find saved game ~~~ custom => ; stalker_custom_data.ltx

[game_info]

 

! Cannot find saved game ~~~ updu16u2 => 1229

! Cannot find saved game ~~~ crvu32u16u2 =>

! Cannot find saved game ~~~ health => 1

! Cannot find saved game ~~~ sid => -1

! Cannot find saved game ~~~ rank => 622

! Cannot find saved game ~#i#:непись: bar_ohotnik_respawn_114026 записан в packet_table

 

 

 

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

Кстати, массив имен секций получить можно. Не совсем автоматически, к сожалению... сортировкой строк с последующим сохранением в табличку результата сортировки :D ..А потом перебрать уже эту табличку

Что-то начало с нетпакетом получаться... Только теперь эту всю байду нужно будет запускать как-то по-другому, потому что в сейв несколько мегов нетпакетов - никак не вогнать. А значит, "отлов" зависов придется возвращать.

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

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

Поделиться этим сообщением


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

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах

Shadowman,Monnoroch, здравствуйте ;).

Смотри - каждый объект имеет номер(название секции)...

наша задача прочитать все конфиги алл.спавна в табличку которая будет содержать информацию об объекты и является подтаблицей главной таблицы которая хранит подтаблицы :D.

для это нам нужен список файлов который мы будем читать, для это табличку пишем сами :)

потом - цикл в цикле, один цикл по табличке с именами файлов , (внутри)другой от 1 до 65355(ну или как вам захочется)....

в амк2_ини во всех функциях проверяется на существование секций и ключей , поэтому вылета не будет....

ну а дальше после всего ищи по табличке всё что тебе нужно...только не забудь :) , в алл.спавне не только нпс(но они имеют уникальные параметры ,так что думаю проблемы сделать проверку на проверку ключа у секции нет ;)).. Как-то так

очень надеялся, что можно, зная параметр (например, name) из аллспавн (или любого другого конфига) получить имя секции

можно , только если у тебя есть массив имён секций, иначе ,увы, никак

----

Рад помочь ;)

Изменено пользователем меченый(стрелок)

Поделиться этим сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.
  • Недавно просматривали   0 пользователей

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

AMK-Team.ru

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