Feather of Blessing reuse delay.

Contributed by Fakee.
This commit is contained in:
MobiusDevelopment 2022-06-22 08:47:48 +00:00
parent c312007be8
commit 6098ba52a0
50 changed files with 450 additions and 80 deletions

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -185,6 +185,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -508,16 +508,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false))
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 0; private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -189,6 +189,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -524,16 +524,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false))
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 0; private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -189,6 +189,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -529,16 +529,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false))
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 0; private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -189,6 +189,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -533,16 +533,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false))
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 1; // To nearest village. private int _flags = 1; // To nearest village.
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -189,6 +189,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -533,16 +533,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false))
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 1; // To nearest village. private int _flags = 1; // To nearest village.
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -185,6 +185,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -503,16 +503,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) /* || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false) */)
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 0; private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -185,6 +185,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -510,16 +510,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) /* || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false) */)
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 0; private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -185,6 +185,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -517,16 +517,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) /* || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false) */)
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 0; private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -185,6 +185,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -518,16 +518,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) /* || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false) */)
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 1; // To nearest village. private int _flags = 1; // To nearest village.
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);

View File

@ -33,6 +33,7 @@ import org.l2jmobius.gameserver.model.events.listeners.ConsumerEventListener;
import org.l2jmobius.gameserver.model.holders.SkillHolder; import org.l2jmobius.gameserver.model.holders.SkillHolder;
import org.l2jmobius.gameserver.model.item.instance.Item; import org.l2jmobius.gameserver.model.item.instance.Item;
import org.l2jmobius.gameserver.model.skill.BuffInfo; import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.CommonSkill;
import org.l2jmobius.gameserver.model.skill.Skill; import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.SkillCaster; import org.l2jmobius.gameserver.model.skill.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType; import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType())) final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{ {
return; return;
} }
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return; return;
} }
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill; final Skill triggerSkill;
if (_skillLevelScaleTo <= 0) if (_skillLevelScaleTo <= 0)
{ {

View File

@ -185,6 +185,7 @@
<isMagic>2</isMagic> <isMagic>2</isMagic>
<targetType>TARGET</targetType> <targetType>TARGET</targetType>
<affectScope>SINGLE</affectScope> <affectScope>SINGLE</affectScope>
<stayAfterDeath>true</stayAfterDeath>
</skill> </skill>
<skill id="7009" toLevel="1" name="not_used"> <skill id="7009" toLevel="1" name="not_used">
<magicLevel>1</magicLevel> <magicLevel>1</magicLevel>

View File

@ -518,16 +518,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player); PetitionManager.getInstance().checkPetitionMessages(player);
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead if (player.isAlikeDead()) // dead or fake dead
{ {
// no broadcast needed since the player will already spawn dead to others // no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player)); player.sendPacket(new Die(player));
} }
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems()) for (Item item : player.getInventory().getItems())
{ {
if (item.isTimeLimitedItem()) if (item.isTimeLimitedItem())

View File

@ -19,6 +19,7 @@ package org.l2jmobius.gameserver.network.clientpackets;
import org.l2jmobius.commons.network.PacketReader; import org.l2jmobius.commons.network.PacketReader;
import org.l2jmobius.commons.threads.ThreadPool; import org.l2jmobius.commons.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData; import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType; import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager; import org.l2jmobius.gameserver.instancemanager.CastleManager;
import org.l2jmobius.gameserver.instancemanager.FortManager; import org.l2jmobius.gameserver.instancemanager.FortManager;
@ -37,6 +38,7 @@ import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction; import org.l2jmobius.gameserver.model.siege.Castle.CastleFunction;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.siege.Fort.FortFunction; import org.l2jmobius.gameserver.model.siege.Fort.FortFunction;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.GameClient; import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.PacketLogger; import org.l2jmobius.gameserver.network.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!"); PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
return; return;
} }
if (player.isGM() || player.destroyItemByItemId("Feather", 10649, 1, player, false) || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false)) if (player.isGM())
{ {
player.doRevive(100.00); player.doRevive(100);
}
else if (player.destroyItemByItemId("Feather", 10649, 1, player, false) /* || player.destroyItemByItemId("Feather", 13300, 1, player, false) || player.destroyItemByItemId("Feather", 13128, 1, player, false) */)
{
final Skill skill = SkillData.getInstance().getSkill(7008, 1);
if (skill != null)
{
player.doRevive(100);
skill.applyEffects(player, player);
}
} }
else else
{ {

View File

@ -24,6 +24,8 @@ import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.clan.Clan; import org.l2jmobius.gameserver.model.clan.Clan;
import org.l2jmobius.gameserver.model.siege.Castle; import org.l2jmobius.gameserver.model.siege.Castle;
import org.l2jmobius.gameserver.model.siege.Fort; import org.l2jmobius.gameserver.model.siege.Fort;
import org.l2jmobius.gameserver.model.skill.BuffInfo;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.network.OutgoingPackets; import org.l2jmobius.gameserver.network.OutgoingPackets;
/** /**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId; private final int _objectId;
private final boolean _isSweepable; private final boolean _isSweepable;
private int _flags = 1; // To nearest village. private int _flags = 1; // To nearest village.
private int _delayFeather = 0;
public Die(Creature creature) public Die(Creature creature)
{ {
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(clan); siegeClan = fort.getSiege().getAttackerClan(clan);
isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan); isInFortDefense = (siegeClan == null) && fort.getSiege().checkIsDefender(clan);
} }
for (BuffInfo effect : creature.getEffectList().getEffects())
{
final Skill skill = effect.getSkill();
if (skill.getId() == 7008)
{
_delayFeather = effect.getTime();
}
}
// ClanHall check. // ClanHall check.
if ((clan != null) && (clan.getHideoutId() > 0)) if ((clan != null) && (clan.getHideoutId() > 0))
{ {
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId); packet.writeD(_objectId);
packet.writeQ(_flags); packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0); packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time. packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation. packet.writeC(0); // Hide die animation.
packet.writeD(0); packet.writeD(0);
packet.writeD(0); packet.writeD(0);