Noticias:

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

Menú Principal

System Hero Item Days 7 15 30 Eternal - aCis

Iniciado por Jerry, Ago 02, 2025, 07:40 PM

Tema anterior - Siguiente tema

Jerry

Index: net.sf.l2j;Config.java
===================================================================
--- net.sf.l2j;Config.java (revision 84)
+++ net.sf.l2j;Config.java (working copy)

+	public static final String ITEMS_HANDER_FILE = "./config/aCis/ItemsHander.properties";

+	/** COMBATE Hero Settings */
+	public static boolean ENABLE_HERO_COIN;
+	
+	
+	public static int HERO_COIN_ID_7DAYS;
+	public static int HERO_COIN_7DAYS;
+	
+	public static int HERO_COIN_ID_15DAYS;
+	public static int HERO_COIN_15DAYS;
+	
+	public static int HERO_COIN_ID_30DAYS;
+	public static int HERO_COIN_30DAYS;
+	
+	public static int HERO_COIN_ID_ETERNAL;
+	public static int HERO_COIN_ETERNAL;
+	
+	public static int HERO_ITEM_ID;


+	private static final void loadItemHander()
+	{
+		final ExProperties ItemHander = initProperties(ITEMS_HANDER_FILE);
+	
+		
+		ENABLE_HERO_COIN = ItemHander.getProperty("EnableHeroCoin", false);
+		
+		HERO_COIN_ID_7DAYS = ItemHander.getProperty("Hero7DaysId", 10);
+		HERO_COIN_7DAYS = ItemHander.getProperty("SetHero7Days", 10);
+		
+		HERO_COIN_ID_15DAYS = ItemHander.getProperty("Hero15DaysId", 10);
+		HERO_COIN_15DAYS = ItemHander.getProperty("SetHero15Days", 10);
+		
+		HERO_COIN_ID_30DAYS = ItemHander.getProperty("Hero30DaysId", 10);
+		HERO_COIN_30DAYS = ItemHander.getProperty("SetHero30Days", 10);
+		
+		HERO_COIN_ID_ETERNAL = ItemHander.getProperty("HeroEternalId", 10);
+		HERO_COIN_ETERNAL = ItemHander.getProperty("SetHeroEternal", 10);
+		
+		
+		HERO_ITEM_ID = ItemHander.getProperty("RewardHeroItemId", 10);
+	
+	
+	}

-	// players settings
-	loadPlayers();


+	// players settings
+	loadPlayers();

+	loadItemHander();

Index: Dev/HeroItem/HeroTaskManager.java
===================================================================
--- Dev/HeroItem/HeroTaskManager.java (revision 84)
+++ Dev/HeroItem/HeroTaskManager.java (working copy)

+	package Dev.HeroItem;
+	
+	import java.util.Map;
+	import java.util.concurrent.ConcurrentHashMap;
+	
+	import net.sf.l2j.commons.concurrent.ThreadPool;
+	
+	import net.sf.l2j.gameserver.model.actor.Creature;
+	import net.sf.l2j.gameserver.model.actor.Player;
+	
+	/**
+	 * @author COMBATE
+	 *
+	 */
+	public final class HeroTaskManager implements Runnable
+	{
+		private final Map<Player, Long> _players = new ConcurrentHashMap<>();
+		
+		protected HeroTaskManager()
+		{
+			// Run task each 10 second.
+			ThreadPool.scheduleAtFixedRate(this, 1000, 1000);
+		}
+		
+		public final void add(Player player)
+		{
+			_players.put(player, System.currentTimeMillis());
+		}
+		
+		public final void remove(Creature player)
+		{
+			_players.remove(player);
+		}
+		
+		@Override
+		public final void run()
+		{
+			if (_players.isEmpty())
+				return;
+			
+			for (Map.Entry<Player, Long> entry : _players.entrySet())
+			{
+				final Player player = entry.getKey();
+				
+				if (player.getMemos().getLong("heroEndTime") < System.currentTimeMillis())
+				{
+					AdminSetHero.removeHero(player, player);
+					remove(player);
+				}
+			}
+		}
+		
+		public static final HeroTaskManager getInstance()
+		{
+			return SingletonHolder._instance;
+		}
+		
+		private static class SingletonHolder
+		{
+			protected static final HeroTaskManager _instance = new HeroTaskManager();
+		}
+	}
+

Index: Dev/HeroItem/AdminSetHero.java
===================================================================
--- Dev/HeroItem/AdminSetHero.java (revision 84)
+++ Dev/HeroItem/AdminSetHero.java (working copy)

+	package Dev.HeroItem;
+	
+	import java.util.StringTokenizer;
+	import java.util.concurrent.TimeUnit;
+	
+	import net.sf.l2j.commons.concurrent.ThreadPool;
+	
+	import net.sf.l2j.Config;
+	import net.sf.l2j.gameserver.enums.SayType;
+	import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
+	import net.sf.l2j.gameserver.model.World;
+	import net.sf.l2j.gameserver.model.actor.Player;
+	import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
+	import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
+	
+	/**
+	 * @author COMBATE
+	 *
+	 */
+	public class AdminSetHero implements IAdminCommandHandler
+	{
+		private static String[] _adminCommands = new String[]
+		{
+			"admin_sethero",
+			"admin_nohero"
+		};
+		
+		@Override
+		public boolean useAdminCommand(String command, Player activeChar)
+		{
+			StringTokenizer st = new StringTokenizer(command);
+			st.nextToken();
+			String player = "";
+			int time = 1;
+			Player target = null;
+			if (st.hasMoreTokens())
+			{
+				player = st.nextToken();
+				target = World.getInstance().getPlayer(player);
+				if (st.hasMoreTokens())
+				{
+					try
+					{
+						time = Integer.parseInt(st.nextToken());
+					}
+					catch (NumberFormatException nfe)
+					{
+						activeChar.sendMessage("Invalid number format used: " + nfe);
+						return false;
+					}
+				}
+			}
+			else if (activeChar.getTarget() != null && activeChar.getTarget() instanceof Player)
+				target = (Player) activeChar.getTarget();
+			
+			if (command.startsWith("admin_sethero"))
+			{
+				if (target == null && player.equals(""))
+				{
+					activeChar.sendMessage("Usage: //hero <char_name> [duration_days]");
+					return false;
+				}
+				if (target != null)
+				{
+					AdminSetHero.doHero(target, activeChar, time);
+					activeChar.sendMessage(target.getName() + " Comando /hero Liberado! ");
+					activeChar.sendMessage(target.getName() + " got Hero status for " + time + " day(s).");
+				}
+			}
+			else if (command.startsWith("admin_nohero"))
+			{
+				if (target == null && player.equals(""))
+				{
+					activeChar.sendMessage("Usage: //nohero <char_name>");
+					return false;
+				}
+				if (target != null)
+				{
+					if (target.isHero())
+					{
+						AdminSetHero.removeHero(target, activeChar);
+						activeChar.sendMessage("Removed the Hero status from " + target.getName() + ".");
+					}
+					activeChar.sendMessage(target.getName() + " haven't Hero status.");
+				}
+			}
+			return true;
+		}
+		
+		public static void doHero(Player target, Player player, int time)
+		{
+			target.getStat().addExp(target.getStat().getExpForLevel(81));
+			target.broadcastPacket(new SocialAction(target, 3));
+			target.setHero(true);
+			
+			HeroTaskManager.getInstance().add(target);
+			long remainingTime = target.getMemos().getLong("heroEndTime", 0);
+			if (remainingTime > 0)
+			{
+				target.getMemos().set("heroEndTime", remainingTime + TimeUnit.DAYS.toMillis(time));
+				target.sendPacket(new CreatureSay(0, SayType.HERO_VOICE, "Hero Manager", "Dear " + player.getName() + ", your Hero status has been extended by " + time + " day(s)."));
+			}
+			else
+			{
+				target.getMemos().set("heroEndTime", System.currentTimeMillis() + TimeUnit.DAYS.toMillis(time));
+				target.sendPacket(new CreatureSay(0, SayType.HERO_VOICE, "Hero Manager", "Dear " + player.getName() + ", you got Hero Status for " + time + " day(s)."));
+				
+				if (Config.HERO_ITEM_ID != 0)
+				{
+					target.addItem("Add", Config.HERO_ITEM_ID, 1, target, true);
+					target.getInventory().equipItemAndRecord(target.getInventory().getItemByItemId(Config.HERO_ITEM_ID));
+				}
+				target.setHero(true);
+				target.broadcastUserInfo();
+			}
+		}
+		
+		public static void removeHero(Player target, Player player)
+		{
+			HeroTaskManager.getInstance().remove(target);
+			target.getMemos().set("heroEndTime", 0);
+			target.setHero(false);
+			
+			if (Config.HERO_ITEM_ID != 0)
+				target.destroyItemByItemId("Destroy", Config.HERO_ITEM_ID, 1, target, true);
+			
+			target.sendPacket(new CreatureSay(0, SayType.HERO_VOICE, "Hero Manager", "Dear " + player.getName() + ", Your Hero period is over. You will be disconected in 3 seconds."));
+			target.broadcastPacket(new SocialAction(target, 13));
+			target.sendSkillList();
+			target.broadcastUserInfo();
+			ThreadPool.schedule(() -> target.logout(false), 3000);
+		}
+		
+		@Override
+		public String[] getAdminCommandList()
+		{
+			return _adminCommands;
+		}
+	}
+

