Code
//! zinc
library HealBlink {
constant integer ABILITY = 'A000';
constant real SQUARE_WIDTH = 5625.;//75^2
constant real HEAL = 150.;
constant group G = CreateGroup();
function onInit() {
trigger trig = CreateTrigger();
integer i = 0;
do {
TriggerRegisterPlayerUnitEvent(trig, Player(i),
EVENT_PLAYER_UNIT_SPELL_EFFECT, null);
i += 1;
} while (i < 16);
TriggerAddCondition(trig,
function() -> boolean {
return GetSpellAbilityId() == ABILITY;
}
);
TriggerAddAction(trig,
function() {
unit u = GetTriggerUnit(), u2;
player p = GetOwningPlayer(u);
real x = GetWidgetX(u), y = GetWidgetY(u),
tx = GetSpellTargetX(), ty = GetSpellTargetY(),
k = (y - ty) / (x - tx), b = y - k * x,
k1 = -1. / k, b1;
GroupEnumUnitsInRange(G, (x + tx) * .5, (y + ty) * .5,
SquareRoot((x - tx) * (x - tx) + (y - ty) * (y - ty)) * .5, null);
while (true) {
u2 = FirstOfGroup(G);
if (u2 == null) { break; }
GroupRemoveUnit(G, u2);
if (IsUnitAlly(u2, p)) {
tx = GetWidgetX(u2);
ty = GetWidgetY(u2);
b1 = ty - k1 * tx;
x = (b1 - b) / (k - k1);
y = k * x + b;
if ((x - tx) * (x - tx) + (y - ty) * (y - ty) <= SQUARE_WIDTH) {
SetWidgetLife(u2, GetWidgetLife(u2) + HEAL);
}
}
}
u = null; p = null;
}
);
trig = null;
}
}
//! endzinc
Лечит всех союзников от начальной до конечной точки блинка. Написано на ZINC'е, нужен JNGP (лежит в соседнем разделе). За нужные действия отвечает строчка "SetWidgetLife(u2, GetWidgetLife(u2) + HEAL);", замени ее на то, что тебе надо.