Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Работа со скриптами (https://forum.zone-game.info/forumdisplay.php?f=37)
-   -   Олимпиада High Five (https://forum.zone-game.info/showthread.php?t=15546)

FaintSmile 17.08.2011 01:52

Олимпиада High Five
 
В этих хрониках появилась такое нововведение ,как подбор противников по очкам. Т.е. если у игрока 1 очко то и попадется от с тем у кого 1 очко (ну или где-то рядом).

Подумал над этим вопросом, и прише к выводу, что можно реализовать вот так:
Код HTML:

protected static final Participant[] createListOfParticipants(List<Integer> list)
        {
                if (list == null || list.isEmpty() || list.size() < 2)
                        return null;

                int playerOneObjectId = 0;
                L2PcInstance playerOne = null;
                L2PcInstance playerTwo = null;
                //first to sort the list
                int buff[];
                buff = new int[list.size()];
                int i = 0;
                while (i >
0)
                {
                        buff[i] = Olympiad.getInstance().getNoblePoints(list.get(i));
                        i++;
                }
                Arrays.sort(buff);
                i = 0;
                while (i > 0)
                {
                        //TODO convert points to objectsID
                }
                i = 0;
                while (list.size() > 1)
                {
                        playerOneObjectId = list.remove(i++);
                        playerOne = L2World.getInstance().getPlayer(playerOneObjectId);
                        if (playerOne == null || !playerOne.isOnline())
                                continue;

                        playerTwo = L2World.getInstance().getPlayer(list.remove(i++));
                        if (playerTwo == null || !playerTwo.isOnline())
                        {
                                list.add(playerOneObjectId);
                                continue;
                        }

                        Participant[] result = new Participant[2];
                        result[0] = new Participant(playerOne, 1);
                        result[1] = new Participant(playerTwo, 2);

                        return result;
                }
                return null;
        }

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

Кстати ,надеюсь остальной код правильный, если нет хотелось бы услышать конструктивную критику...

P.S. l2j

MarshalRotar 17.08.2011 02:47

Re: Олимпиада High Five
 
Вход в мир High Five сам делал ?

FaintSmile 17.08.2011 05:40

Re: Олимпиада High Five
 
Цитата:

система Олимпиады стала абсолютно объективной - теперь соперниками будут ставиться персонажи с похожим количеством очков Олимпиады
https://forum.4game.ru/showthread.php?t=195267

Цитата:

Вход в мир High Five сам делал ?
Не вполне понял о чем вы.

Ro_0TT 17.08.2011 05:50

Re: Олимпиада High Five
 
Цитата:

Сообщение от AmdAmdFtuk (Сообщение 135676)
Не вполне понял о чем вы.

Да чувак уже месяц бегает по разработчикам и просит помочь реализовать вход в мир (пакетный уровень сервера) по High Five. XD

Вашей сортировкой вы ничего не добьетесь, стоит использовать "Сортировку Компаратором", создать свой класс, основывающийся на интерфейсе компаратора.. гуглим в общем.

А вообще при подборе соперника можно найти минимальное значение очков, которое ему и подходит и на втором круге ближайшего игрока с нужным кол-во очков сделать соперником. :+25 Duals:

Но, возможно гуру предложат более изощренный способ. :_smile_:

FaintSmile 17.08.2011 05:55

Re: Олимпиада High Five
 
Цитата:

Да чувак уже месяц бегает по разработчикам и просит помочь реализовать вход в мир (пакетный уровень сервера) по High Five.
:)
Однако, это всё оффтоп, хотелось бы по теме услшать чего-нибудь :)

Ro_0TT 17.08.2011 05:57

Re: Олимпиада High Five
 
Цитата:

Сообщение от AmdAmdFtuk (Сообщение 135679)
:)
Однако, это всё оффтоп, хотелось бы по теме услшать чего-нибудь :)

А я отписал :), просто не успел дописать пост.

FaintSmile 17.08.2011 06:28

Re: Олимпиада High Five
 
Цитата:

А вообще при подборе соперника можно найти минимальное значение очков, которое ему и подходит и на втором круге ближайшего игрока с нужным кол-во очков сделать соперником.
Хм, тогда для каждого возможного значения очков, которое может проиграть игрок, а их 10, нужно будет изобретать способ нахождения подходящего кол-ва очков у оппонента, тем более ,что такого оппонента может не быть вовсе - допустим игрок с 20 очками а с ним в одном круге выступают 9 игроков 100-500 очков, тогда его не телепортнет, т.к. нет противника.

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

Цитата:

Вашей сортировкой вы ничего не добьетесь, стоит использовать "Сортировку Компаратором", создать свой класс, основывающийся на интерфейсе компаратора.. гуглим в общем.
Сейчас посмотрим что за зверь такой "компаратор" :D

LineOFWar 17.08.2011 08:34

Re: Олимпиада High Five
 
Цитата:

Сообщение от AmdAmdFtuk (Сообщение 135687)
Хм, тогда для каждого возможного значения очков, которое может проиграть игрок, а их 10, нужно будет изобретать способ нахождения подходящего кол-ва очков у оппонента, тем более ,что такого оппонента может не быть вовсе - допустим игрок с 20 очками а с ним в одном круге выступают 9 игроков 100-500 очков, тогда его не телепортнет, т.к. нет противника.

самых оптимальных методов сортировки придумано много лет назад и под разные случаи конечно да можно по изврашаться и сделать свой ну или готовые подобрать или чуть подправить, а по поводу нет соперника такого не будет так как осуществялеться методом наименьшего из всех ну или ближайщего те если у нас есть 3 игрока с очками 100 110 120 и один игрок с очками 10 то он попадет с игроком наиболее близким те с тем у кого 100 так в во всех случая даже если у тех 1000 а у него 1 да и кажеться минимальное колво очков для участия = 3 не зря же (хотя мб путаю:))

bloodshed 17.08.2011 09:44

Re: Олимпиада High Five
 
есть вариант использования TreeMultimap из google collections.
На идеальность не претендую, написал с тем, что первое попалось) какие именно условия должны соблюдаться не в курсе, знаю только то, что написано в этой теме.

Код:

public static final Comparator<Integer> KEY_COMPARATOR = new Comparator<Integer>()
{
        @Override
        public int compare(final Integer point1, final Integer point2)
        {
                if(point1 == null || point2 == null)
                        return 0;
                return point1.compareTo(point2);
        }
};

public static final Comparator<Integer> VALUE_COMPARATOR = new Comparator<Integer>()
{
        @Override
        public int compare(final Integer objId1, final Integer objId2)
        {
                return objId1.compareTo(objId2);
        }
};

/**
 * Список всех зарегистрированных, где ключ это количество очков.
 */
private static final TreeMultimap<Integer, Integer> registers = TreeMultimap.create(KEY_COMPARATOR, VALUE_COMPARATOR);

Вставить куда нить:
Пример:
Свернуть ↑Развернуть ↓


Результат:
Свернуть ↑Развернуть ↓


P.S.
objId от балды.

оффтом:
Свернуть ↑Развернуть ↓

Deazer 17.08.2011 09:51

Re: Олимпиада High Five
 
:D и все же никто не понял как рассчитывает разрыв XD

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


http://img84.imageshack.us/img84/9949/shot00092z.png

На тот момент было 280 зарегистрировавшихся.


Текущее время: 01:34. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot