Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Evento Pk Hunter

Iniciado por Swarlog, Ago 06, 2022, 02:37 AM

Tema anterior - Siguiente tema

Swarlog

CitarCORE:

diff --git a/dist/game/config/L2JMods.properties b/dist/game/config/L2JMods.properties
index 6043a24..88f0e99 100644
--- a/dist/game/config/L2JMods.properties
+++ b/dist/game/config/L2JMods.properties
@@ -507,4 +507,29 @@
 
 # Enables .changepassword voiced command which allows the players to change their account's password ingame.
 # Default: False
-AllowChangePassword = False
\ No newline at end of file
+AllowChangePassword = False
+
+# ---------------------------------------------------------------------------
+# PkHunter - Event       
+# ---------------------------------------------------------------------------
+# Enable/Disable PkHunter Event, Default: True
+EnablePKHunterEvent = True
+
+# Chance to start the event when someone gets PK. The probability will be 1/20 if its default.
+# Default: 20
+PKHunterEventChance = 20
+
+# Reward for the player that kills the PK.
+# Example: PKHunterEventRewards = itemId,amount;itemId,amount;itemId,amount
+PKHunterEventRewards = 14720,5;14721,2
+
+# Reward for the PK if he survives.
+# Example: PKHunterEventRewards = itemId,amount;itemId,amount;itemId,amount
+PKHunterEventPkRewards = 14720,25;14721,10
+
+# Enable/Disable if the PK of the event will have chances to drop or not, Default: False
+PKHunterEventDrop = False
+
+# Time that will take the event to end if noone kills the PK. In minutes.
+# Default: 5
+PKHunterEventTime = 5
\ No newline at end of file
diff --git a/src/main/java/com/l2jserver/Config.java b/src/main/java/com/l2jserver/Config.java
index 9e67519..d5636f8 100644
--- a/src/main/java/com/l2jserver/Config.java
+++ b/src/main/java/com/l2jserver/Config.java
@@ -775,6 +775,12 @@
  public static int L2JMOD_DUALBOX_CHECK_MAX_L2EVENT_PARTICIPANTS_PER_IP;
  public static Map<Integer, Integer> L2JMOD_DUALBOX_CHECK_WHITELIST;
  public static boolean L2JMOD_ALLOW_CHANGE_PASSWORD;
+ public static boolean ENABLE_PKHUNTEREVENT;
+ public static boolean DROP_PKHUNTEREVENT;
+ public static int PKHUNTEREVENT_CHANCE;
+ public static int TIME_PKHUNTEREVENT;
+ public static List<int[]> PKHUNTEREVENT_REWARD;
+ public static List<int[]> PKHUNTEREVENT_PK_REWARD;
  // --------------------------------------------------
  // NPC Settings
  // --------------------------------------------------
@@ -2005,7 +2011,7 @@
  RAID_MIN_RESPAWN_MULTIPLIER = NPC.getFloat("RaidMinRespawnMultiplier", 1.0f);
  RAID_MAX_RESPAWN_MULTIPLIER = NPC.getFloat("RaidMaxRespawnMultiplier", 1.0f);
  RAID_MINION_RESPAWN_TIMER = NPC.getInt("RaidMinionRespawnTime", 300000);
- final String[] propertySplit = NPC.getString("CustomMinionsRespawnTime", "").split(";");
+ String[] propertySplit = NPC.getString("CustomMinionsRespawnTime", "").split(";");
  MINIONS_RESPAWN_TIME = new HashMap<>(propertySplit.length);
  for (String prop : propertySplit)
  {
@@ -2509,7 +2515,73 @@
  }
  }
  L2JMOD_ALLOW_CHANGE_PASSWORD = L2JModSettings.getBoolean("AllowChangePassword", false);
+ ENABLE_PKHUNTEREVENT = L2JModSettings.getBoolean("EnablePKHunterEvent", true);
+ DROP_PKHUNTEREVENT = L2JModSettings.getBoolean("PKHunterEventDrop", false);
+ PKHUNTEREVENT_CHANCE = L2JModSettings.getInt("PKHunterEventChance", 20);
+ TIME_PKHUNTEREVENT = L2JModSettings.getInt("PKHunterEventTime", 5);
 
