Beispiel #1
0
        // Create Game Object on World
        internal static UpdateObject CreateGameObject(zoneObjeto gameObject)
        {
            BinaryWriter writer = new BinaryWriter(new MemoryStream());

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

            GameObjectEntity entity = new GameObjectEntity(gameObject);

            writer.WritePackedUInt64(entity.ObjectGuid.RawGuid);

            writer.Write((byte)TypeId.TypeidGameobject);

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

            writer.Write((byte)updateFlags);

            writer.Write(gameObject.map.mapX);
            writer.Write(gameObject.map.mapY);
            writer.Write(gameObject.map.mapZ);

            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()
            }, 1));
        }
Beispiel #2
0
        public UnitEntity(zoneObjeto zoneObjeto)
            : base(new ObjectGuid((uint)(zoneObjeto.id + Ababa), TypeId.TypeidUnit, HighGuid.HighguidUnit))
        {
            new AiBrain(this);

            Console.WriteLine($@" => {ObjectGuid.RawGuid}");

            //Definindo interno
            MapX = zoneObjeto.map.mapX;
            MapY = zoneObjeto.map.mapY;
            MapZ = zoneObjeto.map.mapZ;
            MapO = zoneObjeto.map.mapO;

            Type  = 0x9;
            Scale = 0.42f;
            Entry = 30; // 30=Forest Spider

            //
            SetUpdateField((int)UnitFields.UNIT_FIELD_DISPLAYID, 382);
            SetUpdateField((int)UnitFields.UNIT_FIELD_NATIVEDISPLAYID, 383);

            SetUpdateField((int)UnitFields.UNIT_NPC_FLAGS, 0);
            SetUpdateField((int)UnitFields.UNIT_DYNAMIC_FLAGS, 0);
            SetUpdateField((int)UnitFields.UNIT_FIELD_FLAGS, 0);

            SetUpdateField((int)UnitFields.UNIT_FIELD_FACTIONTEMPLATE, 25);

            SetUpdateField((int)UnitFields.UNIT_FIELD_HEALTH, 60);
            SetUpdateField((int)UnitFields.UNIT_FIELD_MAXHEALTH, 125);
            SetUpdateField((int)UnitFields.UNIT_FIELD_LEVEL, 1);
        }
Beispiel #3
0
        public GameObjectEntity(zoneObjeto zoneObjeto)
            : base(new ObjectGuid((uint)(zoneObjeto.id + Ababa), TypeId.TypeidGameobject, HighGuid.HighguidGameobject))
        {
            GameObjects = zoneObjeto;

            SetUpdateField((int)ObjectFields.OBJECT_FIELD_TYPE, 33);                            // 33 <= aqui existe algum id que faz cachear no client
            SetUpdateField((int)ObjectFields.OBJECT_FIELD_ENTRY, (byte)zoneObjeto.id);          // 31
            SetUpdateField((int)ObjectFields.OBJECT_FIELD_SCALE_X, 1f);                         // scala do objeto

            SetUpdateField((int)GameObjectFields.GAMEOBJECT_DISPLAYID, (uint)zoneObjeto.model); // Modelo display do Objeto
            SetUpdateField((int)GameObjectFields.GAMEOBJECT_TYPE_ID, (uint)zoneObjeto.type);    // tipo do objeto se e clicavel correio ou mouse hoiver
            SetUpdateField((int)GameObjectFields.GAMEOBJECT_FLAGS, (int)zoneObjeto.flags);
            SetUpdateField((int)GameObjectFields.GAMEOBJECT_FACTION, Faction);                  // realmente precisa disso aqui

            // Se o objeto tem alum dono ou alguem que criou tem que setar isso aqui em baixo
            SetUpdateField((int)GameObjectFields.GAMEOBJECT_POS_X, zoneObjeto.map.mapX);
            SetUpdateField((int)GameObjectFields.GAMEOBJECT_POS_Y, zoneObjeto.map.mapY);
            SetUpdateField((int)GameObjectFields.GAMEOBJECT_POS_Z, zoneObjeto.map.mapZ);
            SetUpdateField((int)GameObjectFields.GAMEOBJECT_FACING, zoneObjeto.map.mapO);

            // If a game object has bit 4 set in the flag it needs to be activated (used for quests)
            // DynFlags = Activate a game object (Chest = 9, Goober = 1)
            int DynFlags = 0;

            if (DynFlags != 0)
            {
                SetUpdateField((int)GameObjectFields.GAMEOBJECT_DYN_FLAGS, DynFlags);
            }

            // Estado do Objeto @GameObjectLootState
            SetUpdateField((int)GameObjectFields.GAMEOBJECT_STATE, State);

            // Level do Objeto ??? precisa disso
            if (Level > 0)
            {
                SetUpdateField((int)GameObjectFields.GAMEOBJECT_LEVEL, Level);
            }

            //Update.SetUpdateFlag(GameObjectFields.GAMEOBJECT_ROTATION, Rotations(0))
            //Update.SetUpdateFlag(GameObjectFields.GAMEOBJECT_ROTATION + 1, Rotations(1))
            //Update.SetUpdateFlag(GameObjectFields.GAMEOBJECT_ROTATION + 2, Rotations(2))
            //Update.SetUpdateFlag(GameObjectFields.GAMEOBJECT_ROTATION + 3, Rotations(3))

            Console.WriteLine($@"=> Adicionado Objeto [{zoneObjeto.name}] => [{(GameObjectType) zoneObjeto.type}] => {Ababa}");
            Ababa++;
        }
Beispiel #4
0
 // Objeto
 private static void SpawnObjeto(PlayerEntity player, zoneObjeto objeto)
 {
     player.Session.SendPacket(UpdateObject.CreateGameObject(objeto));
     player.KnownGameObjects.Add(objeto);
 }