Пример #1
0
        static bool HandleGuildInfoCommand(StringArguments args, CommandHandler handler)
        {
            Guild  guild  = null;
            Player target = handler.GetSelectedPlayerOrSelf();

            if (!args.Empty() && args[0] != '\0')
            {
                if (char.IsDigit(args[0]))
                {
                    guild = Global.GuildMgr.GetGuildById(args.NextUInt64());
                }
                else
                {
                    guild = Global.GuildMgr.GetGuildByName(args.NextString());
                }
            }
            else if (target)
            {
                guild = target.GetGuild();
            }

            if (!guild)
            {
                return(false);
            }

            // Display Guild Information
            handler.SendSysMessage(CypherStrings.GuildInfoName, guild.GetName(), guild.GetId()); // Guild Id + Name

            string guildMasterName;

            if (Global.CharacterCacheStorage.GetCharacterNameByGuid(guild.GetLeaderGUID(), out guildMasterName))
            {
                handler.SendSysMessage(CypherStrings.GuildInfoGuildMaster, guildMasterName, guild.GetLeaderGUID().ToString()); // Guild Master
            }
            // Format creation date

            var createdDateTime = Time.UnixTimeToDateTime(guild.GetCreatedDate());

            handler.SendSysMessage(CypherStrings.GuildInfoCreationDate, createdDateTime.ToLongDateString()); // Creation Date
            handler.SendSysMessage(CypherStrings.GuildInfoMemberCount, guild.GetMembersCount());             // Number of Members
            handler.SendSysMessage(CypherStrings.GuildInfoBankGold, guild.GetBankMoney() / 100 / 100);       // Bank Gold (in gold coins)
            handler.SendSysMessage(CypherStrings.GuildInfoLevel, guild.GetLevel());                          // Level
            handler.SendSysMessage(CypherStrings.GuildInfoMotd, guild.GetMOTD());                            // Message of the Day
            handler.SendSysMessage(CypherStrings.GuildInfoExtraInfo, guild.GetInfo());                       // Extra Information
            return(true);
        }
Пример #2
0
            static bool HandleTitlesSetMaskCommand(StringArguments args, CommandHandler handler)
            {
                if (args.Empty())
                {
                    return(false);
                }

                ulong titles = args.NextUInt64();

                Player target = handler.getSelectedPlayer();

                if (!target)
                {
                    handler.SendSysMessage(CypherStrings.NoCharSelected);
                    return(false);
                }

                // check online security
                if (handler.HasLowerSecurity(target, ObjectGuid.Empty))
                {
                    return(false);
                }

                ulong titles2 = titles;

                foreach (CharTitlesRecord tEntry in CliDB.CharTitlesStorage.Values)
                {
                    titles2 &= ~(1ul << (int)tEntry.MaskID);
                }

                titles &= ~titles2;                                     // remove not existed titles

                target.SetUInt64Value(PlayerFields.KnownTitles, titles);
                handler.SendSysMessage(CypherStrings.Done);

                if (!target.HasTitle(target.GetUInt32Value(PlayerFields.ChosenTitle)))
                {
                    target.SetUInt32Value(PlayerFields.ChosenTitle, 0);
                    handler.SendSysMessage(CypherStrings.CurrentTitleReset, handler.GetNameLink(target));
                }

                return(true);
            }
Пример #3
0
        static bool HandleLfgGroupInfoCommand(StringArguments args, CommandHandler handler)
        {
            if (args.Empty())
            {
                return(false);
            }

            Player     playerTarget = null;
            ObjectGuid guidTarget;
            string     nameTarget;

            ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64());

            if (Global.CharacterCacheStorage.GetCharacterNameByGuid(parseGUID, out nameTarget))
            {
                playerTarget = Global.ObjAccessor.FindPlayer(parseGUID);
                guidTarget   = parseGUID;
            }
            else if (!handler.ExtractPlayerTarget(args, out playerTarget, out guidTarget, out nameTarget))
            {
                return(false);
            }

            Group groupTarget = null;

            if (playerTarget)
            {
                groupTarget = playerTarget.GetGroup();
            }
            else
            {
                PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GROUP_MEMBER);
                stmt.AddValue(0, guidTarget.GetCounter());
                SQLResult resultGroup = DB.Characters.Query(stmt);
                if (!resultGroup.IsEmpty())
                {
                    groupTarget = Global.GroupMgr.GetGroupByDbStoreId(resultGroup.Read <uint>(0));
                }
            }

            if (!groupTarget)
            {
                handler.SendSysMessage(CypherStrings.LfgNotInGroup, nameTarget);
                return(false);
            }

            ObjectGuid guid = groupTarget.GetGUID();

            handler.SendSysMessage(CypherStrings.LfgGroupInfo, groupTarget.IsLFGGroup(), Global.LFGMgr.GetState(guid), Global.LFGMgr.GetDungeon(guid));

            foreach (var slot in groupTarget.GetMemberSlots())
            {
                Player p = Global.ObjAccessor.FindPlayer(slot.guid);
                if (p)
                {
                    GetPlayerInfo(handler, p);
                }
                else
                {
                    handler.SendSysMessage("{0} is offline.", slot.name);
                }
            }

            return(true);
        }
Пример #4
0
        static bool HandleListMailCommand(StringArguments args, CommandHandler handler)
        {
            if (args.Empty())
            {
                return(false);
            }

            Player     target;
            ObjectGuid targetGuid;
            string     targetName;

            ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64());

            if (Global.CharacterCacheStorage.GetCharacterNameByGuid(parseGUID, out targetName))
            {
                target     = Global.ObjAccessor.FindPlayer(parseGUID);
                targetGuid = parseGUID;
            }
            else if (!handler.ExtractPlayerTarget(args, out target, out targetGuid, out targetName))
            {
                return(false);
            }

            PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_MAIL_LIST_COUNT);

            stmt.AddValue(0, targetGuid.GetCounter());
            SQLResult result = DB.Characters.Query(stmt);

            if (!result.IsEmpty())
            {
                uint countMail = result.Read <uint>(0);

                string nameLink = handler.PlayerLink(targetName);
                handler.SendSysMessage(CypherStrings.ListMailHeader, countMail, nameLink, targetGuid.ToString());
                handler.SendSysMessage(CypherStrings.AccountListBar);

                stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_MAIL_LIST_INFO);
                stmt.AddValue(0, targetGuid.GetCounter());
                SQLResult result1 = DB.Characters.Query(stmt);

                if (!result1.IsEmpty())
                {
                    do
                    {
                        uint   messageId   = result1.Read <uint>(0);
                        ulong  senderId    = result1.Read <ulong>(1);
                        string sender      = result1.Read <string>(2);
                        ulong  receiverId  = result1.Read <ulong>(3);
                        string receiver    = result1.Read <string>(4);
                        string subject     = result1.Read <string>(5);
                        long   deliverTime = result1.Read <uint>(6);
                        long   expireTime  = result1.Read <uint>(7);
                        ulong  money       = result1.Read <ulong>(8);
                        byte   hasItem     = result1.Read <byte>(9);
                        uint   gold        = (uint)(money / MoneyConstants.Gold);
                        uint   silv        = (uint)(money % MoneyConstants.Gold) / MoneyConstants.Silver;
                        uint   copp        = (uint)(money % MoneyConstants.Gold) % MoneyConstants.Silver;
                        string receiverStr = handler.PlayerLink(receiver);
                        string senderStr   = handler.PlayerLink(sender);
                        handler.SendSysMessage(CypherStrings.ListMailInfo1, messageId, subject, gold, silv, copp);
                        handler.SendSysMessage(CypherStrings.ListMailInfo2, senderStr, senderId, receiverStr, receiverId);
                        handler.SendSysMessage(CypherStrings.ListMailInfo3, Time.UnixTimeToDateTime(deliverTime).ToLongDateString(), Time.UnixTimeToDateTime(expireTime).ToLongDateString());

                        if (hasItem == 1)
                        {
                            SQLResult result2 = DB.Characters.Query("SELECT item_guid FROM mail_items WHERE mail_id = '{0}'", messageId);
                            if (!result2.IsEmpty())
                            {
                                do
                                {
                                    uint item_guid = result2.Read <uint>(0);
                                    stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_MAIL_LIST_ITEMS);
                                    stmt.AddValue(0, item_guid);
                                    SQLResult result3 = DB.Characters.Query(stmt);
                                    if (!result3.IsEmpty())
                                    {
                                        do
                                        {
                                            uint item_entry = result3.Read <uint>(0);
                                            uint item_count = result3.Read <uint>(1);

                                            ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(item_entry);
                                            if (itemTemplate == null)
                                            {
                                                continue;
                                            }

                                            if (handler.GetSession() != null)
                                            {
                                                uint   color   = ItemConst.ItemQualityColors[(int)itemTemplate.GetQuality()];
                                                string itemStr = $"|c{color}|Hitem:{item_entry}:0:0:0:0:0:0:0:{handler.GetSession().GetPlayer().GetLevel()}:0:0:0:0:0|h[{itemTemplate.GetName(handler.GetSessionDbcLocale())}]|h|r";
                                                handler.SendSysMessage(CypherStrings.ListMailInfoItem, itemStr, item_entry, item_guid, item_count);
                                            }
                                            else
                                            {
                                                handler.SendSysMessage(CypherStrings.ListMailInfoItem, itemTemplate.GetName(handler.GetSessionDbcLocale()), item_entry, item_guid, item_count);
                                            }
                                        }while (result3.NextRow());
                                    }
                                }while (result2.NextRow());
                            }
                        }
                        handler.SendSysMessage(CypherStrings.AccountListBar);
                    }while (result1.NextRow());
                }
                else
                {
                    handler.SendSysMessage(CypherStrings.ListMailNotFound);
                }
                return(true);
            }
            else
            {
                handler.SendSysMessage(CypherStrings.ListMailNotFound);
            }
            return(true);
        }
Пример #5
0
        static bool HandleGroupListCommand(StringArguments args, CommandHandler handler)
        {
            // Get ALL the variables!
            Player     playerTarget;
            ObjectGuid guidTarget;
            string     nameTarget;
            string     zoneName    = "";
            string     onlineState = "";

            // Parse the guid to uint32...
            ObjectGuid parseGUID = ObjectGuid.Create(HighGuid.Player, args.NextUInt64());

            // ... and try to extract a player out of it.
            if (Global.CharacterCacheStorage.GetCharacterNameByGuid(parseGUID, out nameTarget))
            {
                playerTarget = Global.ObjAccessor.FindPlayer(parseGUID);
                guidTarget   = parseGUID;
            }
            // If not, we return false and end right away.
            else if (!handler.extractPlayerTarget(args, out playerTarget, out guidTarget, out nameTarget))
            {
                return(false);
            }

            // Next, we need a group. So we define a group variable.
            Group groupTarget = null;

            // We try to extract a group from an online player.
            if (playerTarget)
            {
                groupTarget = playerTarget.GetGroup();
            }

            // If not, we extract it from the SQL.
            if (!groupTarget)
            {
                PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_GROUP_MEMBER);
                stmt.AddValue(0, guidTarget.GetCounter());
                SQLResult resultGroup = DB.Characters.Query(stmt);
                if (!resultGroup.IsEmpty())
                {
                    groupTarget = Global.GroupMgr.GetGroupByDbStoreId(resultGroup.Read <uint>(0));
                }
            }

            // If both fails, players simply has no party. Return false.
            if (!groupTarget)
            {
                handler.SendSysMessage(CypherStrings.GroupNotInGroup, nameTarget);
                return(false);
            }

            // We get the group members after successfully detecting a group.
            var members = groupTarget.GetMemberSlots();

            // To avoid a cluster f**k, namely trying multiple queries to simply get a group member count...
            handler.SendSysMessage(CypherStrings.GroupType, (groupTarget.isRaidGroup() ? "raid" : "party"), members.Count);
            // ... we simply move the group type and member count print after retrieving the slots and simply output it's size.

            // While rather dirty codestyle-wise, it saves space (if only a little). For each member, we look several informations up.
            foreach (var slot in members)
            {
                // Check for given flag and assign it to that iterator
                string flags = "";
                if (slot.flags.HasAnyFlag(GroupMemberFlags.Assistant))
                {
                    flags = "Assistant";
                }

                if (slot.flags.HasAnyFlag(GroupMemberFlags.MainTank))
                {
                    if (!string.IsNullOrEmpty(flags))
                    {
                        flags += ", ";
                    }
                    flags += "MainTank";
                }

                if (slot.flags.HasAnyFlag(GroupMemberFlags.MainAssist))
                {
                    if (!string.IsNullOrEmpty(flags))
                    {
                        flags += ", ";
                    }
                    flags += "MainAssist";
                }

                if (string.IsNullOrEmpty(flags))
                {
                    flags = "None";
                }

                // Check if iterator is online. If is...
                Player p      = Global.ObjAccessor.FindPlayer(slot.guid);
                string phases = "";
                if (p && p.IsInWorld)
                {
                    // ... than, it prints information like "is online", where he is, etc...
                    onlineState = "online";
                    phases      = PhasingHandler.FormatPhases(p.GetPhaseShift());

                    AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(p.GetAreaId());
                    if (area != null)
                    {
                        AreaTableRecord zone = CliDB.AreaTableStorage.LookupByKey(area.ParentAreaID);
                        if (zone != null)
                        {
                            zoneName = zone.AreaName[handler.GetSessionDbcLocale()];
                        }
                    }
                }
                else
                {
                    // ... else, everything is set to offline or neutral values.
                    zoneName    = "<ERROR>";
                    onlineState = "Offline";
                }

                // Now we can print those informations for every single member of each group!
                handler.SendSysMessage(CypherStrings.GroupPlayerNameGuid, slot.name, onlineState,
                                       zoneName, phases, slot.guid.ToString(), flags, LFGQueue.GetRolesString(slot.roles));
            }

            // And finish after every iterator is done.
            return(true);
        }