Делаем определенную функцию только для определенного игрока
Делаем определенную функцию только для определенного игрока

Делаем функции к которым имеет доступ только ваш ник. Лично по моему мнение этодовольно таки полезно. Можно делать всякие сюрпризы и т.д.


И так. Для начала я хочу сказать что в тексте могут быть ошибки или что-то не досказано (я не прям скриптер, но что-то зная и что-то могу)

Начнем мы пожалуй с простого примера. Например сделать только себе двойной прыжок.
#include <amxmodx>
#include <amxmisc>
#include <engine>

new jumpnum[33] = 0
new bool:dojump[33] = false

public plugin_init()
{
    register_plugin("MultiJump","1.1","Dedik")
    register_cvar("amx_maxjumps1","1")
}

public client_putinserver(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_disconnect(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_PreThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    new nbut = get_user_button(id)
    new obut = get_user_oldbutton(id)
    if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
    {
        if(jumpnum[id] < get_cvar_num("amx_maxjumps1"))
        {
            dojump[id] = true
            jumpnum[id]++
            return PLUGIN_CONTINUE
        }
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if(dojump[id] == true)
    {
        new Float:velocity[3]    
        entity_get_vector(id,EV_VEC_velocity,velocity)
        velocity[2] = random_float(265.0,285.0)
        entity_set_vector(id,EV_VEC_velocity,velocity)
        dojump[id] = false
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}    

Добавим туда new name[32] и в функции client_PreThink узнаем все ники на сервере
#include <amxmodx>
#include <amxmisc>
#include <engine>

new jumpnum[33] = 0
new bool:dojump[33] = false

new name[32]

public plugin_init()
{
    register_plugin("MultiJump","1.1","Dedik")
    register_cvar("amx_maxjumps1","1")
}

public client_putinserver(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_disconnect(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_PreThink(id)
{
    get_user_name(id, name, 31)
    
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    new nbut = get_user_button(id)
    new obut = get_user_oldbutton(id)
    if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
    {
        if(jumpnum[id] < get_cvar_num("amx_maxjumps1"))
        {
            dojump[id] = true
            jumpnum[id]++
            return PLUGIN_CONTINUE
        }
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if(dojump[id] == true)
    {
        new Float:velocity[3]    
        entity_get_vector(id,EV_VEC_velocity,velocity)
        velocity[2] = random_float(265.0,285.0)
        entity_set_vector(id,EV_VEC_velocity,velocity)
        dojump[id] = false
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}    

Далее в проверке if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP)) добавляем свой ник
И получаем:
#include <amxmodx>
#include <amxmisc>
#include <engine>

new jumpnum[33] = 0
new bool:dojump[33] = false

new name[32]

public plugin_init()
{
    register_plugin("MultiJump","1.1","Dedik")
    register_cvar("amx_maxjumps1","1")
}

public client_putinserver(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_disconnect(id)
{
    jumpnum[id] = 0
    dojump[id] = false
}

public client_PreThink(id)
{
    get_user_name(id, name, 31)
    
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    new nbut = get_user_button(id)
    new obut = get_user_oldbutton(id)
    if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP) && (equali(name, "123321")))
    {
        if(jumpnum[id] < get_cvar_num("amx_maxjumps1"))
        {
            dojump[id] = true
            jumpnum[id]++
            return PLUGIN_CONTINUE
        }
    }
    if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
    {
        jumpnum[id] = 0
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}

public client_PostThink(id)
{
    if(!is_user_alive(id)) return PLUGIN_CONTINUE
    if(dojump[id] == true)
    {
        new Float:velocity[3]    
        entity_get_vector(id,EV_VEC_velocity,velocity)
        velocity[2] = random_float(265.0,285.0)
        entity_set_vector(id,EV_VEC_velocity,velocity)
        dojump[id] = false
        return PLUGIN_CONTINUE
    }
    return PLUGIN_CONTINUE
}    
в кавычках писать свой ник
например: "123321" (ну как показано выше)

Таким вот образом мы сделали так чтобы эта функция работала на определенный ник и при этом не надо будет использовать для этого флаги доступа
ИЛИ
Мы можем сделать так чтобы у всех работала данная функция КРОМЕ игрока с этим ником
Поставив всего лишь ! перед (equali(name, "123321")
Получится как-то так !(equali(name, "123321")

Это был простой способ ограничить функцию по нику.
А теперь сделаем свой плагин только чуточку по сложнее.

Представим что у нас есть друг-задрот кс 1.6 и у него скоро ДР и вы хотите его оригинально поздравить на своем сервере ИЛИ просто выделить его из толпы игроков.

Ну типо приступим...
Для начала это приветствие и представление. Типо когда этот ваш друг зашел на сервер, то тут же появляется dhud сообщение всем (ну типо "НАРООООД,СЕГОДНЯ У НАШЕГО ВИНИПУХА ДЕНЬ РОЖДЕНИЯ! Поздравьте его как следует!")
Ну можно и еще какую нибудь музычку добавить и т.д.
#include <amxmodx>
#include <amxmisc>

new name[32]

public plugin_init()
{
    register_plugin("днюха у винипуха", "1.0","XZ")
    register_event("ResetHUD", "resetModel", "b")
}

public plugin_precache()
{
    precache_generic("sound/dr_vinipyha.mp3")
    precache_model("models/player/dr/dr.mdl")
}

public client_putinserver(id)
{
    get_user_name(id, name, 31)
    
    if(equali(name, "Vinipyx"))
    {
        set_dhudmessage(255, 0, 0, 0.45, 0.1, 1, 5.0, 8.0, 0.3, 0.5)
        show_dhudmessage(0, "НАРООООД,СЕГОДНЯ У НАШЕГО ВИНИПУХА^n ДЕНЬ РОЖДЕНИЯ! Поздравьте его как следует!")
        client_cmd(0, "mp3 play sound/dr_vinipyha.mp3")
        color_print(id, "!t[!gBIO!t] С ДР !g%s!!!", name)
        new flags = read_flags("abcdefghijklmnopqrstu")
        set_user_flags(id, flags)
    }
}

public resetModel(id, level, cid) 
{
    if(!is_user_alive(id))
    return PLUGIN_HANDLED

    if(is_user_alive(id) && equali(name, "Vinipyx"))
    {
        cs_set_user_model(id, "dr")
    }
    else 
    {
        cs_reset_user_model(id)
    }
    return PLUGIN_CONTINUE
}

stock color_print(const id, const input[], any:...)
{
        new count = 1, players[32];  
        static msg[191];                         
        vformat(msg, 190, input, 3);

        replace_all(msg, 190, "!g", "^x04"); // Green Color                 
        replace_all(msg, 190, "!n", "^x01"); // Default Color
        replace_all(msg, 190, "!t", "^x03"); // Team Color

        if (id) players[0] = id; else get_players(players, count, "ch");
        {
            for (new i = 0; i < count; i++)
            {                                           
                if (is_user_connected(players[i]))
                {                                           
                    message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
                    write_byte(players[i]);    
                    write_string(msg);
                    message_end();
                }
            }
        }
    }
Не знаю есть ли там ошибки... ну думаю должно работать =)
Я думаю винипуху понравилось такое поздравление (знаете... вроде мелочь а приятно будет =) )

Ну а более серьезные задачи вы сами себе придумаете!

Думаю я расписал все нормально и вопросов быть не должно. По коду все и так будет ясно.
Что ж, думаю вам это статья это пригодится =) если хотите что-то похожее, то пишите в коментах, ну и конечно же ставьте лайки =)

Привет, наша адмнистрация публикует только пушечный контент, поставь лайк под постом ниже и напишите самый топовый комментарий, мы готовим материал только для тебя, любимый Гость.

Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Основа для вашей сборки
ReHLDS 3.13.0.788

ReHLDS (Reverse-engineered) - это новый шаг вперед, который дает второе дыхание нашим серверам. ReHLDS работает в 2 раза быстрей, чем HLDS.

AmxModx 5.2.9.4

AMXModX - это Metamod дополнение, которое позволяет создавать новые модификации для Half-Life на языке Pawn

Reunion 0.1.0.137

Reunion является продолжением Dproto для ReHLDS. Это metamod плагин, который позволяет заходить 47/48 Non-Steam на сервер.

Revoice 0.1.0.34

Revoice - это Metamod plugin, который дает возможность общения голосовым чатом между non-steam и steam клиентами.

Metamod-r 1.3.0.131

Новый Metamod-r содержит огромное количество оптимизаций производительности и намного более чистый код. Ядро было написано с использованием JIT-компилятора.

Ultimate Unprecacher 1.1

Ultimate Unprecacher являет плагином для MetaMod, работает он по принципу отключение не нужных ресурсов на вашем сервере, тем самым вы сможете освободить места для ресурсов под ваши плагины, с помощью данного модуля можно избавиться от ошибки 512!

ReAuthCheck 0.1.6

ReAuthCheck - это Metamod плагин, который занимается проверкой ваших игроков на валидность, с помощью данного модуля для REHLDS вы сможете защитить свой сервер от ботов, которые постоянно спамят рекламу или просто забивают слот на сервере!

NetBufExtender (NBEX) 1.0

NetBufExtender или NBEX - это метамод-плагин, который расширяет "интернет-буфер": буферы сервера и клиента(гарантия не 100%). Расширяет до 64 кб. Это значит, что у игроков уменьшается вероятность быть кикнутыми с ошибкой "Reliable channel overflowed".

UserInfoNetOptimizer (UINO) 1.0

UINO — metamod-плагин, который позволяет удалять ненужные поля из userinfo(setinfo) когда движок передаёт его другим игрокам на сервере. Данная мера уменьшает объём передаваемых данных и немного сокращает шанс быть кикнутым с "Reliable channel overflowed".

Информация

Добро пожаловать на CS-WZ.COM!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запись!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт