What's new
  • Visit Rebornbuddy
  • Visit Panda Profiles
  • Visit LLamamMagic
  • Visit Resources
  • Visit Downloads
  • Visit Portal
RebornBuddy Forums

Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

perfect balance not activating?

exaccuss

Active Member
Joined
Nov 10, 2013
Messages
1,021
I have tried stuff like Apply("Perfect Balance", r => !Core.Target.HasAura("Perfect Balance")) and Cast("Perfect Balance"), but it doesn't seem to make PF activate at all.
 
Apply("Perfect Balance", r => !Core.Player.HasMyAura("Perfect Balance"))

Try that.
 
still nothing.. perhaps my rotation is wrong?


// Flank Rotation Start
Cast("Snap Punch", r=> Core.Player.CurrentTarget.IsFlanking),
Cast("Twin Snakes", r=> Core.Player.CurrentTarget.IsFlanking),
Cast("Dragon Kick", r=> Core.Player.CurrentTarget.IsFlanking),
Apply("Perfect Balance", r => !Core.Player.HasMyAura("Perfect Balance"))

// Flank Rotation End
 
For my summoner buffs i had to actually put r => Core.Player for them to work, it might be the same issue here.

Apply("Perfect Balance", r => !Core.Player.HasMyAura("Perfect Balance"), r =>Core.Player)


Try that, if that doesn't work i can help troubleshoot when i get done at work.
 
Code:
#region ChangeLogs
/*
 * v1.0 December 7th, 2013
 * - Initial build
 * 
 * v1.1 December 8th, 2013
 * - Fix: Trying to find non existant party member.
 * - Fix: Change the ground casting to the latest.
 * - Performance: Added an update timer
 * 
 * v1.2 
 * - Function: Lower level AoE rotations
 * 
 * v1.3
 * - Fix: Ground target trying to attack when there's no enemy selected.
 * - Fix: Readjust priorities. Straight shot keeps getting superseeded by ballads.
 * - Change: Separate the ballad switches into Mage, Army, Foe. Not much use of Foe when there's no BLM.
 * 
 * v1.4
 * - Change: Party member in another map is considered null as well. Change the error message to reflect that.
 * - Change: Change attack pattern behaviour. Previous: Cast whatever is in the priority. Current: AoE until TP threshold then do single until TP recover.
 * - Function: Detect if you're currently moving. Don't try to ballad when you're moving.
 * 
 * Known error:
 * - Red error message when trying to attack. 
 *   Possible cause: Trying to cast skill on a dead enemy. 
 *   Note: The way the bot work(I think) is it queue/spam the next attack. So there's an attack in the queue but no target. Need to find how to flush the queue.
 * - Trying to cast ballad twice.
 *   Possible cause: Previous attempt at casting the ballad was interrupted.
 *   Note: The interrupted spell was interrupted so the bot tried to cast it again while the old one is still in the queue. Added a function to detect movement to minimize the happening but, still, needs to find out how to flush the queue. 
 *   
 * ToDo:
 * - Party member error.
 * - Retrieve variable values from external file.
 * - UI.
 * - On the fly changes to variables.
 * 
 */
#endregion

using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Windows.Forms;
using ff14bot;
using ff14bot.Behavior;
using ff14bot.Enums;
using ff14bot.Helpers;
using ff14bot.Managers;
using ff14bot.Navigation;
using ff14bot.Objects;
using TreeSharp;
using Action = TreeSharp.Action;

namespace Kupo.Rotations
{
    public class PugilistMonk : KupoRoutine
    {
        // Variables Start
        // Diagnostic purposes
        private static double m_checkTimer = 100; // Check party status every n miliseconds.

        // AoE
        private static bool m_useAOE = false; // Set to false to only use single target.
        private static int m_AOERange = 5; // Radius to check for other enemy.
        private static int m_AOEEnemy = 1; // How many other enemy before running the AoE rotation.
        private static int m_AOETP = 30; // In percent. Stop using the AoE rotation when our TP is lower than how many.

        private static bool m_useGroundSpell = false; // Set to false to not use any ground spells. Need to set separate from m_useAOE.
        private static bool m_useRainofDeath = false; // Set to false to not use Rain of Death(10% damage reduction). Need to set separate from m_useAOE.
        // Caveat: While separate from m_useAOE. It also control the AoE behaviour.
        // If m_useRainofDeath set to false. You will only do Wide Volley, if you have it, or Quick Nock.
        // Might be useful since Rain of Death cost 200TP

       
        // Helper variables. Don't change.
        private bool m_isMoving = false;
        private Vector3 m_oldLocation = Core.Player.Location;

        private DateTime m_startTime = DateTime.UtcNow;
        // Helper variables end

