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

Меню записи демо игроку

Новые плагины для AMX Mod X, которые были добавлены в базу плагинов нашего форума. Плагины еще не утвеждены администратором/модератором.

Модератор: Leonidddd

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

Данный раздел форума служит для добавления новых плагинов в базу нашего форума. После того, как администратор/модератор утвердит плагин, он будет перемещен в раздел "Утвежденные плагины".

Правила при добавлении новых плагинов:

1. При вставке кода плагина необходимо использовать тег [pawn], в противном случае, если тег [pawn] не отображает ваш код, можно использовать тег [code].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. Обязательно выкладывайте исходник sma плагина. Запрещено выкладывать amxx файл.
4. Обязательно указывайте настоящих авторов плагина, если вы использовали чьи-то наработки или функции, указывайте их авторов в сообщении.
5. Необходимо заполнять детальную информацию о плагине (версию, настройки, используемые модули, список изменений и другую).

Меню записи демо игроку

Сообщение nemec21 » 02 июн 2016, 02:44

Описание: Доработал плагин запись демо, теперь что бы не писать от сервера каждому игроку демо (немного разгрузить сервер)!
Администратор может вручную по списку меню включить любому игроку запись!


Код: Выделить всё
#include <amxmodx>

#define IMMUNITET ADMIN_CVAR //иммунитет игрока

new g_recordDemO[33]

public plugin_init()
{
    register_plugin("Record Demo", "1.0", "...........")

    register_clcmd("say /recorddemo", "RecordDemo")
}

public client_disconnect(id)
{
    g_recordDemO[id] = false
}

public RecordDemo(id)
{
    if(!(get_user_flags(id) & ADMIN_MENU))
    {
        ChatColor(id, "^3[^4RECORD demo^3] ^1Вклюсить запись демо игроку, может толькл ^4Админ")
        return
    
}

    new title[64]
    new iMenu = menu_create("\yМеню\rRECORD", "menu_handler")

    new s_Players[32], i_Num, iPlayer
    new s_Player
[4], s_Name[32]

    get_players(s_Players, i_Num, "ach")

    for(new i; i < i_Num; i++)
    {
        iPlayer = s_Players[i]

        get_user_name(iPlayer, s_Name, charsmax(s_Name))
        num_to_str(iPlayer, s_Player, charsmax(s_Player))

        if(get_user_flags(iPlayer) & IMMUNITET)
        {
            formatex(title, charsmax(title), "\d%s \r* \dиммунититет", s_Name)
        }
        else
        
{
            formatex(title, charsmax(title), "%s %s", s_Name, g_recordDemO[iPlayer] ? " \r* \yидет запись..." : "")
        }
        menu_additem(iMenu, title, s_Player)
    }

    menu_setprop(iMenu, MPROP_BACKNAME , "Назад")
    menu_setprop(iMenu, MPROP_NEXTNAME , "Далее")
    menu_setprop(iMenu, MPROP_EXITNAME,  "Выход")

    menu_display(id, iMenu, 0)
}

public menu_handler(id, menu, item)
{
    if (item == MENU_EXIT)
    {
        menu_destroy(menu)
        return PLUGIN_HANDLED
    
}
    new s_Data[6], s_Name[1], i_Access, i_Callback
    menu_item_getinfo
(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)
    new iPlayer = str_to_num(s_Data)

    if(get_user_flags(iPlayer) & IMMUNITET)
        return PLUGIN_HANDLED

    RecordDemo
(id)
    NoWeaponFunc(iPlayer)

    menu_destroy(menu)
    return PLUGIN_HANDLED
}

public NoWeaponFunc(id)
{
    if(!is_user_connected(id))
    {
        ChatColor(id, "^3[^4RECORD demo^3] ^1игрок вышел с игры")
        return
    
}

    if(g_recordDemO[id])
    {
        ChatColor(id, "^3[^4RECORD demo^3] ^1запись уже запущена")
        return
    
}

    g_recordDemO[id] = true

    new Map
[32], szTime[32]
    get_mapname (Map, 31)
    get_time("%d%b", szTime, 31)

    client_cmd(id, "stop; record Last_Shot_%s_%s",szTime, Map )
}

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

    replace_all ( msg, 190, "!g", "^4" )
    replace_all ( msg, 190, "!y", "^1" )
    replace_all ( msg, 190, "!t", "^3" )

    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 ()
            }
        }
    }
}


У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
nemec21
 
Сообщения: 799
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 212 раз.
Поблагодарили: 44 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Меню записи демо игроку

Сообщение Subb98 » 02 июн 2016, 05:27

nemec21 писал(а):что бы не писать от сервера каждому игроку демо (немного разгрузить сервер)!

От сервера мы только посылаем команду, запись ведётся на стороне клиента и никоим образом "не грузит" сервер.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Меню записи демо игроку

Сообщение nemec21 » 02 июн 2016, 09:56

Влад, ну этот вариант отличается от обычного рекорд демо, может кому понравится
Аватара пользователя
nemec21
 
Сообщения: 799
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 212 раз.
Поблагодарили: 44 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Меню записи демо игроку

Сообщение Fedcomp » 02 июн 2016, 10:30

Subb98 писал(а):
nemec21 писал(а):что бы не писать от сервера каждому игроку демо (немного разгрузить сервер)!

От сервера мы только посылаем команду, запись ведётся на стороне клиента и никоим образом "не грузит" сервер.

Насколько я помню при записи демки посылается fullupdate. Не знаю насколько это критично.
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


"я ставлю зависимости потому что мне приятно" - subb98 @ 2017
Аватара пользователя
Fedcomp
Администратор
 
Сообщения: 4936
Зарегистрирован: 28 авг 2009, 20:47
Благодарил (а): 813 раз.
Поблагодарили: 1317 раз.
Языки программирования: =>
pawn / php / python / ruby
javascript / rust

Re: Меню записи демо игроку

Сообщение Subb98 » 02 июн 2016, 13:51

nemec21 писал(а):Влад, ну этот вариант отличается от обычного рекорд демо, может кому понравится

Да я же не говорил, что плагин не нужный, я просто указал на неточность в описании. :-)

Fedcomp писал(а):Насколько я помню при записи демки посылается fullupdate. Не знаю насколько это критично.

Верно. Раньше ещё можно было флудить этой командой, насколько знаю, сейчас это не актуально. По крайней мере, для серверов с Dproto не ниже 0.9.391. Как обстоят дела в новых билдах и с Reunion - я не в курсе, однако.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: Меню записи демо игроку

Сообщение RevCrew » 02 июн 2016, 18:26

nemec21, зачем в get_players флаг 'a'?
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1648
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 273 раз.
Поблагодарили: 357 раз.
Языки программирования: Unkown


Вернуться в Добавленные новые плагины

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

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