Package lineage2.gameserver.model.entity.events.impl

Source Code of lineage2.gameserver.model.entity.events.impl.ClanHallTeamBattleEvent

/*
* This program 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.
*
* This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package lineage2.gameserver.model.entity.events.impl;

import java.util.List;

import lineage2.commons.collections.CollectionUtils;
import lineage2.commons.collections.MultiValueSet;
import lineage2.gameserver.dao.SiegeClanDAO;
import lineage2.gameserver.dao.SiegePlayerDAO;
import lineage2.gameserver.model.Player;
import lineage2.gameserver.model.base.RestartType;
import lineage2.gameserver.model.entity.events.objects.CTBSiegeClanObject;
import lineage2.gameserver.model.entity.events.objects.CTBTeamObject;
import lineage2.gameserver.model.entity.events.objects.SiegeClanObject;
import lineage2.gameserver.model.entity.residence.ClanHall;
import lineage2.gameserver.model.pledge.Clan;
import lineage2.gameserver.network.serverpackets.PlaySound;
import lineage2.gameserver.network.serverpackets.SystemMessage2;
import lineage2.gameserver.network.serverpackets.components.SystemMsg;
import lineage2.gameserver.tables.ClanTable;
import lineage2.gameserver.utils.Location;

/**
* @author Mobius
* @version $Revision: 1.0 $
*/
public class ClanHallTeamBattleEvent extends SiegeEvent<ClanHall, CTBSiegeClanObject>
{
  /**
   * Field TRYOUT_PART. (value is ""tryout_part"")
   */
  public static final String TRYOUT_PART = "tryout_part";
  /**
   * Field CHALLENGER_RESTART_POINTS. (value is ""challenger_restart_points"")
   */
  public static final String CHALLENGER_RESTART_POINTS = "challenger_restart_points";
  /**
   * Field FIRST_DOORS. (value is ""first_doors"")
   */
  public static final String FIRST_DOORS = "first_doors";
  /**
   * Field SECOND_DOORS. (value is ""second_doors"")
   */
  public static final String SECOND_DOORS = "second_doors";
  /**
   * Field NEXT_STEP. (value is ""next_step"")
   */
  public static final String NEXT_STEP = "next_step";
 
  /**
   * Constructor for ClanHallTeamBattleEvent.
   * @param set MultiValueSet<String>
   */
  public ClanHallTeamBattleEvent(MultiValueSet<String> set)
  {
    super(set);
  }
 
  /**
   * Method startEvent.
   */
  @Override
  public void startEvent()
  {
    _oldOwner = getResidence().getOwner();
    List<CTBSiegeClanObject> attackers = getObjects(ATTACKERS);
    if (attackers.isEmpty())
    {
      if (_oldOwner == null)
      {
        broadcastInZone2(new SystemMessage2(SystemMsg.THE_SIEGE_OF_S1_HAS_BEEN_CANCELED_DUE_TO_LACK_OF_INTEREST).addResidenceName(getResidence()));
      }
      else
      {
        broadcastInZone2(new SystemMessage2(SystemMsg.S1S_SIEGE_WAS_CANCELED_BECAUSE_THERE_WERE_NO_CLANS_THAT_PARTICIPATED).addResidenceName(getResidence()));
      }
      reCalcNextTime(false);
      return;
    }
    if (_oldOwner != null)
    {
      addObject(DEFENDERS, new SiegeClanObject(DEFENDERS, _oldOwner, 0));
    }
    SiegeClanDAO.getInstance().delete(getResidence());
    SiegePlayerDAO.getInstance().delete(getResidence());
    List<CTBTeamObject> teams = getObjects(TRYOUT_PART);
    for (int i = 0; i < 5; i++)
    {
      CTBTeamObject team = teams.get(i);
      team.setSiegeClan(CollectionUtils.safeGet(attackers, i));
    }
    broadcastTo(new SystemMessage2(SystemMsg.THE_SIEGE_TO_CONQUER_S1_HAS_BEGUN).addResidenceName(getResidence()), ATTACKERS, DEFENDERS);
    broadcastTo(SystemMsg.THE_TRYOUTS_ARE_ABOUT_TO_BEGIN, ATTACKERS);
    super.startEvent();
  }
 
  /**
   * Method nextStep.
   */
  public void nextStep()
  {
    broadcastTo(SystemMsg.THE_TRYOUTS_HAVE_BEGUN, ATTACKERS, DEFENDERS);
    updateParticles(true, ATTACKERS, DEFENDERS);
  }
 
  /**
   * Method processStep.
   * @param team CTBTeamObject
   */
  public void processStep(CTBTeamObject team)
  {
    if (team.getSiegeClan() != null)
    {
      CTBSiegeClanObject object = team.getSiegeClan();
      object.setEvent(false, this);
      teleportPlayers(SPECTATORS);
    }
    team.despawnObject(this);
    List<CTBTeamObject> teams = getObjects(TRYOUT_PART);
    boolean hasWinner = false;
    CTBTeamObject winnerTeam = null;
    for (CTBTeamObject t : teams)
    {
      if (t.isParticle())
      {
        hasWinner = winnerTeam == null;
        winnerTeam = t;
      }
    }
    if (!hasWinner)
    {
      return;
    }
    SiegeClanObject clan = winnerTeam.getSiegeClan();
    if (clan != null)
    {
      getResidence().changeOwner(clan.getClan());
    }
    stopEvent(true);
  }
 
