Русское сообщество по скриптингу

Добавляем в DeathRun возможность давать жизни

Статьи или фрагменты кода для новичков и уже опытных скриптеров по AMXX.

Модератор: Chuvi

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только обучающему материалу по AMX Mod X.

Добавляем в DeathRun возможность давать жизни

Сообщение Shidla » 21 ноя 2010, 20:56

DeathRun Manager 3.0.3 [13/02/2010]
При копировании материалов, обязательно оставлять хотя-бы автора!
Автор: xPaw
Версия: 3.0.3
Редактор: Shidla
Версия: 1.0 Final
Язык: РУССКИЙ + Английский (Файл языка)


Описание:
Небольшая статья, в которой я расскажу как добавить админам возможность добавлять\устанавливать пользователям жизни.
Оригинальный плагин DeathRun Manager можно взять Вы должны зарегистрироваться, чтобы видеть ссылки.

1) Для начала нам понадобится инклуд amxmisc, для этого нужно вставить строку
Код: Выделить всё
#include < amxmisc >            
там, где вводятся все инклуды. У Вас должно получиться что-то типа того:
Код: Выделить всё
#include < amxmodx >
#include < amxmisc >    // <= вставляем инклуд
#include < engine >
#include < cstrike >
#include < fun >
#include < fakemeta >
#include < hamsandwich >            


2) Далее вводим новую переменную, в которой будет храниться флаг доступа будущим к командам:
Код: Выделить всё
#define ADMIN_LSET        ADMIN_IMMUNITY        // Admin Set\Give Lifes Level            

где ADMIN_IMMUNITY - флаг доступа (подробнее о них можно почитать в файле amxconst.inc)
и у нас должно получится что-то типа этого:
Код: Выделить всё
#include < amxmodx >
#include < amxmisc >
#include < engine >
#include < cstrike >
#include < fun >
#include < fakemeta >
#include < hamsandwich >

#pragma semicolon 1

// Comment this line if you do not want to have fake player !
#define FAKE_PLAYER

// Bot name
#if defined FAKE_PLAYER
    new const g_szBotName[ ] = "DRM Fake Player";
#endif

#define ADMIN_LSET        ADMIN_IMMUNITY        // Admin Set\Give Lifes Level <= устанавливать\давать сможет админ с флагом "ADMIN_IMMUNITY" (он же "а")

// Messages prefix
new const g_szPrefix[ ] = "[ Deathrun ]"


3) Регистрируем в плагине сами команды, с помощью которых можно будет устанавливать\давать жизни (область plugin_init):
Код: Выделить всё
register_clcmd( "dr_set_lives", "CmdSetLifes", ADMIN_ALL, "dr_set_lives <name> <amount> : Set User Lifes" );
register_clcmd( "dr_set_lifes", "CmdSetLifes", ADMIN_ALL, "dr_set_lives <name> <amount> : Set User Lifes" );
register_clcmd( "dr_give_lives", "CmdGiveLifes", ADMIN_ALL, "dr_set_lives <name> <amount> : Give User Lifes" );
register_clcmd( "dr_give_lifes", "CmdGiveLifes", ADMIN_ALL, "dr_set_lives <name> <amount> : Give User Lifes" ); 

В результате получаем следующее:
Код: Выделить всё
        if( get_pcvar_num( g_pGameName ) )
            register_forward( FM_GetGameDescription, "FwdGameDesc" );
        
        register_clcmd
( "say /lifes", "CmdShowlifes" );
        register_clcmd( "say /lives", "CmdShowlifes" );
        register_clcmd( "dr_set_lives", "CmdSetLifes", ADMIN_ALL, "dr_set_lives <name> <amount> : Set User Lifes" );        // <= команда установки жизней
        register_clcmd( "dr_set_lifes", "CmdSetLifes", ADMIN_ALL, "dr_set_lives <name> <amount> : Set User Lifes" );        // <= команда установки жизней
        register_clcmd( "dr_give_lives", "CmdGiveLifes", ADMIN_ALL, "dr_set_lives <name> <amount> : Give User Lifes" );    // <= команда добавления жизней
        register_clcmd( "dr_give_lifes", "CmdGiveLifes", ADMIN_ALL, "dr_set_lives <name> <amount> : Give User Lifes" );    // <= команда добавления жизней
        
        register_clcmd
( "radio1", "CmdRadio" );
        register_clcmd( "radio2", "CmdRadio" );
        register_clcmd( "radio3", "CmdRadio" );
        
        
// Terrorist Check
        g_iThinker= create_entity( "info_target" ); 


4) Добавляем в тело плагина функции, вызываемые командами:
Код: Выделить всё
public CmdSetLifes(id, level, id2)
{
    if(get_user_flags(id) & ADMIN_LSET)
    {
        new s_Name[32], s_Amount[5];

        read_argv(1, s_Name, charsmax (s_Name));
        read_argv( 2, s_Amount, charsmax(s_Amount));

        new i_Target = cmd_target(id, s_Name, 2);

        if(!i_Target)
        {
            client_print(id, print_console, "(!) Player not found");
            return PLUGIN_HANDLED;
        }

        g_Lifes[i_Target] = g_Lifes[i_Target] + max(0, str_to_num(s_Amount));
        CmdShowlifes(i_Target);

        return PLUGIN_HANDLED;
    }

    client_print ( id, print_console, "You have no access!" );

    return PLUGIN_HANDLED;
}

public CmdGiveLifes(id, level, id2)
{
    if(get_user_flags(id) & ADMIN_LSET)
    {
        new s_Name[32], s_Amount[5];

        read_argv(1, s_Name, charsmax (s_Name));
        read_argv( 2, s_Amount, charsmax(s_Amount));

        new i_Target = cmd_target(id, s_Name, 2);

        if(!i_Target)
        {
            client_print(id, print_console, "(!) Player not found");
            return PLUGIN_HANDLED;
        }

        g_Lifes[i_Target] = g_Lifes[i_Target] + max(0, str_to_num(s_Amount));
        CmdShowlifes(i_Target);

        return PLUGIN_HANDLED;
    }

    client_print ( id, print_console, "You have no access!" );

    return PLUGIN_HANDLED;


5) Сохраняем и компилируем :) Наслаждаемся своей мегакрутизной))

Команды:
Добавить:
dr_give_lifes <nick> <amount>
dr_give_lives <nick> <amount>

Установить:
dr_set_lifes <nick> <amount>
dr_set_lives <nick> <amount>

Ссылки:
Вы должны зарегистрироваться, чтобы видеть ссылки.

Ваш Shidla [SGC]
Last UpDate: 2010-11-21 (17:25)
Аватара пользователя
Shidla
 
Сообщения: 161
Зарегистрирован: 25 сен 2009, 21:04
Благодарил (а): 700 раз.
Поблагодарили: 42 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Counter-Strike 1.6
(учусь)

Re: Добавляем в DeathRun возможность давать жизни

Сообщение EkzZzo » 07 дек 2010, 17:31

[pawn]register_clcmd( "dr_set_lives", "CmdSetLifes", ADMIN_ALL, "dr_set_lives <name> <amount> : Set User Lifes" ); [/pawn]
Может так:

[pawn]register_clcmd( "dr_set_lives", "CmdSetLifes", ADMIN_LSET, "dr_set_lives <name> <amount> : Set User Lifes" ); [/pawn]
Аватара пользователя
EkzZzo
 
Сообщения: 218
Зарегистрирован: 22 июл 2010, 01:01
Благодарил (а): 25 раз.
Поблагодарили: 38 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Добавляем в DeathRun возможность давать жизни

Сообщение ejik » 07 дек 2010, 17:45

тогда в тело надо добавлять
[pawn]
if(!cmd_access(id, level, id2, 3))
        return PLUGIN_HANDLED
[/pawn]
Аватара пользователя
ejik
 
Сообщения: 249
Зарегистрирован: 01 июл 2010, 14:07
Благодарил (а): 83 раз.
Поблагодарили: 83 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Добавляем в DeathRun возможность давать жизни

Сообщение EkzZzo » 07 дек 2010, 20:38

ejik писал(а):тогда в тело надо добавлять
[pawn]if(!cmd_access(id, level, id2, 3))
        return PLUGIN_HANDLED[/pawn]
Чем же плох такой вариант?

Зачем делать доступ к команде с любым флагом, а потом проверять наличие определенного флага. И еще, почему здесь id2:[pawn]public CmdSetLifes(id, level, id2) [/pawn]а не cid:[pawn]public CmdSetLifes(id, level, cid) [/pawn]?
Аватара пользователя
EkzZzo
 
Сообщения: 218
Зарегистрирован: 22 июл 2010, 01:01
Благодарил (а): 25 раз.
Поблагодарили: 38 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Добавляем в DeathRun возможность давать жизни

Сообщение ejik » 07 дек 2010, 20:51

еще, почему здесь id2:

а не все равно?
Аватара пользователя
ejik
 
Сообщения: 249
Зарегистрирован: 01 июл 2010, 14:07
Благодарил (а): 83 раз.
Поблагодарили: 83 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Добавляем в DeathRun возможность давать жизни

Сообщение EkzZzo » 07 дек 2010, 21:54

ejik писал(а):
еще, почему здесь id2:

а не все равно?
Вот я и хочу узнать.
Аватара пользователя
EkzZzo
 
Сообщения: 218
Зарегистрирован: 22 июл 2010, 01:01
Благодарил (а): 25 раз.
Поблагодарили: 38 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Добавляем в DeathRun возможность давать жизни

Сообщение ejik » 07 дек 2010, 21:56

все равно... ты же вместо id можешь использовать что хочешь, например, pid, killer и т.д. и тут так же
Аватара пользователя
ejik
 
Сообщения: 249
Зарегистрирован: 01 июл 2010, 14:07
Благодарил (а): 83 раз.
Поблагодарили: 83 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

Re: Добавляем в DeathRun возможность давать жизни

Сообщение quckly » 05 янв 2011, 14:26

Вместо
Код: Выделить всё
g_Lifes[i_Target] = g_Lifes[i_Target] + max(0, str_to_num(s_Amount));


нужно сделать
Код: Выделить всё
g_Lifes[i_Target] = str_to_num(s_Amount);

в функции dr_set_lives
Аватара пользователя
quckly
Скриптер
 
Сообщения: 403
Зарегистрирован: 20 ноя 2009, 10:03
Благодарил (а): 41 раз.
Поблагодарили: 243 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6


Вернуться в Статьи / фрагменты кода

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8