SA-MP Forums Archive
Динамические аргументы - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Динамические аргументы (/showthread.php?tid=501491)



Динамические аргументы - Romz - 18.03.2014

Добрый день. Почему когда в 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
Можно ли как то решить данную проблему?


Re: Динамические аргументы - DrumYum - 18.03.2014

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


Re: Динамические аргументы - Romz - 18.03.2014

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


Re: Динамические аргументы - Eims - 19.03.2014

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


Re: Динамические аргументы - Makar93 - 19.03.2014

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


Re: Динамические аргументы - Eims - 19.03.2014

Можно попробовать подобный костыль использовать
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;

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


Re: Динамические аргументы - BJIADOKC - 25.03.2014

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