public static void HandleTalkToGossip(ref PacketReader packet, WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); byte[] guidMask = { 3, 1, 7, 4, 6, 0, 2, 5 }; byte[] guidBytes = { 0, 1, 7, 6, 5, 2, 4, 3 }; var guid = BitUnpack.GetPackedValue(guidMask, guidBytes); var gossipData = GossipMgr.GetGossip <Creature>(SmartGuid.GetGuid(guid)); if (gossipData != null) { PacketWriter gossipMessage = new PacketWriter(ServerMessage.GossipMessage); BitPack BitPack = new BitPack(gossipMessage, guid); BitPack.WriteGuidMask(0, 1); BitPack.Write(0, 19); // gossipData.QuestsCount BitPack.WriteGuidMask(2); BitPack.Write(0, 20); // gossipData.OptionsCount // QuestsCount not supported. // for (int i = 0; i < gossipData.QuestsCount; i++) BitPack.WriteGuidMask(3); // OptionsCount not supported. // for (int i = 0; i < gossipData.OptionsCount; i++) BitPack.WriteGuidMask(5, 4, 6, 7); BitPack.Flush(); BitPack.WriteGuidBytes(6); // OptionsCount not supported. // for (int i = 0; i < gossipData.OptionsCount; i++) BitPack.WriteGuidBytes(0); // QuestsCount not supported. // for (int i = 0; i < gossipData.QuestsCount; i++) gossipMessage.WriteInt32(gossipData.Id); BitPack.WriteGuidBytes(4, 3); gossipMessage.WriteInt32(gossipData.FriendshipFactionID); gossipMessage.WriteInt32(gossipData.TextID); BitPack.WriteGuidBytes(7, 1, 5, 1); session.Send(ref gossipMessage); } }
/// <summary>Handles client's npc text query</summary> /// <param name="client">realm client</param> /// <param name="packet">packet incoming</param> public static void HandleNPCTextQuery(IRealmClient client, RealmPacketIn packet) { uint id = packet.ReadUInt32(); packet.ReadEntityId(); IGossipEntry entry = GossipMgr.GetEntry(id); if (entry == null) { return; } QueryHandler.SendNPCTextUpdate(client.ActiveCharacter, entry); }
public virtual void FinalizeDataHolder() { if (Id != 0U) { GOId = (GOEntryId)Id; } else { Id = (uint)GOId; } if (FactionId != FactionTemplateId.None) { Faction = FactionMgr.Get(FactionId); } InitEntry(); if (GossipId != 0U && DefaultGossip == null) { if (GossipMgr.GetEntry(GossipId) == null) { ContentMgr.OnInvalidDBData("GOEntry {0} has missing GossipId: {1}", (object)this, (object)GossipId); DefaultGossip = new GossipMenu(); } else { DefaultGossip = new GossipMenu(GossipId); } } else if (QuestHolderInfo != null) { DefaultGossip = new GossipMenu(); } if (HandlerCreator == null) { HandlerCreator = GOMgr.Handlers[(int)Type]; } if (GOCreator == null) { GOCreator = !IsTransport ? () => new GameObject() : (Func <GameObject>)(() => (GameObject) new Transport()); } if (Fields == null) { return; } GOMgr.Entries[Id] = this; }
public static void HandleCliQueryNPCText(ref PacketReader packet, WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); byte[] guidMask = { 5, 2, 7, 3, 4, 0, 6, 1 }; byte[] guidBytes = { 0, 7, 1, 4, 3, 5, 2, 6 }; var gossipTextId = packet.Read <int>(); var guid = BitUnpack.GetPackedValue(guidMask, guidBytes); var gossipData = GossipMgr.GetGossip <Creature>(SmartGuid.GetGuid(guid)); if (gossipData != null) { PacketWriter queryNPCTextResponse = new PacketWriter(ServerMessage.QueryNPCTextResponse); BitPack BitPack = new BitPack(queryNPCTextResponse); BitPack.Write(1); BitPack.Flush(); queryNPCTextResponse.WriteInt32(gossipTextId); queryNPCTextResponse.WriteInt32(0); queryNPCTextResponse.WriteFloat(1); for (int i = 0; i < 7; i++) { queryNPCTextResponse.WriteUInt32(0); } queryNPCTextResponse.WriteInt32(gossipData.BroadCastText.Id); for (int i = 0; i < 7; i++) { queryNPCTextResponse.WriteUInt32(0); } var size = (uint)queryNPCTextResponse.BaseStream.Length - 13; queryNPCTextResponse.WriteUInt32Pos(size, 9); session.Send(ref queryNPCTextResponse); } }
/// <summary> /// Handles client's npc text query /// </summary> /// <param name="client">realm client</param> /// <param name="packet">packet incoming</param> //[ClientPacketHandler((RealmServerOpCode.CMSG_NPC_TEXT_QUERY)] public static void HandleNPCTextQuery(IRealmClient client, RealmPacketIn packet) { var textId = packet.ReadUInt32(); var entityId = packet.ReadEntityId(); //var obj = client.ActiveCharacter.Map.GetObject(entityId) as IGossipEntry; //if (obj != null) //{ // SendNPCTextUpdate(client.ActiveCharacter, obj); //} //else var text = GossipMgr.GetEntry(textId); if (text != null) { SendNPCTextUpdate(client.ActiveCharacter, text); } }
public static void LoadSpawns(bool force) { Loading = true; try { OnlyLoadSpawns(force); LoadWaypoints(force); GossipMgr.LoadNPCRelations(); if (!RealmServer.Instance.IsRunning) { return; } // spawn immediately for (MapId mapId = 0; mapId < MapId.End; mapId++) { var map = World.GetNonInstancedMap(mapId); if (map != null && map.NPCsSpawned) { var pools = GetSpawnPoolTemplatesByMap(mapId); if (pools != null) { foreach (var pool in pools) { if (pool.AutoSpawns) { var p = pool; // wrap closure map.ExecuteInContext(() => map.AddNPCSpawnPoolNow(p)); } } } } } } finally { Loading = false; } }
public static void HandleTalkToGossip(ref PacketReader packet, WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); byte[] guidMask = { 7, 3, 6, 5, 2, 1, 4, 0 }; byte[] guidBytes = { 3, 4, 6, 1, 0, 2, 7, 5 }; var guid = BitUnpack.GetPackedValue(guidMask, guidBytes); var gossipData = GossipMgr.GetGossip <Creature>(SmartGuid.GetGuid(guid)); if (gossipData != null) { PacketWriter gossipMessage = new PacketWriter(ServerMessage.GossipMessage); BitPack BitPack = new BitPack(gossipMessage, guid); BitPack.WriteGuidMask(7, 6, 0); BitPack.Write(0, 19); // gossipData.QuestsCount BitPack.WriteGuidMask(4, 3, 2); BitPack.Write(0, 20); // gossipData.OptionsCount BitPack.WriteGuidMask(1, 5); BitPack.Flush(); BitPack.WriteGuidBytes(2, 7); gossipMessage.WriteInt32(gossipData.FriendshipFactionID); BitPack.WriteGuidBytes(3, 1); gossipMessage.WriteInt32(gossipData.TextID); BitPack.WriteGuidBytes(5); gossipMessage.WriteInt32(gossipData.Id); BitPack.WriteGuidBytes(6, 4, 0); session.Send(ref gossipMessage); } }
public static void HandleBroadcastText(ref WorldClass session, int id) { var broadCastText = GossipMgr.GetBroadCastText <Creature>(id); PacketWriter dbReply = new PacketWriter(ServerMessage.DBReply); BitPack BitPack = new BitPack(dbReply); var textLength = broadCastText.Text.Length; var alternativeTextLength = broadCastText.AlternativeText.Length; var size = 48; if (textLength == 0 || alternativeTextLength == 0) { size += 1; } size += textLength + alternativeTextLength; dbReply.WriteUInt32(0); // UnixTime, last change server side dbReply.WriteUInt32((uint)DBTypes.BroadcastText); dbReply.WriteUInt32((uint)size); dbReply.WriteInt32(broadCastText.Id); dbReply.WriteInt32(broadCastText.Language); dbReply.WriteUInt16((ushort)broadCastText.Text.Length); dbReply.WriteString(broadCastText.Text); dbReply.WriteUInt16((ushort)broadCastText.AlternativeText.Length); dbReply.WriteString(broadCastText.AlternativeText); broadCastText.Emotes.ForEach(emote => dbReply.WriteInt32(emote)); dbReply.WriteUInt32(1); dbReply.WriteInt32(broadCastText.Id); session.Send(ref dbReply); }
public virtual void FinalizeDataHolder() { if (Id != 0) { GOId = (GOEntryId)Id; } else { Id = (uint)GOId; } if (FactionId != 0) { Faction = FactionMgr.Get(FactionId); } InitEntry(); // create GossipMenu if (GossipId != 0 && DefaultGossip == null) { var gossipEntry = GossipMgr.GetEntry(GossipId); if (gossipEntry == null) { ContentMgr.OnInvalidDBData("GOEntry {0} has missing GossipId: {1}", this, GossipId); DefaultGossip = new GossipMenu(); } else { DefaultGossip = new GossipMenu(GossipId); } } else if (QuestHolderInfo != null) { // Make sure, there is a gossip menu, so quests can be started/completed DefaultGossip = new GossipMenu(); } // set HandlerCreator if (HandlerCreator == null) { HandlerCreator = GOMgr.Handlers[(int)Type]; } if (GOCreator == null) { if (IsTransport) { GOCreator = () => new Transport(); } else { GOCreator = () => new GameObject(); } } if (Fields != null) // ignore invalid ones { //Fields = null; GOMgr.Entries[Id] = this; } }
public static void HandleTalkToGossip(ref PacketReader packet, ref WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); byte[] guidMask = { 2, 1, 7, 3, 6, 0, 4, 5 }; byte[] guidBytes = { 5, 3, 6, 2, 7, 0, 4, 1 }; var guid = BitUnpack.GetPackedValue(guidMask, guidBytes); var gossipData = GossipMgr.GetGossip <Creature>(SmartGuid.GetGuid(guid)); if (gossipData != null) { PacketWriter gossipMessage = new PacketWriter(ServerMessage.GossipMessage); BitPack BitPack = new BitPack(gossipMessage, guid); BitPack.WriteGuidMask(0, 5); BitPack.Write(gossipData.OptionsCount, 20); BitPack.WriteGuidMask(6, 1); for (int i = 0; i < gossipData.OptionsCount; i++) { // OptionsCount not supported. } BitPack.WriteGuidMask(2); BitPack.Write(gossipData.QuestsCount, 19); BitPack.WriteGuidMask(4); for (int i = 0; i < gossipData.QuestsCount; i++) { // QuestsCount not supported. } BitPack.WriteGuidMask(3, 7); BitPack.Flush(); for (int i = 0; i < gossipData.OptionsCount; i++) { // OptionsCount not supported. } for (int i = 0; i < gossipData.QuestsCount; i++) { // QuestsCount not supported. } BitPack.WriteGuidBytes(5, 2, 6, 0); gossipMessage.WriteInt32(gossipData.Id); BitPack.WriteGuidBytes(4, 7); gossipMessage.WriteInt32(gossipData.TextID); BitPack.WriteGuidBytes(3, 1); gossipMessage.WriteInt32(gossipData.FriendshipFactionID); session.Send(ref gossipMessage); } }