package com.aionemu.gameserver.model.account;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.aionemu.gameserver.model.gameobjects.Item;
import com.aionemu.gameserver.model.gameobjects.player.PlayerAppearance;
import com.aionemu.gameserver.model.gameobjects.player.PlayerCommonData;
import com.aionemu.gameserver.model.items.ItemSlot;
import com.aionemu.gameserver.model.team.legion.Legion;
import com.aionemu.gameserver.model.team.legion.LegionMember;
import com.aionemu.gameserver.model.templates.BoundRadius;
/**
* This class is holding information about player, that is displayed on char selection screen, such as: player commondata, player's appearance and
* creation/deletion time.
*
* @see PlayerCommonData
* @see PlayerAppearance
* @author Luno
*/
public class PlayerAccountData {
private final PlayerCommonData playerCommonData;
private PlayerAppearance appearance;
private CharacterBanInfo cbi;
private List<VisibleItem> visibleItems;
private Timestamp creationDate;
private Timestamp deletionDate;
private LegionMember legionMember;
public PlayerAccountData(PlayerCommonData playerCommonData, PlayerAppearance appearance) {
this(playerCommonData, appearance, null, Collections.emptyList(), null);
}
public PlayerAccountData(PlayerCommonData playerCommonData, PlayerAppearance appearance, CharacterBanInfo cbi, List<VisibleItem> visibleItems,
LegionMember legionMember) {
this.playerCommonData = playerCommonData;
this.appearance = appearance;
this.cbi = cbi;
this.legionMember = legionMember;
this.visibleItems = visibleItems;
updateBoundingRadius();
}
public CharacterBanInfo getCharBanInfo() {
return cbi;
}
public void setCharBanInfo(CharacterBanInfo cbi) {
this.cbi = cbi;
}
public Timestamp getCreationDate() {
return creationDate;
}
/**
* Sets deletion date.
*
* @param deletionDate
*/
public void setDeletionDate(Timestamp deletionDate) {
this.deletionDate = deletionDate;
}
/**
* Get deletion date.
*
* @return Timestamp date when char should be deleted.
*/
public Timestamp getDeletionDate() {
return deletionDate;
}
/**
* Get time in seconds when this player will be deleted ( 0 if player was not set to be deleted )
*
* @return deletion time in seconds
*/
public int getDeletionTimeInSeconds() {
return deletionDate == null ? 0 : (int) (deletionDate.getTime() / 1000);
}
/**
* @return the playerCommonData
*/
public PlayerCommonData getPlayerCommonData() {
return playerCommonData;
}
public PlayerAppearance getAppearance() {
return appearance;
}
public void setAppearance(PlayerAppearance appearance) {
this.appearance = appearance;
updateBoundingRadius();
}
public void updateBoundingRadius() {
playerCommonData.setBoundingRadius(new BoundRadius(0.25f, 0.25f, appearance.getBoundHeight()));
}
/**
* @param timestamp
*/
public void setCreationDate(Timestamp creationDate) {
this.creationDate = creationDate;
}
/**
* @return the legionMember
*/
public Legion getLegion() {
return legionMember.getLegion();
}
/**
* Returns true if player is a legion member
*
* @return true or false
*/
public boolean isLegionMember() {
return legionMember != null;
}
public List<VisibleItem> getVisibleItems() {
return visibleItems;
}
public void setVisibleItems(List<Item> equipment) {
List<VisibleItem> items = new ArrayList<>();
for (Item item : equipment) {
byte slotType = ItemSlot.getEquipmentSlotType(item.getEquipmentSlot());
if (slotType != 0)
items.add(new VisibleItem(slotType, item.getItemSkinTemplate().getTemplateId(), item.getGodStoneId(), item.getItemColor()));
}
this.visibleItems = items;
}
public record VisibleItem(byte slotType, int itemId, int godStoneId, Integer color) {}
}