示例#1
0
        public SmsgCharEnum(List <Characters> characters) : base(RealmCMD.SMSG_CHAR_ENUM)
        {
            Write((byte)characters.Count);

            foreach (Characters character in characters)
            {
                Write((ulong)character.Id);
                WriteCString(character.name);
                Write((byte)character.race);
                Write((byte)character.classe);
                Write((byte)character.gender);

                Write(character.char_skin);
                Write(character.char_face);
                Write(character.char_hairStyle);
                Write(character.char_hairColor);
                Write(character.char_facialHair);

                Write(character.level);   // int8
                Write(character.MapZone); // int32
                Write(character.MapId);   // int32

                Write(character.MapX);
                Write(character.MapY);
                Write(character.MapZ);

                Write(0); // Guild ID
                // if DEAD or any Restriction
                Write((int)CharacterFlagState.CharacterFlagNone);
                // RestState
                Write((byte)0);

                // SELECT modelid, level, entry FROM character_pet WHERE owner =
                Write(0); // PetModel
                Write(0); // PetLevel
                Write(0); // PetFamily = SELECT family FROM creature_template WHERE entry

                // DONE: Get items
                var inventory = MainForm.Database.GetInventory(character);

                for (int slot = 0; slot < 20; slot++)
                {
                    CharactersInventorys checkItem = inventory.FirstOrDefault(b => b.slot == slot);

                    if (checkItem != null)
                    {
                        var item = XmlReader.GetItem((int)checkItem.item);

                        Write(item.displayId);
                        Write((byte)item.inventoryType);
                    }
                    else
                    {
                        Write(0);
                        Write((byte)0);
                    }
                }
            }
        }
示例#2
0
        public ItemEntity(CharactersInventorys inventory, Characters sessionCharacter)
            : base(new ObjectGuid((uint)inventory.item, TypeId.TypeidItem, HighGuid.HighguidItem))
        {
            SetUpdateField((int)ObjectFields.OBJECT_FIELD_TYPE, 3);  // 3 na BAG / 2 naosei / 7 e uma bag
            SetUpdateField((int)ObjectFields.OBJECT_FIELD_ENTRY, (byte)inventory.item);
            SetUpdateField((int)ObjectFields.OBJECT_FIELD_SCALE_X, 1.0f);

            //
            SetUpdateField((int)ItemFields.ITEM_FIELD_OWNER, (ulong)sessionCharacter.Id);     // ID do char
            SetUpdateField((int)ItemFields.ITEM_FIELD_CONTAINED, (ulong)sessionCharacter.Id); // ID do char

            //
            SetUpdateField((int)ItemFields.ITEM_FIELD_STACK_COUNT, inventory.stack);

            Console.WriteLine($@"ItemEntity: [ID {inventory.Id}] / [{inventory.item}]");
        }
示例#3
0
        internal static UpdateObject CreateItem(CharactersInventorys inventory, Characters sessionCharacter)
        {
            BinaryWriter writer = new BinaryWriter(new MemoryStream());

            writer.Write((byte)ObjectUpdateType.UPDATETYPE_CREATE_OBJECT);

            ItemEntity entity = new ItemEntity(inventory, sessionCharacter)
            {
                ObjectGuid = new ObjectGuid(inventory.item),
                Guid       = inventory.item
            };

            writer.WritePackedUInt64(entity.ObjectGuid.RawGuid);
            writer.Write((byte)TypeId.TypeidItem);

            ObjectUpdateFlag updateFlags = ObjectUpdateFlag.UpdateflagTransport |
                                           ObjectUpdateFlag.UpdateflagAll |
                                           ObjectUpdateFlag.UpdateflagHasPosition;

            writer.Write((byte)updateFlags);

            writer.Write(0f);
            writer.Write(0f);
            writer.Write(0f);

            writer.Write((float)0);

            writer.Write((uint)0x1);
            writer.Write((uint)0);

            entity.WriteUpdateFields(writer);

            return(new UpdateObject(new List <byte[]> {
                (writer.BaseStream as MemoryStream)?.ToArray()
            }));
        }