Я бы посоветовал регистрировать Юнит получает урон, ведь Юнит атакован регистрирует замах, то есть сам факт атаки. А при отслеживании урона, мы можем проверить, что юнит будет мертв (Жизнь - урон <= .405) и, соответственно, бафф получить. Могу набросать на JASS'е :)
function CalculatePercentOfAttackers takes unit Point returns integer
local integer p = 0
local integer s = 0
local integer A = 0
local integer D = 0
local group g = CreateGroup()
local unit f
GroupEnumUnitsInRange(g, GetWidgetX(Point), GetWidgetY(Point), 1280., null)
if CountUnitsInGroup(g) > 0 then
call Say("Loop starts")
loop
set f = FirstOfGroup(g)
if f == null then
call Say("Loop ends")
endif
exitwhen f == null
if (IsUnitInForce(f, udg_Opposite) then
if IsUnitAlly(Point, GetOwningPlayer(f)) then
set D = D + GetUnitLevel(f)
call Say(GetUnitName(f)+I2S(GetHandleId(f))+" is defender.")
elseif IsUnitEnemy(Point, GetOwningPlayer(f)) then
set A = A + GetUnitLevel(f)
call Say(GetUnitName(f)+I2S(GetHandleId(f))+" is attacker.")
else
call Say(GetUnitName(f)+I2S(GetHandleId(f))+" is neutral.")
endif
endif
call GroupRemoveUnit(g, f)
endloop
call Say("Defenders level="+I2S(D)+"Attackers level="+I2S(A))
set s = A + D
if s == 0 then
set s = 1
endif
set p = A*100/s
else
set p = 0
endif
call Say(GetUnitName(Point)+I2S(GetHandleId(Point))+" calculations result = "+I2S(p))
call DestroyGroup(g)
set g = null
set f = null
return p
endfunction
Числовые и реальные переменные инициализируйте, иначе в качестве их значения выступит всякий числовой мусор. Поправил Вам код, по логике должен работать, проверить не могу :)
Итак, я потихоньку начинаю заниматься своей любимой аренкой
Переписываю код, использую cJass, немного vJass и конечно же JASP
Теперь карта будет выпускаться в двух "вариациях" - открытая и закрытая (закрытая будет иметь меньший размер)
Ну и пример переписанного спелла Клауда с использованием уже перечисленных диалектов жасса
Хочу так же обратить внимание на то, что жасп теперь отлично ладит с cJass, что заметно улучшает жизнь и сам код
А с директивой var жасс и вовсе похож на C# :)
Cloud
scope SonicRave initializer Init {
#define <trigger gg_trg_CSpells = null>
#include "cj_types_priv.j"
private void Timer() {
var t = GetExpiredTimer();
var hid = GetHandleId(t);
var caster = LoadUnitHandle(hash, hid, 0);
var target = LoadUnitHandle(hash, hid, 1);
var dummy = LoadUnitHandle(hash, hid, 2);
var dist = LoadReal(hash, hid, 4);
var d = LoadReal(hash, hid, 5);
var angle = Atan2(GetWidgetY(target) - GetWidgetY(caster), GetWidgetX(target) - GetWidgetX(caster));
var x = GetWidgetX(caster) + 100. * Cos(angle);
var y = GetWidgetY(caster) + 100. * Sin(angle);
var lvl = GetUnitAbilityLevel(caster, 'A01E');
var damage = 80. * lvl + GetHeroInt(caster, true) * lvl;
if d >= dist
{
SetUnitPathing(caster, true);
PauseUnit(caster, false);
SetUnitInvulnerable(caster, false);
SetUnitAnimation(dummy, "Birth");
GroupEnumUnitsInRange(temp, GetWidgetX(caster), GetWidgetY(caster), 350., null);
repeat
target = FirstOfGroup(temp);
if IsUnitEnemy(target, GetOwningPlayer(caster))
{
UnitDamageTarget(caster, target, d, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS);
}
GroupRemoveUnit(temp, target);
until target == null;
DestroyEffect(LoadEffectHandle(hash, hid, 3));
DestroyEffect(AddSpecialEffect("FireNova.mdl", GetWidgetX(caster), GetWidgetY(caster)));
DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl", GetWidgetX(caster), GetWidgetY(caster)));
UnitApplyTimedLife(dummy, 'BTLF', 1.);
FlushChildHashtable(hash, hid);
PauseTimer(t);
free t;
} else {
SetUnitFacing(caster, angle * 57.295);
SetUnitPosition(caster, x, y);
SetUnitPosition(dummy, x, y);
SaveReal(hash, hid, 5, d + 80.);
}
flush t, caster, target, dummy;
}
private bool Act() {
var t, hid, caster, target, dummy, dist
if GetSpellAbilityId() == 'A01E'
{
t = CreateTimer();
hid = GetHandleId(t);
caster = GetTriggerUnit();
target = GetSpellTargetUnit();
dummy = CreateDummy(GetTriggerPlayer(), "FreezingRingas2.mdl", 1., GetWidgetX(caster), GetWidgetY(caster), 100., 0.);
dist = VectorGetLenght(GetWidgetX(caster), GetWidgetY(caster), 0., GetWidgetX(target), GetWidgetY(target), 0.);
SaveAgentHandle(hash, hid, 0, caster);
SaveAgentHandle(hash, hid, 1, target);
SaveAgentHandle(hash, hid, 2, dummy);
SaveAgentHandle(hash, hid, 3, AddSpecialEffectTarget("Abilities\\Spells\\Orc\\Shockwave\\ShockwaveMissile.mdl", caster, "origin"));
SaveReal(hash, hid, 4, dist);
SetUnitPathing(caster, false);
SetUnitPathing(dummy, false);
SetUnitTimeScale(dummy, 5.);
PauseUnit(caster, true);
SetUnitInvulnerable(caster, true);
TimerStart(t, .04, true, function Timer);
}
return false
}
private void Init() {
new trigger t, global hashtable hash, global group temp;
int i = 0;
while (i < 12) {
TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT, null);
i++;
}
TriggerAddCondition(t, Condition(function Act))
flush t;
}
}
Всем добра, жду ваших комментариев по поводу всего :)
я не шарю в плюсах, док. и подсветку их пилил в делфи (на нем и теш написан)
и опять же - такой редактор позволяет писать код без варика
и в хорусе, бтв, только добавлен лексер для жасса и пока он остается только подключаемой библиотекой ибо все кейворды, стили и прочее находятся в теше
» WarCraft 3 / Jass New Gen Pack - Rebuild 1.4
» WarCraft 3 / StormLib - обертка для C#
» WarCraft 3 / StormLib - обертка для C#
» WarCraft 3 / StormLib - обертка для C#
» WarCraft 3 / StormLib - обертка для C#
» WarCraft 3 / Помогите найти ошибку
» WarCraft 3 / Юнит умирает с бафом
» WarCraft 3 / Два юнита в областях
Так будет справедливо для всех юнитов, а не только для тех, кто будет строго указан в условии.
Отредактирован Ty3uK
» WarCraft 3 / Проблема с циклом
Отредактирован Ty3uK
» WarCraft 3 / Иконки не ставятся куда надо
» WarCraft 3 / JNGP не запускается
» cJass (Adic Jass Helper) / Главная страница
» Naruto - Nindogatari / Галерея.Old
да и сама идея орпг в мире нарутятины - вкусняЖка
» Warcraft III Первенство Ада / Главная страница
уже два года как
название идентично
Отредактирован Ty3uK
» Anime Sensou / Главная страница
Переписываю код, использую cJass, немного vJass и конечно же JASP
Теперь карта будет выпускаться в двух "вариациях" - открытая и закрытая (закрытая будет иметь меньший размер)
Ну и пример переписанного спелла Клауда с использованием уже перечисленных диалектов жасса
Хочу так же обратить внимание на то, что жасп теперь отлично ладит с cJass, что заметно улучшает жизнь и сам код
А с директивой var жасс и вовсе похож на C# :)
Отредактирован Ty3uK
» Nano-survival / Главная страница
» Nano-survival / Главная страница
» Heartlove Labs / HeartLove Labs - unofficial OST
» Heartlove Labs / HeartLove Labs - unofficial OST
Спасибо :3
» Anime Sensou / Главная страница
» Jass++ / Главная страница
» Jass++ / v0.2 beta
» Jass++ / Главная страница
» Jass++ / Главная страница
и опять же - такой редактор позволяет писать код без варика
и в хорусе, бтв, только добавлен лексер для жасса и пока он остается только подключаемой библиотекой ибо все кейворды, стили и прочее находятся в теше
» Jass++ / Главная страница