For example, as soon as I begin casting Gfist, I want my priest to lex the target.
Attackskillslot has no triggers for when a party member casts a spell, neither does docommand. It seems that a macro is my only option.
However, the automacro trigger "spell" only supports triggering when the self or party member is the target if a spell. It does not seem to support triggering for skills cast by your party on other monsters or players.
I do not know how to rewrite the "if" statements in the code, or even which lines I need to edit. I understand the developers are busy and can't be expected to rewrite the code for me. I do understand C++ programming, however, and if someone could point me in the right direction I can edit the code myself.
I believe the following code is responsible for the "spell" trigger in automacro, please correct me if I am wrong.
Code: Select all
# checks for a spell casted on us/party members #########################
# uses: distance, judgeSkillArea (Utils?)
sub checkCast {
my ($cast, $args) = @_;
return 0 if $args->{sourceID} eq $accountID;
$cast = lc($cast);
my $party = ($cast =~ s/^party +//)?1:0;
my $pos = calcPosition($char);
my $target = (defined $args->{targetID})?$args->{targetID}:0;
my $source = $args->{sourceID};
return 0 if $target eq $source;
if (($target eq $accountID || ($pos->{x} == $args->{x} && $pos->{y} == $args->{y}) || distance($pos, $args) <= judgeSkillArea($args->{skillID})) && existsInList($cast, lc(Skill->new(idn => $args->{skillID})->getName()))) {
if (my $actor = $monstersList->getByID($source)) {
$varStack{".caster"} = "monster";
$varStack{".casterName"} = $actor->{name};
$varStack{".casterID"} = $actor->{binID};
$varStack{".casterPos"} = $actor->{pos_to}{x} ." ". $actor->{pos_to}{y};
$varStack{".casterDist"} = sprintf("%.1f", distance($pos, calcPosition($actor)))
}
elsif (my $actor = $playersList->getByID($source)) {
$varStack{".caster"} = "player";
$varStack{".casterName"} = (defined $actor->{name})?$actor->{name}:"Unknown";
$varStack{".casterID"} = $actor->{binID};
$varStack{".casterPos"} = $actor->{pos_to}{x} ." ". $actor->{pos_to}{y};
$varStack{".casterDist"} = sprintf("%.1f", distance($pos, calcPosition($actor)));
}
else {return 0}
$varStack{".casterSkill"} = Skill->new(idn => $args->{skillID})->getName();
$varStack{".casterTarget"} = $args->{x} ." ". $args->{y};
$varStack{".casterTargetName"} = $char->{name};
return 1
}
elsif ($party && existsInList($cast, lc(Skill->new(idn => $args->{skillID})->getName()))) {
return 0 if !$char->{'party'} || !%{$char->{'party'}};
if (my $actor = $monstersList->getByID($source)) {
foreach my Actor::Player $player (@{$playersList->getItems()}) {
next unless sameParty($player->{name});
if ($target eq $player->{ID} || ($player->{pos_to}{x} == $args->{x} && $player->{pos_to}{y} == $args->{y}) || distance($player->{pos}, $args) <= judgeSkillArea($args->{skillID})) {
$varStack{".caster"} = "monster";
$varStack{".casterName"} = $actor->{name};
$varStack{".casterID"} = $actor->{binID};
$varStack{".casterPos"} = $actor->{pos_to}{x} ." ". $actor->{pos_to}{y};
$varStack{".casterSkill"} = Skill->new(idn => $args->{skillID})->getName();
$varStack{".casterTarget"} = $args->{x} ." ". $args->{y};
$varStack{".casterTargetName"} = $player->{name};
$varStack{".casterDist"} = sprintf("%.1f", distance($pos, calcPosition($actor)));
return 1
}
}
}
elsif (my $actor = $playersList->getByID($source)) {
return 0 if sameParty($actor->{name});
foreach my Actor::Player $player (@{$playersList->getItems()}) {
next unless sameParty($player->{name});
if ($target eq $player->{ID} || ($player->{pos_to}{x} == $args->{x} && $player->{pos_to}{y} == $args->{y}) || distance($player->{pos}, $args) <= judgeSkillArea($args->{skillID})) {
$varStack{".caster"} = "player";
$varStack{".casterName"} = (defined $actor->{name})?$actor->{name}:"Unknown";
$varStack{".casterID"} = $actor->{binID};
$varStack{".casterPos"} = $actor->{pos_to}{x} ." ". $actor->{pos_to}{y};
$varStack{".casterSkill"} = Skill->new(idn => $args->{skillID})->getName();
$varStack{".casterTarget"} = $args->{x} ." ". $args->{y};
$varStack{".casterTargetName"} = $player->{name};
$varStack{".casterDist"} = sprintf("%.1f", distance($pos, calcPosition($actor)));
return 1
}
}
}
else {return 0}
}
else {return 0}
}