示例#1
0
        public byte GetGemCountWithID(uint GemID)
        {
            byte count = 0;

            for (var enchant_slot = EnchantmentSlot.SOCK_ENCHANTMENT_SLOT; enchant_slot < EnchantmentSlot.SOCK_ENCHANTMENT_SLOT + ItemConst.MaxSockets; enchant_slot++)
            {
                uint enchant_id = GetEnchantmentId(enchant_slot);
                if (enchant_id == 0)
                {
                    continue;
                }

                SpellItemEnchantmentEntry enchantEntry = DBCStorage.SpellItemEnchantmentStorage.LookupByKey(enchant_id);
                if (enchantEntry == null)
                {
                    continue;
                }

                if (GemID == enchantEntry.GemID)
                {
                    ++count;
                }
            }
            return(count);
        }
示例#2
0
        public byte GetGemCountWithLimitCategory(uint limitCategory)
        {
            byte count = 0;

            for (var enchant_slot = EnchantmentSlot.SOCK_ENCHANTMENT_SLOT; enchant_slot < EnchantmentSlot.SOCK_ENCHANTMENT_SLOT + ItemConst.MaxSockets; enchant_slot++)
            {
                uint enchant_id = GetEnchantmentId(enchant_slot);
                if (enchant_id == 0)
                {
                    continue;
                }

                SpellItemEnchantmentEntry enchantEntry = DBCStorage.SpellItemEnchantmentStorage.LookupByKey(enchant_id);
                if (enchantEntry == null)
                {
                    continue;
                }

                ItemTemplate gemProto = Cypher.ObjMgr.GetItemTemplate(enchantEntry.GemID);
                if (gemProto == null)
                {
                    continue;
                }

                if (gemProto.ItemLimitCategory == limitCategory)
                {
                    count++;
                }
            }
            return(count);
        }
