L2JMobius

C6 Prevent some buffs from being lost on death

G-hamsteR · 1 · 5992

Online G-hamsteR

  • Viscount
  • *****
    • Posts: 335
With this code, you can set some buffs so that they are not lost upon death.

Code: [Select]
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.