Noticias:

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

Menú Principal

User Panel

Iniciado por Swarlog, Ago 19, 2022, 12:29 AM

Tema anterior - Siguiente tema

Swarlog

CitarCORE:

### Eclipse Workspace Patch 1.0
#P L2J_Server
Index: dist/game/config/custom.properties
===================================================================
--- dist/game/config/custom.properties (revision 5526)
+++ dist/game/config/custom.properties (working copy)
@@ -461,4 +297,306 @@
 # ---------------------------------------------------------------------------
 # Enables .changepassword voiced command which allows the players to change their account's password ingame.
 # Default: False
-AllowChangePassword = False
+AllowChangePassword = False
+
+# ---------------------------------------------------------------------------
+#  Custom User Panel (by NeverMore)
+# ---------------------------------------------------------------------------
+# Using this feature every single player will have the opportunity to press .user into the game !
+# .user command have many actions and features like (Enable/Disable pm , trade , custom effect etc etc )
+# ---------------------------------------------------------------------------
+# Allow .user command
+AllowUserCommand = True
+# Allow .user command
+AllowExpRefusal = True
+# Allow trade off/on action
+AllowTradeCommand = True
+# Allow pm off/on action
+AllowPmCommand = True
+# Allow .effecton/off command ( using this command ,player will get a special aura )
+AllowSpecialEffect = True
\ No newline at end of file
Index: java/com/l2jserver/gameserver/model/L2Party.java
===================================================================
--- java/com/l2jserver/gameserver/model/L2Party.java (revision 5526)
+++ java/com/l2jserver/gameserver/model/L2Party.java (working copy)
@@ -805,7 +805,7 @@
  {
  for (L2Character member : rewardedMembers)
  {
- if (member.isDead())
+ if (member.isDead() || ((L2PcInstance) member)._isexpsprefusal)
  {
  continue;
  }
Index: java/com/l2jserver/Config.java
===================================================================
--- java/com/l2jserver/Config.java (revision 5526)
+++ java/com/l2jserver/Config.java (working copy)
@@ -765,8 +737,154 @@
  public static int L2JMOD_DUALBOX_CHECK_MAX_L2EVENT_PARTICIPANTS_PER_IP;
  public static TIntIntHashMap L2JMOD_DUALBOX_CHECK_WHITELIST;
  public static boolean L2JMOD_ALLOW_CHANGE_PASSWORD;
+ public static boolean ENABLE_TRADE_REFUSAL;
+ public static boolean ENABLE_PM_REFUSAL;
+ public static boolean SHOW_USER;
+ public static boolean ENABLE_SPECIAL_EFFECT;
+ public static boolean ENABLE_EXP_REFUSAL;
+

    // --------------------------------------------------
  // NPC Settings
  // --------------------------------------------------
  public static boolean ANNOUNCE_MAMMON_SPAWN;
@@ -2425,7 +2535,306 @@
                    }
                }
                L2JMOD_ALLOW_CHANGE_PASSWORD = Boolean.parseBoolean(L2JModSettings.getProperty("AllowChangePassword", "False"));
+ ENABLE_PM_REFUSAL = Boolean.parseBoolean(L2JModSettings.getProperty("AllowPmCommand","False"));
+ ENABLE_TRADE_REFUSAL = Boolean.parseBoolean(L2JModSettings.getProperty("AllowTradeCommand","False"));
+ SHOW_USER = Boolean.parseBoolean(L2JModSettings.getProperty("AllowUserCommand","False"));
+ ENABLE_SPECIAL_EFFECT = Boolean.parseBoolean(L2JModSettings.getProperty("AllowSpecialEffect","False"));
+    ENABLE_EXP_REFUSAL = Boolean.parseBoolean(L2JModSettings.getProperty("AllowExpRefusal", "true"));
+
  if (TVT_EVENT_PARTICIPATION_NPC_ID == 0)
  {
  TVT_EVENT_ENABLED = false;
Index: java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java
===================================================================
--- java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java (revision 5526)
+++ java/com/l2jserver/gameserver/network/clientpackets/RequestRestart.java (working copy)
@@ -65,6 +65,26 @@
  return;
  }
 
