/// <summary>Handles option selecting in gossip menu</summary> /// <param name="client">realm client</param> /// <param name="packet">packet incoming</param> public static void HandleGossipSelectOption(IRealmClient client, RealmPacketIn packet) { EntityId id = packet.ReadEntityId(); int num = (int)packet.ReadUInt32(); uint itemID = packet.ReadUInt32(); string extra = string.Empty; if (packet.Position < packet.Length) { extra = packet.ReadCString(); } Character activeCharacter = client.ActiveCharacter; WorldObject worldObject = activeCharacter.Map.GetObject(id); if (worldObject == null) { return; } GossipConversation gossipConversation = activeCharacter.GossipConversation; if (gossipConversation == null || gossipConversation.Speaker != worldObject) { return; } gossipConversation.HandleSelectedItem(itemID, extra); }
/// <summary>Generate the menu's text dynamically</summary> public override string GetText(GossipConversation convo) { string str = RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuText, new object[0]) + GossipTextHelper.Newline; if (!GOMgr.Loaded || !NPCMgr.Loaded) { str = convo.Speaker.HasUpdateAction( (Func <ObjectUpdateTimer, bool>)(action => action is MapEditorMenu.PeriodicLoadMapTimer)) ? str + RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusDataLoading, new object[0]) : str + RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusNoData, new object[0]); } else if (!this.Editor.Map.IsSpawned) { str = !this.Editor.Map.IsSpawning ? str + RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusNotSpawned, new object[0]) : str + RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusSpawning, new object[0]); } return(str); }
private static void OnLoadClicked(GossipConversation convo) { GOMgr.LoadAllLater(); NPCMgr.LoadAllLater(); convo.Character.SendSystemMessage(RealmLangKey.PleaseWait); convo.Character.AddUpdateAction(new PeriodicLoadMapTimer(convo)); }
private static void OnLoadClicked(GossipConversation convo) { GOMgr.LoadAllLater(); NPCMgr.LoadAllLater(); convo.Character.SendSystemMessage(RealmLangKey.PleaseWait, new object[0]); convo.Character.AddUpdateAction((ObjectUpdateTimer) new MapEditorMenu.PeriodicLoadMapTimer(convo)); }
/// <summary> /// Generate the menu's text dynamically /// </summary> public override string GetText(GossipConversation convo) { var text = RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuText) + GossipTextHelper.Newline; if (!GOMgr.Loaded || !NPCMgr.Loaded) { if (!convo.Speaker.HasUpdateAction(action => action is PeriodicLoadMapTimer)) { // already loading text += RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusNoData); } else { // not loading yet text += RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusDataLoading); } } else if (!Editor.Map.IsSpawned) { if (Editor.Map.IsSpawning) { // already spawning text += RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusSpawning); } else { // not spawning yet text += RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusNotSpawned); } } return(text); }
/// <summary>Generate the menu's text dynamically</summary> public override string GetText(GossipConversation convo) { string str = RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuText) + GossipTextHelper.Newline; if (!GOMgr.Loaded || !NPCMgr.Loaded) { str = convo.Speaker.HasUpdateAction( action => action is PeriodicLoadMapTimer) ? str + RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusDataLoading) : str + RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusNoData); } else if (!Editor.Map.IsSpawned) { str = !Editor.Map.IsSpawning ? str + RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusNotSpawned) : str + RealmLocalizer.Instance.Translate(convo.Character.Locale, RealmLangKey.EditorMapMenuStatusSpawning); } return(str); }
/// <summary> /// Is called whenever an object leaves this Character's sight /// </summary> public void OnOutOfRange(WorldObject obj) { obj.AreaCharCount--; if (obj == Asda2DuelingOponent) { if (Asda2Duel != null) { Asda2Duel.StopPvp(); } } if (obj == m_target) { // unset current Target ClearTarget(); } if (obj == m_activePet) { ActivePet = null; } if (GossipConversation != null && obj == GossipConversation.Speaker && GossipConversation.Character == this) { // stop conversation with a vanished object GossipConversation.Dispose(); } if (!(obj is Transport)) { KnownObjects.Remove(obj); } var chr = obj as Character; if (chr != null) { if (EnemyCharacters.Contains(chr)) { EnemyCharacters.Remove(chr); CheckEnemysCount(); } GlobalHandler.SendCharacterDeleteResponse(chr, Client); } else { var loot = obj as Asda2Loot; if (loot != null) { GlobalHandler.SendRemoveLootResponse(this, loot); } } }
/// <summary> /// Is called whenever an object leaves this Character's sight /// </summary> public void OnOutOfRange(WorldObject obj) { obj.AreaCharCount--; if (obj is Character && m_observers != null) { if (m_observers.Remove((Character)obj)) { // Character was observing: Now destroy items for him for (var i = (InventorySlot)0; i < InventorySlot.Bag1; i++) { var item = m_inventory[i]; if (item != null) { item.SendDestroyToPlayer((Character)obj); } } } } if (obj == DuelOpponent && !Duel.IsActive) { // opponent vanished before Duel started: Cancel duel Duel.Dispose(); } if (obj == m_target) { // unset current Target ClearTarget(); } if (obj == m_activePet) { ActivePet = null; } if (GossipConversation != null && obj == GossipConversation.Speaker && GossipConversation.Character == this) { // stop conversation with a vanished object GossipConversation.Dispose(); } if (!(obj is Transport)) { KnownObjects.Remove(obj); // send the destroy packet //obj.SendDestroyToPlayer(this); } }
public override string GetText(GossipConversation convo) { return(this.SpawnPoint.ToString()); }
public PeriodicLoadMapTimer(GossipConversation convo) { this.m_Convo = convo; this.Delay = 1000; this.Callback = new Action <WorldObject>(this.OnTick); }
public override string GetConfirmText(GossipConversation convo) { return(this.GetConfirmTextCallback(convo, (M)convo.CurrentMenu)); }
/// <summary>Sends a page to the character</summary> /// <param name="chr">recieving character</param> /// <param name="owner">EntityID of sender</param> public static void SendPageToCharacter(GossipConversation convo, IList <QuestMenuItem> questItems) { WorldObject speaker = convo.Speaker; Character character = convo.Character; GossipMenu currentMenu = convo.CurrentMenu; IList <GossipMenuItemBase> gossipItems = currentMenu.GossipItems; IGossipEntry gossipEntry = currentMenu.GossipEntry; if (gossipEntry.IsDynamic) { QueryHandler.SendNPCTextUpdate(character, gossipEntry); } using (RealmPacketOut packet = new RealmPacketOut(RealmServerOpCode.SMSG_GOSSIP_MESSAGE)) { packet.Write(speaker.EntityId); packet.Write(0); packet.Write(gossipEntry.GossipId); long position = packet.Position; packet.Position += 4L; int num = 0; if (gossipItems != null) { for (int index = 0; index < gossipItems.Count; ++index) { GossipMenuItemBase gossipMenuItemBase = gossipItems[index]; if (gossipMenuItemBase.Action == null || gossipMenuItemBase.Action.CanUse(convo)) { packet.Write(index); packet.Write((byte)gossipMenuItemBase.Icon); packet.Write(gossipMenuItemBase.Input); packet.Write((uint)gossipMenuItemBase.RequiredMoney); packet.WriteCString(gossipMenuItemBase.GetText(convo)); packet.WriteCString(gossipMenuItemBase.GetConfirmText(convo)); ++num; } } } if (questItems != null) { packet.WriteUInt(questItems.Count); for (int index = 0; index < questItems.Count; ++index) { QuestMenuItem questItem = questItems[index]; packet.Write(questItem.ID); packet.Write(questItem.Status); packet.Write(questItem.Level); packet.Write(0); packet.Write((byte)0); packet.WriteCString(questItem.Text); } } else { packet.Write(0); } packet.Position = position; packet.Write(num); character.Client.Send(packet, false); } }
public override bool CanUse(GossipConversation convo) { return(!convo.Character.Role.IsStaff); }
public override bool CanUse(GossipConversation convo) { return(Decider(convo)); }
/// <summary> /// Sends a page to the character /// </summary> /// <param name="chr">recieving character</param> /// <param name="owner">EntityID of sender</param> public static void SendPageToCharacter(GossipConversation convo, IList <QuestMenuItem> questItems) { var speaker = convo.Speaker; var chr = convo.Character; var menu = convo.CurrentMenu; var gossipItems = menu.GossipItems; var gossipEntry = menu.GossipEntry; if (gossipEntry.IsDynamic) { // not cached QueryHandler.SendNPCTextUpdate(chr, gossipEntry); } using (var packet = new RealmPacketOut(RealmServerOpCode.SMSG_GOSSIP_MESSAGE)) { packet.Write(speaker.EntityId); packet.Write(0); // new Flag field since 2.4.0 - menu id packet.Write(gossipEntry.GossipId); var countPos = packet.Position; packet.Position += 4; var count = 0; if (gossipItems != null) { for (var i = 0; i < gossipItems.Count; i++) { var item = gossipItems[i]; if (item.Action != null && !item.Action.CanUse(convo)) { continue; } packet.Write(i); packet.Write((byte)item.Icon); packet.Write(item.Input); packet.Write((uint)item.RequiredMoney); packet.WriteCString(item.GetText(convo)); packet.WriteCString(item.GetConfirmText(convo)); count++; } } if (questItems != null) { packet.WriteUInt(questItems.Count); for (int i = 0; i < questItems.Count; i++) { var item = questItems[i]; packet.Write(item.ID); packet.Write(item.Status); packet.Write(item.Level); packet.Write(0); // quest flags packet.Write((byte)0); // 3.3.3 flag (blue question or yelloe exclamation mark) packet.WriteCString(item.Text); } } else { packet.Write(0); } packet.Position = countPos; packet.Write(count); chr.Client.Send(packet); } }
public override bool CanUse(GossipConversation convo) { return convo.Character.Level >= m_level; }
public override sealed string GetText(GossipConversation convo) { return(GetTextCallback(convo, (M)convo.CurrentMenu)); }
public override bool CanUse(GossipConversation convo) { return((long)convo.Character.Level >= (long)this.m_level); }
public virtual bool CanUse(GossipConversation convo) { return(true); }
public override bool CanUse(GossipConversation convo) { return Decider(convo); }
public override bool CanUse(GossipConversation convo) { return !convo.Character.Role.IsStaff; }
public PeriodicLoadMapTimer(GossipConversation convo) { m_Convo = convo; Delay = 1000; Callback = OnTick; }
public override bool CanUse(GossipConversation convo) { return(convo.Character.Level >= m_level); }
public virtual bool CanUse(GossipConversation convo) { return true; }
public override string GetText(GossipConversation convo) { return(""); }
public void OnSelect(GossipConversation convo) { m_Handler(convo); }