PDA

View Full Version : TRSActionBar.setupAbilities (create a custom action bar loadout)



Clarity
01-22-2014, 11:29 AM
TRSActionBar.setupAbilities
Feedback appreciated :)
I created a function that can be used to assemble custom action bar loadouts. When added to the actionbar.simba include, it can be called in scripts as shown below:


actionbar.setupAbilities(
[point(ABILITY_SLICE, 1),
point(ABILITY_RAPID_FIRE, 2),
point(ABILITY_WRACK, 3),
point(ABILITY_BARRICADE, 4),
point(ABILITY_DEADSHOT, 5),
point(ABILITY_ASSAULT, 6)], true);


The above call produces the following results (low quality animation, test yourself if you want to see it for real :p):
http://oi39.tinypic.com/2hi9o42.jpg

Probably most useful at the moment for setting up combat scripts (more user-friendly since they don't have to do anything). All abilities supported. Format for calling is:
actionbar.setupAbilities([point(ABILITY_NAME_HERE, DESIRED_DESTINATION_SLOT_HERE), more points if desired], possessWorldEvent2Abilities (true or false))

Specifying whether you have World Event abilities is necessary because the slot selection is thrown off otherwise.

New type and constants added in the beginning of actionbar.simba:

{*
type abilityProperties
~~~~~~~~~~~~~~~

The ability type.
Used in TRSActionBar.setupAbilities();

*}

type
abilityProperties = record
style, columnID, rowID: Integer;
location: TBox;
end;

{*
const abilityNames
~~~~~~~~~~~~~~~

The ability type's constants (names).
Used in TRSActionBar.setupAbilities();

*}
{$IFNDEF CODEINSIGHT}
const
//Ability Styles
STYLE_ATTACK = 0;
STYLE_STRENGTH = 1;
STYLE_RANGED = 2;
STYLE_MAGIC = 3;
STYLE_DEFENSIVE = 4;
STYLE_CONSTITUTION = 5;

//Ability Names
//Attack
ABILITY_SLICE = 0;
ABILITY_SLAUGHTER = 1;
ABILITY_OVERPOWER = 2;
ABILITY_HAVOC = 3;
ABILITY_BACKHAND = 4;
ABILITY_SMASH = 5;
ABILITY_BARGE = 3;
ABILITY_FLURRY = 6;
ABILITY_SEVER = 7;
ABILITY_HURRICANE = 8;
ABILITY_MASSACRE = 9;
ABILITY_METEOR_STRIKE = 10;
ABILITY_BALANCED_STRIKE = 11;

//Strength
ABILITY_KICK = 12;
ABILITY_PUNISH = 13;
ABILITY_DISMEMBER = 14;
ABILITY_FURY = 15;
ABILITY_DESTROY = 16;
ABILITY_QUAKE = 17;
ABILITY_BERSERK = 18;
ABILITY_CLEAVE = 19;
ABILITY_ASSAULT = 20;
ABILITY_DECIMATE = 21;
ABILITY_PULVERISE = 22;
ABILITY_FRENZY = 23;

//Magic
ABILITY_WRACK = 24;
ABILITY_ASPHYXIATE = 25;
ABILITY_OMNIPOWER = 26;
ABILITY_DRAGON_BREATH = 27;
ABILITY_SONIC_WAVE = 28;
ABILITY_CONCENTRATED_BLAST = 29;
ABILITY_IMPACT = 30;
ABILITY_COMBUST = 31;
ABILITY_SURGE = 32;
ABILITY_DETONATE = 33;
ABILITY_CHAIN = 34;
ABILITY_WILD_MAGIC = 35;
ABILITY_METAMORPHOSIS = 36;
ABILITY_TSUNAMI = 37;
ABILITY_SUNSHINE = 38;

//Ranged
ABILITY_PIERCING_SHOT = 39;
ABILITY_SNAP_SHOT = 40;
ABILITY_DEADSHOT = 41;
ABILITY_SNIPE = 42;
ABILITY_DAZING_SHOT = 43;
ABILITY_NEEDLE_STRIKE = 44;
ABILITY_BINDING_SHOT = 45;
ABILITY_FRAGMENTATION_SHOT = 46;
ABILITY_ESCAPE = 47;
ABILITY_RAPID_FIRE = 48;
ABILITY_RICOCHET = 49;
ABILITY_BOMBARDMENT = 50;
ABILITY_INCENDIARY_SHOT = 51;
ABILITY_UNLOAD = 52;
ABILITY_DEATHS_SWIFTNESS = 53;

//Defensive
ABILITY_DEVOTION = 54;
ABILITY_ANTICIPATION = 55;
ABILITY_BASH = 56;
ABILITY_REVENGE = 57;
ABILITY_PROVOKE = 58;
ABILITY_IMMORTALITY = 59;
ABILITY_FREEDOM = 60;
ABILITY_REFLECT = 61;
ABILITY_RESONANCE = 62;
ABILITY_REJUVENATE = 63;
ABILITY_DEBILITATE = 64;
ABILITY_PREPARATION = 65;
ABILITY_BARRICADE = 66;
ABILITY_NATURAL_INSTINCT = 67;

//Constitution
ABILITY_MOMENTUM = 68;
ABILITY_SACRIFICE = 69;
ABILITY_TRANSFIGURE = 70;
ABILITY_REGENERATE = 71;
ABILITY_INCITE = 72;
ABILITY_SINGLE_WAY_WILDERNESS = 73;
ABILITY_GUTHIXS_BLESSING = 74;
{$ENDIF}


Function Code:

(*
TRSActionBar.setupAbilities
~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block:: pascal

function TRSActionBar.setupAbilities(desiredSetup: TPointArray; possessWorldEvent2Abilities: boolean): boolean;

Adds abilities to the action bar as specified in a given TPointArray:
[point(ability name from constants list, desired destination slot for the ability), point(etc., etc.)]

PossessWorldEvent2Abilities should be true if the player has the three unlockable abilities, false if not.
Abilities earned from the World Wakes should not be requested unless the player has unlocked them.

Returns true when completed.

.. note::

- by Clarity
- Last Updated: 22 January 2014 by Clarity

Example:

.. code-block:: pascal
actionbar.setupAbilities(
[point(ABILITY_SINGLE_WAY_WILDERNESS, 1),
point(ABILITY_BARRICADE, 2),
point(ABILITY_TSUNAMI, 3),
point(ABILITY_RAPID_FIRE, 4),
point(ABILITY_PIERCING_SHOT, 5),
point(ABILITY_PROVOKE, 6),
point(ABILITY_SLICE, 7),
point(ABILITY_ASSAULT, 8),
point(ABILITY_GUTHIXS_BLESSING, 9)], false);

actionbar.setupAbilities(
[point(ABILITY_SACRIFICE, 1),
point(ABILITY_DEVOTION, 2),
point(ABILITY_TRANSFIGURE, 3)], true);
*)
function TRSActionBar.setupAbilities(desiredSetup: TPointArray; possessWorldEvent2Abilities: boolean): boolean;

var
desiredAbilityProperties: abilityProperties;
desiredAbilityName, desiredSlot, conditionColumnModifier, conditionRowModifier, i: Integer;
targetBarBox: TBox;
targetDragPoint: TPoint;

begin
result := false;
conditionColumnModifier := 0;
conditionRowModifier := 0;

if possessWorldEvent2Abilities then
begin
conditionColumnModifier := 1;
conditionRowModifier := 1;
end;

for i := 0 to high(desiredSetup) do
begin
desiredAbilityName := desiredSetup[i].X;
desiredSlot := desiredSetup[i].Y;

case desiredAbilityName of
//Attack
ABILITY_SLICE: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_SLAUGHTER: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_OVERPOWER: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_HAVOC: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_BACKHAND: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_SMASH: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_BARGE: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_FLURRY: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_SEVER: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_HURRICANE: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_MASSACRE: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_METEOR_STRIKE: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_BALANCED_STRIKE: begin
desiredAbilityProperties.style := STYLE_ATTACK;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 2;
end;

//Strength
ABILITY_KICK: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_PUNISH: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_DISMEMBER: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_FURY: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_DESTROY: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_QUAKE: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_BERSERK: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_CLEAVE: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_ASSAULT: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_DECIMATE: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_PULVERISE: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_FRENZY: begin
desiredAbilityProperties.style := STYLE_STRENGTH;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 2;
end;

//Magic
ABILITY_WRACK: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_ASPHYXIATE: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_OMNIPOWER: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_DRAGON_BREATH: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_SONIC_WAVE: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_CONCENTRATED_BLAST: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_IMPACT: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_COMBUST: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_SURGE: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_DETONATE: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_CHAIN: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_WILD_MAGIC: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_METAMORPHOSIS: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_TSUNAMI: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_SUNSHINE: begin
desiredAbilityProperties.style := STYLE_MAGIC;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 2;
end;

//Ranged
ABILITY_PIERCING_SHOT: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_SNAP_SHOT: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_DEADSHOT: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_SNIPE: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_DAZING_SHOT: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_NEEDLE_STRIKE: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_BINDING_SHOT: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_FRAGMENTATION_SHOT: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_ESCAPE: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_RAPID_FIRE: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_RICOCHET: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_BOMBARDMENT: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_INCENDIARY_SHOT: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_UNLOAD: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 3;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_DEATHS_SWIFTNESS: begin
desiredAbilityProperties.style := STYLE_RANGED;
desiredAbilityProperties.columnID := 4;
desiredAbilityProperties.rowID := 2;
end;

//Defensive
ABILITY_DEVOTION: begin
{World Event Ability} desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_ANTICIPATION: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 0 + conditionColumnModifier;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_BASH: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 1 + conditionColumnModifier;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_REVENGE: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 2 + conditionColumnModifier;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_PROVOKE: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 3 + conditionColumnModifier;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_IMMORTALITY: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 4 - (conditionColumnModifier * 4);
desiredAbilityProperties.rowID := 0 + conditionRowModifier;
end;
ABILITY_FREEDOM: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 0 + conditionColumnModifier; //1
desiredAbilityProperties.rowID := 1;
end;
ABILITY_REFLECT: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 1 + conditionColumnModifier;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_RESONANCE: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 2 + conditionColumnModifier;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_REJUVENATE: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 3 + conditionColumnModifier;
desiredAbilityProperties.rowID := 1;
end;
ABILITY_DEBILITATE: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 4 - (conditionColumnModifier * 4);
desiredAbilityProperties.rowID := 1 + conditionRowModifier;
end;
ABILITY_PREPARATION: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 0 + conditionColumnModifier;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_BARRICADE: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 1 + conditionColumnModifier;
desiredAbilityProperties.rowID := 2;
end;
ABILITY_NATURAL_INSTINCT: begin
desiredAbilityProperties.style := STYLE_DEFENSIVE;
desiredAbilityProperties.columnID := 2 + conditionColumnModifier;
desiredAbilityProperties.rowID := 2;
end;

//Constitution
ABILITY_MOMENTUM: begin
desiredAbilityProperties.style := STYLE_CONSTITUTION;
desiredAbilityProperties.columnID := 0;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_SACRIFICE: begin
{World Event Ability} desiredAbilityProperties.style := STYLE_CONSTITUTION;
desiredAbilityProperties.columnID := 1;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_TRANSFIGURE: begin
{World Event Ability} desiredAbilityProperties.style := STYLE_CONSTITUTION;
desiredAbilityProperties.columnID := 2;
desiredAbilityProperties.rowID := 0;
end;
ABILITY_REGENERATE: begin
desiredAbilityProperties.style := STYLE_CONSTITUTION;
desiredAbilityProperties.columnID := 1 + (conditionColumnModifier * 2);
desiredAbilityProperties.rowID := 0;
end;
ABILITY_INCITE: begin
desiredAbilityProperties.style := STYLE_CONSTITUTION;
desiredAbilityProperties.columnID := 2 + (conditionColumnModifier * 2);
desiredAbilityProperties.rowID := 0;
end;
ABILITY_SINGLE_WAY_WILDERNESS: begin
desiredAbilityProperties.style := STYLE_CONSTITUTION;
desiredAbilityProperties.columnID := 3 - (conditionColumnModifier * 3);
desiredAbilityProperties.rowID := 0 + conditionRowModifier;
end;
ABILITY_GUTHIXS_BLESSING: begin
desiredAbilityProperties.style := STYLE_CONSTITUTION;
desiredAbilityProperties.columnID := 4 - (conditionColumnModifier * 4);
desiredAbilityProperties.rowID := 0 + conditionRowModifier;
end;
end;

desiredAbilityProperties.location :=
intToBox(
588 + (desiredAbilityProperties.columnID * 42),
357 + (desiredAbilityProperties.rowID * 34),
602 + (desiredAbilityProperties.columnID * 42),
377 + (desiredAbilityProperties.rowID * 34));

case desiredAbilityProperties.style of

STYLE_ATTACK: begin
gameTabs.openTab(TAB_MELEE);
mouseBox(intToBox(591, 328, 602, 341), MOUSE_LEFT);
end
STYLE_STRENGTH: begin
gameTabs.openTab(TAB_MELEE);
mouseBox(intToBox(620, 328, 629, 341), MOUSE_LEFT);
end;
STYLE_RANGED: gameTabs.openTab(TAB_RANGED);
STYLE_MAGIC: begin
gameTabs.openTab(TAB_MAGIC);
mouseBox(intToBox(591, 328, 602, 341), MOUSE_LEFT);
end;
STYLE_CONSTITUTION: begin
gameTabs.openTab(TAB_DEFENSIVE);
mouseBox(intToBox(620, 328, 629, 341), MOUSE_LEFT);
end;
STYLE_DEFENSIVE: begin
gameTabs.openTab(TAB_DEFENSIVE);
mouseBox(intToBox(591, 328, 602, 341), MOUSE_LEFT);
end;

end;

wait(gaussRangeInt(300, 500));
mouseBox(desiredAbilityProperties.location);
targetBarBox := self.getSlotBox(desiredSlot);
targetDragPoint := targetBarBox.getGaussPoint();
wait(gaussRangeInt(300, 500));
dragMouse(targetDragPoint);
wait(gaussRangeInt(300, 500));

end;
result := true;
end;


It locates abilities based on their slot locations so if any new abilities are added it will be very easy to update.

I'm no expert so I don't know if this was the most efficient way to go about doing this, but I made something similar for a personal script and thought I'd make a fully usable function. If I did something stupid by all means let me know, haha.

Attached is the fully modified version of actionbar.simba for those who just want the modified include.
22772

The Mayor
01-22-2014, 11:48 AM
Nice. Euphemism wrote a whole bunch of functions for adding abilities in SRL5, but they never got converted to SRL6

https://github.com/SRL/SRL-5/blob/18b70d0c7dff0dce154be06abf6b8b2a36af3d3e/SRL/core/gametab.simba

Clarity
01-22-2014, 11:52 AM
Haha why am I not surprised. Very cool, would definitely be nice to add prayers and items, not just abilities, thanks for the forward I'll see about expanding this!