Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Evento Survey Mod (Preguntas)

Iniciado por Swarlog, Jun 29, 2025, 12:14 AM

Tema anterior - Siguiente tema

Swarlog


Este mod sirve para hacer una encuesta a todos los Players Online. Les pones dos o mas respuestas y votan por la respuesta que consideren.

Index: data/xml/admin_commands_rights.xml
===================================================================
--- data/xml/admin_commands_rights.xml	(revision 9)
+++ data/xml/admin_commands_rights.xml	(working copy)
@@ -362,4 +362,22 @@
 	<aCar name="admin_zone_visual" accessLevel="1" />
 	<aCar name="admin_zone_visual_clear" accessLevel="1" />
 	
+	<!-- ADMIN SURVEY -->
+	<aCar name="admin_survey_start" accessLevel="1" />
+	<aCar name="admin_survey_results" accessLevel="1" />
+	<aCar name="admin_opmore" accessLevel="1" />
+	<aCar name="admin_opless" accessLevel="1" />
+	<aCar name="admin_survey_run1" accessLevel="1" />
+	<aCar name="admin_survey_run2" accessLevel="1" />
+	<aCar name="admin_survey_run3" accessLevel="1" />
+	<aCar name="admin_survey_run4" accessLevel="1" />
+	<aCar name="admin_survey_qset" accessLevel="1" />
+	<aCar name="admin_survey_ans1set" accessLevel="1" />
+	<aCar name="admin_survey_ans2set" accessLevel="1" />
+	<aCar name="admin_survey_ans3set" accessLevel="1" />
+	<aCar name="admin_survey_ans4set" accessLevel="1" />
+	<aCar name="admin_survey_ans5set" accessLevel="1" />
+	<aCar name="admin_survey_end" accessLevel="1" />
+	<aCar name="admin_survey_results" accessLevel="1" />
+	
 </list>
\ No newline at end of file

Index: java/net/sf/l2j/gameserver/GameServer.java
===================================================================
--- java/net/sf/l2j/gameserver/GameServer.java	(revision 9)
+++ java/net/sf/l2j/gameserver/GameServer.java	(working copy)
@@ -72,6 +72,7 @@
 import net.sf.l2j.gameserver.handler.ItemHandler;
 import net.sf.l2j.gameserver.handler.SkillHandler;
 import net.sf.l2j.gameserver.handler.UserCommandHandler;
+import net.sf.l2j.gameserver.handler.VoicedCommandHandler;
 import net.sf.l2j.gameserver.idfactory.IdFactory;
 import net.sf.l2j.gameserver.instancemanager.AuctionManager;
 import net.sf.l2j.gameserver.instancemanager.AutoSpawnManager;
@@ -294,6 +295,7 @@
 		_log.config("ItemHandler: Loaded " + ItemHandler.getInstance().size() + " handlers.");
 		_log.config("SkillHandler: Loaded " + SkillHandler.getInstance().size() + " handlers.");
 		_log.config("UserCommandHandler: Loaded " + UserCommandHandler.getInstance().size() + " handlers.");
+		_log.config("VoicedCommandHandler: Loaded " + VoicedCommandHandler.getInstance().size() + " handlers.");
 		
 		if (Config.ALLOW_WEDDING)
 			CoupleManager.getInstance();
Index: java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java	(revision 9)
+++ java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java	(working copy)
@@ -62,6 +62,7 @@
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSiege;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSkill;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSpawn;
+import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSurvey;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTarget;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTeleport;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminZone;
@@ -122,6 +123,7 @@
 		registerAdminCommandHandler(new AdminSiege());
 		registerAdminCommandHandler(new AdminSkill());
 		registerAdminCommandHandler(new AdminSpawn());
+		registerAdminCommandHandler(new AdminSurvey());
 		registerAdminCommandHandler(new AdminTarget());
 		registerAdminCommandHandler(new AdminTeleport());
 		registerAdminCommandHandler(new AdminZone());