        private Composite CastGroundSpell(string spell, Selection<Vector3> onLocation, Selection<bool> reqs = null, int msLeft = 0, bool ignoreCanCast = false)
        {
            return
                new Decorator(
                    ret =>
                    {
                        if (reqs != null && !reqs(ret)) return false;

                        if (!ignoreCanCast && !Actionmanager.CanCast(spell, Core.Player.CurrentTarget)) return false;

                        if (Extensions.DoubleCastPreventionDict.Contains(Core.Player.CurrentTarget, spell)) return false;

                        if (!Core.Player.HasAura(spell, true, msLeft)) return true;

                        return true;
                    },
                    new Action(
                        ret =>
                        {
                            var castingSpell = Core.Player.SpellCastInfo;

                            if (castingSpell != null && castingSpell.SpellData.Name != spell) Actionmanager.StopCasting();

                            Logging.Write("Casting Ground Spell " + spell + " at " + onLocation(ret));
                            if (Actionmanager.DoActionLocation(spell, onLocation(ret)))
                            {
                                Extensions.UpdateDoubleCastDict(spell, Core.Player.CurrentTarget);
                            }
                        }));
        }

       
        

        public override int PullRange
        {
            get { return 20; }
        }

        public override ClassJobType[] Class
        {
            get { return new ClassJobType[] { ClassJobType.Pugilist, ClassJobType.Monk, }; }
        }

        protected override Composite CreatePreCombatBuffs()
        {
            return SummonChocobo();
        }

        protected override Composite CreateRest()
        {
            return DefaultRestBehavior(r => Core.Player.CurrentTPPercent);
        }

        protected override Composite CreatePull()
        {
            return new PrioritySelector(
                r => Actionmanager.InSpellInRangeLOS("Perfect Balance", Core.Target),
                new Decorator(r => (r as SpellRangeCheck?) == SpellRangeCheck.ErrorNotInRange, new Action(r => Navigator.MoveTo(Core.Target.Location))),
                Cast("Perfect Balance", r => (r as SpellRangeCheck?) == SpellRangeCheck.Success || (r as SpellRangeCheck?) == SpellRangeCheck.ErrorNotInFront)
            );
        }

        protected override Composite CreateCombatBuffs()
        {
            return new PrioritySelector(
                
                );
        }

        protected override Composite CreateCombat()
        {
            return new PrioritySelector(
                Cast("Internal Release", r => Actionmanager.LastSpell.Name == "Bootshine", r => Core.Player),
                Cast("Blood for Blood", r => Actionmanager.LastSpell.Name == "Dragon Kick", r => Core.Player),
                Cast("Featherfoot", r => Core.Player.CurrentHealthPercent < 50, r => Core.Player),
                Cast("Mantra", r => Core.Player.CurrentHealthPercent < 50, r => Core.Player),
                Cast("Bloodbath", r => Core.Player.CurrentHealthPercent < 50, r => Core.Player),
                Cast("Foresight", r => Core.Player.CurrentHealthPercent < 50, r => Core.Player),
                Cast("Second Wind", r => Core.Player.CurrentHealthPercent < 80, r => Core.Player),
                Cast("Invigorate", r => Core.Player.CurrentTPPercent < 50, r => Core.Player),
                  
                Cast("Snap Punch", r => Core.Player.HasMyAura("Perfect Balance"),
                Cast("Snap Punch", r => Core.Player.HasMyAura("Perfect Balance"),
                Cast("Snap Punch", r => Core.Player.HasMyAura("Perfect Balance"),
                Cast("Perfect Balance", r => !Core.Player.HasMyAura("Perfect Balance"), r =>Core.Player)

                

               
                );
        }
    }
}

I get this: [16:08:16.925 N] Currently a level 50 Monk[16:08:16.930 D] Reloading AssemblyLoader<ff14bot.AClasses.BotBase> - Initializing
[16:08:17.380 D] [BotManager] Botbases have been reloaded.
[16:08:17.380 D] Combat Assist v1.0.74.0
[16:08:17.380 D] Fishing v1.0.74.0
[16:08:17.380 D] Grinding v1.0.74.0
[16:08:17.380 D] Gathering v1.0.74.0
[16:08:17.398 D] Reloading AssemblyLoader<ff14bot.Interfaces.IBotPlugin> - Initializing
[16:08:17.815 D] Reloading AssemblyLoader<ff14bot.Interfaces.ICombatRoutine> - Initializing
[16:08:18.183 D] Compiler Error: c:\Users\Administrator\Desktop\New folder\Routines\Kupo\KupoRoutine.cs(14,7) : warning CS0105: The using directive for 'Kupo.Settings' appeared previously in this namespace
[16:08:18.183 D] Compiler Error: c:\Users\Administrator\Desktop\New folder\Routines\Kupo\Rotations\PugilistMonk.cs(177,18) : error CS1026: ) expected
 
Back
Top