Sync with L2jServer HighFive Oct 22nd 2015.
This commit is contained in:
@ -25,19 +25,19 @@ import com.l2jserver.gameserver.data.xml.impl.AdminData;
|
||||
*/
|
||||
public class L2AccessLevel
|
||||
{
|
||||
/** The access level<br> */
|
||||
/** The access level. */
|
||||
private int _accessLevel = 0;
|
||||
/** The access level name<br> */
|
||||
/** The access level name. */
|
||||
private String _name = null;
|
||||
/** Child access levels */
|
||||
L2AccessLevel _childsAccessLevel = null;
|
||||
/** Child access levels */
|
||||
/** Child access levels. */
|
||||
private L2AccessLevel _childsAccessLevel = null;
|
||||
/** Child access levels. */
|
||||
private int _child = 0;
|
||||
/** The name color for the access level<br> */
|
||||
/** The name color for the access level. */
|
||||
private int _nameColor = 0;
|
||||
/** The title color for the access level<br> */
|
||||
/** The title color for the access level. */
|
||||
private int _titleColor = 0;
|
||||
/** Flag to determine if the access level has gm access<br> */
|
||||
/** Flag to determine if the access level has GM access. */
|
||||
private boolean _isGm = false;
|
||||
/** Flag for peace zone attack */
|
||||
private boolean _allowPeaceAttack = false;
|
||||
@ -89,9 +89,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the access level<br>
|
||||
* <br>
|
||||
* @return int: access level<br>
|
||||
* Gets the access level.
|
||||
* @return the access level
|
||||
*/
|
||||
public int getLevel()
|
||||
{
|
||||
@ -99,9 +98,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the access level name<br>
|
||||
* <br>
|
||||
* @return String: access level name<br>
|
||||
* Gets the access level name.
|
||||
* @return the access level name
|
||||
*/
|
||||
public String getName()
|
||||
{
|
||||
@ -109,9 +107,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name color of the access level<br>
|
||||
* <br>
|
||||
* @return int: the name color for the access level<br>
|
||||
* Gets the name color of the access level.
|
||||
* @return the name color for the access level
|
||||
*/
|
||||
public int getNameColor()
|
||||
{
|
||||
@ -119,9 +116,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the title color color of the access level<br>
|
||||
* <br>
|
||||
* @return int: the title color for the access level<br>
|
||||
* Gets the title color color of the access level.
|
||||
* @return the title color for the access level
|
||||
*/
|
||||
public int getTitleColor()
|
||||
{
|
||||
@ -129,9 +125,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Retuns if the access level has gm access or not<br>
|
||||
* <br>
|
||||
* @return boolean: true if access level have gm access, otherwise false<br>
|
||||
* Verifies if the access level has GM access or not.
|
||||
* @return {@code true} if access level have GM access, otherwise {@code false}
|
||||
*/
|
||||
public boolean isGm()
|
||||
{
|
||||
@ -139,9 +134,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the access level is allowed to attack in peace zone or not<br>
|
||||
* <br>
|
||||
* @return boolean: true if the access level is allowed to attack in peace zone, otherwise false<br>
|
||||
* Verifies if the access level is allowed to attack in peace zone or not.
|
||||
* @return {@code true} if the access level is allowed to attack in peace zone, otherwise {@code false}
|
||||
*/
|
||||
public boolean allowPeaceAttack()
|
||||
{
|
||||
@ -149,9 +143,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Retruns if the access level is allowed to use fixed res or not<br>
|
||||
* <br>
|
||||
* @return true if the access level is allowed to use fixed res, otherwise false<br>
|
||||
* Verifies if the access level is allowed to use fixed resurrection or not.
|
||||
* @return {@ode true} if the access level is allowed to use fixed resurrection, otherwise {@code false}
|
||||
*/
|
||||
public boolean allowFixedRes()
|
||||
{
|
||||
@ -159,9 +152,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the access level is allowed to perform transactions or not<br>
|
||||
* <br>
|
||||
* @return boolean: true if access level is allowed to perform transactions, otherwise false<br>
|
||||
* Verifies if the access level is allowed to perform transactions or not.
|
||||
* @return {@ode true} if access level is allowed to perform transactions, otherwise {@code false}
|
||||
*/
|
||||
public boolean allowTransaction()
|
||||
{
|
||||
@ -169,9 +161,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the access level is allowed to use AltG commands or not<br>
|
||||
* <br>
|
||||
* @return boolean: true if access level is allowed to use AltG commands, otherwise false<br>
|
||||
* Verifies if the access level is allowed to use AltG commands or not.
|
||||
* @return {@ode true} if access level is allowed to use AltG commands, otherwise {@code false}
|
||||
*/
|
||||
public boolean allowAltG()
|
||||
{
|
||||
@ -179,9 +170,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the access level can give damage or not<br>
|
||||
* <br>
|
||||
* @return boolean: true if the access level can give damage, otherwise false<br>
|
||||
* Verifies if the access level can give damage or not.
|
||||
* @return {@ode true} if the access level can give damage, otherwise {@code false}
|
||||
*/
|
||||
public boolean canGiveDamage()
|
||||
{
|
||||
@ -189,9 +179,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the access level can take aggro or not<br>
|
||||
* <br>
|
||||
* @return boolean: true if the access level can take aggro, otherwise false<br>
|
||||
* Verifies if the access level can take aggro or not.
|
||||
* @return {@ode true} if the access level can take aggro, otherwise {@code false}
|
||||
*/
|
||||
public boolean canTakeAggro()
|
||||
{
|
||||
@ -199,9 +188,8 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the access level can gain exp or not<br>
|
||||
* <br>
|
||||
* @return boolean: true if the access level can gain exp, otherwise false<br>
|
||||
* Verifies if the access level can gain exp or not.
|
||||
* @return {@ode true} if the access level can gain exp, otherwise {@code false}
|
||||
*/
|
||||
public boolean canGainExp()
|
||||
{
|
||||
@ -209,9 +197,9 @@ public class L2AccessLevel
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns if the access level contains allowedAccess as child<br>
|
||||
* @param accessLevel as AccessLevel<br>
|
||||
* @return boolean: true if a child access level is equals to allowedAccess, otherwise false<br>
|
||||
* Returns if the access level contains allowedAccess as child.
|
||||
* @param accessLevel the parent access level
|
||||
* @return {@ode true} if a child access level is equals to allowedAccess, otherwise {@code false}
|
||||
*/
|
||||
public boolean hasChildAccess(L2AccessLevel accessLevel)
|
||||
{
|
||||
|
@ -1156,6 +1156,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
player.updatePvPStatus(target);
|
||||
}
|
||||
}
|
||||
|
||||
// Check if hit isn't missed
|
||||
if (!hitted)
|
||||
{
|
||||
@ -1192,7 +1193,9 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
// Notify AI with EVT_READY_TO_ACT
|
||||
ThreadPoolManager.getInstance().scheduleAi(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), timeAtk + reuse);
|
||||
// Old method - use in case of bow reuse issues occur.
|
||||
// ThreadPoolManager.getInstance().scheduleAi(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), timeAtk + reuse);
|
||||
ThreadPoolManager.getInstance().scheduleAi(new NotifyAITask(this, CtrlEvent.EVT_READY_TO_ACT), timeAtk);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@ -2636,6 +2639,8 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
{
|
||||
if (_ai == null)
|
||||
{
|
||||
// Return the new AI within the synchronized block
|
||||
// to avoid being nulled by other threads
|
||||
return _ai = initAI();
|
||||
}
|
||||
}
|
||||
@ -2655,7 +2660,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
|
||||
public void setAI(L2CharacterAI newAI)
|
||||
{
|
||||
L2CharacterAI oldAI = _ai;
|
||||
final L2CharacterAI oldAI = _ai;
|
||||
if ((oldAI != null) && (oldAI != newAI) && (oldAI instanceof L2AttackableAI))
|
||||
{
|
||||
oldAI.stopAITask();
|
||||
@ -5330,19 +5335,28 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
|
||||
public int calculateReuseTime(L2Character target, L2Weapon weapon)
|
||||
{
|
||||
if ((weapon == null) || isTransformed())
|
||||
if (isTransformed())
|
||||
{
|
||||
switch (getAttackType())
|
||||
{
|
||||
case BOW:
|
||||
case CROSSBOW:
|
||||
return (int) ((517500 * getStat().getWeaponReuseModifier(null)) / getStat().getPAtkSpd());
|
||||
}
|
||||
}
|
||||
if ((weapon == null))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int reuse = weapon.getReuseDelay();
|
||||
|
||||
// only bows should continue for now
|
||||
if (reuse == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
reuse *= getStat().getWeaponReuseModifier(target);
|
||||
reuse *= getStat().getWeaponReuseModifier(null);
|
||||
double atkSpd = getStat().getPAtkSpd();
|
||||
switch (weapon.getItemType())
|
||||
{
|
||||
@ -6818,7 +6832,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link L2PcInstance}
|
||||
* Dummy method overridden in {@link L2PcInstance}
|
||||
* @return {@code true} if current player can revive and shows 'To Village' button upon death, {@code false} otherwise.
|
||||
*/
|
||||
public boolean canRevive()
|
||||
@ -6827,7 +6841,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link L2PcInstance}
|
||||
* Dummy method overridden in {@link L2PcInstance}
|
||||
* @param val
|
||||
*/
|
||||
public void setCanRevive(boolean val)
|
||||
@ -6835,7 +6849,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link L2Attackable}
|
||||
* Dummy method overridden in {@link L2Attackable}
|
||||
* @return {@code true} if there is a loot to sweep, {@code false} otherwise.
|
||||
*/
|
||||
public boolean isSweepActive()
|
||||
@ -6844,7 +6858,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link L2PcInstance}
|
||||
* Dummy method overridden in {@link L2PcInstance}
|
||||
* @return {@code true} if player is on event, {@code false} otherwise.
|
||||
*/
|
||||
public boolean isOnEvent()
|
||||
@ -6853,7 +6867,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link L2PcInstance}
|
||||
* Dummy method overridden in {@link L2PcInstance}
|
||||
* @return the clan id of current character.
|
||||
*/
|
||||
public int getClanId()
|
||||
@ -6862,7 +6876,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link L2PcInstance}
|
||||
* Dummy method overridden in {@link L2PcInstance}
|
||||
* @return the clan of current character.
|
||||
*/
|
||||
public L2Clan getClan()
|
||||
@ -6871,7 +6885,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link L2PcInstance}
|
||||
* Dummy method overridden in {@link L2PcInstance}
|
||||
* @return {@code true} if player is in academy, {@code false} otherwise.
|
||||
*/
|
||||
public boolean isAcademyMember()
|
||||
@ -6880,7 +6894,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link L2PcInstance}
|
||||
* Dummy method overridden in {@link L2PcInstance}
|
||||
* @return the pledge type of current character.
|
||||
*/
|
||||
public int getPledgeType()
|
||||
@ -6889,7 +6903,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy method overriden in {@link L2PcInstance}
|
||||
* Dummy method overridden in {@link L2PcInstance}
|
||||
* @return the alliance id of current character.
|
||||
*/
|
||||
public int getAllyId()
|
||||
|
@ -191,23 +191,13 @@ public class L2Npc extends L2Character
|
||||
return getTemplate().getSpiritShotChance();
|
||||
}
|
||||
|
||||
public int getMinSkillChance()
|
||||
{
|
||||
return getTemplate().getMinSkillChance();
|
||||
}
|
||||
|
||||
public int getMaxSkillChance()
|
||||
{
|
||||
return getTemplate().getMaxSkillChance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies if the NPC can cast a skill given the minimum and maximum skill chances.
|
||||
* @return {@code true} if the NPC has chances of casting a skill
|
||||
*/
|
||||
public boolean hasSkillChance()
|
||||
{
|
||||
return Rnd.get(100) < Rnd.get(getMinSkillChance(), getMaxSkillChance());
|
||||
return Rnd.get(100) < Rnd.get(getTemplate().getMinSkillChance(), getTemplate().getMaxSkillChance());
|
||||
}
|
||||
|
||||
public boolean canMove()
|
||||
|
@ -78,9 +78,6 @@ public class L2MonsterInstance extends L2Attackable
|
||||
return super.isAutoAttackable(attacker) && !isEventMob();
|
||||
}
|
||||
|
||||
/**
|
||||
* Return True if the L2MonsterInstance is Aggressive (aggroRange > 0).
|
||||
*/
|
||||
@Override
|
||||
public boolean isAggressive()
|
||||
{
|
||||
|
@ -7027,38 +7027,38 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
// Retrieve the L2PcInstance from the characters table of the database
|
||||
ps.setInt(1, objectId);
|
||||
try (ResultSet rs = ps.executeQuery())
|
||||
try (ResultSet rset = ps.executeQuery())
|
||||
{
|
||||
if (rs.next())
|
||||
if (rset.next())
|
||||
{
|
||||
final int activeClassId = rs.getInt("classid");
|
||||
final boolean female = rs.getInt("sex") != Sex.MALE.ordinal();
|
||||
final int activeClassId = rset.getInt("classid");
|
||||
final boolean female = rset.getInt("sex") != Sex.MALE.ordinal();
|
||||
final L2PcTemplate template = PlayerTemplateData.getInstance().getTemplate(activeClassId);
|
||||
PcAppearance app = new PcAppearance(rs.getByte("face"), rs.getByte("hairColor"), rs.getByte("hairStyle"), female);
|
||||
PcAppearance app = new PcAppearance(rset.getByte("face"), rset.getByte("hairColor"), rset.getByte("hairStyle"), female);
|
||||
|
||||
player = new L2PcInstance(objectId, template, rs.getString("account_name"), app);
|
||||
player.setName(rs.getString("char_name"));
|
||||
restorePremiumSystemData(player, rs.getString("account_name"));
|
||||
player._lastAccess = rs.getLong("lastAccess");
|
||||
player = new L2PcInstance(objectId, template, rset.getString("account_name"), app);
|
||||
player.setName(rset.getString("char_name"));
|
||||
restorePremiumSystemData(player, rset.getString("account_name"));
|
||||
player._lastAccess = rset.getLong("lastAccess");
|
||||
|
||||
player.getStat().setExp(rs.getLong("exp"));
|
||||
player.setExpBeforeDeath(rs.getLong("expBeforeDeath"));
|
||||
player.getStat().setLevel(rs.getByte("level"));
|
||||
player.getStat().setSp(rs.getLong("sp"));
|
||||
player.getStat().setExp(rset.getLong("exp"));
|
||||
player.setExpBeforeDeath(rset.getLong("expBeforeDeath"));
|
||||
player.getStat().setLevel(rset.getByte("level"));
|
||||
player.getStat().setSp(rset.getLong("sp"));
|
||||
|
||||
player.setWantsPeace(rs.getInt("wantspeace"));
|
||||
player.setWantsPeace(rset.getInt("wantspeace"));
|
||||
|
||||
player.setHeading(rs.getInt("heading"));
|
||||
player.setHeading(rset.getInt("heading"));
|
||||
|
||||
player.setReputation(rs.getInt("reputation"));
|
||||
player.setFame(rs.getInt("fame"));
|
||||
player.setRaidPoints(rs.getInt("raidpoints"));
|
||||
player.setPvpKills(rs.getInt("pvpkills"));
|
||||
player.setPkKills(rs.getInt("pkkills"));
|
||||
player.setOnlineTime(rs.getLong("onlinetime"));
|
||||
player.setNoble(rs.getInt("nobless") == 1);
|
||||
player.setReputation(rset.getInt("reputation"));
|
||||
player.setFame(rset.getInt("fame"));
|
||||
player.setRaidPoints(rset.getInt("raidpoints"));
|
||||
player.setPvpKills(rset.getInt("pvpkills"));
|
||||
player.setPkKills(rset.getInt("pkkills"));
|
||||
player.setOnlineTime(rset.getLong("onlinetime"));
|
||||
player.setNoble(rset.getInt("nobless") == 1);
|
||||
|
||||
final int factionId = rs.getInt("faction");
|
||||
final int factionId = rset.getInt("faction");
|
||||
if (factionId == 1)
|
||||
{
|
||||
player.setGood();
|
||||
@ -7068,25 +7068,100 @@ public final class L2PcInstance extends L2Playable
|
||||
player.setEvil();
|
||||
}
|
||||
|
||||
player.setClanJoinExpiryTime(rs.getLong("clan_join_expiry_time"));
|
||||
player.setClanJoinExpiryTime(rset.getLong("clan_join_expiry_time"));
|
||||
if (player.getClanJoinExpiryTime() < System.currentTimeMillis())
|
||||
{
|
||||
player.setClanJoinExpiryTime(0);
|
||||
}
|
||||
player.setClanCreateExpiryTime(rs.getLong("clan_create_expiry_time"));
|
||||
player.setClanCreateExpiryTime(rset.getLong("clan_create_expiry_time"));
|
||||
if (player.getClanCreateExpiryTime() < System.currentTimeMillis())
|
||||
{
|
||||
player.setClanCreateExpiryTime(0);
|
||||
}
|
||||
|
||||
int clanId = rs.getInt("clanid");
|
||||
player.setPowerGrade(rs.getInt("power_grade"));
|
||||
player.setPledgeType(rs.getInt("subpledge"));
|
||||
player.setPowerGrade(rset.getInt("power_grade"));
|
||||
player.setPledgeType(rset.getInt("subpledge"));
|
||||
// player.setApprentice(rs.getInt("apprentice"));
|
||||
|
||||
player.setDeleteTimer(rset.getLong("deletetime"));
|
||||
player.setTitle(rset.getString("title"));
|
||||
player.setAccessLevel(rset.getInt("accesslevel"), false);
|
||||
int titleColor = rset.getInt("title_color");
|
||||
if (titleColor != PcAppearance.DEFAULT_TITLE_COLOR)
|
||||
{
|
||||
player.getAppearance().setTitleColor(titleColor);
|
||||
}
|
||||
player.setFistsWeaponItem(player.findFistsWeaponItem(activeClassId));
|
||||
player.setUptime(System.currentTimeMillis());
|
||||
|
||||
currentHp = rset.getDouble("curHp");
|
||||
currentCp = rset.getDouble("curCp");
|
||||
currentMp = rset.getDouble("curMp");
|
||||
|
||||
player._classIndex = 0;
|
||||
try
|
||||
{
|
||||
player.setBaseClass(rset.getInt("base_class"));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// TODO: Should this be logged?
|
||||
player.setBaseClass(activeClassId);
|
||||
}
|
||||
|
||||
// Restore Subclass Data (cannot be done earlier in function)
|
||||
if (restoreSubClassData(player))
|
||||
{
|
||||
if (activeClassId != player.getBaseClass())
|
||||
{
|
||||
for (SubClass subClass : player.getSubClasses().values())
|
||||
{
|
||||
if (subClass.getClassId() == activeClassId)
|
||||
{
|
||||
player._classIndex = subClass.getClassIndex();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((player.getClassIndex() == 0) && (activeClassId != player.getBaseClass()))
|
||||
{
|
||||
// Subclass in use but doesn't exist in DB -
|
||||
// a possible restart-while-modifysubclass cheat has been attempted.
|
||||
// Switching to use base class
|
||||
player.setClassId(player.getBaseClass());
|
||||
_log.warning("Player " + player.getName() + " reverted to base class. Possibly has tried a relogin exploit while subclassing.");
|
||||
}
|
||||
else
|
||||
{
|
||||
player._activeClass = activeClassId;
|
||||
}
|
||||
|
||||
player.setApprentice(rset.getInt("apprentice"));
|
||||
player.setSponsor(rset.getInt("sponsor"));
|
||||
player.setLvlJoinedAcademy(rset.getInt("lvl_joined_academy"));
|
||||
|
||||
CursedWeaponsManager.getInstance().checkPlayer(player);
|
||||
|
||||
// Set the x,y,z position of the L2PcInstance and make it invisible
|
||||
player.setXYZInvisible(rset.getInt("x"), rset.getInt("y"), rset.getInt("z"));
|
||||
|
||||
// Set Teleport Bookmark Slot
|
||||
player.setBookMarkSlot(rset.getInt("BookmarkSlot"));
|
||||
|
||||
player._vitalityPoints = rset.getInt("vitality_points");
|
||||
|
||||
player.setPcBangPoints(rset.getInt("pccafe_points"));
|
||||
|
||||
// character creation Time
|
||||
player.getCreateDate().setTimeInMillis(rset.getTimestamp("createDate").getTime());
|
||||
|
||||
// Language
|
||||
player.setLang(rset.getString("language"));
|
||||
|
||||
// Set Hero status if it applies
|
||||
player.setHero(Hero.getInstance().isHero(objectId));
|
||||
|
||||
int clanId = rset.getInt("clanid");
|
||||
if (clanId > 0)
|
||||
{
|
||||
player.setClan(ClanTable.getInstance().getClan(clanId));
|
||||
@ -7124,81 +7199,6 @@ public final class L2PcInstance extends L2Playable
|
||||
player.getClanPrivileges().clear();
|
||||
}
|
||||
|
||||
player.setDeleteTimer(rs.getLong("deletetime"));
|
||||
player.setTitle(rs.getString("title"));
|
||||
player.setAccessLevel(rs.getInt("accesslevel"), false);
|
||||
int titleColor = rs.getInt("title_color");
|
||||
if (titleColor != PcAppearance.DEFAULT_TITLE_COLOR)
|
||||
{
|
||||
player.getAppearance().setTitleColor(titleColor);
|
||||
}
|
||||
player.setFistsWeaponItem(player.findFistsWeaponItem(activeClassId));
|
||||
player.setUptime(System.currentTimeMillis());
|
||||
|
||||
currentHp = rs.getDouble("curHp");
|
||||
currentCp = rs.getDouble("curCp");
|
||||
currentMp = rs.getDouble("curMp");
|
||||
|
||||
player._classIndex = 0;
|
||||
try
|
||||
{
|
||||
player.setBaseClass(rs.getInt("base_class"));
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// TODO: Should this be logged?
|
||||
player.setBaseClass(activeClassId);
|
||||
}
|
||||
|
||||
// Restore Subclass Data (cannot be done earlier in function)
|
||||
if (restoreSubClassData(player))
|
||||
{
|
||||
if (activeClassId != player.getBaseClass())
|
||||
{
|
||||
for (SubClass subClass : player.getSubClasses().values())
|
||||
{
|
||||
if (subClass.getClassId() == activeClassId)
|
||||
{
|
||||
player._classIndex = subClass.getClassIndex();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((player.getClassIndex() == 0) && (activeClassId != player.getBaseClass()))
|
||||
{
|
||||
// Subclass in use but doesn't exist in DB -
|
||||
// a possible restart-while-modifysubclass cheat has been attempted.
|
||||
// Switching to use base class
|
||||
player.setClassId(player.getBaseClass());
|
||||
_log.warning("Player " + player.getName() + " reverted to base class. Possibly has tried a relogin exploit while subclassing.");
|
||||
}
|
||||
else
|
||||
{
|
||||
player._activeClass = activeClassId;
|
||||
}
|
||||
|
||||
player.setApprentice(rs.getInt("apprentice"));
|
||||
player.setSponsor(rs.getInt("sponsor"));
|
||||
player.setLvlJoinedAcademy(rs.getInt("lvl_joined_academy"));
|
||||
|
||||
CursedWeaponsManager.getInstance().checkPlayer(player);
|
||||
|
||||
// Set the x,y,z position of the L2PcInstance and make it invisible
|
||||
player.setXYZInvisible(rs.getInt("x"), rs.getInt("y"), rs.getInt("z"));
|
||||
|
||||
// Set Teleport Bookmark Slot
|
||||
player.setBookMarkSlot(rs.getInt("BookmarkSlot"));
|
||||
|
||||
player._vitalityPoints = rs.getInt("vitality_points");
|
||||
|
||||
player.setPcBangPoints(rs.getInt("pccafe_points"));
|
||||
|
||||
// character creation Time
|
||||
player.getCreateDate().setTimeInMillis(rs.getTimestamp("createDate").getTime());
|
||||
|
||||
// Language
|
||||
player.setLang(rs.getString("language"));
|
||||
|
||||
// Retrieve the name and ID of the other characters assigned to this account.
|
||||
try (PreparedStatement stmt = con.prepareStatement("SELECT charId, char_name FROM characters WHERE account_name=? AND charId<>?"))
|
||||
{
|
||||
@ -8939,17 +8939,12 @@ public final class L2PcInstance extends L2Playable
|
||||
// Are the target and the player in the same duel?
|
||||
if (isInDuel())
|
||||
{
|
||||
// Get L2PcInstance
|
||||
if (target instanceof L2Playable)
|
||||
final L2PcInstance cha = target.getActingPlayer();
|
||||
if ((cha != null) && (cha.getDuelId() != getDuelId()))
|
||||
{
|
||||
// Get L2PcInstance
|
||||
L2PcInstance cha = target.getActingPlayer();
|
||||
if (cha.getDuelId() != getDuelId())
|
||||
{
|
||||
sendMessage("You cannot do this while duelling.");
|
||||
sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return false;
|
||||
}
|
||||
sendMessage("You cannot do this while duelling.");
|
||||
sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -9119,13 +9114,13 @@ public final class L2PcInstance extends L2Playable
|
||||
case SELF:
|
||||
break;
|
||||
default:
|
||||
if (!checkPvpSkill(target, skill) && !getAccessLevel().allowPeaceAttack() && target.isPlayable())
|
||||
// Verify that player can attack a player or summon
|
||||
if (target.isPlayable() && !getAccessLevel().allowPeaceAttack() && !checkPvpSkill(target, skill))
|
||||
{
|
||||
|
||||
// Send a System Message to the L2PcInstance
|
||||
// Send a System Message to the player
|
||||
sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET);
|
||||
|
||||
// Send a Server->Client packet ActionFailed to the L2PcInstance
|
||||
// Send a Server->Client packet ActionFailed to the player
|
||||
sendPacket(ActionFailed.STATIC_PACKET);
|
||||
return false;
|
||||
}
|
||||
@ -9192,7 +9187,7 @@ public final class L2PcInstance extends L2Playable
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!(target instanceof L2Playable))
|
||||
if (!target.isPlayable())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@ -9243,7 +9238,6 @@ public final class L2PcInstance extends L2Playable
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
final boolean isCtrlPressed = (getCurrentSkill() != null) && getCurrentSkill().isCtrlPressed();
|
||||
@ -9289,18 +9283,19 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
if (aClan.isAtWarWith(tClan.getId()) && tClan.isAtWarWith(aClan.getId()))
|
||||
{
|
||||
// Check if skill can do dmg
|
||||
return true; // Always return true at war.
|
||||
// Check if skill can do damage
|
||||
if ((skill.isAOE() && (skill.getEffectRange() > 0)) && isCtrlPressed && (getTarget() == target))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return isCtrlPressed;
|
||||
}
|
||||
else if ((getClanId() == targetPlayer.getClanId()) || ((getAllyId() > 0) && (getAllyId() == targetPlayer.getAllyId())))
|
||||
{
|
||||
// Check if skill can do dmg
|
||||
if ((skill.getEffectRange() > 0) && isCtrlPressed && (getTarget() == target))
|
||||
// Check if skill can do damage
|
||||
if ((skill.getEffectRange() > 0) && isCtrlPressed && (getTarget() == target) && skill.isDamage())
|
||||
{
|
||||
if (skill.isDamage())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -9317,15 +9312,12 @@ public final class L2PcInstance extends L2Playable
|
||||
}
|
||||
|
||||
// On retail, it is impossible to debuff a "peaceful" player.
|
||||
if ((targetPlayer.getPvpFlag() == 0) && (targetPlayer.getReputation() >= 0))
|
||||
if ((targetPlayer.getPvpFlag() == 0) && (targetPlayer.getReputation() > 0))
|
||||
{
|
||||
// Check if skill can do dmg
|
||||
if ((skill.getEffectRange() > 0) && isCtrlPressed && (getTarget() == target))
|
||||
// Check if skill can do damage
|
||||
if ((skill.getEffectRange() > 0) && isCtrlPressed && (getTarget() == target) && skill.isDamage())
|
||||
{
|
||||
if (skill.isDamage())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -43,6 +43,7 @@ public enum L2EffectType
|
||||
HEAL,
|
||||
HP_DRAIN,
|
||||
MAGICAL_ATTACK,
|
||||
MAGICAL_ATTACK_MP,
|
||||
MANAHEAL_BY_LEVEL,
|
||||
MANAHEAL_PERCENT,
|
||||
MUTE,
|
||||
|
@ -1504,7 +1504,7 @@ public class Quest extends AbstractScript implements IIdentifiable
|
||||
{
|
||||
showHtmlFile(player, res, npc);
|
||||
}
|
||||
else if (res.startsWith("<html>"))
|
||||
else if (res.startsWith("<html"))
|
||||
{
|
||||
final NpcHtmlMessage npcReply = new NpcHtmlMessage(npc != null ? npc.getObjectId() : 0, res);
|
||||
npcReply.replace("%playername%", player.getName());
|
||||
|
@ -91,6 +91,7 @@ public enum AbnormalType
|
||||
CRITICAL_PROB_UP,
|
||||
CURSE_LIFE_FLOW,
|
||||
DAMAGE_AMPLIFY,
|
||||
DANCE_DEFENCE_MOTION1,
|
||||
DANCE_OF_ALIGNMENT,
|
||||
DANCE_OF_AQUA_GUARD,
|
||||
DANCE_OF_BERSERKER,
|
||||
@ -122,6 +123,7 @@ public enum AbnormalType
|
||||
DMG_SHIELD,
|
||||
DOT_ATTR,
|
||||
DOT_MP,
|
||||
DRAGON_BUFF,
|
||||
DRAGON_BREATH,
|
||||
DUELIST_SPIRIT,
|
||||
DWARF_ATTACK_BUFF,
|
||||
@ -289,6 +291,7 @@ public enum AbnormalType
|
||||
SOA_BUFF1,
|
||||
SOA_BUFF2,
|
||||
SOA_BUFF3,
|
||||
SONG_BATTLE_WHISPER,
|
||||
SONG_OF_CHAMPION,
|
||||
SONG_OF_EARTH,
|
||||
SONG_OF_ELEMENTAL,
|
||||
|
Reference in New Issue
Block a user