+ if (PKHUNTEREVENT_CHANCE < 1)
+ {
+ PKHUNTEREVENT_CHANCE = 1;
+ }
+ PKHUNTEREVENT_REWARD = new ArrayList<>();
+ propertySplit = L2JModSettings.getString("PKHunterEventRewards", "14720,5;14721,2").split(";");
+
+ for (String reward : propertySplit)
+ {
+ String[] rewardSplit = reward.split(",");
+ if (rewardSplit.length != 2)
+ {
+ _log.warn(StringUtil.concat("PkHunterEvent: invalid config property ->PkHunterEventRewards \"", reward, "\""));
+ }
+ else
+ {
+ try
+ {
+ PKHUNTEREVENT_REWARD.add(new int[]
+ {
+ Integer.parseInt(rewardSplit[0]),
+ Integer.parseInt(rewardSplit[1])
+ });
+ }
+ catch (NumberFormatException nfe)
+ {
+ if (!reward.isEmpty())
+ {
+ _log.warn(StringUtil.concat("PkHunterEvent: invalid config property -> PkHunterEventRewards \"", reward, "\""));
+ }
+ }
+ }
+ }
+ PKHUNTEREVENT_PK_REWARD = new ArrayList<>();
+ propertySplit = L2JModSettings.getString("PKHunterEventPkRewards", "14720,5;14721,2").split(";");
+
+ for (String reward : propertySplit)
+ {
+ String[] rewardSplit = reward.split(",");
+ if (rewardSplit.length != 2)
+ {
+ _log.warn(StringUtil.concat("PkHunterEvent: invalid config property ->PkHunterEventPkRewards \"", reward, "\""));
+ }
+ else
+ {
+ try
+ {
+ PKHUNTEREVENT_PK_REWARD.add(new int[]
+ {
+ Integer.parseInt(rewardSplit[0]),
+ Integer.parseInt(rewardSplit[1])
+ });
+ }
+ catch (NumberFormatException nfe)
+ {
+ if (!reward.isEmpty())
+ {
+ _log.warn(StringUtil.concat("PkHunterEvent: invalid config property -> PkHunterEventPkRewards \"", reward, "\""));
+ }
+ }
+ }
+ }
  // Load PvP L2Properties file (if exists)
  final PropertiesParser PVPSettings = new PropertiesParser(PVP_CONFIG_FILE);
 
diff --git a/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java b/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
index 555d525..f130f8f 100644
--- a/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
+++ b/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
@@ -194,6 +194,8 @@
 import com.l2jserver.gameserver.model.entity.Hero;
 import com.l2jserver.gameserver.model.entity.Instance;
 import com.l2jserver.gameserver.model.entity.L2Event;
+import com.l2jserver.gameserver.model.entity.PkHunterEvent;
+import com.l2jserver.gameserver.model.entity.PkHunterEventConditions;
 import com.l2jserver.gameserver.model.entity.Siege;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
 import com.l2jserver.gameserver.model.events.EventDispatcher;
@@ -5129,6 +5131,7 @@
  EventDispatcher.getInstance().notifyEventAsync(new OnPlayerPvPKill(pk, this), this);
 
  TvTEvent.onKill(killer, this);
+ PkHunterEventConditions.checkDie(killer, this);
 
  if (L2Event.isParticipant(pk))
  {
@@ -5266,6 +5269,11 @@
  if ((getKarma() <= 0) && (pk != null) && (pk.getClan() != null) && (getClan() != null) && (pk.getClan().isAtWarWith(getClanId())
  // || getClan().isAtWarWith(((L2PcInstance)killer).getClanId())
  ))
+ {
+ return;
+ }
+
+ if (PkHunterEvent.isPk(killer) && !Config.DROP_PKHUNTEREVENT)
  {
  return;
  }
@@ -5466,6 +5474,7 @@
  setPkKills(getPkKills() + 1);
  }
 
+ PkHunterEventConditions.checkPk(this, target);
  // Update player's UI.
  sendPacket(new UserInfo(this));
  sendPacket(new ExBrExtraUserInfo(this));