  /**
   * Method announce.
   * @param val int
   */
  @Override
  public void announce(int val)
  {
    int minute = val / 60;
    if (minute > 0)
    {
      broadcastTo(new SystemMessage2(SystemMsg.THE_CONTEST_WILL_BEGIN_IN_S1_MINUTES).addInteger(minute), ATTACKERS, DEFENDERS);
    }
    else
    {
      broadcastTo(new SystemMessage2(SystemMsg.THE_PRELIMINARY_MATCH_WILL_BEGIN_IN_S1_SECONDS).addInteger(val), ATTACKERS, DEFENDERS);
    }
  }
 
  /**
   * Method stopEvent.
   * @param step boolean
   */
  @Override
  public void stopEvent(boolean step)
  {
    Clan newOwner = getResidence().getOwner();
    if (newOwner != null)
    {
      if (_oldOwner != newOwner)
      {
        newOwner.broadcastToOnlineMembers(PlaySound.SIEGE_VICTORY);
        newOwner.incReputation(1700, false, toString());
      }
      broadcastTo(new SystemMessage2(SystemMsg.S1_CLAN_HAS_DEFEATED_S2).addString(newOwner.getName()).addResidenceName(getResidence()), ATTACKERS, DEFENDERS);
      broadcastTo(new SystemMessage2(SystemMsg.THE_SIEGE_OF_S1_IS_FINISHED).addResidenceName(getResidence()), ATTACKERS, DEFENDERS);
    }
    else
    {
      broadcastTo(new SystemMessage2(SystemMsg.THE_PRELIMINARY_MATCH_OF_S1_HAS_ENDED_IN_A_DRAW).addResidenceName(getResidence()), ATTACKERS);
    }
    updateParticles(false, ATTACKERS, DEFENDERS);
    removeObjects(DEFENDERS);
    removeObjects(ATTACKERS);
    super.stopEvent(step);
    _oldOwner = null;
  }
 
  /**
   * Method loadSiegeClans.
   */
  @Override
  public void loadSiegeClans()
  {
    List<SiegeClanObject> siegeClanObjectList = SiegeClanDAO.getInstance().load(getResidence(), ATTACKERS);
    addObjects(ATTACKERS, siegeClanObjectList);
    List<CTBSiegeClanObject> objects = getObjects(ATTACKERS);
    for (CTBSiegeClanObject clan : objects)
    {
      clan.select(getResidence());
    }
  }
 
  /**
   * Method newSiegeClan.
   * @param type String
   * @param clanId int
   * @param i long
   * @param date long
   * @return CTBSiegeClanObject
   */
  @Override
  public CTBSiegeClanObject newSiegeClan(String type, int clanId, long i, long date)
  {
    Clan clan = ClanTable.getInstance().getClan(clanId);
    return clan == null ? null : new CTBSiegeClanObject(type, clan, i, date);
  }
 
  /**
   * Method isParticle.
   * @param player Player
   * @return boolean
   */
  @Override
  public boolean isParticle(Player player)
  {
    if (!isInProgress() || (player.getClan() == null))
    {
      return false;
    }
    CTBSiegeClanObject object = getSiegeClan(ATTACKERS, player.getClan());
    return (object != null) && object.getPlayers().contains(player.getObjectId());
  }
 
  /**
   * Method getRestartLoc.
   * @param player Player
   * @param type RestartType
   * @return Location
   */
  @Override
  public Location getRestartLoc(Player player, RestartType type)
  {
    if (!checkIfInZone(player))
    {
      return null;
    }
    SiegeClanObject attackerClan = getSiegeClan(ATTACKERS, player.getClan());
    Location loc = null;
    switch (type)
    {
      case TO_VILLAGE:
        if ((attackerClan != null) && checkIfInZone(player))
        {
          List<SiegeClanObject> objectList = getObjects(ATTACKERS);
          List<Location> teleportList = getObjects(CHALLENGER_RESTART_POINTS);
          int index = objectList.indexOf(attackerClan);
          loc = teleportList.get(index);
        }
        break;
      default:
        break;
    }
    return loc;
  }
 
  /**
   * Method action.
   * @param name String
   * @param start boolean
   */
  @Override
  public void action(String name, boolean start)
  {
    if (name.equalsIgnoreCase(NEXT_STEP))
    {
      nextStep();
    }
    else
    {
      super.action(name, start);
    }
  }
 
  /**
   * Method getUserRelation.
   * @param thisPlayer Player
   * @param result int
   * @return int
   */
  @Override
  public int getUserRelation(Player thisPlayer, int result)
  {
    return result;
  }
 
  /**
   * Method getRelation.
   * @param thisPlayer Player
   * @param targetPlayer Player
   * @param result int
   * @return int
   */
  @Override
  public int getRelation(Player thisPlayer, Player targetPlayer, int result)
  {
    return result;
  }
}
TOP

Related Classes of lineage2.gameserver.model.entity.events.impl.ClanHallTeamBattleEvent

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.