Просмотр полной версии : [CMD] /agm Бессмертие (GM) для администратора [DC_CMD]
lexjusto
29.03.2014, 22:41
Доброго времени суток, *username*. Сейчас я покажу как создать команду на бессмертие (тобишь GM) для администратора.
Как работает команда:
Вводим /agm - мы бессмертны.
Вводим /agm ещё раз и мы снова можем умереть.
Для начала хочу предупредить, что команда написана на DC_CMD (by Daniel Cortez).
Начнем.
В любое место добавляем саму команду: (лучше добавлять ко всем командам,так будет удобнее)
CMD:agm(playerid, params[])
{
if(GetPVarInt(playerid,"AdminAuth") == 0 || PlayerAdminInfo[playerid][0] < 1) return 1; //Ваша проверка на администратора
if(GetPVarInt(playerid,"agm") == 0)
{
SetPVarInt(playerid,"agm", 1);
SetPlayerHealth(playerid, 0x7F800000);
SendClientMessage(playerid, -1, "AGM ON");
}
else
{
SetPVarInt(playerid,"agm", 0);
SetPlayerHealth(playerid, 100.0);
SendClientMessage(playerid, -1, "AGM OFF");
}
return 1;
}
Также рекомендую "задефайнить" бесконечное значение которое мы использовали для создания бессмертия.
Для этого в начало мода ко всем #DEFINE добавим:
#define INFINITY (Float:0x7F800000)
Ну и теперь можем использовать бесконечное значение там, где хотим.
Надеюсь,что помог кому-либо. (на плюсы не рассчитываю)
Nikoo007
29.03.2014, 23:40
Посмотрю)
Salvacore
30.03.2014, 06:48
Молодец.
Salvacore
27.06.2014, 14:28
Update.
Salik_Davince
01.09.2014, 02:50
зачем пвары если можно на простых переменных.
зачем пвары если можно на простых переменных.
Разницы как таковой нет, в случае с пварами не будет потребляться память, работает медленне ( не всегда ), второй вариант противоположность пварам по производительности.
Понравилось, взял-бы себе.
BaBuIIIkaDrifteR
12.01.2015, 03:29
Не проще ?
if(strcmp(cmdtext,"/agm",true)==0)
{
if(PlayerInfo[playerid][Admin] >= 1){SetPlayerArmour(playerid, 999999); SendClientMessage(playerid, -1, "AGM ON");}
else{SetPlayerArmour(playerid, 100); SendClientMessage(playerid, -1, "AGM OFF");}
return 1;
}
Mazzilla
12.01.2015, 11:10
Не проще ?
if(strcmp(cmdtext,"/agm",true)==0)
{
if(PlayerInfo[playerid][Admin] >= 1){SetPlayerArmour(playerid, 999999); SendClientMessage(playerid, -1, "AGM ON");}
else{SetPlayerArmour(playerid, 100); SendClientMessage(playerid, -1, "AGM OFF");}
return 1;
}
Если игрок - админ, то установим много брони и напишем AGM ON, если нет, то установим 100 единиц брони и напишем AGM OFF - очень проще.
BaBuIIIkaDrifteR
12.01.2015, 23:43
Если игрок - админ, то установим много брони и напишем AGM ON, если нет, то установим 100 единиц брони и напишем AGM OFF - очень проще.
Ой Сорри ))
if(strcmp(cmdtext,"/agm",true)==0)
{
if(PlayerInfo[playerid][Admin] >= 1){SetPlayerHealth(playerid, 999999); SendClientMessage(playerid, -1, "AGM ON");}
else{SetPlayerHealth(playerid, 100); SendClientMessage(playerid, -1, "AGM OFF");}
return 1;
}
Ой Сорри ))
if(strcmp(cmdtext,"/agm",true)==0)
{
if(PlayerInfo[playerid][Admin] >= 1){SetPlayerHealth(playerid, 999999); SendClientMessage(playerid, -1, "AGM ON");}
else{SetPlayerHealth(playerid, 100); SendClientMessage(playerid, -1, "AGM OFF");}
return 1;
}
Разница с вашим предыдущим кодом?
bazz`layter
13.01.2015, 14:28
Там он выдавал броню, а тут ХП.
Ну, если смотреть со стороны автора, то возможно он учёл комментарий от "Mazilla", мол, смысл выдавать броню, если можно дать ХП, вот и изменил функции, лично мое мнение)
Одна из самых нормальный идей в первом посте. Количество строк не влияет на качество самого кода. Да и команды не будут работать, где проверка на то, что игрок уже вводил команду?
Mazzilla
13.01.2015, 15:10
Там он выдавал броню, а тут ХП.
Ну, если смотреть со стороны автора, то возможно он учёл комментарий от "Mazilla", мол, смысл выдавать броню, если можно дать ХП, вот и изменил функции, лично мое мнение)
Смысл моего комментария был совсем другим. При вводе данной команды администратором, выдаст бронь/хп и напишет ГМ ОН. При повторном вводе администратором будет то же самое, а как отключить ГМ? При каждом вводе команды обычным игроком, выдаст бронь/хп в 100 единиц и напишет ГМ ОФФ. Где логика?
Лучше уж бессмертие с проверкой в авто ли игрок.
Если в авто то циклический восстанавливать HP авто(для защиты от взрывов).
I'm Cobra
22.01.2015, 21:37
Ой Сорри ))
if(strcmp(cmdtext,"/agm",true)==0)
{
if(PlayerInfo[playerid][Admin] >= 1){SetPlayerHealth(playerid, 999999); SendClientMessage(playerid, -1, "AGM ON");}
else{SetPlayerHealth(playerid, 100); SendClientMessage(playerid, -1, "AGM OFF");}
return 1;
}
Ничего что ХП float и пишется вот так 100.0?
Ничего что ХП float и пишется вот так 100.0?
Без разницы, число будет приниматься как float.
I'm Cobra
30.01.2015, 09:02
Я бы сделал так:
CMD:agm(playerid, params[]) {
new bool:proverka[MAX_PLAYERS char];
/*Ваша проверка на админку*/
if(proverka{playerid} == false) proverka{playerid} = true, SetPlayerHealth(playerid, 0x7F800000), SendClientMessage(playerid, -1, "AGM ON");
else proverka{playerid} = false, SetPlayerHealth(playerid, 100.0), SendClientMessage(playerid, -1, "AGM OFF");
}
Mazzilla
30.01.2015, 13:10
Я бы сделал так:
CMD:agm(playerid, params[]) {
new bool:proverka[MAX_PLAYERS char];
/*Ваша проверка на админку*/
if(proverka{playerid} == false) proverka{playerid} = true, SetPlayerHealth(playerid, 0x7F800000), SendClientMessage(playerid, -1, "AGM ON");
else proverka{playerid} = false, SetPlayerHealth(playerid, 100.0), SendClientMessage(playerid, -1, "AGM OFF");
}
proverka{playerid} всегда будет равна false при вызове команды -
new bool:proverka[MAX_PLAYERS char]; должна быть глобальной переменной тогда:
new bool:proverka[MAX_PLAYERS char];
CMD:agm(playerid, params[]) {
proverka{playerid} = !proverka{playerid};
if(proverka{playerid}) return SetPlayerHealth(playerid, 0x7F800000), SendClientMessage(playerid, -1, "AGM ON");
else return SetPlayerHealth(playerid, 100.0), SendClientMessage(playerid, -1, "AGM OFF");
}
Desulaid
13.12.2015, 16:18
А так не проще?
CMD:agm(playerid)
{
if (/* не админ и все такое */)
return 1;
if (GetPVarInt(playerid, "agm"))
{
SetPVarInt(playerid, "agm", 1);
SetPlayerHealth(playerid, 0x7F800000);
SendClientMessage(playerid, -1, "AGM ON");
return 1;
}
SetPVarInt(playerid, "agm", 0);
SetPlayerHealth(playerid, 100.0);
SendClientMessage(playerid, -1, "AGM OFF");
return 1;
}
Где второй аргумент "params" в основании команды?
Desulaid
13.12.2015, 17:39
Где второй аргумент "params" в основании команды?
Мы же никаких параметров не берем, можно и без "params"
Мы же никаких параметров не берем, можно и без "params"
Ещё раз перечитай миф, там не об этом речь шла.
Desulaid
13.12.2015, 18:37
Ещё раз перечитай миф, там не об этом речь шла.
Вот сейчас я действительно запутался. Я просто убрал массив из команды из-за ненадобности его использования.
$continue$
13.12.2015, 18:38
Где второй аргумент "params" в основании команды?
Зачем он нужен? Для эстетики?
Если params не используется - логично его опустить, не?
Это как с функцией - есть параметр, но ты его нигде не используешь - логично его убрать.
Daniel_Cortez
13.12.2015, 18:50
Лично я не вижу причин пропускать массив params, даже если он не используется.
Во-первых, тенически команда на ZCMD/DC_CMD - это public-функция, а у таких функций компилятор не выдаёт предупреждений о неиспользуемых аргументах.
Во-вторых, непривычно читать нестандартный заголовок функции.
В-третьих, даже если убрать из заголовка аргумент params, это никак не отразится на работе команды - в функцию всё так же будут передаваться 2 аргумента: число и адрес строки с параметрами команды.
В-четвёртых, в других языках несовпадение параметров у экспортируемых функций может привести к падению программы. Даже если в Pawn такой проблемы нет, всё равно следует с самого начала привыкать прописывать все параметры, чтобы избежать подобных недоразумений при работе с другими ЯП.
В целом, я с вами согласен, Daniel.
Вот ещё некоторые замечания по предоставленной теме:
1. Если вы будете использовать «ALT» в командном процессоре «dc_cmd», то будет ошибка (точнее, предупреждение: «warning 202: number of arguments does not match definition»), так как аргументы возвращаемой функции передают «params».
2. Плагин/Скрипт командного процессора в любом случае будет передавать массив «params».
Иван Бубнов
28.12.2015, 16:03
Не проще ?
if(strcmp(cmdtext,"/agm",true)==0)
{
if(PlayerInfo[playerid][Admin] >= 1){SetPlayerArmour(playerid, 999999); SendClientMessage(playerid, -1, "AGM ON");}
else{SetPlayerArmour(playerid, 100); SendClientMessage(playerid, -1, "AGM OFF");}
return 1;
}
Логический, 999999 хп когда нибудь закончится.
Логический, 999999 хп когда нибудь закончится.
прописал снова кмд и вооля, снова до*** хп
Daniel_Cortez
06.01.2016, 00:16
Не проще ?
if(strcmp(cmdtext,"/agm",true)==0)
{
if(PlayerInfo[playerid][Admin] >= 1){SetPlayerArmour(playerid, 999999); SendClientMessage(playerid, -1, "AGM ON");}
else{SetPlayerArmour(playerid, 100); SendClientMessage(playerid, -1, "AGM OFF");}
return 1;
}
Логический, 999999 хп когда нибудь закончится.
Не просто "когда-нибудь закончатся", а вообще не дадут желаемого эффекта. Любые значения, кроме NaN (0x7F800000 в данном случае, но есть и другие варианты), подгоняются под диапазон от 0 до 255. Таким образом, если установить игроку 256 ХП, полоса здоровья не будет мигать и будет полной, но игрок сдохнет от любого неаккуратного прыжка с небольшой высоты, при этом GetPlayerHealth будет возвращать 0.0 ХП. В свою очередь, от 999 999 будет эффект, как от 999999 % 256 = 63 ХП.
Исключительная ситуация с NaN, скорее всего, связана с тем, что NaN не равно даже самому себе и сравнение с ним других чисел должно производиться особым образом (чего разработчики GTA:SA и не учли). По сути, это очередной баг, который можно использовать в целях скриптера.
Иван Бубнов
08.02.2016, 19:35
CMD:agm(playerid, params[])
{
if(IsPlayerAdmin(playerid) == 0) //Ваша проверка на администратора
return 1;
if(sscanf(params, "d", params[0]))
return SendClientMessage(playerid, -1, "Используйте: /agm [0/1]");
if(params[0] < 0 || params[0] > 1)
return SendClientMessage(playerid, -1, "0 - выкл, 1 - вкл!");
if(params[0] == 0)
{
SetPlayerHealth(playerid, 100.0);
SendClientMessage(playerid, -1, "AGM OFF");
return 1;
}
SetPlayerHealth(playerid, 0x7F800000);
SendClientMessage(playerid, -1, "AGM ON");
return 1;
}
Michele_Orlando
23.05.2016, 15:45
Спасибо выручил, а то все не мог найти :)
Tretyak01
01.01.2019, 03:26
Как мне узнать мою проверку на администратора? помогите прошу вас.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot