namespace Turbo.Plugins.LightningMod { using Turbo.Plugins.Default; using Turbo.Plugins.glq; using SharpDX.DirectInput; using System.Linq; using System; public class BarbarianGroundStompForBossPlugin : BasePlugin, IAfterCollectHandler, IInGameTopPainter, IKeyEventHandler { public IKeyEvent ToggleKeyEvent { get; set; } public IFont InfoFont { get; private set; } private string str_Info; private string str_running; private string str_tip; public bool Running { get; private set; } private bool isFuzhuBarbarian = false; private IPlayerSkill skillGroundStomp = null; private IWatch DelayTimer; private IPlayer shawang = null; public BarbarianGroundStompForBossPlugin() { Enabled = true; } public override void Load(IController hud) { base.Load(hud); ToggleKeyEvent = Hud.Input.CreateKeyEvent(true, Key.F3, false, false, false); InfoFont = Hud.Render.CreateFont("tahoma", 8, 255, 200, 200, 0, true, false, 255, 0, 0, 0, true); if (Hud.CurrentLanguage == Language.zhCN) { str_Info = "请先在“游戏选项”“按键绑定”中设置“强制移动”热键"; str_running = "正在自动踩大地践踏"; str_tip = "键自动踩大地践踏"; } else if (Hud.CurrentLanguage == Language.zhTW) { } else { } DelayTimer = Hud.Time.CreateWatch(); } public void OnKeyEvent(IKeyEvent keyEvent) { if (ToggleKeyEvent.Matches(keyEvent) && keyEvent.IsPressed && isFuzhuBarbarian) { Running = !Running; if (!Running && Hud.Game.RiftPercentage == 100) { DelayTimer.Stop(); } } } public void AfterCollect() { if (!Hud.Window.IsForeground) return; if (!Hud.Game.IsInGame) return; if (Hud.Game.IsLoading) return; isFuzhuBarbarian = !Hud.Game.Me.IsInTown && Hud.Game.Me.InGreaterRift && Hud.Game.Me.HeroClassDefinition.HeroClass == HeroClass.Barbarian && Hud.Game.NumberOfPlayersInGame > 1 && (Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.ChilaniksChain.Sno) && Hud.Game.Me.Powers.BuffIsActive(Hud.Sno.SnoPowers.PrideOfCassius.Sno));//获取自己是辅助野蛮人时 shawang = Hud.Game.Players.Where(p => p.CoordinateKnown && (p.HeroClassDefinition.HeroClass == HeroClass.Crusader &&//圣教军 p.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Crusader_HeavensFury)?.Rune == 4 //三光 && p.Powers.BuffIsActive(Hud.Sno.SnoPowers.ConventionOfElements.Sno))//元素戒指 ).FirstOrDefault(); if (!Running || !isFuzhuBarbarian) { Running = false; return; } if (!Hud.Interaction.IsHotKeySet(ActionKey.Move)) return;//未设置强制移动时不继续 if (Hud.Interaction.IsContinuousActionStarted(ActionKey.Move)) return;//按住强制移动时不继续 skillGroundStomp = Hud.Game.Me.Powers.GetUsedSkill(Hud.Sno.SnoPowers.Barbarian_GroundStomp); if (shawang != null) { //满进度时附近有BOSS的时,杀王玩家出了金轮阵切没激活金轮阵时靠近杀王玩家 var Boss = Hud.Game.AliveMonsters.FirstOrDefault(m => m.Rarity == ActorRarity.Boss && m.SummonerAcdDynamicId == 0); if (Boss == null) { if(DelayTimer.IsRunning) { DelayTimer.Stop(); } return; } IWorldCoordinate BossWorldCoordinate = Boss.FloorCoordinate;//获取BOSS坐标 IWorldCoordinate BossDirectionWorldCoordinate = PublicClassPlugin.GetLocationCrossCircle(Hud, Hud.Game.Me.FloorCoordinate, BossWorldCoordinate, 18, true);//获取BOSS在自己的方向坐标 if (skillGroundStomp != null) { if (!DelayTimer.IsRunning|| (DelayTimer.IsRunning && DelayTimer.ElapsedMilliseconds >= 50))//每100毫秒一次 { DelayTimer.Restart(); if(Boss.CentralXyDistanceToMe >= 22)//BOSS超出践踏范围时靠近 { Hud.Interaction.MouseMove(BossDirectionWorldCoordinate.ToScreenCoordinate().X, BossDirectionWorldCoordinate.ToScreenCoordinate().Y); Hud.Interaction.DoAction(ActionKey.Move); } else {//BOSS在24码内时自动践踏 if(!skillGroundStomp.IsOnCooldown && shawang.Powers.BuffIsActive(Hud.Sno.SnoPowers.ConventionOfElements.Sno) && PublicClassPlugin.IsElementReadySoon(Hud,1,shawang)) Hud.Interaction.DoAction(skillGroundStomp.Key, skillGroundStomp.Key == ActionKey.LeftSkill); if(skillGroundStomp.Key == ActionKey.LeftSkill) Hud.Interaction.ShiftUp(); } } } } } public void PaintTopInGame(ClipState clipState) { if (clipState != ClipState.AfterClip) return; if (isFuzhuBarbarian) { if(!Hud.Interaction.IsHotKeySet(ActionKey.Move)) { InfoFont.DrawText(str_Info, Hud.Game.Me.FloorCoordinate.ToScreenCoordinate().X - InfoFont.GetTextLayout(str_Info).Metrics.Width / 2, Hud.Game.Me.FloorCoordinate.ToScreenCoordinate().Y, true); return; } if (Hud.Game.RiftPercentage == 100 && shawang != null) { if (Running) { InfoFont.DrawText(str_running, Hud.Game.Me.FloorCoordinate.ToScreenCoordinate().X - InfoFont.GetTextLayout(str_running).Metrics.Width / 2, Hud.Game.Me.FloorCoordinate.ToScreenCoordinate().Y, true); } else { InfoFont.DrawText(ToggleKeyEvent.Key + str_tip, Hud.Game.Me.FloorCoordinate.ToScreenCoordinate().X - InfoFont.GetTextLayout(str_tip).Metrics.Width / 2, Hud.Game.Me.FloorCoordinate.ToScreenCoordinate().Y, true); } } } } } }