oukibt
25.06.2021, 12:29
Приветствую. Собственно, начну сразу со своего вопроса.
Почему нельзя напрямую получить значение переменной при переменном кол-ве параметров нативной функции?
О чём именно речь?
В павн можно передать в функцию нефиксированное кол-во параметров, с помощью ... , как аргумента. В плагине, в свою очередь, не выйдет просто так получить переданное значение.
native Function(...);
main()
{
Function(25);
}
Code 1
cell AMX_NATIVE_CALL Test(AMX* amx, cell* params)
{
printf("Value: %d\n", params[1]);
return 1;
}
Результатом выполнения кода будет, скорее всего, во всех случаях, вывод числа 12 в консоль, которое отличается от переданного.
Чтобы узнать нужное число, нужен вот такой код
Code 2
cell AMX_NATIVE_CALL Test(AMX* amx, cell* params)
{
cell* addr;
amx_GetAddr(amx, params[1], &addr);
printf("Value: %d\n", *addr);
return 1;
}
На этот раз действительно в консоль было выведено наше переданное, как аргумент, число 25.
Но, в первом случае (Code 1), также можно получить нужное значение, если выставить фиксированный параметр.
native Function(value, ...);
main()
{
Function(25);
}
Собственно, почему так происходит. Почему, если тип параметра предопределён, можно получить значение напрямую из params, а если нет, то нужно извлекать значение с помощью amx_GetAddr
Почему нельзя напрямую получить значение переменной при переменном кол-ве параметров нативной функции?
О чём именно речь?
В павн можно передать в функцию нефиксированное кол-во параметров, с помощью ... , как аргумента. В плагине, в свою очередь, не выйдет просто так получить переданное значение.
native Function(...);
main()
{
Function(25);
}
Code 1
cell AMX_NATIVE_CALL Test(AMX* amx, cell* params)
{
printf("Value: %d\n", params[1]);
return 1;
}
Результатом выполнения кода будет, скорее всего, во всех случаях, вывод числа 12 в консоль, которое отличается от переданного.
Чтобы узнать нужное число, нужен вот такой код
Code 2
cell AMX_NATIVE_CALL Test(AMX* amx, cell* params)
{
cell* addr;
amx_GetAddr(amx, params[1], &addr);
printf("Value: %d\n", *addr);
return 1;
}
На этот раз действительно в консоль было выведено наше переданное, как аргумент, число 25.
Но, в первом случае (Code 1), также можно получить нужное значение, если выставить фиксированный параметр.
native Function(value, ...);
main()
{
Function(25);
}
Собственно, почему так происходит. Почему, если тип параметра предопределён, можно получить значение напрямую из params, а если нет, то нужно извлекать значение с помощью amx_GetAddr