Добавлен Vova47
Как по прошествию 10 минут забрать у героя-юнита способность? Другими словами по прошествию 10 минут эта способность просто пропадает...
Принятый ответ
Поставить таймер на 10 минут и забрать способность. Пример: Заклинание, которое даёт юниту способность на определённое время.
scope SwordCharge initializer Init
{
private int SCharge = 'A000'//Id of used ability
private real SCT = 20.//Time
private int SCB = 'A001' Given ability
scope SwordCharge initializer Init
{
private int SCharge = 'A000'//Id of used ability
private real SCT = 20.//Time
private int SCB = 'A001' Given ability
private bool Conditions(){
return GetSpellAbilityId() == SCharge
}
return GetSpellAbilityId() == SCharge
}
private void SCTimer()
{
timer t = GetExpiredTimer()
int id = GetHandleId(t)
unit u = LoadUnitHandle(H, GetHandleId(t), 0)
UnitRemoveAbility(u, SCB)
PauseTimer(t)
DestroyTimer(t)
u = null
t = null
}
{
timer t = GetExpiredTimer()
int id = GetHandleId(t)
unit u = LoadUnitHandle(H, GetHandleId(t), 0)
UnitRemoveAbility(u, SCB)
PauseTimer(t)
DestroyTimer(t)
u = null
t = null
}
private void Actions()
{
timer t = CreateTimer()
unit u = GetSpellAbilityUnit()
SaveUnitHandle(H, GetHandleId(t), 0, u)
UnitAddAbility(u, SCB)
TimerStart(t, SCT, false, function SCTimer)
t = null
u = null
}
{
timer t = CreateTimer()
unit u = GetSpellAbilityUnit()
SaveUnitHandle(H, GetHandleId(t), 0, u)
UnitAddAbility(u, SCB)
TimerStart(t, SCT, false, function SCTimer)
t = null
u = null
}
void Init(){
trigger SwordChargeTrg = new trigger;
TriggerRegisterAnyUnitEventBJ(SwordChargeTrg, EVENT_PLAYER_UNIT_SPELL_EFFECT)
TriggerAddCondition(SwordChargeTrg, Condition(function Conditions))
TriggerAddAction( SwordChargeTrg, function Actions)
}
}
trigger SwordChargeTrg = new trigger;
TriggerRegisterAnyUnitEventBJ(SwordChargeTrg, EVENT_PLAYER_UNIT_SPELL_EFFECT)
TriggerAddCondition(SwordChargeTrg, Condition(function Conditions))
TriggerAddAction( SwordChargeTrg, function Actions)
}
}
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Spaier
scope SwordCharge initializer Init
{
private int SCharge = 'A000'//Id of used ability
private real SCT = 20.//Time
private int SCB = 'A001' Given ability
return GetSpellAbilityId() == SCharge
}
{
timer t = GetExpiredTimer()
int id = GetHandleId(t)
unit u = LoadUnitHandle(H, GetHandleId(t), 0)
UnitRemoveAbility(u, SCB)
PauseTimer(t)
DestroyTimer(t)
u = null
t = null
}
{
timer t = CreateTimer()
unit u = GetSpellAbilityUnit()
SaveUnitHandle(H, GetHandleId(t), 0, u)
UnitAddAbility(u, SCB)
TimerStart(t, SCT, false, function SCTimer)
t = null
u = null
}
trigger SwordChargeTrg = new trigger;
TriggerRegisterAnyUnitEventBJ(SwordChargeTrg, EVENT_PLAYER_UNIT_SPELL_EFFECT)
TriggerAddCondition(SwordChargeTrg, Condition(function Conditions))
TriggerAddAction( SwordChargeTrg, function Actions)
}
}
Хэш Таблицу объявить в корне карты: hashtable H = InitHashtable();
Как именно сделать на 1 таймере?
к каждому действию у тебя привязана переменная, и если таймер на 1 сек - каждую 1 сек он будет уменьшать эти переменнык на 1 сек
когда они станут 0 - делаем действия