GetPlayerWeaponData

Материал из Pro-Pawn Wiki
Перейти к: навигация, поиск

Описание:

Узнаёт оружие и количество патронов у игрока в указанном оружейном слоте.

Параметры:

(playerid, slot, &weapons, &ammo)
playerid ID игрока.
slot ID оружейного слота.
&weapons Переменная, в которую будет записан ID оружия в указанном слоте.
&ammo Переменная, в которую будет записано количество патронов.


Возвращаемое значение:

1 в случае успеха, либо 0, если игрок не подключен или указан неправильный ID слота.

Info rhombus.png
Примечание
Для огнемёта в HUD'е игрока отображается в 10 раз меньше патронов, чем на самом деле (например, если выдать огнемёт с 500 патронами, в HUD'е будет показано только 50).


Bug.png
Баг SA-MP
Если указан слот оружия ближнего боя, функция может вернуть в параметре ammo более 1 патрона.
Если у игрока было огнестрельное оружие, но закончились патроны, функция всё равно вернёт ID того оружия.


Пример использования:

enum
{
    DIALOG_NONE = 0,
    // ...
};

new const weapon_names[][] = {
/*  0 */{"Без оружия"},                 /*  1 */{"Кастет"},                     /*  2 */{"Клюшка для гольфа"},
/*  3 */{"Полицейская дубинка"},        /*  4 */{"Нож"},                        /*  5 */{"Бейсбольная бита"},
/*  6 */{"Лопата"},                     /*  7 */{"Кий"},                        /*  8 */{"Катана"},
/*  9 */{"Бензопила"},                  /* 10 */{"Большой дилдо"},              /* 11 */{"Малый дилдо"},
/* 12 */{"Большой вибратор"},           /* 13 */{"Малый вибратор"},             /* 14 */{"Цветы"},
/* 15 */{"Трость"},                     /* 16 */{"Граната"},                    /* 17 */{"Слезоточивый газ"},
/* 18 */{"Коктейль Молотова"},          /* 19 */{""},/* 20 */{""},/* 21 */{""}, /* 22 */{"Кольт .45"},
/* 23 */{"Кольт .45 с глушителем"},     /* 24 */{"Пустынный орёл"},             /* 25 */{"Дробовик"},
/* 26 */{"Обрез"},                      /* 27 */{"SPAS-12"},                    /* 28 */{"Микро-Узи"},
/* 29 */{"MP5"},                        /* 30 */{"АК-47"},                      /* 31 */{"M4"},
/* 32 */{"TEC-9"},                      /* 33 */{"Винтовка"},                   /* 34 */{"Снайперская винтовка"},
/* 35 */{"Гранатомёт"},                 /* 36 */{"Самонаводящийся гранатомёт"}, /* 37 */{"Огнемёт"},
/* 38 */{"Пулемёт"},                    /* 39 */{"Взрывпакет"},                 /* 40 */{"Детонатор"},
/* 41 */{"Баллончик с краской"},        /* 42 */{"Огнетушитель"},               /* 43 */{"Фотоаппарат"},
/* 44 */{"Прибор ночного видения"},     /* 45 */{"Тепловизор"},                 /* 46 */{"Парашют"}
};

CMD:listweapons(playerid, params[])
{
    if (0 == IsPlayerAdmin(playerid))
        return SendClientMessage(playerid, -1, "Вы не администратор сервера!");
    extract params -> new player:targetid; else // sscanf2
        return SendClientMessage(playerid, -1, "Использование: /listweapons [ID игрока/часть ника]");
    if (targetid == INVALID_PLAYER_ID)
        return SendClientMessage(playerid, -1, "Игрок не найден.");
    new text[40 * 13 + 1], line[40 + 1], len = 0;
    new weaponid, ammo;
    for (new slotid = 0; slotid <= 12; ++slotid)
    {
        GetPlayerWeaponData(targetid, slotid, weaponid, ammo);
        if (weaponid == 0 || ammo == 0)
            continue;
        switch (weaponid)
        {
            case 1..15, 40, 45, 46:
            {
                len += strcat(text[len], weapon_names[weaponid], sizeof(text)-len);
                text[len++] = '\n';
                continue;
            }
        }
        format(line, sizeof(line), "%s: %d\n", weapon_names[weaponid], ammo);
        len += strcat(text[len], line, sizeof(text)-len);
    }
    text[len] = '\0'; // Удалим последний перенос ('\n')
    line = "Оружие игрока ";
    GetPlayerName(targetid, line[14], sizeof(line) - 14);
    return ShowPlayerDialog(
        playerid, DIALOG_NONE, DIALOG_STYLE_MSGBOX,
        line, (text[0] != '\0') ? text : weapon_names[0], "Ок", "Отмена"
    );
}


См. также: