Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  1 2 >  
Ответить в эту темуОткрыть новую тему
> Распределение случайностей
d`ArcZeal
сообщение 14.1.2024, 23:07
Сообщение #1


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Доброго времени суток.

Стоит задача:
При клике на предмет выдается что-то одно из:
С 15% случайное оружее
С 20% случайная часть доспеха
С 20% случайный реагент
С 25% случайное зелье
Если ничего из этого не выпало, то выдается 1 Bandage

Код

LOCAL.HELL_QUEST_CHEST_GEN=<R100>
IF (15 > <DLOCAL.HELL_QUEST_CHEST_GEN>)
SERV.NEWITEM=I_RANDOM_WEAPON
ELIF (35 > <DLOCAL.HELL_QUEST_CHEST_GEN>)
SERV.NEWITEM=I_RANDOM_ARMOR
ELIF (55 > <DLOCAL.HELL_QUEST_CHEST_GEN>)
SERV.NEWITEM=I_RANDOM_REAGENT
ELIF (80 > <DLOCAL.HELL_QUEST_CHEST_GEN>)
SERV.NEWITEM=I_RANDOM_BOTTLE
ELSE
SERV.NEWITEM=I_BANDAGE
ENDIF


Если все верно логике, то как-то иначе, понятнее, расписать алгоритм рандома есть предложения?


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 15.1.2024, 0:10
Сообщение #2


******

Expert
Сообщений: 810
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15527
Пользователь №: 14.566
Возраст: 30



local.item = {1 15 2 20 3 20 4 25 5 (100-(15+20+20+25))}

слушай, а тебе самому то удобно читать это 15 > random?


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

if rand(100) < 15
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 15.1.2024, 0:18
Сообщение #3


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Неудобно. В этом часть сути вопроса.

А что, если при выпадении вероятности будет давать
DORAND 2
SERV.NEWITEM=I_RANDOM_WEAPON_1
SERV.NEWITEM=I_RANDOM_WEAPON_2
ENDDO

то local.item = вариант не подходит. Хочется универсальный, читабельный вариант.




------------------------------------
Если такой вариант:
Код

if rand(100) < 15


Код

IF (15 > <R100>)
SERV.NEWITEM=I_RANDOM_WEAPON
ELIF (20 > <R100>)
SERV.NEWITEM=I_RANDOM_ARMOR
ELIF (20 > <R100>)
SERV.NEWITEM=I_RANDOM_REAGENT
ELIF (25 > <R100>)
SERV.NEWITEM=I_RANDOM_BOTTLE
ELSE
SERV.NEWITEM=I_BANDAGE
ENDIF


Он логически не верен. Шанс выпадения I_RANDOM_BOTTLE будет не 25%


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 15.1.2024, 10:40
Сообщение #4


******

Expert
Сообщений: 810
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15527
Пользователь №: 14.566
Возраст: 30



local.item = {item1 15 item2 20 item3 20 item4 25 item5 <eval(100-(15+20+20+25))>}
и чего он не читабельный то?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 15.1.2024, 11:41
Сообщение #5


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Читабельный.

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

Считать каждый раз в конце (100-(15+20+20+25)) цифры, так как порой исходов может быть 20+ и 50+ и шансы разные, утомительно.

К сожалению DORAND X выбирает случайный исход с одинаковой вероятностью.


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 15.1.2024, 19:29
Сообщение #6


******

Expert
Сообщений: 810
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15527
Пользователь №: 14.566
Возраст: 30



Т.е. указать проценты для 50 предметов, чтобы они влезли в 100% не утомительно? В любом случае придется складывать все проценты, чтобы вычислять величину от которой RAND считать. Это я на глаз прикинул, что они именно в 100 влезают.




local.count = 3

local.item1 = item1
local.chance1 = chance1
local.item2 = item2
local.chance2 = chance2
local.item3 = item3
local.chance3 = chance3


for 1 3


Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 19.1.2024, 15:05
Сообщение #7


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Если я правильно понял тогда под это

Цитата
С 15% случайное оружее
С 20% случайная часть доспеха
С 20% случайный реагент
С 25% случайное зелье


Делаем 4 разные функции:

dropОружие
dropДоспех
dropРеагент
dropЗелье


И соответственно 1 функцию под "не выпало ничего, даем бинт"

dropБинт

Дальше делаем массив всех дропфункций, по которым нам надо бежать от начала до конца, пока не выпадет какой то предмет с функции (тогда прирываем цикл), а если так ничего и не выпало - тогда дойдя до конца - должы выполнить dropБинт

выйдет что-то вроде:

Код
const runDropArr = [dropОружие, dropДоспех, dropРеагент, dropЗелье];
const dropOrNo = false;
for (i=0; i < runDropArr.length; i++) {
   dropOrNo = runDropArr[i]();
}

if (!runDropArr) dropБинт();


пример функции дропа что-то вроде

Код
dropОружие() {
  if (rand_100 <= шанс) {
     <генерируем выпадение предмета>
     return false;
  }
  return false;
}


Сори за псевдокод, но как я понял у вас именно путаница была в логике реализации
Если не получится самим набросать - пинганите, я доберусь до сферы могу попробовать реализовать и скинуть


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 19.1.2024, 20:04
Сообщение #8


******

Expert
Сообщений: 810
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15527
Пользователь №: 14.566
Возраст: 30



Цитата(Ozzy Osbourne @ 19.1.2024, 15:05) *

Если я правильно понял тогда под это




И чем это отличается от того, что написал автор в сообщении #3 - https://forum.uokit.com/index.php?showtopic...st&p=445623?

ну тем что это раза в 3 сложнее и нафиг не нужно.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
kklej
сообщение 19.1.2024, 20:43
Сообщение #9


******

Группа: Пользователи
Наличность: 14945
Пользователь №: 13.346



Спасибо Sirocco меня твой кусочек натолкнул на мысль хороший дроп из драконов так сделать.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 22.1.2024, 12:23
Сообщение #10


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Цитата(Sirocco @ 19.1.2024, 20:04) *

И чем это отличается от того, что написал автор в сообщении #3 - https://forum.uokit.com/index.php?showtopic...st&p=445623?
ну тем что это раза в 3 сложнее и нафиг не нужно.


Как бы много чем, например правильным % распределения

Плюс автор хотел

Код
Хочется универсальный, читабельный вариант.


Если мы идем путем

Код
IF (15 > <R100>)
SERV.NEWITEM=I_RANDOM_WEAPON
ELIF (20 > <R100>)
SERV.NEWITEM=I_RANDOM_ARMOR
ELIF (20 > <R100>)
SERV.NEWITEM=I_RANDOM_REAGENT
ELIF (25 > <R100>)
SERV.NEWITEM=I_RANDOM_BOTTLE
ELSE
SERV.NEWITEM=I_BANDAGE
ENDIF


Тогда получается что шанс выпадения WEAPON у нас 15%

Шанс выпадения ARMOR у нас около 17% (а не 20) тк сначала должно прокнутся 85% в первом условии

И так далее на уменьшение из-за ELIF-ов

Поэтому шанс выпадения BOTTLE существенно ниже 25 из-за того что рэнд считается в каждом условии

Код
DORAND 2
SERV.NEWITEM=I_RANDOM_WEAPON_1
SERV.NEWITEM=I_RANDOM_WEAPON_2
ENDDO


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

типа с DORAND идея вот такая

Код
С 15% случайное оружее - 15 строчек
С 20% случайная часть доспеха - 20 строчек
С 20% случайный реагент - 20 строчек
С 25% случайное зелье - 25 строчек
(20% бинт) - 20 строчек


для удобства делаем *2/10

Код
С 15% случайное оружее - 15*2/10=3 строчек
С 20% случайная часть доспеха - 4 строчек
С 20% случайный реагент - 4 строчек
С 25% случайное зелье - 5 строчек
(20% бинт) - 4 строчек


Соответственно код выйдет что-то вроде такого
Что конечно выглядит весьма просто, но поддерживать - снова пересчитывать соотношения

Код
DORAND 20
SERV.NEWITEM=I_RANDOM_WEAPON_1
SERV.NEWITEM=I_RANDOM_WEAPON_1
SERV.NEWITEM=I_RANDOM_WEAPON_1
SERV.NEWITEM=I_RANDOM_ARMOR
SERV.NEWITEM=I_RANDOM_ARMOR
SERV.NEWITEM=I_RANDOM_ARMOR
SERV.NEWITEM=I_RANDOM_ARMOR
SERV.NEWITEM=I_RANDOM_REAGENT
SERV.NEWITEM=I_RANDOM_REAGENT
SERV.NEWITEM=I_RANDOM_REAGENT
SERV.NEWITEM=I_RANDOM_REAGENT
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_RANDOM_BOTTLE
SERV.NEWITEM=I_BANDAGE
SERV.NEWITEM=I_BANDAGE
SERV.NEWITEM=I_BANDAGE
SERV.NEWITEM=I_BANDAGE
ENDDO


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 22.1.2024, 23:43
Сообщение #11


******

Expert
Сообщений: 810
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15527
Пользователь №: 14.566
Возраст: 30



Цитата(Ozzy Osbourne @ 22.1.2024, 12:23) *
Шанс выпадения ARMOR у нас около 17% (а не 20) тк сначала должно прокнутся 85% в первом условии


Ну так у тебя тоже получается, что он не все подряд функции вызывает... а на первой может остановится, а если на ней не остановился то дальше проверяет. и чем это отличается от if/elseif?
где там правильное % распределение покажите? если бы не требование выпадения всего 1 предмета, я бы еще понял...


правда там такой псевдокод... что нету true. и какой-то странный параметр runDropArr проверяется для бинтов, хотя должен dropOrNo. и прерывание цикла нигде не указано.


------------------------
тогда надо сначала прогнать все функции... записать удачные в новый массив.
и уже из из списка просто выбрать одну наугад... через тот же DORAND

а у тебя в итоге те же яйца сбоку.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 25.1.2024, 22:51
Сообщение #12


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Согласен Ozzy Osbourne

DORAND 4
TEST 1
TEST 2
TEST 3
TEST 4
ENDDO

У каждого исхода шанс 25%
Но указанный алгоритм тоже сложен для воспринятия когда много исходов.


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 26.1.2024, 0:09
Сообщение #13


******

Expert
Сообщений: 810
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15527
Пользователь №: 14.566
Возраст: 30



Код

local.count = 3
local.func1 = dropОружие
local.chance1 = 15
local.func2 = dropДоспех
local.chance2 = 20
local.func3 = dropРеагент
local.chance3 = 20

local.failfunc = dropБинты

call f_check_lootchance

[FUNCTION f_check_lootchance]
for i 1 <local.count>
  local.check = <f_check_dropchance <dlocal.i> <local.chance<dlocal.i>>>
  if <local.check>
    local.arraycount += 1
    local.array_<dlocal.arraycount> = <local.check>
  endif
endfor
if <local.arraycount>
  local.result = <eval({1 <local.arraycount>})>
  try <local.func<dlocal.array_<dlocal.result>>>
else
  try <local.failfunc>
endif


[FUNCTION f_check_dropchance]
if rand(100) <= <argn2>
  return <argn1>
else
  return 0




тоже самое можно было бы сделать покороче через {}, или через LIST
Например так

Код

[FUNCTION f_check_lootchance]
local.array = ""
for i 1 <local.count>
    local.check = <f_check_dropchance <dlocal.i> <local.chance<dlocal.i>>>
    if <local.check>
        local.array = <qval <local.success>?<local.array> <local.check> 1:<local.check> 1>
        local.success = 1
    endif
endfor
if <local.success>
    local.result = <eval({<local.array>})>
    try <local.func<dlocal.result>>
else
    try <local.failfunc>
endif
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 27.1.2024, 13:18
Сообщение #14


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Я тут придумал:

Код

[FUNCTION DROP_CHANSE_TEST]
DORAND 3
DROP_1 15,I_DAGGER
DROP_2 30,I_PLATEMAIL_CHEST
DROP_3 55,I_BANDAGE
ENDDO

[FUNCTION DROP_1]
LOCAL.ROLL=<R100>
IF <ARGV[0]> > <DLOCAL.ROLL>
SERV.NEWITEM=<ARGV[1]>
NEW.CONT=<FINDLAYER.21.UID>
SAY @0487 DROP_1 [<ARGV[0]> < <DLOCAL.ROLL>]
ELSE
SAY <ARGV[0]> < <DLOCAL.ROLL>
DROP_CHANSE_TEST
ENDIF

[FUNCTION DROP_2]
LOCAL.ROLL=<R100>
IF <ARGV[0]> > <DLOCAL.ROLL>
SERV.NEWITEM=<ARGV[1]>
NEW.CONT=<FINDLAYER.21.UID>
SAY @0487 DROP_2 [<ARGV[0]> < <DLOCAL.ROLL>]
ELSE
SAY <ARGV[0]> < <DLOCAL.ROLL>
DROP_CHANSE_TEST
ENDIF

[FUNCTION DROP_3]
LOCAL.ROLL=<R100>
IF <ARGV[0]> > <DLOCAL.ROLL>
SERV.NEWITEM=<ARGV[1]>
NEW.CONT=<FINDLAYER.21.UID>
SAY @0487 DROP_3 [<ARGV[0]> < <DLOCAL.ROLL>]
ELSE
SAY <ARGV[0]> < <DLOCAL.ROLL>
DROP_CHANSE_TEST
ENDIF


(IMG:https://i.ibb.co/6wDbM9M/Screenshot-1.png)


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 27.1.2024, 15:37
Сообщение #15


******

Expert
Сообщений: 810
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15527
Пользователь №: 14.566
Возраст: 30



Какая замечательная рекурсия.
Осталось добавить счетчик... чтобы при 3х из нее выкидывало.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Ozzy Osbourne
сообщение 31.1.2024, 15:41
Сообщение #16


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 0
Пользователь №: 810
Возраст: 32



Цитата(d`ArcZeal @ 27.1.2024, 13:18) *

