diff --git a/RotationSolver/Rotations/Tank/GNB/GNB_Default.cs b/RotationSolver/Rotations/Tank/GNB/GNB_Default.cs index f8c94fc20..a85e019b9 100644 --- a/RotationSolver/Rotations/Tank/GNB/GNB_Default.cs +++ b/RotationSolver/Rotations/Tank/GNB/GNB_Default.cs @@ -15,6 +15,7 @@ internal sealed class GNB_Default : GNB_Base public override string RotationName => "Default"; protected override bool CanHealSingleSpell => false; + protected override bool CanHealAreaSpell => false; private protected override bool GeneralGCD(out IAction act) @@ -273,9 +274,7 @@ private bool CanUseBowShock(out IAction act) //������,������������������ȴ�� if (Player.HasStatus(true, StatusID.NoMercy) && SonicBreak.IsCoolingDown) return true; - } return false; } -} - +} \ No newline at end of file diff --git a/RotationSolver/Rotations/Tank/WAR/WAR_Default.cs b/RotationSolver/Rotations/Tank/WAR/WAR_Default.cs index 3eacef6be..d722015b4 100644 --- a/RotationSolver/Rotations/Tank/WAR/WAR_Default.cs +++ b/RotationSolver/Rotations/Tank/WAR/WAR_Default.cs @@ -41,30 +41,22 @@ private protected override bool GeneralGCD(out IAction act) //��㹥�� if (PrimalRend.CanUse(out act, mustUse: true) && !IsMoving) { - if (PrimalRend.Target.DistanceToPlayer() < 1) - { - return true; - } + if (PrimalRend.Target.DistanceToPlayer() < 1) return true; } - //�޻���� - //�������� if (SteelCyclone.CanUse(out act)) return true; - //ԭ��֮�� if (InnerBeast.CanUse(out act)) return true; - //Ⱥ�� if (MythrilTempest.CanUse(out act)) return true; if (Overpower.CanUse(out act)) return true; - //���� if (StormsEye.CanUse(out act)) return true; if (StormsPath.CanUse(out act)) return true; if (Maim.CanUse(out act)) return true; if (HeavySwing.CanUse(out act)) return true; - //�����ţ�����һ���ɡ� if (RSCommands.SpecialType == SpecialCommandType.MoveForward && MoveForwardAbility(1, out act)) return true; + if (Tomahawk.CanUse(out act)) return true; return false; @@ -77,57 +69,44 @@ private protected override bool DefenceSingleAbility(byte abilitiesRemaining, ou { if (TargetUpdater.HostileTargets.Count() > 1) { - //ԭ����ֱ��������10%�� + //10 if (RawIntuition.CanUse(out act)) return true; } - //���𣨼���30%�� + //30 if (Vengeance.CanUse(out act)) return true; - //���ڣ�����20%�� + //20 if (Rampart.CanUse(out act)) return true; - //ԭ����ֱ��������10%�� + //10 if (RawIntuition.CanUse(out act)) return true; } - //���͹��� - //ѩ�� if (Reprisal.CanUse(out act)) return true; - act = null; return false; } private protected override bool AttackAbility(byte abilitiesRemaining, out IAction act) { - //���� if (!Player.WillStatusEndGCD(3, 0, true, StatusID.SurgingTempest) || !MythrilTempest.EnoughLevel) { - //�� if (!InnerRelease.IsCoolingDown && Berserk.CanUse(out act)) return true; } if (Player.GetHealthRatio() < 0.6f) { - //ս�� if (ThrillofBattle.CanUse(out act)) return true; - //̩Ȼ���� ���̰��� if (Equilibrium.CanUse(out act)) return true; } - //�̸����Ѱ��� if (!HasTankStance && NascentFlash.CanUse(out act)) return true; - //ս�� if (Infuriate.CanUse(out act, emptyOrSkipCombo: true)) return true; - //��ͨ���� - //Ⱥɽ¡�� if (Orogeny.CanUse(out act)) return true; - //���� if (Upheaval.CanUse(out act)) return true; - //��㹥�� if (Onslaught.CanUse(out act, mustUse: true) && !IsMoving) return true; return false; diff --git a/RotationSolver/Updaters/ActionUpdater.cs b/RotationSolver/Updaters/ActionUpdater.cs index 6f5a0ab4f..08dad4ee1 100644 --- a/RotationSolver/Updaters/ActionUpdater.cs +++ b/RotationSolver/Updaters/ActionUpdater.cs @@ -92,11 +92,10 @@ internal unsafe static void UpdateActionInfo() { BluSlots[i] = ActionManager.Instance()->GetActiveBlueMageActionInSlot(i); } - UpdateWeaponTime(); UPdateMPTimer(); } - private static unsafe void UpdateWeaponTime() + internal static unsafe void UpdateWeaponTime() { var player = Service.ClientState.LocalPlayer; if (player == null) return; @@ -118,8 +117,8 @@ private static unsafe void UpdateWeaponTime() //确认能力技的相关信息 var interval = Service.Configuration.AbilitiesInterval; - var checkRemain = WeaponRemain + 0.1f - Service.Configuration.ActionAhead; - var checkElapsed = WeaponElapsed - 0.1f + Service.Configuration.ActionAhead; + var checkRemain = WeaponRemain; + var checkElapsed = WeaponElapsed; if (checkRemain < interval || WeaponElapsed == 0) { AbilityRemain = 0; diff --git a/RotationSolver/Updaters/MajorUpdater.cs b/RotationSolver/Updaters/MajorUpdater.cs index ad8e59565..e8564dc83 100644 --- a/RotationSolver/Updaters/MajorUpdater.cs +++ b/RotationSolver/Updaters/MajorUpdater.cs @@ -45,6 +45,9 @@ private static void FrameworkUpdate(Framework framework) SocialUpdater.UpdateSocial(); PreviewUpdater.UpdatePreview(); ActionUpdater.DoAction(); + + //Late for update weapon time. + Task.Run(ActionUpdater.UpdateWeaponTime); MacroUpdater.UpdateMacro(); } diff --git a/docs/ChineseServer/README.md b/docs/ChineseServer/README.md index 534a721b7..ec38b1157 100644 --- a/docs/ChineseServer/README.md +++ b/docs/ChineseServer/README.md @@ -10,4 +10,20 @@ 首先,我还是简要讲述一下我自己。我是普通一本的建筑学专业本科毕业生,目前从事有关建筑的研究。学可视化编程以及写代码均为我的业余爱好,别问我建筑生是怎么有这么多时间的。大概在2021年9月或者10月,受到了考研的压力和事实的打击后,以寻求释放压力为目的,室友推荐为索引,入坑了FF14国服。我获得了短暂快乐,但因为游戏水平不足惨遭出警,并自行寻找相关插件却并没有一个让我满意的后,`Auto Attack(以下简称AA)`在次年三月诞生了。这也是我第一次,尝试着结合各方面的知识的一个结果。那时候也刚刚好开始尝试阅读一些软工的书,就顺便以试验的方式用在了这个插件上。直到2022年10月份,我才开始愿意接受大家的Feedback以及PR。所以这款插件的开发时间应该不下于我的游戏时长,超过1000小时。 -关键词:`业余`,`试验` \ No newline at end of file +关键词:`业余`,`试验` + +## 插件性质 + +这部分内容我认为是`常识`,但是为了拉平大家的认知,不得不写一下。 + +开源社区的软件运作和公司的运作有着非常大的不同。公司是有雇主雇佣雇员完成项目的,雇员付出劳动力,雇主利用这些劳动力创造价值并承担风险。可以说雇员就是打工仔,没有决策权,要好好办事。 + +开源社区的几乎所有的产品都是由开发者自发的组成群体,并完成某项特定的工作。所以不存在雇佣关系,任何人也不能妨碍别的人做自由的开发工作。我记得之前和别的作者发生理念冲突的时候,我多次提出自己fork然后自己开发,就是说如果觉得我主导的仓库不好,就自己弄一个嘛,我的插件免费开源,随便搞的。不过都被拒绝了,所以还是愿意让我当主导的。 + +用一个通俗易懂的方式来讲述吧:公司的模式赚钱但不自由,开源社区的模式自由但不赚钱。可以理解为开源社区的项目就是一种自我娱乐,和下班放学了回家打游戏没有性质上的区别。 + +所以如果我是雇佣的形式的话,那么插件肯定要收费了,并且我也可以通过强制力要求员工完成某项工作,不愿意做就不给钱。但是我不想这样,我更希望大家能自主的进行创作,所以就是大家都是免费的劳动力,而我是最大的那个免费劳动力。 + +后话:我退出了,由别人主导了以后AA是什么样,相信大家都知道。 + +另外,开源社区的无私奉献精神,也会招来很多蛀虫,就是只索取不贡献的。虽然这种行为没有问题或错误,但是我觉得不道德。 \ No newline at end of file