Проблему Изи решили, поэтому решил сделать гайд как подобную систему можно реализовать:
Поехали!
Есть 6 переменных:
top_1 top_2 top_3 - эти переменные указывают на кол-во денег у топ-игроков.
*top_1_id top_2_id top_3_id - эти переменные указывают на айди топ-игроков.
Система будет работать по следующему сценарию:
Если денег у игрока больше чем значение top_1, тогда:
переменной top_3 присваивается значение top_2
переменной top_2 присваивается значение top_1
переменной top_1 присваивается значение #money#
переменной top_3_id присваивается значение top_2_id
переменной top_2_id присваивается значение top_1_id
переменной top_1_id присваивается значение #playerid#
Важно чтобы значение для переменной top_3 присваивалось раньше чем top_2, а top_2 раньше чем top_1
У меня не хватило места для 6 действий, поэтому в 5 дейстии я сделал вызов блока на 2 кб
Теперь когда у кого-нибудь будет денег больше чем у ТОП-1 игрока, он займёт его место. ТОП-1 игрок же спустится на место ТОП-2, а ТОП-2 спустится на место ТОП-3. Игрок который был ТОП-3 пропадёт из спика. Думаю, довольно понятно объяснил.
Собственно, на этом простом сравнении и строится вся система. Но если бы всё было так просто…
Далее у нас возикает проблема. А что если у игрока денег больше чем у ТОП-2, но при этом меньше чем у ТОП-1?
Ведь в 1 кб стоит проверка ДЕНЬГИ БОЛЬШЕ #var(top_1)#
, а значит ничего не произойдёт!
А ещё у нас может возникнуть ситуация, когда ТОП-1 увеличил свой капитал, находясь при этом в топе. Тогда он займёт сразу два места в рейтинге, чего быть не должно. Надо это исправить!
Поэтому в том-же кб мы ставим ещё одну проверку:
id игрока не равно #var(top_1_id)#
В конец добавляем “иначе”, и вызываем следующий кб, в моём случае это кб 3. В кб 3 мы делаем тоже самое, только уже без переменной top_1:
переменной top_3 присваивается значение top_2
переменной top_2 присваивается значение #money#
переменной top_3_id присваивается значение top_2_id
переменной top_2_id присваивается значение #playerid#
В настройках условий похожие проверки как и в кб 1:
1. Деньги больше #var(top_2)#
2. id игрока не равно #var(top_1_id)#
3. id игрока не равно #var(top_2_id)#
В конец добавляем “иначе”, и вызываем следующий кб, в моём случае это кб 4.
Но теперь нам уже потребуется 4 сравнения, а как мы знаем в кб можно одновременно делать только 3 сравнения! Чтобы решить эту проблему, мы делаем в кб 4 следующую настройку условий:
1. id игрока не равно #var(top_1_id)#
2. id игрока не равно #var(top_2_id)#
3. id игрока не равно #var(top_3_id)#
А в действиях кб 4 мы ставим вызов блока 5. Если id игрока не находится среди ТОП-3, его пропускает к блоку 5.
Таким образом получаем 4 сравнения!
В 4 кб мы просто:
переменной top_3 присваивается значение #money#
переменной top_3_id присваивается значение #playerid#
В настройках условий ставим проверку
деньги больше #var(top_3)#
На кб 1 ставим таймер с активацией все игроки. Рекомендую ставить обновление таймера 10-20 секунд, чтобы мир не лагал.
Теперь вроде бы всё работает! Но вот беда, если игрок находится в ТОП-3, и начинает поднимать деньги, то его результат не обновляется. Мы ведь поставилиid игрока не равно #var(top_)#
!! Решим эту проблему:
У меня это кб 6-8. В них всех идентичные действия, меняются только значения для топов 1-3. Для примера кб 6:
Действие: установить переменную мира top_1, #money#
В настройке условий стоит
id игрока равно #var(top_1)#
Иначе вызвать блок 7
В блоке 7 тоже самое, только для top_2
Иначе вызвать блок 8
В блоке 8 тоже самое, только для top_3
Теперь ставим таймер на кб 6 с активацией все игроки. Обновление таймера тоже, в районе 10-20 секунд.
Отлично! Теперь у игроков в ТОП-3 обновляются деньги!
А теперь всем тем кто считает что я сделал неправильно, криво, плохо, можно было бы и лучше - прошу привести примеры как можно сделать по другому. Я бы и сам рад узнать, как можно всё это сделать намного проще… Пишите, всегда открыт к обсуждению!
*можно было бы обойтись только этими переменными, но #money(id)# не завезли
**я начал систему с 1 кб, а не с 0