// 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)); }
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); }
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++; }
// Objeto private static void SpawnObjeto(PlayerEntity player, zoneObjeto objeto) { player.Session.SendPacket(UpdateObject.CreateGameObject(objeto)); player.KnownGameObjects.Add(objeto); }