if ((checkIfPvP(target) && // Can pvp and targetPlayer.getPvpFlag() != 0 // Target player has pvp flag set ) || // or (ZoneManager.getInstance().checkIfInZonePvP(this) && // Player is inside pvp zone and ZoneManager.getInstance().checkIfInZonePvP(target) // Target player is inside pvp zone )) { increasePvpKills(targetPlayer.getLevel()); } else // Target player doesn't have pvp flag set { // check about wars if (targetPlayer.getClan() != null && this.getClan() != null) { if (this.getClan().isAtWarWith(targetPlayer.getClanId())) { if (targetPlayer.getClan().isAtWarWith(this.getClanId())) { // 'Both way war' -> 'PvP Kill' increasePvpKills(targetPlayer.getLevel()); return; } } } // 'No war' or 'One way war' -> 'Normal PK' if (targetPlayer.getKarma() > 0) // Target player has karma { if (Config.KARMA_AWARD_PK_KILL) { increasePvpKills(targetPlayer.getLevel()); } } else // Target player doesn't have karma { increasePkKillsAndKarma(targetPlayer.getLevel()); } } } /** * Increase the pvp kills count and send the info to the player * */ public void increasePvpKills(int targLVL) { // Add karma to attacker and increase its PK counter setPvpKills(getPvpKills() + 1); if(targLVL > 0) // Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter sendPacket(new UserInfo(this)); //Send a quick announce for PVP... String killer = getName(); String target = getTarget().getName(); int killerlvl = getLevel(); String text = "[PVP] "+killer+"["+killerlvl+"] killed"+target+"["+targLVL+"]!"; Announcements.getInstance().announceToAll(text); } /** * Increase pk count, karma and send the info to the player * * @param targLVL : level of the killed player */ public void increasePkKillsAndKarma(int targLVL) { int baseKarma = Config.KARMA_MIN_KARMA; int newKarma = baseKarma; int karmaLimit = Config.KARMA_MAX_KARMA; int pkLVL = getLevel(); int pkPKCount = getPkKills(); int lvlDiffMulti = 0; int pkCountMulti = 0; // Check if the attacker has a PK counter greater than 0 if (pkPKCount > 0) pkCountMulti = pkPKCount / 2; else pkCountMulti = 1; if (pkCountMulti < 1) pkCountMulti = 1; // Calculate the level difference Multiplier between attacker and killed L2PcInstance if (pkLVL > targLVL) lvlDiffMulti = pkLVL / targLVL; else lvlDiffMulti = 1; if (lvlDiffMulti < 1) lvlDiffMulti = 1; // Calculate the new Karma of the attacker : newKarma = baseKarma*pkCountMulti*lvlDiffMulti newKarma *= pkCountMulti; newKarma *= lvlDiffMulti; // Make sure newKarma is less than karmaLimit and higher than baseKarma if (newKarma < baseKarma) newKarma = baseKarma; if (newKarma > karmaLimit) newKarma = karmaLimit; // Fix to prevent overflow (=> karma has a max value of 2 147 483 647) if (getKarma() > (Integer.MAX_VALUE - newKarma)) newKarma = Integer.MAX_VALUE - getKarma(); // Add karma to attacker and increase its PK counter setPkKills(getPkKills() + 1); setKarma(getKarma() + newKarma); // Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter sendPacket(new UserInfo(this)); //Send a quick announce for PVP... String killer = getName(); String target = getTarget().getName(); int killerlvl = getLevel(); String text = "[PVP] "+killer+"["+killerlvl+"] killed"+target+"["+targLVL+"]!"; Announcements.getInstance().announceToAll(text); }