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

Java tutorial

Introduction

Here is the source code for com.aionemu.gameserver.model.instance.instancereward.IdgelDomeReward.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 static ch.lambdaj.Lambda.on;
import static ch.lambdaj.Lambda.sort;

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

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

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.IdgelDomePlayerReward;
import com.aionemu.gameserver.model.instance.playerreward.PvPArenaPlayerReward;
import com.aionemu.gameserver.services.teleport.TeleportService2;
import com.aionemu.gameserver.world.WorldMapInstance;

/**
 * @author GiGatR00n v4.7.5.x
 */
public class IdgelDomeReward extends InstanceReward<IdgelDomePlayerReward> {

    /**
     *  Calculates Total Asmo & Elyos Point<br><br>
     *  Default Start Points: 1000
     */
    private MutableInt asmodiansPoints = new MutableInt(1000);
    private MutableInt elyosPoins = new MutableInt(1000);

    /**
     *  Calculates Total Asmo & Elyos PvP Kills<br><br>
     *  Default PvP Kills: 0
     */
    private MutableInt asmodiansPvpKills = new MutableInt(0);
    private MutableInt elyosPvpKills = new MutableInt(0);

    // Determines the Winner or Looser Race
    private Race race;

    protected WorldMapInstance instance;

    private long instanceStartTime;
    private long instanceEndTime;
    private long PreparingTime;
    private int bonusTime;

    public IdgelDomeReward(Integer mapId, int instanceId, WorldMapInstance instance) {
        super(mapId, instanceId);
        this.instance = instance;
        this.PreparingTime = 97504; //v4.7.5.13 NA Retail
        this.instanceEndTime = 20 * 60 * 1000; //20-minutes
        this.bonusTime = 12000;
    }

    /**
     * Calculates the Abyss Bonus Reward for Winner and Looser Team individually.
     * 
     * 5156(Win+BossKilled)   :  3163(Win)
     * 3024(Loss+BossKilled)  :  1031(Loss)
     */
    public int CalcBonusAbyssReward(boolean isWin, boolean isBossKilled) {
        int BossKilled = 1993;
        int Win = 3163;
        int Loss = 1031;

        if (isBossKilled) {
            return isWin ? (Win + BossKilled) : (Loss + BossKilled);
        } else {
            return isWin ? Win : Loss;
        }
    }

    /**
     * Calculates the Glory Bonus Reward for Winner and Looser Team individually.
     * 
     * 200(Win+BossKilled)   :  150(Win)
     * 125(Loss+BossKilled)  :  75(Loss)
     */
    public int CalcBonusGloryReward(boolean isWin, boolean isBossKilled) {
        int BossKilled = 50;
        int Win = 150;
        int Loss = 75;

        if (isBossKilled) {
            return isWin ? (Win + BossKilled) : (Loss + BossKilled);
        } else {
            return isWin ? Win : Loss;
        }
    }

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

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

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

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

    public List<IdgelDomePlayerReward> 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);
                    }
                });
    }

    public void portToPosition(Player player) {
        /*
         * Get Random Position (Elyos - Asmo)
         */
        float Rx = (float) Rnd.get(-5, 5);
        float Ry = (float) Rnd.get(-5, 5);
        Point3D ElyosStartPoint = new Point3D(270.1437f + Rx, 348.6699f + Ry, 79.44365f);//Elyos Center
        Point3D AsmoStartPoint = new Point3D(258.5553f + Rx, 169.85149f + Ry, 79.430855f);//Asmo Center

        if (player.getRace() == Race.ASMODIANS) {
            TeleportService2.teleportTo(player, mapId, instanceId, AsmoStartPoint.getX(), AsmoStartPoint.getY(),
                    AsmoStartPoint.getZ(), (byte) 45);
        } else {
            TeleportService2.teleportTo(player, mapId, instanceId, ElyosStartPoint.getX(), ElyosStartPoint.getY(),
                    ElyosStartPoint.getZ(), (byte) 105);
        }
    }

    public MutableInt getPointsByRace(Race race) {
        return (race == Race.ELYOS) ? elyosPoins : (race == Race.ASMODIANS) ? asmodiansPoints : 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) {
        return (race == Race.ELYOS) ? elyosPvpKills : (race == Race.ASMODIANS) ? asmodiansPvpKills : null;
    }

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

    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;
    }

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

    public long getPreparingTime() {
        return this.PreparingTime;
    }

    public long getEndTime() {
        return (this.PreparingTime + this.instanceEndTime);
    }

    public int getRemainingTime() {
        long result = System.currentTimeMillis() - instanceStartTime;
        if (result < PreparingTime) {
            return (int) (PreparingTime - result);//...Count Down Before Starting Instance. 60,59,58,57,...,0
        } else if (result < getEndTime()) {//..........20 Minutes + PreparingTime(1.30 Min)
            return (int) (instanceEndTime - (result - PreparingTime));
        }
        return 0;
    }
}