Quote:
Originally Posted by aydede
how can i make bot for farming mobs with aionscript on bard?
|
You write it?
Do you have one? Here's one to get you started... PLEASE TWEAK it to your needs, i only wrote it for my own, and my Bard is only level 30 so beyond those skills, you're on your own.
Also I didn't set up anything for group healing, or test the debuff very much
Code:
--- (Private Function) Check required healing for the entity.
function _Heal( Entity, IsPriority )
-- Retrieve the rechargeable health.
local HealthRecharge = Entity:GetHealthMaximum() - Entity:GetHealthMaximum();
-- Retrieve the state.
local EntityState = Entity:GetState();
-- Heal 1: Soothing Melody
if Helper:CheckAvailable( "Soothing Melody" ) and (( IsPriority and HealthRecharge >= 2526 ) or ( not IsPriority and Entity:GetHealth() < 60 )) then
Helper:CheckExecute( "Soothing Melody", Entity );
return false;
end
-- Heal 2: Chain
if Entity:GetID() == Player:GetID() and Helper:CheckAvailable( "Soothing Counterpoint" ) and (( IsPriority and Entity:GetHealth() < 40 ) or ( not IsPriority and Entity:GetHealth() < 50 )) then
Helper:CheckExecute( "Soothing Counterpoint" );
return false;
end
-- Mana 1: Resonating Melody
if Helper:CheckAvailable( "Resonating Melody" ) and (( IsPriority and Entity:GetMana() < 40 ) or ( not IsPriority and Entity:GetMana() < 50 )) then
Helper:CheckExecute( "Resonating Melody", Entity );
return false;
end
end
--- Perform the attack routine on the selected target.
function Attack( Entity, Range, Stunned )
--------------------------------------------------
-- H E A L I N G --
--------------------------------------------------
self:_Heal( Player, true );
--------------------------------------------------
-- A T T A C K (S) --
--------------------------------------------------
-- Initial Attack 2:
if Helper:CheckAvailable( "Syncopated Echo" ) then
Helper:CheckExecute( "Syncopated Echo" );
return false;
end
-- Chain Attack 1: Bright Strike
if Helper:CheckAvailable( "Bright Strike" ) then
Helper:CheckExecute( "Bright Strike" );
return false;
elseif Helper:CheckAvailable( "Bright Stroke" ) then
Helper:CheckExecute( "Bright Stroke" );
return false;
end
-- Chain Attack 2 Part I: Song Of Ice
if Helper:CheckAvailable( "Song of Ice" ) then
Helper:CheckExecute( "Song of Ice" );
return false;
elseif Helper:CheckAvailable( "Song of Fire" ) then
Helper:CheckExecute( "Song of Fire" );
return false;
elseif Helper:CheckAvailable( "Song of Earth" ) then
Helper:CheckExecute( "Song of Earth" );
return false;
end
--------------------------------------------------
-- H E A L I N G --
--------------------------------------------------
self:_Heal( Player, false );
--------------------------------------------------
-- N O R M A L A T T A C K (S) --
--------------------------------------------------
-- Normal Attack 1:
if Helper:CheckAvailable( "Pulse" ) then
Helper:CheckExecute( "Pulse" );
return false;
end
--------------------------------------------------
-- I N I T I A L A T T A C K (S) --
--------------------------------------------------
-- Initial Attack 1: Automatic Attack
if self.AttackStarted ~= Entity:GetID() then
self.AttackStarted = Entity:GetID();
Helper:CheckExecute( "Attack/Chat" );
return false;
end
-- Nothing was executed, continue with other functions.
return true;
end
--- Perform healing checks both in and our of combat.
--
-- [MENTION=1985011]param[/MENTION] bool Indicates whether or not the function is running before force checks.
-- [MENTION=326673]return[/MENTION] bool
function Heal( BeforeForce )
-- Nothing was executed, continue with other functions.
return true;
end
--- Perform the safety checks before moving to the next target.
--
-- [MENTION=326673]return[/MENTION] bool
function Pause()
--------------------------------------------------
-- H E A L I N G --
--------------------------------------------------
-- Heal 0: Non-Priority Healing
self:_Heal( Player, false );
--------------------------------------------------
-- B U F F I N G --
--------------------------------------------------
-- Check if the state checking timer has expired.
if ( self.StateBuffTime == nil or self.StateBuffTime < Time()) then
-- Retrieve the state.
local EntityState = Player:GetState();
-- Buff 1: Etude
if Helper:CheckAvailable( "Etude" ) and EntityState:GetState( "Etude" ) == nil then
Helper:CheckExecute( "Etude", Player );
return false;
end
if Helper:CheckAvailable( "Mvt. 3: Autumn" ) and EntityState:GetState( "Mvt. 3: Autumn" ) == nil then
Helper:CheckExecute( "Mvt. 3: Autumn", Player );
return false;
end
-- Buff 3: Promise of Wind
if Helper:CheckAvailable( "Protective Ode" ) and EntityState:GetState( Helper:CheckName( "Protective Ode" )) == nil then
Helper:CheckExecute( "Protective Ode", Player );
return false;
end
-- Update the state checking timer.
self.StateBuffTime = Time() + 1000;
end
-- Nothing was executed, continue with other functions.
return true;
end
function _CheckDebuff( Entity )
-- Retrieve the state for the current entity to inspect.
local EntityState = Entity:GetState();
-- Loop through the states only when we are available to dispel them. We still check for removed states!
if EntityState ~= nil and ( self.StateDispelTime == nil or self.StateDispelTime < Time()) then
-- Create the state array for the global entity storage and undispellable states if it does not exist.
if self.StateArray == nil or self.StateUndispellable == nil then
self.StateArray = {};
self.StateUndispellable = {};
end
-- Create the state array for the current entity if it does not exist.
if self.StateArray[Entity:GetID()] == nil then
self.StateArray[Entity:GetID()] = {};
end
-- Loop through the states to find which need to be removed.
for ID, Skill in DictionaryIterator( EntityState:GetList()) do
-- Check if the current skill is valid and has not been marked and undispellable.
if Skill ~= nil and Skill:IsDebuff() and ( self.StateUndispellable[Skill:GetID()] == nil or self.StateUndispellable[Skill:GetID()] < Time()) then
-- Check if this entity had the current skill effect on him
if self.StateArray[Entity:GetID()][Skill:GetID()] ~= nil and self.StateArray[Entity:GetID()][Skill:GetID()] == 2 then
self.StateUndispellable[Skill:GetID()] = Time() + 30000;
-- Remove the state from the entity.
else
-- Retrieve the magical state the current skill.
local RemoveMagical = Skill:IsMagical();
-- Check if we are required to change the magical state for the current skill.
if self.StateArray[Entity:GetID()][Skill:GetID()] ~= nil then
RemoveMagical = not RemoveMagical;
end
if ( RemoveMagical and Helper:CheckExecute( "Purifying Paean", Entity )) or ( not RemoveMagical and Helper:CheckExecute( "Sonicportation", Entity )) then
-- Change the state dispel timer to prevent dispel and cure mind from being used too quickly.
self.StateDispelTime = Time() + 500;
-- Track the current state of the dispel and cure mind to find undispellable states.
if self.StateArray[Entity:GetID()][Skill:GetID()] == nil then
self.StateArray[Entity:GetID()][Skill:GetID()] = 1;
return false;
else
self.StateArray[Entity:GetID()][Skill:GetID()] = 2;
return false;
end
end
end
end
end
-- Loop through the existing states to find which have been removed correctly.
for k,v in pairs( self.StateArray[Entity:GetID()] ) do
if v ~= nil and EntityState:GetState( k ) == nil then
self.StateArray[Entity:GetID()][k] = nil;
end
end
end
-- Return true to let the caller know this function completed.
return true;
end