package com.aionemu.gameserver.model.gameobjects.player.title; import java.util.Collection; import java.util.LinkedHashMap; import com.aionemu.gameserver.dao.PlayerTitleListDAO; import com.aionemu.gameserver.dataholders.DataManager; import com.aionemu.gameserver.model.Race; import com.aionemu.gameserver.model.gameobjects.player.Player; import com.aionemu.gameserver.model.stats.listeners.TitleChangeListener; import com.aionemu.gameserver.model.templates.TitleTemplate; import com.aionemu.gameserver.network.aion.serverpackets.SM_SYSTEM_MESSAGE; import com.aionemu.gameserver.network.aion.serverpackets.SM_TITLE_INFO; import com.aionemu.gameserver.taskmanager.tasks.ExpireTimerTask; import com.aionemu.gameserver.utils.PacketSendUtility; /** * @author xavier, cura, xTz */ public class TitleList { private final LinkedHashMap titles; private Player owner; public TitleList() { this.titles = new LinkedHashMap<>(); this.owner = null; } public void setOwner(Player owner) { this.owner = owner; } public Player getOwner() { return owner; } public boolean contains(int titleId) { return titles.containsKey(titleId); } public void addEntry(int titleId, int remaining) { TitleTemplate tt = DataManager.TITLE_DATA.getTitleTemplate(titleId); if (tt == null) { throw new IllegalArgumentException("Invalid title id " + titleId); } titles.put(titleId, new Title(tt, titleId, remaining)); } public boolean addTitle(int titleId, boolean questReward, int time) { TitleTemplate tt = DataManager.TITLE_DATA.getTitleTemplate(titleId); if (tt == null) { throw new IllegalArgumentException("Invalid title id " + titleId); } if (owner != null) { if (owner.getRace() != tt.getRace() && tt.getRace() != Race.PC_ALL) { PacketSendUtility.sendMessage(owner, "This title is not available for your race."); return false; } Title entry = new Title(tt, titleId, time); if (!titles.containsKey(titleId)) { titles.put(titleId, entry); ExpireTimerTask.getInstance().registerExpirable(entry, owner); PlayerTitleListDAO.storeTitles(owner, entry); } else { PacketSendUtility.sendPacket(owner, SM_SYSTEM_MESSAGE.STR_TOOLTIP_LEARNED_TITLE()); return false; } if (questReward) PacketSendUtility.sendPacket(owner, SM_SYSTEM_MESSAGE.STR_QUEST_GET_REWARD_TITLE(tt.getL10n())); else PacketSendUtility.sendPacket(owner, SM_SYSTEM_MESSAGE.STR_MSG_GET_CASH_TITLE(tt.getL10n())); PacketSendUtility.sendPacket(owner, new SM_TITLE_INFO(owner)); return true; } return false; } public void setDisplayTitle(int titleId) { PacketSendUtility.sendPacket(owner, new SM_TITLE_INFO(titleId)); PacketSendUtility.broadcastPacketAndReceive(owner, (new SM_TITLE_INFO(owner, titleId))); owner.getCommonData().setTitleId(titleId); owner.getController().updateNearbyQuests(); } public void setBonusTitle(int bonusTitleId) { PacketSendUtility.sendPacket(owner, new SM_TITLE_INFO(6, bonusTitleId)); if (owner.getCommonData().getBonusTitleId() > 0) { if (owner.getGameStats() != null) { TitleChangeListener.onBonusTitleChange(owner.getGameStats(), owner.getCommonData().getBonusTitleId(), false); } } owner.getCommonData().setBonusTitleId(bonusTitleId); if (bonusTitleId > 0 && owner.getGameStats() != null) { TitleChangeListener.onBonusTitleChange(owner.getGameStats(), bonusTitleId, true); } } public void removeTitle(int titleId) { if (!titles.containsKey(titleId)) return; if (owner.getCommonData().getTitleId() == titleId) setDisplayTitle(-1); if (owner.getCommonData().getBonusTitleId() == titleId) setBonusTitle(-1); titles.remove(titleId); PacketSendUtility.sendPacket(owner, new SM_TITLE_INFO(owner)); PlayerTitleListDAO.removeTitle(owner.getObjectId(), titleId); } public int size() { return titles.size(); } public Collection getTitles() { return titles.values(); } }