Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: FIX_SetPlayerAmmo

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

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

    FIX_SetPlayerAmmo

    Описание:
    Функция (FIX_SetPlayerAmmo) исправляющая стандартную SetPlayerAmmo

    Баг заключался в следующем, если в данном оружие кончается б/к(ammo = 0) и после его пополнить функцией
    SetPlayerAmmo, патроны были на месте(всё выдалось благополучно),
    но у игрока вместо стрельбы отыгрывало анимацию стрельбы без выстрела и без потери патронов.
    То есть проигрывалась имитация стрельбы.

    FIX_SetPlayerAmmo возвращает 3 значения:
    -1: Игрок не в сети
    0 : Не валидный ID оружия (т.е. у Вас нету такого оружия на руках или за спиной)
    1 : Патроны установлены успешно

    Код:

     Клац =3
    PHP код:
    // объявляем массив в котором указаны слоты к каждому оружию
    static const weapon_slot[47] =
    {
        
    00,
        
    11111111,
        
    101010101010,
        
    888,
        
    000//19-21
        
    222,
        
    333,
        
    44,
        
    55,
        
    4,
        
    66,
        
    7777,
        
    8,
        
    12,
        
    999,
        
    111111
    };

    //собственно вот и сам фикс
    stock FIX_SetPlayerAmmo(playeridweaponidammo// устанавливаем кол-во патронов
    {
        new 
    getweapongetammo;
        if(
    GetPlayerWeaponData(playeridweapon_slot[weaponid], getweapongetammo) == 0)
            return -
    1;
        if(
    weaponid != getweapon)
            return 
    0
        if(
    getammo != 0SetPlayerAmmo(playeridweaponidammo);
        else 
    GivePlayerWeapon(playeridweaponidammo);
        return 
    1;
    }
    #if defined _ALS_SetPlayerAmmo
        #undef    SetPlayerAmmo
    #else
        #define    _ALS_SetPlayerAmmo
    #endif
    #define SetPlayerAmmo FIX_SetPlayerAmmo
    //конец фикса, дальше чисто для собственной нужды писал

    //Ещё один олд варик
    stock GivePlayerAmmo(playeridweaponidamount// выдаём/забираем кол-во патронов
    {
        new 
    getweapongetammo;
        if(
    GetPlayerWeaponData(playeridweapon_slot[weaponid], getweapongetammo) == 0)
            return -
    1;
        if(
    weaponid != getweapon)
            return 
    0
        if(
    getammo != 0SetPlayerAmmo(playeridweaponidgetammo amount);
        else 
    GivePlayerWeapon(playeridweaponidamount);
        return 
    1;



    Пример использования:
     Клац =3
    PHP код:
    CMD:setammo(playeridparams[])
    {
        new 
    weaponidammo;
        if(
    sscanf(params"dd"weaponidammo))
            return 
    SendClientMessage(playerid, -1, !"Использование: /setammo [id оружия] [кол-во]");
        if(
    SetPlayerAmmo(playeridweaponidammo) != 1)
            return 
    SendClientMessage(playerid, -1, !"Игрок не в сети или введён боекомплект к его несуществующему оружию!");
        
    SendClientMessage(playerid, -1, !"Вы установили кол-во патронов в выбранный слот!");
        return 
    1;



    Автор темы:
    vovandolg
    Помогал:
    ziggi
    Последний раз редактировалось vovandolg; 06.10.2016 в 04:47.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  2. 2 пользователя(ей) сказали cпасибо:
    Brendan (09.08.2016) Geebrox (06.10.2016)
  3. #2
    Аватар для Redsan
    Пользователь

    Статус
    Оффлайн
    Регистрация
    07.06.2016
    Адрес
    Minsk, Belarus
    Сообщений
    78
    Репутация:
    15 ±
    Описал бы баг

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Обновил шапку темы =)
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  6. Пользователь сказал cпасибо:
    Redsan (29.07.2016)
  7. #4
    Аватар для m1n1vv
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.09.2015
    Сообщений
    541
    Репутация:
    78 ±
    Я это таким способом обошел. Нужно было забрать у игрока патроны со слота с одного оружия и выдать другое оружие с того же слота. Забрать с M4 с патронами и выдать AK47.
    PHP код:
    GivePlayerWeapon(playerid311);
    SetPlayerAmmo(playerid310);
    GivePlayerWeapon(playerid31500); 
    Глупо, но работает.

    Можно такое сделать )
    PHP код:
    stock GivePlayerNewWeapon(playeridweaponidammo)
    {
        
    GivePlayerWeapon(playeridweaponid1);
        
    SetPlayerAmmo(playeridweaponid0);
        
    GivePlayerWeapon(playeridweaponidammo); 
        return 
    1;

    Последний раз редактировалось m1n1vv; 27.09.2016 в 21:35.

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от m1n1vv Посмотреть сообщение
    Я это таким способом обошел. Нужно было забрать у игрока патроны со слота с одного оружия и выдать другое оружие с того же слота. Забрать с M4 с патронами и выдать AK47.
    PHP код:
    GivePlayerWeapon(playerid311);
    SetPlayerAmmo(playerid310);
    GivePlayerWeapon(playerid31500); 
    Глупо, но работает.

    Можно такое сделать )
    PHP код:
    stock GivePlayerNewWeapon(playeridweaponidammo)
    {
        
    GivePlayerWeapon(playeridweaponid1);
        
    SetPlayerAmmo(playeridweaponid0);
        
    GivePlayerWeapon(playeridweaponidammo); 
        return 
    1;

    Ну так ты принуждённо выдаёшь ствол) а у меня проверки разные на то что игрок выдаёт патроны на данный ствол, а не на левый какой то.
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  9. #6
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    я бы возвращал -1 0 и 1, что бы сразу проверять < if(func) код; > ну это чисто для удобства
    Респект:
    @DeimoS
    @ziggi
    @Daniel_Cortez

  10. Пользователь сказал cпасибо:
    vovandolg (06.10.2016)
  11. #7
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    я бы возвращал -1 0 и 1, что бы сразу проверять < if(func) код; > ну это чисто для удобства
    Удобнее когда видно чему конкретно равняется или не равняется, а просто название в скобках как то одиноко))
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  12. Пользователь сказал cпасибо:
    Desulaid (06.10.2016)
  13. #8
    Аватар для Dima_Tushin
    Пользователь

    Статус
    Оффлайн
    Регистрация
    21.04.2013
    Адрес
    Россия
    Сообщений
    154
    Репутация:
    1 ±
    Вопросик такой как сделать проверку на Серверное оружие т.е игрока и читерское оружие + CMD для админов

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

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Dima_Tushin Посмотреть сообщение
    Вопросик такой как сделать проверку на Серверное оружие т.е игрока и читерское оружие + CMD для админов
    Weapon-Ammo-Hack
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  15. #10
    Аватар для Enrique_Black
    Пользователь

    Статус
    Оффлайн
    Регистрация
    06.03.2017
    Сообщений
    38
    Репутация:
    0 ±
    Ну вообще использовать функцию
    PHP код:
    GetPlayerWeaponData 
    не хорошо что ли, хотя бы по той причине что она далеко не всегда возвращает правильные значения и не всегда вовремя.

    Так же если ты пишешь фикс связанный с патронами то мог сразу и учесть максимальное количество патрон.

    PHP код:
    value < -32768
    value 
    32768 

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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