Index: java/net/sf/l2j/gameserver/handler/IVoicedCommandHandler.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/IVoicedCommandHandler.java	(revision 0)
+++ java/net/sf/l2j/gameserver/handler/IVoicedCommandHandler.java	(revision 0)
@@ -0,0 +1,34 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.handler;
+
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+public interface IVoicedCommandHandler
+{
+	
+	/**
+	 * this is the worker method that is called when someone uses an admin command.
+	 * @param activeChar
+	 * @param command
+	 * @param target
+	 * @return command success
+	 */
+	
+	public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target);
+	
+	public String[] getVoicedCommandList();
+	
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java	(revision 0)
+++ java/net/sf/l2j/gameserver/handler/VoicedCommandHandler.java	(revision 0)
@@ -0,0 +1,76 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.handler;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import net.sf.l2j.Config;
+import net.sf.l2j.gameserver.handler.voicedcommandhandler.Survey;
+
+public class VoicedCommandHandler
+{
+	private static Logger _log = Logger.getLogger(VoicedCommandHandler.class.getName());
+	private Map<Integer, IVoicedCommandHandler> _datatable = new HashMap<>();
+	
+	public static VoicedCommandHandler getInstance()
+	{
+		return SingletonHolder._instance;
+	}
+	
+	protected VoicedCommandHandler()
+	{
+		_datatable = new HashMap<>();
+		
+		registerVoicedCommandHandler(new Survey());
+	}
+	
+	public void registerVoicedCommandHandler(IVoicedCommandHandler handler)
+	{
+		String[] ids = handler.getVoicedCommandList();
+		for (String id : ids)
+		{
+			if (Config.DEBUG)
+				_log.fine("Adding handler for command " + id);
+			_datatable.put(id.hashCode(), handler);
+		}
+	}
+	
+	public IVoicedCommandHandler getVoicedCommandHandler(String voicedCommand)
+	{
+		String command = voicedCommand;
+		
+		if (voicedCommand.indexOf(" ") != -1)
+			command = voicedCommand.substring(0, voicedCommand.indexOf(" "));
+		
+		if (Config.DEBUG)
+			_log.fine("getting handler for command: " + command + " -> " + (_datatable.get(command.hashCode()) != null));
+		return _datatable.get(command.hashCode());
+	}
+	
+	/**
+	 * @return
+	 */
+	public int size()
+	{
+		return _datatable.size();
+	}
+	
+	private static class SingletonHolder
+	{
+		protected static final VoicedCommandHandler _instance = new VoicedCommandHandler();
+	}
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSurvey.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSurvey.java	(revision 0)
+++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSurvey.java	(revision 0)
@@ -0,0 +1,778 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package net.sf.l2j.gameserver.handler.admincommandhandlers;
+
+import java.util.Collection;
+import java.util.StringTokenizer;
+
+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.clientpackets.Say2;
+import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
+import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
+import net.sf.l2j.gameserver.util.Broadcast;
+
+/**
+ * @author Elfocrash
+ * @Author Toxico
+ */
+
+public class AdminSurvey implements IAdminCommandHandler
+{
+	public static int options = 2;
+	public static int mode = 0;
+	public static boolean running = false;
+	private static boolean qset = false;
+	private static boolean ans1set = false;
+	private static boolean ans2set = false;
+	private static boolean ans3set = false;
+	private static boolean ans4set = false;
+	private static boolean ans5set = false;
+	public static String quest = "";
+	public static String ans1 = "";
+	public static String ans2 = "";
+	public static String ans3 = "";
+	public static String ans4 = "";
+	public static String ans5 = "";
+	public static int ans1_vote_count = 0;
+	public static int ans2_vote_count = 0;
+	public static int ans3_vote_count = 0;
+	public static int ans4_vote_count = 0;
+	public static int ans5_vote_count = 0;
+	
+	private static final String[] ADMIN_COMMANDS =
+	{
+		"admin_survey_start",
+		"admin_survey_results",
+		"admin_opmore",
+		"admin_opless",
+		"admin_survey_run1",
+		"admin_survey_run2",
+		"admin_survey_run3",
+		"admin_survey_run4",
+		"admin_survey_qset",
+		"admin_survey_ans1set",
+		"admin_survey_ans2set",
+		"admin_survey_ans3set",
+		"admin_survey_ans4set",
+		"admin_survey_ans5set",
+		"admin_survey_end",
+		"admin_survey_results"
+	};
+	
+	@Override
+	public boolean useAdminCommand(String command, L2PcInstance activeChar)
+	{
+		if (command.startsWith("admin_survey_start"))
+			startHtml(activeChar);
+		
+		if (command.startsWith("admin_survey_results"))
+			resultsHtml(activeChar);
+		
+		if (command.startsWith("admin_survey_end"))
+		{
+			int moreVotes = ans1_vote_count;
+			if (moreVotes < ans2_vote_count)
+			{
+				moreVotes = ans2_vote_count;
+			}
+			if (moreVotes < ans3_vote_count)
+			{
+				moreVotes = ans3_vote_count;
+			}
+			if (moreVotes < ans4_vote_count)
+			{
+				moreVotes = ans4_vote_count;
+			}
+			if (moreVotes < ans5_vote_count)
+			{
+				moreVotes = ans5_vote_count;
+			}
+			
+			Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "The survey session is over.Thanks everyone for voting."));
+			if (moreVotes == ans1_vote_count)
+				Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "The answer " + ans1 + " won the survey with " + ans1_vote_count + " votes on the question : " + quest + "."));
+			if (moreVotes == ans2_vote_count)
+				Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "The answer " + ans2 + " won the survey with " + ans2_vote_count + " votes on the question : " + quest + "."));
+			if (moreVotes == ans3_vote_count)
+				Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "The answer " + ans3 + " won the survey with " + ans3_vote_count + " votes on the question : " + quest + "."));
+			if (moreVotes == ans4_vote_count)
+				Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "The answer " + ans4 + " won the survey with " + ans4_vote_count + " votes on the question : " + quest + "."));
+			if (moreVotes == ans5_vote_count)
+				Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "The answer " + ans5 + " won the survey with " + ans5_vote_count + " votes on the question : " + quest + "."));
+			
+			running = false;
+			resultsHtml(activeChar);
+			quest = "";
+			ans1 = "";
+			ans2 = "";
+			ans3 = "";
+			ans4 = "";
+			ans5 = "";
+			mode = 0;
+			ans1_vote_count = 0;
+			ans2_vote_count = 0;
+			ans3_vote_count = 0;
+			ans4_vote_count = 0;
+			ans5_vote_count = 0;
+			setQset(false);
+			setAns1set(false);
+			setAns2set(false);
+			setAns3set(false);
+			setAns4set(false);
+			setAns5set(false);
+			
+			Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers().values();
+			for (L2PcInstance onlinePlayers : pls)
+			{
+				onlinePlayers.setHasVotedSurvey(false);
+			}
+			
+			Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "The survey session is over.Thanks everyone for voting."));
+		}
+		
+		if (command.startsWith("admin_opmore"))
+			if (options <= 4)
+			{
+				options++;
+				startHtml(activeChar);
+			}
+			else
+			{
+				return false;
+			}
+		
+		if (command.startsWith("admin_opless"))
+			if (options >= 3)
+			{
+				options--;
+				startHtml(activeChar);
+			}
+			else
+			{
+				return false;
+			}
+		
+		if (command.startsWith("admin_survey_qset"))
+		{
+			if (isQset())
+			{
+				quest = "";
+				setQset(false);
+				startHtml(activeChar);
+			}
+			else if (!isQset())
+			{
+				StringTokenizer s = new StringTokenizer(command);
+				s.nextToken();
+				
+				try
+				{
+					
+					while (s.hasMoreTokens())
+						quest = quest + s.nextToken() + " ";
+					setQset(true);
+					startHtml(activeChar);
+					
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+				}
+			}
+		}
+		
+		if (command.startsWith("admin_survey_ans1set"))
+		{
+			if (isAns1set())
+			{
+				ans1 = "";
+				setAns1set(false);
+				startHtml(activeChar);
+			}
+			else if (!isAns1set())
+			{
+				StringTokenizer s = new StringTokenizer(command);
+				s.nextToken();
+				
+				try
+				{
+					
+					while (s.hasMoreTokens())
+						ans1 = ans1 + s.nextToken() + " ";
+					setAns1set(true);
+					startHtml(activeChar);
+					
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+				}
+			}
+		}
+		
+		if (command.startsWith("admin_survey_ans2set"))
+		{
+			if (isAns2set())
+			{
+				ans2 = "";
+				setAns2set(false);
+				startHtml(activeChar);
+			}
+			else if (!isAns2set())
+			{
+				StringTokenizer s = new StringTokenizer(command);
+				s.nextToken();
+				
+				try
+				{
+					
+					while (s.hasMoreTokens())
+						ans2 = ans2 + s.nextToken() + " ";
+					setAns2set(true);
+					startHtml(activeChar);
+					
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+				}
+			}
+		}
+		
+		if (command.startsWith("admin_survey_ans3set"))
+		{
+			if (isAns3set())
+			{
+				ans3 = "";
+				setAns3set(false);
+				startHtml(activeChar);
+			}
+			else if (!isAns3set())
+			{
+				StringTokenizer s = new StringTokenizer(command);
+				s.nextToken();
+				
+				try
+				{
+					
+					while (s.hasMoreTokens())
+						ans3 = ans3 + s.nextToken() + " ";
+					setAns3set(true);
+					startHtml(activeChar);
+					
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+				}
+			}
+		}
+		if (command.startsWith("admin_survey_ans4set"))
+		{
+			if (isAns4set())
+			{
+				ans4 = "";
+				setAns4set(false);
+				startHtml(activeChar);
+			}
+			else if (!isAns4set())
+			{
+				StringTokenizer s = new StringTokenizer(command);
+				s.nextToken();
+				
+				try
+				{
+					
+					while (s.hasMoreTokens())
+						ans4 = ans4 + s.nextToken() + " ";
+					setAns4set(true);
+					startHtml(activeChar);
+					
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+				}
+			}
+		}
+		
+		if (command.startsWith("admin_survey_ans5set"))
+		{
+			if (isAns5set())
+			{
+				ans5 = "";
+				setAns5set(false);
+				startHtml(activeChar);
+			}
+			else if (!isAns5set())
+			{
+				StringTokenizer s = new StringTokenizer(command);
+				s.nextToken();
+				
+				try
+				{
+					
+					while (s.hasMoreTokens())
+						ans5 = ans5 + s.nextToken() + " ";
+					setAns5set(true);
+					startHtml(activeChar);
+					
+				}
+				catch (Exception e)
+				{
+					e.printStackTrace();
+				}
+			}
+		}
+		
+		if (command.startsWith("admin_survey_run1"))
+		{
+			if (running == true)
+			{
+				activeChar.sendMessage("A survey is already in progres.");
+				return false;
+			}
+			if (!isQset() || !isAns1set() || !isAns2set())
+			{
+				activeChar.sendMessage("You have to set all the fields before you start the survey");
+				return false;
+			}
+			mode = 1;
+			running = true;
+			Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "Admin started a new survey with main question " + quest + ". Use .survey to vote."));
+			
+		}
+		
+		if (command.startsWith("admin_survey_run2"))
+		{
+			if (running == true)
+			{
+				activeChar.sendMessage("A survey is already in progress");
+				return false;
+				
+			}
+			if (!isQset() || !isAns1set() || !isAns2set() || !isAns3set())
+			{
+				activeChar.sendMessage("You have to set all the fields before you start the survey");
+				return false;
+			}
+			mode = 2;
+			running = true;
+			Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "Admin started a new survey with main question " + quest + ". Use .survey to vote."));
+			
+		}
+		
+		if (command.startsWith("admin_survey_run3"))
+		{
+			if (running == true)
+			{
+				activeChar.sendMessage("A survey is already in progress");
+				return false;
+				
+			}
+			
+			if (!isQset() || !isAns1set() || !isAns2set() || !isAns3set() || !isAns4set())
+			{
+				activeChar.sendMessage("You have to set all the fields before you start the survey");
+				return false;
+			}
+			mode = 3;
+			running = true;
+			Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "Admin started a new survey with main question " + quest + ". Use .survey to vote."));
+			
+		}
+		
+		if (command.startsWith("admin_survey_run4"))
+		{
+			if (running == true)
+			{
+				activeChar.sendMessage("A survey is already in progress");
+				return false;
+				
+			}
+			
+			if (!isQset() || !isAns1set() || !isAns2set() || !isAns3set() || !isAns4set() || !isAns5set())
+			{
+				activeChar.sendMessage("You have to set all the fields before you start the survey");
+				return false;
+			}
+			mode = 4;
+			running = true;
+			Broadcast.toAllOnlinePlayers(new CreatureSay(0, Say2.ANNOUNCEMENT, "Survey", "Admin started a new survey with main question " + quest + ". Use .survey to vote."));
+			
+		}
+		
+		return true;
+	}
+	
+	@Override
+	public String[] getAdminCommandList()
+	{
+		return ADMIN_COMMANDS;
+	}
+	
+	private static void startHtml(L2PcInstance activeChar)
+	{
+		NpcHtmlMessage nhm = new NpcHtmlMessage(5);
+		StringBuilder tb = new StringBuilder("");
+		
+		tb.append("<html><head><title>Start Survey form</title></head><body>");
+		tb.append("<center>");
+		tb.append("<table width=\"250\" cellpadding=\"5\" bgcolor=\"000000\">");
+		tb.append("<tr>");
+		tb.append("<td width=\"45\" valign=\"top\" align=\"center\"><img src=\"L2ui_ch3.menubutton4\" width=\"38\" height=\"38\"></td>");
+		tb.append("<td valign=\"top\"><font color=\"FF6600\">Start a Survey</font>");
+		tb.append("<br1><font color=\"FF6600\">" + activeChar.getName() + "</font>, use this form in order to start a survey.<br1></td>");
+		tb.append("</tr>");
+		tb.append("</table>");
+		tb.append("</center>");
+		tb.append("<center>");
+		if (!isQset())
+		{
+			tb.append("<font color=\"FF6600\">Type in the main question of the survey.</font><br>");
+			tb.append("<table border=\"0\" width=\"250\" height=\"16\" bgcolor=\"000000\">");
+			tb.append("<tr><td><multiedit var=\"quest\" width=170 height=20></td><td><a action=\"bypass -h admin_survey_qset $quest\">Save</a></td></tr></table>");
+		}
+		if (isQset())
+		{
+			tb.append("<font color=\"FF6600\">The question set is:<br>");
+			tb.append("<table border=\"0\" width=\"250\" height=\"16\" bgcolor=\"000000\">");
+			tb.append("<tr><td><font color=\"FF0000\">" + quest + "</font></td><td><a action=\"bypass -h admin_survey_qset\">Edit</a></td></tr></table>");
+		}
+		tb.append("<br><font color=\"FF6600\">Possible answers.");
+		tb.append("<table border=\"0\" width=\"70\" height=\"16\" bgcolor=\"000000\">");
+		tb.append("<tr>");
+		tb.append("<td width=\"52\">More</td>");
+		tb.append("<td width=\"16\"><button action=\"bypass -h admin_opmore\" width=16 height=16 back=\"L2UI_CH3.upbutton_down\" fore=\"L2UI_CH3.upbutton\"></td>");
+		tb.append("</tr>");
+		tb.append("<tr>");
+		tb.append("<td width=\"52\">Less</td>");
+		tb.append("<td width=\"16\"><button action=\"bypass -h admin_opless\" width=16 height=16 back=\"L2UI_CH3.downbutton_down\" fore=\"L2UI_CH3.downbutton_down\"></td>");
+		tb.append("</tr>");
+		tb.append("</table>");
+		tb.append("<table width=\"300\" height=\"20\">");
+		tb.append("<tr>");
+		tb.append("<td align=\"center\" width=\"40\">Answer 1:</td>");
+		if (!isAns1set())
+		{
+			tb.append("<td align=\"center\" width=\"150\"><multiedit var=\"ans1\" width=150 height=16></td>");
+			tb.append("<td><a action=\"bypass -h admin_survey_ans1set $ans1\">Save</a></td>");
+		}
+		else if (isAns1set())
+		{
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + ans1 + "</font></td>");
+			tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans1set\">Edit</a></td>");
+		}
+		tb.append("</tr>");
+		tb.append("<tr>");
+		tb.append("<td align=\"center\" width=\"40\">Answer 2:</td>");
+		if (!isAns2set())
+		{
+			tb.append("<td align=\"center\" width=\"150\"><multiedit var=\"ans2\" width=150 height=16></td>");
+			tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans2set $ans2\">Save</a></td>");
+		}
+		else if (isAns2set())
+		{
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + ans2 + "</font></td>");
+			tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans2set\">Edit</a></td>");
+		}
+		tb.append("</tr>");
+		if (options == 3)
+		{
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 3:</td>");
+			if (!isAns3set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><multiedit var=\"ans3\" width=150 height=16></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans3set $ans3\">Save</a></td>");
+			}
+			else if (isAns3set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + ans3 + "</font></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans3set\">Edit</a></td>");
+			}
+			tb.append("</tr>");
+		}
+		if (options == 4)
+		{
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 3:</td>");
+			if (!isAns3set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><multiedit var=\"ans3\" width=150 height=16></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans3set $ans3\">Save</a></td>");
+			}
+			else if (isAns3set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + ans3 + "</font></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans3set\">Edit</a></td>");
+			}
+			tb.append("</tr>");
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 4:</td>");
+			if (!isAns4set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><multiedit var=\"ans4\" width=150 height=16></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans4set $ans4\">Save</a></td>");
+			}
+			else if (isAns4set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + ans4 + "</font></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans4set\">Edit</a></td>");
+			}
+			tb.append("</tr>");
+		}
+		if (options == 5)
+		{
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 3:</td>");
+			if (!isAns3set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><multiedit var=\"ans3\" width=150 height=16></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans3set $ans3\">Save</a></td>");
+			}
+			else if (isAns3set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + ans3 + "</font></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans3set\">Edit</a></td>");
+			}
+			tb.append("</tr>");
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 4:</td>");
+			if (!isAns4set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><multiedit var=\"ans4\" width=150 height=16></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans4set $ans4\">Save</a></td>");
+			}
+			else if (isAns4set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + ans4 + "</font></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans4set\">Edit</a></td>");
+			}
+			tb.append("</tr>");
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 5:</td>");
+			if (!isAns5set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><multiedit var=\"ans5\" width=150 height=16></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans5set $ans5\">Save</a></td>");
+			}
+			else if (isAns5set())
+			{
+				tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + ans5 + "</font></td>");
+				tb.append("<td align=\"center\"><a action=\"bypass -h admin_survey_ans5set\">Edit</a></td>");
+			}
+			tb.append("</tr>");
+		}
+		tb.append("</table><br>");
+		if (options == 2)
+			tb.append("<button value=\"Start the survey\" action=\"bypass -h admin_survey_run1\" width=150 height=22 back=\"L2UI_Ch3.bigbutton3_over\" fore=\"L2UI_Ch3.bigbutton3\">");
+		if (options == 3)
+			tb.append("<button value=\"Start the survey\" action=\"bypass -h admin_survey_run2\" width=150 height=22 back=\"L2UI_Ch3.bigbutton3_over\" fore=\"L2UI_Ch3.bigbutton3\">");
+		if (options == 4)
+			tb.append("<button value=\"Start the survey\" action=\"bypass -h admin_survey_run3\" width=150 height=22 back=\"L2UI_Ch3.bigbutton3_over\" fore=\"L2UI_Ch3.bigbutton3\">");
+		if (options == 5)
+			tb.append("<button value=\"Start the survey\" action=\"bypass -h admin_survey_run4\" width=150 height=22 back=\"L2UI_Ch3.bigbutton3_over\" fore=\"L2UI_Ch3.bigbutton3\">");
+		tb.append("</center>");
+		tb.append("</body></html>");
+		
+		nhm.setHtml(tb.toString());
+		activeChar.sendPacket(nhm);
+	}
+	
+	private static void resultsHtml(L2PcInstance activeChar)
+	{
+		NpcHtmlMessage nhm = new NpcHtmlMessage(5);
+		StringBuilder tb = new StringBuilder("");
+		
+		tb.append("<html><head><title>Survey form</title></head><body>");
+		tb.append("<center>");
+		tb.append("<table width=\"250\" cellpadding=\"5\" bgcolor=\"000000\">");
+		tb.append("<tr>");
+		tb.append("<td width=\"45\" valign=\"top\" align=\"center\"><img src=\"L2ui_ch3.menubutton4\" width=\"38\" height=\"38\"></td>");
+		tb.append("<td valign=\"top\"><font color=\"FF6600\">Survey</font>");
+		tb.append("<br1><font color=\"FF6600\">" + activeChar.getName() + "</font>, here are the survey's results.<br1></td>");
+		tb.append("</tr>");
+		tb.append("</table>");
+		tb.append("</center>");
+		tb.append("<center>");
+		tb.append("<font color=\"FF6600\">The question set is:<br>");
+		tb.append("<font color=\"FF0000\">" + AdminSurvey.quest + "</font></center>");
+		tb.append("<br><font color=\"FF6600\">Choose an answer.");
+		tb.append("<table width=\"300\" height=\"20\">");
+		tb.append("<tr>");
+		tb.append("<td align=\"center\" width=\"40\">Answer 1:</td>");
+		tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans1 + "</font></td>");
+		tb.append("<td align=\"center\"><font color=\"FF0000\">" + AdminSurvey.ans1_vote_count + "</font></td>");
+		tb.append("</tr>");
+		tb.append("<tr>");
+		tb.append("<td align=\"center\" width=\"40\">Answer 2:</td>");
+		tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans2 + "</font></td>");
+		tb.append("<td align=\"center\"><font color=\"FF0000\">" + AdminSurvey.ans2_vote_count + "</font></td>");
+		tb.append("</tr>");
+		if (mode == 2)
+		{
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 3:</td>");
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans3 + "</font></td>");
+			tb.append("<td align=\"center\"><font color=\"FF0000\">" + AdminSurvey.ans3_vote_count + "</font></td>");
+			
+			tb.append("</tr>");
+		}
+		if (mode == 3)
+		{
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 3:</td>");
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans3 + "</font></td>");
+			tb.append("<td align=\"center\"><font color=\"FF0000\">" + AdminSurvey.ans3_vote_count + "</font></td>");
+			
+			tb.append("</tr>");
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 4:</td>");
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans4 + "</font></td>");
+			tb.append("<td align=\"center\"><font color=\"FF0000\">" + AdminSurvey.ans4_vote_count + "</font></td>");
+			
+			tb.append("</tr>");
+		}
+		if (mode == 4)
+		{
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 3:</td>");
+			
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans3 + "</font></td>");
+			tb.append("<td align=\"center\"><font color=\"FF0000\">" + AdminSurvey.ans3_vote_count + "</font></td>");
+			
+			tb.append("</tr>");
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 4:</td>");
+			
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans4 + "</font></td>");
+			tb.append("<td align=\"center\"><font color=\"FF0000\">" + AdminSurvey.ans4_vote_count + "</font></td>");
+			
+			tb.append("</tr>");
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 5:</td>");
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans5 + "</font></td>");
+			tb.append("<td align=\"center\"><font color=\"FF0000\">" + AdminSurvey.ans5_vote_count + "</font></td>");
+			
+			tb.append("</tr>");
+		}
+		tb.append("</table><br>");
+		if (running == true)
+			tb.append("<center><button value=\"End the survey\" action=\"bypass -h admin_survey_end\" width=150 height=22 back=\"L2UI_Ch3.bigbutton3_over\" fore=\"L2UI_Ch3.bigbutton3\"></center>");
+		tb.append("</body></html>");
+		
+		nhm.setHtml(tb.toString());
+		activeChar.sendPacket(nhm);
+	}
+	
+	/**
+	 * @return the qset
+	 */
+	public static boolean isQset()
+	{
+		return qset;
+	}
+	
+	/**
+	 * @param qset the qset to set
+	 */
+	public static void setQset(boolean qset)
+	{
+		AdminSurvey.qset = qset;
+	}
+	
+	/**
+	 * @return the ans1set
+	 */
+	public static boolean isAns1set()
+	{
+		return ans1set;
+	}
+	
+	/**
+	 * @param ans1set the ans1set to set
+	 */
+	public static void setAns1set(boolean ans1set)
+	{
+		AdminSurvey.ans1set = ans1set;
+	}
+	
+	/**
+	 * @return the ans2set
+	 */
+	public static boolean isAns2set()
+	{
+		return ans2set;
+	}
+	
+	/**
+	 * @param ans2set the ans2set to set
+	 */
+	public static void setAns2set(boolean ans2set)
+	{
+		AdminSurvey.ans2set = ans2set;
+	}
+	
+	/**
+	 * @return the ans3set
+	 */
+	public static boolean isAns3set()
+	{
+		return ans3set;
+	}
+	
+	/**
+	 * @param ans3set the ans3set to set
+	 */
+	public static void setAns3set(boolean ans3set)
+	{
+		AdminSurvey.ans3set = ans3set;
+	}
+	
+	/**
+	 * @return the ans4set
+	 */
+	public static boolean isAns4set()
+	{
+		return ans4set;
+	}
+	
+	/**
+	 * @param ans4set the ans4set to set
+	 */
+	public static void setAns4set(boolean ans4set)
+	{
+		AdminSurvey.ans4set = ans4set;
+	}
+	
+	/**
+	 * @return the ans5set
+	 */
+	public static boolean isAns5set()
+	{
+		return ans5set;
+	}
+	
+	/**
+	 * @param ans5set the ans5set to set
+	 */
+	public static void setAns5set(boolean ans5set)
+	{
+		AdminSurvey.ans5set = ans5set;
+	}
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/handler/chathandlers/ChatAll.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/chathandlers/ChatAll.java	(revision 9)
+++ java/net/sf/l2j/gameserver/handler/chathandlers/ChatAll.java	(working copy)
@@ -14,7 +14,12 @@
  */
 package net.sf.l2j.gameserver.handler.chathandlers;
 
