com.aionemu.gameserver.model.instance.instancereward.KamarBattlefieldReward.java Source code

Java tutorial

Introduction

Here is the source code for com.aionemu.gameserver.model.instance.instancereward.KamarBattlefieldReward.java

Source

/**
 * This file is part of Aion-Lightning <aion-lightning.org>.
 *
 *  Aion-Lightning is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  Aion-Lightning is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details. *
 *  You should have received a copy of the GNU General Public License
 *  along with Aion-Lightning.
 *  If not, see <http://www.gnu.org/licenses/>.
 */
package com.aionemu.gameserver.model.instance.instancereward;

import com.aionemu.commons.utils.Rnd;
import com.aionemu.gameserver.model.Race;
import com.aionemu.gameserver.model.gameobjects.player.Player;
import com.aionemu.gameserver.model.geometry.Point3D;
import com.aionemu.gameserver.model.instance.playerreward.*;
import com.aionemu.gameserver.network.aion.serverpackets.SM_INSTANCE_SCORE;
import com.aionemu.gameserver.services.teleport.TeleportService2;
import com.aionemu.gameserver.utils.PacketSendUtility;
import com.aionemu.gameserver.world.WorldMapInstance;
import com.aionemu.gameserver.world.knownlist.Visitor;

import org.apache.commons.lang.mutable.MutableInt;

import java.util.Comparator;
import java.util.List;

import static ch.lambdaj.Lambda.*;

/**
 * @author Alcapwnd
 */
public class KamarBattlefieldReward extends InstanceReward<KamarBattlefieldPlayerReward> {

    private int winnerPoints;
    private int looserPoints;
    private int capPoints;
    private MutableInt asmodiansPoints = new MutableInt(3800);
    private MutableInt elyosPoins = new MutableInt(3800);
    private MutableInt asmodiansPvpKills = new MutableInt(0);
    private MutableInt elyosPvpKills = new MutableInt(0);
    private Race race;
    private Point3D asmodiansStartPosition;
    private Point3D elyosStartPosition;
    protected WorldMapInstance instance;
    private long instanceTime;
    private int bonusTime;

    public KamarBattlefieldReward(Integer mapId, int instanceId, WorldMapInstance instance) {
        super(mapId, instanceId);
        this.instance = instance;
        winnerPoints = 3000;
        looserPoints = 2500;
        capPoints = 30000;
        bonusTime = 12000;
        setStartPositions();
    }

    public List<KamarBattlefieldPlayerReward> sortPoints() {
        return sort(getInstanceRewards(), on(PvPArenaPlayerReward.class).getScorePoints(),
                new Comparator<Integer>() {
                    @Override
                    public int compare(Integer o1, Integer o2) {
                        return o2 != null ? o2.compareTo(o1) : -o1.compareTo(o2);
                    }
                });
    }

    private void setStartPositions() {
        Point3D a = new Point3D(1535.6626f, 1573.9294f, 612.42f);
        Point3D b = new Point3D(1463.7689f, 1227.7777f, 581.62f);
        Point3D c = new Point3D(1204.9827f, 1350.6719f, 612.91f);
        Point3D d = new Point3D(1098.1141f, 1540.7119f, 585.10f);
        if (Rnd.get(2) == 0) {
            asmodiansStartPosition = a;
            elyosStartPosition = c;
        } else {
            asmodiansStartPosition = b;
            elyosStartPosition = d;
        }
    }

    public void portToPosition(Player player) {
        if (player.getRace() == Race.ASMODIANS) {
            TeleportService2.teleportTo(player, mapId, instanceId, asmodiansStartPosition.getX(),
                    asmodiansStartPosition.getY(), asmodiansStartPosition.getZ());
        } else {
            TeleportService2.teleportTo(player, mapId, instanceId, elyosStartPosition.getX(),
                    elyosStartPosition.getY(), elyosStartPosition.getZ());
        }
    }

    public MutableInt getPointsByRace(Race race) {
        switch (race) {
        case ELYOS:
            return elyosPoins;
        case ASMODIANS:
            return asmodiansPoints;
        default:
            break;
        }
        return null;
    }

    public void addPointsByRace(Race race, int points) {
        MutableInt racePoints = getPointsByRace(race);
        racePoints.add(points);
        if (racePoints.intValue() < 0) {
            racePoints.setValue(0);
        }
    }

    public MutableInt getPvpKillsByRace(Race race) {
        switch (race) {
        case ELYOS:
            return elyosPvpKills;
        case ASMODIANS:
            return asmodiansPvpKills;
        default:
            break;
        }
        return null;
    }

    public void addPvpKillsByRace(Race race, int points) {
        MutableInt racePoints = getPvpKillsByRace(race);
        racePoints.add(points);
        if (racePoints.intValue() < 0) {
            racePoints.setValue(0);
        }
    }

    public int getLooserPoints() {
        return looserPoints;
    }

    public int getWinnerPoints() {
        return winnerPoints;
    }

    public void setWinningRace(Race race) {
        this.race = race;
    }

    public Race getWinningRace() {
        return race;
    }

    public Race getWinningRaceByScore() {
        return asmodiansPoints.compareTo(elyosPoins) > 0 ? Race.ASMODIANS : Race.ELYOS;
    }

    @Override
    public void clear() {
        super.clear();
    }

    public void regPlayerReward(Player player) {
        if (!containPlayer(player.getObjectId())) {
            addPlayerReward(new KamarBattlefieldPlayerReward(player.getObjectId(), bonusTime, player.getRace()));
        }
    }

    @Override
    public void addPlayerReward(KamarBattlefieldPlayerReward reward) {
        super.addPlayerReward(reward);
    }

    @Override
    public KamarBattlefieldPlayerReward getPlayerReward(Integer object) {
        return (KamarBattlefieldPlayerReward) super.getPlayerReward(object);
    }

    public void sendPacket(final int type, final Integer object) {
        instance.doOnAllPlayers(new Visitor<Player>() {
            @Override
            public void visit(Player player) {
                PacketSendUtility.sendPacket(player,
                        new SM_INSTANCE_SCORE(type, getTime(), getInstanceReward(), object));
            }
        });
    }

    public int getTime() {
        long result = System.currentTimeMillis() - instanceTime;
        if (result < 45000) {
            return (int) (45000 - result);
        } else if (result < 1800000) { //30 Minutes.
            return (int) (1800000 - (result - 20000));
        }
        return 0;
    }

    public void setInstanceStartTime() {
        this.instanceTime = System.currentTimeMillis();
    }

    public int getCapPoints() {
        return capPoints;
    }

    public boolean hasCapPoints() {
        return maxFrom(getInstanceRewards()).getPoints() >= capPoints;
    }
}