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

Простой информер для сервера

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

Модератор: Leonidddd

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

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

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

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

Простой информер для сервера

Сообщение Geneor » 21 дек 2021, 14:54

Автор: Geneor
Версия: 1.0
Описание: Простой информер для сервера. Подойдет для любого мода.

Настройки флага и позиции информера
Код: Выделить всё
#define IsFlagAdmin(%0) (get_user_flags(%0) & ADMIN_BAN) // флаг d.

#define INFORMER_POS_X 0.13                 // Координата информера по горизонтали.
#define INFORMER_POS_Y 0.15                 // Координата информера по вертикали.      


Используемые модули: Amxmisc, Hamsandwich
Требования: AMXX 1.9.0
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Geneor
 
Сообщения: 12
Зарегистрирован: 19 ноя 2018, 15:10
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn

Re: Простой информер для сервера

Сообщение БиЗоН » 21 дек 2021, 18:26

Подойдет для любого мода.

Подойдет частично для некоторых модов. Взять Deathrun - не будет отражать всю суть.

Используемые модули: Amxmisc, Hamsandwich

Неоправданное использование модуля amxmisc из-за одной функции "set_task_ex".

Код: Выделить всё
set_task_ex1.0"@Task_Informer"111, .flags SetTask_Repeat ); 

Заменить на:
Код: Выделить всё
set_task1.0"@Task_Informer"111, .flags "b"); 

Не будет разницы. И не нужно будет подключать модуль amxmisc.

И для чего вообще айди задачи 111 задается, если дальше нигде не используется? К тому же магическое число.
И к слову, ham может некорректно ловить спавн игрока, поэтому здесь сомнительная реализация.
А вообще смысла в информере нет, их клепают кучами, без надобности. Реализовывать нужно то, что реализовано плохо или вовсе не реализовано, не нужно выкладывать плагины, аналогов которых полным-полно.
Аватара пользователя
БиЗоН
 
Сообщения: 62
Зарегистрирован: 24 мар 2014, 21:05
Откуда: Екатеринбург
Благодарил (а): 7 раз.
Поблагодарили: 21 раз.
Опыт программирования: Больше трех лет
Языки программирования: C#, PHP

Re: Простой информер для сервера

Сообщение Mistrick » 21 дек 2021, 19:46

БиЗоН писал(а):Неоправданное использование модуля amxmisc из-за одной функции "set_task_ex".

Это не модуль, а набор стоков, его включение дает нулевую нагрузку, кроме включения кода используемых стоков.
Аватара пользователя
Mistrick
Скриптер
 
Сообщения: 2930
Зарегистрирован: 04 ноя 2012, 18:15
Благодарил (а): 43 раз.
Поблагодарили: 1234 раз.
Языки программирования: PAWN
С/С++(few above zero)

Re: Простой информер для сервера

Сообщение БиЗоН » 21 дек 2021, 22:53

Mistrick, ТС назвал это модулем, называю вещи своими именами для него. А я и не говорил, что это даёт нагрузку, я говорил, что это неоправданное использование библиотеки (ныне ненужной, по моему скромному мнению), ничего больше.
Да и вообще вся суть сводилась к тому, что это бесполезный плагин с учётом большого множества аналогов.Да и вообще заявлять, что информер подойдёт для любого модуля глупо, информер вещь узкоспециализированная для многих модов и несёт определённую визуальную информативность, что здесь наблюдать архаично сложно.
Как будто на дворе 2к15 год, где каждый пишет вновь и вновь один за другим велосипеды.
Аватара пользователя
БиЗоН
 
Сообщения: 62
Зарегистрирован: 24 мар 2014, 21:05
Откуда: Екатеринбург
Благодарил (а): 7 раз.
Поблагодарили: 21 раз.
Опыт программирования: Больше трех лет
Языки программирования: C#, PHP

Re: Простой информер для сервера

Сообщение Geneor » 22 дек 2021, 11:39

БиЗоН писал(а):
Подойдет для любого мода.

Подойдет частично для некоторых модов. Взять Deathrun - не будет отражать всю суть.

Используемые модули: Amxmisc, Hamsandwich

Неоправданное использование модуля amxmisc из-за одной функции "set_task_ex".

Код: Выделить всё
set_task_ex( 1.0, "@Task_Informer", 111, .flags = SetTask_Repeat );

Заменить на:
Код: Выделить всё
set_task( 1.0, "@Task_Informer", 111, .flags = "b");

Не будет разницы. И не нужно будет подключать модуль amxmisc.

