getAllPlayersForIterate - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 23.05.2017, 00:31   #1
Пользователь

Автор темы (Топик Стартер) getAllPlayersForIterate

Собственно как на подобии этого метода сделать свой с перечеслением например: getAllGoodPlayersForIterate? т.е. соответственно хотелось брать число игроков с getFactionId == 1 и добавлять в этот список, и также с getFactionId == 2, сделать метод getAllEvilPlayersForIterate, и чтобы потом можно сравнивать if(getAllEvilPlayerForIterate.size > getAllGoodPlayersForIterate.size)
return false;

public static Iterable<Player> getAllPlayersForIterate()
	{
		return getStoragePlayers();
	}
Code: Java
Может быть это стоит делать не в GameObjectsStorage?

Исходы овер.
Enjoooy вне форума Ответить с цитированием
Непрочитано 23.05.2017, 01:41   #2
Изгнанные

По умолчанию Re: getAllPlayersForIterate

Цитата:
Сообщение от Enjoooy Посмотреть сообщение
Собственно как на подобии этого метода сделать свой с перечеслением например: getAllGoodPlayersForIterate? т.е. соответственно хотелось брать число игроков с getFactionId == 1 и добавлять в этот список, и также с getFactionId == 2, сделать метод getAllEvilPlayersForIterate, и чтобы потом можно сравнивать if(getAllEvilPlayerForIterate.size > getAllGoodPlayersForIterate.size)
return false;

public static Iterable<Player> getAllPlayersForIterate()
	{
		return getStoragePlayers();
	}
Code: Java
Может быть это стоит делать не в GameObjectsStorage?

Исходы овер.
Ну вопервых getAllEvil/GoodPlayerForIterate,представляет собой массив, а не метод.
А во вторых чтобы перечислить элементы любого массива - достаточно forloopa .
А в третьих getAllPlayersForIterate возвращает "хранилище"/массив игроков .

И если уж так нужно возвращать массив игроков с разными factID, достаточно сделать подобное.
Код:
public static Iterable<Player> getAllEvilPlayersForIterate()
	{
                if(getFactionId == 1)
		return getStoragePlayers();
	}
Код:
public static Iterable<Player> getAllGoodPlayersForIterate()
	{
                if(getFactionId == 2)
		return getStoragePlayers();
	}
Я не слишком силен в яве, особенно если так мало представлено кода, возможно что getFactionId не глобальная переменная, и тогда брать ее стоит прямо из GetStoragePlayers, и т.к. не понятно как именно проходит цикл, то решать вам.
defenderk1 вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 23.05.2017, 16:07   #3
Аватар для FaintSmile
Пользователь

По умолчанию Re: getAllPlayersForIterate

PHP код:
    public static GArray<PlayergetAllPlayersByFactionId(int faction_id)
    {
        
GArray<Playerplayers = new GArray<>();
        for(
Player player getStoragePlayers().getAll()) {
            if(
player.getFactionId() == faction_id) {
                
players.add(player);
            }
        }
        return 
players;
    } 
самое простое что можно сделать
FaintSmile вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 23.05.2017, 16:44   #4
Аватар для Akumu
Пользователь

По умолчанию Re: getAllPlayersForIterate

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

(с) https://habrahabr.ru/post/328552/
Akumu вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 25.05.2017, 00:07   #5
Пользователь

Автор темы (Топик Стартер) Re: getAllPlayersForIterate

А как высчитывать разницу? т.е. если просто делать getAllPlayersByFactionId(1) > getAllPlayersByFactionId(2), то будет если хотя бы на одного человека, то не будет пускать

А как сделать если на 50 человек больше, то выполнять условие? Не совсем еще разобрался с логикой, подскажите пожалуйста

		int goodcount = GameObjectsStorage.getAllPlayersByFactionId(1).size();
		int evilcount = GameObjectsStorage.getAllPlayersByFactionId(2).size();
Code: Java
то есть сделать так if(goodcount > evilcount)
sendMessage("Мол на одного человека больше и поэтому false");
return;

А как сделать типа того if(goodcount+50 > evilcount)
sendMessage("Мол онлайн гуд слишком высок")
return;
Enjoooy вне форума Ответить с цитированием
Непрочитано 25.05.2017, 00:48   #6
Аватар для Hack
Пользователь

По умолчанию Re: getAllPlayersForIterate

Цитата:
Сообщение от Enjoooy Посмотреть сообщение
А как сделать если на 50 человек больше, то выполнять условие? Не совсем еще разобрался с логикой, подскажите пожалуйста
if (getAllPlayersByFactionId(1) > getAllPlayersByFactionId(2) + 50) {

}



По сабжу: лучше начать с перепила хранилища и посадить все на предикаты, например:

public List<Player> getPlayers(Predicate<Player> cond) {
return storage.stream().filter(cond).collect(Collectors.t oList());
}

и далее юзать не заморачивая голову:
YourStorage.getPlayers(p -> p.getFaction() == 1).foreach(p -> p.getInventory().addItem(57, 1000)); // даст всем игрокам в первой фракции 1000 аден
Hack вне форума Отправить сообщение для Hack с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
getAllPlayersForIterate Enjoooy Работа со скриптами 4 22.04.2017 16:37


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 01:39. Часовой пояс GMT +3.

Вверх