+import java.util.StringTokenizer;
+
+import net.sf.l2j.Config;
 import net.sf.l2j.gameserver.handler.IChatHandler;
+import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
+import net.sf.l2j.gameserver.handler.VoicedCommandHandler;
 import net.sf.l2j.gameserver.model.BlockList;
 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
 import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
@@ -33,14 +38,52 @@
 	{
 		if (!FloodProtectors.performAction(activeChar.getClient(), Action.GLOBAL_CHAT))
 			return;
+		boolean vcd_used = false;
+		if (text.startsWith("."))
 		
-		final CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
-		for (L2PcInstance player : activeChar.getKnownList().getKnownTypeInRadius(L2PcInstance.class, 1250))
 		{
-			if (!BlockList.isBlocked(player, activeChar))
-				player.sendPacket(cs);
+			StringTokenizer st = new StringTokenizer(text);
+			IVoicedCommandHandler vch;
+			String command = "";
+			
+			if (st.countTokens() > 1)
+			{
+				command = st.nextToken().substring(1);
+				params = text.substring(command.length() + 2);
+				vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(command);
+			}
+			else
+			{
+				command = text.substring(1);
+				if (Config.DEBUG)
+					System.out.println("Command: " + command);
+				vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(command);
+			}
+			
+			if (vch != null)
+			{
+				vch.useVoicedCommand(command, activeChar, command);
+				vcd_used = true;
+			}
+			else
+			{
+				if (Config.DEBUG)
+					System.out.println("No handler registered for bypass '" + command + "'");
+				vcd_used = false;
+			}
 		}
-		activeChar.sendPacket(cs);
+		if (!vcd_used)
+		{
+			final CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+			
+			for (L2PcInstance player : activeChar.getKnownList().getKnownType(L2PcInstance.class))
+			{
+				if (activeChar.isInsideRadius(player, 1250, false, true) && !BlockList.isBlocked(player, activeChar))
+					player.sendPacket(cs);
+			}
+			
+			activeChar.sendPacket(cs);
+		}
 	}
 	
 	@Override
