/// <summary>
            /// Called on every timer tick
            /// </summary>
            protected override void OnTick()
            {
                var player = (GamePlayer)m_actionSource;

                if (player == null)
                {
                    return;
                }

                // log.DebugFormat("Dialog - response: {0}, messageType: {1}, data1: {2}, data2: {3}, data3: {4}", m_response, m_messageType, m_data1, m_data2, m_data3);

                switch ((eDialogCode)m_messageType)
                {
                case eDialogCode.CustomDialog:
                {
                    if (m_data2 == 0x01)
                    {
                        CustomDialogResponse callback;
                        lock (player)
                        {
                            callback = player.CustomDialogCallback;
                            player.CustomDialogCallback = null;
                        }

                        if (callback == null)
                        {
                            return;
                        }

                        callback(player, m_response);
                    }
                    break;
                }

                case eDialogCode.GuildInvite:
                {
                    var guildLeader = WorldMgr.GetObjectByIDFromRegion(player.CurrentRegionID, (ushort)m_data1) as GamePlayer;
                    if (m_response == 0x01)                                     //accept
                    {
                        if (guildLeader == null)
                        {
                            player.Out.SendMessage("You need to be in the same region as the guild leader to accept an invitation.",
                                                   eChatType.CT_System, eChatLoc.CL_SystemWindow);
                            return;
                        }
                        if (player.Guild != null)
                        {
                            player.Out.SendMessage("You are still in a guild, you'll have to leave it first.", eChatType.CT_System,
                                                   eChatLoc.CL_SystemWindow);
                            return;
                        }
                        if (guildLeader.Guild != null)
                        {
                            guildLeader.Guild.AddPlayer(player);
                            return;
                        }

                        player.Out.SendMessage("Player doing the invite is not in a guild!", eChatType.CT_System,
                                               eChatLoc.CL_SystemWindow);
                        return;
                    }

                    if (guildLeader != null)
                    {
                        guildLeader.Out.SendMessage(player.Name + " declined your invite.", eChatType.CT_System,
                                                    eChatLoc.CL_SystemWindow);
                    }
                    return;
                }

                case eDialogCode.GuildLeave:
                {
                    if (m_response == 0x01)                                     //accepte
                    {
                        if (player.Guild == null)
                        {
                            player.Out.SendMessage("You are not in a guild.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                            return;
                        }

                        player.Guild.RemovePlayer(player.Name, player);
                    }
                    else
                    {
                        player.Out.SendMessage("You decline to quit your guild.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                        return;
                    }
                    break;
                }

                case eDialogCode.QuestSubscribe:
                {
                    var questNPC = (GameLiving)WorldMgr.GetObjectByIDFromRegion(player.CurrentRegionID, (ushort)m_data2);
                    if (questNPC == null)
                    {
                        return;
                    }

                    var args = new QuestEventArgs(questNPC, player, (ushort)m_data1);
                    if (m_response == 0x01)                                     // accept
                    {
                        // TODO add quest to player
                        // Note: This is done withing quest code since we have to check requirements, etc for each quest individually
                        // i'm reusing the questsubscribe command for quest abort since its 99% the same, only different event dets fired
                        player.Notify(m_data3 == 0x01 ? GamePlayerEvent.AbortQuest : GamePlayerEvent.AcceptQuest, player, args);
                        return;
                    }
                    player.Notify(m_data3 == 0x01 ? GamePlayerEvent.ContinueQuest : GamePlayerEvent.DeclineQuest, player, args);
                    return;
                }

                case eDialogCode.GroupInvite:
                {
                    if (m_response == 0x01)
                    {
                        GameClient cln = WorldMgr.GetClientFromID(m_data1);
                        if (cln == null)
                        {
                            return;
                        }

                        GamePlayer groupLeader = cln.Player;
                        if (groupLeader == null)
                        {
                            return;
                        }

                        if (player.Group != null)
                        {
                            player.Out.SendMessage("You are still in a group.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                            return;
                        }
                        if (!GameServer.ServerRules.IsAllowedToGroup(groupLeader, player, false))
                        {
                            return;
                        }
                        if (player.InCombatPvE)
                        {
                            player.Out.SendMessage("You can't join a group while in combat!", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                            return;
                        }
                        if (groupLeader.Group != null)
                        {
                            if (groupLeader.Group.Leader != groupLeader)
                            {
                                return;
                            }
                            if (groupLeader.Group.MemberCount >= ServerProperties.Properties.GROUP_MAX_MEMBER)
                            {
                                player.Out.SendMessage("The group is full.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                                return;
                            }
                            groupLeader.Group.AddMember(player);
                            GameEventMgr.Notify(GamePlayerEvent.AcceptGroup, player);
                            return;
                        }

                        var group = new Group(groupLeader);
                        GroupMgr.AddGroup(group);

                        group.AddMember(groupLeader);
                        group.AddMember(player);

                        GameEventMgr.Notify(GamePlayerEvent.AcceptGroup, player);

                        return;
                    }
                    break;
                }

                case eDialogCode.KeepClaim:
                {
                    if (m_response == 0x01)
                    {
                        if (player.Guild == null)
                        {
                            player.Out.SendMessage("You have to be a member of a guild, before you can use any of the commands!",
                                                   eChatType.CT_System, eChatLoc.CL_SystemWindow);
                            return;
                        }

                        AbstractGameKeep keep = GameServer.KeepManager.GetKeepCloseToSpot(player.CurrentRegionID, player.Position, WorldMgr.VISIBILITY_DISTANCE);
                        if (keep == null)
                        {
                            player.Out.SendMessage("You have to be near the keep to claim it.", eChatType.CT_System,
                                                   eChatLoc.CL_SystemWindow);
                            return;
                        }

                        if (keep.CheckForClaim(player))
                        {
                            keep.Claim(player);
                        }
                        break;
                    }
                    break;
                }

                case eDialogCode.HousePayRent:
                {
                    if (m_response == 0x00)
                    {
                        if (player.TempProperties.getProperty <long>(HousingConstants.MoneyForHouseRent, -1) != -1)
                        {
                            player.TempProperties.removeProperty(HousingConstants.MoneyForHouseRent);
                        }

                        if (player.TempProperties.getProperty <long>(HousingConstants.BPsForHouseRent, -1) != -1)
                        {
                            player.TempProperties.removeProperty(HousingConstants.BPsForHouseRent);
                        }

                        player.TempProperties.removeProperty(HousingConstants.HouseForHouseRent);

                        return;
                    }

                    var house      = player.TempProperties.getProperty <House>(HousingConstants.HouseForHouseRent, null);
                    var moneyToAdd = player.TempProperties.getProperty <long>(HousingConstants.MoneyForHouseRent, -1);
                    var bpsToMoney = player.TempProperties.getProperty <long>(HousingConstants.BPsForHouseRent, -1);

                    if (moneyToAdd != -1)
                    {
                        // if we're giving money and already have some in the lockbox, make sure we don't
                        // take more than what would cover 4 weeks of rent.
                        if (moneyToAdd + house.KeptMoney > HouseMgr.GetRentByModel(house.Model) * ServerProperties.Properties.RENT_LOCKBOX_PAYMENTS)
                        {
                            moneyToAdd = (HouseMgr.GetRentByModel(house.Model) * ServerProperties.Properties.RENT_LOCKBOX_PAYMENTS) - house.KeptMoney;
                        }

                        // take the money from the player
                        if (!player.RemoveMoney(moneyToAdd))
                        {
                            return;
                        }
                        InventoryLogging.LogInventoryAction(player, "(HOUSE;" + house.HouseNumber + ")", eInventoryActionType.Other, moneyToAdd);

                        // add the money to the lockbox
                        house.KeptMoney += moneyToAdd;

                        // save the house and the player
                        house.SaveIntoDatabase();
                        player.SaveIntoDatabase();

                        // notify the player of what we took and how long they are prepaid for
                        player.Out.SendMessage("You deposit " + Money.GetString(moneyToAdd) + " in the lockbox.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                        player.Out.SendMessage("The lockbox now has " + Money.GetString(house.KeptMoney) + " in it.  The weekly payment is " +
                                               Money.GetString(HouseMgr.GetRentByModel(house.Model)) + ".", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                        player.Out.SendMessage("The house is now prepaid for the next " + (house.KeptMoney / HouseMgr.GetRentByModel(house.Model)) +
                                               " payments.", eChatType.CT_System, eChatLoc.CL_SystemWindow);

                        // clean up
                        player.TempProperties.removeProperty(HousingConstants.MoneyForHouseRent);
                    }
                    else
                    {
                        if (bpsToMoney + house.KeptMoney > HouseMgr.GetRentByModel(house.Model) * ServerProperties.Properties.RENT_LOCKBOX_PAYMENTS)
                        {
                            bpsToMoney = (HouseMgr.GetRentByModel(house.Model) * ServerProperties.Properties.RENT_LOCKBOX_PAYMENTS) - house.KeptMoney;
                        }

                        if (!player.RemoveBountyPoints(Money.GetGold(bpsToMoney)))
                        {
                            return;
                        }

                        // add the bps to the lockbox
                        house.KeptMoney += bpsToMoney;

                        // save the house and the player
                        house.SaveIntoDatabase();
                        player.SaveIntoDatabase();

                        // notify the player of what we took and how long they are prepaid for
                        player.Out.SendMessage("You deposit " + Money.GetString(bpsToMoney) + " in the lockbox.", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                        player.Out.SendMessage("The lockbox now has " + Money.GetString(house.KeptMoney) + " in it.  The weekly payment is " +
                                               Money.GetString(HouseMgr.GetRentByModel(house.Model)) + ".", eChatType.CT_System, eChatLoc.CL_SystemWindow);
                        player.Out.SendMessage("The house is now prepaid for the next " + (house.KeptMoney / HouseMgr.GetRentByModel(house.Model)) +
                                               " payments.", eChatType.CT_System, eChatLoc.CL_SystemWindow);

                        // clean up
                        player.TempProperties.removeProperty(HousingConstants.BPsForHouseRent);
                    }

                    // clean up
                    player.TempProperties.removeProperty(HousingConstants.MoneyForHouseRent);
                    break;
                }

                case eDialogCode.MasterLevelWindow:
                {
                    player.Out.SendMasterLevelWindow(m_response);
                    break;
                }
                }
            }
Beispiel #2
0
        public void OnCommand(GameClient client, string[] args)
        {
            long bpWorth = ServerProperties.Properties.RENT_BOUNTY_POINT_TO_GOLD;

            if (args.Length < 2)
            {
                client.Out.SendMessage(
                    LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.CmdUsage", bpWorth),
                    eChatType.CT_System, eChatLoc.CL_SystemWindow);

                return;
            }

            if (args.Length < 3)
            {
                client.Out.SendMessage(
                    LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.CorrectFormat"),
                    eChatType.CT_System, eChatLoc.CL_SystemWindow);

                return;
            }

            House house = client.Player.CurrentHouse;

            if (house == null)
            {
                client.Out.SendMessage(
                    LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.RangeOfAHouse"),
                    eChatType.CT_System, eChatLoc.CL_SystemWindow);

                return;
            }

            long BPsToAdd = 0;

            try
            {
                BPsToAdd = long.Parse(args[2]);
            }
            catch
            {
                client.Out.SendMessage(
                    LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.CorrectFormat"),
                    eChatType.CT_System, eChatLoc.CL_SystemWindow);

                return;
            }

            switch (args[1].ToLower())
            {
            case "personal":
            {
                if (!house.CanPayRent(client.Player))
                {
                    client.Out.SendMessage(
                        LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.NoPayRentPerm"),
                        eChatType.CT_System, eChatLoc.CL_SystemWindow);

                    return;
                }

                if ((client.Player.BountyPoints -= BPsToAdd) < 0)
                {
                    client.Out.SendMessage(
                        LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.NotEnoughBp"),
                        eChatType.CT_System, eChatLoc.CL_SystemWindow);

                    return;
                }

                if (house.KeptMoney >= (HouseMgr.GetRentByModel(house.Model) * ServerProperties.Properties.RENT_LOCKBOX_PAYMENTS))
                {
                    client.Out.SendMessage(
                        LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.AlreadyMaxMoney"),
                        eChatType.CT_System, eChatLoc.CL_SystemWindow);

                    return;
                }

                if ((house.KeptMoney + (BPsToAdd * bpWorth)) > (HouseMgr.GetRentByModel(house.Model) * ServerProperties.Properties.RENT_LOCKBOX_PAYMENTS))
                {
                    client.Out.SendMessage(
                        LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.ToManyMoney"),
                        eChatType.CT_System, eChatLoc.CL_SystemWindow);

                    return;
                }

                house.KeptMoney += BPsToAdd * bpWorth;
                house.SaveIntoDatabase();

                client.Player.BountyPoints -= BPsToAdd;
                client.Player.SaveIntoDatabase();

                client.Out.SendUpdatePoints();
                client.Out.SendMessage(
                    LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.YouSpend", BPsToAdd, (BPsToAdd * bpWorth) / bpWorth),
                    eChatType.CT_System, eChatLoc.CL_SystemWindow);
            }

            break;

            case "guild":
            {
                if (house.DatabaseItem.GuildHouse && client.Player.GuildName == house.DatabaseItem.GuildName)
                {
                    if (house.CanPayRent(client.Player))
                    {
                        if ((client.Player.Guild.BountyPoints -= BPsToAdd) < 0)
                        {
                            client.Out.SendMessage(
                                LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.NotEnoughGuildBp"),
                                eChatType.CT_System, eChatLoc.CL_SystemWindow);
                            return;
                        }

                        if (house.KeptMoney >= (HouseMgr.GetRentByModel(house.Model) * ServerProperties.Properties.RENT_LOCKBOX_PAYMENTS))
                        {
                            client.Out.SendMessage(
                                LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.AlreadyMaxMoney"),
                                eChatType.CT_System, eChatLoc.CL_SystemWindow);

                            return;
                        }

                        if ((house.KeptMoney + (BPsToAdd * bpWorth)) > (HouseMgr.GetRentByModel(house.Model) * ServerProperties.Properties.RENT_LOCKBOX_PAYMENTS))
                        {
                            client.Out.SendMessage(
                                LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.ToManyMoney"),
                                eChatType.CT_System, eChatLoc.CL_SystemWindow);

                            return;
                        }

                        house.KeptMoney += BPsToAdd * bpWorth;
                        house.SaveIntoDatabase();

                        client.Player.Guild.BountyPoints -= BPsToAdd;
                        client.Player.Guild.SaveIntoDatabase();

                        client.Out.SendMessage(
                            LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.YouSpendGuild", BPsToAdd, (BPsToAdd * bpWorth) / bpWorth),
                            eChatType.CT_System, eChatLoc.CL_SystemWindow);

                        return;
                    }
                    else
                    {
                        client.Out.SendMessage(
                            LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.NoPayRentPerm"),
                            eChatType.CT_System, eChatLoc.CL_SystemWindow);

                        return;
                    }
                }

                DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.NotAHouseGuildLeader"));
            }

            break;

            default:
            {
                DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "Scripts.Players.Bountyrent.CorrectFormat"));
            }

            break;
            }
        }
Beispiel #3
0
            private static void SendHouseRentRemindersToPlayer(GamePlayer player)
            {
                House house = HouseMgr.GetHouseByPlayer(player);

                if (house != null)
                {
                    TimeSpan due = (house.LastPaid.AddDays(Properties.RENT_DUE_DAYS).AddHours(1) - DateTime.Now);
                    if ((due.Days <= 0 || due.Days < Properties.RENT_DUE_DAYS) && house.KeptMoney < HouseMgr.GetRentByModel(house.Model))
                    {
                        player.Out.SendRentReminder(house);
                    }
                }

                if (player.Guild != null)
                {
                    House ghouse = HouseMgr.GetGuildHouseByPlayer(player);
                    if (ghouse != null)
                    {
                        TimeSpan due = (ghouse.LastPaid.AddDays(Properties.RENT_DUE_DAYS).AddHours(1) - DateTime.Now);
                        if ((due.Days <= 0 || due.Days < Properties.RENT_DUE_DAYS) && ghouse.KeptMoney < HouseMgr.GetRentByModel(ghouse.Model))
                        {
                            player.Out.SendRentReminder(ghouse);
                        }
                    }
                }
            }
Beispiel #4
0
        public void OnCommand(GameClient client, string[] args)
        {
            uint hour    = WorldMgr.GetCurrentGameTime() / 1000 / 60 / 60;
            uint minute  = WorldMgr.GetCurrentGameTime() / 1000 / 60 % 60;
            uint seconde = WorldMgr.GetCurrentGameTime() / 1000 % 60;

            string name = "(NoName)";
            var    info = new List <string>();

            info.Add("        Current Region : " + client.Player.CurrentRegionID);
            info.Add(" ");
            Type regionType = client.Player.CurrentRegion.GetType();

            info.Add("       Region ClassType: " + regionType.FullName);
            info.Add(" ");

            if (client.Player.TargetObject != null)
            {
                if (!string.IsNullOrEmpty(client.Player.TargetObject.Name))
                {
                    name = client.Player.TargetObject.Name;
                }

                #region Mob
                /********************* MOB ************************/
                if (client.Player.TargetObject is GameNPC)
                {
                    var target = client.Player.TargetObject as GameNPC;

                    if (target.NPCTemplate != null)
                    {
                        info.Add(" + NPCTemplate: " + "[" + target.NPCTemplate.TemplateId + "] " + target.NPCTemplate.Name);
                    }
                    info.Add(" + Class: " + target.GetType().ToString());
                    info.Add(" + Brain: " + (target.Brain == null ? "(null)" : target.Brain.GetType().ToString()));
                    if (target.LoadedFromScript)
                    {
                        info.Add(" + Loaded: from Script");
                    }
                    else
                    {
                        info.Add(" + Loaded: from Database");
                    }
                    info.Add(" ");
                    if (client.Player.TargetObject is GameMerchant)
                    {
                        var targetM = client.Player.TargetObject as GameMerchant;

                        info.Add(" + Is Merchant ");
                        if (targetM.TradeItems != null)
                        {
                            info.Add(" + Sell List: \n   " + targetM.TradeItems.ItemsListID);
                        }
                        else
                        {
                            info.Add(" + Sell List:  Not Present !\n");
                        }
                        info.Add(" ");
                    }
                    if (client.Player.TargetObject is GamePet)
                    {
                        var targetP = client.Player.TargetObject as GamePet;
                        info.Add(" + Is Pet ");
                        info.Add(" + Pet Owner:   " + targetP.Owner);
                        info.Add(" ");
                    }

                    if (client.Player.TargetObject is GameMovingObject)
                    {
                        var targetM = client.Player.TargetObject as GameMovingObject;
                        info.Add(" + Is GameMovingObject  ");
                        info.Add(" + ( Boats - Siege weapons - Custom Object");
                        info.Add(" + Emblem:   " + targetM.Emblem);
                        info.Add(" ");
                    }

                    info.Add(" + Name: " + name);
                    if (target.GuildName != null && target.GuildName.Length > 0)
                    {
                        info.Add(" + Guild: " + target.GuildName);
                    }
                    info.Add(" + Level: " + target.Level);
                    info.Add(" + Realm: " + GlobalConstants.RealmToName(target.Realm));
                    info.Add(" + Model:  " + target.Model);
                    info.Add(" + Size " + target.Size);
                    info.Add(string.Format(" + Flags: {0} (0x{1})", ((GameNPC.eFlags)target.Flags).ToString("G"), target.Flags.ToString("X")));
                    info.Add(" ");

                    info.Add(" + Speed(current/max): " + target.CurrentSpeed + "/" + target.MaxSpeedBase);
                    info.Add(" + Health: " + target.Health + "/" + target.MaxHealth);
                    info.Add(" + Endu: " + target.Endurance + "/" + target.MaxEndurance);
                    info.Add(" + Mana: " + target.Mana + "/" + target.MaxMana);
                    info.Add(" + Conc: " + target.Concentration + "/" + target.MaxConcentration);

                    IOldAggressiveBrain aggroBrain = target.Brain as IOldAggressiveBrain;
                    if (aggroBrain != null)
                    {
                        info.Add(" + Aggro level: " + aggroBrain.AggroLevel);
                        info.Add(" + Aggro range: " + aggroBrain.AggroRange);

                        if (target.MaxDistance < 0)
                        {
                            info.Add(" + MaxDistance: " + -target.MaxDistance * aggroBrain.AggroRange / 100);
                        }
                        else
                        {
                            info.Add(" + MaxDistance: " + target.MaxDistance);
                        }
                    }
                    else
                    {
                        info.Add(" + Not aggressive brain");
                    }

                    if (target.NPCTemplate != null)
                    {
                        info.Add(" + NPCTemplate: " + "[" + target.NPCTemplate.TemplateId + "] " + target.NPCTemplate.Name);
                    }

                    info.Add(" + Roaming Range: " + target.RoamingRange);

                    TimeSpan respawn = TimeSpan.FromMilliseconds(target.RespawnInterval);
                    if (target.RespawnInterval <= 0)
                    {
                        info.Add(" + Respawn: NPC will not respawn");
                    }
                    else
                    {
                        string days  = "";
                        string hours = "";
                        if (respawn.Days > 0)
                        {
                            days = respawn.Days + " days ";
                        }
                        if (respawn.Hours > 0)
                        {
                            hours = respawn.Hours + " hours ";
                        }
                        info.Add(" + Respawn: " + days + hours + respawn.Minutes + " minutes " + respawn.Seconds + " seconds");
                        info.Add(" + SpawnPoint:  " + target.SpawnPoint.X + ", " + target.SpawnPoint.Y + ", " + target.SpawnPoint.Z);
                    }

                    if (target.QuestListToGive.Count > 0)
                    {
                        info.Add(" + Quests to give:  " + target.QuestListToGive.Count);
                    }

                    if (target.PathID != null && target.PathID.Length > 0)
                    {
                        info.Add(" + Path: " + target.PathID);
                    }

                    if (target.OwnerID != null && target.OwnerID.Length > 0)
                    {
                        info.Add(" + OwnerID: " + target.OwnerID);
                    }

                    info.Add(" ");
                    info.Add($" + {target.Strength} STR / {target.Constitution} CON / {target.Dexterity} DEX / {target.Quickness} QUI");
                    info.Add($" + {target.Intelligence} INT / {target.Empathy} EMP / {target.Piety} PIE / {target.Charisma} CHR");
                    info.Add($" + {target.WeaponDps} DPS / {target.WeaponSpd} SPD / {target.ArmorFactor} AF / {target.ArmorAbsorb} ABS");
                    info.Add($" + {target.BlockChance}% Block / {target.ParryChance}% Parry / {target.EvadeChance}% Evade");

                    info.Add(" + Damage type: " + target.MeleeDamageType);
                    if (target.LeftHandSwingChance > 0)
                    {
                        info.Add(" + Left Swing %: " + target.LeftHandSwingChance);
                    }

                    if (target.Abilities != null && target.Abilities.Count > 0)
                    {
                        info.Add(" + Abilities: " + target.Abilities.Count);
                    }

                    if (target.Spells != null && target.Spells.Count > 0)
                    {
                        info.Add(" + Spells: " + target.Spells.Count);
                    }

                    if (target.Styles != null && target.Styles.Count > 0)
                    {
                        info.Add(" + Styles: " + target.Styles.Count);
                    }

                    info.Add(" ");
                    if (target.Race > 0)
                    {
                        info.Add(" + Race:  " + target.Race);
                    }

                    if (target.BodyType > 0)
                    {
                        info.Add(" + Body Type:  " + target.BodyType);
                    }

                    if (target.GetDamageResist(eProperty.Resist_Crush) > 0)
                    {
                        info.Add(" + Resist Crush:  " + target.GetDamageResist(eProperty.Resist_Crush));
                    }
                    if (target.GetDamageResist(eProperty.Resist_Slash) > 0)
                    {
                        info.Add(" + Resist Slash:  " + target.GetDamageResist(eProperty.Resist_Slash));
                    }
                    if (target.GetDamageResist(eProperty.Resist_Thrust) > 0)
                    {
                        info.Add(" + Resist Thrust:  " + target.GetDamageResist(eProperty.Resist_Thrust));
                    }
                    if (target.GetDamageResist(eProperty.Resist_Heat) > 0)
                    {
                        info.Add(" + Resist Heat:  " + target.GetDamageResist(eProperty.Resist_Heat));
                    }
                    if (target.GetDamageResist(eProperty.Resist_Cold) > 0)
                    {
                        info.Add(" + Resist Cold:  " + target.GetDamageResist(eProperty.Resist_Cold));
                    }
                    if (target.GetDamageResist(eProperty.Resist_Matter) > 0)
                    {
                        info.Add(" + Resist Matter:  " + target.GetDamageResist(eProperty.Resist_Matter));
                    }
                    if (target.GetDamageResist(eProperty.Resist_Natural) > 0)
                    {
                        info.Add(" + Resist Natural:  " + target.GetDamageResist(eProperty.Resist_Natural));
                    }
                    if (target.GetDamageResist(eProperty.Resist_Body) > 0)
                    {
                        info.Add(" + Resist Body:  " + target.GetDamageResist(eProperty.Resist_Body));
                    }
                    if (target.GetDamageResist(eProperty.Resist_Spirit) > 0)
                    {
                        info.Add(" + Resist Spirit:  " + target.GetDamageResist(eProperty.Resist_Spirit));
                    }
                    if (target.GetDamageResist(eProperty.Resist_Energy) > 0)
                    {
                        info.Add(" + Resist Energy:  " + target.GetDamageResist(eProperty.Resist_Energy));
                    }
                    info.Add(" + Active weapon slot: " + target.ActiveWeaponSlot);
                    info.Add(" + Visible weapon slot: " + target.VisibleActiveWeaponSlots);

                    if (target.EquipmentTemplateID != null && target.EquipmentTemplateID.Length > 0)
                    {
                        info.Add(" + Equipment Template ID: " + target.EquipmentTemplateID);
                    }

                    if (target.Inventory != null)
                    {
                        info.Add(" + Inventory: " + target.Inventory.AllItems.Count + " items");
                    }

                    info.Add(" ");
                    info.Add(" + Mob_ID:  " + target.InternalID);
                    info.Add(" + Position:  " + target.Position.ToString("F0") + ", " + target.Heading);
                    info.Add(" + OID: " + target.ObjectID);
                    info.Add(" + Package ID:  " + target.PackageID);

                    /*	if (target.Brain != null && target.Brain.IsActive)
                     *      {
                     *              info.Add(target.Brain.GetType().FullName);
                     *              info.Add(target.Brain.ToString());
                     *              info.Add("");
                     *      }
                     */
                    info.Add("");
                    info.Add(" ------ State ------");
                    if (target.IsReturningHome || target.IsReturningToSpawnPoint)
                    {
                        info.Add("IsReturningHome: " + target.IsReturningHome);
                        info.Add("IsReturningToSpawnPoint: " + target.IsReturningToSpawnPoint);
                        info.Add("");
                    }

                    info.Add("InCombat: " + target.InCombat);
                    info.Add("AttackState: " + target.AttackState);
                    info.Add("LastCombatPVE: " + target.LastAttackedByEnemyTickPvE);
                    info.Add("LastCombatPVP: " + target.LastAttackedByEnemyTickPvP);

                    if (target.InCombat || target.AttackState)
                    {
                        info.Add("RegionTick: " + target.CurrentRegion.Time);
                    }

                    info.Add("");

                    if (target.TargetObject != null)
                    {
                        info.Add("TargetObject: " + target.TargetObject.Name);
                        info.Add("InView: " + target.TargetInView);
                    }

                    if (target.Brain != null && target.Brain is StandardMobBrain)
                    {
                        Dictionary <GameLiving, long> aggroList = (target.Brain as StandardMobBrain).AggroTable;

                        if (aggroList.Count > 0)
                        {
                            info.Add("");
                            info.Add("Aggro List:");

                            foreach (GameLiving living in aggroList.Keys)
                            {
                                info.Add(living.Name + ": " + aggroList[living]);
                            }
                        }
                    }

                    if (target.Attackers != null && target.Attackers.Count > 0)
                    {
                        info.Add("");
                        info.Add("Attacker List:");

                        foreach (GameLiving attacker in target.Attackers)
                        {
                            info.Add(attacker.Name);
                        }
                    }

                    if (target.EffectList.Count > 0)
                    {
                        info.Add("");
                        info.Add("Effect List:");

                        foreach (IGameEffect effect in target.EffectList)
                        {
                            info.Add(effect.Name + " remaining " + effect.RemainingTime);
                        }
                    }

                    info.Add("");
                    info.Add(" + Loot:");

                    var template = DOLDB <LootTemplate> .SelectObjects(DB.Column(nameof(LootTemplate.TemplateName)).IsEqualTo(target.Name));

                    foreach (LootTemplate loot in template)
                    {
                        ItemTemplate drop = GameServer.Database.FindObjectByKey <ItemTemplate>(loot.ItemTemplateID);

                        string message = "";
                        if (drop == null)
                        {
                            message += loot.ItemTemplateID + " (Template Not Found)";
                        }
                        else
                        {
                            message += drop.Name + " (" + drop.Id_nb + ")";
                        }

                        message += " Chance: " + loot.Chance.ToString();
                        info.Add("- " + message);
                    }
                }

                #endregion Mob

                #region Player
                /********************* PLAYER ************************/
                if (client.Player.TargetObject is GamePlayer)
                {
                    var target = client.Player.TargetObject as GamePlayer;

                    info.Add("PLAYER INFORMATION (Client # " + target.Client.SessionID + ")");
                    info.Add("  - Name : " + target.Name);
                    info.Add("  - Lastname : " + target.LastName);
                    info.Add("  - Realm : " + GlobalConstants.RealmToName(target.Realm));
                    info.Add("  - Level : " + target.Level);
                    info.Add("  - Class : " + target.CharacterClass.Name);
                    info.Add("  - Guild : " + target.GuildName);
                    info.Add(" ");
                    info.Add("  - Account Name : " + target.AccountName);
                    info.Add("  - IP : " + target.Client.Account.LastLoginIP);
                    info.Add("  - Priv. Level : " + target.Client.Account.PrivLevel);
                    info.Add("  - Client Version: " + target.Client.Account.LastClientVersion);
                    info.Add(" ");
                    info.Add("  - Craftingskill : " + target.CraftingPrimarySkill + "");
                    info.Add("  - Model ID : " + target.Model);
                    info.Add("  - AFK Message: " + target.TempProperties.getProperty <string>(GamePlayer.AFK_MESSAGE) + "");
                    info.Add(" ");
                    info.Add("  - Money : " + Money.GetString(target.GetCurrentMoney()) + "\n");
                    info.Add("  - Speed : " + target.MaxSpeedBase);
                    info.Add("  - XPs : " + target.Experience);
                    info.Add("  - RPs : " + target.RealmPoints);
                    info.Add("  - BPs : " + target.BountyPoints);

                    String sCurrent = "";
                    String sTitle   = "";
                    int    cnt      = 0;

                    info.Add(" ");
                    info.Add("SPECCING INFORMATIONS ");
                    info.Add("  - Remaining spec. points : " + target.SkillSpecialtyPoints);
                    sTitle   = "  - Player specialisations / level: \n";
                    sCurrent = "";
                    foreach (Specialization spec in target.GetSpecList())
                    {
                        sCurrent += "  - " + spec.Name + " = " + spec.Level + " \n";
                    }
                    info.Add(sTitle + sCurrent);

                    sCurrent = "";
                    sTitle   = "";

                    info.Add(" ");
                    info.Add("CHARACTER STATS ");
                    info.Add("  - Maximum Health : " + target.MaxHealth);
                    info.Add("  - Current AF : " + target.GetModified(eProperty.ArmorFactor));
                    info.Add("  - Current ABS : " + target.GetModified(eProperty.ArmorAbsorption));

                    for (eProperty stat = eProperty.Stat_First; stat <= eProperty.Stat_Last; stat++, cnt++)
                    {
                        sTitle   += GlobalConstants.PropertyToName(stat);
                        sCurrent += target.GetModified(stat);

                        info.Add("  - " + sTitle + " : " + sCurrent);
                        sCurrent = "";
                        sTitle   = "";
                    }

                    sCurrent = "";
                    sTitle   = "";
                    cnt      = 0;
                    for (eProperty res = eProperty.Resist_First; res <= eProperty.Resist_Last; res++, cnt++)
                    {
                        sTitle   += GlobalConstants.PropertyToName(res);
                        sCurrent += target.GetModified(res);
                        info.Add("  - " + sTitle + " : " + sCurrent);
                        sCurrent = "";
                        sTitle   = "";
                    }

                    info.Add(" ");
                    info.Add(" ");
                    info.Add("  - Respecs dol : " + target.RespecAmountDOL);
                    info.Add("  - Respecs single : " + target.RespecAmountSingleSkill);
                    info.Add("  - Respecs full : " + target.RespecAmountAllSkill);

                    info.Add(" ");
                    info.Add(" ");
                    info.Add("  --------------------------------------");
                    info.Add("  -----  Inventory Equiped -----");
                    info.Add("  --------------------------------------");
                    ////////////// Inventaire /////////////
                    info.Add("  ----- Money:");
                    info.Add(Money.GetShortString(target.GetCurrentMoney()));
                    info.Add(" ");

                    info.Add("  ----- Wearing:");
                    foreach (InventoryItem item in target.Inventory.EquippedItems)
                    {
                        info.Add(" [" + GlobalConstants.SlotToName(item.Item_Type) + "] " + item.Name);
                    }
                    info.Add(" ");
                }

                #endregion Player

                #region StaticItem

                /********************* OBJECT ************************/
                if (client.Player.TargetObject is GameStaticItem)
                {
                    var target = client.Player.TargetObject as GameStaticItem;

                    info.Add("  ------- OBJECT ------\n");
                    info.Add(" Name: " + name);
                    info.Add(" Model: " + target.Model);
                    info.Add(" Emblem: " + target.Emblem);
                    info.Add(" Realm: " + target.Realm);
                    if (target.Owners.LongLength > 0)
                    {
                        info.Add(" ");
                        info.Add(" Owner Name: " + target.Owners[0].Name);
                    }
                    info.Add(" ");
                    info.Add(" OID: " + target.ObjectID);
                    info.Add(" Type: " + target.GetType());

                    WorldInventoryItem invItem = target as WorldInventoryItem;
                    if (invItem != null)
                    {
                        info.Add(" Count: " + invItem.Item.Count);
                    }

                    info.Add(" ");
                    info.Add(" Location: " + target.Position.ToString("F0"));
                }

                #endregion StaticItem

                #region Door

                /********************* DOOR ************************/
                if (client.Player.TargetObject is GameDoor)
                {
                    var target = client.Player.TargetObject as GameDoor;

                    string Realmname = "";
                    string statut    = "";

                    name = target.Name;

                    if (target.Realm == eRealm.None)
                    {
                        Realmname = "None";
                    }

                    if (target.Realm == eRealm.Albion)
                    {
                        Realmname = "Albion";
                    }

                    if (target.Realm == eRealm.Midgard)
                    {
                        Realmname = "Midgard";
                    }

                    if (target.Realm == eRealm.Hibernia)
                    {
                        Realmname = "Hibernia";
                    }

                    if (target.Realm == eRealm.Door)
                    {
                        Realmname = "All";
                    }

                    if (target.Locked == 1)
                    {
                        statut = " Locked";
                    }

                    if (target.Locked == 0)
                    {
                        statut = " Unlocked";
                    }

                    info.Add("  ------- DOOR ------\n");
                    info.Add(" ");
                    info.Add(" + Name : " + target.Name);
                    info.Add(" + ID : " + target.DoorID);
                    info.Add(" + Realm : " + (int)target.Realm + " : " + Realmname);
                    info.Add(" + Level : " + target.Level);
                    info.Add(" + Guild : " + target.GuildName);
                    info.Add(" + Health : " + target.Health + " / " + target.MaxHealth);
                    info.Add(" + Statut : " + statut);
                    info.Add(" + Type : " + DoorRequestHandler.m_handlerDoorID / 100000000);
                    info.Add(" ");
                    info.Add(" + Position : " + target.Position.ToString("F0"));
                    info.Add(" + Heading : " + target.Heading);
                }

                #endregion Door

                #region Keep

                /********************* KEEP ************************/
                if (client.Player.TargetObject is GameKeepComponent)
                {
                    var target = client.Player.TargetObject as GameKeepComponent;

                    name = target.Name;

                    string realm = " other realm";
                    if ((byte)target.Realm == 0)
                    {
                        realm = " Monster";
                    }
                    if ((byte)target.Realm == 1)
                    {
                        realm = " Albion";
                    }
                    if ((byte)target.Realm == 2)
                    {
                        realm = " Midgard";
                    }
                    if ((byte)target.Realm == 3)
                    {
                        realm = " Hibernia";
                    }

                    info.Add("  ------- KEEP ------\n");
                    info.Add(" + Name : " + target.Name);
                    info.Add(" + KeepID : " + target.Keep.KeepID);
                    info.Add(" + Level : " + target.Level);
                    info.Add(" + BaseLevel : " + target.Keep.BaseLevel);
                    info.Add(" + Realm : " + realm);
                    info.Add(" ");
                    info.Add(" + Model : " + target.Model);
                    info.Add(" + Skin : " + target.Skin);
                    info.Add(" + Height : " + target.Height);
                    info.Add(" + ID : " + target.ID);
                    info.Add(" ");
                    info.Add(" + Health : " + target.Health);
                    info.Add(" + IsRaized : " + target.IsRaized);
                    info.Add(" + Status : " + target.Status);
                    info.Add(" ");
                    info.Add(" + Climbing : " + target.Climbing);
                    info.Add(" ");
                    info.Add(" + ComponentX : " + target.ComponentX);
                    info.Add(" + ComponentY : " + target.ComponentY);
                    info.Add(" + ComponentHeading : " + target.ComponentHeading);
                    info.Add(" ");
                    info.Add(" + HookPoints : " + target.HookPoints.Count);
                    info.Add(" + Positions : " + target.Positions.Count);
                    info.Add(" ");
                    info.Add(" + RealmPointsValue : " + target.RealmPointsValue);
                    info.Add(" + ExperienceValue : " + target.ExperienceValue);
                    info.Add(" + AttackRange : " + target.AttackRange);
                    info.Add(" ");
                    if (GameServer.KeepManager.GetFrontierKeeps().Contains(target.Keep))
                    {
                        info.Add(" + Keep Manager : " + GameServer.KeepManager.GetType().FullName);
                        info.Add(" + Frontiers");
                    }
                    else if (GameServer.KeepManager.GetBattleground(target.CurrentRegionID) != null)
                    {
                        info.Add(" + Keep Manager : " + GameServer.KeepManager.GetType().FullName);
                        Battleground bg = GameServer.KeepManager.GetBattleground(client.Player.CurrentRegionID);
                        info.Add(" + Battleground (" + bg.MinLevel + " to " + bg.MaxLevel + ", max RL: " + bg.MaxRealmLevel + ")");
                    }
                    else
                    {
                        info.Add(" + Keep Manager :  Not Managed");
                    }
                }

                #endregion Keep

                client.Out.SendCustomTextWindow("[ " + name + " ]", info);
                return;
            }

            if (client.Player.TargetObject == null)
            {
                /*********************** HOUSE *************************/
                if (client.Player.InHouse)
                {
                    #region House

                    House house = client.Player.CurrentHouse as House;

                    name = house.Name;

                    int      level = house.Model - ((house.Model - 1) / 4) * 4;
                    TimeSpan due   = (house.LastPaid.AddDays(ServerProperties.Properties.RENT_DUE_DAYS).AddHours(1) - DateTime.Now);

                    info.Add("  ------- HOUSE ------\n");
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.Owner", name));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.Lotnum", house.HouseNumber));
                    info.Add("Unique ID: " + house.UniqueID);
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.Level", level));
                    info.Add(" ");
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.Porch"));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.PorchEnabled", (house.Porch ? " Present" : " Not Present")));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.PorchRoofColor", Color(house.PorchRoofColor)));
                    info.Add(" ");
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.ExteriorMaterials"));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.RoofMaterial", MaterialWall(house.RoofMaterial)));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.WallMaterial", MaterialWall(house.WallMaterial)));

                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.DoorMaterial", MaterialDoor(house.DoorMaterial)));

                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.TrussMaterial", MaterialTruss(house.TrussMaterial)));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.PorchMaterial", MaterialTruss(house.PorchMaterial)));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.WindowMaterial", MaterialTruss(house.WindowMaterial)));

                    info.Add(" ");
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.ExteriorUpgrades"));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.OutdoorGuildBanner", ((house.OutdoorGuildBanner) ? " Present" : " Not Present")));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.OutdoorGuildShield", ((house.OutdoorGuildShield) ? " Present" : " Not Present")));
                    info.Add(" ");
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.InteriorUpgrades"));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.IndoorGuildBanner", ((house.IndoorGuildBanner) ? " Present" : " Not Present")));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.IndoorGuildShield", ((house.IndoorGuildShield) ? " Present" : " Not Present")));
                    info.Add(" ");
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.InteriorCarpets"));
                    if (house.Rug1Color != 0)
                    {
                        info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.Rug1Color", Color(house.Rug1Color)));
                    }
                    if (house.Rug2Color != 0)
                    {
                        info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.Rug2Color", Color(house.Rug2Color)));
                    }
                    if (house.Rug3Color != 0)
                    {
                        info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.Rug3Color", Color(house.Rug3Color)));
                    }
                    if (house.Rug4Color != 0)
                    {
                        info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.Rug4Color", Color(house.Rug4Color)));
                    }
                    info.Add(" ");
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.Lockbox", Money.GetString(house.KeptMoney)));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.RentalPrice", Money.GetString(HouseMgr.GetRentByModel(house.Model))));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.MaxLockbox", Money.GetString(HouseMgr.GetRentByModel(house.Model) * ServerProperties.Properties.RENT_LOCKBOX_PAYMENTS)));
                    info.Add(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.RentDueIn", due.Days, due.Hours));

                    #endregion House

                    client.Out.SendCustomTextWindow(LanguageMgr.GetTranslation(client.Account.Language, "House.SendHouseInfo.HouseOwner", name), info);
                }
                else                 // No target and not in a house
                {
                    string realm = " other realm";
                    if (client.Player.CurrentZone.Realm == eRealm.Albion)
                    {
                        realm = " Albion";
                    }
                    if (client.Player.CurrentZone.Realm == eRealm.Midgard)
                    {
                        realm = " Midgard";
                    }
                    if (client.Player.CurrentZone.Realm == eRealm.Hibernia)
                    {
                        realm = " Hibernia";
                    }

                    info.Add(" Game Time: \t" + hour.ToString() + ":" + minute.ToString());
                    info.Add(" ");
                    info.Add(" Server Rules: " + GameServer.ServerRules.GetType().FullName);

                    if (GameServer.KeepManager.FrontierRegionsList.Contains(client.Player.CurrentRegionID))
                    {
                        info.Add(" Keep Manager: " + GameServer.KeepManager.GetType().FullName);
                        info.Add(" Frontiers");
                    }
                    else if (GameServer.KeepManager.GetBattleground(client.Player.CurrentRegionID) != null)
                    {
                        info.Add(" Keep Manager: " + GameServer.KeepManager.GetType().FullName);
                        Battleground bg = GameServer.KeepManager.GetBattleground(client.Player.CurrentRegionID);
                        info.Add(" Battleground (" + bg.MinLevel + " to " + bg.MaxLevel + ", max RL: " + bg.MaxRealmLevel + ")");
                    }
                    else
                    {
                        info.Add(" Keep Manager :  None for this region");
                    }

                    info.Add(" ");
                    info.Add(" Server players: " + WorldMgr.GetAllPlayingClientsCount());
                    info.Add(" ");
                    info.Add(" Region Players:");
                    info.Add(" All players: " + WorldMgr.GetClientsOfRegionCount(client.Player.CurrentRegion.ID));
                    info.Add(" ");
                    info.Add(" Alb players: " + WorldMgr.GetClientsOfRegionCount(client.Player.CurrentRegion.ID, eRealm.Albion));
                    info.Add(" Hib players: " + WorldMgr.GetClientsOfRegionCount(client.Player.CurrentRegion.ID, eRealm.Hibernia));
                    info.Add(" Mid players: " + WorldMgr.GetClientsOfRegionCount(client.Player.CurrentRegion.ID, eRealm.Midgard));

                    info.Add(" ");
                    info.Add(" Total objects in region: " + client.Player.CurrentRegion.TotalNumberOfObjects);

                    info.Add(" ");
                    info.Add(" NPC in zone:");
                    info.Add(" Alb : " + client.Player.CurrentZone.GetNPCsOfZone(eRealm.Albion).Count);
                    info.Add(" Hib : " + client.Player.CurrentZone.GetNPCsOfZone(eRealm.Hibernia).Count);
                    info.Add(" Mid: " + client.Player.CurrentZone.GetNPCsOfZone(eRealm.Midgard).Count);
                    info.Add(" None : " + client.Player.CurrentZone.GetNPCsOfZone(eRealm.None).Count);
                    info.Add(" ");
                    info.Add(" Total objects in zone: " + client.Player.CurrentZone.TotalNumberOfObjects);
                    info.Add(" ");
                    info.Add(" Zone Description: " + client.Player.CurrentZone.Description);
                    info.Add(" Zone Realm: " + realm);
                    info.Add(" Zone ID: " + client.Player.CurrentZone.ID);
                    info.Add(" Zone IsDungeon: " + client.Player.CurrentZone.IsDungeon);
                    info.Add(" Zone SkinID: " + client.Player.CurrentZone.ZoneSkinID);
                    info.Add(" Zone X: " + client.Player.CurrentZone.XOffset);
                    info.Add(" Zone Y: " + client.Player.CurrentZone.YOffset);
                    info.Add(" Zone Width: " + client.Player.CurrentZone.Width);
                    info.Add(" Zone Height: " + client.Player.CurrentZone.Height);
                    info.Add(" Zone DivingEnabled: " + client.Player.CurrentZone.IsDivingEnabled);
                    info.Add(" Zone Waterlevel: " + client.Player.CurrentZone.Waterlevel);
                    info.Add(" ");
                    info.Add(" Region Name: " + client.Player.CurrentRegion.Name);
                    info.Add(" Region Description: " + client.Player.CurrentRegion.Description);
                    info.Add(" Region Skin: " + client.Player.CurrentRegion.Skin);
                    info.Add(" Region ID: " + client.Player.CurrentRegion.ID);
                    info.Add(" Region Expansion: " + client.Player.CurrentRegion.Expansion);
                    info.Add(" Region IsRvR: " + client.Player.CurrentRegion.IsRvR);
                    info.Add(" Region IsFrontier: " + client.Player.CurrentRegion.IsFrontier);
                    info.Add(" Region IsDungeon: " + client.Player.CurrentRegion.IsDungeon);
                    info.Add(" Zone in Region: " + client.Player.CurrentRegion.Zones.Count);
                    info.Add(" Region WaterLevel: " + client.Player.CurrentRegion.WaterLevel);
                    info.Add(" Region HousingEnabled: " + client.Player.CurrentRegion.HousingEnabled);
                    info.Add(" Region IsDisabled: " + client.Player.CurrentRegion.IsDisabled);
                    info.Add(" ");
                    info.Add(" Region ServerIP: " + client.Player.CurrentRegion.ServerIP);
                    info.Add(" Region ServerPort: " + client.Player.CurrentRegion.ServerPort);

                    client.Out.SendCustomTextWindow("[ " + client.Player.CurrentRegion.Description + " ]", info);
                }
            }
        }