diff --git a/src/main/java/com/l2jserver/gameserver/model/entity/PkHunterEvent.java b/src/main/java/com/l2jserver/gameserver/model/entity/PkHunterEvent.java
new file mode 100644
index 0000000..63bf8c7
--- /dev/null
+++ b/src/main/java/com/l2jserver/gameserver/model/entity/PkHunterEvent.java
@@ -0,0 +1,175 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.model.entity;
+
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.util.Util;
+
+/**
+ * @author Wyatt
+ */
+
+public class PkHunterEvent
+{
+ private static boolean isActive = false;
+ private static L2PcInstance Pk = null;
+ private static int[] PkLocation =
+ {
+ 0,
+ 0,
+ 0
+ };
+
+ public static boolean isActive()
+ {
+ return isActive;
+ }
+
+ public static L2PcInstance getPk()
+ {
+ return Pk;
+ }
+
+ public static void setPk(L2PcInstance player)
+ {
+ Pk = player;
+ }
+
+ public static void setActive(Boolean active)
+ {
+ isActive = active;
+ }
+
+ public static void setPkLocation(int x, int y, int z)
+ {
+ PkLocation[0] = x;
+ PkLocation[1] = y;
+ PkLocation[2] = z;
+ }
+
+ public static int[] getPkLocation()
+ {
+ return PkLocation;
+ }
+
+ public static boolean isPk(L2Character pk)
+ {
+ if ((pk != null) && (getPk() != null) && pk.getName().equals(getPk().getName()))
+ {
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean isPkOnline()
+ {
+ if ((getPk() != null) && getPk().isOnline())
+ {
+ return true;
+ }
+ return false;
+ }
+
+ public static void sendLocationMessage(L2PcInstance activeChar)
+ {
+ if (isPkOnline())
+ {
+ L2PcInstance target = L2World.getInstance().getPlayer(PkHunterEvent.getPk().getName());
+ double angle = activeChar.getHeading() / 182.044444444;
+ double angle2 = Util.calculateAngleFrom(activeChar, target);
+ String location = "";
+ String distance = "";
+ double finalAngle = angle - angle2;
+
+ if (finalAngle < 0)
+ {
+ finalAngle += 360;
+ }
+
+ double octamore = 22.5;
+
+ if ((finalAngle >= (octamore * 15)) && (finalAngle < (octamore * 17)))
+ {
+ location = " infront of you";
+ }
+ else if ((finalAngle >= (octamore * 1)) && (finalAngle < (octamore * 3)))
+ {
+ location = " infront of you, on your left";
+ }
+ else if ((finalAngle >= (octamore * 3)) && (finalAngle < (octamore * 5)))
+ {
+ location = " on your left";
+ }
+ else if ((finalAngle >= (octamore * 5)) && (finalAngle < (octamore * 7)))
+ {
+ location = " behind you, on your left";
+ }
+ else if ((finalAngle >= (octamore * 7)) && (finalAngle < (octamore * 9)))
+ {
+ location = " behind you";
+ }
+ else if ((finalAngle >= (octamore * 9)) && (finalAngle < (octamore * 11)))
+ {
+ location = " behind you, on your right";
+ }
+ else if ((finalAngle >= (octamore * 11)) && (finalAngle < (octamore * 13)))
+ {
+ location = " on your right";
+ }
+ else if ((finalAngle >= (octamore * 13)) && (finalAngle < (octamore * 15)))
+ {
+ location = " infront of you, on your right";
+ }
+ else
+ {
+ location = " infront of you";
+ }
+
+ double dist = Util.calculateDistance(activeChar, target, false, true);
+
+ if (dist < 400)
+ {
+ distance = ", very close";
+ }
+ else if (dist < 1000)
+ {
+ distance = ", close";
+ }
+ else if (dist < 4000)
+ {
+ distance = ", at medium range";
+ }
+ else if (dist < 12000)
+ {
+ distance = ", quite some distance away";
+ }
+ else if (dist < 20000)
+ {
+ distance = ", far away";
+ }
+ else
+ {
+ distance = ", very very far away";
+ }
+ activeChar.sendMessage(target.getName() + " is" + location + " " + distance + ".");
+ }
+ else
+ {
+ activeChar.sendMessage("The PK is Offline now.");
+ }
+ }
+}
diff --git a/src/main/java/com/l2jserver/gameserver/model/entity/PkHunterEventConditions.java b/src/main/java/com/l2jserver/gameserver/model/entity/PkHunterEventConditions.java
new file mode 100644
index 0000000..dd1f243
--- /dev/null
+++ b/src/main/java/com/l2jserver/gameserver/model/entity/PkHunterEventConditions.java
@@ -0,0 +1,190 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.model.entity;
+
+import java.util.concurrent.ScheduledFuture;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.datatables.ItemTable;
+import com.l2jserver.gameserver.enums.Team;
+import com.l2jserver.gameserver.model.L2Object;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+import com.l2jserver.gameserver.util.Broadcast;
+import com.l2jserver.util.Rnd;
+
+/**
+ * @author Wyatt
+ */
+public class PkHunterEventConditions
+{
+ private static ScheduledFuture<?> _timerTask;
+
+ public static void checkFinishByMobs(L2PcInstance killer)
+ {
+ if (PkHunterEvent.isPk(killer) && Config.ENABLE_PKHUNTEREVENT)
+ {
+ if (killer.getKarma() == 0)
+ {
+ Broadcast.toAllOnlinePlayers("PkHunter Event ended. " + killer.getName() + " has survived.", true);
+ PkHunterEvent.setPk(null);
+ PkHunterEvent.setActive(false);
+ killer.setTeam(Team.NONE);
+ endTask();
+ rewardPk(killer);
+ }
+ }
+ }
+
+ public static void checkDie(L2Object killer, final L2PcInstance killed)
+ {
+ if (PkHunterEvent.isPk(killed) && Config.ENABLE_PKHUNTEREVENT)
+ {
+ if (killer instanceof L2PcInstance)
+ {
+ L2PcInstance kr = ((L2PcInstance) killer);
+ SystemMessage systemMessage = null;
+
+ for (int[] reward : Config.PKHUNTEREVENT_REWARD)
+ {
+ PcInventory inv = kr.getInventory();
+
+ if (ItemTable.getInstance().getTemplate(reward[0]).isStackable())
+ {
+ inv.addItem("PKHunter Event", reward[0], reward[1], kr, kr);
+
+ if (reward[1] > 1)
+ {
+ systemMessage = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S);
+ systemMessage.addItemName(reward[0]);
+ systemMessage.addInt(reward[1]);
+ }
+ else
+ {
+ systemMessage = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1);
+ systemMessage.addItemName(reward[0]);
+ }
+ kr.sendPacket(systemMessage);
+ }
+ else
+ {
+ for (int i = 0; i < reward[1]; ++i)
+ {
+ inv.addItem("PkHunter Event", reward[0], 1, kr, kr);
+ systemMessage = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1);
+ systemMessage.addItemName(reward[0]);
+ kr.sendPacket(systemMessage);
+ }
+ }
+ }
+ }
+ Broadcast.toAllOnlinePlayers("Pk Hunting Event: Event ended. " + killer.getName() + " killed the Pk.", true);
+ killed.setTeam(Team.NONE);
+ PkHunterEvent.setActive(false);
+ PkHunterEvent.setPk(null);
+ endTask();
+
+ ThreadPoolManager.getInstance().scheduleGeneral(() -> killed.setKarma(0), 100);
+ }
+ }
+
+ public static void checkPk(L2PcInstance killer, L2Character target)
+ {
+ if (Config.ENABLE_PKHUNTEREVENT && !PkHunterEvent.isActive())
+ {
+ switch (Rnd.get(1, Config.PKHUNTEREVENT_CHANCE))
+ {
+ case 1:
+ killer.setKarma(900000);
+ killer.setTeam(Team.RED);
+ PkHunterEvent.setActive(true);
+ PkHunterEvent.setPk(killer);
+ PkHunterEvent.setPkLocation(killer.getX(), killer.getY(), killer.getZ());
+ startEvent();
+ break;
+ }
+ }
+ }
+
+ public static void endCoward(L2PcInstance activeChar)
+ {
+ if (PkHunterEvent.isActive())
+ {
+ PkHunterEvent.setActive(false);
+ PkHunterEvent.setPk(null);
+ Broadcast.toAllOnlinePlayers("PkHunter Event ended.", true);
+ endTask();
+ }
+ activeChar.setKarma(10000);
+ activeChar.sendMessage("You karma updated to 10.000 due to be a coward, PkHunter Event ended.");
+ }
+
+ public static void startEvent()
+ {
+ Broadcast.toAllOnlinePlayers("PkHunter Event started: " + PkHunterEvent.getPk().getName() + " is the PK, write .gopk to teleport where the pk was done. Write .pkinfo to know if you are far or near to him.", true);
+ _timerTask = ThreadPoolManager.getInstance().scheduleGeneral(new PkHunterEventTask(), Config.TIME_PKHUNTEREVENT * 60000);
+ }
+
+ static void endTask()
+ {
+ if (_timerTask != null)
+ {
+ _timerTask.cancel(false);
+ }
+ _timerTask = null;
+ }
+
+ public static void rewardPk(L2PcInstance kr)
+ {
+ SystemMessage systemMessage = null;
+
+ for (int[] reward : Config.PKHUNTEREVENT_PK_REWARD)
+ {
+ PcInventory inv = kr.getInventory();
+
+ if (ItemTable.getInstance().getTemplate(reward[0]).isStackable())
+ {
+ inv.addItem("PKHunter Event", reward[0], reward[1], kr, kr);
+
+ if (reward[1] > 1)
+ {
+ systemMessage = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S);
+ systemMessage.addItemName(reward[0]);
+ systemMessage.addInt(reward[1]);
+ }
+ else
+ {
+ systemMessage = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1);
+ systemMessage.addItemName(reward[0]);
+ }
+ kr.sendPacket(systemMessage);
+ }
+ else
+ {
+ for (int i = 0; i < reward[1]; ++i)
+ {
+ inv.addItem("PkHunter Event", reward[0], 1, kr, kr);
+ systemMessage = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1);
+ systemMessage.addItemName(reward[0]);
+ kr.sendPacket(systemMessage);
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/l2jserver/gameserver/model/entity/PkHunterEventTask.java b/src/main/java/com/l2jserver/gameserver/model/entity/PkHunterEventTask.java
new file mode 100644
index 0000000..3fe1ada
--- /dev/null
+++ b/src/main/java/com/l2jserver/gameserver/model/entity/PkHunterEventTask.java
@@ -0,0 +1,40 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jserver.gameserver.model.entity;
+
+import com.l2jserver.gameserver.enums.Team;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.util.Broadcast;
+
+/**
+ * @author Wyatt
+ */
+public class PkHunterEventTask implements Runnable
+{
+ @Override
+ public void run()
+ {
+ if (PkHunterEvent.isPkOnline())
+ {
+ L2PcInstance kr = PkHunterEvent.getPk();
+ kr.setKarma(0);
+ kr.setTeam(Team.NONE);
+ PkHunterEventConditions.rewardPk(kr);
+ }
+ Broadcast.toAllOnlinePlayers("PkHunter Event ended. " + PkHunterEvent.getPk().getName() + " has survived.", true);
+ PkHunterEvent.setActive(false);
+ PkHunterEvent.setPk(null);
+ }
+}
diff --git a/src/main/java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java b/src/main/java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java
index 06deacb..5c25cad 100644
--- a/src/main/java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java
+++ b/src/main/java/com/l2jserver/gameserver/model/olympiad/OlympiadManager.java
@@ -31,6 +31,7 @@
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.entity.PkHunterEvent;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -235,6 +236,12 @@
  return false;
  }
 
