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

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

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

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

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

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

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

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

Сообщение Fedcomp » 02 авг 2011, 12:09

Вообще можно скооперироваться и собрать тут вроде дополнительной inc библиотеки полезных функций. Чтобы заново не изобретать велосипед по сто раз.
Например

Код: Выделить всё
stock bool:is_user_steam(id)
{
// Author Sh0oter
        static dp_pointer
        if
(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
        {
            server_cmd("dp_clientinfo %d", id)
            server_exec()
            return (get_pcvar_num(dp_pointer) == 2) ? true : false
        
}
        return false


Где то еще колорчат функцию выкладывали, не могу найти

UPD: Набросал черновой вариант. Ревизия 2
Последний раз редактировалось Fedcomp 02 авг 2011, 14:36, всего редактировалось 2 раз(а).
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


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

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

Сообщение defa » 02 авг 2011, 13:26

Хорошая идея

Добавлено спустя 27 минут:
Время, после которого игрок может затем использовать команду самоубийства:

Код: Выделить всё
#define OFFSET_SUICIDETIME 258
#define OFFSET_PLAYER 5   


Код: Выделить всё
stock set_user_suicidetime(index, Float:timesuicide)
{
    set_pdata_float(index, OFFSET_SUICIDETIME, timesuicide, OFFSET_PLAYER);
}
Аватара пользователя
defa
 
Сообщения: 870
Зарегистрирован: 26 авг 2010, 18:22
Забанен
Благодарил (а): 34 раз.
Поблагодарили: 399 раз.

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

Сообщение Fedcomp » 02 авг 2011, 13:56

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


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

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

Сообщение creator_52 » 02 авг 2011, 14:08

Мое любимое
Код: Выделить всё
stock delete_string(s_file[],i_line)
{
    if(!file_exists(s_file)||!s_file[0])
        return 0
    
    new s_buffer
[1024]
    
    new i_file
=fopen(s_file,"rt")
    
    new Array
:a_data=ArrayCreate(1024)
    
    while
(!feof(i_file))
    {
        fgets(i_file,s_buffer,1023)
        
        trim
(s_buffer)
        
        ArrayPushString
(a_data,s_buffer)
    }
    
    fclose
(i_file)
    
    new i_size
=ArraySize(a_data)
    
    if
(!i_size||i_line>i_size-1||i_line<0)
    {
        ArrayDestroy(a_data)
        
        return 0
    
}
    
    delete_file
(s_file)
    
    i_file
=fopen(s_file,"wt")
    
    for
(new a;a<i_size;a++)
    {
        if(a==i_line)
            continue
        
        ArrayGetString
(a_data,a,s_buffer,1023)
        
        format
(s_buffer,1023,"%s^n",s_buffer)
        
        fputs
(i_file,s_buffer)
    }
    
    fclose
(i_file)
    
    ArrayDestroy
(a_data)
    
    return 1
}

А вообще мне кажется, что надо собрать, или, если нет, написать вспомогательные функции для работы с файлами, например чтение всей информации из файла в массив, или внедрение строки в файл.
Аватара пользователя
creator_52
 
Сообщения: 513
Зарегистрирован: 02 мар 2011, 15:45
Откуда: Нижний Новгород
Благодарил (а): 116 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет

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

Сообщение Fedcomp » 02 авг 2011, 14:15

Функции для работы со строками/файлами действительно очень понадобятся.

Добавлено спустя 3 минуты 22 секунды:
Код: Выделить всё
stock file_delete_string(s_file[],i_line)
{
    if(!file_exists(s_file)||!s_file[0])
        return 0

    new s_buffer
[1024]
    new i_file=fopen(s_file,"rt")
    new Array:a_data=ArrayCreate(1024)

    while(!feof(i_file))
    {
        fgets(i_file,s_buffer,1023)
        trim(s_buffer)
        ArrayPushString(a_data,s_buffer)
    }

    fclose(i_file)
    new i_size=ArraySize(a_data)

    if(!i_size||i_line>i_size-1||i_line<0)
    {
        ArrayDestroy(a_data)
        return 0
    
}
    
    delete_file
(s_file)
    i_file=fopen(s_file,"wt")
    
    for
(new a;a<i_size;a++)
    {
        if(a==i_line)
            continue
        
        ArrayGetString
(a_data,a,s_buffer,1023)
        format(s_buffer,1023,"%s^n",s_buffer)
        fputs(i_file,s_buffer)
    }
    
    fclose
(i_file)
    ArrayDestroy(a_data)
    
    return 1
}

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


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

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

Сообщение creator_52 » 02 авг 2011, 14:19

Или даже сделать булевую функцию. Все равно возвращать нечего кроме отчета об успешности.

Добавлено спустя 2 минуты 18 секунд:
Т.е.
Код: Выделить всё
stock bool:delete_string(s_file[],i_line)
{
    if(!file_exists(s_file)||!s_file[0])
        return false
    
    new s_buffer
[1024]
    new i_file=fopen(s_file,"rt")
    new Array:a_data=ArrayCreate(1024)
    
    while
(!feof(i_file))
    {
        fgets(i_file,s_buffer,1023)
        trim(s_buffer)
        ArrayPushString(a_data,s_buffer)
    }
    
    fclose
(i_file)
    new i_size=ArraySize(a_data)
    
    if
(!i_size||i_line>i_size-1||i_line<0)
    {
        ArrayDestroy(a_data)
        return false
    
}
    
    delete_file
(s_file)
    i_file=fopen(s_file,"wt")
    
    for
(new a;a<i_size;a++)
    {
        if(a==i_line)
            continue
        
        ArrayGetString
(a_data,a,s_buffer,1023)
        format(s_buffer,1023,"%s^n",s_buffer)
        fputs(i_file,s_buffer)
    }
    
    fclose
(i_file)
    ArrayDestroy(a_data)
    
    return true
}
Аватара пользователя
creator_52
 
Сообщения: 513
Зарегистрирован: 02 мар 2011, 15:45
Откуда: Нижний Новгород
Благодарил (а): 116 раз.
Поблагодарили: 207 раз.
Опыт программирования: Больше трех лет

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

Сообщение Fedcomp » 02 авг 2011, 14:37

Обновил черновой вариант. С английским не очень. Буду рад если кто подправит. А может даже на русском сделать инклюд?
Не помогаю в ЛС - есть форум.
Плагины тоже не пишу, на форуме достаточно хороших скриптеров.


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

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

Сообщение Ser_UFL » 02 авг 2011, 17:41

А я неоднократно пользовался вот этим:
ip.inc


Спасибо Zefir-у !
Думаю, Вы должны зарегистрироваться, чтобы видеть ссылки. можно еще полезного найти.
Запомните, всегда по жизни вас будут красить вежливость и спокойствие, а не наезды и дешевые понты ;)
Аватара пользователя
Ser_UFL
 
Сообщения: 975
Зарегистрирован: 22 авг 2009, 19:30
Откуда: Hell
Благодарил (а): 276 раз.
Поблагодарили: 380 раз.
Языки программирования: Counter-Strike 1.6:
WebMod-scripts, little Pawn.

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

Сообщение Fedcomp » 02 авг 2011, 17:57

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


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

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

Сообщение ejik » 02 авг 2011, 19:14

а-ля amxmisc
Код: Выделить всё
stock get_hostname ( buffer[], size )
    return get_user_name ( 0, buffer, size )

stock get_server_ip ( buffer[], size, without_port = 0 )
    return get_user_ip ( 0, buffer, size, without_port )
Аватара пользователя
ejik
 
Сообщения: 249
Зарегистрирован: 01 июл 2010, 14:07
Благодарил (а): 83 раз.
Поблагодарили: 83 раз.
Опыт программирования: Больше трех лет
Языки программирования: Counter-Strike 1.6

След.

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

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

Сейчас этот форум просматривают: Bing [Bot] и гости: 5