Динамические аргументы
#1

Добрый день. Почему когда в SetTimerEx передаешь значение аргументов для динамического колбека получаешь просто 0?

Pawn код:
pawn Code:
new number[3];
number[0] = 111;
number[1] = 222;
number[2] = 333;
SetTimerEx("Test", 1000, false, "ddd", number[0], number[1], number[2]);

---

forward Test(...);
public Test(...) {
    for(new id = 0; id != numargs(); ++id) {
        printf("[%d]: %d", id, getarg(id, 0));
    }
    return 1;
}
Логи:
pawn Code:
[19:34:38] [0]: 0
[19:34:38] [1]: 0
[19:34:38] [2]: 0
Можно ли как то решить данную проблему?
Reply
#2

Может попробовать заменить (...) на ({Float,_}:...)? Изначально ведь SetTimerEx может принимать не только целые числа.
Reply
#3

Quote:
Originally Posted by DrumYum
View Post
Может попробовать заменить (...) на ({Float,_}:...)? Изначально ведь SetTimerEx может принимать не только целые числа.
Я пробовал так. К сожалению не помогает.
Reply
#4

Это беда SetTimerEx, по моему. У меня вообще какой-то рандом выдавало, когда пытался через таймер передавать значение аргументов. А вот если напрямую передавать значения, всё работает отлично. Так что этот код рабочий, но требует какого-то костыля, чтоб всё работало как надо
Reply
#5

Quote:
Originally Posted by Kolstin
View Post
Можно ли как то решить данную проблему?
Глобальные переменные например
Reply
#6

Можно попробовать подобный костыль использовать
PHP Code:
stock SetTimerEx.(funcname[], intervalrepeating, const format[], {Float,_}:...)
{
    for(new 
istrlen(format); p; ++i)
    {
        switch(
format[i])
        {
            case 
83115//Заполнителем указан "s" или "S"
            
{
                
//Записываем в глобальный массив значение аргумента "i"
            
}
            case 
68100//Заполнителем указан "D" или "d"
            
{
                
//Записываем в глобальную переменную значение аргумента "i"
            
}
            case 
70102//Заполнителем указан "F" или "f"
            
{
                
//И опять записываем, только уже в переменную вещественного типа
            
}//И так с остальными заполнителями
        
}
    }
    
SetTimer(funcnameintervalrepeating);//В функции, вызванной таймером, уже работаем с переменными
    
return;

Первое, что пришло в голову
Reply
#7

насколько я помню, в getarg первым аргументом идёт индекс ячейки, а вторым уже индекс аргумента. могу ошибаться.
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)