Package lineage2.gameserver.instancemanager

Source Code of lineage2.gameserver.instancemanager.OlympiadHistoryManager

/*
* 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.instancemanager;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;

import lineage2.gameserver.dao.OlympiadHistoryDAO;
import lineage2.gameserver.data.StringHolder;
import lineage2.gameserver.model.Player;
import lineage2.gameserver.model.entity.Hero;
import lineage2.gameserver.model.entity.olympiad.OlympiadHistory;
import lineage2.gameserver.network.serverpackets.NpcHtmlMessage;
import lineage2.gameserver.templates.StatsSet;
import lineage2.gameserver.utils.HtmlUtils;

import org.apache.commons.lang3.StringUtils;
import org.napile.primitive.maps.IntObjectMap;
import org.napile.primitive.maps.impl.CHashIntObjectMap;

/**
* @author Mobius
* @version $Revision: 1.0 $
*/
public class OlympiadHistoryManager
{
  /**
   * Field _instance.
   */
  private static final OlympiadHistoryManager _instance = new OlympiadHistoryManager();
  /**
   * Field _historyNew.
   */
  private final IntObjectMap<List<OlympiadHistory>> _historyNew = new CHashIntObjectMap<>();
  /**
   * Field _historyOld.
   */
  private final IntObjectMap<List<OlympiadHistory>> _historyOld = new CHashIntObjectMap<>();
 
  /**
   * Method getInstance.
   * @return OlympiadHistoryManager
   */
  public static OlympiadHistoryManager getInstance()
  {
    return _instance;
  }
 
  /**
   * Constructor for OlympiadHistoryManager.
   */
  OlympiadHistoryManager()
  {
    Map<Boolean, List<OlympiadHistory>> historyList = OlympiadHistoryDAO.getInstance().select();
    for (Map.Entry<Boolean, List<OlympiadHistory>> entry : historyList.entrySet())
    {
      for (OlympiadHistory history : entry.getValue())
      {
        addHistory(entry.getKey(), history);
      }
    }
  }
 
  /**
   * Method switchData.
   */
  public void switchData()
  {
    _historyOld.clear();
    _historyOld.putAll(_historyNew);
    _historyNew.clear();
    OlympiadHistoryDAO.getInstance().switchData();
  }
 
  /**
   * Method saveHistory.
   * @param history OlympiadHistory
   */
  public void saveHistory(OlympiadHistory history)
  {
    addHistory(false, history);
    OlympiadHistoryDAO.getInstance().insert(history);
  }
 
  /**
   * Method addHistory.
   * @param old boolean
   * @param history OlympiadHistory
   */
  public void addHistory(boolean old, OlympiadHistory history)
  {
    IntObjectMap<List<OlympiadHistory>> map = old ? _historyOld : _historyNew;
    addHistory0(map, history.getObjectId1(), history);
    addHistory0(map, history.getObjectId2(), history);
  }
 
  /**
   * Method addHistory0.
   * @param map IntObjectMap<List<OlympiadHistory>>
   * @param objectId int
   * @param history OlympiadHistory
   */
  private void addHistory0(IntObjectMap<List<OlympiadHistory>> map, int objectId, OlympiadHistory history)
  {
    List<OlympiadHistory> historySet = map.get(objectId);
    if (historySet == null)
    {
      map.put(objectId, historySet = new CopyOnWriteArrayList<>());
    }
    historySet.add(history);
  }
 
  /**
   * Method showHistory.
   * @param player Player
   * @param targetClassId int
   * @param page int
   */
  public void showHistory(Player player, int targetClassId, int page)
  {
    final int perpage = 15;
    Map.Entry<Integer, StatsSet> entry = Hero.getInstance().getHeroStats(targetClassId);
    if (entry == null)
    {
      return;
    }
    List<OlympiadHistory> historyList = _historyOld.get(entry.getKey());
    if (historyList == null)
    {
      historyList = Collections.emptyList();
    }
    NpcHtmlMessage html = new NpcHtmlMessage(player, null);
    html.setFile("olympiad/monument_hero_info.htm");
    html.replace("%title%", StringHolder.getInstance().getNotNull(player, "hero.history"));
    int allStatWinner = 0;
    int allStatLoss = 0;
    int allStatTie = 0;
    for (OlympiadHistory h : historyList)
    {
      if (h.getGameStatus() == 0)
      {
        allStatTie++;
      }
      else
      {
        int team = entry.getKey() == h.getObjectId1() ? 1 : 2;
        if (h.getGameStatus() == team)
        {
          allStatWinner++;
        }
        else
        {
          allStatLoss++;
        }
      }
    }
    html.replace("%wins%", String.valueOf(allStatWinner));
    html.replace("%ties%", String.valueOf(allStatTie));
    html.replace("%losses%", String.valueOf(allStatLoss));
    int min = perpage * (page - 1);
    int max = perpage * page;
    int currentWinner = 0;
    int currentLoss = 0;
    int currentTie = 0;
    final StringBuilder b = new StringBuilder(500);
    for (int i = 0; i < historyList.size(); i++)
    {
      OlympiadHistory history = historyList.get(i);
      if (history.getGameStatus() == 0)
      {
        currentTie++;
      }
      else
      {
        int team = entry.getKey() == history.getObjectId1() ? 1 : 2;
        if (history.getGameStatus() == team)
        {
          currentWinner++;
        }
        else
        {
          currentLoss++;
        }
      }
      if (i < min)
      {
        continue;
      }
      if (i >= max)
      {
        break;
      }
      b.append("<tr><td>");
      b.append(history.toString(player, entry.getKey(), currentWinner, currentLoss, currentTie));
      b.append("</td></tr");
    }
    if (min > 0)
    {
      html.replace("%buttprev%", HtmlUtils.PREV_BUTTON);
      html.replace("%prev_bypass%", "_match?class=" + targetClassId + "&page=" + (page - 1));
    }
    else
    {
      html.replace("%buttprev%", StringUtils.EMPTY);
    }
    if (historyList.size() > max)
    {
      html.replace("%buttnext%", HtmlUtils.NEXT_BUTTON);
      html.replace("%prev_bypass%", "_match?class=" + targetClassId + "&page=" + (page + 1));
    }
    else
    {
      html.replace("%buttnext%", StringUtils.EMPTY);
    }
    html.replace("%list%", b.toString());
    player.sendPacket(html);
  }
}
TOP

Related Classes of lineage2.gameserver.instancemanager.OlympiadHistoryManager

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.