DamageTextTag

» опубликован
» Способ реализации: Zinc
» Тип: Наработка
» Версия Warcraft: 1.26a
Система отображения нанесённого урона в виде всплывающего текста. Цвет цифр обозначает цвет игрока, которому принадлежит атакующий юнит. Не отображает текстаг в тумане войны.
Похожа на SDMS 2.0 из которой выброшено всё лишнее и написанная на zinc.
Требует 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


Просмотров: 283

Комментарии пока отсутcтвуют