Secret Experience

Secret Experience (https://secretexperience.net/)
-   [Lineage] Java Mods (https://secretexperience.net/lineage-java-mods/)
-   -   [L2JServer] Away System (https://secretexperience.net/lineage-java-mods/10332-away-system.html)

KaL 02-07-2009 11:28 PM

Away System
 
Este Mod permite aos players se colocarem em modo away & modo back ( .away & .back ), diferencia dos demais usuários e é totalmente configurado e protegido

Código:

Index: config/altsettings.properties
===================================================================
--- config/altsettings.properties        (revision 4757)
+++ config/altsettings.properties        (working copy)
@@ -520,3 +520,20 @@
 # -------------------------------------------------------------
 # Allow usage of mana potions
 AllowManaPotions = False
+
+# -------------------------------------------------------------
+# Away System Config
+# -------------------------------------------------------------
+# Allow Players to change status Away
+AllowAwayStatus = True
+AwayOnlyInPeaceZone = True
+#Allow other Player target Away Player's
+AwayAllowInterference = False
+# Player take mobs aggro if he is Away
+AwayPlayerTakeAggro = False
+# Away status title Color (red 0000FF)
+AwayTitleColor = 0000FF
+# how many sec till player goes in away mode
+AwayTimer = 30
+# how many sec till player goes back from away mode
+BackTimer = 30
\ No newline at end of file
Index: src/main/java/com/l2jfree/Config.java
===================================================================
--- src/main/java/com/l2jfree/Config.java        (revision 4757)
+++ src/main/java/com/l2jfree/Config.java        (working copy)
@@ -1449,6 +1449,13 @@
        public static boolean                                ALT_ITEM_SKILLS_NOT_INFLUENCED;
        public static boolean                                ALT_MANA_POTIONS;
        public static int                                        ALT_AUTOCHAT_DELAY;
+        public static boolean                                ALT_ALLOW_AWAY_STATUS;
+        public static int                                        ALT_AWAY_TIMER;
+        public static int                                        ALT_BACK_TIMER;
+        public static int                                        ALT_AWAY_TITLE_COLOR;
+        public static boolean                                ALT_AWAY_ALLOW_INTERFERENCE;
+        public static boolean                                ALT_AWAY_PLAYER_TAKE_AGGRO;
+        public static boolean                                ALT_AWAY_PEACE_ZONE;
 
        // *******************************************************************************************
        // *******************************************************************************************
@@ -1662,6 +1669,13 @@
 
                        ALT_MANA_POTIONS = Boolean.parseBoolean(altSettings.getProperty("AllowManaPotions", "false"));
                        ALT_AUTOCHAT_DELAY = Integer.parseInt(altSettings.getProperty("AutoChatDelay", "30000"));
+                        ALT_ALLOW_AWAY_STATUS = Boolean.parseBoolean(altSettings.getProperty("AllowAwayStatus", "False"));
+                        ALT_AWAY_ALLOW_INTERFERENCE = Boolean.parseBoolean(altSettings.getProperty("AwayAllowInterference", "False"));
+                        ALT_AWAY_PLAYER_TAKE_AGGRO = Boolean.parseBoolean(altSettings.getProperty("AwayPlayerTakeAggro", "False"));
+                        ALT_AWAY_TITLE_COLOR = Integer.decode("0x" + altSettings.getProperty("AwayTitleColor", "0000FF"));
+                        ALT_AWAY_TIMER = Integer.parseInt(altSettings.getProperty("AwayTimer", "30"));
+                        ALT_BACK_TIMER = Integer.parseInt(altSettings.getProperty("BackTimer", "30"));
+                        ALT_AWAY_PEACE_ZONE = Boolean.parseBoolean(altSettings.getProperty("AwayOnlyInPeaceZone", "False"));
                }
                catch (Exception e)
                {
Index: src/main/java/com/l2jfree/gameserver/ai/L2AttackableAI.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/ai/L2AttackableAI.java        (revision 4757)
+++ src/main/java/com/l2jfree/gameserver/ai/L2AttackableAI.java        (working copy)
@@ -200,10 +200,12 @@
                        //event playere are also ignored
                        if(player.isInFunEvent())
                                return false;
-                               
                        // check if the target is within the grace period for JUST getting up from fake death
                        if (player.isRecentFakeDeath())
                                return false;
+                        // check player is in away mod
+                        if(player.isAway() && !Config.ALT_AWAY_PLAYER_TAKE_AGGRO)
+                                return false;
                }
                // Check if the target is a L2Summon
                if (target instanceof L2Summon)
Index: src/main/java/com/l2jfree/gameserver/communitybbs/Manager/RegionBBSManager.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/communitybbs/Manager/RegionBBSManager.java        (revision 4757)
+++ src/main/java/com/l2jfree/gameserver/communitybbs/Manager/RegionBBSManager.java        (working copy)
@@ -225,6 +225,11 @@
                                        return;
                                }
 
+                                if (receiver.isAway())
+                                {
+                                        activeChar.sendMessage(receiver.getName() + " is Away please try again later.");
+                                        return;
+                                }
                                if (Config.LOG_CHAT)
                                {
                                        LogRecord record = new LogRecord(Level.INFO, ar3);
@@ -452,6 +457,8 @@
 
                                        if (player.isGM())
                                                htmlCode.append("<font color=\"LEVEL\">" + player.getName() + "</font>");
+                                        else if(player.isAway() && Config.ALT_ALLOW_AWAY_STATUS)
+                                                htmlCode.append(player.getName() + "*Away*");
                                        else if (player.getClan() != null && player.isClanLeader() && Config.SHOW_CLAN_LEADER
                                                        && player.getClan().getLevel() >= Config.SHOW_CLAN_LEADER_CLAN_LEVEL)
                                                htmlCode.append("<font color=\"00FF00\">" + player.getName() + "</font>");
Index: src/main/java/com/l2jfree/gameserver/GameServer.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/GameServer.java        (revision 4757)
+++ src/main/java/com/l2jfree/gameserver/GameServer.java        (working copy)
@@ -67,6 +67,7 @@
 import com.l2jfree.gameserver.handler.VoicedCommandHandler;
 import com.l2jfree.gameserver.idfactory.IdFactory;
 import com.l2jfree.gameserver.instancemanager.AuctionManager;
+import com.l2jfree.gameserver.instancemanager.AwayManager;
 import com.l2jfree.gameserver.instancemanager.BoatManager;
 import com.l2jfree.gameserver.instancemanager.CastleManager;
 import com.l2jfree.gameserver.instancemanager.CastleManorManager;
@@ -328,6 +329,11 @@
                        FactionManager.getInstance();
                        FactionQuestManager.getInstance();
                }
+                if (Config.ALT_ALLOW_AWAY_STATUS)
+                {
+                        Util.printSection("Away System");
+                        AwayManager.getInstance();
+                }
                try
                {
                        DynamicExtension.getInstance();

Index: src/main/java/com/l2jfree/gameserver/handler/VoicedCommandHandler.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/handler/VoicedCommandHandler.java        (revision 4757)
+++ src/main/java/com/l2jfree/gameserver/handler/VoicedCommandHandler.java        (working copy)
@@ -45,6 +45,10 @@
        private VoicedCommandHandler()
        {
                _datatable = new FastMap<String, IVoicedCommandHandler>();
+                if (Config.ALT_ALLOW_AWAY_STATUS)
+                {
+                        registerVoicedCommandHandler(new Away());
+                }
                registerVoicedCommandHandler(new CastleDoors());
                registerVoicedCommandHandler(new Hellbound());
                registerVoicedCommandHandler(new VersionInfo());
Index: src/main/java/com/l2jfree/gameserver/handler/voicedcommandhandlers/Away.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/handler/voicedcommandhandlers/Away.java        (revision 0)
+++ src/main/java/com/l2jfree/gameserver/handler/voicedcommandhandlers/Away.java        (revision 0)
@@ -0,0 +1,152 @@
+/*
+ * 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 com.l2jfree.gameserver.handler.voicedcommandhandlers;
+
+import com.l2jfree.Config;
+import com.l2jfree.gameserver.handler.IVoicedCommandHandler;
+import com.l2jfree.gameserver.instancemanager.AwayManager;
+import com.l2jfree.gameserver.instancemanager.SiegeManager;
+import com.l2jfree.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jfree.gameserver.model.entity.Siege;
+import com.l2jfree.gameserver.model.zone.L2Zone;
+
+/**
+ * @author Michiru
+ *
+ */
+public class Away implements IVoicedCommandHandler
+{
+        private static final String[]        VOICED_COMMANDS        =
+                                                                                                        { "away", "back" };
+
+        /* (non-Javadoc)
+        * @see com.l2jfree.gameserver.handler.IVoicedCommandHandler#useVoicedCommand(String, com.l2jfree.gameserver.model.L2PcInstance), String)
+        */
+        public boolean useVoicedCommand(String command, L2PcInstance activeChar, String text)
+        {
+                if (command.startsWith("away"))
+                        return away(activeChar, text);
+                else if (command.startsWith("back"))
+                        return back(activeChar);
+                return false;
+        }
+
+        /* (non-Javadoc)
+        * @see com.l2jfree.gameserver.handler.IVoicedCommandHandler#getVoicedCommandList()
+        */
+
+        private boolean away(L2PcInstance activeChar, String text)
+        {
+                Siege siege = SiegeManager.getInstance().getSiege(activeChar);
+                //check char is all ready in away mode
+                if (activeChar.isAway())
+                {
+                        activeChar.sendMessage("You are allready Away");
+                        return false;
+                }
+               
+                if (!activeChar.isInsideZone(L2Zone.FLAG_PEACE) && Config.ALT_AWAY_PEACE_ZONE)
+                {
+                        activeChar.sendMessage("You can only Away in Peace Zone");
+                        return false;
+                }
+                if (activeChar.isTransformed())
+                {
+                        activeChar.sendMessage("You cannot go Away while transformed");
+                        return false;
+                }
+                //check player is death/fake death and movement disable
+                if (activeChar.isMovementDisabled() || activeChar.isAlikeDead())
+                        return false;
+                // Check if player is in Siege
+                if (siege != null && siege.getIsInProgress())
+                {
+                        activeChar.sendMessage("You are in siege, you can't go Afk.");
+                        return false;
+                }
+                // Check if player is a Cursed Weapon owner
+                if (activeChar.isCursedWeaponEquipped())
+                {
+                        activeChar.sendMessage("You can't go Afk! You are currently holding a cursed weapon.");
+                        return false;
+                }
+                // Check if player is in Duel
+                if (activeChar.isInDuel())
+                {
+                        activeChar.sendMessage("You can't go Afk! You are in a duel!");
+                        return false;
+                }
+                //check is in DimensionsRift
+                if (activeChar.isInParty() && activeChar.getParty().isInDimensionalRift())
+                {
+                        activeChar.sendMessage("You can't go Afk! You are in the dimensional rift.");
+                        return false;
+                }
+                // Check to see if the player is in an event
+                if (activeChar.isInFunEvent())
+                {
+                        activeChar.sendMessage("You can't go Afk! You are in event now.");
+                        return false;
+                }
+                //check player is in Olympiade
+                if (activeChar.isInOlympiadMode() || activeChar.getOlympiadGameId() != -1)
+                {
+                        activeChar.sendMessage("You can't go Afk! Your are fighting in Olympiad!");
+                        return false;
+                }
+                // Check player is in observer mode
+                if (activeChar.inObserverMode())
+                {
+                        activeChar.sendMessage("You can't go Afk in Observer mode!");
+                        return false;
+                }
+                //check player have karma/pk/pvp status
+                if (activeChar.getKarma() > 0 || activeChar.getPvpFlag() > 0)
+                {
+                        activeChar.sendMessage("Player in PVP or with Karma can't use the Away command!");
+                        return false;
+                }
+                if (activeChar.isImmobilized())
+                        return false;
+                //check away text have not more then 10 letter
+                if (text.length() > 10)
+                {
+                        activeChar.sendMessage("You can't set your status Away with more then 10 letters");
+                        return false;
+                }
+                // check if player have no one in target
+                if (activeChar.getTarget() == null && text.length() <= 1 || text.length() <= 10)
+
+                        //set this Player status away in AwayManager
+                        AwayManager.getInstance().setAway(activeChar, text);
+                return true;
+        }
+
+        private boolean back(L2PcInstance activeChar)
+        {
+                if (!activeChar.isAway())
+                {
+                        activeChar.sendMessage("You are not Away!");
+                        return false;
+                }
+                AwayManager.getInstance().setBack(activeChar);
+                return true;
+        }
+
+        public String[] getVoicedCommandList()
+        {
+                return VOICED_COMMANDS;
+        }
+}
Index: src/main/java/com/l2jfree/gameserver/instancemanager/AwayManager.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/instancemanager/AwayManager.java        (revision 0)
+++ src/main/java/com/l2jfree/gameserver/instancemanager/AwayManager.java        (revision 0)
@@ -0,0 +1,186 @@
+/*
+ * 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 com.l2jfree.gameserver.instancemanager;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import com.l2jfree.Config;
+import com.l2jfree.gameserver.ThreadPoolManager;
+import com.l2jfree.gameserver.ai.CtrlIntention;
+import com.l2jfree.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jfree.gameserver.network.serverpackets.SetupGauge;
+import com.l2jfree.gameserver.network.serverpackets.SocialAction;
+
+/**
+ * @author Michiru
+ *
+ */
+public final class AwayManager
+{
+        private static final Log                                _log        = LogFactory.getLog(AwayManager.class.getName());
+        private static AwayManager                                _instance;
+        private Map<L2PcInstance, RestoreData>        _awayPlayers;
+
+        public static final AwayManager getInstance()
+        {
+                if (_instance == null)
+                {
+                        _instance = new AwayManager();
+                        _log.info("AwayManager: initialized.");
+                }
+                return _instance;
+        }
+
+        private final class RestoreData
+        {
+                private final String        _originalTitle;
+                private final int                _originalTitleColor;
+                private final boolean        _sitForced;
+
+                public RestoreData(L2PcInstance activeChar)
+                {
+                        _originalTitle = activeChar.getTitle();
+                        _originalTitleColor = activeChar.getAppearance().getTitleColor();
+                        _sitForced = !activeChar.isSitting();
+                }
+
+                public boolean isSitForced()
+                {
+                        return _sitForced;
+                }
+
+                public void restore(L2PcInstance activeChar)
+                {
+                        activeChar.getAppearance().setTitleColor(_originalTitleColor);
+                        activeChar.setTitle(_originalTitle);
+                }
+        }
+
+        private AwayManager()
+        {
+                _awayPlayers = Collections.synchronizedMap(new WeakHashMap<L2PcInstance, RestoreData>());
+        }
+
+        /**
+        * @param activeChar
+        * @param text
+        */
+        public void setAway(L2PcInstance activeChar, String text)
+        {
+                activeChar.broadcastPacket(new SocialAction(activeChar.getObjectId(), 9));
+                activeChar.sendMessage("Your status is Away in " + Config.ALT_AWAY_TIMER + " Sec.");
+                activeChar.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
+                SetupGauge sg = new SetupGauge(SetupGauge.BLUE, Config.ALT_AWAY_TIMER * 1000);
+                activeChar.sendPacket(sg);
+                activeChar.setIsImmobilized(true);
+                ThreadPoolManager.getInstance().scheduleGeneral(new setPlayerAwayTask(activeChar, text), Config.ALT_AWAY_TIMER * 1000);
+        }
+
+        /**
+        * @param activeChar
+        */
+        public void setBack(L2PcInstance activeChar)
+        {
+                activeChar.sendMessage("You are back from Away Status in " + Config.ALT_BACK_TIMER + " Sec.");
+                SetupGauge sg = new SetupGauge(SetupGauge.BLUE, Config.ALT_BACK_TIMER * 1000);
+                activeChar.sendPacket(sg);
+                ThreadPoolManager.getInstance().scheduleGeneral(new setPlayerBackTask(activeChar), Config.ALT_BACK_TIMER * 1000);
+        }
+
+        class setPlayerAwayTask implements Runnable
+        {
+
+                private final L2PcInstance        _activeChar;
+                private final String                _awayText;
+
+                setPlayerAwayTask(L2PcInstance activeChar, String awayText)
+                {
+                        _activeChar = activeChar;
+                        _awayText = awayText;
+                }
+
+                public void run()
+                {
+                        if (_activeChar == null)
+                                return;
+                        if (_activeChar.isAttackingNow() || _activeChar.isCastingNow())
+                                return;
+
+                        _awayPlayers.put(_activeChar, new RestoreData(_activeChar));
+
+                        _activeChar.disableAllSkills();
+                        _activeChar.abortAttack();
+                        _activeChar.abortCast();
+                        _activeChar.setTarget(null);
+                        _activeChar.setIsImmobilized(false);
+                        if (!_activeChar.isSitting())
+                                _activeChar.sitDown(true);
+                        if (_awayText.length() <= 1)
+                        {
+                                _activeChar.sendMessage("You are now *Away*");
+                        }
+                        else
+                        {
+                                _activeChar.sendMessage("You are now Away *" + _awayText + "*");
+                        }
+                        _activeChar.getAppearance().setTitleColor(Config.ALT_AWAY_TITLE_COLOR);
+                        if (_awayText.length() <= 1)
+                        {
+                                _activeChar.setTitle("*Away*");
+                        }
+                        else
+                        {
+                                _activeChar.setTitle("Away*" + _awayText + "*");
+                        }
+                        _activeChar.broadcastUserInfo();
+                        _activeChar.setIsParalyzed(true);
+                        _activeChar.setIsAway(true);
+                }
+        }
+
+        class setPlayerBackTask implements Runnable
+        {
+
+                private final L2PcInstance        _activeChar;
+
+                setPlayerBackTask(L2PcInstance activeChar)
+                {
+                        _activeChar = activeChar;
+                }
+
+                public void run()
+                {
+                        if (_activeChar == null)
+                                return;
+                        RestoreData rd = _awayPlayers.get(_activeChar);
+                        if (rd == null)
+                                return;
+                        _activeChar.setIsParalyzed(false);
+                        _activeChar.enableAllSkills();
+                        _activeChar.setIsAway(false);
+                        if (rd.isSitForced())
+                                _activeChar.standUp();
+                        rd.restore(_activeChar);
+                        _awayPlayers.remove(_activeChar);
+                        _activeChar.broadcastUserInfo();
+                        _activeChar.sendMessage("You are Back now!");
+                }
+        }
+}
Index: src/main/java/com/l2jfree/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/model/actor/instance/L2PcInstance.java        (revision 4757)
+++ src/main/java/com/l2jfree/gameserver/model/actor/instance/L2PcInstance.java        (working copy)
@@ -752,6 +752,11 @@
 
        private int                                                                _clientRevision                        = 0;
 
+        /** character away mode **/
+        private boolean                                                        _isAway                                        = false;
+        public int                                                                _originalTitleColorAway;
+        public String                                                        _originalTitleAway;
+
        private FactionMember                                        _faction;
 
        /* Flag to disable equipment/skills while wearing formal wear **/
@@ -2784,6 +2789,8 @@
                {
                        sendMessage("A dark force beyond your mortal understanding makes your knees to shake when you try to stand up ...");
                }
+                else if (isAway())
+                        sendMessage("You can't stand up if your Status is Away");
                else if (TvT._sitForced && _inEventTvT || CTF._sitForced && _inEventCTF || DM._sitForced && _inEventDM || VIP._sitForced && _inEventVIP)
                        sendMessage("The Admin/GM handle if you sit or stand in this match!");
                else if (_waitTypeSitting && !isInStoreMode() && !isAlikeDead() && (!_protectedSitStand || force))
@@ -3735,6 +3742,12 @@
                        return;
                }
 
+                if (isAway() && !Config.ALT_AWAY_ALLOW_INTERFERENCE)
+                {
+                        sendMessage("You can't target Away Players");
+                        sendPacket(ActionFailed.STATIC_PACKET);
+                        return;
+                }
                if (Config.SIEGE_ONLY_REGISTERED)
                {
                        if (!canBeTargetedByAtSiege(player))
@@ -12995,7 +13008,17 @@
        {
                _olympiadOpponentId = value;
        }
-       
+
+        public boolean isAway()
+        {
+                return _isAway;
+        }
+
+        public void setIsAway(boolean state)
+        {
+                _isAway = state;
+        }
+
        private ImmutableReference<L2PcInstance> _immutableReference;
        private ClearableReference<L2PcInstance> _clearableReference;
       
Index: src/main/java/com/l2jfree/gameserver/network/clientpackets/Logout.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/network/clientpackets/Logout.java        (revision 4757)
+++ src/main/java/com/l2jfree/gameserver/network/clientpackets/Logout.java        (working copy)
@@ -78,6 +78,13 @@
            player.sendMessage("You can not log out while flying.");
            return;
        }
+
+                if (player.isAway())
+                {
+                        player.sendMessage("You can't logout in Away mode.");
+                        return;
+                }
+
        // [L2J_JP ADD END]
 
        if(AttackStanceTaskManager.getInstance().getAttackStanceTask(player) && !player.isGM())
Index: src/main/java/com/l2jfree/gameserver/network/clientpackets/RequestRestart.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/network/clientpackets/RequestRestart.java        (revision 4757)
+++ src/main/java/com/l2jfree/gameserver/network/clientpackets/RequestRestart.java        (working copy)
@@ -66,6 +66,12 @@
            return;
        }
 
+                if (player.isAway())
+                {
+                        player.sendMessage("You can't restart in Away mode.");
+                        return;
+                }
+
        if(player.atEvent)
        {
            player.sendMessage("A superior power doesn't allow you to leave the event.");
Index: src/main/java/com/l2jfree/gameserver/network/L2IrcClient.java
===================================================================
--- src/main/java/com/l2jfree/gameserver/network/L2IrcClient.java        (revision 4757)
+++ src/main/java/com/l2jfree/gameserver/network/L2IrcClient.java        (working copy)
@@ -337,8 +337,11 @@
                                        boolean _isFirst = true;
                                        for (L2PcInstance player : L2World.getInstance().getAllPlayers())
                                        {
-                                                _onlineNames = _onlineNames + (_isFirst ? " " : ", ") + player.getName();
-                                                _isFirst = false;
+                                                if (player.isAway())
+                                                        _onlineNames = _onlineNames + (_isFirst ? " " : ", ") + player.getName() + "*Away*";
+                                                else
+                                                        _onlineNames = _onlineNames + (_isFirst ? " " : ", ") + player.getName();
+                                                        _isFirst = false;
                                        }
                                        sendChan(_onlineNames);
                                }

Creditos : Michiru

VslDream 12-04-2010 05:49 PM

E qual a finalidade dos MOD.
O que acontece em cada MODO?

paytaly 12-04-2010 07:45 PM

Basicamente, você digita ".away", seu Char senta no Chão, muda o título para indicar que está away e são bloqueadas algumas funções, como Attack e Target.
".back" volta ao normal.


Horários baseados na GMT -3. Agora são 09:33 AM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.