+ if (PkHunterEvent.isPk(player))
+ {
+ player.sendMessage("You can't participate in Olympiads while in event.");
+ return false;
+ }
+
  switch (type)
  {
  case CLASSED:
diff --git a/src/main/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java b/src/main/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
index 08af29e..e3e05d0 100644
--- a/src/main/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
+++ b/src/main/java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
@@ -51,6 +51,7 @@
 import com.l2jserver.gameserver.model.entity.Fort;
 import com.l2jserver.gameserver.model.entity.FortSiege;
 import com.l2jserver.gameserver.model.entity.L2Event;
+import com.l2jserver.gameserver.model.entity.PkHunterEventConditions;
 import com.l2jserver.gameserver.model.entity.Siege;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
 import com.l2jserver.gameserver.model.entity.clanhall.AuctionableHall;
@@ -207,6 +208,13 @@
  SkillTreesData.getInstance().addSkills(activeChar, true);
  }
  }
+ else
+ {
+ if ((activeChar.getKarma() >= 500000) && !activeChar.isCursedWeaponEquipped() && Config.ENABLE_PKHUNTEREVENT)
+ {
+ PkHunterEventConditions.endCoward(activeChar);
+ }
+ }
 
  // Set dead status if applies
  if (activeChar.getCurrentHp() < 0.5)