DORAND 3
DROP_1 15,I_DAGGER
DROP_2 30,I_PLATEMAIL_CHEST
DROP_3 55,I_BANDAGE
ENDDO

у тебя шанс выпадения того что dorand дропнет I_DAGGER - 33% и 15% в самой функции. итого реальный шанс дропнуть дайгер у тебя 4.95% (33/100*15)
дропнуть I_PLATEMAIL_CHEST у тебя шанс 33% и 30 по функции, того 9.9% и тп поэтому значения просто надо поподнимать с учетом этого я думаю

но в целом это наверное максимально визуально понятное решение задачи


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 1.2.2024, 9:03
Сообщение #17


******

Expert
Сообщений: 810
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15527
Пользователь №: 14.566
Возраст: 30



А я сразу не понял, что бинты это FAIL. Так выходит надо опять вручную шансы считать?

А какие у меня проблемы с визуальностью решения?
https://forum.uokit.com/index.php?s=&sh...st&p=445663
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 1.2.2024, 22:22
Сообщение #18


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Цитата(Ozzy Osbourne @ 31.1.2024, 15:41) *

у тебя шанс выпадения того что dorand дропнет I_DAGGER - 33% и 15% в самой функции. итого реальный шанс дропнуть дайгер у тебя 4.95% (33/100*15)
дропнуть I_PLATEMAIL_CHEST у тебя шанс 33% и 30 по функции, того 9.9%

