Proper display for shadow and light souls.

This commit is contained in:
MobiusDevelopment
2020-11-27 09:09:38 +00:00
parent 2f34192b54
commit 6cc0ba120c
4 changed files with 58 additions and 8 deletions

View File

@@ -11193,7 +11193,7 @@ public class PlayerInstance extends Playable
// TODO: Unhardcode?
if ((getRace() == Race.KAMAEL) && (_souls >= 100))
{
int skillLevel = getSkillLevel(KAMAEL_SHADOW_MASTER);
int skillLevel = getShadowMasterLevel();
if (skillLevel > 0)
{
abortCast();
@@ -11202,7 +11202,7 @@ public class PlayerInstance extends Playable
}
else
{
skillLevel = getSkillLevel(KAMAEL_LIGHT_MASTER);
skillLevel = getLightMasterLevel();
if (skillLevel > 0)
{
abortCast();
@@ -11213,6 +11213,16 @@ public class PlayerInstance extends Playable
}
}
public int getLightMasterLevel()
{
return getSkillLevel(KAMAEL_LIGHT_MASTER);
}
public int getShadowMasterLevel()
{
return getSkillLevel(KAMAEL_SHADOW_MASTER);
}
/**
* Decreases existing Souls.
* @param count

View File

@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.OutgoingPackets;
@@ -27,6 +28,8 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
public class EtcStatusUpdate implements IClientOutgoingPacket
{
private final PlayerInstance _player;
private final boolean _isLight;
private final boolean _isShadow;
private int _mask;
public EtcStatusUpdate(PlayerInstance player)
@@ -35,6 +38,17 @@ public class EtcStatusUpdate implements IClientOutgoingPacket
_mask = _player.getMessageRefusal() || _player.isChatBanned() || _player.isSilenceMode() ? 1 : 0;
_mask |= _player.isInsideZone(ZoneId.DANGER_AREA) ? 2 : 0;
_mask |= _player.hasCharmOfCourage() ? 4 : 0;
if (_player.getRace() == Race.KAMAEL)
{
_isLight = _player.getLightMasterLevel() > 0;
_isShadow = _player.getShadowMasterLevel() > 0;
}
else
{
_isLight = false;
_isShadow = false;
}
}
@Override
@@ -47,8 +61,10 @@ public class EtcStatusUpdate implements IClientOutgoingPacket
packet.writeC(0); // Weapon Grade Penalty [1-4]
packet.writeC(0); // Armor Grade Penalty [1-4]
packet.writeC(0); // Death Penalty [1-15, 0 = disabled)], not used anymore in Ertheia
packet.writeC(_player.getChargedSouls());
packet.writeC(!_isShadow && !_isLight ? _player.getChargedSouls() : 0);
packet.writeC(_mask);
packet.writeC(_isShadow ? _player.getChargedSouls() : 0); // Shadow souls
packet.writeC(_isLight ? _player.getChargedSouls() : 0); // Light souls
return true;
}
}

View File

@@ -11232,7 +11232,7 @@ public class PlayerInstance extends Playable
// TODO: Unhardcode?
if ((getRace() == Race.KAMAEL) && (_souls >= 100))
{
int skillLevel = getSkillLevel(KAMAEL_SHADOW_MASTER);
int skillLevel = getShadowMasterLevel();
if (skillLevel > 0)
{
abortCast();
@@ -11241,7 +11241,7 @@ public class PlayerInstance extends Playable
}
else
{
skillLevel = getSkillLevel(KAMAEL_LIGHT_MASTER);
skillLevel = getLightMasterLevel();
if (skillLevel > 0)
{
abortCast();
@@ -11252,6 +11252,16 @@ public class PlayerInstance extends Playable
}
}
public int getLightMasterLevel()
{
return getSkillLevel(KAMAEL_LIGHT_MASTER);
}
public int getShadowMasterLevel()
{
return getSkillLevel(KAMAEL_SHADOW_MASTER);
}
/**
* Decreases existing Souls.
* @param count

View File

@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.commons.network.PacketWriter;
import org.l2jmobius.gameserver.enums.Race;
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.OutgoingPackets;
@@ -27,6 +28,8 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
public class EtcStatusUpdate implements IClientOutgoingPacket
{
private final PlayerInstance _player;
private final boolean _isLight;
private final boolean _isShadow;
private int _mask;
public EtcStatusUpdate(PlayerInstance player)
@@ -35,6 +38,17 @@ public class EtcStatusUpdate implements IClientOutgoingPacket
_mask = _player.getMessageRefusal() || _player.isChatBanned() || _player.isSilenceMode() ? 1 : 0;
_mask |= _player.isInsideZone(ZoneId.DANGER_AREA) ? 2 : 0;
_mask |= _player.hasCharmOfCourage() ? 4 : 0;
if (_player.getRace() == Race.KAMAEL)
{
_isLight = _player.getLightMasterLevel() > 0;
_isShadow = _player.getShadowMasterLevel() > 0;
}
else
{
_isLight = false;
_isShadow = false;
}
}
@Override
@@ -47,10 +61,10 @@ public class EtcStatusUpdate implements IClientOutgoingPacket
packet.writeC(0); // Weapon Grade Penalty [1-4]
packet.writeC(0); // Armor Grade Penalty [1-4]
packet.writeC(0); // Death Penalty [1-15, 0 = disabled)], not used anymore in Ertheia
packet.writeC(_player.getChargedSouls());
packet.writeC(!_isShadow && !_isLight ? _player.getChargedSouls() : 0);
packet.writeC(_mask);
packet.writeC(0); // Shadow souls
packet.writeC(0); // Light souls
packet.writeC(_isShadow ? _player.getChargedSouls() : 0); // Shadow souls
packet.writeC(_isLight ? _player.getChargedSouls() : 0); // Light souls
return true;
}
}