Топик создан потому что в самой теме много мусора и просто ФЛУДА!
По возможности Буду Реализовать ваши "фиксы" ну конечно с вашей помощью)
Зделать регистрацию на форт и отмену регистрации, на руских ХТМЛ-ках! Оч прошу Сказка!plavik пишет:Все свои предложенния фиксы и так далее данная тема созданна не для какого нить обсуждения а для "ваших" и моих естевственно фиксов в данной сборке (пишем токо предложения )
Топик создан потому что в самой теме много мусора и просто ФЛУДА!
По возможности Буду Реализовать ваши "фиксы" ну конечно с вашей помощью)
ArtiShok пишет:Сказка, не могли бы вы добавить в сборку:
Что бы избежать юзанья бага с саб классом я использую этот скрип что бы обезвредить всё оружие и доспехи с заменой класса.
model/actor/instance/L2PcInstance.java
Взято с la2base.ru
- Код:
/**
* Changes the character's class based on the given class index.
* <BR><BR>
* An index of zero specifies the character's original (base) class,
* while indexes 1-3 specifies the character's sub-classes respectively.
*
* @param classIndex
*/
public boolean setActiveClass(int classIndex)
{
+ L2ItemInstance chest = getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST);
+ if (chest != null)
+ {
+
+ L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(chest.getItem().getBodyPart());
+ InventoryUpdate iu = new InventoryUpdate();
+ for (L2ItemInstance element : unequipped)
+ iu.addModifiedItem(element);
+ sendPacket(iu);
+
+ }
+
+ L2ItemInstance head = getInventory().getPaperdollItem(Inventory.PAPERDOLL_HEAD);
+ if (head != null)
+ {
+
+ L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(head.getItem().getBodyPart());
+ InventoryUpdate iu = new InventoryUpdate();
+ for (L2ItemInstance element : unequipped)
+ iu.addModifiedItem(element);
+ sendPacket(iu);
+
+ }
+
+ L2ItemInstance gloves = getInventory().getPaperdollItem(Inventory.PAPERDOLL_GLOVES);
+ if (gloves != null)
+ {
+
+ L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(gloves.getItem().getBodyPart());
+ InventoryUpdate iu = new InventoryUpdate();
+ for (L2ItemInstance element : unequipped)
+ iu.addModifiedItem(element);
+ sendPacket(iu);
+
+ }
+
+ L2ItemInstance feet = getInventory().getPaperdollItem(Inventory.PAPERDOLL_FEET);
+ if (feet != null)
+ {
+
+ L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(feet.getItem().getBodyPart());
+ InventoryUpdate iu = new InventoryUpdate();
+ for (L2ItemInstance element : unequipped)
+ iu.addModifiedItem(element);
+ sendPacket(iu);
+
+ }
+
+ L2ItemInstance legs = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEGS);
+ if (legs != null)
+ {
+
+ L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(legs.getItem().getBodyPart());
+ InventoryUpdate iu = new InventoryUpdate();
+ for (L2ItemInstance element : unequipped)
+ iu.addModifiedItem(element);
+ sendPacket(iu);
+
+ }
+
+ L2ItemInstance rhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
+ if (rhand != null)
+ {
+
+ L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(rhand.getItem().getBodyPart());
+ InventoryUpdate iu = new InventoryUpdate();
+ for (L2ItemInstance element : unequipped)
+ iu.addModifiedItem(element);
+ sendPacket(iu);
+
+ }
+
+ L2ItemInstance lhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);
+ if (lhand != null)
+ {
+
+ L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(lhand.getItem().getBodyPart());
+ InventoryUpdate iu = new InventoryUpdate();
+ for (L2ItemInstance element : unequipped)
+ iu.addModifiedItem(element);
+ sendPacket(iu);
+
+ }
Решение со Лже Гмами.
Этот патч позволит вам банить гма если он будет пытаться дать права тому кто не гм.
Взято с la2base.ru
- Код:
Index: D:/Workspace/GameServer_Clean/java/config/options.properties
===================================================================
--- D:/Workspace/GameServer_Clean/java/config/options.properties (revision 708)
+++ D:/Workspace/GameServer_Clean/java/config/options.properties (working copy)
@@ -168,6 +168,8 @@
L2WalkerRevision = 552
# Ban account if account using l2walker and is not GM, AllowL2Walker = False
AutobanL2WalkerAcc = False
+# Ban Edited Player and Corrupt GM if a GM edits a NON GM character.
+GMEdit = False
# =================================================================
Index: D:/Workspace/GameServer_Clean/java/net/sf/l2j/Config.java
===================================================================
--- D:/Workspace/GameServer_Clean/java/net/sf/l2j/Config.java (revision 708)
+++ D:/Workspace/GameServer_Clean/java/net/sf/l2j/Config.java (working copy)
@@ -520,6 +520,9 @@
public static boolean AUTOBAN_L2WALKER_ACC;
/** Revision of L2Walker */
public static int L2WALKER_REVISION;
+
+ /** GM Edit allowed on Non Gm players? */
+ public static boolean GM_EDIT;
/** Allow Discard item ?*/
public static boolean ALLOW_DISCARDITEM;
@@ -1127,6 +1130,7 @@
ALLOW_L2WALKER_CLIENT = L2WalkerAllowed.valueOf(optionsSettings.getProperty("AllowL2Walker", "False"));
L2WALKER_REVISION = Integer.parseInt(optionsSettings.getProperty("L2WalkerRevision", "537"));
AUTOBAN_L2WALKER_ACC = Boolean.valueOf(optionsSettings.getProperty("AutobanL2WalkerAcc", "False"));
+ GM_EDIT = Boolean.valueOf(optionsSettings.getProperty("GMEdit", "False"));
ACTIVATE_POSITION_RECORDER = Boolean.valueOf(optionsSettings.getProperty("ActivatePositionRecorder", "False"));
Index: D:/Workspace/GameServer_Clean/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminExpSp.java
===================================================================
--- D:/Workspace/GameServer_Clean/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminExpSp.java (revision 708)
+++ D:/Workspace/GameServer_Clean/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminExpSp.java (working copy)
@@ -29,6 +29,8 @@
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.serverpackets.SystemMessage;
+import net.sf.l2j.gameserver.util.IllegalPlayerAction;
+import net.sf.l2j.gameserver.util.Util;
/**
* This class handles following admin commands:
@@ -222,8 +224,24 @@
smA.addString("Wrong Number Format");
activeChar.sendPacket(smA);
}
- if(expval != 0 || spval != 0)
+ /**
+ * Anti-Corrupt GMs Protection.
+ * If GMEdit enabled, a GM won't be able to Add Exp or SP to any other
+ * player that's NOT a GM character. And in addition.. both player and
+ * GM WILL be banned.
+ */
+ if(Config.GM_EDIT && (expval != 0 || spval != 0)&& !player.isGM())
{
+ //Warn the player about his inmediate ban.
+ player.sendMessage("A GM tried to edit you in "+expval+" exp points and in "+spval+" sp points.You will both be banned.");
+ Util.handleIllegalPlayerAction(player,"The player "+player.getName()+" has been edited. BAN!!", IllegalPlayerAction.PUNISH_KICKBAN);
+ //Warn the GM about his inmediate ban.
+ player.sendMessage("You tried to edit "+player.getName()+" by "+expval+" exp points and "+spval+". You both be banned now.");
+ Util.handleIllegalPlayerAction(activeChar,"El GM "+activeChar.getName()+" ha editado a alguien. BAN!!", IllegalPlayerAction.PUNISH_KICKBAN);
+ _log.severe("GM "+activeChar.getName()+" tried to edit "+player.getName()+". They both have been Banned.");
+ }
+ else if(expval != 0 || spval != 0)
+ {
//Common character information
SystemMessage sm = new SystemMessage(614);
sm.addString("Admin is adding you "+expval+" xp and "+spval+" sp.");
ArtiShok пишет:Классно бы было если еще такое добавите с выводом в конфиги:
Многие возможно помнят сервер Infinity в котором убив определенное количество людей в пвп убийца получал свечение Героя,а когда его убивали оно пропадало.
Скрипт тестировался и работает 100%
Взято с la2base.ru
- Код:
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 1901)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -488,6 +488,11 @@
private boolean _noble = false;
private boolean _hero = false;
+
+ /** Special hero aura values */
+ private int heroConsecutiveKillCount = 0;
+ private boolean isPermaHero = false;
+ private boolean isPVPHero = false;
/** The L2FolkInstance corresponding to the last Folk wich one the player talked. */
private L2FolkInstance _lastFolkNpc = null;
@@ -1971,6 +1976,13 @@
public void setPvpKills(int pvpKills)
{
_pvpKills = pvpKills;
+
+ // Set hero aura if pvp kills > 100
+ if (pvpKills > 100)
+ {
+ isPermaHero = true;
+ setHeroAura(true);
+ }
}
/**
@@ -4678,6 +4690,14 @@
stopRentPet();
stopWaterTask();
+
+ // Remove kill count for special hero aura if total pvp < 100
+ heroConsecutiveKillCount = 0;
+ if (!isPermaHero)
+ {
+ setHeroAura(false);
+ sendPacket(new UserInfo(this));
+ }
return true;
}
@@ -4897,6 +4917,13 @@
{
// Add karma to attacker and increase its PK counter
setPvpKills(getPvpKills() + 1);
+
+ // Increase the kill count for a special hero aura
+ heroConsecutiveKillCount++;
+
+ // If heroConsecutiveKillCount > 4 (5+ kills) give hero aura
+ if(heroConsecutiveKillCount > 4)
+ setHeroAura(true);
// Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
sendPacket(new UserInfo(this));
@@ -8715,6 +8742,22 @@
{
return _blockList;
}
+
+ public void reloadPVPHeroAura()
+ {
+ sendPacket(new UserInfo(this));
+ }
+
+ public void setHeroAura (boolean heroAura)
+ {
+ isPVPHero = heroAura;
+ return;
+ }
+
+ public boolean getIsPVPHero()
+ {
+ return isPVPHero;
+ }
public void setHero(boolean hero)
{
Index: java/net/sf/l2j/gameserver/serverpackets/UserInfo.java
===================================================================
--- java/net/sf/l2j/gameserver/serverpackets/UserInfo.java (revision 1901)
+++ java/net/sf/l2j/gameserver/serverpackets/UserInfo.java (working copy)
@@ -337,7 +337,7 @@
writeD(_activeChar.getClanCrestLargeId());
writeC(_activeChar.isNoble() ? 1 : 0); //0x01: symbol on char menu ctrl+I
- writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); //0x01: Hero Aura
+ writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA) || _activeChar.getIsPVPHero()) ? 1 : 0); //0x01: Hero Aura
writeC(_activeChar.isFishing() ? 1 : 0); //Fishing Mode
writeD(_activeChar.getFishx()); //fishing x
Дополнительная информация:
+ // Set hero aura if pvp kills > 100
+ if (pvpKills > 100)
Собрав 100 очков вы получите херо ауру,также как если бы вы зайдёте в игру и будете иметь 100 пвп,то после 101 пвп получите херо ауру
+ // If heroConsecutiveKillCount > 4 (5+ kills) give hero aura
+ if(heroConsecutiveKillCount > 4)
Если можно то еще:
Сейчас я вам роскажу как сделать так что бы Вещи которые ломаются ломались не на 0 а на указаное вами значения (+ конфиг)
и так идем в
- Код:
javanetsfl2jgameserverclientpackets
И открываем там Файл: RequestEnchantItem.java
Ищем там строку: 422423 Ищем такой ТЕКСТ:
- Код:
item.setEnchantLevel(0);
item.updateDatabase();
Изменяем текст на такой:
- Код:
item.setEnchantLevel(Config.Cancel_ENCHANT);
item.updateDatabase();
Потом идём в
- Код:
javanetsfl2j
Открываем Файл: Config.java
и добавляем там такие строки:
- Код:
//enchant
public static int Cancel_ENCHANT;
и ищем ENCHANT_CONFIG_FILE
и добавляем ниже:
- Код:
Cancel_ENCHANT = Integer.parseInt(enchantSettings.getProperty("EnchantCancel", "0"));
и на последок добавляем в файле Configenchant.ini
- Код:
# При не удачном точении вещь слетает на указаное значение
# По умолчанию 0
EnchantCancel = 0
Где 0 ставим значение к которому хотим что бы слетали вещи к примеру "10"
Взято с la2base.ru
Так же есть предложение:
Хтмл дропа разбивать на несколько страниц(к примеру у гранд боссов я не могу посмотреть потому что слишком длинный хтмл, или не могу посмотреть какой у человека бафф если есть фулл бафф)
plavik пишет:теперь когда банишь пишет в объявления:
Выглядит вот так:
- Код:
/*
* 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 handlers.admincommandhandlers;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.StringTokenizer;
import net.sf.l2j.Config;
import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.Announcements;
import net.sf.l2j.gameserver.LoginServerThread;
import net.sf.l2j.gameserver.communitybbs.Manager.RegionBBSManager;
import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
import net.sf.l2j.gameserver.util.GMAudit;
/**
* This class handles following admin commands:
* - ban_acc <account_name> = changes account access level to -100 and logs him off. If no account is specified target's account is used.
* - ban_char <char_name> = changes a characters access level to -100 and logs him off. If no character is specified target is used.
* - ban_chat <char_name> <duration> = chat bans a character for the specified duration. If no name is specified the target is chat banned indefinitely.
* - unban_acc <account_name> = changes account access level to 0.
* - unban_char <char_name> = changes specified characters access level to 0.
* - unban_chat <char_name> = lifts chat ban from specified player. If no player name is specified current target is used.
* - jail charname [penalty_time] = jails character. Time specified in minutes. For ever if no time is specified.
* - unjail charname = Unjails player, teleport him to Floran.
*
* @version $Revision: 1.1.6.3 $ $Date: 2005/04/11 10:06:06 $
*/
public class AdminBan implements IAdminCommandHandler {
private static final String[] ADMIN_COMMANDS =
{
"admin_ban", // returns ban commands
"admin_ban_acc",
"admin_ban_char",
"admin_ban_chat",
"admin_unban", // returns unban commands
"admin_unban_acc",
"admin_unban_char",
"admin_unban_chat",
"admin_jail",
"admin_unjail"
};
public boolean useAdminCommand(String command, L2PcInstance activeChar)
{
StringTokenizer st = new StringTokenizer(command);
st.nextToken();
String player = "";
int duration = -1;
L2PcInstance targetPlayer = null;
if (st.hasMoreTokens())
{
player = st.nextToken();
targetPlayer = L2World.getInstance().getPlayer(player);
if (st.hasMoreTokens())
{
try
{
duration = Integer.parseInt(st.nextToken());
}
catch (NumberFormatException nfe)
{
activeChar.sendMessage("Invalid number format used: " + nfe);
return false;
}
}
}
else
{
if (activeChar.getTarget() != null && activeChar.getTarget() instanceof L2PcInstance)
{
targetPlayer = (L2PcInstance)activeChar.getTarget();
}
}
if (targetPlayer != null && targetPlayer.equals(activeChar))
{
activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
return false;
}
if (command.startsWith("admin_ban ") || command.equalsIgnoreCase("admin_ban"))
{
activeChar.sendMessage("Available ban commands: //ban_acc, //ban_char, //ban_chat");
return false;
}
else if (command.startsWith("admin_ban_acc"))
{
// May need to check usage in admin_ban_menu as well.
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //ban_acc <account_name> (if none, target char's account gets banned)");
return false;
}
else if (targetPlayer == null)
{
LoginServerThread.getInstance().sendAccessLevel(player, -100);
activeChar.sendMessage("Ban request sent for account "+player);
auditAction(command, activeChar, player);
}
else
{
targetPlayer.setAccountAccesslevel(-100);
targetPlayer.logout();
RegionBBSManager.getInstance().changeCommunityBoard();
activeChar.sendMessage("Account "+targetPlayer.getAccountName()+" banned.");
auditAction(command, activeChar, targetPlayer.getAccountName());
Announcements.getInstance().announceToAll("Игроку " + (targetPlayer.getName()) + " вписан бан аккаунта! Внимательно читайте правила сервера.");
Announcements.getInstance().announceToAll("Автор бана: " + (activeChar.getName()) + ".");
}
}
else if (command.startsWith("admin_ban_char"))
{
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //ban_char <char_name> (if none, target char is banned)");
return false;
}
else
{
Announcements.getInstance().announceToAll("Игроку " + (targetPlayer.getName()) + " вписан бан персонажа! Внимательно читайте правила сервера.");
Announcements.getInstance().announceToAll("Автор бана: " + (activeChar.getName()) + ".");
auditAction(command, activeChar, (targetPlayer == null ? player : targetPlayer.getName()));
return changeCharAccessLevel(targetPlayer, player, activeChar, -100);
}
}
else if (command.startsWith("admin_ban_chat"))
{
if (targetPlayer == null)
{
activeChar.sendMessage("Usage: //ban_chat <char_name> [penalty_minutes]");
return false;
}
else if (targetPlayer.getPunishLevel().value() > L2PcInstance.PunishLevel.CHAT.value())
{
activeChar.sendMessage(targetPlayer.getName()+" is already jailed or banned.");
return false;
}
String banLengthStr = "";
targetPlayer.setPunishLevel(L2PcInstance.PunishLevel.CHAT, duration);
if (duration > 0) banLengthStr = " for " + duration + " minutes";
activeChar.sendMessage(targetPlayer.getName() + " is now chat banned" + banLengthStr + ".");
auditAction(command, activeChar, targetPlayer.getName());
if (duration > 0) Announcements.getInstance().announceToAll("Забанен чат игроку " + (targetPlayer.getName()) + "! Срок бана состовляет " + (duration) + " минут.");
if (duration < 0) Announcements.getInstance().announceToAll("Забанен чат игроку " + (targetPlayer.getName()) + "! Навечно, либо до разблокировки.");
Announcements.getInstance().announceToAll("Автор бана: " + (activeChar.getName()) + ".");
}
else if (command.startsWith("admin_unban ") || command.equalsIgnoreCase("admin_unban"))
{
activeChar.sendMessage("Available unban commands: //unban_acc, //unban_char, //unban_chat");
return false;
}
else if (command.startsWith("admin_unban_acc"))
{
// Need to check admin_unban_menu command as well in AdminMenu.java handler.
if (targetPlayer != null)
{
activeChar.sendMessage(targetPlayer.getName()+" is currently online so must not be banned.");
return false;
}
else if (!player.equals(""))
{
LoginServerThread.getInstance().sendAccessLevel(player, 0);
activeChar.sendMessage("Unban request sent for account "+player);
auditAction(command, activeChar, player);
}
else
{
activeChar.sendMessage("Usage: //unban_acc <account_name>");
return false;
}
}
else if (command.startsWith("admin_unban_char"))
{
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //unban_char <char_name>");
return false;
}
else if (targetPlayer != null)
{
activeChar.sendMessage(targetPlayer.getName()+" is currently online so must not be banned.");
return false;
}
else
{
auditAction(command, activeChar, player);
return changeCharAccessLevel(null, player, activeChar, 0);
}
}
else if (command.startsWith("admin_unban_chat"))
{
if (targetPlayer == null)
{
activeChar.sendMessage("Usage: //unban_chat <onlinecharname>");
return false;
}
else if (targetPlayer.isChatBanned())
{
targetPlayer.setPunishLevel(L2PcInstance.PunishLevel.NONE, 0);
activeChar.sendMessage(targetPlayer.getName() + "'s chat ban has now been lifted.");
auditAction(command, activeChar, targetPlayer.getName());
Announcements.getInstance().announceToAll("Игроку " + (targetPlayer.getName()) + " снят бан чата. Следите за своим языком, дабы подобного не происходило с вами.");
Announcements.getInstance().announceToAll("Подобрел: " + (activeChar.getName()) + ".");
Announcements.getInstance().announceToAll("Играйте только у нас! Сервер L2Supernova.");
}
else
{
activeChar.sendMessage(targetPlayer.getName() + " is not currently chat banned.");
}
}
else if (command.startsWith("admin_jail"))
{
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //jail <charname> [penalty_minutes] (if no name is given, selected target is jailed indefinitely)");
return false;
}
if (targetPlayer != null)
{
if (targetPlayer.isFlyingMounted())
targetPlayer.untransform();
targetPlayer.setPunishLevel(L2PcInstance.PunishLevel.JAIL, duration);
activeChar.sendMessage("Character "+targetPlayer.getName()+" jailed for "+(duration>0 ? duration+" minutes." : "ever!"));
auditAction(command, activeChar, targetPlayer.getName());
if (duration > 0) Announcements.getInstance().announceToAll("Игрок " + (targetPlayer.getName()) + " отправлен в тюрягу на срок в " + (duration) + " минут.");
if (duration < 0) Announcements.getInstance().announceToAll("Игрок " + (targetPlayer.getName()) + " отправлен в тюрягу! Навечно, либо до помилования.");
Announcements.getInstance().announceToAll("Судья: " + (activeChar.getName()) + ".");
}
else
{
jailOfflinePlayer(activeChar, player, duration);
auditAction(command, activeChar, player);
}
}
else if (command.startsWith("admin_unjail"))
{
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //unjail <charname> (If no name is given target is used)");
return false;
}
else if (targetPlayer != null)
{
targetPlayer.setPunishLevel(L2PcInstance.PunishLevel.NONE, 0);
activeChar.sendMessage("Character "+targetPlayer.getName()+" removed from jail");
auditAction(command, activeChar, targetPlayer.getName());
Announcements.getInstance().announceToAll("Игрок " + (targetPlayer.getName()) + "был освобожден за примерное поведение и пару услуг ;) ");
Announcements.getInstance().announceToAll("Надзиратель: " + (activeChar.getName()) + ".");
}
else
{
unjailOfflinePlayer(activeChar, player);
auditAction(command, activeChar, player);
}
}
return true;
}
private void auditAction(String fullCommand, L2PcInstance activeChar, String target)
{
if (!Config.GMAUDIT)
return;
String[] command = fullCommand.split(" ");
GMAudit.auditGMAction(activeChar.getName()+" ["+activeChar.getObjectId()+"]", command[0], (target.equals("") ? "no-target" : target), (command.length > 2 ? command[2] : ""));
}
private void jailOfflinePlayer(L2PcInstance activeChar, String name, int delay)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET x=?, y=?, z=?, punish_level=?, punish_timer=? WHERE char_name=?");
statement.setInt(1, -114356);
statement.setInt(2, -249645);
statement.setInt(3, -2984);
statement.setInt(4, L2PcInstance.PunishLevel.JAIL.value());
statement.setLong(5, (delay > 0 ? delay * 60000L : 0));
statement.setString(6, name);
statement.execute();
int count = statement.getUpdateCount();
statement.close();
if (count == 0)
activeChar.sendMessage("Character not found!");
else
activeChar.sendMessage("Character " + name + " jailed for " + (delay > 0 ? delay + " minutes." : "ever!"));
}
catch (SQLException se)
{
activeChar.sendMessage("SQLException while jailing player");
if (Config.DEBUG)
se.printStackTrace();
}
finally
{
try
{
con.close();
}
catch (Exception e)
{
if (Config.DEBUG)
e.printStackTrace();
}
}
}
private void unjailOfflinePlayer(L2PcInstance activeChar, String name)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET x=?, y=?, z=?, punish_level=?, punish_timer=? WHERE char_name=?");
statement.setInt(1, 17836);
statement.setInt(2, 170178);
statement.setInt(3, -3507);
statement.setInt(4, 0);
statement.setLong(5, 0);
statement.setString(6, name);
statement.execute();
int count = statement.getUpdateCount();
statement.close();
if (count == 0)
activeChar.sendMessage("Character not found!");
else
activeChar.sendMessage("Character " + name + " removed from jail");
}
catch (SQLException se)
{
activeChar.sendMessage("SQLException while jailing player");
if (Config.DEBUG)
se.printStackTrace();
}
finally
{
try
{
con.close();
}
catch (Exception e)
{
if (Config.DEBUG)
e.printStackTrace();
}
}
}
private boolean changeCharAccessLevel(L2PcInstance targetPlayer, String player, L2PcInstance activeChar, int lvl)
{
if (targetPlayer != null)
{
targetPlayer.setAccessLevel(lvl);
targetPlayer.sendMessage("Your character has been banned. Goodbye.");
targetPlayer.logout();
RegionBBSManager.getInstance().changeCommunityBoard();
activeChar.sendMessage("The character " + targetPlayer.getName() + " has now been banned.");
}
else
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET accesslevel=? WHERE char_name=?");
statement.setInt(1, lvl);
statement.setString(2, player);
statement.execute();
int count = statement.getUpdateCount();
statement.close();
if (count == 0)
{
activeChar.sendMessage("Character not found or access level unaltered.");
return false;
}
else
activeChar.sendMessage(player + " now has an access level of " + lvl);
}
catch (SQLException se)
{
activeChar.sendMessage("SQLException while changing character's access level");
if (Config.DEBUG)
se.printStackTrace();
return false;
}
finally
{
try
{
con.close();
}
catch (Exception e) {}
}
}
return true;
}
public String[] getAdminCommandList() {
return ADMIN_COMMANDS;
}
}
От ArtiShok Совместно С EGo^S.nova
plavik пишет:теперь когда банишь пишет в объявления:
Выглядит вот так:
- Код:
/*
* 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 handlers.admincommandhandlers;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.StringTokenizer;
import net.sf.l2j.Config;
import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.Announcements;
import net.sf.l2j.gameserver.LoginServerThread;
import net.sf.l2j.gameserver.communitybbs.Manager.RegionBBSManager;
import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
import net.sf.l2j.gameserver.util.GMAudit;
/**
* This class handles following admin commands:
* - ban_acc <account_name> = changes account access level to -100 and logs him off. If no account is specified target's account is used.
* - ban_char <char_name> = changes a characters access level to -100 and logs him off. If no character is specified target is used.
* - ban_chat <char_name> <duration> = chat bans a character for the specified duration. If no name is specified the target is chat banned indefinitely.
* - unban_acc <account_name> = changes account access level to 0.
* - unban_char <char_name> = changes specified characters access level to 0.
* - unban_chat <char_name> = lifts chat ban from specified player. If no player name is specified current target is used.
* - jail charname [penalty_time] = jails character. Time specified in minutes. For ever if no time is specified.
* - unjail charname = Unjails player, teleport him to Floran.
*
* @version $Revision: 1.1.6.3 $ $Date: 2005/04/11 10:06:06 $
*/
public class AdminBan implements IAdminCommandHandler {
private static final String[] ADMIN_COMMANDS =
{
"admin_ban", // returns ban commands
"admin_ban_acc",
"admin_ban_char",
"admin_ban_chat",
"admin_unban", // returns unban commands
"admin_unban_acc",
"admin_unban_char",
"admin_unban_chat",
"admin_jail",
"admin_unjail"
};
public boolean useAdminCommand(String command, L2PcInstance activeChar)
{
StringTokenizer st = new StringTokenizer(command);
st.nextToken();
String player = "";
int duration = -1;
L2PcInstance targetPlayer = null;
if (st.hasMoreTokens())
{
player = st.nextToken();
targetPlayer = L2World.getInstance().getPlayer(player);
if (st.hasMoreTokens())
{
try
{
duration = Integer.parseInt(st.nextToken());
}
catch (NumberFormatException nfe)
{
activeChar.sendMessage("Invalid number format used: " + nfe);
return false;
}
}
}
else
{
if (activeChar.getTarget() != null && activeChar.getTarget() instanceof L2PcInstance)
{
targetPlayer = (L2PcInstance)activeChar.getTarget();
}
}
if (targetPlayer != null && targetPlayer.equals(activeChar))
{
activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_USE_ON_YOURSELF));
return false;
}
if (command.startsWith("admin_ban ") || command.equalsIgnoreCase("admin_ban"))
{
activeChar.sendMessage("Available ban commands: //ban_acc, //ban_char, //ban_chat");
return false;
}
else if (command.startsWith("admin_ban_acc"))
{
// May need to check usage in admin_ban_menu as well.
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //ban_acc <account_name> (if none, target char's account gets banned)");
return false;
}
else if (targetPlayer == null)
{
LoginServerThread.getInstance().sendAccessLevel(player, -100);
activeChar.sendMessage("Ban request sent for account "+player);
auditAction(command, activeChar, player);
}
else
{
targetPlayer.setAccountAccesslevel(-100);
targetPlayer.logout();
RegionBBSManager.getInstance().changeCommunityBoard();
activeChar.sendMessage("Account "+targetPlayer.getAccountName()+" banned.");
auditAction(command, activeChar, targetPlayer.getAccountName());
Announcements.getInstance().announceToAll("Игроку " + (targetPlayer.getName()) + " вписан бан аккаунта! Внимательно читайте правила сервера.");
Announcements.getInstance().announceToAll("Автор бана: " + (activeChar.getName()) + ".");
}
}
else if (command.startsWith("admin_ban_char"))
{
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //ban_char <char_name> (if none, target char is banned)");
return false;
}
else
{
Announcements.getInstance().announceToAll("Игроку " + (targetPlayer.getName()) + " вписан бан персонажа! Внимательно читайте правила сервера.");
Announcements.getInstance().announceToAll("Автор бана: " + (activeChar.getName()) + ".");
auditAction(command, activeChar, (targetPlayer == null ? player : targetPlayer.getName()));
return changeCharAccessLevel(targetPlayer, player, activeChar, -100);
}
}
else if (command.startsWith("admin_ban_chat"))
{
if (targetPlayer == null)
{
activeChar.sendMessage("Usage: //ban_chat <char_name> [penalty_minutes]");
return false;
}
else if (targetPlayer.getPunishLevel().value() > L2PcInstance.PunishLevel.CHAT.value())
{
activeChar.sendMessage(targetPlayer.getName()+" is already jailed or banned.");
return false;
}
String banLengthStr = "";
targetPlayer.setPunishLevel(L2PcInstance.PunishLevel.CHAT, duration);
if (duration > 0) banLengthStr = " for " + duration + " minutes";
activeChar.sendMessage(targetPlayer.getName() + " is now chat banned" + banLengthStr + ".");
auditAction(command, activeChar, targetPlayer.getName());
if (duration > 0) Announcements.getInstance().announceToAll("Забанен чат игроку " + (targetPlayer.getName()) + "! Срок бана состовляет " + (duration) + " минут.");
if (duration < 0) Announcements.getInstance().announceToAll("Забанен чат игроку " + (targetPlayer.getName()) + "! Навечно, либо до разблокировки.");
Announcements.getInstance().announceToAll("Автор бана: " + (activeChar.getName()) + ".");
}
else if (command.startsWith("admin_unban ") || command.equalsIgnoreCase("admin_unban"))
{
activeChar.sendMessage("Available unban commands: //unban_acc, //unban_char, //unban_chat");
return false;
}
else if (command.startsWith("admin_unban_acc"))
{
// Need to check admin_unban_menu command as well in AdminMenu.java handler.
if (targetPlayer != null)
{
activeChar.sendMessage(targetPlayer.getName()+" is currently online so must not be banned.");
return false;
}
else if (!player.equals(""))
{
LoginServerThread.getInstance().sendAccessLevel(player, 0);
activeChar.sendMessage("Unban request sent for account "+player);
auditAction(command, activeChar, player);
}
else
{
activeChar.sendMessage("Usage: //unban_acc <account_name>");
return false;
}
}
else if (command.startsWith("admin_unban_char"))
{
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //unban_char <char_name>");
return false;
}
else if (targetPlayer != null)
{
activeChar.sendMessage(targetPlayer.getName()+" is currently online so must not be banned.");
return false;
}
else
{
auditAction(command, activeChar, player);
return changeCharAccessLevel(null, player, activeChar, 0);
}
}
else if (command.startsWith("admin_unban_chat"))
{
if (targetPlayer == null)
{
activeChar.sendMessage("Usage: //unban_chat <onlinecharname>");
return false;
}
else if (targetPlayer.isChatBanned())
{
targetPlayer.setPunishLevel(L2PcInstance.PunishLevel.NONE, 0);
activeChar.sendMessage(targetPlayer.getName() + "'s chat ban has now been lifted.");
auditAction(command, activeChar, targetPlayer.getName());
Announcements.getInstance().announceToAll("Игроку " + (targetPlayer.getName()) + " снят бан чата. Следите за своим языком, дабы подобного не происходило с вами.");
Announcements.getInstance().announceToAll("Подобрел: " + (activeChar.getName()) + ".");
Announcements.getInstance().announceToAll("Играйте только у нас! Сервер L2Supernova.");
}
else
{
activeChar.sendMessage(targetPlayer.getName() + " is not currently chat banned.");
}
}
else if (command.startsWith("admin_jail"))
{
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //jail <charname> [penalty_minutes] (if no name is given, selected target is jailed indefinitely)");
return false;
}
if (targetPlayer != null)
{
if (targetPlayer.isFlyingMounted())
targetPlayer.untransform();
targetPlayer.setPunishLevel(L2PcInstance.PunishLevel.JAIL, duration);
activeChar.sendMessage("Character "+targetPlayer.getName()+" jailed for "+(duration>0 ? duration+" minutes." : "ever!"));
auditAction(command, activeChar, targetPlayer.getName());
if (duration > 0) Announcements.getInstance().announceToAll("Игрок " + (targetPlayer.getName()) + " отправлен в тюрягу на срок в " + (duration) + " минут.");
if (duration < 0) Announcements.getInstance().announceToAll("Игрок " + (targetPlayer.getName()) + " отправлен в тюрягу! Навечно, либо до помилования.");
Announcements.getInstance().announceToAll("Судья: " + (activeChar.getName()) + ".");
}
else
{
jailOfflinePlayer(activeChar, player, duration);
auditAction(command, activeChar, player);
}
}
else if (command.startsWith("admin_unjail"))
{
if (targetPlayer == null && player.equals(""))
{
activeChar.sendMessage("Usage: //unjail <charname> (If no name is given target is used)");
return false;
}
else if (targetPlayer != null)
{
targetPlayer.setPunishLevel(L2PcInstance.PunishLevel.NONE, 0);
activeChar.sendMessage("Character "+targetPlayer.getName()+" removed from jail");
auditAction(command, activeChar, targetPlayer.getName());
Announcements.getInstance().announceToAll("Игрок " + (targetPlayer.getName()) + "был освобожден за примерное поведение и пару услуг ;) ");
Announcements.getInstance().announceToAll("Надзиратель: " + (activeChar.getName()) + ".");
}
else
{
unjailOfflinePlayer(activeChar, player);
auditAction(command, activeChar, player);
}
}
return true;
}
private void auditAction(String fullCommand, L2PcInstance activeChar, String target)
{
if (!Config.GMAUDIT)
return;
String[] command = fullCommand.split(" ");
GMAudit.auditGMAction(activeChar.getName()+" ["+activeChar.getObjectId()+"]", command[0], (target.equals("") ? "no-target" : target), (command.length > 2 ? command[2] : ""));
}
private void jailOfflinePlayer(L2PcInstance activeChar, String name, int delay)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET x=?, y=?, z=?, punish_level=?, punish_timer=? WHERE char_name=?");
statement.setInt(1, -114356);
statement.setInt(2, -249645);
statement.setInt(3, -2984);
statement.setInt(4, L2PcInstance.PunishLevel.JAIL.value());
statement.setLong(5, (delay > 0 ? delay * 60000L : 0));
statement.setString(6, name);
statement.execute();
int count = statement.getUpdateCount();
statement.close();
if (count == 0)
activeChar.sendMessage("Character not found!");
else
activeChar.sendMessage("Character " + name + " jailed for " + (delay > 0 ? delay + " minutes." : "ever!"));
}
catch (SQLException se)
{
activeChar.sendMessage("SQLException while jailing player");
if (Config.DEBUG)
se.printStackTrace();
}
finally
{
try
{
con.close();
}
catch (Exception e)
{
if (Config.DEBUG)
e.printStackTrace();
}
}
}
private void unjailOfflinePlayer(L2PcInstance activeChar, String name)
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET x=?, y=?, z=?, punish_level=?, punish_timer=? WHERE char_name=?");
statement.setInt(1, 17836);
statement.setInt(2, 170178);
statement.setInt(3, -3507);
statement.setInt(4, 0);
statement.setLong(5, 0);
statement.setString(6, name);
statement.execute();
int count = statement.getUpdateCount();
statement.close();
if (count == 0)
activeChar.sendMessage("Character not found!");
else
activeChar.sendMessage("Character " + name + " removed from jail");
}
catch (SQLException se)
{
activeChar.sendMessage("SQLException while jailing player");
if (Config.DEBUG)
se.printStackTrace();
}
finally
{
try
{
con.close();
}
catch (Exception e)
{
if (Config.DEBUG)
e.printStackTrace();
}
}
}
private boolean changeCharAccessLevel(L2PcInstance targetPlayer, String player, L2PcInstance activeChar, int lvl)
{
if (targetPlayer != null)
{
targetPlayer.setAccessLevel(lvl);
targetPlayer.sendMessage("Your character has been banned. Goodbye.");
targetPlayer.logout();
RegionBBSManager.getInstance().changeCommunityBoard();
activeChar.sendMessage("The character " + targetPlayer.getName() + " has now been banned.");
}
else
{
Connection con = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement("UPDATE characters SET accesslevel=? WHERE char_name=?");
statement.setInt(1, lvl);
statement.setString(2, player);
statement.execute();
int count = statement.getUpdateCount();
statement.close();
if (count == 0)
{
activeChar.sendMessage("Character not found or access level unaltered.");
return false;
}
else
activeChar.sendMessage(player + " now has an access level of " + lvl);
}
catch (SQLException se)
{
activeChar.sendMessage("SQLException while changing character's access level");
if (Config.DEBUG)
se.printStackTrace();
return false;
}
finally
{
try
{
con.close();
}
catch (Exception e) {}
}
}
return true;
}
public String[] getAdminCommandList() {
return ADMIN_COMMANDS;
}
}
От ArtiShok
public static boolean ENABLE_MODIFY_ENCHANT_MULTISELL;
public static Map<Integer, Integer> ENCHANT_MULTISELL_LIST;
==================================================
ENABLE_MODIFY_ENCHANT_MULTISELL = Boolean.parseBoolean(enchantSettings.getProperty("EnableModifyEnchantMultisell", "False"));
if (ENABLE_MODIFY_ENCHANT_MULTISELL)
{
ENCHANT_MULTISELL_LIST = new FastMap<Integer, Integer>();
String[] propertySplit;
propertySplit = enchantSettings.getProperty("EnchantMultisellList", "").split(";");
for (String enchant : propertySplit)
{
String[] enchantSplit = enchant.split(",");
if (enchantSplit.length != 2)
{
System.out.println("[EnchantMultisellList]: invalid config property -> EnchantMultisellList \"" + enchant + "\"");
} else
{
try
{
ENCHANT_MULTISELL_LIST.put(Integer.parseInt(enchantSplit[0]), Integer.parseInt(enchantSplit[1]));
} catch (NumberFormatException nfe)
{
if (!enchant.equals(""))
{
System.out.println("[EnchantMultisellList]: invalid config property -> EnchantMultisellList \"" + enchantSplit[0] + "\"" + enchantSplit[1]);
}
}
}
}
}
if (Config.ENABLE_MODIFY_ENCHANT_MULTISELL)
{
if (Config.ENCHANT_MULTISELL_LIST.containsKey(_listId))
{
product.setEnchantLevel(Config.ENCHANT_MULTISELL_LIST.get(_listId));
}
}
# Продавать заточенные вещи через мультиселлы
EnableModifyEnchantMultisell = False
# Номера мультиселлов в которых будут затачиваться вещи при продаже
# Например: EnchantMultisellList=1001,10;1002,5
# Означает что в мультиселле 1001.xml все вещи при продаже будут точиться на 10
# и в мультиселле 1002.xml соответственно точиться на 5
# ВНИМАНИЕ! Не ставьте точку с запятой в самом конце и пишите все без пробелов!
EnchantMultisellList=1000,0;1001,0
Index: /java/config/l2jmods.properties
===================================================================
--- /java/config/l2jmods.properties (revision 174)
+++ /java/config/l2jmods.properties (working copy)
@@ -161,4 +161,62 @@
#----------------------------------
EnableWarehouseSortingClan = False
EnableWarehouseSortingPrivate = False
-EnableWarehouseSortingFreight = False
\ No newline at end of file
+EnableWarehouseSortingFreight = False
+
+# ---------------------------------------
+# Section: PvP Title Color Change System by Level
+# ---------------------------------------
+# Each Amount will change the name color to the values defined here.
+# Example: PvpAmmount1 = 500, when a character's PvP counter reaches 500, their name color will change
+# according to the ColorForAmount value.
+# Note: Colors Must Use RBG format
+EnablePvPColorSystem = false
+
+# Pvp Amount & Name color level 1.
+PvpAmount1 = 500
+ColorForAmount1 = CCFF00
+
+# Pvp Amount & Name color level 2.
+PvpAmount2 = 1000
+ColorForAmount2 = 00FF00
+
+# Pvp Amount & Name color level 3.
+PvpAmount3 = 1500
+ColorForAmount3 = 00FF00
+
+# Pvp Amount & Name color level 4.
+PvpAmount4 = 2500
+ColorForAmount4 = 00FF00
+
+# Pvp Amount & Name color level 5.
+PvpAmount5 = 5000
+ColorForAmount5 = 00FF00
+
+# ---------------------------------------
+# Section: PvP Nick Color System by Level
+# ---------------------------------------
+# Same as above, with the difference that the PK counter changes the title color.
+# Example: PkAmmount1 = 500, when a character's PK counter reaches 500, their title color will change
+# according to the Title For Amount
+# WAN: Colors Must Use RBG format
+EnablePkColorSystem = false
+
+# Pk Amount & Title color level 1.
+PkAmount1 = 500
+TitleForAmount1 = 00FF00
+
+# Pk Amount & Title color level 2.
+PkAmount2 = 1000
+TitleForAmount2 = 00FF00
+
+# Pk Amount & Title color level 3.
+PkAmount3 = 1500
+TitleForAmount3 = 00FF00
+
+# Pk Amount & Title color level 4.
+PkAmount4 = 2500
+TitleForAmount4 = 00FF00
+
+# Pk Amount & Title color level 5.
+PkAmount5 = 5000
+TitleForAmount5 = 00FF00
\ No newline at end of file
Index: /java/net/sf/l2j/Config.java
===================================================================
--- /java/net/sf/l2j/Config.java (revision 174)
+++ /java/net/sf/l2j/Config.java (working copy)
@@ -544,6 +546,28 @@
public static boolean L2JMOD_ENABLE_WAREHOUSESORTING_CLAN;
public static boolean L2JMOD_ENABLE_WAREHOUSESORTING_PRIVATE;
public static boolean L2JMOD_ENABLE_WAREHOUSESORTING_FREIGHT;
+ public static boolean PVP_COLOR_SYSTEM_ENABLED;
+ public static int PVP_AMOUNT1;
+ public static int PVP_AMOUNT2;
+ public static int PVP_AMOUNT3;
+ public static int PVP_AMOUNT4;
+ public static int PVP_AMOUNT5;
+ public static int NAME_COLOR_FOR_PVP_AMOUNT1;
+ public static int NAME_COLOR_FOR_PVP_AMOUNT2;
+ public static int NAME_COLOR_FOR_PVP_AMOUNT3;
+ public static int NAME_COLOR_FOR_PVP_AMOUNT4;
+ public static int NAME_COLOR_FOR_PVP_AMOUNT5;
+ public static boolean PK_COLOR_SYSTEM_ENABLED;
+ public static int PK_AMOUNT1;
+ public static int PK_AMOUNT2;
+ public static int PK_AMOUNT3;
+ public static int PK_AMOUNT4;
+ public static int PK_AMOUNT5;
+ public static int TITLE_COLOR_FOR_PK_AMOUNT1;
+ public static int TITLE_COLOR_FOR_PK_AMOUNT2;
+ public static int TITLE_COLOR_FOR_PK_AMOUNT3;
+ public static int TITLE_COLOR_FOR_PK_AMOUNT4;
+ public static int TITLE_COLOR_FOR_PK_AMOUNT5;
/** ************************************************** **/
/** L2JMods Settings -End **/
@@ -1654,6 +1678,34 @@
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"));
+
+ // PVP Name Color System configs - Start
+ PVP_COLOR_SYSTEM_ENABLED = Boolean.parseBoolean(L2JModSettings.getProperty("EnablePvPColorSystem", "false"));
+ PVP_AMOUNT1 = Integer.parseInt(L2JModSettings.getProperty("PvpAmount1", "500"));
+ PVP_AMOUNT2 = Integer.parseInt(L2JModSettings.getProperty("PvpAmount2", "1000"));
+ PVP_AMOUNT3 = Integer.parseInt(L2JModSettings.getProperty("PvpAmount3", "1500"));
+ PVP_AMOUNT4 = Integer.parseInt(L2JModSettings.getProperty("PvpAmount4", "2500"));
+ PVP_AMOUNT5 = Integer.parseInt(L2JModSettings.getProperty("PvpAmount5", "5000"));
+ NAME_COLOR_FOR_PVP_AMOUNT1 = Integer.decode("0x" + L2JModSettings.getProperty("ColorForAmount1", "00FF00"));
+ NAME_COLOR_FOR_PVP_AMOUNT2 = Integer.decode("0x" + L2JModSettings.getProperty("ColorForAmount2", "00FF00"));
+ NAME_COLOR_FOR_PVP_AMOUNT3 = Integer.decode("0x" + L2JModSettings.getProperty("ColorForAmount3", "00FF00"));
+ NAME_COLOR_FOR_PVP_AMOUNT4 = Integer.decode("0x" + L2JModSettings.getProperty("ColorForAmount4", "00FF00"));
+ NAME_COLOR_FOR_PVP_AMOUNT5 = Integer.decode("0x" + L2JModSettings.getProperty("ColorForAmount4", "00FF00"));
+ // PvP Name Color System configs - End
+
+ // PK Title Color System configs - Start
+ PK_COLOR_SYSTEM_ENABLED = Boolean.parseBoolean(L2JModSettings.getProperty("EnablePkColorSystem", "false"));
+ PK_AMOUNT1 = Integer.parseInt(L2JModSettings.getProperty("PkAmount1", "500"));
+ PK_AMOUNT2 = Integer.parseInt(L2JModSettings.getProperty("PkAmount2", "1000"));
+ PK_AMOUNT3 = Integer.parseInt(L2JModSettings.getProperty("PkAmount3", "1500"));
+ PK_AMOUNT4 = Integer.parseInt(L2JModSettings.getProperty("PkAmount4", "2500"));
+ PK_AMOUNT5 = Integer.parseInt(L2JModSettings.getProperty("PkAmount5", "5000"));
+ TITLE_COLOR_FOR_PK_AMOUNT1 = Integer.decode("0x" + L2JModSettings.getProperty("TitleForAmount1", "00FF00"));
+ TITLE_COLOR_FOR_PK_AMOUNT2 = Integer.decode("0x" + L2JModSettings.getProperty("TitleForAmount2", "00FF00"));
+ TITLE_COLOR_FOR_PK_AMOUNT3 = Integer.decode("0x" + L2JModSettings.getProperty("TitleForAmount3", "00FF00"));
+ TITLE_COLOR_FOR_PK_AMOUNT4 = Integer.decode("0x" + L2JModSettings.getProperty("TitleForAmount4", "00FF00"));
+ TITLE_COLOR_FOR_PK_AMOUNT5 = Integer.decode("0x" + L2JModSettings.getProperty("TitleForAmount5", "00FF00"));
+ //PK Title Color System configs - End
if (TVT_EVENT_PARTICIPATION_NPC_ID == 0)
{
Index: /java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java
===================================================================
--- /java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java (revision 174)
+++ /java/net/sf/l2j/gameserver/clientpackets/EnterWorld.java (working copy)
@@ -177,6 +177,16 @@
Quest.playerEnter(activeChar);
activeChar.sendPacket(new QuestList());
loadTutorial(activeChar);
+
+ // ================================================================================
=
+ // Color System checks - Start =====================================================
+ // Check if the custom PvP and PK color systems are enabled and if so ==============
+ // check the character's counters and apply any color changes that must be done. ===
+ if (activeChar.getPvpKills()>=(Config.PVP_AMOUNT1) && (Config.PVP_COLOR_SYSTEM_ENABLED)) activeChar.updatePvPColor(activeChar.getPvpKills());
+ if (activeChar.getPkKills()>=(Config.PK_AMOUNT1) && (Config.PK_COLOR_SYSTEM_ENABLED)) activeChar.updatePkColor(activeChar.getPkKills());
+ // Color System checks - End =======================================================
+ // ================================================================================
=
+
if (Config.PLAYER_SPAWN_PROTECTION > 0)
activeChar.setProtection(true);
@@ -3660,7 +3661,75 @@
DuelManager.getInstance().broadcastToOppositTeam(this, update);
}
}
-
+
+ // Custom PVP Color System - Start
+ public void updatePvPColor(int pvpKillAmount)
+ {
+ if (Config.PVP_COLOR_SYSTEM_ENABLED)
+ {
+ //Check if the character has GM access and if so, let them be.
+ if (isGM())
+ return;
+ {
+ if ((pvpKillAmount >= (Config.PVP_AMOUNT1)) && (pvpKillAmount <= (Config.PVP_AMOUNT2)))
+ {
+ getAppearance().setNameColor(Config.NAME_COLOR_FOR_PVP_AMOUNT1);
+ }
+ else if ((pvpKillAmount >= (Config.PVP_AMOUNT2)) && (pvpKillAmount <= (Config.PVP_AMOUNT3)))
+ {
+ getAppearance().setNameColor(Config.NAME_COLOR_FOR_PVP_AMOUNT2);
+ }
+ else if ((pvpKillAmount >= (Config.PVP_AMOUNT3)) && (pvpKillAmount <= (Config.PVP_AMOUNT4)))
+ {
+ getAppearance().setNameColor(Config.NAME_COLOR_FOR_PVP_AMOUNT3);
+ }
+ else if ((pvpKillAmount >= (Config.PVP_AMOUNT4)) && (pvpKillAmount <= (Config.PVP_AMOUNT5)))
+ {
+ getAppearance().setNameColor(Config.NAME_COLOR_FOR_PVP_AMOUNT4);
+ }
+ else if (pvpKillAmount >= (Config.PVP_AMOUNT5))
+ {
+ getAppearance().setNameColor(Config.NAME_COLOR_FOR_PVP_AMOUNT5);
+ }
+ }
+ }
+ }
+ //Custom PVP Color System - End
+
+ // Custom Pk Color System - Start
+ public void updatePkColor(int pkKillAmount)
+ {
+ if (Config.PK_COLOR_SYSTEM_ENABLED)
+ {
+ //Check if the character has GM access and if so, let them be, like above.
+ if (isGM())
+ return;
+ {
+ if ((pkKillAmount >= (Config.PK_AMOUNT1)) && (pkKillAmount <= (Config.PVP_AMOUNT2)))
+ {
+ getAppearance().setTitleColor(Config.TITLE_COLOR_FOR_PK_AMOUNT1);
+ }
+ else if ((pkKillAmount >= (Config.PK_AMOUNT2)) && (pkKillAmount <= (Config.PVP_AMOUNT3)))
+ {
+ getAppearance().setTitleColor(Config.TITLE_COLOR_FOR_PK_AMOUNT2);
+ }
+ else if ((pkKillAmount >= (Config.PK_AMOUNT3)) && (pkKillAmount <= (Config.PVP_AMOUNT4)))
+ {
+ getAppearance().setTitleColor(Config.TITLE_COLOR_FOR_PK_AMOUNT3);
+ }
+ else if ((pkKillAmount >= (Config.PK_AMOUNT4)) && (pkKillAmount <= (Config.PVP_AMOUNT5)))
+ {
+ getAppearance().setTitleColor(Config.TITLE_COLOR_FOR_PK_AMOUNT4);
+ }
+ else if (pkKillAmount >= (Config.PK_AMOUNT5))
+ {
+ getAppearance().setTitleColor(Config.TITLE_COLOR_FOR_PK_AMOUNT5);
+ }
+ }
+ }
+ }
+ //Custom Pk Color System - End
+
@Override
public final void updateEffectIcons(boolean partyOnly)
{
@@ -4996,6 +5065,10 @@
// Add karma to attacker and increase its PK counter
setPvpKills(getPvpKills() + 1);
+ //Update the character's name color if they reached any of the 5 PvP levels.
+ updatePvPColor(getPvpKills());
+ broadcastUserInfo();
+
// Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
sendPacket(new UserInfo(this));
}
@@ -5047,6 +5120,10 @@
setPkKills(getPkKills() + 1);
setKarma(getKarma() + newKarma);
+ //Update the character's title color if they reached any of the 5 PK levels.
+ updatePkColor(getPkKills());
+ broadcastUserInfo();
+
// Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
sendPacket(new UserInfo(this));
}
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 1901)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -488,6 +488,11 @@
private boolean _noble = false;
private boolean _hero = false;
+
+ /** Special hero aura values */
+ private int heroConsecutiveKillCount = 0;
+ private boolean isPermaHero = false;
+ private boolean isPVPHero = false;
/** The L2FolkInstance corresponding to the last Folk wich one the player talked. */
private L2FolkInstance _lastFolkNpc = null;
@@ -1971,6 +1976,13 @@
public void setPvpKills(int pvpKills)
{
_pvpKills = pvpKills;
+
+ // Set hero aura if pvp kills > 100
+ if (pvpKills > 100)
+ {
+ isPermaHero = true;
+ setHeroAura(true);
+ }
}
/**
@@ -4678,6 +4690,14 @@
stopRentPet();
stopWaterTask();
+
+ // Remove kill count for special hero aura if total pvp < 100
+ heroConsecutiveKillCount = 0;
+ if (!isPermaHero)
+ {
+ setHeroAura(false);
+ sendPacket(new UserInfo(this));
+ }
return true;
}
@@ -4897,6 +4917,13 @@
{
// Add karma to attacker and increase its PK counter
setPvpKills(getPvpKills() + 1);
+
+ // Increase the kill count for a special hero aura
+ heroConsecutiveKillCount++;
+
+ // If heroConsecutiveKillCount > 4 (5+ kills) give hero aura
+ if(heroConsecutiveKillCount > 4)
+ setHeroAura(true);
// Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
sendPacket(new UserInfo(this));
@@ -8715,6 +8742,22 @@
{
return _blockList;
}
+
+ public void reloadPVPHeroAura()
+ {
+ sendPacket(new UserInfo(this));
+ }
+
+ public void setHeroAura (boolean heroAura)
+ {
+ isPVPHero = heroAura;
+ return;
+ }
+
+ public boolean getIsPVPHero()
+ {
+ return isPVPHero;
+ }
public void setHero(boolean hero)
{
Index: java/net/sf/l2j/gameserver/serverpackets/UserInfo.java
===================================================================
--- java/net/sf/l2j/gameserver/serverpackets/UserInfo.java (revision 1901)
+++ java/net/sf/l2j/gameserver/serverpackets/UserInfo.java (working copy)
@@ -337,7 +337,7 @@
writeD(_activeChar.getClanCrestLargeId());
writeC(_activeChar.isNoble() ? 1 : 0); //0x01: symbol on char menu ctrl+I
- writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA)) ? 1 : 0); //0x01: Hero Aura
+ writeC((_activeChar.isHero() || (_activeChar.isGM() && Config.GM_HERO_AURA) || _activeChar.getIsPVPHero()) ? 1 : 0); //0x01: Hero Aura
writeC(_activeChar.isFishing() ? 1 : 0); //Fishing Mode
writeD(_activeChar.getFishx()); //fishing x
если это не реализовано тогда присоеденяюсь к просьбе,ссылку предоставить не могу но точно знаю что на откат влияет скорость атаки и скорость кастаConJurer пишет:Сделайте если не затруднит, вот что:
Откат скиллов , работает не правильно . На него не должны влиять показатели : скорости атаки и скорости каста! (по оффу)
Как я думаю или знаю это делается в ядре.
plavik пишет:
plavik пишет:
огромное спасибо..а на счет ГМов сделаете? чтоб в конфигах выводило включение тех функций...Admin пишет:plavik пишет:
# При не удачном точении вещь слетает на указаное значение
# По умолчанию 0
EnchantCancel = 0
добавлено
ConJurer пишет:Сделайте если не затруднит, вот что:
Откат скиллов , работает не правильно . На него не должны влиять показатели : скорости атаки и скорости каста! (по оффу)
Как я думаю или знаю это делается в ядре.
GMShowAnnouncerName = False
Предлогаю еще реализовать евент PC Bang Pointskostiapp пишет:Предлогаю сделать конфиг.
Идея его такова:когда убиваеш персонажа в пвп чтоб выдавался определенный итем.И конечно же не будет даваться если персонажи с одного IP.
|
|