Оглушает юнита на время. Так же оглушает и неуязвимых юнитов
Так же присутвует карта-пример
Так же присутвует карта-пример
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
Определение неуязвимости не я делал=) Забыл написать. Я его нашел здесь на xgm