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

View File

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

View File

@ -508,16 +508,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
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.item.instance.Item;
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.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType()))
final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{
return;
}
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill;
if (_skillLevelScaleTo <= 0)
{

View File

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

View File

@ -524,16 +524,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
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.item.instance.Item;
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.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType()))
final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{
return;
}
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill;
if (_skillLevelScaleTo <= 0)
{

View File

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

View File

@ -529,16 +529,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
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.item.instance.Item;
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.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType()))
final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{
return;
}
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill;
if (_skillLevelScaleTo <= 0)
{

View File

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

View File

@ -533,16 +533,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 1; // To nearest village.
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
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.item.instance.Item;
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.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType()))
final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{
return;
}
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill;
if (_skillLevelScaleTo <= 0)
{

View File

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

View File

@ -533,16 +533,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 1; // To nearest village.
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
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.item.instance.Item;
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.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType()))
final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{
return;
}
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill;
if (_skillLevelScaleTo <= 0)
{

View File

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

View File

@ -503,16 +503,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
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.item.instance.Item;
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.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType()))
final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{
return;
}
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill;
if (_skillLevelScaleTo <= 0)
{

View File

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

View File

@ -510,16 +510,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
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.item.instance.Item;
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.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType()))
final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{
return;
}
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill;
if (_skillLevelScaleTo <= 0)
{

View File

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

View File

@ -517,16 +517,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 0;
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
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.item.instance.Item;
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.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType()))
final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{
return;
}
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill;
if (_skillLevelScaleTo <= 0)
{

View File

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

View File

@ -518,16 +518,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 1; // To nearest village.
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
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.item.instance.Item;
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.SkillCaster;
import org.l2jmobius.gameserver.model.skill.targets.TargetType;
@ -90,7 +91,8 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
if (!CommonUtil.contains(_magicTypes, event.getSkill().getMagicType()))
final Skill eventSkill = event.getSkill();
if (!CommonUtil.contains(_magicTypes, eventSkill.getMagicType()))
{
return;
}
@ -114,6 +116,15 @@ public class TriggerSkillByMagicType extends AbstractEffect
return;
}
// Ignore common skills.
for (CommonSkill skill : CommonSkill.values())
{
if (skill.getId() == eventSkill.getId())
{
return;
}
}
final Skill triggerSkill;
if (_skillLevelScaleTo <= 0)
{

View File

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

View File

@ -518,16 +518,17 @@ public class EnterWorld implements IClientIncomingPacket
PetitionManager.getInstance().checkPetitionMessages(player);
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
if (player.isAlikeDead()) // dead or fake dead
{
// no broadcast needed since the player will already spawn dead to others
player.sendPacket(new Die(player));
}
player.onPlayerEnter();
player.sendPacket(new SkillCoolTime(player));
player.sendPacket(new ExVoteSystemInfo(player));
for (Item item : player.getInventory().getItems())
{
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.threads.ThreadPool;
import org.l2jmobius.gameserver.data.xml.ClanHallData;
import org.l2jmobius.gameserver.data.xml.SkillData;
import org.l2jmobius.gameserver.enums.TeleportWhereType;
import org.l2jmobius.gameserver.instancemanager.CastleManager;
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.Fort;
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.PacketLogger;
@ -245,9 +247,18 @@ public class RequestRestartPoint implements IClientIncomingPacket
PacketLogger.warning("Player [" + player.getName() + "] called RestartPointPacket - Fixed and he isn't festival participant!");
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
{

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.siege.Castle;
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;
/**
@ -34,6 +36,7 @@ public class Die implements IClientOutgoingPacket
private final int _objectId;
private final boolean _isSweepable;
private int _flags = 1; // To nearest village.
private int _delayFeather = 0;
public Die(Creature creature)
{
@ -57,6 +60,16 @@ public class Die implements IClientOutgoingPacket
siegeClan = fort.getSiege().getAttackerClan(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.
if ((clan != null) && (clan.getHideoutId() > 0))
{
@ -92,7 +105,7 @@ public class Die implements IClientOutgoingPacket
packet.writeD(_objectId);
packet.writeQ(_flags);
packet.writeD(_isSweepable ? 1 : 0);
packet.writeD(0); // Feather item time.
packet.writeD(_delayFeather); // Feather item time.
packet.writeC(0); // Hide die animation.
packet.writeD(0);
packet.writeD(0);