Index: Dev/HeroItem/HeroMenu.java
===================================================================
--- Dev/HeroItem/HeroMenu.java (revision 84)
+++ Dev/HeroItem/HeroMenu.java (working copy)

+	package Dev.HeroItem;
+	
+	import java.text.SimpleDateFormat;
+	import java.util.StringTokenizer;
+	import java.util.concurrent.TimeUnit;
+	
+	import net.sf.l2j.gameserver.data.xml.TeleportLocationData;
+	import net.sf.l2j.gameserver.handler.IUserCommandHandler;
+	import net.sf.l2j.gameserver.model.actor.Player;
+	import net.sf.l2j.gameserver.model.location.TeleportLocation;
+	import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
+	import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
+	
+	/**
+	 * @author COMBATE
+	 *
+	 */
+	public class HeroMenu implements IUserCommandHandler
+	{
+		private static final int[] COMMAND_IDS =
+		{
+			305
+		};
+		
+		@Override
+	
+		public void useUserCommand(int command, Player activeChar)
+		{
+			mainHtml(activeChar, 0);
+			return;
+		}
+	
+		
+		public static void mainHtml(Player activeChar, int time)
+		{
+			NpcHtmlMessage nhm = new NpcHtmlMessage(5);
+			StringBuilder html = new StringBuilder("");
+			html.append("<html><head><title>Hero Menu</title></head><body><center>");
+			html.append("<img src=\"SS_l2jNetwork.lineo\" width=300 height=3>");
+			html.append("<table width=305 height=20 bgcolor=000000>");
+			html.append("<tr>");
+			html.append("<td align=center>Personal HERO Options</td>");
+			html.append("</tr>");
+			html.append("</table>");
+			html.append("<img src=\"SS_l2jNetwork.lineo\" width=300 height=3>");
+			if (activeChar.isHero())
+			{
+				html.append("<br><br>");
+				html.append("");
+				html.append("");
+				html.append("<br>");
+				html.append("<img src=\"SS_l2jNetwork.lineo\" width=300 height=3>");
+				html.append("<table width=305 height=20 bgcolor=000000>");
+				html.append("<tr>");
+				html.append("<td align=center>Color Name Options</td>");
+				html.append("</tr>");
+				html.append("</table>");
+				html.append("<img src=\"SS_l2jNetwork.lineo\" width=300 height=3>");
+				html.append("<br><br>");
+				html.append("<a action=\"bypass -h heropanel color Green\" <font color=\"009900\">Green</font></a>");
+				html.append("<a action=\"bypass -h heropanel color Blue\" <font color=\"3333ff\">Blue</font></a>");
+				html.append("<a action=\"bypass -h heropanel color Purple\" <font color=\"800080\">Purple</font></a>");
+				html.append("<a action=\"bypass -h heropanel color Yellow\" <font color=\"ffff00\">Yellow</font></a>");
+				html.append("<a action=\"bypass -h heropanel color Gold\" <font color=\"cca300\">Gold</font></a>");
+				html.append("<br><br><br>");
+				html.append("<img src=\"SS_l2jNetwork.lineo\" width=300 height=3>");
+				html.append("<table width=310 height=20 bgcolor=000000>");
+				html.append("<tr>");
+				html.append("<td align=center>Your HERO Status Period:</td>");
+				html.append("</tr>");
+				html.append("</table>");
+				html.append("<img src=\"SS_l2jNetwork.lineo\" width=300 height=3>");
+				long delay = activeChar.getMemos().getLong("heroEndTime", 0);
+				html.append("HERO Status ends at " + new SimpleDateFormat("dd-MM-yyyy HH:mm").format(delay) + "");
+			}
+			else
+			{
+				html.append("<br>");
+				html.append("Your character Isn't HERO.");
+			}
+			html.append("</center>");
+			html.append("</body></html>");
+			nhm.setHtml(html.toString());
+			activeChar.sendPacket(nhm);
+			return;
+		}
+		
+		public static void Time(Player player, int time)
+		{
+			player.getMemos().set("heroEndTime", System.currentTimeMillis() + TimeUnit.DAYS.toMillis(time));
+		}
+	
+		public static void bypass(Player activeChar, String command, StringTokenizer st)
+		{
+			if (command.equals("panelteleport"))
+			{
+				NpcHtmlMessage nhm = new NpcHtmlMessage(5);
+				StringBuilder html = new StringBuilder("");
+				html.append("<html><head><title>AIO Teleport Menu</title></head><body><center>");
+				html.append("<img src=\"SS_l2jNetwork.lineo\" width=300 height=3>");
+				html.append("<table width=315 height=20 bgcolor=000000>");
+				html.append("<tr>");
+				html.append("<td align=center>Choose your destination</td>");
+				html.append("</tr>");
+				html.append("</table>");
+				html.append("<img src=\"SS_l2jNetwork.lineo\" width=300 height=3>");
+				if (activeChar.isHero())
+				{
+					html.append("<br><br>");
+					html.append("<button value=\"Giran\" action=\"bypass -h heropanel teleportTo 1040\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<button value=\"Goddard\" action=\"bypass -h heropanel teleportTo 1039\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<button value=\"Rune\" action=\"bypass -h heropanel teleportTo 1041\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<button value=\"Aden\" action=\"bypass -h heropanel teleportTo 1037\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<button value=\"Dion\" action=\"bypass -h heropanel teleportTo 6\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<button value=\"Gludio\" action=\"bypass -h heropanel teleportTo 1099\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<button value=\"Gludin\" action=\"bypass -h heropanel teleportTo 5\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<button value=\"Heine\" action=\"bypass -h heropanel teleportTo 1036\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<button value=\"Oren\" action=\"bypass -h heropanel teleportTo 1038\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<button value=\"Schuttgart\" action=\"bypass -h heropanel teleportTo 1035\" width=122 height=23 fore=\"SS_l2jBan.bf\" back=\"SS_l2jBan.bf\">");
+					html.append("<br><br>");
+				}
+				else
+				{
+					html.append("<br>");
+					html.append("Your character Isn't HERO.");
+				}
+				html.append("</center>");
+				html.append("</body></html>");
+				nhm.setHtml(html.toString());
+				activeChar.sendPacket(nhm);
+			}
+			else if (command.equals("teleportTo"))
+			{
+				final TeleportLocation list = TeleportLocationData.getInstance().getTeleportLocation(Integer.parseInt(st.nextToken()));
+				if (list != null)
+				{
+					if (activeChar.reduceAdena("Teleport", list.getPrice(), activeChar, true))
+						activeChar.teleportTo(list, 0);
+				}
+				else
+					activeChar.sendMessage("No teleport destination. Contact with server Admin");
+				
+				activeChar.sendPacket(ActionFailed.STATIC_PACKET);
+			}
+			else if (command.equals("color"))
+				
+			{
+				NpcHtmlMessage nhm = new NpcHtmlMessage(5);
+				StringBuilder html = new StringBuilder("");
+				String type = st.nextToken();
+				
+				switch (type)
+				{
+					case "Green":
+	
+						activeChar.getAppearance().setNameColor(0x009900);
+						activeChar.broadcastUserInfo();
+						activeChar.sendMessage("Your color name has changed!");
+						nhm.setHtml(html.toString());
+						activeChar.sendPacket(nhm);
+						break;
+					case "Blue":
+	
+						activeChar.getAppearance().setNameColor(0xff7f00);
+						activeChar.broadcastUserInfo();
+						activeChar.sendMessage("Your color name has changed!");
+						nhm.setHtml(html.toString());
+						activeChar.sendPacket(nhm);
+						break;
+					case "Purple":
+				
+						activeChar.getAppearance().setNameColor(0x800080);
+						activeChar.broadcastUserInfo();
+						activeChar.sendMessage("Your color name has changed!");
+						nhm.setHtml(html.toString());
+						activeChar.sendPacket(nhm);
+						break;
+					case "Yellow":
+					
+						activeChar.getAppearance().setNameColor(0x00ffff);
+						activeChar.broadcastUserInfo();
+						activeChar.sendMessage("Your color name has changed!");
+						nhm.setHtml(html.toString());
+						activeChar.sendPacket(nhm);
+						break;
+					case "Gold":
+					
+						activeChar.getAppearance().setNameColor(0x0099ff);
+						activeChar.broadcastUserInfo();
+						activeChar.sendMessage("Your color name has changed!");
+						nhm.setHtml(html.toString());
+						activeChar.sendPacket(nhm);
+						break;
+				}
+			}
+		}
+			
+		
+		@Override
+		public int[] getUserCommandList()
+		{
+			return COMMAND_IDS;
+		}
+	}
+

