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

Сборник полезных функций

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

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

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

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Re: Сборник полезных функций

Сообщение Subb98 » 10 сен 2017, 18:26

Сток для записи логов с разделением файлов по дням и сохранением в отдельную директорию, например, addons/amxmodx/logs/custom_dir

Код: Выделить всё
stock logging(const message[], any:...) {
    static 
logsDir[64], file[sizeof logsDir 32], time[22], msg[512];

    if(!
logsDir[0]) {
        new 
len get_localinfo("amxx_logs"logsDircharsmax(logsDir));
        
formatex(logsDir[len], charsmax(logsDir) - len"/custom_dir");

        if(!
dir_exists(logsDir)) {
            
mkdir(logsDir);
        }
    }

    new 
pfile;

    
get_time("%Y%m%d"timecharsmax(time));
    
formatex(filecharsmax(file), "%s/%s.log"logsDirtime);
    
vformat(msgcharsmax(msg), message2);

    if((
pfile fopen(file"a"))) {
        
get_time("%d/%m/%Y - %H:%M:%S"timecharsmax(time));
        
fprintf(pfile"%s: %s^n"timemsg);
        
fclose(pfile);
    }
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5452
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1319 раз.
Поблагодарили: 2324 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP, Ruby

Re: Сборник полезных функций

Сообщение Subb98 » 12 ноя 2017, 18:33

Код для плавного затемнения экрана игроку и такого же плавного возвращения яркости спустя определённое время. Автор кода - [email protected]

Код: Выделить всё
// Пример использования
MessageScreenFade(pTargetFADE_IN_TIMEFADE_HOLD_TIMEFADE_OUT_TIMEFADE_COLORFADE_ALPHA); 

Код: Выделить всё
// Сам код:
#define FADE_IN_TIME 2.0
#define FADE_HOLD_TIME 6.0
#define FADE_OUT_TIME 4.0
#define FADE_TIME (FADE_IN_TIME + FADE_HOLD_TIME + FADE_OUT_TIME)
#define FADE_COLOR 0, 0, 0 // цвет экрана игрока в RGB формате (по умолчанию 0, 0, 0)
#define FADE_ALPHA 255 // уровень непрозрачности экрана игрока (по умолчанию 255)
#define MESSAGE_SCREEN_FADE 98
#define FFADE_OUT 0x0001
#define FFADE_IN 0x0000

enum _:DATA_SCREENFADE_SIZE
{
    
Float:DSS_OutTime,
    
DSS_Red,
    
DSS_Green,
    
DSS_Blue,
    
DSS_Alpha
}

MessageScreenFade(const id, const Float:fInTime, const Float:fHoldTime, const Float:fOutTime, const iRed, const iGreen, const iBlue, const iAlpha)
{
    
message_begin(MSG_ONEMESSAGE_SCREEN_FADE_id);
    
write_short(min(floatround(fInTime 4096), 65535)); // в данном случае, short - это word, максимум ~16 секунд (без 1/4096)
    
write_short(65535);
    
write_short(FFADE_OUT);
    
write_byte(iRed);
    
write_byte(iGreen);
    
write_byte(iBlue);
    
write_byte(iAlpha);
    
message_end();
    new 
aData[DATA_SCREENFADE_SIZE];
    
aData[DSS_OutTime] = _:fOutTime;
    
aData[DSS_Red] = iRed;
    
aData[DSS_Green] = iGreen;
    
aData[DSS_Blue] = iBlue;
    
aData[DSS_Alpha] = iAlpha;
    
set_task(fInTime fHoldTime"MessageScreenFadeOut"idaDatasizeof aData);
}

public 
MessageScreenFadeOut(const aData[DATA_SCREENFADE_SIZE], const id)
{
    
message_begin(MSG_ONEMESSAGE_SCREEN_FADE_id);
    
write_short(min(floatround(aData[DSS_OutTime] * 4096), 65535)); // в данном случае, short - это word, максимум ~16 секунд (без 1/4096)
    
write_short(0);
    
write_short(FFADE_IN);
    
write_byte(aData[DSS_Red]);
    
write_byte(aData[DSS_Green]);
    
write_byte(aData[DSS_Blue]);
    
write_byte(aData[DSS_Alpha]);
    
message_end();
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5452
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1319 раз.
Поблагодарили: 2324 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP, Ruby

Re: Сборник полезных функций

Сообщение RevCrew » 14 янв 2018, 15:10

Сортировка cell array в порядке

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

enum OrderType
{
    ORDER_ASC = 0,
    ORDER_DESC
}
sort_cell_array_by_order( Array: cellArray, OrderType:order = ORDER_ASC)
{
    new Data[1]; Data[0] = _:order;
    ArraySort(cellArray, "SortArrayOrder", Data, 1)
}
public SortArrayOrder(Array: array, item1, item2, const data[], data_size)
{
    new OrderType:order = OrderType: data[0];

    new item_value1 = ArrayGetCell(array, item1);
    new item_value2 = ArrayGetCell(array, item2);

    switch (order)
    {
        case ORDER_ASC:
        {
            if(item_value1 > item_value2)    return 1;
            else                return -1;
        }
        case ORDER_DESC:
        {
            if(item_value1 > item_value2)    return -1;
            else                return 1;
        }
    }

    return 0;
}
 


Пример с order desc:
Код: Выделить всё

case_items_to_order
( cellArray, .order = ORDER_DESC

Код: Выделить всё
[0] 1
[1] 4
[2] 2
[3] 3

Результат
Код: Выделить всё
[0] 4
[1] 3
[2] 2
[3] 1
Skype revcrew77
https://vk.com/cssuite
Аватара пользователя
RevCrew
Скриптер
 
Сообщения: 1502
Зарегистрирован: 15 июл 2013, 20:45
Благодарил (а): 257 раз.
Поблагодарили: 319 раз.
Языки программирования: Unkown

Пред.

Вернуться в Скриптинг

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

Сейчас этот форум просматривают: Freezet и гости: 7