L2JMobius

C6 Problem with AltPlayerProtectionLevel and AllowLowLvlProtect

G-hamsteR · 2 · 6258

Online G-hamsteR

  • Viscount
  • *****
    • Posts: 333
Hello!
I just found a problem with these configs

Code: [Select]
# Newbie player PK/PVP protection.
# When is set to 39, then players level 1-39 cannot attack or be attacked by level 40+.
# Retail: 0
AltPlayerProtectionLevel = 39

# PvP only in the same grade (0-19, 20-39, 40-51, 52-60, 61-76, 76-85).
# Default: False
AllowLowLvlProtect = False

AltPlayerProtectionLevel also works in sieges. If a clan leader has a subclass and he is level 75 and AllowLowLvlProtect is set to true, then he can just use the seal and get the castle without anyone else touching him. For a high-rate server where everyone is lv 80, this can create a big problem.

AltPlayerProtectionLevel is working anywhere (including sieges), while AllowLowLvlProtect is only working in sieges.
The ideal is to make both of them work everywhere except sieges.

This is the fix that I created for my case. I'm only using AllowLowLvlProtect everywhere, except for sieges. I have removed AltPlayerProtectionLevel completely.

Code: [Select]
diff --git a/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java b/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
index 2a74ac2..1cfee00 100644
--- a/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
+++ b/java/org/l2jmobius/gameserver/model/actor/instance/PlayerInstance.java
@@ -684,13 +684,27 @@
  }
 
  // Pk protection config
- if (!isGM() && (target instanceof PlayerInstance) && (((PlayerInstance) target).getPvpFlag() == 0) && (((PlayerInstance) target).getKarma() == 0) && ((getLevel() < Config.ALT_PLAYER_PROTECTION_LEVEL) || (target.getLevel() < Config.ALT_PLAYER_PROTECTION_LEVEL)))
+ if (Config.ALLOW_CHAR_KILL_PROTECT && !isGM() && (target instanceof PlayerInstance) && (((PlayerInstance) target).getPvpFlag() == 0) && (((PlayerInstance) target).getKarma() == 0))
  {
- sendMessage("You can't hit a player that is lower level from you. Target's level: " + Config.ALT_PLAYER_PROTECTION_LEVEL + ".");
- sendPacket(ActionFailed.STATIC_PACKET);
- return;
+ final int this_level = getLevel();
+ final int target_level = ((PlayerInstance) target).getLevel();
+ final Siege siege = SiegeManager.getInstance().getSiege(PlayerInstance.this);
+ if ((((siege == null) || !siege.isInProgress()) && ((this_level >= 20) && (target_level < 20))) || ((this_level >= 40) && (target_level < 40)) || ((this_level >= 52) && (target_level < 52)) || ((this_level >= 61) && (target_level < 61)) || ((this_level >= 76) && (target_level < 76)))
+ {
+ sendMessage("You can only start a PvP if your target is in your level grade (1-19, 20-39, 40-51, 52-60, 61-75, 76-80).");
+ sendPacket(ActionFailed.STATIC_PACKET);
+ return;
+ }
  }
 
+ // if (!isGM() && (target instanceof PlayerInstance) && (((PlayerInstance) target).getPvpFlag() == 0) && (((PlayerInstance) target).getKarma() == 0) && ((getLevel() < Config.ALT_PLAYER_PROTECTION_LEVEL) || (target.getLevel() < Config.ALT_PLAYER_PROTECTION_LEVEL)))
+ // {
+ // sendMessage("PvP is not allowed for players under level " + Config.ALT_PLAYER_PROTECTION_LEVEL + ".");
+ // // sendMessage("You can't hit a player that is lower level from you. Target's level: " + Config.ALT_PLAYER_PROTECTION_LEVEL + ".");
+ // sendPacket(ActionFailed.STATIC_PACKET);
+ // return;
+ // }
+
  super.doAttack(target);
 
  // cancel the recent fake-death protection instantly if the player attacks or casts spells
@@ -4912,72 +4926,17 @@
  }
  else if (isAutoAttackable(player))
  {
- if (Config.ALLOW_CHAR_KILL_PROTECT)
- {
- final Siege siege = SiegeManager.getInstance().getSiege(player);
- if ((siege != null) && siege.isInProgress())
- {
- if ((player.getLevel() > 20) && (((Creature) player.getTarget()).getLevel() < 20))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() > 40) && (((Creature) player.getTarget()).getLevel() < 40))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() > 52) && (((Creature) player.getTarget()).getLevel() < 52))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() > 61) && (((Creature) player.getTarget()).getLevel() < 61))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() > 76) && (((Creature) player.getTarget()).getLevel() < 76))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 20) && (((Creature) player.getTarget()).getLevel() > 20))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 40) && (((Creature) player.getTarget()).getLevel() > 40))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 52) && (((Creature) player.getTarget()).getLevel() > 52))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 61) && (((Creature) player.getTarget()).getLevel() > 61))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 76) && (((Creature) player.getTarget()).getLevel() > 76))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
- }
- }
+ /*
+ * if (Config.ALLOW_CHAR_KILL_PROTECT) { final Siege siege = SiegeManager.getInstance().getSiege(player); if ((siege != null) && siege.isInProgress()) { if ((player.getLevel() > 20) && (((Creature) player.getTarget()).getLevel() < 20)) {
+ * player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() > 40) && (((Creature) player.getTarget()).getLevel() < 40)) { player.sendMessage("Your target is not in your grade!");
+ * player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() > 52) && (((Creature) player.getTarget()).getLevel() < 52)) { player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() > 61) &&
+ * (((Creature) player.getTarget()).getLevel() < 61)) { player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() > 76) && (((Creature) player.getTarget()).getLevel() < 76)) {
+ * player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 20) && (((Creature) player.getTarget()).getLevel() > 20)) { player.sendMessage("Your target is not in your grade!");
+ * player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 40) && (((Creature) player.getTarget()).getLevel() > 40)) { player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 52) &&
+ * (((Creature) player.getTarget()).getLevel() > 52)) { player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 61) && (((Creature) player.getTarget()).getLevel() > 61)) {
+ * player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 76) && (((Creature) player.getTarget()).getLevel() > 76)) { player.sendMessage("Your target is not in your grade!");
+ * player.sendPacket(ActionFailed.STATIC_PACKET); } } }
+ */
 
  // Player with lvl < 21 can't attack a cursed weapon holder
  // And a cursed weapon holder can't attack players with lvl < 21