Index: Dev/HeroItem/Hero7Days.java
===================================================================
--- Dev/HeroItem/Hero7Days.java (revision 84)
+++ Dev/HeroItem/Hero7Days.java (working copy)

+	package Dev.HeroItem;
+	
+	import net.sf.l2j.Config;
+	import net.sf.l2j.gameserver.handler.IItemHandler;
+	import net.sf.l2j.gameserver.model.actor.Playable;
+	import net.sf.l2j.gameserver.model.actor.Player;
+	import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
+	import net.sf.l2j.gameserver.model.olympiad.OlympiadManager;
+	import net.sf.l2j.gameserver.network.SystemMessageId;
+	import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
+	
+	/**
+	 * @author COMBATE
+	 *
+	 */
+	public class Hero7Days implements IItemHandler
+	{
+		private static final int[] ITEM_IDS = new int[]
+		{
+			Config.HERO_COIN_ID_7DAYS
+		};
+		
+		@Override
+		public void useItem(Playable playable, ItemInstance item, boolean forceUse)
+		{
+			
+			if (Config.ENABLE_HERO_COIN)
+			{
+				if (!(playable instanceof Player))
+					return;
+				
+				Player player = (Player) playable;
+				if (player.isHero())
+					player.sendMessage("Comando /hero Liberado!");
+			
+				else if (player.isInOlympiadMode() || OlympiadManager.getInstance().isRegisteredInComp(player))
+					player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
+				else if (player.destroyItemByItemId("hero", Config.HERO_COIN_ID_7DAYS, 1, null, true))
+					AdminSetHero.doHero(player, player, Config.HERO_COIN_7DAYS);
+				HeroMenu.mainHtml(player, 0);
+			}
+		}
+		
+		public static void RemoveHeroStatus(Player target)
+		{
+			HeroTaskManager.getInstance().remove(target);
+			target.getMemos().set("heroEndTime", 0);
+			target.setHero(false);
+			target.broadcastPacket(new SocialAction(target, 13));
+			target.broadcastUserInfo();
+		}
+		
+		public int[] getItemIds()
+		{
+			return ITEM_IDS;
+		}
+	}
+

