/
com/planet_ink/coffee_mud/Abilities/Common/
com/planet_ink/coffee_mud/Abilities/Diseases/
com/planet_ink/coffee_mud/Abilities/Druid/
com/planet_ink/coffee_mud/Abilities/Fighter/
com/planet_ink/coffee_mud/Abilities/Languages/
com/planet_ink/coffee_mud/Abilities/Misc/
com/planet_ink/coffee_mud/Abilities/Prayers/
com/planet_ink/coffee_mud/Abilities/Properties/
com/planet_ink/coffee_mud/Abilities/Skills/
com/planet_ink/coffee_mud/Abilities/Songs/
com/planet_ink/coffee_mud/Abilities/Specializations/
com/planet_ink/coffee_mud/Abilities/Spells/
com/planet_ink/coffee_mud/Abilities/Thief/
com/planet_ink/coffee_mud/Abilities/Traps/
com/planet_ink/coffee_mud/Behaviors/
com/planet_ink/coffee_mud/CharClasses/
com/planet_ink/coffee_mud/CharClasses/interfaces/
com/planet_ink/coffee_mud/Commands/
com/planet_ink/coffee_mud/Commands/interfaces/
com/planet_ink/coffee_mud/Common/
com/planet_ink/coffee_mud/Common/interfaces/
com/planet_ink/coffee_mud/Exits/interfaces/
com/planet_ink/coffee_mud/Items/Armor/
com/planet_ink/coffee_mud/Items/Basic/
com/planet_ink/coffee_mud/Items/BasicTech/
com/planet_ink/coffee_mud/Items/CompTech/
com/planet_ink/coffee_mud/Items/MiscMagic/
com/planet_ink/coffee_mud/Items/Weapons/
com/planet_ink/coffee_mud/Items/interfaces/
com/planet_ink/coffee_mud/Libraries/
com/planet_ink/coffee_mud/Libraries/interfaces/
com/planet_ink/coffee_mud/Locales/
com/planet_ink/coffee_mud/MOBS/
com/planet_ink/coffee_mud/Races/
com/planet_ink/coffee_mud/Races/interfaces/
com/planet_ink/coffee_mud/WebMacros/
com/planet_ink/coffee_mud/WebMacros/interfaces/
com/planet_ink/coffee_mud/core/
com/planet_ink/coffee_mud/core/collections/
com/planet_ink/coffee_mud/core/interfaces/
com/planet_ink/coffee_mud/core/intermud/
com/planet_ink/coffee_mud/core/intermud/i3/
com/planet_ink/coffee_web/server/
com/planet_ink/siplet/applet/
lib/
resources/factions/
resources/fakedb/
resources/progs/autoplayer/
resources/quests/holidays/
web/
web/admin.templates/
web/admin/grinder/
web/admin/images/
web/clan.templates/
web/pub.templates/
web/pub/images/mxp/
web/pub/sounds/
web/pub/textedit/
package com.planet_ink.coffee_mud.Common.interfaces;

import java.util.Enumeration;
import java.util.List;
import java.util.Vector;

import com.planet_ink.coffee_mud.Libraries.interfaces.AchievementLibrary.Award;
import com.planet_ink.coffee_mud.Libraries.interfaces.PlayerLibrary;
import com.planet_ink.coffee_mud.MOBS.interfaces.MOB;
import com.planet_ink.coffee_mud.core.CMParms;
import com.planet_ink.coffee_mud.core.interfaces.Modifiable;
import com.planet_ink.coffee_mud.core.interfaces.Tattooable;

/**
 * An interface for a base player account.  If this system is enabled, this
 * represents essentially a "container" for various characters, who
 * share a login and potentially an expiration date.
 */
public interface PlayerAccount extends CMCommon, AccountStats, Modifiable, Tattooable
{
	/**
	 * Return an enumeration of the fully loaded players
	 * that belong to this account.
	 * @return an enumeration of player mob objects
	 */
	public Enumeration<MOB> getLoadPlayers();

	/**
	 * Return an enumeration of the semi-loaded players
	 * that belong to this account.
	 * @return an enumeration of thinplayer objects
	 */
	public Enumeration<PlayerLibrary.ThinPlayer> getThinPlayers();

	/**
	 * Returns the number of players this account currently
	 * has listed.
	 * @return the number of players
	 */
	public int numPlayers();

