Secret Experience

Secret Experience (https://secretexperience.net/index.php)
-   [Lineage] Java Mods (https://secretexperience.net/forumdisplay.php?f=636)
-   -   [L2JServer] Anti-Pk Protection (https://secretexperience.net/showthread.php?t=20747)

Guma 21-04-2010 10:32 PM

Anti-Pk Protection
 
Anti-Pk para player lvl baixo
basta fazer a sua configuracao

Código:

Index: java/config/l2jmods.properties
===================================================================
--- java/config/l2jmods.properties        (revision 2814)
+++ java/config/l2jmods.properties        (working copy)
@@ -170,4 +170,25 @@
 # - mana potion (item id 728), using skill id 2005
 # Please, notice this is just core support, server administrator is requested to
 # edit skill 2005 on DataPack to get them working
-EnableManaPotionSupport = False
\ No newline at end of file
+EnableManaPotionSupport = False
+
+#---------------------------------------------------------------
+# PK protection
+#---------------------------------------------------------------
+# Disables attacking char if the attacker's lvl minus victim's lvl is over
+# specified difference and the target is not flagged. For example, if you want
+# to disable PK'ing chars that are more than 20 lvls below attacker's lvl, set
+# the value to 20. Setting the value to 0 disables the feature.
+DisableAttackIfLvlDifferenceOver=0
+# If player has more than specified number of PKs in the monitored period,
+# he/she is automatically punished. If set to zero, this feature is disabled.
+PunishPKPlayerIfPKsOver=0
+# For what period (in seconds) the PKs should be monitored
+PKMonitorPeriod=3600
+# Punisment type:
+#  jail - char will be jailed
+PKPunishmentType=jail
+# Punishment length (in seconds)
+# If punishment type is jail then the punishment period should be divisable by
+# 60 as jail punishment is counted in minutes
+PKPunishmentPeriod=3600
\ No newline at end of file
Index: java/net/sf/l2j/Config.java
===================================================================
--- java/net/sf/l2j/Config.java        (revision 2814)
+++ java/net/sf/l2j/Config.java        (working copy)
@@ -561,6 +561,11 @@
    public static boolean        L2JMOD_ENABLE_WAREHOUSESORTING_PRIVATE;
    public static boolean        L2JMOD_ENABLE_WAREHOUSESORTING_FREIGHT;
    public static boolean        L2JMOD_ENABLE_MANA_POTIONS_SUPPORT;
+    public static int          L2JMOD_DISABLE_ATTACK_IF_LVL_DIFFERENCE_OVER;
+    public static int          L2JMOD_PUNISH_PK_PLAYER_IF_PKS_OVER;
+    public static long          L2JMOD_PK_MONITOR_PERIOD;
+    public static String        L2JMOD_PK_PUNISHMENT_TYPE;
+    public static long          L2JMOD_PK_PUNISHMENT_PERIOD;
   
    /** ************************************************** **/
        /** L2JMods Settings -End                              **/
@@ -1768,6 +1773,12 @@
                        L2JMOD_ENABLE_WAREHOUSESORTING_CLAN    = Boolean.valueOf(L2JModSettings.getProperty("EnableWarehouseSortingClan", "False"));
                        L2JMOD_ENABLE_WAREHOUSESORTING_PRIVATE  = Boolean.valueOf(L2JModSettings.getProperty("EnableWarehouseSortingPrivate", "False"));
                        L2JMOD_ENABLE_WAREHOUSESORTING_FREIGHT  = Boolean.valueOf(L2JModSettings.getProperty("EnableWarehouseSortingFreight", "False"));
+
+                        L2JMOD_DISABLE_ATTACK_IF_LVL_DIFFERENCE_OVER = Integer.parseInt(L2JModSettings.getProperty("DisableAttackIfLvlDifferenceOver", "0"));
+                        L2JMOD_PUNISH_PK_PLAYER_IF_PKS_OVER = Integer.parseInt(L2JModSettings.getProperty("PunishPKPlayerIfPKsOver", "0"));
+                        L2JMOD_PK_MONITOR_PERIOD = Long.parseLong(L2JModSettings.getProperty("PKMonitorPeriod", "3600"));
+                        L2JMOD_PK_PUNISHMENT_TYPE = L2JModSettings.getProperty("PKPunishmentType", "jail");
+                        L2JMOD_PK_PUNISHMENT_PERIOD = Long.parseLong(L2JModSettings.getProperty("PKPunishmentPeriod", "3600"));
       
                        if (TVT_EVENT_PARTICIPATION_NPC_ID == 0)
                        {
@@ -2310,6 +2321,13 @@
        // L2JMod Mana potion
        else if (pName.equalsIgnoreCase("EnableManaPotionSupport")) L2JMOD_ENABLE_MANA_POTIONS_SUPPORT = Boolean.parseBoolean(pValue);
 
+        // L2JMOD Disable PK'ing Low Lvls
+        else if (pName.equalsIgnoreCase("DisableAttackIfLvlDifferenceOver")) L2JMOD_DISABLE_ATTACK_IF_LVL_DIFFERENCE_OVER = Integer.parseInt(pValue);
+        else if (pName.equalsIgnoreCase("PunishPKPlayerIfPKsOver")) L2JMOD_PUNISH_PK_PLAYER_IF_PKS_OVER = Integer.parseInt(pValue);
+        else if (pName.equalsIgnoreCase("PKMonitorPeriod")) L2JMOD_PK_MONITOR_PERIOD = Long.parseLong(pValue);
+        else if (pName.equalsIgnoreCase("PKPunishmentType")) L2JMOD_PK_PUNISHMENT_TYPE = pValue;
+        else if (pName.equalsIgnoreCase("PKPunishmentPeriod")) L2JMOD_PK_PUNISHMENT_PERIOD = Long.parseLong(pValue);
+
        // PvP settings
        else if (pName.equalsIgnoreCase("MinKarma")) KARMA_MIN_KARMA = Integer.parseInt(pValue);
        else if (pName.equalsIgnoreCase("MaxKarma")) KARMA_MAX_KARMA = Integer.parseInt(pValue);
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java        (revision 2814)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java        (working copy)
@@ -307,10 +307,16 @@
                @Override
                public void doAttack(L2Character target)
        {
+                    if (target instanceof L2PcInstance &&
+                            isPKProtected((L2PcInstance) target)) {
+                        sendMessage("You cannot attack player with too low level.");
+                        sendPacket(ActionFailed.STATIC_PACKET);
+                    } else {
                        super.doAttack(target);
 
                        // cancel the recent fake-death protection instantly if the player attacks or casts spells
                        getPlayer().setRecentFakeDeath(false);
+                    }
                }
 
                @Override
@@ -760,6 +766,9 @@
        private boolean _marryrequest = false;
        private boolean _marryaccepted = false;
 
+        /** L2JMOD PK protection **/
+        private List<Long> _pKsCounter = new FastList<Long>();
+
    /** Skill casting information (used to queue when several skills are cast in a short time) **/
    public class SkillDat
    {
@@ -5334,6 +5343,32 @@
 
        // Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
        sendPacket(new UserInfo(this));
+
+        /** Mass PK protection stuff **/
+        if (Config.L2JMOD_PUNISH_PK_PLAYER_IF_PKS_OVER > 0) {
+            // Remove expired PKs
+            for (final Long pKTime : _pKsCounter) {
+                if (System.currentTimeMillis() - pKTime.longValue() >
+                        Config.L2JMOD_PK_MONITOR_PERIOD * 1000) {
+                    _pKsCounter.remove(pKTime);
+                } else {
+                    // We reached timestamps that are still valid
+                    break;
+                }
+            }
+
+            // Add new timestamp
+            _pKsCounter.add(Long.valueOf(System.currentTimeMillis()));
+
+            // If PK count is greater than limit then punish the char
+            if (_pKsCounter.size() > Config.L2JMOD_PUNISH_PK_PLAYER_IF_PKS_OVER) {
+                if ("jail".equals(Config.L2JMOD_PK_PUNISHMENT_TYPE)) {
+                    setPunishLevel(PunishLevel.JAIL,
+                            (int) (Config.L2JMOD_PK_PUNISHMENT_PERIOD / 60));
+                    sendMessage("Jailed for excessive PK.");
+                }
+            }
+        }
    }
 
        public int calculateKarmaLost(long exp)
@@ -8042,6 +8077,14 @@
                            break;
                }
 
+                if (target != this && target instanceof L2PcInstance &&
+                        skill.isOffensive() && isPKProtected((L2PcInstance) target)) {
+                    setIsCastingNow(false);
+                    sendMessage("You cannot attack player with too low level.");
+                    sendPacket(ActionFailed.STATIC_PACKET);
+                    return;
+                }
+
                // Notify the AI with AI_INTENTION_CAST and target
                getAI().setIntention(CtrlIntention.AI_INTENTION_CAST, skill, target);
    }
@@ -8578,6 +8621,43 @@
                return true;
        }
 
+        /**
+        * Checks whether <code>target</code> is PK protected when attacking
+        * by <code>this</code>. <code>target</code> is PK protected if it is
+        * not flagged, has no karma and difference between players lvl and
+        * target's lvl is above {@link
+        * net.sf.l2j.Config#L2JMOD_DISABLE_ATTACK_IF_LVL_DIFFERENCE_OVER}.
+        * <code>target</code> is not protected if in mutual war with attacker's
+        * clan or if in siege zone or pvp zone.
+        *
+        * @param target attack target
+        *
+        * @return true if target is PK protected, otherwise false
+        */
+        public boolean isPKProtected(final L2PcInstance target) {
+            if (Config.L2JMOD_DISABLE_ATTACK_IF_LVL_DIFFERENCE_OVER > 0 &&
+                    target instanceof L2PcInstance) {
+                final L2PcInstance targetPlayer = (L2PcInstance) target;
+
+                if (targetPlayer.isInsideZone(L2Character.ZONE_SIEGE) ||
+                        targetPlayer.isInsideZone(L2Character.ZONE_PVP) ||
+                        (getClan() != null && targetPlayer.getClan() != null &&
+                        targetPlayer.getClan().isAtWarWith(getClanId()))) {
+                    return false;
+                }
+
+                if (targetPlayer.getPvpFlag() == 0 &&
+                        targetPlayer.getKarma() == 0 &&
+                        targetPlayer.getLevel() +
+                        Config.L2JMOD_DISABLE_ATTACK_IF_LVL_DIFFERENCE_OVER <
+                        getLevel()) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
        /**
          * Return True if the L2PcInstance is a Mage.<BR><BR>
          */


nettao 29-05-2010 01:32 PM

Pode me dizer onde eu coloco este codigo ?

out 29-05-2010 02:24 PM

Em
java/config/l2jmods.properties
Aqui vai um tuto.
[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]


Horários baseados na GMT -3. Agora são 01:10 AM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.