Index: Dev/HeroItem/Hero15Days.java
===================================================================
--- Dev/HeroItem/Hero15Days.java (revision 84)
+++ Dev/HeroItem/Hero15Days.java (working copy)

+	package Dev.HeroItem;
+	
+	import net.sf.l2j.Config;
+	import net.sf.l2j.gameserver.handler.IItemHandler;
+	import net.sf.l2j.gameserver.model.actor.Playable;
+	import net.sf.l2j.gameserver.model.actor.Player;
+	import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
+	import net.sf.l2j.gameserver.model.olympiad.OlympiadManager;
+	import net.sf.l2j.gameserver.network.SystemMessageId;
+	import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
+	
+	/**
+	 * @author COMBATE
+	 *
+	 */
+	public class Hero15Days implements IItemHandler
+	{
+		private static final int[] ITEM_IDS = new int[]
+		{
+			Config.HERO_COIN_ID_15DAYS
+		};
+		
+		@Override
+		public void useItem(Playable playable, ItemInstance item, boolean forceUse)
+		{
+			
+			if (Config.ENABLE_HERO_COIN)
+			{
+				if (!(playable instanceof Player))
+					return;
+				
+				Player player = (Player) playable;
+				if (player.isHero())
+					player.sendMessage("Comando /hero Liberado!");
+			
+				else if (player.isInOlympiadMode() || OlympiadManager.getInstance().isRegisteredInComp(player))
+					player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
+				else if (player.destroyItemByItemId("hero", Config.HERO_COIN_ID_15DAYS, 1, null, true))
+					AdminSetHero.doHero(player, player, Config.HERO_COIN_15DAYS);
+				HeroMenu.mainHtml(player, 0);
+			}
+		}
+		
+		public static void RemoveHeroStatus(Player target)
+		{
+			HeroTaskManager.getInstance().remove(target);
+			target.getMemos().set("heroEndTime", 0);
+			target.setHero(false);
+			target.broadcastPacket(new SocialAction(target, 13));
+			target.broadcastUserInfo();
+		}
+		
+		public int[] getItemIds()
+		{
+			return ITEM_IDS;
+		}
+	}
+

