SkillDat is replaced by SkillUseHolder.

This commit is contained in:
MobiusDevelopment
2020-06-16 23:33:14 +00:00
parent c0261a2539
commit 5934ae15d9
27 changed files with 276 additions and 238 deletions

View File

@@ -29,11 +29,11 @@ import org.l2jmobius.gameserver.model.World;
import org.l2jmobius.gameserver.model.actor.Playable;
import org.l2jmobius.gameserver.model.actor.instance.PetInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance.SkillDat;
import org.l2jmobius.gameserver.model.actor.templates.NpcTemplate;
import org.l2jmobius.gameserver.model.entity.event.CTF;
import org.l2jmobius.gameserver.model.entity.event.DM;
import org.l2jmobius.gameserver.model.entity.event.TvT;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.spawn.Spawn;
import org.l2jmobius.gameserver.network.SystemMessageId;
@@ -233,8 +233,8 @@ public class SummonItems implements IItemHandler
{
try
{
final SkillDat skilldat = _player.getCurrentSkill();
if (!_player.isCastingNow() || ((skilldat != null) && (skilldat.getSkillId() != 2046)))
final SkillUseHolder skill = _player.getCurrentSkill();
if (!_player.isCastingNow() || ((skill != null) && (skill.getSkillId() != 2046)))
{
return;
}

View File

@@ -74,7 +74,6 @@ import org.l2jmobius.gameserver.model.actor.instance.NpcInstance;
import org.l2jmobius.gameserver.model.actor.instance.NpcWalkerInstance;
import org.l2jmobius.gameserver.model.actor.instance.PetInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance.SkillDat;
import org.l2jmobius.gameserver.model.actor.instance.RaidBossInstance;
import org.l2jmobius.gameserver.model.actor.instance.RiftInvaderInstance;
import org.l2jmobius.gameserver.model.actor.instance.SiegeFlagInstance;
@@ -91,6 +90,7 @@ import org.l2jmobius.gameserver.model.entity.event.GameEvent;
import org.l2jmobius.gameserver.model.entity.event.TvT;
import org.l2jmobius.gameserver.model.entity.event.VIP;
import org.l2jmobius.gameserver.model.entity.olympiad.Olympiad;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.items.Weapon;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
@@ -7635,11 +7635,11 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
if (this instanceof PlayerInstance)
{
final PlayerInstance currPlayer = (PlayerInstance) this;
final SkillDat skilldat = currPlayer.getCurrentSkill();
final SkillUseHolder skillUseHolder = currPlayer.getCurrentSkill();
// Like L2OFF if the skill is BLOW the player doesn't auto attack
// If on XML skill nextActionAttack = true the char auto attack
// If CTRL is pressed the autoattack is aborted (like L2OFF)
if ((skilldat != null) && !skilldat.isCtrlPressed() && skill.nextActionIsAttack() && (_target != null) && (_target instanceof Creature))
if ((skillUseHolder != null) && !skillUseHolder.isCtrlPressed() && skill.nextActionIsAttack() && (_target != null) && (_target instanceof Creature))
{
getAI().setIntention(AI_INTENTION_ATTACK, _target);
}
@@ -7657,8 +7657,8 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
if (this instanceof PlayerInstance)
{
final PlayerInstance currPlayer = (PlayerInstance) this;
final SkillDat skilldat = currPlayer.getCurrentSkill();
if ((skilldat != null) && !skilldat.isCtrlPressed() && (skill.isOffensive()) && (skill.getSkillType() != SkillType.UNLOCK) && (skill.getSkillType() != SkillType.BLOW) && (skill.getSkillType() != SkillType.DELUXE_KEY_UNLOCK) && (skill.getId() != 345) && (skill.getId() != 346))
final SkillUseHolder skillUseHolder = currPlayer.getCurrentSkill();
if ((skillUseHolder != null) && !skillUseHolder.isCtrlPressed() && (skill.isOffensive()) && (skill.getSkillType() != SkillType.UNLOCK) && (skill.getSkillType() != SkillType.BLOW) && (skill.getSkillType() != SkillType.DELUXE_KEY_UNLOCK) && (skill.getId() != 345) && (skill.getId() != 346))
{
if (!skill.isMagic() && skill.nextActionIsAttack())
{
@@ -7692,7 +7692,7 @@ public abstract class Creature extends WorldObject implements ISkillsHolder
if (this instanceof PlayerInstance)
{
final PlayerInstance currPlayer = (PlayerInstance) this;
final SkillDat queuedSkill = currPlayer.getQueuedSkill();
final SkillUseHolder queuedSkill = currPlayer.getQueuedSkill();
currPlayer.setCurrentSkill(null, false, false);
if (queuedSkill != null)
{

View File

@@ -137,6 +137,7 @@ import org.l2jmobius.gameserver.model.entity.siege.FortSiege;
import org.l2jmobius.gameserver.model.entity.siege.Siege;
import org.l2jmobius.gameserver.model.entity.siege.clanhalls.DevastatedCastle;
import org.l2jmobius.gameserver.model.holders.PlayerStatsHolder;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.holders.SummonRequestHolder;
import org.l2jmobius.gameserver.model.itemcontainer.Inventory;
import org.l2jmobius.gameserver.model.itemcontainer.ItemContainer;
@@ -475,9 +476,9 @@ public class PlayerInstance extends Playable
private final List<String> _validLink = new ArrayList<>();
private Forum _forumMail;
private Forum _forumMemo;
private SkillDat _currentSkill;
private SkillDat _currentPetSkill;
private SkillDat _queuedSkill;
private SkillUseHolder _currentSkill;
private SkillUseHolder _currentPetSkill;
private SkillUseHolder _queuedSkill;
private boolean _isWearingFormalWear = false;
private Location _currentSkillWorldPosition;
private int _cursedWeaponEquipedId = 0;
@@ -832,70 +833,6 @@ public class PlayerInstance extends Playable
}
}
/**
* Skill casting information (used to queue when several skills are cast in a short time) *.
*/
public class SkillDat
{
/** The _skill. */
private final Skill _skill;
/** The _ctrl pressed. */
private final boolean _ctrlPressed;
/** The _shift pressed. */
private final boolean _shiftPressed;
/**
* Instantiates a new skill dat.
* @param skill the skill
* @param ctrlPressed the ctrl pressed
* @param shiftPressed the shift pressed
*/
protected SkillDat(Skill skill, boolean ctrlPressed, boolean shiftPressed)
{
_skill = skill;
_ctrlPressed = ctrlPressed;
_shiftPressed = shiftPressed;
}
/**
* Checks if is ctrl pressed.
* @return true, if is ctrl pressed
*/
public boolean isCtrlPressed()
{
return _ctrlPressed;
}
/**
* Checks if is shift pressed.
* @return true, if is shift pressed
*/
public boolean isShiftPressed()
{
return _shiftPressed;
}
/**
* Gets the skill.
* @return the skill
*/
public Skill getSkill()
{
return _skill;
}
/**
* Gets the skill id.
* @return the skill id
*/
public int getSkillId()
{
return getSkill() != null ? getSkill().getId() : -1;
}
}
/**
* Gets the account name.
* @return the account name
@@ -9937,7 +9874,7 @@ public class PlayerInstance extends Playable
final int skillId = skill.getId();
int currSkillId = -1;
final SkillDat current = getCurrentSkill();
final SkillUseHolder current = getCurrentSkill();
if (current != null)
{
currSkillId = current.getSkillId();
@@ -10017,7 +9954,7 @@ public class PlayerInstance extends Playable
// failed to cast, or the casting is not yet in progress when this is rechecked
if ((currSkillId != -1) && (isCastingNow() || isCastingPotionNow()))
{
final SkillDat currentSkill = getCurrentSkill();
final SkillUseHolder currentSkill = getCurrentSkill();
// Check if new skill different from current skill in progress
if ((currentSkill != null) && (skill.getId() == currentSkill.getSkillId()))
{
@@ -10025,7 +9962,7 @@ public class PlayerInstance extends Playable
return;
}
// Create a new SkillDat object and queue it in the player _queuedSkill
// Create a new SkillUseHolder object and queue it in the player _queuedSkill
setQueuedSkill(skill, forceUse, dontMove);
sendPacket(ActionFailed.STATIC_PACKET);
return;
@@ -10059,7 +9996,7 @@ public class PlayerInstance extends Playable
// ************************************* Check Casting in Progress *******************************************
// Create a new SkillDat object and set the player _currentSkill
// Create a new SkillUseHolder object and set the player _currentSkill
// This is used mainly to save & queue the button presses, since Creature has
// _lastSkillCast which could otherwise replace it
setCurrentSkill(skill, forceUse, dontMove);
@@ -10134,8 +10071,8 @@ public class PlayerInstance extends Playable
}
// Like L2OFF you can't heal random purple people without using CTRL
final SkillDat skilldat = getCurrentSkill();
if ((skilldat != null) && (skill.getSkillType() == SkillType.HEAL) && !skilldat.isCtrlPressed() && (target instanceof PlayerInstance) && (((PlayerInstance) target).getPvpFlag() == 1) && (this != target))
final SkillUseHolder skillUseHolder = getCurrentSkill();
if ((skillUseHolder != null) && (skill.getSkillType() == SkillType.HEAL) && !skillUseHolder.isCtrlPressed() && (target instanceof PlayerInstance) && (((PlayerInstance) target).getPvpFlag() == 1) && (this != target))
{
if (((getClanId() == 0) || (((PlayerInstance) target).getClanId() == 0)) || (getClanId() != ((PlayerInstance) target).getClanId()))
{
@@ -10502,7 +10439,7 @@ public class PlayerInstance extends Playable
return;
}
// If all conditions are checked, create a new SkillDat object and set the player _currentSkill
// If all conditions are checked, create a new SkillUseHolder object and set the player _currentSkill
setCurrentSkill(skill, forceUse, dontMove);
// Check if the active Skill can be casted (ex : not sleeping...), Check if the target is correct and Notify the AI with AI_INTENTION_CAST and target
@@ -10578,11 +10515,9 @@ public class PlayerInstance extends Playable
(target instanceof PlayerInstance) && // target is PlayerInstance and
(!isInDuel() || (((PlayerInstance) target).getDuelId() != getDuelId())) && // self is not in a duel and attacking opponent
!isInsideZone(ZoneId.PVP) && // Pc is not in PvP zone
!((PlayerInstance) target).isInsideZone(ZoneId.PVP) // target is not in PvP zone
)
!((PlayerInstance) target).isInsideZone(ZoneId.PVP)) // target is not in PvP zone
{
final SkillDat skilldat = getCurrentSkill();
// SkillDat skilldatpet = getCurrentPetSkill();
final SkillUseHolder skillUseHolder = getCurrentSkill();
if (skill.isPvpSkill()) // pvp skill
{
if ((getClan() != null) && (((PlayerInstance) target).getClan() != null) && getClan().isAtWarWith(((PlayerInstance) target).getClan().getClanId()) && ((PlayerInstance) target).getClan().isAtWarWith(getClan().getClanId()))
@@ -10595,7 +10530,7 @@ public class PlayerInstance extends Playable
return false;
}
}
else if ((skilldat != null) && !skilldat.isCtrlPressed() && skill.isOffensive() && !srcIsSummon)
else if ((skillUseHolder != null) && !skillUseHolder.isCtrlPressed() && skill.isOffensive() && !srcIsSummon)
{
if ((getClan() != null) && (((PlayerInstance) target).getClan() != null) && getClan().isAtWarWith(((PlayerInstance) target).getClan().getClanId()) && ((PlayerInstance) target).getClan().isAtWarWith(getClan().getClanId()))
{
@@ -14747,13 +14682,13 @@ public class PlayerInstance extends Playable
* Get the current skill in use or return null.
* @return the current skill
*/
public SkillDat getCurrentSkill()
public SkillUseHolder getCurrentSkill()
{
return _currentSkill;
}
/**
* Create a new SkillDat object and set the player _currentSkill.
* Create a new SkillUseHolder object and set the player _currentSkill.
* @param currentSkill the current skill
* @param ctrlPressed the ctrl pressed
* @param shiftPressed the shift pressed
@@ -14765,20 +14700,20 @@ public class PlayerInstance extends Playable
_currentSkill = null;
return;
}
_currentSkill = new SkillDat(currentSkill, ctrlPressed, shiftPressed);
_currentSkill = new SkillUseHolder(currentSkill, ctrlPressed, shiftPressed);
}
/**
* Gets the queued skill.
* @return the queued skill
*/
public SkillDat getQueuedSkill()
public SkillUseHolder getQueuedSkill()
{
return _queuedSkill;
}
/**
* Create a new SkillDat object and queue it in the player _queuedSkill.
* Create a new SkillUseHolder object and queue it in the player _queuedSkill.
* @param queuedSkill the queued skill
* @param ctrlPressed the ctrl pressed
* @param shiftPressed the shift pressed
@@ -14790,7 +14725,7 @@ public class PlayerInstance extends Playable
_queuedSkill = null;
return;
}
_queuedSkill = new SkillDat(queuedSkill, ctrlPressed, shiftPressed);
_queuedSkill = new SkillUseHolder(queuedSkill, ctrlPressed, shiftPressed);
}
/**
@@ -16662,13 +16597,13 @@ public class PlayerInstance extends Playable
* Get the current pet skill in use or return null.<br>
* @return
*/
public SkillDat getCurrentPetSkill()
public SkillUseHolder getCurrentPetSkill()
{
return _currentPetSkill;
}
/**
* Create a new SkillDat object and set the player _currentPetSkill.
* Create a new SkillUseHolder object and set the player _currentPetSkill.
* @param currentSkill
* @param ctrlPressed
* @param shiftPressed
@@ -16680,7 +16615,7 @@ public class PlayerInstance extends Playable
_currentPetSkill = null;
return;
}
_currentPetSkill = new SkillDat(currentSkill, ctrlPressed, shiftPressed);
_currentPetSkill = new SkillUseHolder(currentSkill, ctrlPressed, shiftPressed);
}
@Override

View File

@@ -0,0 +1,84 @@
/*
* This file is part of the L2J Mobius project.
*
* 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 <http://www.gnu.org/licenses/>.
*/
package org.l2jmobius.gameserver.model.holders;
import org.l2jmobius.gameserver.model.Skill;
/**
* Skill casting information (used to queue when several skills are cast in a short time).
* @author Mobius
*/
public class SkillUseHolder
{
/** The _skill. */
private final Skill _skill;
/** The _ctrl pressed. */
private final boolean _ctrlPressed;
/** The _shift pressed. */
private final boolean _shiftPressed;
/**
* Instantiates a new skill dat.
* @param skill the skill
* @param ctrlPressed the ctrl pressed
* @param shiftPressed the shift pressed
*/
public SkillUseHolder(Skill skill, boolean ctrlPressed, boolean shiftPressed)
{
_skill = skill;
_ctrlPressed = ctrlPressed;
_shiftPressed = shiftPressed;
}
/**
* Checks if is ctrl pressed.
* @return true, if is ctrl pressed
*/
public boolean isCtrlPressed()
{
return _ctrlPressed;
}
/**
* Checks if is shift pressed.
* @return true, if is shift pressed
*/
public boolean isShiftPressed()
{
return _shiftPressed;
}
/**
* Gets the skill.
* @return the skill
*/
public Skill getSkill()
{
return _skill;
}
/**
* Gets the skill id.
* @return the skill id
*/
public int getSkillId()
{
return getSkill() != null ? getSkill().getId() : -1;
}
}

View File

@@ -22,7 +22,7 @@ import org.l2jmobius.Config;
import org.l2jmobius.gameserver.datatables.xml.AdminData;
import org.l2jmobius.gameserver.instancemanager.CursedWeaponsManager;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance.SkillDat;
import org.l2jmobius.gameserver.model.holders.SkillUseHolder;
import org.l2jmobius.gameserver.model.items.Item;
import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
import org.l2jmobius.gameserver.model.items.type.EtcItemType;
@@ -167,7 +167,7 @@ public class RequestDropItem extends GameClientPacket
if (player.isCastingNow())
{
final SkillDat skill = player.getCurrentSkill();
final SkillUseHolder skill = player.getCurrentSkill();
if (skill != null)
{
// Cannot discard item that the skill is consuming.