Index: java/net/sf/l2j/gameserver/handler/voicedcommandhandler/Survey.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/voicedcommandhandler/Survey.java	(revision 0)
+++ java/net/sf/l2j/gameserver/handler/voicedcommandhandler/Survey.java	(revision 0)
@@ -0,0 +1,153 @@
+/* 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 2, 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ *
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+package net.sf.l2j.gameserver.handler.voicedcommandhandler;
+
+import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
+import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSurvey;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
+
+/**
+ * @author Elfocrash
+ * @author Toxico
+ */
+public class Survey implements IVoicedCommandHandler
+{
+	private static final String[] VOICED_COMMANDS =
+	{
+		"survey"
+	};
+	
+	@Override
+	public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target)
+	{
+		if (command.equals("survey"))
+		{
+			if (AdminSurvey.running == false)
+			{
+				activeChar.sendMessage("There is no survey running now");
+				return false;
+			}
+			
+			if (activeChar.hasVotedSurvey())
+			{
+				activeChar.sendMessage("You already voted for that survey.");
+				return false;
+			}
+			
+			if (AdminSurvey.running == true)
+				mainHtml(activeChar);
+		}
+		
+		return true;
+	}
+	
+	private static void mainHtml(L2PcInstance activeChar)
+	{
+		NpcHtmlMessage nhm = new NpcHtmlMessage(5);
+		StringBuilder tb = new StringBuilder("");
+		
+		tb.append("<html><head><title>Survey form</title></head><body>");
+		tb.append("<center>");
+		tb.append("<table width=\"250\" cellpadding=\"5\" bgcolor=\"000000\">");
+		tb.append("<tr>");
+		tb.append("<td width=\"45\" valign=\"top\" align=\"center\"><img src=\"L2ui_ch3.menubutton4\" width=\"38\" height=\"38\"></td>");
+		tb.append("<td valign=\"top\"><font color=\"FF6600\">Survey</font>");
+		tb.append("<br1><font color=\"FF6600\">" + activeChar.getName() + "</font>, use this form in order to give us feedback.<br1></td>");
+		tb.append("</tr>");
+		tb.append("</table>");
+		tb.append("</center>");
+		tb.append("<center>");
+		
+		tb.append("<font color=\"FF6600\">The question set is:<br>");
+		tb.append("<font color=\"FF0000\">" + AdminSurvey.quest + "</font>");
+		tb.append("<br><font color=\"FF6600\">Choose an answer.");
+		tb.append("<table width=\"300\" height=\"20\">");
+		tb.append("<tr>");
+		tb.append("<td align=\"center\" width=\"40\">Answer 1:</td>");
+		tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans1 + "</font></td>");
+		tb.append("<td align=\"center\"><a action=\"bypass -h survey_vote1\">Vote</a></td>");
+		
+		tb.append("</tr>");
+		tb.append("<tr>");
+		tb.append("<td align=\"center\" width=\"40\">Answer 2:</td>");
+		tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans2 + "</font></td>");
+		tb.append("<td align=\"center\"><a action=\"bypass -h survey_vote2\">Vote</a></td>");
+		
+		tb.append("</tr>");
+		if (AdminSurvey.mode == 2)
+		{
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 3:</td>");
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans3 + "</font></td>");
+			tb.append("<td align=\"center\"><a action=\"bypass -h survey_vote3\">Vote</a></td>");
+			
+			tb.append("</tr>");
+		}
+		if (AdminSurvey.mode == 3)
+		{
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 3:</td>");
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans3 + "</font></td>");
+			tb.append("<td align=\"center\"><a action=\"bypass -h survey_vote3\">Vote</a></td>");
+			
+			tb.append("</tr>");
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 4:</td>");
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans4 + "</font></td>");
+			tb.append("<td align=\"center\"><a action=\"bypass -h survey_vote4\">Vote</a></td>");
+			
+			tb.append("</tr>");
+		}
+		if (AdminSurvey.mode == 4)
+		{
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 3:</td>");
+			
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans3 + "</font></td>");
+			tb.append("<td align=\"center\"><a action=\"bypass -h survey_vote3\">Vote</a></td>");
+			
+			tb.append("</tr>");
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 4:</td>");
+			
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans4 + "</font></td>");
+			tb.append("<td align=\"center\"><a action=\"bypass -h survey_vote4\">Vote</a></td>");
+			
+			tb.append("</tr>");
+			tb.append("<tr>");
+			tb.append("<td align=\"center\" width=\"40\">Answer 5:</td>");
+			tb.append("<td align=\"center\" width=\"150\"><font color=\"FF0000\">" + AdminSurvey.ans5 + "</font></td>");
+			tb.append("<td align=\"center\"><a action=\"bypass -h survey_vote5\">Vote</a></td>");
+			
+			tb.append("</tr>");
+		}
+		tb.append("</table><br>");
+		tb.append("</center>");
+		tb.append("</body></html>");
+		
+		nhm.setHtml(tb.toString());
+		activeChar.sendPacket(nhm);
+	}
+	
+	@Override
+	public String[] getVoicedCommandList()
+	{
+		return VOICED_COMMANDS;
+	}
+}
\ No newline at end of file
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(revision 9)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -382,6 +382,8 @@
 	
 	private PcAppearance _appearance;
 	