Index: Dev/HeroItem/Hero30Days.java
===================================================================
--- Dev/HeroItem/Hero30Days.java (revision 84)
+++ Dev/HeroItem/Hero30Days.java (working copy)

+	package Dev.HeroItem;
+	
+	import net.sf.l2j.Config;
+	import net.sf.l2j.gameserver.handler.IItemHandler;
+	import net.sf.l2j.gameserver.model.actor.Playable;
+	import net.sf.l2j.gameserver.model.actor.Player;
+	import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
+	import net.sf.l2j.gameserver.model.olympiad.OlympiadManager;
+	import net.sf.l2j.gameserver.network.SystemMessageId;
+	import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
+	
+	/**
+	 * @author COMBATE
+	 *
+	 */
+	public class Hero30Days implements IItemHandler
+	{
+		private static final int[] ITEM_IDS = new int[]
+		{
+			Config.HERO_COIN_ID_30DAYS
+		};
+		
+		@Override
+		public void useItem(Playable playable, ItemInstance item, boolean forceUse)
+		{
+			
+			if (Config.ENABLE_HERO_COIN)
+			{
+				if (!(playable instanceof Player))
+					return;
+				
+				Player player = (Player) playable;
+				if (player.isHero())
+					player.sendMessage("Comando /hero Liberado!");
+			
+				else if (player.isInOlympiadMode() || OlympiadManager.getInstance().isRegisteredInComp(player))
+					player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
+				else if (player.destroyItemByItemId("hero", Config.HERO_COIN_ID_30DAYS, 1, null, true))
+					AdminSetHero.doHero(player, player, Config.HERO_COIN_30DAYS);
+				HeroMenu.mainHtml(player, 0);
+			}
+		}
+		
+		public static void RemoveHeroStatus(Player target)
+		{
+			HeroTaskManager.getInstance().remove(target);
+			target.getMemos().set("heroEndTime", 0);
+			target.setHero(false);
+			target.broadcastPacket(new SocialAction(target, 13));
+			target.broadcastUserInfo();
+		}
+		
+		public int[] getItemIds()
+		{
+			return ITEM_IDS;
+		}
+	}

