Добавлен nazarpunk,
опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
Zinc
Тип:
Наработка
Версия Warcraft:
1.26a
Система отображения нанесённого урона в виде всплывающего текста. Цвет цифр обозначает цвет игрока, которому принадлежит атакующий юнит. Не отображает текстаг в тумане войны.
Требует JGNP. Для установки просто скопируйе триггер DamageTextTag в свою карту.
zinc
//! zinc
library DamageTextTag {
/* setting */
constant real FontSize = 12.;
constant real FontTime = 1.5;
/* constants */
constant string Color[15];
constant trigger Trigger = CreateTrigger();
/* init */
function onInit(){
trigger t = CreateTrigger();
region r = CreateRegion();
group g = CreateGroup();
RegionAddRect(r, bj_mapInitialPlayableArea);
/* set colors */
Color[0] = "|cffFF0202";
Color[1] = "|cff0041FF";
Color[2] = "|cff1BE5B8";
Color[3] = "|cff530080";
Color[4] = "|cffFFFC00";
Color[5] = "|cffFE890D";
Color[6] = "|cff1FBF00";
Color[7] = "|cffE45AAF";
Color[8] = "|cff949596";
Color[9] = "|cff7DBEF1";
Color[10] = "|cff0F6145";
Color[11] = "|cff4D2903";
Color[12] = "|c00252525";
Color[13] = "|c00252525";
Color[14] = "|c00252525";
/* main action */
TriggerAddAction(Trigger, function(){
unit uD = GetEventDamageSource();
unit uT = GetTriggerUnit();
player pD = GetOwningPlayer(uD);
player pT = GetOwningPlayer(uT);
texttag tt = CreateTextTag();
integer i,d = R2I(GetEventDamage() + 0.5);
string s = Color[GetPlayerId(pD)] + "-" + I2S(d) + "|r";
/* text tag*/
SetTextTagText(tt,s,FontSize*.0023);
SetTextTagPosUnit(tt, uT, 20.);
SetTextTagVelocity(tt, .05325*Cos(1.570795), .05325*Sin(1.570795));
SetTextTagPermanent(tt, false);
SetTextTagLifespan(tt, FontTime);
SetTextTagFadepoint(tt, 0.);
/* hide on fog of war */
SetTextTagVisibility(tt, false);
for (0 <= i < 16) {
if (GetPlayerController(Player(i)) == MAP_CONTROL_USER && GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING){
if (IsUnitVisible(uD, Player(i)) && Player(i) == GetLocalPlayer()) {
SetTextTagVisibility(tt, true);
}
}
}
/* leaks */
uD = null;
uT = null;
pD = null;
pT = null;
tt = null;
});
/* add new unit */
TriggerRegisterEnterRegion(t, r, null);
TriggerAddAction(t, function(){
TriggerRegisterUnitEvent(Trigger, GetTriggerUnit(), EVENT_UNIT_DAMAGED);
});
/* add isset unit */
GroupEnumUnitsInRect(g, GetWorldBounds(), null);
ForGroup(g, function(){
TriggerRegisterUnitEvent(Trigger, GetEnumUnit(), EVENT_UNIT_DAMAGED);
});
/* leaks */
DestroyGroup(g);
g = null;
t = null;
r = null;
}
}
//! endzinc
Комментарии пока отсутcтвуют.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.