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

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

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

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

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

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

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

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

Сообщение NightFury » 23 ноя 2016, 22:35

Очень простенький include для создания цветных сообщений в чат.

Код: Выделить всё
#if defined _colorprint_included
#endinput
#endif
#define _colorprint_included

#define msgid_SayText 76

// Soobshcheniya v chat.
// @param index - indeks igroka (tol'ko dlya "color_print_one")
// @param message - tekst soobshcheniya
// @param any - dopolneniya

// Zadaem tsvet soobshcheniya.
// @param "^1" - standartnyy (zheltyy)
// @param "^3" - tsvet komandy (dlya "color_print_all" seryy)
// @param "^4" - zelenyy

stock color_print_one(index, const message[], any:...)
{
    new szMessage[190]
    vformat(szMessage, charsmax(szMessage), message, 3)
    message_begin(MSG_ONE, msgid_SayText, _, index)
    write_byte(index)
    write_string(szMessage)
    message_end()
}

stock color_print_all(const message[], any:...)
{
    new szMessage[190]
    vformat(szMessage, charsmax(szMessage), message, 2)
    message_begin(MSG_ALL, msgid_SayText)
    write_byte(-1)
    write_string(szMessage)
    message_end()
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Подпись: NightFury/406
Поддержка: vk.com/mashakrylova406
Аватара пользователя
NightFury
 
Сообщения: 85
Зарегистрирован: 10 авг 2016, 12:22
Благодарил (а): 8 раз.
Поблагодарили: 24 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn, C, C++

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

Сообщение Subb98 » 23 ноя 2016, 23:11

Код: Выделить всё
message_begin(MSG_ALL, msgid_SayText

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

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

Сообщение sa1me » 02 фев 2017, 12:02

Код: Выделить всё
stock UTIL_GetElapsedDays(const date[])
{
    return (get_systime() - parse_time(date, "%d.%m.%Y", -1)) / 86400/*SECONDS_IN_DAY*/;
}

Код: Выделить всё
stock UTIL_GetElapsedDays(const date_ceil[], const date_floor[])
{
    return (parse_time(date_ceil, "%d.%m.%Y", -1) - parse_time(date_floor, "%d.%m.%Y", -1)) / 86400/*SECONDS_IN_DAY*/;
}


Первый вариант: получение кол-ва прошедших дней с указанной даты по сегодняшний день.
Второй вариант: получение кол-ва прошедших дней с даты по дату.

P.S.: Формат даты: %d.%m.%Y.
Аватара пользователя
sa1me
 
Сообщения: 361
Зарегистрирован: 07 апр 2014, 20:51
Откуда: pfnAddToFullPack
Благодарил (а): 174 раз.
Поблагодарили: 177 раз.
Опыт программирования: Меньше недели

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

Сообщение Subb98 » 26 фев 2017, 19:06

Сток для работы с преобразованием секунд в часы, минуты и секунды:

Код: Выделить всё
stock time_convert(input, &hours, &min, &sec) {
    
input -= ((hours input 3600) * 3600); // получаем кол-во часов и обновляем кол-во секунд
    
min input 60sec input 60// получаем кол-во минут и кол-во секунд

и только в минуты и секунды:

Код: Выделить всё
stock time_convert2(const input, &min, &sec) {
    
min input 60sec input 60// получаем кол-во минут и кол-во секунд
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

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

Сообщение Pafos » 26 фев 2017, 21:43

было уже где-то
Аватара пользователя
Pafos
 
Сообщения: 574
Зарегистрирован: 07 апр 2014, 18:03
Откуда: pfnClientConnect
Забанен
Благодарил (а): 129 раз.
Поблагодарили: 97 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

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

Сообщение Subb98 » 26 фев 2017, 21:47

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

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

Сообщение Subb98 » 01 мар 2017, 19:21

Пример работы с некоторыми callfunc_* нативами
Спасибо ConnorMcLeod Вы должны зарегистрироваться, чтобы видеть ссылки.

Код: Выделить всё
/*
Example of using some callfunc_* natives

Thanks to ConnorMcLeod for original code:
Вы должны зарегистрироваться, чтобы видеть ссылки.

Modified by Subb98
*/

#include <amxmodx>

#pragma semicolon 1

new g_plugin = -1g_func = -1;

public 
plugin_cfg() {
    new const 
PLUG_NAME[] = "Plugin Name";
    new const 
FUNC_NAME[] = "MyPublicFunc";

    if((
g_plugin is_plugin_loaded(PLUG_NAME)) > 0) {
        if((
g_func get_func_id(FUNC_NAMEg_plugin)) == -1) {
            
log_amx("Function ^"%s^" not found"FUNC_NAME);
        }
    } else {
        
log_amx("Plugin ^"%s^" not found"PLUG_NAME);
    }
}

stock CallMyFunc(const id) {
    if(
g_func && (callfunc_begin_i(g_funcg_plugin)) == 1) {
        
callfunc_push_int(id);
        
callfunc_end();
    }
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

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

Сообщение NEoMASTERR » 01 мар 2017, 22:14

Инклуд для создания энтити-тасков.

Плюсы:
  • Каждый таск имеет свой идентификатор
  • Можно не городить конструкции вида set_task(....id + TASK_FOR_SOMETHING)
  • Можно не бояться что кто то убьёт ваш таск по id игрока
  • Не ограничен по мин. времени Вы должны зарегистрироваться, чтобы видеть ссылки.
  • Имеет ту же конструкцию что и set_task (set_etask) + бонусный параметр для немедленного запуска функции
  • Инклуд можно редактировать

Минусы:
  • Для уверенного использования лучше увеличить num_edicts
  • Плагин всё же хуже чем если бы это был модуль
  • При большом количестве тасков могут визуально пропасть другие энти (в теории)
  • В своих энтях занимает pev_[i/f/e]user[1-4] поля
  • Нельзя использовать несколько флагов (можно, немного переделав инклуд)
  • Пофиксил. Флаг d сработает некорректно если изменится mp_timelimit или не сработает вообще

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

new g_BonusTask
[MAX_PLAYERS+1]
public client_putinserver(id)
{
    g_BonusTask[id] = change_etask(set_etask(1.0, "bonus", id, .flags = "b"), 60.0)
    set_etask(30.0, "give_bonus_weapon", id, "weapon_ak47", 12)
}
    
public bonus
(id, ent)
{
    if (!is_user_connected(id))
    {
        g_BonusTask[id] = 0
        remove_etask
(ent)
    }
    else
        client_print
(id, print_chat, "Вы получили бонус 100$, следующий через 60 секунд")
}

public give_bonus_weapon(param[], id)
{
    give_item(id, param)
}

public client_disconnected(id)
{
    remove_etask(g_BonusTask[id])
}
 

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось NEoMASTERR 02 мар 2017, 13:34, всего редактировалось 5 раз(а).
Аватара пользователя
NEoMASTERR
 
Сообщения: 832
Зарегистрирован: 05 янв 2015, 16:38
Благодарил (а): 43 раз.
Поблагодарили: 188 раз.
Опыт программирования: Около года
Языки программирования: Counter-Strike 1.6

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

Сообщение Subb98 » 02 мар 2017, 10:43

Макрос для проверки на наличие Steam клиента (необходимы Reunion и Reapi):

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

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

Сообщение zhorzh78 » 12 мар 2017, 11:23

Возвращает строку source, перевернутую задом наперед

Код: Выделить всё
stock strrev(output[], source[])
{
    new len = strlen(source), i;
    while(len--)
        output[i++] = source[len]

    return output;
}

Вы должны зарегистрироваться, чтобы видеть ссылки.
Аватара пользователя
zhorzh78
 
Сообщения: 91
Зарегистрирован: 26 фев 2014, 10:07
Благодарил (а): 1 раз.
Поблагодарили: 23 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn (AMXX)

Пред.След.

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

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

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