Index: Dev/HeroItem/HeroEternal.java
===================================================================
--- Dev/HeroItem/HeroEternal.java (revision 84)
+++ Dev/HeroItem/HeroEternal.java (working copy)

+	package Dev.HeroItem;
+	
+	import net.sf.l2j.Config;
+	import net.sf.l2j.gameserver.handler.IItemHandler;
+	import net.sf.l2j.gameserver.model.actor.Playable;
+	import net.sf.l2j.gameserver.model.actor.Player;
+	import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
+	import net.sf.l2j.gameserver.model.olympiad.OlympiadManager;
+	import net.sf.l2j.gameserver.network.SystemMessageId;
+	import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
+	
+	/**
+	 * @author COMBATE
+	 *
+	 */
+	public class HeroEternal implements IItemHandler
+	{
+		private static final int[] ITEM_IDS = new int[]
+		{
+			Config.HERO_COIN_ID_ETERNAL
+		};
+		
+		@Override
+		public void useItem(Playable playable, ItemInstance item, boolean forceUse)
+		{
+			
+			if (Config.ENABLE_HERO_COIN)
+			{
+				if (!(playable instanceof Player))
+					return;
+				
+				Player player = (Player) playable;
+				if (player.isHero())
+					player.sendMessage("Comando /hero Liberado!");
+			
+				else if (player.isInOlympiadMode() || OlympiadManager.getInstance().isRegisteredInComp(player))
+					player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
+				else if (player.destroyItemByItemId("hero", Config.HERO_COIN_ID_ETERNAL, 1, null, true))
+					AdminSetHero.doHero(player, player, Config.HERO_COIN_ETERNAL);
+				HeroMenu.mainHtml(player, 0);
+			}
+		}
+		
+		public static void RemoveHeroStatus(Player target)
+		{
+			HeroTaskManager.getInstance().remove(target);
+			target.getMemos().set("heroEndTime", 0);
+			target.setHero(false);
+			target.broadcastPacket(new SocialAction(target, 13));
+			target.broadcastUserInfo();
+		}
+		
+		public int[] getItemIds()
+		{
+			return ITEM_IDS;
+		}
+	}
+

Index: net.sf.l2j.gameserver.network.clientpackets;RequestBypassToServer.java
===================================================================
--- net.sf.l2j.gameserver.network.clientpackets;RequestBypassToServer.java (revision 84)
+++ net.sf.l2j.gameserver.network.clientpackets;RequestBypassToServer.java (working copy)


+	if (_command.startsWith("heropanel"))
+	{
+		String value = _command.substring(8);
+		StringTokenizer st = new StringTokenizer(value);
+		String command = st.nextToken();
+		
+		HeroMenu.bypass(player, command, st);
+	}

Index: net.sf.l2j.gameserver.network.clientpackets;EnterWorld.java
===================================================================
--- net.sf.l2j.gameserver.network.clientpackets;EnterWorld.java (revision 84)
+++ net.sf.l2j.gameserver.network.clientpackets;EnterWorld.java (working copy)

+	import Dev.HeroItem.Hero7Days;
+	import Dev.HeroItem.HeroMenu;


if (player.getMemos().getLong("vipTime", 0) > 0)


+	if (player.getMemos().getLong("heroEndTime", 0) > 0)
+		onEnterHero(player);

	
+	private static void onEnterHero(Player activeChar)
+	{
+		long now = Calendar.getInstance().getTimeInMillis();
+		long endDay = activeChar.getMemos().getLong("heroEndTime");
+		
+		if (now > endDay)
+			Hero7Days.RemoveHeroStatus(activeChar);
+		else
+		{
+			
+			activeChar.setHero(true);
+			activeChar.broadcastUserInfo();
+			HeroMenu.mainHtml(activeChar, 0);
+			sendReEnterMessageHero(activeChar);
+			
+		}
+	}
	
