With this code, you can set some buffs so that they are not lost upon death.
diff --git java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminBuffs.java java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminBuffs.java
index 2c4bd5a..4cc95f5 100644
--- java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminBuffs.java
+++ java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminBuffs.java
@@ -148,7 +148,7 @@
{
if ((knownChar instanceof PlayerInstance) && !knownChar.equals(activeChar))
{
- knownChar.stopAllEffects();
+ knownChar.stopAllEffects(false);
}
}
BuilderUtil.sendSysMessage(activeChar, "All effects canceled within raidus " + radius);
@@ -220,7 +220,7 @@
final PlayerInstance player = World.getInstance().getPlayer(playername);
if (player != null)
{
- player.stopAllEffects();
+ player.stopAllEffects(false);
remover.sendMessage("Removed all effects from " + playername);
showBuffs(player, remover);
}
diff --git java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminEffects.java java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminEffects.java
index c3ed1fd..99d4460 100644
--- java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminEffects.java
+++ java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminEffects.java
@@ -501,7 +501,7 @@
if (target instanceof Creature)
{
creature = (Creature) target;
- creature.stopAllEffects();
+ creature.stopAllEffects(false);
BuilderUtil.sendSysMessage(activeChar, "Effects has been cleared from " + creature + ".");
}
}
diff --git java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminKill.java java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminKill.java
index 0b1add9..0b2116b 100644
--- java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminKill.java
+++ java/org/l2jmobius/gameserver/handler/admincommandhandlers/AdminKill.java
@@ -129,7 +129,7 @@
// e.g. invincibility effect
if (!((PlayerInstance) target).isGM())
{
- target.stopAllEffects();
+ target.stopAllEffects(true);
}
target.reduceCurrentHp(target.getMaxHp() + target.getMaxCp() + 1, activeChar);
diff --git java/org/l2jmobius/gameserver/model/Skill.java java/org/l2jmobius/gameserver/model/Skill.java
index c75b813..59c5558 100644
--- java/org/l2jmobius/gameserver/model/Skill.java
+++ java/org/l2jmobius/gameserver/model/Skill.java
@@ -455,6 +455,7 @@
private final int _effectLvl;
private final boolean _ispotion;
+ private final boolean _leaveOnDeath;
private final int _element;
private final BaseStat _saveVs;
@@ -527,6 +528,7 @@
_staticReuse = set.getBoolean("staticReuse", false);
_staticHitTime = set.getBoolean("staticHitTime", false);
_ispotion = set.getBoolean("isPotion", false);
+ _leaveOnDeath = set.getBoolean("leaveOnDeath", false);
_mpConsume = set.getInt("mpConsume", 0);
_mpInitialConsume = set.getInt("mpInitialConsume", 0);
_hpConsume = set.getInt("hpConsume", 0);
@@ -697,6 +699,11 @@
return _ispotion;
}
+ public boolean leaveOnDeath()
+ {
+ return _leaveOnDeath;
+ }
+
public int getArmorsAllowed()
{
return _armorsAllowed;
diff --git java/org/l2jmobius/gameserver/model/WorldRegion.java java/org/l2jmobius/gameserver/model/WorldRegion.java
index 77c6574..fd4a893 100644
--- java/org/l2jmobius/gameserver/model/WorldRegion.java
+++ java/org/l2jmobius/gameserver/model/WorldRegion.java
@@ -141,7 +141,7 @@
mob.stopMove(null);
// Stop all active skills effects in progress on the Creature
- mob.stopAllEffects();
+ mob.stopAllEffects(false);
mob.clearAggroList();
mob.getKnownList().removeAllKnownObjects();
diff --git java/org/l2jmobius/gameserver/model/actor/Creature.java java/org/l2jmobius/gameserver/model/actor/Creature.java
index 1387588..af8fa55 100644
--- java/org/l2jmobius/gameserver/model/actor/Creature.java
+++ java/org/l2jmobius/gameserver/model/actor/Creature.java
@@ -1850,32 +1850,32 @@
{
if (Config.DM_REMOVE_BUFFS_ON_DIE)
{
- stopAllEffects();
+ stopAllEffects(true);
}
}
else if (player._inEventTvT && TvT.isStarted())
{
if (Config.TVT_REMOVE_BUFFS_ON_DIE)
{
- stopAllEffects();
+ stopAllEffects(true);
}
}
else if (player._inEventCTF && CTF.isStarted())
{
if (Config.CTF_REMOVE_BUFFS_ON_DIE)
{
- stopAllEffects();
+ stopAllEffects(true);
}
}
else // this means that the player is not in event
{
- stopAllEffects();
+ stopAllEffects(true);
}
}
else
// this means all other characters, including Summons
{
- stopAllEffects();
+ stopAllEffects(true);
}
// if killer is the same then the most damager/hated
@@ -3527,14 +3527,17 @@
/**
* Stop all active skills effects in progress on the Creature.
*/
- public void stopAllEffects()
+ public void stopAllEffects(boolean fromDeath)
{
final Effect[] effects = getAllEffects();
for (Effect effect : effects)
{
if (effect != null)
{
- effect.exit(true);
+ if (!fromDeath || !effect.getSkill().leaveOnDeath())
+ {
+ effect.exit(true);
+ }
}
else
{
diff --git java/org/l2jmobius/gameserver/model/actor/Summon.java java/org/l2jmobius/gameserver/model/actor/Summon.java
index 11eb3c7..6b40ffe 100644
--- java/org/l2jmobius/gameserver/model/actor/Summon.java
+++ java/org/l2jmobius/gameserver/model/actor/Summon.java
@@ -406,7 +406,7 @@
{
if (isVisible() && !isDead())
{
- stopAllEffects();
+ stopAllEffects(false);
getAI().stopFollow();
owner.sendPacket(new PetDelete(getObjectId(), 2));
@@ -414,7 +414,7 @@
giveAllToOwner();
- stopAllEffects();
+ stopAllEffects(false);
final WorldRegion oldRegion = getWorldRegion();
decayMe();
diff --git java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index e441f00..af66fc4 100644
--- java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -13686,7 +13686,7 @@
CursedWeaponsManager.getInstance().givePassive(_cursedWeaponEquipedId);
}
- stopAllEffects();
+ stopAllEffects(true);
if (isSubClassActive())
{
@@ -14202,7 +14202,7 @@
if ((answer == 0) && isPhoenixBlessed())
{
stopPhoenixBlessing(null);
- stopAllEffects();
+ stopAllEffects(true);
}
if (answer == 1)
{
diff --git java/org/l2jmobius/gameserver/model/actor/instance/SchemeBufferInstance.java java/org/l2jmobius/gameserver/model/actor/instance/SchemeBufferInstance.java
index 52f5f7f..c86ce4c 100644
--- java/org/l2jmobius/gameserver/model/actor/instance/SchemeBufferInstance.java
+++ java/org/l2jmobius/gameserver/model/actor/instance/SchemeBufferInstance.java
@@ -64,12 +64,12 @@
}
else if (currentCommand.startsWith("cleanup"))
{
- player.stopAllEffects();
+ player.stopAllEffects(true);
final Summon summon = player.getPet();
if (summon != null)
{
- summon.stopAllEffects();
+ summon.stopAllEffects(true);
}
final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
diff --git java/org/l2jmobius/gameserver/model/entity/event/CTF.java java/org/l2jmobius/gameserver/model/entity/event/CTF.java
index 5ef55e6..cf54784 100644
--- java/org/l2jmobius/gameserver/model/entity/event/CTF.java
+++ java/org/l2jmobius/gameserver/model/entity/event/CTF.java
@@ -2166,7 +2166,7 @@
{
if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)
{
- player.stopAllEffects();
+ player.stopAllEffects(false);
}
player._teamNameCTF = _savePlayerTeams.get(_savePlayers.indexOf(player.getName()));
diff --git java/org/l2jmobius/gameserver/model/entity/event/DM.java java/org/l2jmobius/gameserver/model/entity/event/DM.java
index 9675086..d252d46 100644
--- java/org/l2jmobius/gameserver/model/entity/event/DM.java
+++ java/org/l2jmobius/gameserver/model/entity/event/DM.java
@@ -766,7 +766,7 @@
if (Config.DM_ON_START_UNSUMMON_PET && (player.getPet() != null))
{
final Summon summon = player.getPet();
- summon.stopAllEffects();
+ summon.stopAllEffects(false);
if (summon instanceof PetInstance)
{
@@ -776,7 +776,7 @@
if (Config.DM_ON_START_REMOVE_ALL_EFFECTS)
{
- player.stopAllEffects();
+ player.stopAllEffects(false);
}
// Remove player from his party
@@ -1857,7 +1857,7 @@
{
if (Config.DM_ON_START_REMOVE_ALL_EFFECTS)
{
- player.stopAllEffects();
+ player.stopAllEffects(false);
}
_players.add(player);
diff --git java/org/l2jmobius/gameserver/model/entity/event/TvT.java java/org/l2jmobius/gameserver/model/entity/event/TvT.java
index e09a4ab..35f8aeb 100644
--- java/org/l2jmobius/gameserver/model/entity/event/TvT.java
+++ java/org/l2jmobius/gameserver/model/entity/event/TvT.java
@@ -766,7 +766,7 @@
if (Config.TVT_ON_START_UNSUMMON_PET && (player.getPet() != null))
{
final Summon summon = player.getPet();
- summon.stopAllEffects();
+ summon.stopAllEffects(false);
if (summon instanceof PetInstance)
{
@@ -776,7 +776,7 @@
if (Config.TVT_ON_START_REMOVE_ALL_EFFECTS)
{
- player.stopAllEffects();
+ player.stopAllEffects(false);
}
// Remove player from his party
@@ -2067,7 +2067,7 @@
{
if (Config.TVT_ON_START_REMOVE_ALL_EFFECTS)
{
- player.stopAllEffects();
+ player.stopAllEffects(false);
}
player._teamNameTvT = _savePlayerTeams.get(_savePlayers.indexOf(player.getName()));
diff --git java/org/l2jmobius/gameserver/model/entity/olympiad/OlympiadGame.java java/org/l2jmobius/gameserver/model/entity/olympiad/OlympiadGame.java
index 111b53b..8bafd99 100644
--- java/org/l2jmobius/gameserver/model/entity/olympiad/OlympiadGame.java
+++ java/org/l2jmobius/gameserver/model/entity/olympiad/OlympiadGame.java
@@ -225,13 +225,13 @@
player.setCurrentMp(player.getMaxMp());
// Remove Buffs
- player.stopAllEffects();
+ player.stopAllEffects(false);
// Remove Summon's Buffs
if (player.getPet() != null)
{
final Summon summon = player.getPet();
- summon.stopAllEffects();
+ summon.stopAllEffects(false);
if (summon instanceof PetInstance)
{
@@ -243,7 +243,7 @@
if (player.getTrainedBeast() != null)
{
final TamedBeastInstance traindebeast = player.getTrainedBeast();
- traindebeast.stopAllEffects();
+ traindebeast.stopAllEffects(false);
traindebeast.doDespawn();
}
diff --git java/org/l2jmobius/gameserver/model/entity/sevensigns/SevenSignsFestival.java java/org/l2jmobius/gameserver/model/entity/sevensigns/SevenSignsFestival.java
index ceb7460..c2f7284 100644
--- java/org/l2jmobius/gameserver/model/entity/sevensigns/SevenSignsFestival.java
+++ java/org/l2jmobius/gameserver/model/entity/sevensigns/SevenSignsFestival.java
@@ -4483,7 +4483,7 @@
participant.teleToLocation(x, y, _startLocation._z, true);
// Remove all buffs from all participants on entry. Works like the skill Cancel.
- participant.stopAllEffects();
+ participant.stopAllEffects(false);
// Remove any stray blood offerings in inventory
final ItemInstance bloodOfferings = participant.getInventory().getItemByItemId(FESTIVAL_OFFERING_ID);
diff --git java/org/l2jmobius/gameserver/model/spawn/Spawn.java java/org/l2jmobius/gameserver/model/spawn/Spawn.java
index 11452d7..0a8e26e 100644
--- java/org/l2jmobius/gameserver/model/spawn/Spawn.java
+++ java/org/l2jmobius/gameserver/model/spawn/Spawn.java
@@ -452,7 +452,7 @@
}
}
- npc.stopAllEffects();
+ npc.stopAllEffects(false);
// Set the HP and MP of the NpcInstance to the max
npc.setCurrentHpMp(npc.getMaxHp(), npc.getMaxMp());
Usage:
Add <set name="leaveOnDeath" val="true"/> to any skill.