Так неверно считать, ведь сумма шансов всех трех исходов при таком подсчете не будет 100%.
Я и сам уже немного отошел от ТЗ.

Цитата(Sirocco @ 1.2.2024, 9:03) *

А какие у меня проблемы с визуальностью решения?
https://forum.uokit.com/index.php?s=&sh...st&p=445663

Колосальные), вообще не используемый и непонимаемый субьективно синтаксис.


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Sirocco
сообщение 1.2.2024, 23:59
Сообщение #19


******

Expert
Сообщений: 810
Регистрация: 2.2.2012
Группа: Пользователи
Наличность: 15527
Пользователь №: 14.566
Возраст: 30



Цитата(d`ArcZeal @ 1.2.2024, 22:22) *

Так неверно считать, ведь сумма шансов всех трех исходов при таком подсчете не будет 100%.
Я и сам уже немного отошел от ТЗ.
Колосальные), вообще не используемый и непонимаемый субьективно синтаксис.


Простите вам нужен легкий ввод или понимать сам алгоритм?
вот сам ввод... ну можете переделать через запятую как в аналогичных примерах (вместо отдельно шансы отдельно функции). Мне было проще так, потому что у меня на сфере нет ARGV в принципе, поэтому я в две строчки написал.
бинты вынесены в отдельную функцию.
еще можно через LIST сделать массив

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


local.count = 3
local.func1 = 15, dropОружие
local.func2 = 20, dropДоспех
local.func3 = 20, dropРеагент

local.failfunc = dropБинты

call f_check_lootchance


p.s. а так в принципе, если не понимать, что делаешь - то все будет субъективно непонятно.
вот зачем нужно было делать 3 функции [FUNCTION DROP_N] с одним и тем же текстом?
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
d`ArcZeal
сообщение 3.2.2024, 23:00
Сообщение #20


**********

Elder
Сообщений: 2.962
Регистрация: 27.11.2005
Группа: Пользователи
Наличность: 7797
Пользователь №: 4.522
Возраст: 34



Код
[FUNCTION DROP_CHANSE_TEST]
DORAND 3
DROP_UNIQUE_F 15,I_DAGGER,1
DROP_UNIQUE_F 20,RANDOM_PLATEMAIL_ARMOR,1
DROP_UNIQUE_F 20,RANDOM_REAGENT,1
DROP_UNIQUE_F 25,RANDOM_POTION,1
DROP_UNIQUE_F 20,I_BANDAGE,3
ENDDO

[FUNCTION DROP_UNIQUE_F]
LOCAL.ROLL=<R100>
IF <ARGV[0]> > <DLOCAL.ROLL>
SERV.NEWITEM=<ARGV[1]>
NEW.AMOUNT-<ARGV[2]>
NEW.CONT=<FINDLAYER.21.UID>
SERV.LOG [<ARGV[0]> > <DLOCAL.ROLL>] Drop: <ARGV[1]>,<ARGV[2]>
ELSE
DROP_CHANSE_TEST
ENDIF


--------------------
Olmer online administrator
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

2 страниц V  1 2 >
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.4.2024, 1:36
Designed by Nickostyle