+ if (L2PcInstance._isoneffect == true)
+ {
+ L2PcInstance._isoneffect = false;
+ }
+
+ if (L2PcInstance._istraderefusal == true)
+ {
+ L2PcInstance._istraderefusal = false;
+ }
+
+ if (L2PcInstance._ispmrefusal == true)
+ {
+ L2PcInstance._ispmrefusal = false;
+ }
+
+ if (L2PcInstance._isexpsprefusal == true)
+ {
+ L2PcInstance._isexpsprefusal = false;
+ }
+
  if (player.isLocked())
  {
  _log.warning("Player " + player.getName() + " tried to restart during class change.");
Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 5526)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -297,6 +300,28 @@
  */
 public final class L2PcInstance extends L2Playable
 {
+   
+ // User panel
+ public static boolean _isoneffect = false;
+ public static boolean _ispmrefusal = false;
+ public static boolean _istraderefusal = false;
+ public static boolean _isexpsprefusal = false;

  // Character Skill SQL String Definitions:
  private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE charId=? AND class_index=?";
  private static final String ADD_NEW_SKILL = "INSERT INTO character_skills (charId,skill_id,skill_level,class_index) VALUES (?,?,?,?)";

Index: java/com/l2jserver/gameserver/network/clientpackets/Logout.java
===================================================================
--- java/com/l2jserver/gameserver/network/clientpackets/Logout.java (revision 5526)
+++ java/com/l2jserver/gameserver/network/clientpackets/Logout.java (working copy)
@@ -53,6 +53,26 @@
  if (player == null)
  return;
 
+ if (L2PcInstance._isoneffect == true)
+ {
+ L2PcInstance._isoneffect = false;
+ }
+
+ if (L2PcInstance._istraderefusal == true)
+ {
+ L2PcInstance._istraderefusal = false;
+ }
+
+ if (L2PcInstance._ispmrefusal == true)
+ {
+ L2PcInstance._ispmrefusal = false;
+ }
+
+ if (L2PcInstance._isexpsprefusal == true)
+ {
+ L2PcInstance._isexpsprefusal = false;
+ }
+
  if(player.getActiveEnchantItem() != null || player.getActiveEnchantAttrItem() != null)
  {
  player.sendPacket(ActionFailed.STATIC_PACKET);
Index: java/com/l2jserver/gameserver/model/actor/L2Attackable.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/L2Attackable.java (revision 5526)
+++ java/com/l2jserver/gameserver/model/actor/L2Attackable.java (working copy)
@@ -718,6 +718,15 @@
  exp *= Config.L2JMOD_CHAMPION_REWARDS;
  sp *= Config.L2JMOD_CHAMPION_REWARDS;
  }
+
+ if (attacker instanceof L2PcInstance)
+ {
+ if (((L2PcInstance) attacker)._isexpsprefusal == true)
+ {
+ exp = 0;
+ sp = 0;
+ }
+ }
 
  // Check for an over-hit enabled strike
  if (attacker instanceof L2PcInstance)

CitarData:

### Eclipse Workspace Patch 1.0
#P L2J_DataPack
Index: dist/game/data/scripts/handlers/MasterHandler.java
===================================================================
--- dist/game/data/scripts/handlers/MasterHandler.java (revision 9024)
+++ dist/game/data/scripts/handlers/MasterHandler.java (working copy)
@@ -284,15 +288,23 @@
 import handlers.voicedcommandhandlers.Debug;
 import handlers.voicedcommandhandlers.Hellbound;
+import handlers.voicedcommandhandlers.UserActions;
+import handlers.voicedcommandhandlers.User;
 import handlers.voicedcommandhandlers.Lang;
 import handlers.voicedcommandhandlers.StatsVCmd;
@@ -603,6 +619,14 @@
        if (Config.L2JMOD_MULTILANG_ENABLE && Config.L2JMOD_MULTILANG_VOICED_ALLOW)
            VoicedCommandHandler.getInstance().registerVoicedCommandHandler(new Lang());
        if (Config.L2JMOD_DEBUG_VOICE_COMMAND)
            VoicedCommandHandler.getInstance().registerVoicedCommandHandler(new Debug());

        +if (Config.SHOW_USER)
            VoicedCommandHandler.getInstance().registerVoicedCommandHandler(new User());
       
        +if (Config.SHOW_USER)
            VoicedCommandHandler.getInstance().registerVoicedCommandHandler(new UserActions());
  },
  {
  // Target Handlers
Index: dist/game/data/scripts/handlers/voicedcommandhandlers/UserActions.java
===================================================================
--- dist/game/data/scripts/handlers/voicedcommandhandlers/UserActions.java (revision 0)
+++ dist/game/data/scripts/handlers/voicedcommandhandlers/UserActions.java (revision 0)
@@ -0,0 +1,261 @@
+/*
+ * 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.voicedcommandhandlers;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.effects.AbnormalEffect;
+import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
+
+/**
+ * @author NeverMore
+ *
+ */
+
+public class UserActions implements IVoicedCommandHandler
+{
+    public static final String[] VOICED_COMMANDS = { "effecton" , "effectoff", "tradeoff", "tradeon" ,"expoff" , "expon", "pmoff", "pmon" };
+
+ @Override
+ public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target)
+ {
+ if ((command.startsWith("effecton")))
+ {
+ if (Config.ENABLE_SPECIAL_EFFECT)
+ {
+ if (L2PcInstance._isoneffect == false)
+ {
+ activeChar.startAbnormalEffect(AbnormalEffect.VITALITY);
+ activeChar.sendMessage("Your custom effect enabled!");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Your custom effect is now enabled!", 4000);
+ activeChar.sendPacket(message1);
+ L2PcInstance._isoneffect = true;
+ }
+ else
+ {
+ activeChar.sendMessage("Your effect is already enabled!");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Your effect is already enabled!", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+ }
+ }
+ else
+ {
+ activeChar.sendMessage("This command is disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("This command is disabled by admin!", 4000);
+ activeChar.sendPacket(message1);
+ }
+ }
+ if ((command.startsWith("effectoff")))
+ {
+ if (Config.ENABLE_SPECIAL_EFFECT)
+ {
+ if (L2PcInstance._isoneffect == true)
+ {
+ activeChar.stopAbnormalEffect(AbnormalEffect.VITALITY);
+ activeChar.sendMessage("Your custom effect is now disabled!");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Your custom effect is now disabled!",4000);
+ activeChar.sendPacket(message1);
+ L2PcInstance._isoneffect = false;
+ }
+ else
+ {
+ activeChar.sendMessage("You dont have effect enabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("You dont have effect enabled", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+ }
+ }
+ else
+ {
+ activeChar.sendMessage("This command is disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("This command is disabled by admin!", 4000);
+ activeChar.sendPacket(message1);
+ }
+ }
+ if ((command.startsWith("tradeoff")))
+ {
+ if (Config.ENABLE_TRADE_REFUSAL)
+ {
+ if (L2PcInstance._istraderefusal == false)
+ {
+ activeChar.setTradeRefusal(true);
+ activeChar.sendMessage("Trade refusal enabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Trade refusal mode is now enabled!", 4000);
+ activeChar.sendPacket(message1);
+ L2PcInstance._istraderefusal = true;
+ }
+ else
+ {
+ activeChar.sendMessage("You are already in trade refusal mode!");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("You are already in trade refusal mode!", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+ }
+ }
+ else
+ {
+ activeChar.sendMessage("This command is disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("This command is disabled by admin!", 4000);
+ activeChar.sendPacket(message1);
+ }
+ }
+ if ((command.startsWith("tradeon")))
+ {
+ if (Config.ENABLE_TRADE_REFUSAL)
+ {
+ if (L2PcInstance._istraderefusal == true)
+ {
+ activeChar.setTradeRefusal(false);
+ activeChar.sendMessage("Trade refusal disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Trade refusal mode is now disabled!", 4000);
+ activeChar.sendPacket(message1);
+ L2PcInstance._istraderefusal = false;
+ }
+ else
+ {
+ activeChar.sendMessage("You are not in trade refusal mode!");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("You are not in trade refusal mode!", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+ }
+ }
+ else
+ {
+ activeChar.sendMessage("This command is disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("This command is disabled by admin!", 4000);
+ activeChar.sendPacket(message1);
+ }
+ }
+ if ((command.startsWith("expoff")))
+ {
+ if (Config.ENABLE_EXP_REFUSAL)
+ {
+ if (L2PcInstance._isexpsprefusal == false)
+ {
+ activeChar.sendMessage("Exp/sp refusal enabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Exp/sp refusal mode is now enabled!", 4000);
+ activeChar.sendPacket(message1);
+ L2PcInstance._isexpsprefusal = true;
+ }
+ else
+ {
+ activeChar.sendMessage("You are already in exp/sp refusal mode!");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("You are already in exp/sp refusal mode!", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+ }
+ }
+ else
+ {
+ activeChar.sendMessage("This command is disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("This command is disabled by admin!", 4000);
+ activeChar.sendPacket(message1);
+ }
+ }
+ if ((command.startsWith("expon")))
+ {
+ if (Config.ENABLE_TRADE_REFUSAL)
+ {
+ if (L2PcInstance._isexpsprefusal == true)
+ {
+ activeChar.sendMessage("Exp/sp refusal disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Exp/sp refusal mode is now disabled!", 4000);
+ activeChar.sendPacket(message1);
+ L2PcInstance._isexpsprefusal = false;
+ }
+ else
+ {
+ activeChar.sendMessage("You are not in exp/sp refusal mode!");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("You are not in exp/sp refusal mode!", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+ }
+ }
+ else
+ {
+ activeChar.sendMessage("This command is disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("This command is disabled by admin!", 4000);
+ activeChar.sendPacket(message1);
+ }
+ }
+ if ((command.startsWith("pmon")))
+ {
+ if ( Config.ENABLE_PM_REFUSAL)
+ {
+ if (L2PcInstance._ispmrefusal == true)
+ {
+ activeChar.setMessageRefusal(false);
+ activeChar.sendMessage("Pm refusal mode disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Pm refusal mode is now disabled!", 4000);
+ activeChar.sendPacket(message1);
+ L2PcInstance._ispmrefusal = false;
+ }
+ else
+ {
+ activeChar.sendMessage("You are not in pm refusal mode!");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("You are not in pm refusal mode!", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+ }
+ }
+ else
+ {
+ activeChar.sendMessage("This command is disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("This command is disabled by admin!", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+ }
+
+ }
+ if ((command.startsWith("pmoff")))
+ {
+ if (Config.ENABLE_PM_REFUSAL)
+ {
+ if (L2PcInstance._ispmrefusal == false)
+ {
+ activeChar.setMessageRefusal(true);
+ activeChar.sendMessage("Pm refusal mode enabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("Pm refusal mode is now enabled!", 4000);
+ activeChar.sendPacket(message1);
+ L2PcInstance._ispmrefusal = true;
+ }
+ else
+ {
+ activeChar.sendMessage("You are already in pm refusal mode!");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("You are already in pm refusal mode!", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+ }
+ }
+ else
+ {
+ activeChar.sendMessage("This command is disabled");
+ ExShowScreenMessage message1 = new ExShowScreenMessage("This command is disabled by admin!", 4000);
+ activeChar.sendPacket(message1);
+ return false;
+
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public String[] getVoicedCommandList()
+ {
+ return VOICED_COMMANDS;
+ }
+}
\ No newline at end of file
Index: dist/game/data/html/userpanel/user2.htm
===================================================================
--- dist/game/data/html/userpanel/user2.htm (revision 0)
+++ dist/game/data/html/userpanel/user2.htm (revision 0)
@@ -0,0 +1,94 @@
+<html><head><title>User actions</title></head><body>
+<center><br>
+<table width="270" cellpadding="5">
+<tr>
+<td valign="top"><font color="3399ff"> %name% </font>,from here you are able to use many features of our server and make your gameplay easier!</td>!
+</tr>
+</table>
+</center>
+<br><font color="333333" align="center">_____________________________________</font><br>
+<center><font color="3399ff">Exp/Sp refusal mode</font></center><br>
+
+<center><table width=230>
+<tr>
+<td align=center>Info</td>
+<td align=center>Status</td>
+<td align=center>On/Off</td>
+</tr>
+<tr><td height="5"></td></tr>
+<tr>
+<td align=center><font color="FF9933">Disable gaining </font></td>
+<td align=center><font color="FFFF33">%exp%</font></td>
+<td align=center><button value="Enable" action="bypass -h voice .expoff $UserActions" width=65 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+<tr>
+<td align=center><font color="FFFF33">exp/sp</font></td>
+<td align=center><font color="FF9933"></font></td>
+<td align=center><button value="Disable" action="bypass -h voice .expon $UserActions" width=65 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+</table></center><br><font color="333333" align="center">_____________________________________</font><br>
+<center><font color="3399ff">Pm refusal mode</font></center><br>
+
+<center><table width=230>
+<tr>
+<td align=center>Info</td>
+<td align=center>Status</td>
+<td align=center>On/Off</td>
+</tr>
+<tr><td height="5"></td></tr>
+<tr>
+<td align=center><font color="FF9933">Blocks all pm's</font></td>
+<td align=center><font color="FFFF33">%pm%</font></td>
+<td align=center><button value="Enable" action="bypass -h voice .pmoff $UserActions" width=65 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+<tr>
+<td align=center><font color="FFFF33"></font></td>
+<td align=center><font color="FF9933"></font></td>
+<td align=center><button value="Disable" action="bypass -h voice .pmon $UserActions" width=65 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+</table></center><br>
+<font color="333333" align="center">_____________________________________</font><br>
+<center><font color="3399ff">Trade refusal mode</font></center><br>
+
+<center><table width=230>
+<tr>
+<td align=center>Info</td>
+<td align=center>Status</td>
+<td align=center>On/Off</td>
+</tr>
+<tr><td height="5"></td></tr>
+<tr>
+<td align=center><font color="FF9933">Blocks all trade's</font></td>
+<td align=center><font color="FFFF33">%trade%</font></td>
+<td align=center><button value="Enable" action="bypass -h voice .tradeoff $UserActions" width=65 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+<tr>
+<td align=center><font color="FFFF33"></font></td>
+<td align=center><font color="FF9933"></font></td>
+<td align=center><button value="Disable" action="bypass -h voice .tradeon $UserActions" width=65 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+</table></center><br>
+<font color="333333" align="center">_______________________________________</font><br>
+<center><font color="3399ff">Custom Effect</font></center><br>
+
+<center><table width=260>
+<tr>
+<td align=center>Info</td>
+<td align=center>Status</td>
+<td align=center>On/Off</td>
+</tr>
+<tr><td height="5"></td></tr>
+<tr>
+<td align=center><font color="FF9933">Enable an</font></td>
+<td align=center><font color="FFFF33">%effect%</font></td>
+<td align=center><button value="Enable" action="bypass -h voice .effecton $UserActions" width=65 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+<tr>
+<td align=center><font color="FF9933"> custom effect</font></td>
+<td align=center><font color="FF9933"></font></td>
+<td align=center><button value="Disable" action="bypass -h voice .effectoff $UserActions" width=65 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+</table></center><br><br>
+<font color="333333" align="center">_______________________________________</font>
+<br><center><button action="bypass -h voice .user $User" value="Back" width=50 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
+<br><center><font color=\"A9A9A9\">~ by NeverMore ~</font></center></body></html>
\ No newline at end of file
Index: dist/game/data/html/userpanel/user.htm
===================================================================
--- dist/game/data/html/userpanel/user.htm (revision 0)
+++ dist/game/data/html/userpanel/user.htm (revision 0)
@@ -0,0 +1,37 @@
+<html><head><title>User Panel</title></head><body>
+<center><br>
+<table width="270" cellpadding="5">
+<tr>
+<td valign="top">Hello <font color="3399ff"> %name% </font>,<br1>
+Use this command to enable/disable user actions or learn whatever is related with our server!</td>!
+</tr>
+</table>
+</center>
+<br><font color="333333" align="center">_______________________________________</font><br><br>
+<center>
+<table width=225 border=0><tr><br>
+<td><button action="bypass -h voice .user1 $User" value="Usefull Info" width=90 height=18 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+<td><button action="bypass -h voice .user2 $User" value="User Actions" width=90 height=18 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr></table></center><br><td><center><button action="bypass -h voice .user3 $User" value="Change log" width=90 height=18 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td></center><br><br>
+<font color="333333" align="center">_______________________________________</font><br>
+<center><font color="3399ff">Server Statistics</font></center><br>
+<table border=0 cellspacing=0 cellpadding=2 bgcolor=111111>
+<tr>
+<td fixwidth=11></td>
+<td FIXWIDTH=280>Players Online</td>
+<td FIXWIDTH=470><font color=FF6600>%online%</font></td>
+</tr>
+%serveronline%
+<tr>
+<td fixwidth=11></td>
+<td FIXWIDTH=280>Server Capacity</td>
+<td FIXWIDTH=470><font color=FF6600>%servercapacity%</font></td>
+</tr>
+<tr>
+<td fixwidth=11></td>
+<td FIXWIDTH=280>Server Onl.Time</td>
+<td FIXWIDTH=470><font color=FF6600>%serverruntime%</font></td>
+</tr>
+</table><br><font color="333333" align="center">_______________________________________</font>
+<br>
+<center><font color=\"A9A9A9\">~ By NeverMore ~</font></center></body></html>
Index: dist/game/data/html/userpanel/user1.htm
===================================================================
--- dist/game/data/html/userpanel/user1.htm (revision 0)
+++ dist/game/data/html/userpanel/user1.htm (revision 0)
@@ -0,0 +1,28 @@
+<html><head><title>Usefull Information</title></head><body>
+<center><br>
+<table width="270" cellpadding="5">
+<tr>
+<td valign="top"><font color="3399ff"> %name% </font>,read this usefull information and learn every feature that our server supports!</td>!
+</tr>
+</table>
+</center>
+<br><font color="333333" align="center">_______________________________________</font><br>
+<center><font color="3399ff">GamePlay Informations</font></center><br>
+<center><table>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+</table></center><br><font color="333333" align="center">_______________________________________</font><br><center><font color="3399ff">Vote Informations</font></center><br>
+<center><table>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+</table></center><br><font color="333333" align="center">_______________________________________</font><br>
+<br><center><font color="3399ff">PvP Informations</font></center><br>
+<center><table>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+</table></center><br><font color="333333" align="center">_______________________________________</font>
+<br><center><button action="bypass -h voice .user $User" value="Back" width=50 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df">
+<center><font color=\"A9A9A9\">~ By NeverMore ~</font></center></body></html>
\ No newline at end of file
Index: dist/game/data/html/userpanel/user3.htm
===================================================================
--- dist/game/data/html/userpanel/user3.htm (revision 0)
+++ dist/game/data/html/userpanel/user3.htm (revision 0)
@@ -0,0 +1,28 @@
+<html><head><title>Change log</title></head><body>
+<center><br>
+<table width="270" cellpadding="5">
+<tr>
+<td valign="top"><font color="3399ff"> %name% </font>,here you can read our server changes!</td>!
+</tr>
+</table>
+</center>
+<br><font color="333333" align="center">_______________________________________</font><br>
+<center><font color="3399ff">12/8/2012</font></center><br>
+<center><table>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+</table></center><br><font color="333333" align="center">_______________________________________</font><br><center><font color="3399ff">10/8/2012</font></center><br>
+<center><table>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+</table></center><br><font color="333333" align="center">_______________________________________</font><br>
+<br><center><font color="3399ff">8/8/2012</font></center><br>
+<center><table>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+<tr><td><font color="3399ff">*</font>   To.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.doTo.do</td></tr>
+</table></center><br><font color="333333" align="center">_______________________________________</font>
+<br><center><button action="bypass -h voice .user $User" value="Back" width=50 height=16 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"><br>
+<center><font color=\"A9A9A9\">~ By NeverMore ~</font></center></body></html>
\ No newline at end of file
Index: dist/game/data/scripts/handlers/voicedcommandhandlers/User.java
===================================================================
--- dist/game/data/scripts/handlers/voicedcommandhandlers/User.java (revision 0)
+++ dist/game/data/scripts/handlers/voicedcommandhandlers/User.java (revision 0)
@@ -0,0 +1,157 @@
+package handlers.voicedcommandhandlers;
+
+import com.l2jserver.Config;
+import com.l2jserver.gameserver.GameTimeController;
+import com.l2jserver.gameserver.cache.HtmCache;
+import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
+import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
+
+/**
+ * @author NeverMore
+ */
+
+public class User implements IVoicedCommandHandler
+{
+       public static final String[] VOICED_COMMANDS = { "user" , "user1", "user2", "user3" };
+     
+       @Override
+ public boolean useVoicedCommand(String command, L2PcInstance activeChar, String params)
+       {
+           if (Config.SHOW_USER)
+       {
+           if(command.equalsIgnoreCase("user"))
+           {
+           User.showUserPage(activeChar, "user.htm");
+           }     
+         if(command.equalsIgnoreCase("user1"))
+           {
+           User.showUserPage(activeChar, "user1.htm");
+           } 
+         if(command.equalsIgnoreCase("user2"))
+           {
+           User.showUserPage(activeChar, "user2.htm");
+           }
+         if(command.equalsIgnoreCase("user3"))
+           {
+           User.showUserPage(activeChar, "user3.htm");
+           }
+       }
+           else
+           {
+    activeChar.sendMessage("This command is disabled");
+    ExShowScreenMessage message1 = new ExShowScreenMessage("This command is disabled by admin!", 4000);
+    activeChar.sendPacket(message1);
+    return false;
+           }   
+ return false;     
+       }     
+     
+       public static String getServerRunTime()
+       {
+       int timeSeconds = (GameTimeController.getGameTicks() - 36000) / 10;
+       String timeResult = "";
+       if (timeSeconds >= 86400)
+       timeResult = Integer.toString(timeSeconds / 86400) + " Days " + Integer.toString((timeSeconds % 86400) / 3600) + " hours";
+       else
+       timeResult = Integer.toString(timeSeconds / 3600) + " Hours " + Integer.toString((timeSeconds % 3600) / 60) + " mins";
+       return timeResult;
+       }
+             
+       public static String getRealOnline()
+       {
+       int counter = 0;
+       for (L2PcInstance onlinePlayer : L2World.getInstance().getAllPlayersArray())
+       {
+       if (onlinePlayer.isOnline() && (onlinePlayer.getClient() != null && !onlinePlayer.getClient().isDetached()))
+       {
+       counter++;
+       }
+       }
+       String realOnline = "<tr><td fixwidth=11></td><td FIXWIDTH=280>Players Active</td><td FIXWIDTH=470><font color=FF6600>" + counter + "</font></td></tr>" + "<tr><td fixwidth=11></td><td FIXWIDTH=280>Players Shops</td><td FIXWIDTH=470><font color=FF6600>" + (L2World.getInstance().getAllPlayersCount() - counter) + "</font></td></tr>";
+       return realOnline;
+       }
+       
+       public static void showUserPage(L2PcInstance targetChar, String filename)
+       {
+       String content = HtmCache.getInstance().getHtmForce(targetChar.getHtmlPrefix(), "data/html/userpanel/" + filename);
+       NpcHtmlMessage UserPanelReply = new NpcHtmlMessage(5);
+       UserPanelReply.setHtml(content);
+       UserPanelReply.replace("%online%", String.valueOf(L2World.getInstance().getAllPlayers().size()));
+       UserPanelReply.replace("%name%", String.valueOf(targetChar.getName()));
+       UserPanelReply.replace("%serveronline%", getRealOnline());
+       UserPanelReply.replace("%servercapacity%", Integer.toString(Config.MAXIMUM_ONLINE_USERS));
+       UserPanelReply.replace("%serverruntime%", getServerRunTime());
+       UserPanelReply.replace("%playernumber%", String.valueOf(L2World.getInstance().getAllPlayers().size()));
+       if (!Config.ENABLE_SPECIAL_EFFECT)
+    {
+    UserPanelReply.replace("%effect%", "Disabled");
+    }
+    else if (L2PcInstance._isoneffect == true)
+    {
+    UserPanelReply.replace("%effect%", "ON");
+    }
+    else 
+    {
+    UserPanelReply.replace("%effect%", "OFF");
+    }
+       if (!Config.ENABLE_PM_REFUSAL)
+       {
+       UserPanelReply.replace("%pm%", "Disabled");
+       }
+       else if (L2PcInstance._ispmrefusal == true)
+       {
+       UserPanelReply.replace("%pm%", "ON");
+       }
+       else
+       {
+       UserPanelReply.replace("%pm%", "OFF");
+       }
+       if (!Config.ENABLE_TRADE_REFUSAL)
+       {
+       UserPanelReply.replace("%trade%", "Disabled");
+       }
+       else if (L2PcInstance._istraderefusal == true)
+       {
+       UserPanelReply.replace("%trade%", "ON");
+       }
+       else
+       {
+       UserPanelReply.replace("%trade%", "OFF");
+       }
+       if (!Config.ENABLE_EXP_REFUSAL)
+       {
+    UserPanelReply.replace("%exp%", "Disabled");
+       }
+       else if (L2PcInstance._isexpsprefusal == true)
+       {
+    UserPanelReply.replace("%exp%", "ON");
+       }
+       else
+       {
+    UserPanelReply.replace("%exp%", "OFF");
+       }
+    if (!Config.ENABLE_SPECIAL_EFFECT)
+    {
+    UserPanelReply.replace("%effect%", "Disabled");
+    }
+    else if (L2PcInstance._isoneffect == true)
+    {
+    UserPanelReply.replace("%effect%", "ON");
+    }
+    else 
+    {
+    UserPanelReply.replace("%effect%", "OFF");
+    }       
+       targetChar.sendPacket(UserPanelReply);
+ }
+
+
+ @Override
+ public String[] getVoicedCommandList()
+       {
+               return VOICED_COMMANDS;
+       }
+}
\ No newline at end of file

Creditos: NeverMore y bernabas.