public override void OnTargeted(Player player, TargetMessage message) { try { var world = this.World.Game.GetWorld(this.Destination.WorldSNO); if (world == null) { return; } } catch { Logger.Warn("Portal's destination world does not exist"); //We can't call WorldSNO since it DOESNT EXIST. return; } try { var world = this.World.Game.GetWorld(this.Destination.WorldSNO); var startingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag); if (startingPoint != null) { player.ChangeWorld(world, startingPoint); } } catch { Logger.Warn("Portal's tagged starting point does not exist (Tag = {0})", this.Destination.StartingPointActorTag); } }
public override void OnTargeted(Player player, TargetMessage message) { player.InGameClient.SendMessage(new OpenArtisanWindowMessage() { ArtisanID = this.DynamicID }); }
public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null, TargetMessage targetMessage = null) { Actor target; if (targetId == uint.MaxValue) { target = null; } else { target = user.World.GetActorByDynamicId(targetId); if (target == null) { return(false); } targetPosition = target.Position; } // find and run a power implementation var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO); if (implementation != null) { return(RunPower(user, implementation, target, targetPosition, targetMessage)); } else { return(false); } }
public bool RunPower(Actor user, PowerScript power, Actor target = null, Vector3D targetPosition = null, TargetMessage targetMessage = null) { // replace power with existing channel instance if one exists if (power is ChanneledSkill) { var existingChannel = _FindChannelingSkill(user, power.PowerSNO); if (existingChannel != null) { power = existingChannel; } else // new channeled skill, add it to the list { _channeledSkills.Add((ChanneledSkill)power); } } // copy in context params power.User = user; power.Target = target; power.World = user.World; power.TargetPosition = targetPosition; power.TargetMessage = targetMessage; _StartScript(power); return(true); }
internal void ProcessMessages() { lock (m_lock) { if (m_readBuffer.DataLength > 0) { // Try and process as many complete messages as possible m_readBuffer.BeginRead(); while (m_readBuffer.DataAvailable > 0 && !m_shutdown) { int msgstart = m_readBuffer.Position; int msglen = m_readBuffer.PeekInt32(); if (m_readBuffer.DataAvailable < msglen) { break; } m_readBuffer.BeginMessage(); TargetMessage cmd = (TargetMessage)m_readBuffer.ReadInt32(); switch (cmd) { case TargetMessage.Connect: ProcessMessage_Connect(); break; case TargetMessage.Disconnect: ProcessMessage_Disconnect(); break; case TargetMessage.ErrorMessage: ProcessMessage_ErrorMessage(); break; case TargetMessage.StateUpdate: ProcessMessage_StateUpdate(); break; case TargetMessage.BreakpointAdded: ProcessMessage_BreakpointAdded(); break; case TargetMessage.BreakpointRemoved: ProcessMessage_BreakpointRemoved(); break; case TargetMessage.CallstackUpdate: ProcessMessage_CallstackUpdate(); break; case TargetMessage.ValueCached: ProcessMessage_ValueCached(); break; case TargetMessage.LocalsUpdate: ProcessMessage_LocalsUpdate(); break; case TargetMessage.WatchUpdate: ProcessMessage_WatchUpdate(); break; case TargetMessage.ThreadsUpdate: ProcessMessage_ThreadsUpdate(); break; case TargetMessage.UploadFile: ProcessMessage_UploadFile(); break; case TargetMessage.SnippetResult: ProcessMessage_SnippetResult(); break; case TargetMessage.AutocompleteOptions: ProcessMessage_AutocompleteOptions(); break; case TargetMessage.ExMessage: ProcessMessage_ExMessage(); break; } m_readBuffer.EndMessage(); } m_readBuffer.EndRead(); } } }
public override void OnTargeted(Player player, TargetMessage message) { Logging.LogManager.DefaultLogger.Trace("OnTargeted Item ID: {0}", message.TargetID); if (player.Inventory.TryPickUp(this)) { World.Leave(this); } }
public override void OnTargeted(Player player, TargetMessage message) { Logger.Debug(" (OnTargeted) the npc has dynID {0}", DynamicID); player.SelectedNPC = this; var count = Interactions.Count + Conversations.Count; if (count == 0) { return; } // If there is only one conversation option, immediatly select it without showing menu if (Interactions.Count == 0 && Conversations.Count == 1) { player.Conversations.StartConversation(Conversations[0].ConversationSNO); Conversations[0].MarkAsRead(); UpdateConversationList(); return; } NPCInteraction[] npcInters = new NPCInteraction[count]; var it = 0; foreach (var conv in Conversations) { npcInters[it] = conv.AsNPCInteraction(this, player); it++; } foreach (var inter in Interactions) { npcInters[it] = inter.AsNPCInteraction(this, player); it++; } player.InGameClient.SendMessage(new NPCInteractOptionsMessage() { ActorID = this.DynamicID, tNPCInteraction = npcInters, Type = NPCInteractOptionsType.Normal }); // TODO: this has no effect, why is it sent? player.InGameClient.SendMessage(new Mooege.Net.GS.Message.Definitions.Effect.PlayEffectMessage() { ActorId = this.DynamicID, Effect = Net.GS.Message.Definitions.Effect.Effect.Unknown36 }); UpdateConversationList(); }
public override async Task AddReactions() { //await TargetMessage.AddReactionsAsync(LanguageEmotes.Where(x => ValidLanguages.Contains(x.Item1)) // Get all from ValidLangauges // .Select(x => x.Item2) // Get all IEmotes // .ToArray()); foreach (Language language in ValidLanguages) { await TargetMessage.AddReactionAsync(LanguageEmotes.Where(x => x.Item1 == language).FirstOrDefault().Item2); } }
public async Task ModifyOriginalMessage() { // Create the new message properties MessageProperties newProperties = CreateMessageProperties(); // Modify the target message await TargetMessage.ModifyAsync(properties => { properties.Content = newProperties.Content; properties.Embed = newProperties.Embed; }); }
public override void OnTargeted(Player player, TargetMessage message) { player.InGameClient.SendMessage(new ANNDataMessage(Opcodes.UseNephalemAltarMessage) { ActorID = this.DynamicID }); player.Attributes[GameAttribute.Last_Altar_ANN] = (int)this.DynamicID; player.Attributes.BroadcastChangedIfRevealed(); Attributes[GameAttribute.Gizmo_Has_Been_Operated] = true; Attributes.BroadcastChangedIfRevealed(); }
/* * // Items are NOT constructed with tags! * protected override void ReadTags() * { * base.ReadTags(); * if (this.Tags.ContainsKey((int)MarkerTagTypes.LoreSNOId)) * { * LoreSNOId = Tags[(int)MarkerTagTypes.LoreSNOId].Int2; * } * else * { * LoreSNOId = -1; * } * } */ public override void OnTargeted(Player player, TargetMessage message) { //Logger.Trace("OnTargeted"); if (LoreSNOId != -1) { player.PlayLore(LoreSNOId, true); } if (player.GroundItems.ContainsKey(this.DynamicID)) { player.GroundItems.Remove(this.DynamicID); } this.Destroy(); }
public override void OnTargeted(Player player, TargetMessage message) { if (player.Busy) { return; } if (player.IsShopOpened) { return; } if (this.NPCType == Core.NPCType.VAULT) { Logging.LogManager.DefaultLogger.Trace("VAULT OPENED"); InventoryShowWindowMessage msg_show_vault = new InventoryShowWindowMessage(); msg_show_vault.windowId = InventoryWindowsID.Vault; msg_show_vault.visible = true; player.GameClient.SendMessage(msg_show_vault); InventoryShowWindowMessage msg_show_playerinv = new InventoryShowWindowMessage(); msg_show_playerinv.windowId = InventoryWindowsID.PlayerInventory; msg_show_playerinv.visible = true; player.GameClient.SendMessage(msg_show_playerinv); player.Busy = true; player.IsVaultOpened = true; player.OpenedNPC = this; } if (this.NPCType == Core.NPCType.SHOP) { Logging.LogManager.DefaultLogger.Trace("SHOP OPENED"); InventoryShowWindowMessage msg_show_shop = new InventoryShowWindowMessage(); msg_show_shop.windowId = InventoryWindowsID._SHOP; msg_show_shop.visible = true; player.GameClient.SendMessage(msg_show_shop); InventoryShowWindowMessage msg_show_playerinv = new InventoryShowWindowMessage(); msg_show_playerinv.windowId = InventoryWindowsID.PlayerInventory; msg_show_playerinv.visible = true; player.GameClient.SendMessage(msg_show_playerinv); this.ShopInventory.RevealTo(player); player.Busy = true; player.IsShopOpened = true; player.OpenedNPC = this; } }
private void OnObjectTargeted(GameClient client, TargetMessage message) { Actor targetActor = this.World.Actors[message.TargetID]; if (targetActor != null) { if (targetActor.ActorType == ActorType.Item) { targetActor.OnTargeted(this, message); return; } if (targetActor.ActorType == ActorType.NPC) { targetActor.OnTargeted(this, message); return; } if (targetActor.ActorType == Dirac.GameServer.Core.ActorType.Monster) { SkillManager.RunPower(this, message); } /*if (targetActor.ActorType == ActorType.Monster) * { * bool powerHandled = PowerManager.RunPower(this, targetActor, message); * }*/ } else { bool powerHandled = SkillManager.RunPower(this, message); } /*if (!powerHandled) * { * Actor actor = this.World.GetActorByDynamicId(message.TargetID); * if (actor == null) * return; * * actor.OnTargeted(this, message); * }*/ //this.ExpBonusData.Check(2); }
public override void OnTargeted(Player player, TargetMessage message) { var playersAffected = player.GetPlayersInRange(26f); foreach (Player plr in playersAffected) { foreach (Player targetAffected in playersAffected) { plr.InGameClient.SendMessage(new PlayEffectMessage() { ActorId = targetAffected.DynamicID, Effect = Effect.HealthOrbPickup }); } //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO plr.AddPercentageHP(100); } base.OnTargeted(player, message); }
public override void OnTargeted(Player player, TargetMessage message) { var world = this.World.Game.GetWorld(this.Destination.WorldSNO); if (world == null) { Logger.Warn("Portal's destination world does not exist (WorldSNO = {0})", this.Destination.WorldSNO); return; } var startingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag); if (startingPoint != null) { player.ChangeWorld(world, startingPoint); } else { Logger.Warn("Portal's tagged starting point does not exist (Tag = {0})", this.Destination.StartingPointActorTag); } }
public static bool RunPower(Actor owner /*, Actor targetedActor*/, TargetMessage targetMessage) { if (targetMessage.PowerSlot == null) { return(false); //thrwo ex } //targetPosition = targetedActor.Position; //user.Attributes[GameAttribute.Mana_Cur, (int)(user as Player).Toon.HeroTable.PrimaryResource] = 100 /*GetMaxResource((int)Toon.HeroTable.SecondaryResource)*/; //user.Attributes.BroadcastChangedIfRevealed(); //return false; // find and run a power implementation SkillContext implementation = SkillManager.createInstance((owner as Player), (SkillSlot)targetMessage.PowerSlot); if (implementation == null) { return(false); //loghack //throw ex } if (owner.World.Actors.ContainsKey(targetMessage.TargetID)) { implementation.TargetActor = owner.World.Actors[targetMessage.TargetID]; } implementation.TargetMessageFromClient = targetMessage; implementation.Player = (owner as Player); implementation.World = owner.World; implementation.DestinationUserClick = targetMessage.Position; implementation.VectorDirector = (implementation.DestinationUserClick - implementation.Player.Position).NormalizedCopy; implementation.Run(); //Logging.LogManager.DefaultLogger.Trace("Skill SNO Used {0}", targetMessage.PowerSlot); return(true); }
public override void OnTargeted(Player player, TargetMessage message) { //Logger.Trace("OnTargeted"); player.Inventory.PickUp(this); }
public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null, TargetMessage targetMessage = null) { Actor target; if (targetId == uint.MaxValue) { target = null; } else { target = user.World.GetActorByDynamicId(targetId); if (target == null) { return(false); } targetPosition = target.Position; } #region Items and Monster spawn HACK // HACK: intercept hotbar skill 1 to always spawn test mobs. if (user is Player && powerSNO == (user as Player).SkillSet.HotBarSkills[4].SNOSkill) { // number of monsters to spawn int spawn_count = 3; // list of actorSNO values to pick from when spawning int[] actorSNO_values = { 5387, 6652, 5346 }; int actorSNO = actorSNO_values[RandomHelper.Next(actorSNO_values.Length)]; Logger.Debug("3 monsters spawning with actor sno {0}", actorSNO); for (int n = 0; n < spawn_count; ++n) { Vector3D position; if (targetPosition.X == 0f) { position = new Vector3D(user.Position); if ((n % 2) == 0) { position.X += (float)(RandomHelper.NextDouble() * 20); position.Y += (float)(RandomHelper.NextDouble() * 20); } else { position.X -= (float)(RandomHelper.NextDouble() * 20); position.Y -= (float)(RandomHelper.NextDouble() * 20); } } else { position = new Vector3D(targetPosition); position.X += (float)(RandomHelper.NextDouble() - 0.5) * 20; position.Y += (float)(RandomHelper.NextDouble() - 0.5) * 20; position.Z = user.Position.Z; } Monster mon = new Monster(user.World, actorSNO, null); mon.SetBrain(new Mooege.Core.GS.AI.Brains.MonsterBrain(mon)); mon.Position = position; mon.Scale = 1.35f; mon.Attributes[GameAttribute.Hitpoints_Max_Total] = 5f; mon.Attributes[GameAttribute.Hitpoints_Max] = 5f; mon.Attributes[GameAttribute.Hitpoints_Total_From_Level] = 0f; mon.Attributes[GameAttribute.Hitpoints_Cur] = 5f; mon.Attributes[GameAttribute.Attacks_Per_Second_Total] = 1.0f; mon.Attributes[GameAttribute.Damage_Weapon_Min_Total, 0] = 5f; mon.Attributes[GameAttribute.Damage_Weapon_Delta_Total, 0] = 7f; mon.Attributes[GameAttribute.Casting_Speed_Total] = 1.0f; user.World.Enter(mon); } // spawn some useful items for testing at the ground of the player if (!_spawnedHelperItems) { _spawnedHelperItems = true; Items.ItemGenerator.Cook((Players.Player)user, "Sword_2H_205").EnterWorld(user.Position); Items.ItemGenerator.Cook((Players.Player)user, "Crossbow_102").EnterWorld(user.Position); for (int n = 0; n < 30; ++n) { Items.ItemGenerator.Cook((Players.Player)user, "Runestone_Unattuned_07").EnterWorld(user.Position); } } return(true); } #endregion // find and run a power implementation var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO); if (implementation != null) { return(RunPower(user, implementation, target, targetPosition, targetMessage)); } else { // no power script is available, but try to play the cast effects var efgTag = Mooege.Core.GS.Common.Types.TagMap.PowerKeys.CastingEffectGroup_Male; var tagmap = PowerTagHelper.FindTagMapWithKey(powerSNO, efgTag); if (tagmap != null) { user.PlayEffectGroup(tagmap[efgTag].Id); } return(false); } }
public override async Task AddReactions() { await TargetMessage.AddReactionAsync(EMOTE_EXIT); }
public async Task ClearReactions() { await TargetMessage.RemoveAllReactionsAsync(); }
public override void OnTargeted(Player player, TargetMessage message) { base.OnTargeted(player, message); player.InGameClient.SendMessage(new OpenTradeWindowMessage((int)this.DynamicID)); }
public override void OnTargeted(Player player, TargetMessage message) { Logger.Debug("(OnTargeted) Portal has been activated "); var world = this.World.Game.GetWorld(this.Destination.WorldSNO); var startingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag); #region События //Подвал Адрии if (this.Destination.WorldSNO == 62751) { //Enter в Adrian's Hut bool QuestEnter = false; var Cauldron = world.GetActorBySNO(131123); if (player.PlayerIndex == 0) { if (player.Toon.ActiveQuest == 72095) { player.Toon.ActiveQuest = 72095; if (player.Toon.StepOfQuest == 5) { player.Toon.StepOfQuest = 6; player.Toon.StepIDofQuest = 51; QuestEnter = true; } var Leah_Cellar = world.GetActorBySNO(203030); Leah_Cellar.Position = new Vector3D(-200f, -200f, 3.051758E-05f); } } if (QuestEnter == true) { world.Game.Quests.NotifyQuest(72095, NullD.Common.MPQ.FileFormats.QuestStepObjectiveType.EventReceived, -1); //world.Game.Quests.Advance(72095); } } #endregion #region Авто-Учёт перехода для Квест-Менеджера world.Game.Quests.NotifyQuest(player.Toon.ActiveQuest, NullD.Common.MPQ.FileFormats.QuestStepObjectiveType.EnterWorld, this.Destination.WorldSNO); #endregion if (world == null) { Logger.Warn("Portal's destination world does not exist (WorldSNO = {0})", this.Destination.WorldSNO); return; } #region Не санкционированные порталы) if (this.Destination.StartingPointActorTag == -100) { Vector3D ToPortal = new Vector3D(2985.6241f, 2795.627f, 24.04532f); Vector3D ToPortal2Act = new Vector3D(310.739f, 275.8123f, 0.09997072f); Vector3D ToPortal3Act = new Vector3D(390f, 402f, 0f); Vector3D ToPortal4Act = new Vector3D(390f, 402f, 0f); //Сохраняем в базу координаты для обратного портала. var dbPortalOfToon = DBSessions.AccountSession.Get <DBPortalOfToon>(player.Toon.PersistentID); var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID); dbPortalOfToon.WorldDest = player.World.WorldSNO.Id; dbPortalOfToon.X = this.Position.X; dbPortalOfToon.Y = this.Position.Y; dbPortalOfToon.Z = this.Position.Z; dbPortalOfToon.PlayerIndex = player.PlayerIndex; DBSessions.AccountSession.SaveOrUpdate(dbPortalOfToon); Logger.Warn("Data for back portal Saved."); if (dbQuestProgress.ActiveAct == 0) { var TristramHome = player.World.Game.GetWorld(71150); var OldPortal = TristramHome.GetActorsBySNO(5648); foreach (var OldP in OldPortal) { OldP.Destroy(); } var ToHome = new Portal(player.World.Game.GetWorld(71150), 5648, player.World.Game.GetWorld(71150).StartingPoints[0].Tags); ToHome.Destination = new ResolvedPortalDestination { WorldSNO = dbPortalOfToon.WorldDest, DestLevelAreaSNO = player.CurrentScene.Specification.SNOLevelAreas[0], StartingPointActorTag = -101 }; ToHome.EnterWorld(ToPortal); if (PlayerBackPortalID == 0xFFFFFFFFFFFF) { ToHome.PlayerBackPortalID = player.Toon.PersistentID; } if (player.World.Game.GetWorld(71150) != player.World) { /* * if (dbQuestProgress.ActiveQuest == 72221 & dbQuestProgress.StepOfQuest == 10 & player.PlayerIndex == 0) * { * player.World.Game.Quests.NotifyQuest(72221, DiIiS.Common.MPQ.FileFormats.QuestStepObjectiveType.EventReceived, -1); * dbQuestProgress.StepOfQuest = 11; * }*/ player.ChangeWorld(player.World.Game.GetWorld(71150), ToPortal); if (dbQuestProgress.ActiveQuest == 72738 && dbQuestProgress.StepOfQuest == 18) { //player.World.Game.Quests.NotifyQuest(72738, DiIiS.Common.MPQ.FileFormats.QuestStepObjectiveType.EventReceived, -1); dbQuestProgress.ActiveQuest = 73236; dbQuestProgress.StepOfQuest = -1; } player.ChangeWorld(player.World.Game.GetWorld(71150), ToPortal); if (player.ActiveHireling != null) { player.ActiveHireling.ChangeWorld(world, ToPortal); player.InGameClient.SendMessage(new PetMessage() { Field0 = 0, Field1 = 0, PetId = player.ActiveHireling.DynamicID, Field3 = 0, }); } } else { player.Teleport(ToPortal); if (player.ActiveHireling != null) { player.ActiveHireling.Teleport(ToPortal); } } } else if (dbQuestProgress.ActiveAct == 100) { var CaldeumHome = player.World.Game.GetWorld(161472); var OldPortal = CaldeumHome.GetActorsBySNO(5648); foreach (var OldP in OldPortal) { OldP.Destroy(); } var ToHome = new Portal(player.World.Game.GetWorld(161472), 5648, player.World.Game.GetWorld(161472).StartingPoints[0].Tags); ToHome.Destination = new ResolvedPortalDestination { WorldSNO = dbPortalOfToon.WorldDest, DestLevelAreaSNO = player.CurrentScene.Specification.SNOLevelAreas[0], StartingPointActorTag = -101 }; ToHome.EnterWorld(ToPortal2Act); if (PlayerBackPortalID == 0xFFFFFFFFFFFF) { ToHome.PlayerBackPortalID = player.Toon.PersistentID; } if (player.World.Game.GetWorld(161472) != player.World) { player.ChangeWorld(player.World.Game.GetWorld(161472), ToPortal2Act); if (player.ActiveHireling != null) { player.ActiveHireling.ChangeWorld(world, ToPortal2Act); player.InGameClient.SendMessage(new PetMessage() { Field0 = 0, Field1 = 0, PetId = player.ActiveHireling.DynamicID, Field3 = 0, }); } } } else if (dbQuestProgress.ActiveAct == 200) { var BastionHome = player.World.Game.GetWorld(172909); var OldPortal = BastionHome.GetActorsBySNO(5648); foreach (var OldP in OldPortal) { OldP.Destroy(); } var ToHome = new Portal(player.World.Game.GetWorld(172909), 5648, player.World.Game.GetWorld(172909).StartingPoints[0].Tags); ToHome.Destination = new ResolvedPortalDestination { WorldSNO = dbPortalOfToon.WorldDest, DestLevelAreaSNO = player.CurrentScene.Specification.SNOLevelAreas[0], StartingPointActorTag = -101 }; ToHome.EnterWorld(ToPortal3Act); if (PlayerBackPortalID == 0xFFFFFFFFFFFF) { ToHome.PlayerBackPortalID = player.Toon.PersistentID; } if (player.World.Game.GetWorld(172909) != player.World) { player.ChangeWorld(player.World.Game.GetWorld(172909), ToPortal3Act); } else { player.Teleport(ToPortal3Act); } } else if (dbQuestProgress.ActiveAct == 300) { var BastionHome = player.World.Game.GetWorld(178152); var OldPortal = BastionHome.GetActorsBySNO(5648); foreach (var OldP in OldPortal) { OldP.Destroy(); } var ToHome = new Portal(player.World.Game.GetWorld(178152), 5648, player.World.Game.GetWorld(178152).StartingPoints[0].Tags); ToHome.Destination = new ResolvedPortalDestination { WorldSNO = dbPortalOfToon.WorldDest, DestLevelAreaSNO = player.CurrentScene.Specification.SNOLevelAreas[0], StartingPointActorTag = -101 }; ToHome.EnterWorld(ToPortal4Act); if (PlayerBackPortalID == 0xFFFFFFFFFFFF) { ToHome.PlayerBackPortalID = player.Toon.PersistentID; } if (player.World.Game.GetWorld(178152) != player.World) { player.ChangeWorld(player.World.Game.GetWorld(178152), ToPortal4Act); } else { player.Teleport(ToPortal4Act); } } DBSessions.AccountSession.Flush(); } //Портал из Города else if (this.Destination.StartingPointActorTag == -101) { if (PlayerBackPortalID == player.Toon.PersistentID) { this.Destroy(); } var dbPortalOfToon = DBSessions.AccountSession.Get <DBPortalOfToon>(PlayerBackPortalID); Vector3D ToPortal = new Vector3D(dbPortalOfToon.X, dbPortalOfToon.Y, dbPortalOfToon.Z); var DestWorld = player.World.Game.GetWorld(dbPortalOfToon.WorldDest); var oldPortals = DestWorld.GetActorsBySNO(5648); foreach (var OldP in oldPortals) { OldP.Destroy(); } if (player.World.Game.GetWorld(dbPortalOfToon.WorldDest) != player.World) { player.ChangeWorld(player.World.Game.GetWorld(dbPortalOfToon.WorldDest), ToPortal); if (player.ActiveHireling != null) { player.ActiveHireling.ChangeWorld(world, ToPortal); player.InGameClient.SendMessage(new PetMessage() { Field0 = 0, Field1 = 0, PetId = player.ActiveHireling.DynamicID, Field3 = 0, }); } } else { player.Teleport(ToPortal); if (player.ActiveHireling != null) { player.ActiveHireling.Teleport(ToPortal); player.InGameClient.SendMessage(new PetMessage() { Field0 = 0, Field1 = 0, PetId = player.ActiveHireling.DynamicID, Field3 = 0, }); } } } else { #endregion if (startingPoint != null) { player.ChangeWorld(world, startingPoint); } else { #region Использование умного телепорта if (this.Destination.StartingPointActorTag != 0) { StartingPoint NeededStartingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag); var DestWorld = world.Game.GetWorld(this.Destination.WorldSNO); var StartingPoints = DestWorld.GetActorsBySNO(5502); foreach (var ST in StartingPoints) { if (ST.CurrentScene.SceneSNO.Id == this.Destination.StartingPointActorTag) { NeededStartingPoint = (ST as StartingPoint); } } player.ChangeWorld(DestWorld, NeededStartingPoint); } #endregion else { Logger.Warn("Portal's tagged starting point does not exist (Tag = {0})", this.Destination.StartingPointActorTag); } } } }
public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null, TargetMessage targetMessage = null) { Actor target; if (targetId == uint.MaxValue) { target = null; } else { target = user.World.GetActorByDynamicId(targetId); if (target == null) { return(false); } targetPosition = target.Position; } // find and run a power implementation var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO); //Королевские скелеты 087012 //[Actor] [Type: Gizmo] SNOId:5766 DynamicId: 2009 Position: x:964,2715 y:579,897 z:2,670288E-05 Name: trDun_Cath_Gate_C // 46 - 117779 // Ворота - // Негодяй - 80812 #region Южные ворота в тристрам. try { if (target.ActorSNO.Id == 90419) { foreach (var player in user.World.Players) { } } } catch { } #endregion #region Не Лекарь, а мужик неподалёку) try { if (target.ActorSNO.Id == 205665) { var playersAffected = user.GetPlayersInRange(26f); foreach (Player player in playersAffected) { foreach (Player targetAffected in playersAffected) { player.InGameClient.SendMessage(new PlayEffectMessage() { ActorId = targetAffected.DynamicID, Effect = Effect.HealthOrbPickup }); } //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO player.AddPercentageHP(100); } //player.UpdateExp(player.Attributes[Net.GS.Message.GameAttribute.Experience_Next]); } }catch { } #endregion #region Активация баннера игрока для телепортации try { var TeleportToPlayer = new Vector3D(); if (target.ActorSNO.Name == "Banner_Player_1") { foreach (var player in user.World.Players) { if (player.Value.PlayerIndex == 0) { if (player.Value.Position != user.Position) { TeleportToPlayer = player.Value.Position; } } Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.PlayerIndex); } if (TeleportToPlayer.Z != 0) { user.Teleport(TeleportToPlayer); } } else if (target.ActorSNO.Name == "Banner_Player_2") { foreach (var player in user.World.Players) { if (player.Value.PlayerIndex == 1) { if (player.Value.Position != user.Position) { TeleportToPlayer = player.Value.Position; } } Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position); } if (TeleportToPlayer.Z != 0) { user.Teleport(TeleportToPlayer); } } else if (target.ActorSNO.Name == "Banner_Player_3") { foreach (var player in user.World.Players) { if (player.Value.PlayerIndex == 2) { if (player.Value.Position != user.Position) { TeleportToPlayer = player.Value.Position; } } Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position); } if (TeleportToPlayer.Z != 0) { user.Teleport(TeleportToPlayer); } } else if (target.ActorSNO.Name == "Banner_Player_4") { foreach (var player in user.World.Players) { if (player.Value.PlayerIndex == 3) { if (player.Value.Position != user.Position) { TeleportToPlayer = player.Value.Position; } } Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position); } if (TeleportToPlayer.Z != 0) { user.Teleport(TeleportToPlayer); } } } catch { } #endregion #region Квестовые события #region Северные ворота try { if (target.ActorSNO.Id == 121241) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 5) { dbQuestProgress.StepOfQuest = 6; Dialog72221 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (Dialog72221 == true) { //user.World.Game.Quests.Advance(72221); user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, 121241); Dialog72221 = false; } } } catch { } #endregion #region азговор с кузнецом try { if (target.ActorSNO.Id == 65036) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { dbQuestProgress.ActiveQuest = 72221; if (dbQuestProgress.StepOfQuest == 1) { Dialog72221 = true; dbQuestProgress.StepOfQuest = 2; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (Dialog72221 == true) { Dialog72221 = false; StartConversation(target.World, 198292); } } } catch { } #endregion #region Выход через шкаф) try { if (target.ActorSNO.Id == 188743) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72095) { dbQuestProgress.ActiveQuest = 72095; if (dbQuestProgress.StepOfQuest == 14) { dbQuestProgress.StepOfQuest = 15; UseDoor72095 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.UseDoor72095 == true) { user.World.Game.Quests.Advance(72095); UseDoor72095 = false; } // 136291 - Houser_Door_trOut_newTristram } } catch { } #endregion #region Двери собора try { if (target.DynamicID == 1543 || target.ActorSNO.Id == 167289) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72095) { dbQuestProgress.ActiveQuest = 72095; if (dbQuestProgress.StepOfQuest == 9) { dbQuestProgress.StepOfQuest = 10; UseDoor72095 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.UseDoor72095 == true) { user.World.Game.Quests.Advance(72095); UseDoor72095 = false; } } } catch {} #endregion #region Котёл в хижине try { if (target.DynamicID == 1859 || target.ActorSNO.Id == 131123) { //Отлавливаем котёл в потойном подвале foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72095) { dbQuestProgress.ActiveQuest = 72095; if (dbQuestProgress.StepOfQuest == 6) { //dbQuestProgress.StepOfQuest = 7; UseActorOnKotel72095 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.UseActorOnKotel72095 == true) { StartConversation(user.World, 167115); user.World.Game.Quests.Advance(72095); UseActorOnKotel72095 = false; } } } catch {} #endregion #region Корона короля-скелета try { if (target.ActorSNO.Id == 159446) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 9) { dbQuestProgress.StepOfQuest = 10; Dialog72221 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (Dialog72221 == true) { //user.World.Game.Quests.Advance(72221); string BrokenCrown = "SkeletonKing_BrokenCrown"; //target.Destroy(); foreach (var player in user.World.Players) { var item = Items.ItemGenerator.Cook(player.Value, BrokenCrown); item.EnterWorld(player.Value.Position); } user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.PossessItem, -1); Dialog72221 = false; } } else if (target.ActorSNO.Id == 92168) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 10) { user.World.Game.Quests.Advance(72221); } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } } else if (target.ActorSNO.Id == 199642) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 9) { dbQuestProgress.StepOfQuest = 10; Dialog72221 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (Dialog72221 == true) { //user.World.Game.Quests.Advance(72221); string BrokenCrown = "SkeletonKing_BrokenCrown"; //target.Destroy(); foreach (var player in user.World.Players) { var item = Items.ItemGenerator.Cook(player.Value, BrokenCrown); item.EnterWorld(player.Value.Position); } user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.PossessItem, -1); Dialog72221 = false; } } } catch { } #endregion #region Меч короля скелетов try { if (target.ActorSNO.Id == 163449) { //163449 - Sword Leoric //220219 - Point to Spawn Ghost Leoric //220218 - Point to Spawn Ghost Knight //4182 - Ghost Knight //4183 - Lachdanan's Ghost //5365 - King Leoric's Ghost //139823 Event_DoK_Kill.cnv //139825 Event_DoK_Death.cnv var GhostLeoricPoint = user.World.GetActorBySNO(220219).Position; var GhostKingtsSpawners = user.World.GetActorsBySNO(220218); //Спауним Дух Леорика user.World.SpawnMonster(5365, GhostLeoricPoint); //Спауним Духов Рыцарей for (int i = 0; i < 4; i++) { user.World.SpawnMonster(4182, GhostKingtsSpawners[i].Position); } //Спауним Дух Ласхадана user.World.SpawnMonster(4183, GhostKingtsSpawners[4].Position); //Запуск сцены StartConversation(target.World, 139823); } } catch { } #endregion #region Король скелетов try { if (target.ActorSNO.Id == 5354) { user.World.Game.Quests.NotifyQuest(72061, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, 5354); target.Attributes[GameAttribute.Gizmo_State] = 1; target.Attributes.BroadcastChangedIfRevealed(); var SkeletionThrone = user.World.GetActorBySNO(5354); //user.World.SpawnMonster() //var SkeletonKing = 0; Vector3D SpawnPoint = new Vector3D(343.5578f, 270.1681f, 21.33655f); List <uint> monsterAlive = new List <uint> { }; user.World.BroadcastIfRevealed(new Mooege.Net.GS.Message.Definitions.Animation.PlayAnimationMessage { ActorID = SkeletionThrone.DynamicID, Field1 = 5, Field2 = 0, tAnim = new Net.GS.Message.Fields.PlayAnimationMessageSpec[] { new Net.GS.Message.Fields.PlayAnimationMessageSpec() { Duration = 1000, AnimationSNO = 9859, PermutationIndex = 0, Speed = 1f } } }, SkeletionThrone); SkeletionThrone.Attributes[Net.GS.Message.GameAttribute.Operatable] = false; Timeout = new SecondsTickTimer(user.World.Game, 16f); var ListenerKingSkeletons = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => WaitToSpawn(Timeout)); //Ждём пока убьют ListenerKingSkeletons.ContinueWith(delegate { user.World.Leave(SkeletionThrone); user.World.SpawnMonster(5350, SpawnPoint); var SkeletonKing = user.World.GetActorBySNO(5350); monsterAlive.Add(SkeletonKing.DynamicID); SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar] = true; SkeletonKing.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true; // DOES NOT WORK it should be champion affixes or shit of this kind ... // Увеличиваем здоровье босса! SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Max] = 2000f; SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Cur] = 2000f; SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Damage_Weapon_Min, 0] = 100f; SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Damage_Weapon_Delta, 0] = 100f; SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Movement_Scalar_Reduction_Percent] -= 10f; SkeletonKing.Attributes[Net.GS.Message.GameAttribute.Quest_Monster] = true; var BossListener = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => OnKillBossListener(monsterAlive, user.World)); BossListener.ContinueWith(delegate { //despawnn 009848 user.World.Game.Quests.Advance(72061); user.World.BroadcastIfRevealed(new Mooege.Net.GS.Message.Definitions.Animation.PlayAnimationMessage { ActorID = SkeletionThrone.DynamicID, Field1 = 5, Field2 = 0, tAnim = new Net.GS.Message.Fields.PlayAnimationMessageSpec[] { new Net.GS.Message.Fields.PlayAnimationMessageSpec() { Duration = 1000, AnimationSNO = 9859, PermutationIndex = 0, Speed = 1f } } }, SkeletionThrone); foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); dbQuestProgress.StepOfQuest = 15; DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } Timeout = new SecondsTickTimer(user.World.Game, 2f); var ListenerWaiting = System.Threading.Tasks.Task <bool> .Factory.StartNew(() => WaitToSpawn(Timeout)); ListenerWaiting.ContinueWith(delegate { var Throne = user.World.GetActorBySNO(175181); user.World.BroadcastIfRevealed(new Mooege.Net.GS.Message.Definitions.Animation.PlayAnimationMessage { ActorID = Throne.DynamicID, Field1 = 5, Field2 = 0, tAnim = new Net.GS.Message.Fields.PlayAnimationMessageSpec[] { new Net.GS.Message.Fields.PlayAnimationMessageSpec() { Duration = 100, AnimationSNO = Throne.AnimationSet.TagMapAnimDefault[Core.GS.Common.Types.TagMap.AnimationSetKeys.Opening], PermutationIndex = 0, Speed = 0.5f } } }, Throne); user.World.BroadcastIfRevealed(new Mooege.Net.GS.Message.Definitions.Animation.SetIdleAnimationMessage { ActorID = Throne.DynamicID, AnimationSNO = Core.GS.Common.Types.TagMap.AnimationSetKeys.Open.ID, }, Throne); }); }); }); } } catch { } #endregion #region азговор в кратере try { if (target.ActorSNO.Id == 180900) { StartConversation(target.World, 181910); } }catch { } #endregion #region Лезвия меча try { if (target.ActorSNO.Id == 206527) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 117779) { if (dbQuestProgress.StepOfQuest == 5) { //118037 - Конец квеста user.World.Leave(target.World.GetActorBySNO(206527)); StartConversation(target.World, 194412); } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } } } catch { } #endregion #endregion #region Книги try { #region Книга Лии - первый журнал if (target.ActorSNO.Id == 86817) { Vector3D PointToItem = new Vector3D(93.56282f, 111.3167f, 0.5335404f); //LeahJorunal First Book string Leah_Diary_in_room = "LeahJournal_PartOne"; target.Destroy(); foreach (var player in user.World.Players) { var item = Items.ItemGenerator.Cook(player.Value, Leah_Diary_in_room); item.EnterWorld(PointToItem); } } #endregion #region История нового тристрама else if (target.ActorSNO.Id == 230232) { Vector3D PointToItem = new Vector3D(84.39566f, 100.7473f, 7.900131f); string HistoryNewTristram = "Lore_NewTRistram"; target.Destroy(); foreach (var player in user.World.Players) { var item = Items.ItemGenerator.Cook(player.Value, HistoryNewTristram); item.EnterWorld(PointToItem); } } #endregion } catch { } #endregion if (implementation != null) { return(RunPower(user, implementation, target, targetPosition, targetMessage)); } else { return(false); } }
public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null, TargetMessage targetMessage = null) { Actor target; if (targetId == uint.MaxValue) { target = null; } else { target = user.World.GetActorByDynamicId(targetId); if (target == null) { return(false); } targetPosition = target.Position; } // find and run a power implementation var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO); #region Южные ворота в тристрам. try { if (target.ActorSNO.Id == 90419) { foreach (var player in user.World.Players) { } } } catch { } #endregion #region Не Лекарь, а мужик неподалёку) try { if (target.ActorSNO.Id == 205665) { var playersAffected = user.GetPlayersInRange(26f); foreach (Player player in playersAffected) { foreach (Player targetAffected in playersAffected) { player.InGameClient.SendMessage(new PlayEffectMessage() { ActorId = targetAffected.DynamicID, Effect = Effect.HealthOrbPickup }); } //every summon and mercenary owned by you must broadcast their green text to you /H_DANILO player.AddPercentageHP(100); } //player.UpdateExp(player.Attributes[Net.GS.Message.GameAttribute.Experience_Next]); } }catch { } #endregion #region Активация баннера игрока для телепортации try { var TeleportToPlayer = new Vector3D(); if (target.ActorSNO.Name == "Banner_Player_1") { foreach (var player in user.World.Players) { if (player.Value.PlayerIndex == 0) { if (player.Value.Position != user.Position) { TeleportToPlayer = player.Value.Position; } } Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.PlayerIndex); } if (TeleportToPlayer.Z != 0) { user.Teleport(TeleportToPlayer); } } else if (target.ActorSNO.Name == "Banner_Player_2") { foreach (var player in user.World.Players) { if (player.Value.PlayerIndex == 1) { if (player.Value.Position != user.Position) { TeleportToPlayer = player.Value.Position; } } Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position); } if (TeleportToPlayer.Z != 0) { user.Teleport(TeleportToPlayer); } } else if (target.ActorSNO.Name == "Banner_Player_3") { foreach (var player in user.World.Players) { if (player.Value.PlayerIndex == 2) { if (player.Value.Position != user.Position) { TeleportToPlayer = player.Value.Position; } } Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position); } if (TeleportToPlayer.Z != 0) { user.Teleport(TeleportToPlayer); } } else if (target.ActorSNO.Name == "Banner_Player_4") { foreach (var player in user.World.Players) { if (player.Value.PlayerIndex == 3) { if (player.Value.Position != user.Position) { TeleportToPlayer = player.Value.Position; } } Logger.Warn("Перенос пользователя с помощью флага к игроку № {0}", player.Value.Position); } if (TeleportToPlayer.Z != 0) { user.Teleport(TeleportToPlayer); } } } catch { } #endregion #region Квестовые события #region Северные ворота try { if (target.ActorSNO.Id == 121241) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 5) { dbQuestProgress.StepOfQuest = 6; Dialog72221 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (Dialog72221 == true) { //user.World.Game.Quests.Advance(72221); user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.InteractWithActor, 121241); Dialog72221 = false; } } } catch { } #endregion #region азговор с кузнецом try { if (target.ActorSNO.Id == 65036) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { dbQuestProgress.ActiveQuest = 72221; if (dbQuestProgress.StepOfQuest == 1) { Dialog72221 = true; dbQuestProgress.StepOfQuest = 2; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (Dialog72221 == true) { Dialog72221 = false; StartConversation(target.World, 198292); } } } catch { } #endregion #region Выход через шкаф) try { if (target.ActorSNO.Id == 188743) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72095) { dbQuestProgress.ActiveQuest = 72095; if (dbQuestProgress.StepOfQuest == 14) { dbQuestProgress.StepOfQuest = 15; UseDoor72095 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.UseDoor72095 == true) { user.World.Game.Quests.Advance(72095); UseDoor72095 = false; } // 136291 - Houser_Door_trOut_newTristram } } catch { } #endregion #region Двери собора try { if (target.DynamicID == 1543 || target.ActorSNO.Id == 167289) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72095) { dbQuestProgress.ActiveQuest = 72095; if (dbQuestProgress.StepOfQuest == 9) { dbQuestProgress.StepOfQuest = 10; UseDoor72095 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.UseDoor72095 == true) { user.World.Game.Quests.Advance(72095); UseDoor72095 = false; } } } catch {} #endregion #region Котёл в хижине try { if (target.DynamicID == 1859 || target.ActorSNO.Id == 131123) { //Отлавливаем котёл в потойном подвале foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72095) { dbQuestProgress.ActiveQuest = 72095; if (dbQuestProgress.StepOfQuest == 6) { //dbQuestProgress.StepOfQuest = 7; UseActorOnKotel72095 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.UseActorOnKotel72095 == true) { StartConversation(user.World, 167115); user.World.Game.Quests.Advance(72095); UseActorOnKotel72095 = false; } } } catch {} #endregion #region Корона короля-скелета try { if (target.ActorSNO.Id == 159446) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 9) { dbQuestProgress.StepOfQuest = 10; Dialog72221 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (Dialog72221 == true) { //user.World.Game.Quests.Advance(72221); string BrokenCrown = "SkeletonKing_BrokenCrown"; //target.Destroy(); foreach (var player in user.World.Players) { var item = Items.ItemGenerator.Cook(player.Value, BrokenCrown); item.EnterWorld(player.Value.Position); } user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.PossessItem, -1); Dialog72221 = false; } } else if (target.ActorSNO.Id == 92168) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 10) { user.World.Game.Quests.Advance(72221); } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } } else if (target.ActorSNO.Id == 199642) { foreach (var player in user.World.Players) { var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Value.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 9) { dbQuestProgress.StepOfQuest = 10; Dialog72221 = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (Dialog72221 == true) { //user.World.Game.Quests.Advance(72221); string BrokenCrown = "SkeletonKing_BrokenCrown"; //target.Destroy(); foreach (var player in user.World.Players) { var item = Items.ItemGenerator.Cook(player.Value, BrokenCrown); item.EnterWorld(player.Value.Position); } user.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.PossessItem, -1); Dialog72221 = false; } } } catch { } #endregion #endregion #region Книги try { #region Книга Лии - первый журнал if (target.ActorSNO.Id == 86817) { Vector3D PointToItem = new Vector3D(93.56282f, 111.3167f, 0.5335404f); //LeahJorunal First Book string Leah_Diary_in_room = "LeahJournal_PartOne"; target.Destroy(); foreach (var player in user.World.Players) { var item = Items.ItemGenerator.Cook(player.Value, Leah_Diary_in_room); item.EnterWorld(PointToItem); } } #endregion #region История нового тристрама else if (target.ActorSNO.Id == 230232) { Vector3D PointToItem = new Vector3D(84.39566f, 100.7473f, 7.900131f); string HistoryNewTristram = "Lore_NewTRistram"; target.Destroy(); foreach (var player in user.World.Players) { var item = Items.ItemGenerator.Cook(player.Value, HistoryNewTristram); item.EnterWorld(PointToItem); } } #endregion } catch { } #endregion if (implementation != null) { return(RunPower(user, implementation, target, targetPosition, targetMessage)); } else { return(false); } }
public override void OnTargeted(Player player, TargetMessage message) { }
private void OnToonTargetChange(GameClient client, TargetMessage message) { if (message.Field1 == 0x77F20036) { this.EnterInn(client); return; } else if (client.ObjectIdsSpawned == null || !client.ObjectIdsSpawned.Contains(message.Field1)) return; client.ObjectIdsSpawned.Remove(message.Field1); var killAni = new int[]{ 0x2cd7, 0x2cd4, 0x01b378, 0x2cdc, 0x02f2, 0x2ccf, 0x2cd0, 0x2cd1, 0x2cd2, 0x2cd3, 0x2cd5, 0x01b144, 0x2cd6, 0x2cd8, 0x2cda, 0x2cd9 }; client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0x0, Field2 = 0x2, }); client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0xc, }); client.SendMessage(new PlayHitEffectMessage() { Id = 0x7b, Field0 = message.Field1, Field1 = 0x789E00E2, Field2 = 0x2, Field3 = false, }); client.SendMessage(new FloatingNumberMessage() { Id = 0xd0, Field0 = message.Field1, Field1 = 9001.0f, Field2 = 0, }); client.SendMessage(new ANNDataMessage() { Id = 0x6d, Field0 = message.Field1, }); int ani = killAni[RandomHelper.Next(killAni.Length)]; Logger.Info("Ani used: " + ani); client.SendMessage(new PlayAnimationMessage() { Id = 0x6c, Field0 = message.Field1, Field1 = 0xb, Field2 = 0, tAnim = new PlayAnimationMessageSpec[1] { new PlayAnimationMessageSpec() { Field0 = 0x2, Field1 = ani, Field2 = 0x0, Field3 = 1f } } }); client.PacketId += 10 * 2; client.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = client.PacketId, }); client.SendMessage(new ANNDataMessage() { Id = 0xc5, Field0 = message.Field1, }); client.SendMessage(new AttributeSetValueMessage { Id = 0x4c, Field0 = message.Field1, Field1 = new NetAttributeKeyValue { Attribute = GameAttribute.Attributes[0x4d], Float = 0 } }); client.SendMessage(new AttributeSetValueMessage { Id = 0x4c, Field0 = message.Field1, Field1 = new NetAttributeKeyValue { Attribute = GameAttribute.Attributes[0x1c2], Int = 1 } }); client.SendMessage(new AttributeSetValueMessage { Id = 0x4c, Field0 = message.Field1, Field1 = new NetAttributeKeyValue { Attribute = GameAttribute.Attributes[0x1c5], Int = 1 } }); client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0xc, }); client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0x37, }); client.SendMessage(new PlayHitEffectMessage() { Id = 0x7b, Field0 = message.Field1, Field1 = 0x789E00E2, Field2 = 0x2, Field3 = false, }); client.PacketId += 10 * 2; client.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = client.PacketId, }); }
public override void OnTargeted(Mooege.Core.GS.Player.Player player, TargetMessage message) { World world = this.World.Game.GetWorld(this.Destination.WorldSNO); if (world != null) player.TransferTo(world, this.TargetPos); else Logger.Warn("Portal's destination world does not exist (WorldSNO = {0})", this.Destination.WorldSNO); }
// Message handlers private void OnObjectTargeted(GameClient client, TargetMessage message) { Actor actor = this.World.GetActor(message.TargetID); if (actor != null) { actor.OnTargeted(this, message); } else { //Logger.Warn("Player targeted an invalid object (ID = {0})", message.TargetID); } }
private void OnToonTargetChange(GameClient client, TargetMessage message) { Logger.Info("Player interaction with " + message.AsText()); Portal p=GetPortal(message.Field1); if (p!=null) { //we have a transition between worlds here ChangeToonWorld(client, p.TargetWorldID, p.TargetPos); //targetpos will always be valid as otherwise the portal wouldn't be targetable return; } else if (client.ObjectIdsSpawned == null || !client.ObjectIdsSpawned.Contains(message.Field1)) return; client.ObjectIdsSpawned.Remove(message.Field1); var killAni = new int[]{ 0x2cd7, 0x2cd4, 0x01b378, 0x2cdc, 0x02f2, 0x2ccf, 0x2cd0, 0x2cd1, 0x2cd2, 0x2cd3, 0x2cd5, 0x01b144, 0x2cd6, 0x2cd8, 0x2cda, 0x2cd9 }; client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0x0, Field2 = 0x2, }); client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0xc, }); client.SendMessage(new PlayHitEffectMessage() { Id = 0x7b, Field0 = message.Field1, Field1 = 0x789E00E2, Field2 = 0x2, Field3 = false, }); client.SendMessage(new FloatingNumberMessage() { Id = 0xd0, Field0 = message.Field1, Field1 = 9001.0f, Field2 = 0, }); client.SendMessage(new ANNDataMessage() { Id = 0x6d, Field0 = message.Field1, }); int ani = killAni[RandomHelper.Next(killAni.Length)]; Logger.Info("Ani used: " + ani); client.SendMessage(new PlayAnimationMessage() { Id = 0x6c, Field0 = message.Field1, Field1 = 0xb, Field2 = 0, tAnim = new PlayAnimationMessageSpec[1] { new PlayAnimationMessageSpec() { Field0 = 0x2, Field1 = ani, Field2 = 0x0, Field3 = 1f } } }); client.PacketId += 10 * 2; client.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = client.PacketId, }); client.SendMessage(new ANNDataMessage() { Id = 0xc5, Field0 = message.Field1, }); client.SendMessage(new AttributeSetValueMessage { Id = 0x4c, Field0 = message.Field1, Field1 = new NetAttributeKeyValue { Attribute = GameAttribute.Attributes[0x4d], Float = 0 } }); client.SendMessage(new AttributeSetValueMessage { Id = 0x4c, Field0 = message.Field1, Field1 = new NetAttributeKeyValue { Attribute = GameAttribute.Attributes[0x1c2], Int = 1 } }); client.SendMessage(new AttributeSetValueMessage { Id = 0x4c, Field0 = message.Field1, Field1 = new NetAttributeKeyValue { Attribute = GameAttribute.Attributes[0x1c5], Int = 1 } }); client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0xc, }); client.SendMessage(new PlayEffectMessage() { Id = 0x7a, Field0 = message.Field1, Field1 = 0x37, }); client.SendMessage(new PlayHitEffectMessage() { Id = 0x7b, Field0 = message.Field1, Field1 = 0x789E00E2, Field2 = 0x2, Field3 = false, }); client.PacketId += 10 * 2; client.SendMessage(new DWordDataMessage() { Id = 0x89, Field0 = client.PacketId, }); }
public override void OnTargeted(Player player, TargetMessage message) { Logger.Debug(" (OnTargeted) the npc has dynID {0}", DynamicID); player.SelectedNPC = this; var vendor = player.SelectedNPC as Vendor; var count = Interactions.Count + Conversations.Count; if (count == 0) { return; } // If there is only one conversation option, immediatly select it without showing menu if (Interactions.Count == 0 && Conversations.Count == 1 && this != vendor) { player.Conversations.StartConversation(Conversations[0].ConversationSNO); Conversations[0].MarkAsRead(); UpdateConversationList(); return; } if (Interactions.Count == 0 & Conversations.Count > 0) { int AllDialogs = 0; ConversationManager Manager = new ConversationManager(player, this.World.Game.Quests); foreach (var ConvSNO in Conversations) { if (new Conversation(ConvSNO.ConversationSNO, player, Manager).asset.ConversationType == NullD.Common.MPQ.FileFormats.ConversationTypes.AmbientGossip) { AllDialogs++; } } Manager = null; bool HaveUnReaded = false; if (AllDialogs == Conversations.Count) { if (Conversations.Count > 0 & Attributes[GameAttribute.Conversation_Icon, 0] != 1 & !(this is Vendor) & !(this is Healer)) { foreach (var conv in this.Conversations) { if (!conv.Read) { Attributes[GameAttribute.Conversation_Icon, 0] = 3; HaveUnReaded = true; player.Conversations.StartConversation(conv.ConversationSNO); conv.Read = true; } } if (!HaveUnReaded) { Attributes[GameAttribute.Conversation_Icon, 0] = 0; } Attributes[Net.GS.Message.GameAttribute.MinimapActive] = true; } //player.Conversations.StartConversation(Conversations[DiIiS.Common.Helpers.Math.RandomHelper.Next(0,Conversations.Count-1)].ConversationSNO); //Conversations[0].MarkAsRead(); UpdateConversationList(); return; } } NPCInteraction[] npcInters = new NPCInteraction[count]; var it = 0; foreach (var conv in Conversations) { if (this == vendor) { return; } else { npcInters[it] = conv.AsNPCInteraction(this, player); it++; } } foreach (var inter in Interactions) { npcInters[it] = inter.AsNPCInteraction(this, player); it++; } player.InGameClient.SendMessage(new NPCInteractOptionsMessage() { ActorID = this.DynamicID, tNPCInteraction = npcInters, Type = NPCInteractOptionsType.Normal }); // TODO: this has no effect, why is it sent? player.InGameClient.SendMessage(new NullD.Net.GS.Message.Definitions.Effect.PlayEffectMessage() { ActorId = this.DynamicID, Effect = Net.GS.Message.Definitions.Effect.Effect.Unknown36 }); if (this.ActorSNO.Id != 203030 || //Лея в подвале this.ActorSNO.Id != -1) { UpdateConversationList(); } }
public override void OnTargeted(Mooege.Core.GS.Player.Player player, TargetMessage message) { //this.Die(player); //Temp route to powermanager }
public override void OnTargeted(Player player, TargetMessage message) { this.Die(player); }
public override void OnTargeted(Player player, TargetMessage message) { Logger.Debug("(OnTargeted) Portal has been activated "); var world = this.World.Game.GetWorld(this.Destination.WorldSNO); var now_world = player.World; if (this.Destination.WorldSNO == 71150) { if (this.ActorSNO.Id == 241660) { Vector3D Point = new Vector3D(2867.382f, 2398.66f, 1.813717f); player.Teleport(Point); //OnListenerToEnterGraveyard var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID); if (dbQuestProgress.StepOfQuest == 6) { var ListenerEnterToGraveyard = Task <bool> .Factory.StartNew(() => OnListenerToEnterGraveyard(player, world)); ListenerEnterToGraveyard.ContinueWith(delegate { Logger.Debug("Enter to Road Objective done "); }); } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.ActorSNO.Id == 241661) { Vector3D Point = new Vector3D(2870.336f, 2498.836f, 3.700585f); player.Teleport(Point); } } if (this.Destination.WorldSNO == 72637) { // Вход в Оскверненный склеп var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 7) { var Crypto = world.Game.GetWorld(72637); var ListenerEnterToBossZone = Task <bool> .Factory.StartNew(() => OnListenerToEnterBossScene(player, Crypto)); ListenerEnterToBossZone.ContinueWith(delegate { Logger.Debug("Founding Zone Objective done "); //156381 - Chancellor Eamon var Summoner = world.GetActorBySNO(5387); Crypto.SpawnMonster(156353, Summoner.Position); var ChancellorEamon = world.GetActorBySNO(156353); ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar] = true; ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true; // DOES NOT WORK it should be champion affixes or shit of this kind ... // Увеличиваем здоровье босса! ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Max] = 200f; ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Cur] = 200f; ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Movement_Scalar_Reduction_Percent] -= 10f; ChancellorEamon.Attributes[Net.GS.Message.GameAttribute.Quest_Monster] = true; List <uint> Boss = new List <uint> { }; Boss.Add(ChancellorEamon.DynamicID); var BossKillEvent = Task <bool> .Factory.StartNew(() => OnKillListenerBossEamon(Boss, Crypto)); BossKillEvent.ContinueWith(delegate { dbQuestProgress.StepOfQuest = 9; world.Game.Quests.Advance(72221); }); }); } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.Destination.WorldSNO == 62751) { //Enter в Adrian's Hut bool QuestEnter = false; var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72095) { dbQuestProgress.ActiveQuest = 72095; if (dbQuestProgress.StepOfQuest == 5) { dbQuestProgress.StepOfQuest = 6; QuestEnter = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); if (QuestEnter == true) { world.Game.Quests.Advance(72095); QuestEnter = false; } } if (this.Destination.WorldSNO == 50579) { //Enter в Cathedral level 1 bool QuestEnter = false; var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72095) { dbQuestProgress.ActiveQuest = 72095; if (dbQuestProgress.StepOfQuest == 10) { dbQuestProgress.StepOfQuest = 11; QuestEnter = true; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); if (QuestEnter == true) { world.Game.Quests.Advance(72095); QuestEnter = false; } var FakePortal = world.GetActorBySNO(168932); Portal RealPortal = new Portal(world.Game.GetWorld(50579), 5648, world.Game.GetWorld(60713).StartingPoints[0].Tags); // FakePortal.Destroy(); //80652 Vector3D RealPosition = new Vector3D(643.384f, 339.6074f, -6.970252f); RealPortal.Destination = new ResolvedPortalDestination { WorldSNO = 60713, DestLevelAreaSNO = 60885, StartingPointActorTag = -102 }; RealPortal.EnterWorld(FakePortal.Position); } if (this.Destination.WorldSNO == 136441) { //Входим в погреб проклятых var dest = world.Game.GetWorld(136441); var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72221) { if (dbQuestProgress.StepOfQuest == 2) { //98888 - BlacksmithWife //85900 - Mira Eamon Monster //174023,204605,204615,204607,204608,204606,204616,174023,204605 //6646 - Ravenous Dead List <uint> Deadly = new List <uint> { }; List <uint> Boss = new List <uint> { }; #region Собираем всех! var Preminions1 = dest.GetActorsBySNO(174023); var Preminions2 = dest.GetActorsBySNO(204605); var Preminions3 = dest.GetActorsBySNO(204615); var Preminions4 = dest.GetActorsBySNO(204607); var Preminions5 = dest.GetActorsBySNO(204608); var Preminions6 = dest.GetActorsBySNO(204606); var Preminions7 = dest.GetActorsBySNO(204616); var Preminions8 = dest.GetActorsBySNO(174023); var Preminions9 = dest.GetActorsBySNO(204605); var PreBoss = dest.GetActorBySNO(98888); #endregion #region Убираем мирных и заменяем их злыми) foreach (var minion in Preminions1) { dest.SpawnMonster(6646, minion.Position); dest.Leave(minion); } foreach (var minion in Preminions2) { dest.SpawnMonster(6646, minion.Position); dest.Leave(minion); } foreach (var minion in Preminions3) { dest.SpawnMonster(6646, minion.Position); dest.Leave(minion); } foreach (var minion in Preminions4) { dest.SpawnMonster(6646, minion.Position); dest.Leave(minion); } foreach (var minion in Preminions5) { dest.SpawnMonster(6646, minion.Position); dest.Leave(minion); } foreach (var minion in Preminions6) { dest.SpawnMonster(6646, minion.Position); dest.Leave(minion); } foreach (var minion in Preminions7) { dest.SpawnMonster(6646, minion.Position); dest.Leave(minion); } foreach (var minion in Preminions8) { dest.SpawnMonster(6646, minion.Position); dest.Leave(minion); } foreach (var minion in Preminions9) { dest.SpawnMonster(6646, minion.Position); dest.Leave(minion); } #endregion #region Заполняем массив монстрами var Minions = dest.GetActorsBySNO(6646); foreach (var Minion in Minions) { Deadly.Add(Minion.DynamicID); } #endregion var DeadlyKillEvent = Task <bool> .Factory.StartNew(() => OnKillListenerDeadly(Deadly, dest)); DeadlyKillEvent.ContinueWith(delegate { if (dbQuestProgress.StepOfQuest == 2) { world.Game.Quests.Advance(72221); dest.SpawnMonster(85900, PreBoss.Position); dest.Leave(PreBoss); var BOSSMira = dest.GetActorBySNO(85900); // Пытаемся привязать статус босса! BOSSMira.Attributes[Net.GS.Message.GameAttribute.Using_Bossbar] = true; BOSSMira.Attributes[Net.GS.Message.GameAttribute.InBossEncounter] = true; // DOES NOT WORK it should be champion affixes or shit of this kind ... // Увеличиваем здоровье босса! BOSSMira.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Max] = 200f; BOSSMira.Attributes[Net.GS.Message.GameAttribute.Hitpoints_Cur] = 200f; BOSSMira.Attributes[Net.GS.Message.GameAttribute.Movement_Scalar_Reduction_Percent] -= 10f; BOSSMira.Attributes[Net.GS.Message.GameAttribute.Quest_Monster] = true; Boss.Add(BOSSMira.DynamicID); var BossSmithWifeKillEvent = Task <bool> .Factory.StartNew(() => OnKillListenerBossSmithWife(Boss, dest)); BossSmithWifeKillEvent.ContinueWith(delegate { world.Game.Quests.Advance(72221); dbQuestProgress.StepOfQuest = 4; }); } }); } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.Destination.WorldSNO == 60395) { //Enter to Drowned Temple } if (this.Destination.WorldSNO == 60713) { //Enter to Leoric Hall var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID); if (dbQuestProgress.StepOfQuest > 12 || dbQuestProgress.ActiveQuest != 72095) { var BookShelf = world.GetActorBySNO(5723); world.BroadcastIfRevealed(new Net.GS.Message.Definitions.Animation.SetIdleAnimationMessage { ActorID = BookShelf.DynamicID, AnimationSNO = AnimationSetKeys.Open.ID }, BookShelf); var minions = world.GetActorsBySNO(80652); foreach (var minion in minions) { minion.Destroy(); } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); } if (this.Destination.WorldSNO == 50582) { //Enter to Cathedral Level 2 Vector3D Point = new Vector3D(1146.33f, 1539.594f, 0.2f); if (world.Game.GetWorld(50582).StartingPoints.Count == 0) { player.ChangeWorld(player.World.Game.GetWorld(50582), Point); } } if (world == null) { Logger.Warn("Portal's destination world does not exist (WorldSNO = {0})", this.Destination.WorldSNO); return; } //Portal to New Tristram if (this.Destination.StartingPointActorTag == -100) { Vector3D ToPortal = new Vector3D(2988.73f, 2798.009f, 24.66344f); //Сохраняем в базу координаты для обратного портала. var dbPortalOfToon = DBSessions.AccountSession.Get <DBPortalOfToon>(player.Toon.PersistentID); var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID); dbPortalOfToon.WorldDest = now_world.WorldSNO.Id; dbPortalOfToon.X = this.Position.X; dbPortalOfToon.Y = this.Position.Y; dbPortalOfToon.Z = this.Position.Z; DBSessions.AccountSession.SaveOrUpdate(dbPortalOfToon); Logger.Warn("Data for back portal Saved."); if (player.World.Game.GetWorld(71150) != player.World) { try { if (player.ActiveHireling != null) { var HirelingToLeave = player.ActiveHireling; now_world.Leave(HirelingToLeave); } } catch { } if (dbQuestProgress.ActiveQuest == 72221 && dbQuestProgress.StepOfQuest == 10) { player.World.Game.Quests.NotifyQuest(72221, Mooege.Common.MPQ.FileFormats.QuestStepObjectiveType.EventReceived, -1); } player.ChangeWorld(player.World.Game.GetWorld(71150), ToPortal); } else { player.Teleport(ToPortal); } //Create Back Portal var TristramHome = player.World.Game.GetWorld(71150); var OldPortal = TristramHome.GetActorsBySNO(5648); foreach (var OldP in OldPortal) { OldP.Destroy(); } var ToHome = new Portal(player.World.Game.GetWorld(71150), 5648, player.World.Game.GetWorld(71150).StartingPoints[0].Tags); ToHome.Destination = new ResolvedPortalDestination { WorldSNO = dbPortalOfToon.WorldDest, DestLevelAreaSNO = 172, StartingPointActorTag = -101 }; // Название локации, не работает( ToHome.NameSNOId = now_world.WorldSNO.Id; ToHome.EnterWorld(ToPortal); DBSessions.AccountSession.Flush(); } else if (this.Destination.StartingPointActorTag == -101) { var dbPortalOfToon = DBSessions.AccountSession.Get <DBPortalOfToon>(player.Toon.PersistentID); Vector3D ToPortal = new Vector3D(dbPortalOfToon.X, dbPortalOfToon.Y, dbPortalOfToon.Z); var DestWorld = player.World.Game.GetWorld(dbPortalOfToon.WorldDest); var oldPortals = DestWorld.GetActorsBySNO(5648); foreach (var OldP in oldPortals) { // OldP.Destroy(); } if (player.World.Game.GetWorld(dbPortalOfToon.WorldDest) != player.World) { player.ChangeWorld(player.World.Game.GetWorld(dbPortalOfToon.WorldDest), ToPortal); } else { player.Teleport(ToPortal); } } else if (this.Destination.StartingPointActorTag == -102) { var dest = world.Game.GetWorld(60713); Vector3D Point = new Vector3D(237.3005f, 200.94f, 31.17498f); bool QuestEnter = false; var dbQuestProgress = DBSessions.AccountSession.Get <DBProgressToon>(player.Toon.PersistentID); if (dbQuestProgress.ActiveQuest == 72095) { dbQuestProgress.ActiveQuest = 72095; if (dbQuestProgress.StepOfQuest == 11) { dbQuestProgress.StepOfQuest = 12; QuestEnter = true; var minions = dest.GetActorsBySNO(80652); List <uint> SkilletKiller = new List <uint> { }; var CainBrains = world.GetActorBySNO(102386); foreach (var minion in minions) { SkilletKiller.Add(minion.DynamicID); var facingAngle = Actors.Movement.MovementHelpers.GetFacingAngle(minion, CainBrains.Position); minion.Move(CainBrains.Position, facingAngle); } var CainKillerEvent = Task <bool> .Factory.StartNew(() => OnKillListenerCain(SkilletKiller, dest)); CainKillerEvent.ContinueWith(delegate { if (dbQuestProgress.StepOfQuest == 12) { world.Game.Quests.Advance(72095); dbQuestProgress.StepOfQuest = 13; } }); } else { QuestEnter = false; } } DBSessions.AccountSession.SaveOrUpdate(dbQuestProgress); DBSessions.AccountSession.Flush(); if (QuestEnter == true) { world.Game.Quests.Advance(72095); QuestEnter = false; } player.ChangeWorld(player.World.Game.GetWorld(60713), Point); } else if (this.Destination.StartingPointActorTag == -103) { Vector3D Point = new Vector3D(1769.139f, 2914.95f, 20.16885f); player.ChangeWorld(player.World.Game.GetWorld(71150), Point); } else if (this.Destination.StartingPointActorTag == -104) { Vector3D Point = new Vector3D(1769.139f, 2914.95f, 20.16885f); player.ChangeWorld(player.World.Game.GetWorld(71150), Point); } else { var startingPoint = world.GetStartingPointById(this.Destination.StartingPointActorTag); if (startingPoint != null) { try { if (player.ActiveHireling != null) { var HirelingToLeave = player.ActiveHireling; now_world.Leave(HirelingToLeave); var NewTristram = player.InGameClient.Game.GetWorld(71150); var Leah_Back = NewTristram.GetActorByDynamicId(83); Leah_Back.EnterWorld(Leah_Back.Position); } } catch { } player.ChangeWorld(world, startingPoint); } else { Logger.Warn("Portal's tagged starting point does not exist (Tag = {0})", this.Destination.StartingPointActorTag); } } }
public override void OnTargeted(Player player, TargetMessage message) { player.InGameClient.SendMessage(new OpenSharedStashMessage((int)this.DynamicID)); }
public bool RunPower(Actor user, int powerSNO, uint targetId = uint.MaxValue, Vector3D targetPosition = null, TargetMessage targetMessage = null) { Actor target; if (targetId == uint.MaxValue) { target = null; } else { target = user.World.GetActorByDynamicId(targetId); if (target == null) { return(false); } targetPosition = target.Position; } // find and run a power implementation var implementation = PowerLoader.CreateImplementationForPowerSNO(powerSNO); if (target != null) { try { #region Выход через шкаф) if (target.ActorSNO.Id == 188743) { foreach (var player in user.World.Game.Players.Values) { if (player.PlayerIndex == 0 & player.Toon.ActiveQuest == 72095) { player.Toon.ActiveQuest = 72095; if (player.Toon.StepOfQuest == 14) { player.Toon.StepOfQuest = 15; player.Toon.StepIDofQuest = 32; user.World.Game.Quests.Advance(72095); } } } } #endregion #region Двери собора else if (target.DynamicID == 1543 || target.ActorSNO.Id == 167289) { foreach (var player in user.World.Game.Players.Values) { if (player.PlayerIndex == 0 & player.Toon.ActiveQuest == 72095) { player.Toon.ActiveQuest = 72095; if (player.Toon.StepOfQuest == 9) { player.Toon.StepOfQuest = 10; player.Toon.StepIDofQuest = 23; user.World.Game.Quests.Advance(72095); } } } } #endregion #region Выход через шкаф) else if (target.ActorSNO.Id == 188743) { foreach (var player in user.World.Players) { if (player.Value.Toon.ActiveQuest == 72095) { player.Value.Toon.ActiveQuest = 72095; if (player.Value.Toon.StepOfQuest == 14) { player.Value.Toon.StepOfQuest = 15; player.Value.Toon.StepIDofQuest = 32; user.World.Game.Quests.Advance(72095); } } } } #endregion } catch { } } if (implementation != null) { return(RunPower(user, implementation, target, targetPosition, targetMessage)); } else { return(false); } }
// Message handlers private void OnObjectTargeted(GameClient client, TargetMessage message) { Actor actor = this.World.GetActor(message.TargetID); if (actor != null) { if ((actor.GBHandle.Type == 1) && (actor.Attributes[GameAttribute.TeamID] == 10)) { this._lastMonsterAttackTick = this.InGameClient.Game.Tick; } actor.OnTargeted(this, message); CheckExpBonus(2); } else { //Logger.Warn("Player targeted an invalid object (ID = {0})", message.TargetID); } }
public override void OnTargeted(Mooege.Core.GS.Player.Player player, TargetMessage message) { //Logger.Trace("OnTargeted"); player.Inventory.PickUp(this); }