	/**
	 * Return an enumeration of the players names
	 * that belong to this account.
	 * @return an enumeration of player names
	 */
	public Enumeration<String> getPlayers();

	/**
	 * Adds a new player to this account.
	 * @param mob the new player to add.
	 */
	public void addNewPlayer(MOB mob);

	/**
	 * Removes a player from this account.
	 * This is typically a precursor to deleting the player.
	 * @param mob the player to delete.
	 */
	public void delPlayer(MOB mob);

	/**
	 * Removes a player of this name from this account.
	 * @param name the name of the player to remove.
	 */
	public void delPlayer(String name);

	/**
	 * Retrieves a fake account mob, for forum and
	 * other access systems not directly relayed to gameplay.
	 * @return mob the fake player.
	 */
	public MOB getAccountMob();

	/**
	 * Returns the real name if the player is on this account
	 * @param name the name look for check
	 * @return real name if it exists and null otherwise
	 */
	public String findPlayer(String name);

	/**
	 * Returns this accounts name
	 * @return this accounts name
	 */
	public String getAccountName();

	/**
	 * Sets this accounts unique name
	 * @param name the accounts name
	 */
	public void setAccountName(String name);

	/**
	 * Sets the names of all the players that belong to this account
	 * @param names the names of the players
	 */
	public void setPlayerNames(List<String> names);

	/**
	 * Checks whether the given string flag is set for this account.
	 * @see com.planet_ink.coffee_mud.Common.interfaces.PlayerAccount#setFlag(AccountFlag, boolean)
	 * @param flag the flag name
	 * @return true if it is set, false if not
	 */
	public boolean isSet(AccountFlag flag);

	/**
	 * Sets or unsets an account-wide flag.
	 * @see com.planet_ink.coffee_mud.Common.interfaces.PlayerAccount#isSet(AccountFlag)
	 * @param flag the flag name
	 * @param setOrUnset true to set it, false to unset
	 */
	public void setFlag(AccountFlag flag, boolean setOrUnset);

	/**
	 * Returns the number of bonus characters online available to
	 * this account.
	 *
	 * @see PlayerAccount#setBonusCharsOnlineLimit(int)
	 *
	 * @return the number of bonus chars online
	 */
	public int getBonusCharsOnlineLimit();

	/**
	 * Sets the number of bonus characters online available to
	 * this account.
	 *
	 * @see PlayerAccount#getBonusCharsOnlineLimit()
	 *
	 * @param bonus the number of bonus chars online
	 */
	public void setBonusCharsOnlineLimit(int bonus);

	/**
	 * Returns the number of bonus characters available to
	 * this account.
	 *
	 * @see PlayerAccount#setBonusCharsLimit(int)
	 *
	 * @return the number of bonus chars
	 */
	public int getBonusCharsLimit();

	/**
	 * Sets the number of bonus characters available to
	 * this account.
	 *
	 * @see PlayerAccount#getBonusCharsLimit()
	 *
	 * @param bonus the number of bonus chars
	 */
	public void setBonusCharsLimit(int bonus);

	/**
	 * Populates this account object with all the data
	 * from the given one, replacing any existing internal
	 * data.
	 * @param otherAccount the data to copy from.
	 */
	public void copyInto(PlayerAccount otherAccount);

	/**
	 * Various account-level flags
	 * @author Bo Zimmerman
	 *
	 */
	public enum AccountFlag
	{
		/** Constant for account flags that overrides number of characters limitation */
		NUMCHARSOVERRIDE,
		/** Constant for account flags that overrides account expiration */
		NOEXPIRE,
		/** Constant for account flags that overrides account expiration */
		CANEXPORT,
		/** Constant for account flags that overrides account expiration */
		MAXCONNSOVERRIDE,
		/** Constant for account flags that overrides account expiration */
		ANSI,
		/** Constant for account flags that overrides account expiration */
		ACCOUNTMENUSOFF,
		/** Constant for account flags that turns off email forwarding all chars */
		NOAUTOFORWARD,
		/** Constant for account flags that turns off pride stats for the account */
		NOSTATS,
		/** Constant for account flags that turns off top awards for the account */
		NOTOP,
		/** Constant for account flags that require 16 color ansi instead of 256 */
		ANSI16,
		;
		/**
		 * Returns a comma-delimited list of strings representing the accountflag values
		 * @return a comma-delimited list of strings representing the accountflag values
		 */
		public static String getListString()
		{
			return CMParms.toListString(AccountFlag.values());
		}
	}
}