Приветствую. Собственно, начну сразу со своего вопроса.
Почему нельзя напрямую получить значение переменной при переменном кол-ве параметров нативной функции?
О чём именно речь?
В павн можно передать в функцию нефиксированное кол-во параметров, с помощью ... , как аргумента. В плагине, в свою очередь, не выйдет просто так получить переданное значение.
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