И для чего вообще айди задачи 111 задается, если дальше нигде не используется? К тому же магическое число.
И к слову, ham может некорректно ловить спавн игрока, поэтому здесь сомнительная реализация.
А вообще смысла в информере нет, их клепают кучами, без надобности. Реализовывать нужно то, что реализовано плохо или вовсе не реализовано, не нужно выкладывать плагины, аналогов которых полным-полно.


Хорошо, я учту свои ошибки в данной плагине. А так же учту что это просто "мусор". Но всё же спасибо за советы :-)
Аватара пользователя
Geneor
 
Сообщения: 12
Зарегистрирован: 19 ноя 2018, 15:10
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Опыт программирования: Около 3 месяцев
Языки программирования: Pawn

Re: Простой информер для сервера

Сообщение БиЗоН » 22 дек 2021, 15:07

Geneor писал(а):А так же учту что это просто "мусор".

Ну это уже твои самокритичные слова. Просто говорю, что подобный плагин неактуален, ибо аналогов много. Нужно что-то новенькое.
Аватара пользователя
БиЗоН
 
Сообщения: 62
Зарегистрирован: 24 мар 2014, 21:05
Откуда: Екатеринбург
Благодарил (а): 7 раз.
Поблагодарили: 21 раз.
Опыт программирования: Больше трех лет
Языки программирования: C#, PHP

Re: Простой информер для сервера

Сообщение vitalik19842105 » 31 дек 2021, 03:10

Geneor, пользуюсь моментом)))
Код: Выделить всё
@Ham_PlayerSpawn_Post( Id ) {
    if( is_user_alive( Id ) ) {
        switch( get_user_team( Id ) ) {
            case 1: g_iAliveTeamNum[ Id ][ TNum ]++;
            case 2: g_iAliveTeamNum[ Id ][ CTNum ]++;
        }
    }
}
>>
Код: Выделить всё
@Ham_PlayerSpawn_Post( Id ) {
    if( is_user_alive( Id ) ) {
        static teams; teams = get_user_team( Id )
        switch( teams ) {
            case 1..2: g_iAliveTeamNum[ Id ][ teams ]++;
        }
    }
}

И тут, если игрок успеет выйти, а ты пошлёшь ему сообщение?
Код: Выделить всё
Task_Informer() {
    set_hudmessage( 240, 145, 30, INFORMER_POS_X, INFORMER_POS_Y, 0, 0.0, 0.8, 0.2, 0.2, -);
    
    new GetMapName
[ 32 ], GetPlayersNum = get_playersnum();
    get_mapname( GetMapName, charsmax( GetMapName ) );
    static pPlayer[ MAX_PLAYERS ], IdCount, Id;

    get_players_ex( pPlayer, IdCount, GetPlayers_ExcludeHLTV | GetPlayers_ExcludeBots );
    for( new i; i < IdCount; i++ ) 
    
{
        Id = pPlayer[ i ];
        show_hudmessage( Id, "Карта: %d^nИгроков: %d/%d^nАдминов онлайн: %d^nЖивых Террористов: %d^nЖивых Контр-Террористов: %d", 
        GetMapName
, GetPlayersNum, MaxClients, g_iAdminNum, g_iAliveTeamNum[ Id ][ TNum ], g_iAliveTeamNum[ Id ][ CTNum ] );
    }

В цикле не нужно вот эту проверочку?
Код: Выделить всё
if(! is_user_connected(Id)) continue

И зачем ты получаешь количество игроков на сервере через get_playersnum(), если в get_players второй параметр это и есть количество игроков на данный момент IdCount?
Опять же вопрос)))
Зачем получать каждый раз название карты, если ее можно получить один раз в plugin_init, она никаким образом не сменится
Аватара пользователя
vitalik19842105
 
Сообщения: 367
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 38 раз.
Поблагодарили: 40 раз.
Опыт программирования: Меньше недели
Языки программирования: Нуждаюсь в помощи

Re: Простой информер для сервера

Сообщение БиЗоН » 31 дек 2021, 15:04

vitalik19842105 писал(а):
Код: Выделить всё
@Ham_PlayerSpawn_Post( Id ) {
    if( is_user_alive( Id ) ) {
        static teams; teams = get_user_team( Id )
        switch( teams ) {
            case 1..2: g_iAliveTeamNum[ Id ][ teams ]++;
        }
    }
}

Статика здесь не нужна, событие вызывается не так часто и ничего не кэшируется и свич для двух кейсов использовать глупо таким образом.
vitalik19842105 писал(а):В цикле не нужно вот эту проверочку?
Код: Выделить всё
if(! is_user_connected(Id)) continue

Нет.
vitalik19842105 писал(а):И зачем ты получаешь количество игроков на сервере через get_playersnum(), если в get_players второй параметр это и есть количество игроков на данный момент IdCount?

Правильная функция для получения количества игроков на сервере get_playersnum() (если учесть, что в get_players с помощью отсечений получаемое количество игроков используется для цикла и будет разнИться), единственное, что он её не закэшировал, не сделал глобальной, ровно как и получение названия карты. Вообще по его задумке тут даже цикл не нужен, просто show_hudmessage(0, ...
Аватара пользователя
БиЗоН
 
Сообщения: 62
Зарегистрирован: 24 мар 2014, 21:05
Откуда: Екатеринбург
Благодарил (а): 7 раз.
Поблагодарили: 21 раз.
Опыт программирования: Больше трех лет
Языки программирования: C#, PHP

Re: Простой информер для сервера

Сообщение vitalik19842105 » 31 дек 2021, 17:42

Почти все что написал, почти все бред!
1. teams = get_user_team( Id ), записал в переменную, минус одно обращение к нативу get_user_team(ты походу любишь быдло код писать), насчет switsh, это его задумка!
2. if(! is_user_connected(Id)) continue; согласен сообщение нужно было послать через индекс 0 всем игрокам и не нужен никакой цикл, ну раз он его написал я указал на ошибку! Насчет проверки, ели игрок подвиснет например в это время, теперь вопрос. Какому айди придет сообщение?
3. Насчет get_players, от куда такая инфа что он не правильно нам дас количество игроков, покажи источник доказывающий это)))
4, Насчет записи названия карты, зачем каждый раз получать ее, если достаточно получить ее один раз)))) (Теперь я точно уверен, что быдло код тебе по душе)
что он её не закэшировал, не сделал глобальной

это всего лишь для читабельности кода, но опять же это я отношу к быдлятине
Аватара пользователя
vitalik19842105
 
Сообщения: 367
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 38 раз.
Поблагодарили: 40 раз.
Опыт программирования: Меньше недели
Языки программирования: Нуждаюсь в помощи

Re: Простой информер для сервера

Сообщение БиЗоН » 31 дек 2021, 18:20

vitalik19842105 писал(а):Почти все что написал, почти все бред!
1. teams = get_user_team( Id ), записал в переменную, минус одно обращение к нативу get_user_team(ты походу любишь быдло код писать), насчет switsh, это его задумка!
2. if(! is_user_connected(Id)) continue; согласен сообщение нужно было послать через индекс 0 всем игрокам и не нужен никакой цикл, ну раз он его написал я указал на ошибку! Насчет проверки, ели игрок подвиснет например в это время, теперь вопрос. Какому айди придет сообщение?
3. Насчет get_players, от куда такая инфа что он не правильно нам дас количество игроков, покажи источник доказывающий это)))
4, Насчет записи названия карты, зачем каждый раз получать ее, если достаточно получить ее один раз)))) (Теперь я точно уверен, что быдло код тебе по душе)


1. Касательно статики. Я сказал, что нужно использовать динамическую переменную.
Код: Выделить всё
static team

>>
Код: Выделить всё
new team

Иди учи матчасть, в частности, разницу между статическими и динамическими переменными, их область использования.

vitalik19842105 писал(а):ты походу любишь быдло код писать

Забавно это читать, когда я вижу такой твой код:
Код: Выделить всё
case 1..2: g_iAliveTeamNum[ Id ][ teams ]++;


Мало того, что 1, 2 - магические числа, так еще и перечисления кейсов идёт как множеств.
Здесь никакой свитч не нужен, достаточно условного оператора, а оправдания, что у ТСа так было изначально, а ты оставил - глупые, ибо ты же взялся его поправлять (не имея достаточного опыта и знаний к тому же)

2. Никому, если послано без гарантии доставки.

3. Еще раз для особо одарённых. Функция get_playersnum() возвращает количество игроков в данный момент. Функция get_players получает индексы игроков в зависимости от заданных условий. Во 2 операнд функции занесется число игроков, удовлетворяющих условиям, заданным в 3,4 аргументах функции. Поэтому говорить, что так можно получить количество игроков технически не верно, но при определённых условиях это можно получить.

4.
vitalik19842105 писал(а):Насчет записи названия карты, зачем каждый раз получать ее, если достаточно получить ее один раз))))

А я выше разве не это написал?
БиЗоН писал(а):единственное, что он её не закэшировал, не сделал глобальной, ровно как и получение названия карты
Аватара пользователя
БиЗоН
 
Сообщения: 62
Зарегистрирован: 24 мар 2014, 21:05
Откуда: Екатеринбург
Благодарил (а): 7 раз.
Поблагодарили: 21 раз.
Опыт программирования: Больше трех лет
Языки программирования: C#, PHP

След.

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

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

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