@@ -5097,72 +5056,17 @@
  }
  else if (isAutoAttackable(player))
  {
- if (Config.ALLOW_CHAR_KILL_PROTECT)
- {
- final Siege siege = SiegeManager.getInstance().getSiege(player);
- if ((siege != null) && siege.isInProgress())
- {
- if ((player.getLevel() > 20) && (((Creature) player.getTarget()).getLevel() < 20))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() > 40) && (((Creature) player.getTarget()).getLevel() < 40))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() > 52) && (((Creature) player.getTarget()).getLevel() < 52))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() > 61) && (((Creature) player.getTarget()).getLevel() < 61))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() > 76) && (((Creature) player.getTarget()).getLevel() < 76))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 20) && (((Creature) player.getTarget()).getLevel() > 20))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 40) && (((Creature) player.getTarget()).getLevel() > 40))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 52) && (((Creature) player.getTarget()).getLevel() > 52))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 61) && (((Creature) player.getTarget()).getLevel() > 61))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
-
- if ((player.getLevel() < 76) && (((Creature) player.getTarget()).getLevel() > 76))
- {
- player.sendMessage("Your target is not in your grade!");
- player.sendPacket(ActionFailed.STATIC_PACKET);
- }
- }
- }
+ /*
+ * if (Config.ALLOW_CHAR_KILL_PROTECT) { final Siege siege = SiegeManager.getInstance().getSiege(player); if ((siege != null) && siege.isInProgress()) { if ((player.getLevel() > 20) && (((Creature) player.getTarget()).getLevel() < 20)) {
+ * player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() > 40) && (((Creature) player.getTarget()).getLevel() < 40)) { player.sendMessage("Your target is not in your grade!");
+ * player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() > 52) && (((Creature) player.getTarget()).getLevel() < 52)) { player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() > 61) &&
+ * (((Creature) player.getTarget()).getLevel() < 61)) { player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() > 76) && (((Creature) player.getTarget()).getLevel() < 76)) {
+ * player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 20) && (((Creature) player.getTarget()).getLevel() > 20)) { player.sendMessage("Your target is not in your grade!");
+ * player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 40) && (((Creature) player.getTarget()).getLevel() > 40)) { player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 52) &&
+ * (((Creature) player.getTarget()).getLevel() > 52)) { player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 61) && (((Creature) player.getTarget()).getLevel() > 61)) {
+ * player.sendMessage("Your target is not in your grade!"); player.sendPacket(ActionFailed.STATIC_PACKET); } if ((player.getLevel() < 76) && (((Creature) player.getTarget()).getLevel() > 76)) { player.sendMessage("Your target is not in your grade!");
+ * player.sendPacket(ActionFailed.STATIC_PACKET); } } }
+ */
 
  // Player with lvl < 21 can't attack a cursed weapon holder
  // And a cursed weapon holder can't attack players with lvl < 21
@@ -10633,11 +10537,23 @@
  }
 
  // Pk protection config
- if (skill.isOffensive() && !isGM() && (target instanceof PlayerInstance) && (((PlayerInstance) target).getPvpFlag() == 0) && (((PlayerInstance) target).getKarma() == 0) && ((getLevel() < Config.ALT_PLAYER_PROTECTION_LEVEL) || (((PlayerInstance) target).getLevel() < Config.ALT_PLAYER_PROTECTION_LEVEL)))
+ if (Config.ALLOW_CHAR_KILL_PROTECT && skill.isOffensive() && !isGM() && (target instanceof PlayerInstance) && (((PlayerInstance) target).getPvpFlag() == 0) && (((PlayerInstance) target).getKarma() == 0))
  {
- sendMessage("You can't hit a player that is lower level from you. Target's level: " + Config.ALT_PLAYER_PROTECTION_LEVEL + ".");
- sendPacket(ActionFailed.STATIC_PACKET);
- return;
+ final int this_level = getLevel();
+ final int target_level = ((PlayerInstance) target).getLevel();
+ final Siege siege = SiegeManager.getInstance().getSiege(this);
+ if ((((siege == null) || !siege.isInProgress()) && ((this_level >= 20) && (target_level < 20))) || ((this_level >= 40) && (target_level < 40)) || ((this_level >= 52) && (target_level < 52)) || ((this_level >= 61) && (target_level < 61)) || ((this_level >= 76) && (target_level < 76)))
+ {
+ sendMessage("You can only start a PvP if your target is in your level grade (1-19, 20-39, 40-51, 52-60, 61-75, 76-80).");
+ sendPacket(ActionFailed.STATIC_PACKET);
+ return;
+ }
+ // if ((this_level < Config.ALT_PLAYER_PROTECTION_LEVEL) || (target_level < Config.ALT_PLAYER_PROTECTION_LEVEL))
+ // {
+ // sendMessage("PvP is not allowed for players under level " + Config.ALT_PLAYER_PROTECTION_LEVEL + ".");
+ // sendPacket(ActionFailed.STATIC_PACKET);
+ // return;
+ // }
  }
 
  // ************************************* Check skill availability *******************************************