Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 7 из 7

Тема: Floatadd func

  1. #1
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±

    Floatadd func

    Почему такая функция со сложением показывает не точный ответ?
    PHP код:
    cell AMX_NATIVE_CALL amxNatives::vd_floatadd(AMX *amxcell *params)
    {
        
    float summa params[1] + params[2] + params[3];

        return 
    amx_ftoc(summa);
    }

    //native Float:vd_floatadd(Float:A, Floa:B, Float:C); 
    Если посчитать в pawno таким подобным способом то будет правильно.
    Последний раз редактировалось vovandolg; 07.11.2016 в 20:53.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  2. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Почему такая функция со сложением показывает не точный ответ?
    PHP код:
    cell AMX_NATIVE_CALL amxNatives::vd_floatadd(AMX *amxcell *params)
    {
        
    float summa params[1] + params[2] + params[3];

        return 
    amx_ftoc(summa);
    }

    //native Float:vd_floatadd(Float:A, Floa:B, Float:C); 
    Ты хочешь сложить вещественные числа, но для компилятора они имеют тип cell и он складывает их в целочисленном представлении - естественно, результат будет неправильный. Макрос amx_ftoc нужно использовать не на результате суммы, а на самих слагаемых, чтобы их привести к вещественному типу.


    Цитата Сообщение от vovandolg Посмотреть сообщение
    Если посчитать в pawno таким подобным способом то будет правильно.
    Не припоминаю, чтобы в этом простом текстовом редакторе был калькулятор.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  3. #3
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Ну так если я меняю cell на float или double мне ошибку выдаёт компилятор,
    как такую функцию оформить в заголовке чтобы норм компилило?

    - - - Добавлено - - -

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Не припоминаю, чтобы в этом простом текстовом редакторе был калькулятор.
    Pawn pawn)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  4. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Буквально недавно проснулся, поэтому в предыдущем посте не совсем правильно изложил свою мысль.
    Макрос amx_ftoc нужно использовать на результате сложения, но этого мало. Аргументы нативной функции передаются в виде целых чисел (cell) в массиве params. Прежде чем складывать числа, нужно "обмануть" компилятор, заставив его думать, что в params[1...3] вещественные числа - это делается с помощью макроса amx_ctof.
    PHP код:
    float result amx_ctof(params[1]) + amx_ctof(params[2]) + amx_ctof(params[3]);
    return 
    amx_ftoc(result); 
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. Пользователь сказал cпасибо:
    vovandolg (07.11.2016)
  6. #5
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    То есть в заголовке функции кроме cell задать не чего нельзя я так понимаю?

    Да и ещё.. Где можно найти описания функций(на русском если есть) из amx ресурсов или как вернее там?
    Последний раз редактировалось vovandolg; 07.11.2016 в 21:42.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  7. #6
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    То есть в заголовке функции кроме cell задать не чего нельзя я так понимаю?
    cell - это единственный тип данных в Pawn, поэтому да, нельзя.

    Цитата Сообщение от vovandolg Посмотреть сообщение
    Да и ещё.. Где можно найти описания функций(на русском если есть) из amx ресурсов или как вернее там?
    Мне очень помогла эта инструкция: http://forum.sa-mp.com/showthread.php?t=295798. Нормальной информации на русском не видел (хотя я особо и не искал).
    Ещё помогает изучение чужих плагинов.

  8. Пользователь сказал cпасибо:
    vovandolg (07.11.2016)
  9. #7
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    То есть в заголовке функции кроме cell задать не чего нельзя я так понимаю?
    Вряд ли. Вполне возможно, что есть какой-нибудь способ, связанный с каламбуром типизации, которого я не знаю, но это будет в ущерб читаемости кода.

    Цитата Сообщение от vovandolg Посмотреть сообщение
    Да и ещё.. Где можно найти описания функций(на русском если есть) из amx ресурсов или как вернее там?
    Лично я смотрел описание в документации к Pawn (в частности, в Pawn Implementer's Guide), да и на оффе есть пара-тройка примеров и замечаний о багах в некоторых функциях из разряда amx_*.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. Пользователь сказал cпасибо:
    vovandolg (07.11.2016)
 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •