Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
getAllPlayersForIterate
#1
Как перебирать всех игроков онлайн и если они соответствую условиям, добавлять в список и выполнять с ними определенные действия?
Вот хотел сделать, если у перебранных игроков фракция = 1, телепортируем, но не работает
Делал в методе useSkills, в файле CALL
[SRC="java"]if(_factiongood)
{
for(Player player : GameObjectsStorage.getAllPlayersForIterate()) {
if (player.getFactionId() == 1) {
player.stopMove();
player.teleToLocation(Location.findPointToStay(activeChar, 100, 150), activeChar.getGeoIndex());
getEffects(activeChar, player, getActivateRate() > 0, false);
}
}
if(isSSPossible())
activeChar.unChargeShots(isMagic());
return;
}[/SRC]
Ответ
#2
Может есть уже в ядре что то наподобие этого? Исходы овер
Ответ
#3
Овера нет, сделал под лост.


Faction
Код:
package org.mmocore.gameserver.model.actor.instances.player;

/**
* @author PointerRage
*
*/
public enum Faction {
    None,
    Good,
    Evil,
    Pewpew;
}

Player
Код:
    private Faction faction = Faction.None;
    public Faction getFaction() {
        return faction;
    }

EffectCallFaction
Код:
package org.mmocore.gameserver.skills.effects;

import org.mmocore.gameserver.model.Effect;
import org.mmocore.gameserver.model.GameObjectsStorage;
import org.mmocore.gameserver.model.Player;
import org.mmocore.gameserver.model.actor.instances.player.Faction;
import org.mmocore.gameserver.stats.Env;
import org.mmocore.gameserver.utils.Location;

/**
* @author PointerRage
*
*/
public class EffectCallFaction extends Effect {

    protected EffectCallFaction(Env env, EffectTemplate template) {
        super(env, template);
    }
    
    @Override
    public void onStart() {
        super.onStart();
        final Player caster = _effector.getPlayer();
        if(caster == null || caster.getFaction() == Faction.None) {
            return;
        }
        
        final Faction faction = caster.getFaction();
        for(Player player : GameObjectsStorage.getPlayers()) {
            if(player == caster || !player.isOnline()) {
                continue;
            }
            
            if(player.getFaction() != faction) {
                continue;
            }
            
            player.teleToLocation(Location.findAroundPosition(caster, 16, 64), caster.getReflection());
        }
    }

    @Override
    protected boolean onActionTime() {
        return false;
    }

}
m0nster.art - clear client patches, linkz to utils & code.
Гадаю по капче.
Ответ
#4
Не совсем то, но благодаря этому, могу брать всех людей онлайн, вычислять фракцию и телепортировать.
Спасибо.

Или я просто не понял, как это вообще работает в данном примере
Ответ
#5
Паттерн Итератор использовать http://www.javenue.info/post/101 давно хотел попробовать
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  getAllPlayersForIterate Enjoooy 5 2,166 05-25-2017, 12:48 AM
Последний пост: Hack

Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)