Всем привет, вопрос такой.
  1. Таймер, никак не получается сделать, то он работает без отображения, то появляется таймер но времени нет))
Как сделать чтобы к примеру когда закончилась волна 10, включался таймер на 120 секунд и в это время волны не шли, после его окончания запускалась волна 11.
  1. Хочу сделать тренировочный лагерь через переменные, в общем если юнит находится в области, и наносит юниту в этой области 500 урона, то сила героя возрастает на 1, после этого необходимо нанести 550 урона чтобы получить также + 1 силу и тд.
Если можно подробнее, потому что я рак еще тот, начал этим заниматься неделю назад))) короче профан

Ну с таймером я хз, проверял раз 10 карту, никаких проблем не было, по поводу тренировочного лагеря, если без костылей, тут нужна хэш-таблица, а её я могу юзать только через код
код
define{void = nothing; int = integer; bool = boolean}
library mylib initializer init{
    private trigger trg = CreateTrigger()
    private hashtable H = InitHashtable()
    
    private void act(){
        unit u = GetEventDamageSource(); int i = GetHandleId(u), c = LoadInteger(H,i,0)+1
        texttag tt = CreateTextTag()
        
        SetTextTagText(tt,I2S(c)+"/3",.0276)
        SetTextTagPosUnit(tt,u,0)
        SetTextTagColor(tt,255,0,255,0)
        SetTextTagVelocity(tt,.05325*Cos(1.570788),.05325*Sin(1.570788))
        SetTextTagPermanent(tt,false)
        SetTextTagLifespan(tt,1.)
        SetTextTagFadepoint(tt,.0)
        
        if c >= 3{
            SetHeroStr(u,GetHeroStr(u,false)+10,true)
            DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIsm\\AIsmTarget.mdl",u,"origin"))
            c = 0
        }
        SaveInteger(H,i,0,c)
        
        u = null; tt = null
    }
    
    private void eee(){
        TriggerRegisterUnitEvent(trg,GetEnumUnit(),EVENT_UNIT_DAMAGED)
    }
    private bool mycond1(){
        return IsUnitType(GetEventDamageSource(),UNIT_TYPE_HERO) && GetEventDamage() > 0
    }
    private bool mycond(){
        return GetUnitTypeId(GetFilterUnit()) == 'h000'
    }
    private void init(){
        group g = CreateGroup()
        boolexpr b = Condition(function mycond)
        
        GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,b)
        ForGroup(g,function eee)
        DestroyBoolExpr(b); b = Condition(function mycond1)
        TriggerAddCondition(trg,b)
        TriggerAddAction(trg,function act)
        
        DestroyBoolExpr(b)
        GroupClear(g); DestroyGroup(g)
        trg = null; b = null; g = null
    }
}
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
Ну с таймером я хз, проверял раз 10 карту, никаких проблем не было, по поводу тренировочного лагеря, если без костылей, тут нужна хэш-таблица, а её я могу юзать только через код
код
define{void = nothing; int = integer; bool = boolean}
library mylib initializer init{
    private trigger trg = CreateTrigger()
    private hashtable H = InitHashtable()
    
    private void act(){
        unit u = GetEventDamageSource(); int i = GetHandleId(u), c = LoadInteger(H,i,0)+1
        texttag tt = CreateTextTag()
        
        SetTextTagText(tt,I2S(c)+"/3",.0276)
        SetTextTagPosUnit(tt,u,0)
        SetTextTagColor(tt,255,0,255,0)
        SetTextTagVelocity(tt,.05325*Cos(1.570788),.05325*Sin(1.570788))
        SetTextTagPermanent(tt,false)
        SetTextTagLifespan(tt,1.)
        SetTextTagFadepoint(tt,.0)
        
        if c >= 3{
            SetHeroStr(u,GetHeroStr(u,false)+10,true)
            DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIsm\\AIsmTarget.mdl",u,"origin"))
            c = 0
        }
        SaveInteger(H,i,0,c)
        
        u = null; tt = null
    }
    
    private void eee(){
        TriggerRegisterUnitEvent(trg,GetEnumUnit(),EVENT_UNIT_DAMAGED)
    }
    private bool mycond1(){
        return IsUnitType(GetEventDamageSource(),UNIT_TYPE_HERO) && GetEventDamage() > 0
    }
    private bool mycond(){
        return GetUnitTypeId(GetFilterUnit()) == 'h000'
    }
    private void init(){
        group g = CreateGroup()
        boolexpr b = Condition(function mycond)
        
        GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,b)
        ForGroup(g,function eee)
        DestroyBoolExpr(b); b = Condition(function mycond1)
        TriggerAddCondition(trg,b)
        TriggerAddAction(trg,function act)
        
        DestroyBoolExpr(b)
        GroupClear(g); DestroyGroup(g)
        trg = null; b = null; g = null
    }
}
Загруженные файлы
Принятый ответ
32
Ну блин, как насчет посмотреть как сделано в тех же картах близзардов.
Есть таймер, а есть Окно таймера, один считает время а второй показывает картинку на экране. По истечению времени таймер может вызвать триггер или функцию.
1
quq_CCCP:
Ну блин, как насчет посмотреть как сделано в тех же картах близзардов.
Есть таймер, а есть Окно таймера, один считает время а второй показывает картинку на экране. По истечению времени таймер может вызвать триггер или функцию.
я ж написал что я профан

rsfghd:
Ну с таймером я хз, проверял раз 10 карту, никаких проблем не было, по поводу тренировочного лагеря, если без костылей, тут нужна хэш-таблица, а её я могу юзать только через код
код
define{void = nothing; int = integer; bool = boolean}
library mylib initializer init{
    private trigger trg = CreateTrigger()
    private hashtable H = InitHashtable()
    
    private void act(){
        unit u = GetEventDamageSource(); int i = GetHandleId(u), c = LoadInteger(H,i,0)+1
        texttag tt = CreateTextTag()
        
        SetTextTagText(tt,I2S(c)+"/3",.0276)
        SetTextTagPosUnit(tt,u,0)
        SetTextTagColor(tt,255,0,255,0)
        SetTextTagVelocity(tt,.05325*Cos(1.570788),.05325*Sin(1.570788))
        SetTextTagPermanent(tt,false)
        SetTextTagLifespan(tt,1.)
        SetTextTagFadepoint(tt,.0)
        
        if c >= 3{
            SetHeroStr(u,GetHeroStr(u,false)+10,true)
            DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Items\\AIsm\\AIsmTarget.mdl",u,"origin"))
            c = 0
        }
        SaveInteger(H,i,0,c)
        
        u = null; tt = null
    }
    
    private void eee(){
        TriggerRegisterUnitEvent(trg,GetEnumUnit(),EVENT_UNIT_DAMAGED)
    }
    private bool mycond1(){
        return IsUnitType(GetEventDamageSource(),UNIT_TYPE_HERO) && GetEventDamage() > 0
    }
    private bool mycond(){
        return GetUnitTypeId(GetFilterUnit()) == 'h000'
    }
    private void init(){
        group g = CreateGroup()
        boolexpr b = Condition(function mycond)
        
        GroupEnumUnitsInRect(g,bj_mapInitialPlayableArea,b)
        ForGroup(g,function eee)
        DestroyBoolExpr(b); b = Condition(function mycond1)
        TriggerAddCondition(trg,b)
        TriggerAddAction(trg,function act)
        
        DestroyBoolExpr(b)
        GroupClear(g); DestroyGroup(g)
        trg = null; b = null; g = null
    }
}
огромное спасибо!
Чтобы оставить комментарий, пожалуйста, войдите на сайт.