示例#3
0
        public static bool BuildEnumData(SQLResult result, ref PacketWriter data)
        {
            for (int c = 0; c < result.Count; c++)
            {
                ObjectGuid guid      = new ObjectGuid(result.Read <ulong>(c, 0));
                ObjectGuid guildGuid = new ObjectGuid();//result.Read<uint>(c, 13));
                string     name      = result.Read <string>(c, 1);

                data.WriteBit(guid[7]);
                data.WriteBit(guid[0]);
                data.WriteBit(guid[4]);
                data.WriteBit(guildGuid[2]);
                data.WriteBit(guid[5]);
                data.WriteBit(guid[3]);
                data.WriteBits(name.Length, 7);
                data.WriteBit(guildGuid[0]);
                data.WriteBit(guildGuid[5]);
                data.WriteBit(guildGuid[3]);
                data.WriteBit(0);
                data.WriteBit(guildGuid[6]);
                data.WriteBit(guildGuid[7]);
                data.WriteBit(guid[1]);
                data.WriteBit(guildGuid[4]);
                data.WriteBit(guildGuid[1]);
                data.WriteBit(guid[2]);
                data.WriteBit(guid[6]);
            }
            data.WriteBit(1);
            data.BitFlush();

            for (int c = 0; c < result.Count; c++)
            {
                ObjectGuid   guid         = new ObjectGuid(result.Read <ulong>(c, 0));
                string       name         = result.Read <string>(c, 1);
                byte         plrRace      = result.Read <byte>(c, 2);
                Class        plrClass     = (Class)result.Read <byte>(c, 3);
                byte         gender       = result.Read <byte>(c, 4);
                byte         skin         = (byte)(result.Read <uint>(c, 5) & 0xFF);
                byte         face         = (byte)((result.Read <uint>(c, 5) >> 8) & 0xFF);
                byte         hairStyle    = (byte)((result.Read <uint>(c, 5) >> 16) & 0xFF);
                byte         hairColor    = (byte)((result.Read <uint>(c, 5) >> 24) & 0xFF);
                byte         facialHair   = (byte)(result.Read <uint>(c, 6) & 0xFF);
                byte         level        = result.Read <byte>(c, 7);
                uint         zone         = result.Read <uint>(c, 8);
                uint         mapId        = result.Read <uint>(c, 9);
                float        x            = result.Read <float>(c, 10);
                float        y            = result.Read <float>(c, 11);
                float        z            = result.Read <float>(c, 12);
                ObjectGuid   guildGuid    = new ObjectGuid();//result.Read<ulong>(c, 13));
                PlayerFlags  playerFlags  = (PlayerFlags)result.Read <uint>(c, 14);
                AtLoginFlags atLoginFlags = (AtLoginFlags)result.Read <uint>(c, 15);
                string[]     equipment    = result.Read <string>(c, 19).Split(' ');
                byte         slot         = result.Read <byte>(c, 21);

                CharacterFlags charFlags = 0;
                if (Convert.ToBoolean(playerFlags & PlayerFlags.HideHelm))
                {
                    charFlags |= CharacterFlags.HideHelm;
                }

                if (Convert.ToBoolean(playerFlags & PlayerFlags.HideCloak))
                {
                    charFlags |= CharacterFlags.HideCloak;
                }

                if (Convert.ToBoolean(playerFlags & PlayerFlags.Ghost))
                {
                    charFlags |= CharacterFlags.Ghost;
                }

                if (Convert.ToBoolean(atLoginFlags & AtLoginFlags.Rename))
                {
                    charFlags |= CharacterFlags.Rename;
                }

                //if (result.Read<uint>(c, 20) != 0)
                //charFlags |= CharacterFlags.LockedByBilling;

                //if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) && !fields[22].GetString().empty())
                //charFlags |= CHARACTER_FLAG_DECLINED;

                CharacterCustomizeFlags customizationFlag = 0;
                if (Convert.ToBoolean(atLoginFlags & AtLoginFlags.Customize))
                {
                    customizationFlag = CharacterCustomizeFlags.Customize;
                }
                else if (Convert.ToBoolean(atLoginFlags & AtLoginFlags.ChangeFaction))
                {
                    customizationFlag = CharacterCustomizeFlags.Faction;
                }
                else if (Convert.ToBoolean(atLoginFlags & AtLoginFlags.ChangeRace))
                {
                    customizationFlag = CharacterCustomizeFlags.Race;
                }

                uint petDisplayId = 0;
                uint petLevel     = 0;
                uint petFamily    = 0;
                // show pet at selection character in character list only for non-ghost character
                if (!Convert.ToBoolean(playerFlags & PlayerFlags.Ghost) && (plrClass == Class.Warlock || plrClass == Class.Hunter || plrClass == Class.Deathknight))
                {
                    //uint entry = result.Read<uint>(c, 16);
                    //var creatureInfo = ObjMgr.GetCreatureTemplate(entry);
                    //if (creatureInfo != null)
                    {
                        //petDisplayId = result.Read<uint>(c, 17);
                        //petLevel = result.Read<uint>(c, 18);
                        //petFamily = creatureInfo.Family;
                    }
                }

                data.WriteUInt32(charFlags);
                data.WriteUInt32(petFamily);
                data.WriteFloat(z);
                data.WriteByteSeq(guid[7]);
                data.WriteByteSeq(guildGuid[6]);

                for (uint i = 0; i < InventorySlots.BagEnd; ++i)
                {
                    uint index = i * 2;
                    uint itemId;
                    uint.TryParse(equipment[index], out itemId);
                    var entry = ObjMgr.GetItemTemplate(itemId);
                    if (entry == null)
                    {
                        data.WriteInt32(0);
                        data.WriteInt8(0);
                        data.WriteInt32(0);
                        continue;
                    }

                    uint enchants;
                    SpellItemEnchantmentEntry enchant = null;
                    uint.TryParse(equipment[index + 1], out enchants);
                    for (int enchantSlot = (int)EnchantmentSlot.PERM_ENCHANTMENT_SLOT; enchantSlot <= (int)EnchantmentSlot.TEMP_ENCHANTMENT_SLOT; enchantSlot++)
                    {
                        // values stored in 2 uint16
                        uint enchantId = 0x0000FFFF & (enchants >> enchantSlot * 16);
                        if (enchantId == 0)
                        {
                            continue;
                        }

                        enchant = DBCStorage.SpellItemEnchantmentStorage.LookupByKey(enchantId);
                        if (enchant != null)
                        {
                            break;
                        }
                    }
                    data.WriteInt32(0);//enchant != null ? enchant.aura_id : 0);
                    data.WriteInt8(entry.inventoryType);
                    data.WriteInt32(entry.DisplayInfoID);
                }

                data.WriteFloat(x);
                data.WriteUInt8(plrClass);
                data.WriteByteSeq(guid[5]);
                data.WriteFloat(y);
                data.WriteByteSeq(guildGuid[3]);
                data.WriteByteSeq(guid[6]);
                data.WriteUInt32(petLevel);
                data.WriteUInt32(petDisplayId);
                data.WriteByteSeq(guid[2]);
                data.WriteByteSeq(guid[1]);
                data.WriteUInt8(hairColor);
                data.WriteUInt8(facialHair);
                data.WriteByteSeq(guildGuid[2]);
                data.WriteUInt32(zone);
                data.WriteUInt8(slot);                                    // List order
                data.WriteByteSeq(guid[0]);
                data.WriteByteSeq(guildGuid[1]);
                data.WriteUInt8(skin);
                data.WriteByteSeq(guid[4]);
                data.WriteByteSeq(guildGuid[5]);
                data.WriteString(name);
                data.WriteByteSeq(guildGuid[0]);
                data.WriteUInt8(level);
                data.WriteByteSeq(guid[3]);
                data.WriteByteSeq(guildGuid[7]);
                data.WriteUInt8(hairStyle);
                data.WriteByteSeq(guildGuid[4]);
                data.WriteUInt8(gender);
                data.WriteUInt32(mapId);
                data.WriteUInt32((uint)customizationFlag);
                data.WriteUInt8(plrRace);
                data.WriteUInt8(face);
            }
            return(true);
        }