/* * 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 . */ package com.l2jserver.gameserver.model; import java.util.logging.Logger; import com.l2jserver.gameserver.datatables.AccessLevels; /** * @author FBIagent
*/ public class L2AccessLevel { /** The logger
*/ private static Logger _log = Logger.getLogger( L2AccessLevel.class.getName() ); /** The access level
*/ private int _accessLevel = 0; /** The access level name
*/ private String _name = null; /** Child access levels */ L2AccessLevel[] _childsAccessLevel = null; /** Child access levels */ private String _childs = null; /** The name color for the access level
*/ private int _nameColor = 0; /** The title color for the access level
*/ private int _titleColor = 0; /** Flag to determine if the access level has gm access
*/ private boolean _isGm = false; /** Flag for peace zone attack */ private boolean _allowPeaceAttack = false; /** Flag for fixed res */ private boolean _allowFixedRes = false; /** Flag for transactions */ private boolean _allowTransaction = false; /** Flag for AltG commands */ private boolean _allowAltG = false; /** Flag to give damage */ private boolean _giveDamage = false; /** Flag to take aggro */ private boolean _takeAggro = false; /** Flag to gain exp in party */ private boolean _gainExp = false; /** * Initializes members

* * @param accessLevel as int
* @param name as String
* @param nameColor as int
* @param titleColor as int
* @param childs as String
* @param isGm as boolean
* @param allowPeaceAttack as boolean
* @param allowFixedRes as boolean
* @param allowTransaction as boolean
* @param allowAltG as boolean
* @param giveDamage as boolean
* @param takeAggro as boolean
* @param gainExp as boolean
*/ public L2AccessLevel(int accessLevel, String name, int nameColor, int titleColor, String childs, boolean isGm, boolean allowPeaceAttack, boolean allowFixedRes, boolean allowTransaction, boolean allowAltG, boolean giveDamage, boolean takeAggro, boolean gainExp) { _accessLevel = accessLevel; _name = name; _nameColor = nameColor; _titleColor = titleColor; _childs = childs; _isGm = isGm; _allowPeaceAttack = allowPeaceAttack; _allowFixedRes = allowFixedRes; _allowTransaction = allowTransaction; _allowAltG = allowAltG; _giveDamage = giveDamage; _takeAggro = takeAggro; _gainExp = gainExp; } /** * Returns the access level

* * @return int: access level
*/ public int getLevel() { return _accessLevel; } /** * Returns the access level name

* * @return String: access level name
*/ public String getName() { return _name; } /** * Returns the name color of the access level

* * @return int: the name color for the access level
*/ public int getNameColor() { return _nameColor; } /** * Returns the title color color of the access level

* * @return int: the title color for the access level
*/ public int getTitleColor() { return _titleColor; } /** * Retuns if the access level has gm access or not

* * @return boolean: true if access level have gm access, otherwise false
*/ public boolean isGm() { return _isGm; } /** * Returns if the access level is allowed to attack in peace zone or not

* * @return boolean: true if the access level is allowed to attack in peace zone, otherwise false
*/ public boolean allowPeaceAttack() { return _allowPeaceAttack; } /** * Retruns if the access level is allowed to use fixed res or not

* @return true if the access level is allowed to use fixed res, otherwise false
*/ public boolean allowFixedRes() { return _allowFixedRes; } /** * Returns if the access level is allowed to perform transactions or not

* * @return boolean: true if access level is allowed to perform transactions, otherwise false
*/ public boolean allowTransaction() { return _allowTransaction; } /** * Returns if the access level is allowed to use AltG commands or not

* * @return boolean: true if access level is allowed to use AltG commands, otherwise false
*/ public boolean allowAltG() { return _allowAltG; } /** * Returns if the access level can give damage or not

* * @return boolean: true if the access level can give damage, otherwise false
*/ public boolean canGiveDamage() { return _giveDamage; } /** * Returns if the access level can take aggro or not

* * @return boolean: true if the access level can take aggro, otherwise false
*/ public boolean canTakeAggro() { return _takeAggro; } /** * Returns if the access level can gain exp or not

* * @return boolean: true if the access level can gain exp, otherwise false
*/ public boolean canGainExp() { return _gainExp; } /** * Returns if the access level contains allowedAccess as child

* * @param accessLevel as AccessLevel

* * @return boolean: true if a child access level is equals to allowedAccess, otherwise false
*/ public boolean hasChildAccess(L2AccessLevel accessLevel) { if (_childsAccessLevel == null) { if (_childs == null) return false; setChildAccess(_childs); for (L2AccessLevel childAccess : _childsAccessLevel) { if (childAccess != null && (childAccess.getLevel() == accessLevel.getLevel() || childAccess.hasChildAccess(accessLevel))) return true; } } else { for (L2AccessLevel childAccess : _childsAccessLevel) { if (childAccess != null && (childAccess.getLevel() == accessLevel.getLevel() || childAccess.hasChildAccess(accessLevel))) return true; } } return false; } private void setChildAccess(String childs) { String[] childsSplit = childs.split(";"); _childsAccessLevel = new L2AccessLevel[childsSplit.length]; for (int i = 0;i < childsSplit.length;++ i) { L2AccessLevel accessLevelInst = AccessLevels.getInstance().getAccessLevel(Integer.parseInt(childsSplit[i])); if (accessLevelInst == null) { _log.warning("AccessLevel: Undefined child access level " + childsSplit[i]); continue; } if (accessLevelInst.hasChildAccess(this)) { _log.warning("AccessLevel: Child access tree overlapping for " + _name + " and " + accessLevelInst.getName()); continue; } _childsAccessLevel[i] = accessLevelInst; } } }