+	private static void sendReEnterMessageHero(Player player)
+	{
+		long delay = player.getMemos().getLong("heroEndTime", 0);
+		
+		player.sendMessage("Hero Ends In: " + new SimpleDateFormat("dd-MM-yyyy HH:mm").format(delay) + "");
+	
+	}
	

Index: net.sf.l2j.gameserver.model.actor;Player.java
===================================================================
--- net.sf.l2j.gameserver.model.actor;Player.java (revision 84)
+++ net.sf.l2j.gameserver.model.actor;Player.java (working copy)

Index: Apenas Comfirme se existe! se não adicione

+	private boolean _isHero;
+	
+	
+	public boolean isHero()
+	{
+		return _isHero;
+	}
+	
+	
+	public void setHero(boolean hero)
+	{
+		if (hero && _baseClass == _activeClass)
+		{
+			for (L2Skill skill : SkillTable.getHeroSkills())
+				addSkill(skill, false);
+		}
+		else
+		{
+			for (L2Skill skill : SkillTable.getHeroSkills())
+				removeSkill(skill.getId(), false);
+			
+			HeroTaskManager.getInstance().remove(this);
+			getMemos().set("heroEndTime", 0);
+		}
+		_isHero = hero;
+		
+		broadcastUserInfo();
+		sendSkillList();
+	}

Index: Referencia pra adicionar
public void onPlayerEnter()


+	if (isHero())
+		HeroTaskManager.getInstance().add(this);

Index: Referencia
// Stop all timers associated to that Player.

-	PvpFlagTaskManager.getInstance().remove(this);
+	PvpFlagTaskManager.getInstance().remove(this);
+	HeroTaskManager.getInstance().remove(this);

Index: Referencia

	private void regiveTemporarySkills()
	{
	
+		// Add Hero skills if hero.
+	if (isHero())
+		setHero(true);


Index: Referencia pra adicionar
PreparedStatement ps = con.prepareStatement(RESTORE_CHARACTER))


-	// Set the position of the Player.
-	player.getPosition().set(rs.getInt("x"), rs.getInt("y"), rs.getInt("z"), rs.getInt("heading"));

+	// Set the position of the Player.
+	player.getPosition().set(rs.getInt("x"), rs.getInt("y"), rs.getInt("z"), rs.getInt("heading"));
					
+	// Set Hero status if it applies
+	if (HeroManager.getInstance().isActiveHero(objectId))
+		player.setHero(true);


Index: net.sf.l2j.gameserver.handler;AdminCommandHandler.java
===================================================================
--- net.sf.l2j.gameserver.handler;AdminCommandHandler.java (revision 84)
+++ net.sf.l2j.gameserver.handler;AdminCommandHandler.java (working copy)

+	import Dev.HeroItem.AdminSetHero;


-	registerHandler(new AdminTeleport());
+	registerHandler(new AdminTeleport());

+	registerHandler(new AdminSetHero());

Index: net.sf.l2j.gameserver.handler;ItemHandler.java
===================================================================
--- net.sf.l2j.gameserver.network.clientpackets;ItemHandler.java (revision 84)
+++ net.sf.l2j.gameserver.network.clientpackets;ItemHandler.java (working copy)

+	import Dev.HeroItem.Hero15Days;
+	import Dev.HeroItem.Hero30Days;
+	import Dev.HeroItem.Hero7Days;
+	import Dev.HeroItem.HeroEternal;

+	registerHandler(new Hero7Days());
+	registerHandler(new Hero15Days());
+	registerHandler(new Hero30Days());
+	registerHandler(new HeroEternal());

Index: data/xml/adminCommands.xml
===================================================================
--- data/xml/adminCommands.xml (revision 84)
+++ data/xml/adminCommands.xml (working copy)

-	<!-- OLYMPIADS -->
-	<aCar name="admin_addolypoints" accessLevel="7"/>
-	<aCar name="admin_removeolypoints" accessLevel="7"/>
-	<aCar name="admin_endoly" accessLevel="7"/>
+	<aCar name="admin_sethero" accessLevel="7"/>
+	<aCar name="admin_nohero" accessLevel="7"/>
-	<aCar name="admin_setnoble" accessLevel="7"/>