Dunno if that one is shared its for acis 370 i found that on a br ? website its antifeed pvp protection
unfortunately it works exept this part
+# If character died faster than timeout - pvp/pk points for killer will not increase +# and clan reputation will not be transferred +AntiFeedInterval = 120
any thoughts ?
*code inside Spoiler*
Spoiler
### Eclipse Workspace Patch 1.0 #P aCis_gameserver Index: java/net/sf/l2j/gameserver/GameServer.java =================================================================== --- java/net/sf/l2j/gameserver/GameServer.java (revision 13) +++ java/net/sf/l2j/gameserver/GameServer.java (working copy) @@ -81,6 +81,7 @@ import net.sf.l2j.gameserver.instancemanager.SevenSignsFestival; import net.sf.l2j.gameserver.instancemanager.ZoneManager; import net.sf.l2j.gameserver.instancemanager.games.MonsterRace; +import net.sf.l2j.gameserver.instancemanager.AntiFeedManager; import net.sf.l2j.gameserver.model.World; import net.sf.l2j.gameserver.model.entity.Hero; import net.sf.l2j.gameserver.model.olympiad.Olympiad; @@ -257,7 +258,10 @@ StringUtil.printSection("Four Sepulchers"); FourSepulchersManager.getInstance().init(); - + //ANTIFEED MANAGER + StringUtil.printSection("AntiFeedManager"); + AntiFeedManager.getInstance().registerEvent(AntiFeedManager.GAME_ID); + StringUtil.printSection("Quests & Scripts"); ScriptManager.getInstance(); Index: java/net/sf/l2j/Config.java =================================================================== --- java/net/sf/l2j/Config.java (revision 12) +++ java/net/sf/l2j/Config.java (working copy) @@ -465,6 +465,12 @@ public static boolean STORE_SKILL_COOLTIME; public static int MAX_BUFFS_AMOUNT; + /** AntiFeed Protection by Thug */ + public static boolean ANTIFEED_ENABLE; + public static boolean ANTIFEED_DUALBOX; + public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX; + public static int ANTIFEED_INTERVAL; + /** Instance */ public static int INSTANCE_FINISH_TIME; public static boolean RESTORE_PLAYER_INSTANCE; @@ -1167,6 +1173,11 @@ MAX_BUFFS_AMOUNT = players.getProperty("MaxBuffsAmount", 20); STORE_SKILL_COOLTIME = players.getProperty("StoreSkillCooltime", true); + //ANTIFEED MANAGER + ANTIFEED_ENABLE = players.getProperty("AntiFeedEnable", false); + ANTIFEED_DUALBOX = players.getProperty("AntiFeedDualbox", true); + ANTIFEED_DISCONNECTED_AS_DUALBOX = players.getProperty("AntiFeedDisconnectedAsDualbox", true); + ANTIFEED_INTERVAL = players.getProperty("AntiFeedInterval", 120) * 1000; INSTANCE_FINISH_TIME = players.getProperty("DefaultFinishTime", 300) * 1000; RESTORE_PLAYER_INSTANCE = players.getProperty("RestorePlayerInstance", false); Index: java/net/sf/l2j/gameserver/instancemanager/AntiFeedManager.java =================================================================== --- java/net/sf/l2j/gameserver/instancemanager/AntiFeedManager.java (nonexistent) +++ java/net/sf/l2j/gameserver/instancemanager/AntiFeedManager.java (working copy) @@ -0,0 +1,218 @@ +/* + * 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 net.sf.l2j.gameserver.instancemanager; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicInteger; + +import net.sf.l2j.Config; +import net.sf.l2j.commons.concurrent.ThreadPool; +import net.sf.l2j.gameserver.model.actor.Creature; +import net.sf.l2j.gameserver.model.actor.instance.Player; +import net.sf.l2j.gameserver.network.L2GameClient; + +/** + * @author Thug + * + */ +public final class AntiFeedManager +{ + public static final int GAME_ID = 0; + + final Map<Integer, Long> _lastDeathTimes = new ConcurrentHashMap<>(); + private final Map<Integer, Map<Integer, AtomicInteger>> _eventIPs = new ConcurrentHashMap<>(); + + protected AntiFeedManager() + { + } + + /** + * Set time of the last player's death to current + * @param objectId Player's objectId + */ + public final void setLastDeathTime(int objectId) + { + _lastDeathTimes.put(objectId, System.currentTimeMillis()); + ThreadPool.schedule(new DeleteDeathTime(objectId), 120000); + } + + private class DeleteDeathTime implements Runnable + { + int id; + public DeleteDeathTime(int objectId) + { + id = objectId; + } + + @Override + public void run() + { + _lastDeathTimes.remove(id); + } + } + + /** + * Check if current kill should be counted as non-feeded. + * @param attacker Attacker character + * @param target Target character + * @return True if kill is non-feeded. + */ + public final boolean check(Creature attacker, Creature target) + { + if (!Config.ANTIFEED_ENABLE) + { + return true; + } + + if (target == null) + { + return false; + } + + final Player targetPlayer = target.getActingPlayer(); + if (targetPlayer == null) + { + return false; + } + + if ((Config.ANTIFEED_INTERVAL > 0) && _lastDeathTimes.containsKey(targetPlayer.getObjectId())) + { + if ((System.currentTimeMillis() - _lastDeathTimes.get(targetPlayer.getObjectId())) < Config.ANTIFEED_INTERVAL) + { + return false; + } + } + + if (Config.ANTIFEED_DUALBOX && (attacker != null)) + { + final Player attackerPlayer = attacker.getActingPlayer(); + if (attackerPlayer == null) + { + return false; + } + + final L2GameClient targetClient = targetPlayer.getClient(); + final L2GameClient attackerClient = attackerPlayer.getClient(); + if ((targetClient == null) || (attackerClient == null) || targetClient.isDetached() || attackerClient.isDetached()) + { + return !Config.ANTIFEED_DISCONNECTED_AS_DUALBOX; + } + + return !targetClient.getConnection().getInetAddress().equals(attackerClient.getConnection().getInetAddress()); + } + + return true; + } + + /** + * Clears all timestamps + */ + public final void clear() + { + _lastDeathTimes.clear(); + } + + /** + * Register new event for dualbox check. Should be called only once. + * @param eventId + */ + public final void registerEvent(int eventId) + { + _eventIPs.putIfAbsent(eventId, new ConcurrentHashMap<Integer, AtomicInteger>()); + } + + /** + * Decreasing number of active connection from player's IP address + * @param eventId + * @param player + * @return true if success and false if any problem detected. + */ + public final boolean removePlayer(int eventId, Player player) + { + return removeClient(eventId, player.getClient()); + } + + /** + * Decreasing number of active connection from player's IP address + * @param eventId + * @param client + * @return true if success and false if any problem detected. + */ + public final boolean removeClient(int eventId, L2GameClient client) + { + if (client == null) + { + return false; // unable to determine IP address + } + + final Map<Integer, AtomicInteger> event = _eventIPs.get(eventId); + if (event == null) + { + return false; // no such event registered + } + + final Integer addrHash = Integer.valueOf(client.getConnection().getInetAddress().hashCode()); + + return event.computeIfPresent(addrHash, (k, v) -> + { + if ((v == null) || (v.decrementAndGet() == 0)) + { + return null; + } + return v; + }) != null; + } + + /** + * Remove player connection IP address from all registered events lists. + * @param client + */ + public final void onDisconnect(L2GameClient client) + { + if (client == null) + { + return; + } + + _eventIPs.forEach((k, v) -> + { + removeClient(k, client); + }); + } + + /** + * Clear all entries for this eventId. + * @param eventId + */ + public final void clear(int eventId) + { + final Map<Integer, AtomicInteger> event = _eventIPs.get(eventId); + if (event != null) + { + event.clear(); + } + } + + public static final AntiFeedManager getInstance() + { + return SingletonHolder._instance; + } + + private static class SingletonHolder + { + protected static final AntiFeedManager _instance = new AntiFeedManager(); + } +} \ No newline at end of file Index: java/net/sf/l2j/gameserver/model/actor/instance/Player.java =================================================================== --- java/net/sf/l2j/gameserver/model/actor/instance/Player.java (revision 16) +++ java/net/sf/l2j/gameserver/model/actor/instance/Player.java (working copy) @@ -24,9 +24,11 @@ import erengine.ErPlayerBonuses; import erengine.ErUtils; + import net.sf.l2j.commons.concurrent.ThreadPool; import net.sf.l2j.commons.math.MathUtil; import net.sf.l2j.commons.random.Rnd; + import museum.MuseumPlayer; import net.sf.l2j.Config; @@ -50,6 +52,7 @@ import net.sf.l2j.gameserver.handler.IItemHandler; import net.sf.l2j.gameserver.handler.ItemHandler; import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEditChar; +import net.sf.l2j.gameserver.instancemanager.AntiFeedManager; import net.sf.l2j.gameserver.instancemanager.CastleManager; import net.sf.l2j.gameserver.instancemanager.CoupleManager; import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager; @@ -246,6 +249,7 @@ import net.sf.l2j.gameserver.templates.skills.L2EffectType; import net.sf.l2j.gameserver.templates.skills.L2SkillType; import net.sf.l2j.gameserver.util.Broadcast; + import vote.VotingPlayer; /** @@ -3964,7 +3964,8 @@ { // PK Points are increased only if you kill a player. //erlandys museum - if (target instanceof Player) { + if (target instanceof Player && AntiFeedManager.getInstance().check(this, target)) + { setPkKills(getPkKills() + 1); //erlandys museum ((Player) target).getMuseumPlayer().addData("pk_defeats", 1); @@ -3721,12 +3725,15 @@ // if clans got mutual war, then use the reputation calcul if (_clan.isAtWarWith(pk.getClanId()) && pk.getClan().isAtWarWith(_clan.getClanId())) { - // when your reputation score is 0 or below, the other clan cannot acquire any reputation points - if (getClan().getReputationScore() > 0) - pk.getClan().addReputationScore(1); - // when the opposing sides reputation score is 0 or below, your clans reputation score doesn't decrease - if (pk.getClan().getReputationScore() > 0) - _clan.takeReputationScore(1); + if (AntiFeedManager.getInstance().check(killer, this)) + { + // when your reputation score is 0 or below, the other clan cannot acquire any reputation points + if (getClan().getReputationScore() > 0) + pk.getClan().addReputationScore(1); + // when the opposing sides reputation score is 0 or below, your clans reputation score doesn't decrease + if (pk.getClan().getReputationScore() > 0) + _clan.takeReputationScore(1); + } } } } Index: config/players.properties =================================================================== --- config/players.properties (revision 12) +++ config/players.properties (working copy) @@ -284,4 +284,23 @@ # When a player dies, is removed from instance after a fixed period of time. # Time in seconds. # Default: 60 -EjectDeadPlayerTime = 60 \ No newline at end of file +EjectDeadPlayerTime = 60 + +# ================================================================ +# Anti feed protection +# ================================================================ + +# This option will enable antifeed for pvp/pk/clanrep points +AntiFeedEnable = True + +# If set to True, kills from dualbox will not increase pvp/pk points +# and clan reputation will not be transferred +AntiFeedDualbox = False + +# If set to True, server will count disconnected (unable to determine ip address) +# as dualbox +AntiFeedDisconnectedAsDualbox = False + +# If character died faster than timeout - pvp/pk points for killer will not increase +# and clan reputation will not be transferred +AntiFeedInterval = 120 \ No newline at end of file
hello everyone !
I need help with a l2script Rev H5-Salvation/Classic build. I compiled the project, installed everything but I can't log in to the server, it won't log me in. I tried a thousand ways without good results. I leave you the error when logging in either with the H5-Salvation Client.
ERROR ---> WARN: IPBANMANAGER ---> IP !!!!
I'm waiting for help! Thank you!
Hello !
I have a problem when connecting to the pack with the Salvation client, it blocks my IP, I see that the account is created in the database but it remains logged in.
Any idea what it could be? ALso with H5 CLient !
Thank you !
Question
Xenokage
Dunno if that one is shared its for acis 370 i found that on a br ? website its antifeed pvp protection
unfortunately it works exept this part
+# If character died faster than timeout - pvp/pk points for killer will not increase
+# and clan reputation will not be transferred
+AntiFeedInterval = 120
any thoughts ?
*code inside Spoiler*
### Eclipse Workspace Patch 1.0
#P aCis_gameserver
Index: java/net/sf/l2j/gameserver/GameServer.java
===================================================================
--- java/net/sf/l2j/gameserver/GameServer.java (revision 13)
+++ java/net/sf/l2j/gameserver/GameServer.java (working copy)
@@ -81,6 +81,7 @@
import net.sf.l2j.gameserver.instancemanager.SevenSignsFestival;
import net.sf.l2j.gameserver.instancemanager.ZoneManager;
import net.sf.l2j.gameserver.instancemanager.games.MonsterRace;
+import net.sf.l2j.gameserver.instancemanager.AntiFeedManager;
import net.sf.l2j.gameserver.model.World;
import net.sf.l2j.gameserver.model.entity.Hero;
import net.sf.l2j.gameserver.model.olympiad.Olympiad;
@@ -257,7 +258,10 @@
StringUtil.printSection("Four Sepulchers");
FourSepulchersManager.getInstance().init();
-
+ //ANTIFEED MANAGER
+ StringUtil.printSection("AntiFeedManager");
+ AntiFeedManager.getInstance().registerEvent(AntiFeedManager.GAME_ID);
+
StringUtil.printSection("Quests & Scripts");
ScriptManager.getInstance();
Index: java/net/sf/l2j/Config.java
===================================================================
--- java/net/sf/l2j/Config.java (revision 12)
+++ java/net/sf/l2j/Config.java (working copy)
@@ -465,6 +465,12 @@
public static boolean STORE_SKILL_COOLTIME;
public static int MAX_BUFFS_AMOUNT;
+ /** AntiFeed Protection by Thug */
+ public static boolean ANTIFEED_ENABLE;
+ public static boolean ANTIFEED_DUALBOX;
+ public static boolean ANTIFEED_DISCONNECTED_AS_DUALBOX;
+ public static int ANTIFEED_INTERVAL;
+
/** Instance */
public static int INSTANCE_FINISH_TIME;
public static boolean RESTORE_PLAYER_INSTANCE;
@@ -1167,6 +1173,11 @@
MAX_BUFFS_AMOUNT = players.getProperty("MaxBuffsAmount", 20);
STORE_SKILL_COOLTIME = players.getProperty("StoreSkillCooltime", true);
+ //ANTIFEED MANAGER
+ ANTIFEED_ENABLE = players.getProperty("AntiFeedEnable", false);
+ ANTIFEED_DUALBOX = players.getProperty("AntiFeedDualbox", true);
+ ANTIFEED_DISCONNECTED_AS_DUALBOX = players.getProperty("AntiFeedDisconnectedAsDualbox", true);
+ ANTIFEED_INTERVAL = players.getProperty("AntiFeedInterval", 120) * 1000;
INSTANCE_FINISH_TIME = players.getProperty("DefaultFinishTime", 300) * 1000;
RESTORE_PLAYER_INSTANCE = players.getProperty("RestorePlayerInstance", false);
Index: java/net/sf/l2j/gameserver/instancemanager/AntiFeedManager.java
===================================================================
--- java/net/sf/l2j/gameserver/instancemanager/AntiFeedManager.java (nonexistent)
+++ java/net/sf/l2j/gameserver/instancemanager/AntiFeedManager.java (working copy)
@@ -0,0 +1,218 @@
+/*
+ * 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 net.sf.l2j.gameserver.instancemanager;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import net.sf.l2j.Config;
+import net.sf.l2j.commons.concurrent.ThreadPool;
+import net.sf.l2j.gameserver.model.actor.Creature;
+import net.sf.l2j.gameserver.model.actor.instance.Player;
+import net.sf.l2j.gameserver.network.L2GameClient;
+
+/**
+ * @author Thug
+ *
+ */
+public final class AntiFeedManager
+{
+ public static final int GAME_ID = 0;
+
+ final Map<Integer, Long> _lastDeathTimes = new ConcurrentHashMap<>();
+ private final Map<Integer, Map<Integer, AtomicInteger>> _eventIPs = new ConcurrentHashMap<>();
+
+ protected AntiFeedManager()
+ {
+ }
+
+ /**
+ * Set time of the last player's death to current
+ * @param objectId Player's objectId
+ */
+ public final void setLastDeathTime(int objectId)
+ {
+ _lastDeathTimes.put(objectId, System.currentTimeMillis());
+ ThreadPool.schedule(new DeleteDeathTime(objectId), 120000);
+ }
+
+ private class DeleteDeathTime implements Runnable
+ {
+ int id;
+ public DeleteDeathTime(int objectId)
+ {
+ id = objectId;
+ }
+
+ @Override
+ public void run()
+ {
+ _lastDeathTimes.remove(id);
+ }
+ }
+
+ /**
+ * Check if current kill should be counted as non-feeded.
+ * @param attacker Attacker character
+ * @param target Target character
+ * @return True if kill is non-feeded.
+ */
+ public final boolean check(Creature attacker, Creature target)
+ {
+ if (!Config.ANTIFEED_ENABLE)
+ {
+ return true;
+ }
+
+ if (target == null)
+ {
+ return false;
+ }
+
+ final Player targetPlayer = target.getActingPlayer();
+ if (targetPlayer == null)
+ {
+ return false;
+ }
+
+ if ((Config.ANTIFEED_INTERVAL > 0) && _lastDeathTimes.containsKey(targetPlayer.getObjectId()))
+ {
+ if ((System.currentTimeMillis() - _lastDeathTimes.get(targetPlayer.getObjectId())) < Config.ANTIFEED_INTERVAL)
+ {
+ return false;
+ }
+ }
+
+ if (Config.ANTIFEED_DUALBOX && (attacker != null))
+ {
+ final Player attackerPlayer = attacker.getActingPlayer();
+ if (attackerPlayer == null)
+ {
+ return false;
+ }
+
+ final L2GameClient targetClient = targetPlayer.getClient();
+ final L2GameClient attackerClient = attackerPlayer.getClient();
+ if ((targetClient == null) || (attackerClient == null) || targetClient.isDetached() || attackerClient.isDetached())
+ {
+ return !Config.ANTIFEED_DISCONNECTED_AS_DUALBOX;
+ }
+
+ return !targetClient.getConnection().getInetAddress().equals(attackerClient.getConnection().getInetAddress());
+ }
+
+ return true;
+ }
+
+ /**
+ * Clears all timestamps
+ */
+ public final void clear()
+ {
+ _lastDeathTimes.clear();
+ }
+
+ /**
+ * Register new event for dualbox check. Should be called only once.
+ * @param eventId
+ */
+ public final void registerEvent(int eventId)
+ {
+ _eventIPs.putIfAbsent(eventId, new ConcurrentHashMap<Integer, AtomicInteger>());
+ }
+
+ /**
+ * Decreasing number of active connection from player's IP address
+ * @param eventId
+ * @param player
+ * @return true if success and false if any problem detected.
+ */
+ public final boolean removePlayer(int eventId, Player player)
+ {
+ return removeClient(eventId, player.getClient());
+ }
+
+ /**
+ * Decreasing number of active connection from player's IP address
+ * @param eventId
+ * @param client
+ * @return true if success and false if any problem detected.
+ */
+ public final boolean removeClient(int eventId, L2GameClient client)
+ {
+ if (client == null)
+ {
+ return false; // unable to determine IP address
+ }
+
+ final Map<Integer, AtomicInteger> event = _eventIPs.get(eventId);
+ if (event == null)
+ {
+ return false; // no such event registered
+ }
+
+ final Integer addrHash = Integer.valueOf(client.getConnection().getInetAddress().hashCode());
+
+ return event.computeIfPresent(addrHash, (k, v) ->
+ {
+ if ((v == null) || (v.decrementAndGet() == 0))
+ {
+ return null;
+ }
+ return v;
+ }) != null;
+ }
+
+ /**
+ * Remove player connection IP address from all registered events lists.
+ * @param client
+ */
+ public final void onDisconnect(L2GameClient client)
+ {
+ if (client == null)
+ {
+ return;
+ }
+
+ _eventIPs.forEach((k, v) ->
+ {
+ removeClient(k, client);
+ });
+ }
+
+ /**
+ * Clear all entries for this eventId.
+ * @param eventId
+ */
+ public final void clear(int eventId)
+ {
+ final Map<Integer, AtomicInteger> event = _eventIPs.get(eventId);
+ if (event != null)
+ {
+ event.clear();
+ }
+ }
+
+ public static final AntiFeedManager getInstance()
+ {
+ return SingletonHolder._instance;
+ }
+
+ private static class SingletonHolder
+ {
+ protected static final AntiFeedManager _instance = new AntiFeedManager();
+ }
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/model/actor/instance/Player.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/Player.java (revision 16)
+++ java/net/sf/l2j/gameserver/model/actor/instance/Player.java (working copy)
@@ -24,9 +24,11 @@
import erengine.ErPlayerBonuses;
import erengine.ErUtils;
+
import net.sf.l2j.commons.concurrent.ThreadPool;
import net.sf.l2j.commons.math.MathUtil;
import net.sf.l2j.commons.random.Rnd;
+
import museum.MuseumPlayer;
import net.sf.l2j.Config;
@@ -50,6 +52,7 @@
import net.sf.l2j.gameserver.handler.IItemHandler;
import net.sf.l2j.gameserver.handler.ItemHandler;
import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminEditChar;
+import net.sf.l2j.gameserver.instancemanager.AntiFeedManager;
import net.sf.l2j.gameserver.instancemanager.CastleManager;
import net.sf.l2j.gameserver.instancemanager.CoupleManager;
import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;
@@ -246,6 +249,7 @@
import net.sf.l2j.gameserver.templates.skills.L2EffectType;
import net.sf.l2j.gameserver.templates.skills.L2SkillType;
import net.sf.l2j.gameserver.util.Broadcast;
+
import vote.VotingPlayer;
/**
@@ -3964,7 +3964,8 @@
{
// PK Points are increased only if you kill a player.
//erlandys museum
- if (target instanceof Player) {
+ if (target instanceof Player && AntiFeedManager.getInstance().check(this, target))
+ {
setPkKills(getPkKills() + 1);
//erlandys museum
((Player) target).getMuseumPlayer().addData("pk_defeats", 1);
@@ -3721,12 +3725,15 @@
// if clans got mutual war, then use the reputation calcul
if (_clan.isAtWarWith(pk.getClanId()) && pk.getClan().isAtWarWith(_clan.getClanId()))
{
- // when your reputation score is 0 or below, the other clan cannot acquire any reputation points
- if (getClan().getReputationScore() > 0)
- pk.getClan().addReputationScore(1);
- // when the opposing sides reputation score is 0 or below, your clans reputation score doesn't decrease
- if (pk.getClan().getReputationScore() > 0)
- _clan.takeReputationScore(1);
+ if (AntiFeedManager.getInstance().check(killer, this))
+ {
+ // when your reputation score is 0 or below, the other clan cannot acquire any reputation points
+ if (getClan().getReputationScore() > 0)
+ pk.getClan().addReputationScore(1);
+ // when the opposing sides reputation score is 0 or below, your clans reputation score doesn't decrease
+ if (pk.getClan().getReputationScore() > 0)
+ _clan.takeReputationScore(1);
+ }
}
}
}
Index: config/players.properties
===================================================================
--- config/players.properties (revision 12)
+++ config/players.properties (working copy)
@@ -284,4 +284,23 @@
# When a player dies, is removed from instance after a fixed period of time.
# Time in seconds.
# Default: 60
-EjectDeadPlayerTime = 60
\ No newline at end of file
+EjectDeadPlayerTime = 60
+
+# ================================================================
+# Anti feed protection
+# ================================================================
+
+# This option will enable antifeed for pvp/pk/clanrep points
+AntiFeedEnable = True
+
+# If set to True, kills from dualbox will not increase pvp/pk points
+# and clan reputation will not be transferred
+AntiFeedDualbox = False
+
+# If set to True, server will count disconnected (unable to determine ip address)
+# as dualbox
+AntiFeedDisconnectedAsDualbox = False
+
+# If character died faster than timeout - pvp/pk points for killer will not increase
+# and clan reputation will not be transferred
+AntiFeedInterval = 120
\ No newline at end of file
3 answers to this question
Recommended Posts