diff --git a/src/main/java/com/l2jserver/gameserver/network/clientpackets/Logout.java b/src/main/java/com/l2jserver/gameserver/network/clientpackets/Logout.java
index 460d77c..e1c72ca 100644
--- a/src/main/java/com/l2jserver/gameserver/network/clientpackets/Logout.java
+++ b/src/main/java/com/l2jserver/gameserver/network/clientpackets/Logout.java
@@ -26,6 +26,7 @@
 import com.l2jserver.gameserver.SevenSignsFestival;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.L2Event;
+import com.l2jserver.gameserver.model.entity.PkHunterEvent;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
@@ -43,7 +44,7 @@
  @Override
  protected void readImpl()
  {
-
+
  }
 
  @Override
@@ -65,6 +66,13 @@
  return;
  }
 
+ if (PkHunterEvent.isPk(player))
+ {
+ player.sendPacket(ActionFailed.STATIC_PACKET);
+ player.sendMessage("You can't logout while in event.");
+ return;
+ }
+
  if (player.isLocked())
  {
  _log.warning("Player " + player.getName() + " tried to logout during class change.");
diff --git a/src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java b/src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java
index 7ea3781..9070674 100644
--- a/src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java
+++ b/src/main/java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java
@@ -28,9 +28,11 @@
 import com.l2jserver.gameserver.instancemanager.AntiFeedManager;
 import com.l2jserver.gameserver.model.L2Party;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.entity.PkHunterEvent;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.L2GameClient.GameClientState;
 import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.CharSelectionInfo;
 import com.l2jserver.gameserver.network.serverpackets.RestartResponse;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
@@ -66,6 +68,13 @@
  return;
  }
 
