PDA

Просмотр полной версии : [CMD] /weapon - смотрим оружие игрока



Desulaid
28.01.2016, 14:59
Команда просматривает все оружие у игрока: выводит наименование оружия и его количество. Я не смог подобрать обобщенное слово как и для патронов, так и для ... В общем обозвал все это "количеством".


http://ihost.pro-pawn.ru/image.php?di=GD1G

Автор: Untonyst


#include <dc_cmd>
#include <sscanf2>

#if !defined MAX_WEAPON_NAME
#define MAX_WEAPON_NAME (19)
#endif

#if !defined WEAPON_FIST
#define WEAPON_FIST (0)
#endif

#if !defined MAX_WEAPON_SLOTS
#define MAX_WEAPON_SLOTS (12)
#endif

COMMAND:weapon(playerid, params[])
{
if(0 == IsPlayerAdmin(playerid)) // меняем на свой аналог
return SendClientMessage(playerid, -1, "Вы не администратор!");

new
targetid,
weapon_id, weapon_name[MAX_WEAPON_NAME], ammo;

if (sscanf(params, "u", targetid))
return SendClientMessage(playerid, -1, "Введите /weapon [игрок]");

if (0 == IsPlayerConnected(targetid)) // меняем на свой аналог
return SendClientMessage(playerid, -1, "Такого игрока нет на сервере!");

static const
fmt_str_dlg_title[] = "Оружие %s",
fmt_str_dlg_head_body[] = "Оружие\tКоличество\n",
fmt_str_dlg_body[] = "%s\t%i\n%s";

new
str_dlg_title[sizeof(fmt_str_dlg_title)-2+MAX_PLAYER_NAME+1],
str_dlg_body[
(sizeof(fmt_str_dlg_head_body)-1)-2*3+2+
(((sizeof(fmt_str_dlg_body)-1)-2*5+MAX_WEAPON_NAME+6+2)*12)+1
];

GetPlayerName(targetid, str_dlg_title, MAX_PLAYER_NAME+1);
format(str_dlg_title, sizeof(str_dlg_title), fmt_str_dlg_title, str_dlg_title);

for (new i; i <= MAX_WEAPON_SLOTS; i++)
{
GetPlayerWeaponData(targetid, i, weapon_id, ammo);
if (weapon_id == WEAPON_FIST) continue;
else
{
GetWeaponName(weapon_id, weapon_name, MAX_WEAPON_NAME);
format(str_dlg_body, sizeof(str_dlg_body), fmt_str_dlg_body, weapon_name, ammo, str_dlg_body);
}
}

strins(str_dlg_body, fmt_str_dlg_head_body, 0);

ShowPlayerDialog(playerid, 0, DIALOG_STYLE_TABLIST_HEADERS, str_dlg_title, str_dlg_body, "Закрыть", "");
return 1;
}


Копирование данной темы без разрешения автора запрещено!

L0ndl3m
28.01.2016, 16:02
Хорошая реализация, пожалуй одобрю, но есть некоторые недочёты ( Если захочешь узнать о чём речь, то напиши ВК ).

nikvlad
01.06.2016, 15:14
Антон, я делаю сис-му на подобии этой , решил позаимствовать часть кода у вас и у меня возник вопрос:

fmt_str_dlg_body[] = "%s\t%i\n%s";

Зачем нужен этот перенос и %s? Ведь у вас только 2 столбца!?

Desulaid
01.06.2016, 16:22
Антон, я делаю сис-му на подобии этой , решил позаимствовать часть кода у вас и у меня возник вопрос:

fmt_str_dlg_body[] = "%s\t%i\n%s";

Зачем нужен этот перенос и %s? Ведь у вас только 2 столбца!?

Это все то, что будет содержится в этих столбцах. Названия оружия и патроны. А третье - это же содержимое.

UPD:

format(str_dlg_body, sizeof(str_dlg_body), fmt_str_dlg_body, weapon_name, ammo, str_dlg_body);

nikvlad
01.06.2016, 16:55
Это все то, что будет содержится в этих столбцах. Названия оружия и патроны. А третье - это же содержимое.

UPD:

format(str_dlg_body, sizeof(str_dlg_body), fmt_str_dlg_body, weapon_name, ammo, str_dlg_body);

Все, спасибо, доперло:D