示例#1
0
        public bnet.protocol.presence.Field QueryField(bnet.protocol.presence.FieldKey queryKey)
        {
            var field = bnet.protocol.presence.Field.CreateBuilder().SetKey(queryKey);

            switch ((FieldKeyHelper.Program)queryKey.Program)
            {
            case FieldKeyHelper.Program.D3:
                if (queryKey.Group == 1 && queryKey.Field == 1) // Account's selected toon.
                {
                    if (this.LoggedInClient != null)            // check if the account is online actually.
                    {
                        field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.LoggedInClient.CurrentToon.D3EntityID.ToByteString()).Build());
                    }
                }
                else
                {
                    Logger.Warn("Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field);
                }
                break;

            case FieldKeyHelper.Program.BNet:
                Logger.Warn("Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field);
                break;
            }


            return(field.HasValue ? field.Build() : null);
        }
示例#2
0
        public bnet.protocol.presence.Field QueryField(bnet.protocol.presence.FieldKey queryKey)
        {
            var field = bnet.protocol.presence.Field.CreateBuilder().SetKey(queryKey);

            switch ((FieldKeyHelper.Program)queryKey.Program)
            {
            case FieldKeyHelper.Program.D3:
                if (queryKey.Group == 1 && queryKey.Field == 1) // Account's last selected toon.
                {
                    if (this.IsOnline)                          // check if the account is online actually.
                    {
                        field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.LastSelectedHeroField.Value.ToByteString()).Build());
                    }
                }
                else if (queryKey.Group == 1 && queryKey.Field == 2) // Account's last selected Game Account
                {
                    if (this.IsOnline)                               // check if the account is online actually.
                    {
                        field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.LastSelectedGameAccount.ToByteString()).Build());
                    }
                }
                else
                {
                    Logger.Warn("Account Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field);
                }
                break;

            case FieldKeyHelper.Program.BNet:
                if (queryKey.Group == 1 && queryKey.Field == 5)     // Account's battleTag
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue(this.BattleTag).Build());
                }
                else
                {
                    Logger.Warn("Account Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field);
                }
                break;
            }


            return(field.HasValue ? field.Build() : null);
        }
示例#3
0
文件: Toon.cs 项目: rdavydov/d3sharp
        public bnet.protocol.presence.Field QueryField(bnet.protocol.presence.FieldKey queryKey)
        {
            var field = bnet.protocol.presence.Field.CreateBuilder().SetKey(queryKey);

            switch ((FieldKeyHelper.Program)queryKey.Program)
            {
            case FieldKeyHelper.Program.D3:
                if (queryKey.Group == 2 && queryKey.Field == 1)     // Banner configuration
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.Owner.BannerConfiguration.ToByteString()).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 1)     // Hero's class (GbidClass)
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(this.ClassID).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 2)     // Hero's current level
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(this.Level).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 3)     // Hero's visible equipment
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.Equipment.ToByteString()).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 4)     // Hero's flags (gender and such)
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue((uint)(this.Flags | ToonFlags.BothUnknowns)).Build());
                }
                else if (queryKey.Group == 4 && queryKey.Field == 1)     // Channel ID if the client is online
                {
                    if (this.Owner.LoggedInBNetClient != null)
                    {
                        field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.Owner.LoggedInBNetClient.CurrentChannel.D3EntityId.ToByteString()).Build());
                    }
                }
                else if (queryKey.Group == 4 && queryKey.Field == 2)     // Current screen (all known values are just "in-menu"; also see ScreenStatuses sent in ChannelService.UpdateChannelState)
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(0).Build());
                }
                break;

            case FieldKeyHelper.Program.BNet:
                if (queryKey.Group == 3 && queryKey.Field == 2)     // Toon name
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue(this.Name).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 3)     // Whether the toon is online
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetBoolValue(true).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 5)     // Away status - 0 for online
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(0).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 9)     // Program - always D3
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetFourccValue("D3").Build());
                }
                break;
            }

            return(field.HasValue ? field.Build() : null);
        }
示例#4
0
        public bnet.protocol.presence.Field QueryField(bnet.protocol.presence.FieldKey queryKey)
        {
            var field = bnet.protocol.presence.Field.CreateBuilder().SetKey(queryKey);

            switch ((FieldKeyHelper.Program)queryKey.Program)
            {
            case FieldKeyHelper.Program.D3:
                if (queryKey.Group == 2 && queryKey.Field == 1)     // Banner configuration
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.BannerConfigurationField.Value.ToByteString()).Build());
                }
                else if (queryKey.Group == 2 && queryKey.Field == 2)     //Hero's EntityId
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.lastPlayedHeroId.ToByteString()).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 1)     // Hero's class (GbidClass)
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(this.CurrentToon.ClassID).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 2)     // Hero's current level
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(this.CurrentToon.Level).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 3)     // Hero's visible equipment
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.CurrentToon.Equipment.ToByteString()).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 4)     // Hero's flags (gender and such)
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue((uint)(this.CurrentToon.Flags | ToonFlags.AllUnknowns)).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 5)     // Toon name
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue(this.CurrentToon.Name).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 6)
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(0).Build());
                }
                else if (queryKey.Group == 3 && queryKey.Field == 7)
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(0).Build());
                }
                else if (queryKey.Group == 4 && queryKey.Field == 1)     // Channel ID if the client is online
                {
                    if (this.LoggedInClient != null && this.LoggedInClient.CurrentChannel != null)
                    {
                        field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetMessageValue(this.LoggedInClient.CurrentChannel.D3EntityId.ToByteString()).Build());
                    }
                    else
                    {
                        field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().Build());
                    }
                }
                else if (queryKey.Group == 4 && queryKey.Field == 2)     // Current screen (all known values are just "in-menu"; also see ScreenStatuses sent in ChannelService.UpdateChannelState)
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue(this.ScreenStatus.Screen).Build());
                }
                else if (queryKey.Group == 4 && queryKey.Field == 4)     //Unknown Bool
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetBoolValue(false).Build());
                }
                else
                {
                    Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field);
                }
                break;

            case FieldKeyHelper.Program.BNet:
                if (queryKey.Group == 2 && queryKey.Field == 1)     //GameAccount Logged in
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetBoolValue(this.GameAccountStatusField.Value).Build());
                }
                else if (queryKey.Group == 2 && queryKey.Field == 3)     // Away status
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetIntValue((long)this.AwayStatus).Build());
                }
                else if (queryKey.Group == 2 && queryKey.Field == 4)     // Program - always D3
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetFourccValue("D3").Build());
                }
                else if (queryKey.Group == 2 && queryKey.Field == 6)     // BattleTag
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetStringValue(this.Owner.BattleTag).Build());
                }
                else if (queryKey.Group == 2 && queryKey.Field == 8)     // Account.EntityId
                {
                    field.SetValue(bnet.protocol.attribute.Variant.CreateBuilder().SetEntityidValue(this.Owner.BnetEntityId).Build());
                }
                else
                {
                    Logger.Warn("GameAccount Unknown query-key: {0}, {1}, {2}", queryKey.Program, queryKey.Group, queryKey.Field);
                }
                break;
            }

            return(field.HasValue ? field.Build() : null);
        }