Система оглушения юнита

Добавлен , не публикуется
Оглушает юнита на время. Так же оглушает и неуязвимых юнитов
Так же присутвует карта-пример
cJASS

//cJASS

//by Goodie© 2013
//**************************************************************************************
//                           /////////////          /////////////////         ////        ////        ////        ////
//                        ////                          ////                 ////        ////        ////        ////
//                     //////////////                  ////                 ////       ////         ///////     ////
//                            ///                    ////                  ////       ////         ////     ///////
//                 ////////////                    ////                  ///////////////          ////        ////
//
//*************************************************************************************
//Требуется : 
//    JNGP 5D exp 2
//    cJass 1.4.2.40 и выше
//  
//  Инструкция:
//      Изначально у дамми должна быть способность в РО
//      Чтобы оглушить юнита, нам нужно прописать -  StunUnit(<юнит>,<время>)
//      

include "cj_types.j"
include "cj_typesEX.j"

library StunSystem

    define{
        ///////////////////////
        private STUNBUFF =  'B000'   // Бафф оглушения
        private ABILITYID =  'A001'    // Способность оглушения
        private DUMMY_ID = 'u000'   // Дамми юнит
        ///////////////////////
        private SaveData(a,b,c) = SaveInteger(HashTable,a,b,c)
        private LoadData(a,b) = LoadInteger(HashTable,a,b)
        private FlushData(a) = FlushChildHashtable(HashTable,a)
        ///////////////////////
    }
    
    private struct Data
            
        static hashtable HashTable = InitHashtable()
                    unit target = null
                    
        static void CastTarget(player p,unit u) {
            unit DummyCaster = CreateUnit(p,DUMMY_ID,GetUnitX(u),GetUnitY(u),0)
            IssueTargetOrder(DummyCaster,"thunderbolt",u)
            UnitApplyTimedLife(DummyCaster,0,1.00)
            DummyCaster = null
        }
                    
        static bool Invuled(unit u){
            float HP = GetWidgetLife(u)
            float MP   = GetUnitState(u,UNIT_STATE_MANA)
            bool res
            SetWidgetLife(u,HP + 0.001)    
            if (HP != GetWidgetLife(u)){
                UnitDamageTarget(u,u,0.001,false,true,null,null,null)
                 res = (GetWidgetLife(u) == HP + 0.001)
            else
                 UnitDamageTarget(u,u,0.001,false,true,null,null,null)
                 res = (GetWidgetLife(u) == HP)
                 SetWidgetLife(u,HP)
            }
            if (res) {
                return not (GetUnitState(u,UNIT_STATE_MANA) != MP)
            }
            return res
        }                    
        
        static void onEffect(){
                    timer TIMER = GetExpiredTimer()
                    thistype DATA = LoadData(GetHandleId(TIMER),0)
                    UnitRemoveAbility(DATA.target,STUNBUFF)
                    FlushData(GetHandleId(TIMER))
                    DestroyTimer(TIMER)
                    TIMER = null
        }
        
        static void onStun(unit u,real dur){
                    timer TIMER = new timer
                    thistype DATA = thistype.create()
                    DATA.target = u
                    if (Invuled(u)){
                        SetUnitInvulnerable(u,false)
                        CastTarget(Player(15),u)
                        SetUnitInvulnerable(u,true)
                    else
                        CastTarget(Player(15),u)
                    }
                    SaveData(GetHandleId(TIMER),0,DATA)
                    TimerStart(TIMER,dur,false,function thistype.onEffect)
                    TIMER = null
        }
        
        
    endstruct
    
     void StunUnit(unit u,real dur){Data.onStun(u,dur)}
    
endlibrary // by Goodie© 2013
`
ОЖИДАНИЕ РЕКЛАМЫ...
9
Clamp, Что, ужас?
Определение неуязвимости не я делал=) Забыл написать. Я его нашел здесь на xgm
17
Вроде бы влад выкладывал систему оглушения в барахолку.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.