Ошибка при компиляции указывает на то, что Finish не объявлена. Выносил я её из структуры, но и тогда находились странные ошибки, типа незакрытой скобки в таймере.
struct Dmg
{

unit u,c;
float dmg = 75.;
timer t = CreateTimer();

void Finish() {
UnitDamageTarget(c,u,dmg,false,false,null,null,null);
DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Invisibility\\InvisibilityTarget.mdl",u,"origin"));
}
void Start (unit target, unit caster) {
u = target;
c = caster;
TimerStart(t,3000.,false,function Finish);
}

}

Принятый ответ

Audes, обработчик таймера должен быть статичной функцией и соотвественно в них нельзя использовать this. Учи матчасть.
0
12
10 лет назад
0
TimerStart(t,3000.,false,function thistype.Finish);
Можно также использовать лямда функцию:
TimerStart(t,3000.,false, lambda (){
здесь тело функции finish
});
0
15
10 лет назад
0
J64_, почему-то лямбда не компилируется (критическая ошибка), а с thistype, я так понимаю нужно сделать finish статическим методом? Я сделал, но теперь ругается на this (не объявлена).
2
29
10 лет назад
2
Audes, обработчик таймера должен быть статичной функцией и соотвественно в них нельзя использовать this. Учи матчасть.
Принятый ответ
0
28
9 лет назад
0
Audes, в статьях про это говорилось раз 100
обработчик статик должен быть
и вместо того чтобы создавать по таймеру для каждого объекта лучше создать 1 таймер и им обрабатывать список объектов
хотя вместо списка можно юзать массив без нулевых элементов
0
29
9 лет назад
0
nvc123, в чем отличие списка от массива?
0
28
9 лет назад
Отредактирован alexprey
0
alexprey, от тебя подобного не ожидал
ссылка
0
29
9 лет назад
0
nvc123, а ты об этом, просто я когда читал твой комментарий, список объектов, у меня сразу же асоцииинровался с массивом.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.