+	private boolean _hasVotedSurvey = false;
+	
 	private long _expBeforeDeath;
 	private int _karma;
 	private int _pvpKills;
@@ -7619,6 +7621,22 @@
 	}
 	
 	/**
+	 * @return the _hasVotedSurvey
+	 */
+	public boolean hasVotedSurvey()
+	{
+		return _hasVotedSurvey;
+	}
+	
+	/**
+	 * @param _hasVotedSurvey the _hasVotedSurvey to set
+	 */
+	public void setHasVotedSurvey(boolean _hasVotedSurvey)
+	{
+		this._hasVotedSurvey = _hasVotedSurvey;
+	}
+	
+	/**
 	 * Cancel autoshot use for shot itemId
 	 * @param itemId int id to disable
 	 * @return true if canceled.
Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
===================================================================
--- java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java	(revision 9)
+++ java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java	(working copy)
@@ -22,6 +22,7 @@
 import net.sf.l2j.gameserver.datatables.AdminCommandAccessRights;
 import net.sf.l2j.gameserver.handler.AdminCommandHandler;
 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
+import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminSurvey;
 import net.sf.l2j.gameserver.model.L2Object;
 import net.sf.l2j.gameserver.model.L2World;
 import net.sf.l2j.gameserver.model.actor.L2Npc;
@@ -91,6 +92,91 @@
 				
 				ach.useAdminCommand(_command, activeChar);
 			}
+			
+			else if (_command.equals("survey_vote1"))
+			{
+				if (AdminSurvey.running == false)
+				{
+					activeChar.sendMessage("There is no survey running now");
+					return;
+				}
+				
+				if (activeChar.hasVotedSurvey())
+				{
+					activeChar.sendMessage("You already voted for that survey.");
+					return;
+				}
+				
+				AdminSurvey.ans1_vote_count++;
+				activeChar.setHasVotedSurvey(true);
+				activeChar.sendMessage("You voted : " + AdminSurvey.ans1 + ". Thanks for voting");
+			}
+			else if (_command.equals("survey_vote2"))
+			{
+				if (AdminSurvey.running == false)
+				{
+					activeChar.sendMessage("There is no survey running now");
+					return;
+				}
+				if (activeChar.hasVotedSurvey())
+				{
+					activeChar.sendMessage("You already voted for that survey.");
+					return;
+				}
+				
+				AdminSurvey.ans2_vote_count++;
+				activeChar.setHasVotedSurvey(true);
+				activeChar.sendMessage("You voted : " + AdminSurvey.ans2 + ". Thanks for voting");
+			}
+			else if (_command.equals("survey_vote3"))
+			{
+				if (AdminSurvey.running == false)
+				{
+					activeChar.sendMessage("There is no survey running now");
+					return;
+				}
+				if (activeChar.hasVotedSurvey())
+				{
+					activeChar.sendMessage("You already voted for that survey.");
+					return;
+				}
+				AdminSurvey.ans3_vote_count++;
+				activeChar.setHasVotedSurvey(true);
+				activeChar.sendMessage("You voted : " + AdminSurvey.ans3 + ". Thanks for voting");
+			}
+			else if (_command.equals("survey_vote4"))
+			{
+				if (AdminSurvey.running == false)
+				{
+					activeChar.sendMessage("There is no survey running now");
+					return;
+				}
+				if (activeChar.hasVotedSurvey())
+				{
+					activeChar.sendMessage("You already voted for that survey.");
+					return;
+				}
+				AdminSurvey.ans4_vote_count++;
+				activeChar.setHasVotedSurvey(true);
+				activeChar.sendMessage("You voted : " + AdminSurvey.ans4 + ". Thanks for voting");
+			}
+			else if (_command.equals("survey_vote5"))
+			{
+				if (AdminSurvey.running == false)
+				{
+					activeChar.sendMessage("There is no survey running now");
+					return;
+				}
+				if (activeChar.hasVotedSurvey())
+				{
+					activeChar.sendMessage("You already voted for that survey.");
+					return;
+				}
+				AdminSurvey.ans5_vote_count++;
+				activeChar.setHasVotedSurvey(true);
+				activeChar.sendMessage("You voted : " + AdminSurvey.ans5 + ". Thanks for voting");
+			}
+			
 			else if (_command.startsWith("player_help "))
 			{
 				playerHelp(activeChar, _command.substring(12));