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

View File

@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.network.serverpackets; package org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.commons.network.PacketWriter; 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.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
@@ -27,6 +28,8 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
public class EtcStatusUpdate implements IClientOutgoingPacket public class EtcStatusUpdate implements IClientOutgoingPacket
{ {
private final PlayerInstance _player; private final PlayerInstance _player;
private final boolean _isLight;
private final boolean _isShadow;
private int _mask; private int _mask;
public EtcStatusUpdate(PlayerInstance player) public EtcStatusUpdate(PlayerInstance player)
@@ -35,6 +38,17 @@ public class EtcStatusUpdate implements IClientOutgoingPacket
_mask = _player.getMessageRefusal() || _player.isChatBanned() || _player.isSilenceMode() ? 1 : 0; _mask = _player.getMessageRefusal() || _player.isChatBanned() || _player.isSilenceMode() ? 1 : 0;
_mask |= _player.isInsideZone(ZoneId.DANGER_AREA) ? 2 : 0; _mask |= _player.isInsideZone(ZoneId.DANGER_AREA) ? 2 : 0;
_mask |= _player.hasCharmOfCourage() ? 4 : 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 @Override
@@ -47,8 +61,10 @@ public class EtcStatusUpdate implements IClientOutgoingPacket
packet.writeC(0); // Weapon Grade Penalty [1-4] packet.writeC(0); // Weapon Grade Penalty [1-4]
packet.writeC(0); // Armor 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(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(_mask);
packet.writeC(_isShadow ? _player.getChargedSouls() : 0); // Shadow souls
packet.writeC(_isLight ? _player.getChargedSouls() : 0); // Light souls
return true; return true;
} }
} }

View File

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

View File

@@ -17,6 +17,7 @@
package org.l2jmobius.gameserver.network.serverpackets; package org.l2jmobius.gameserver.network.serverpackets;
import org.l2jmobius.commons.network.PacketWriter; 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.actor.instance.PlayerInstance;
import org.l2jmobius.gameserver.model.zone.ZoneId; import org.l2jmobius.gameserver.model.zone.ZoneId;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
@@ -27,6 +28,8 @@ import org.l2jmobius.gameserver.network.OutgoingPackets;
public class EtcStatusUpdate implements IClientOutgoingPacket public class EtcStatusUpdate implements IClientOutgoingPacket
{ {
private final PlayerInstance _player; private final PlayerInstance _player;
private final boolean _isLight;
private final boolean _isShadow;
private int _mask; private int _mask;
public EtcStatusUpdate(PlayerInstance player) public EtcStatusUpdate(PlayerInstance player)
@@ -35,6 +38,17 @@ public class EtcStatusUpdate implements IClientOutgoingPacket
_mask = _player.getMessageRefusal() || _player.isChatBanned() || _player.isSilenceMode() ? 1 : 0; _mask = _player.getMessageRefusal() || _player.isChatBanned() || _player.isSilenceMode() ? 1 : 0;
_mask |= _player.isInsideZone(ZoneId.DANGER_AREA) ? 2 : 0; _mask |= _player.isInsideZone(ZoneId.DANGER_AREA) ? 2 : 0;
_mask |= _player.hasCharmOfCourage() ? 4 : 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 @Override
@@ -47,10 +61,10 @@ public class EtcStatusUpdate implements IClientOutgoingPacket
packet.writeC(0); // Weapon Grade Penalty [1-4] packet.writeC(0); // Weapon Grade Penalty [1-4]
packet.writeC(0); // Armor 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(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(_mask);
packet.writeC(0); // Shadow souls packet.writeC(_isShadow ? _player.getChargedSouls() : 0); // Shadow souls
packet.writeC(0); // Light souls packet.writeC(_isLight ? _player.getChargedSouls() : 0); // Light souls
return true; return true;
} }
} }