+ if (PkHunterEvent.isPk(player))
+ {
+ player.sendPacket(ActionFailed.STATIC_PACKET);
+ sendPacket(RestartResponse.valueOf(false));
+ return;
+ }
+
  if (player.isLocked())
  {
  _log.warning("Player " + player.getName() + " tried to restart during class change.");

CitarDATA:

diff --git a/dist/game/data/scripts/handlers/effecthandlers/Escape.java b/dist/game/data/scripts/handlers/effecthandlers/Escape.java
index d692606..8f0215f 100644
--- a/dist/game/data/scripts/handlers/effecthandlers/Escape.java
+++ b/dist/game/data/scripts/handlers/effecthandlers/Escape.java
@@ -24,6 +24,7 @@
 import com.l2jserver.gameserver.model.conditions.Condition;
 import com.l2jserver.gameserver.model.effects.AbstractEffect;
 import com.l2jserver.gameserver.model.effects.L2EffectType;
+import com.l2jserver.gameserver.model.entity.PkHunterEvent;
 import com.l2jserver.gameserver.model.skills.BuffInfo;
 
 /**
@@ -61,6 +62,12 @@
  return;
  }
 
+ if (PkHunterEvent.isPk(info.getEffected()))
+ {
+ info.getEffected().sendMessage("You can't use escape skills while in event.");
+ return;
+ }
+
  info.getEffected().teleToLocation(MapRegionManager.getInstance().getTeleToLocation(info.getEffected(), _escapeType), true);
  info.getEffected().getActingPlayer().setIsIn7sDungeon(false);
  info.getEffected().setInstanceId(0);

CitarOTHER:

Index: java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillMount.java
===================================================================
--- java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillMount.java   (revision 5822)
+++ java/com/l2jserver/gameserver/model/skills/l2skills/L2SkillMount.java   (working copy)
@@ -18,6 +18,7 @@
 import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.entity.PkHunterEvent;
 import com.l2jserver.gameserver.model.entity.TvTEvent;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -54,6 +55,12 @@
          return;
       }
       
+      if (PkHunterEvent.isPk(activePlayer))
+      {
+         activePlayer.sendMessage("You can't mount while in event.");
+         return;
+      }
+     
       // Dismount Action
       if (_npcId == 0)
       {
Index: java/com/l2jserver/gameserver/model/actor/L2Attackable.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/L2Attackable.java   (revision 5822)
+++ java/com/l2jserver/gameserver/model/actor/L2Attackable.java   (working copy)
@@ -52,6 +52,7 @@
 import com.l2jserver.gameserver.model.actor.knownlist.AttackableKnownList;
 import com.l2jserver.gameserver.model.actor.status.AttackableStatus;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.model.entity.PkHunterEventConditions;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 import com.l2jserver.gameserver.model.items.L2Item;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
@@ -540,6 +541,8 @@
         
          if (player != null)
          {
+            PkHunterEventConditions.checkFinishByMobs(player);
+           
             if (getTemplate().getEventQuests(Quest.QuestEventType.ON_KILL) != null)
             {
                for (Quest quest : getTemplate().getEventQuests(Quest.QuestEventType.ON_KILL))