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

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

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

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

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

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

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

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

Сообщение [N][E][M][E][C] » 04 фев 2023, 14:20

Не знаю было или нет!!
Код: Выделить всё
/*пример*/
rg_give_weapon(id, "weapon_deagle", 35, GT_REPLACE) ;


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

    /*
    * Description:       Выдаёт оружие с патронами в запасе
    * Return type:      nothing;
    *
    * pClient:              индек игрока;
    * sName[]:            name weapons;
    * Ammo:               ammo weapons;
    * eType:               тип выдачи оружия;
    *
    * GT_APPEND,   // Just give item
    * GT_REPLACE,   // Give the item and remove all other weapons from the slot
    * GT_DROP_AND_REPLACE    // Give the item and drop all other weapons from the slot
    */


stock rg_give_weapon(const pPlayer, const sName[], Ammo, const GiveType:eType = GT_APPEND) {
    new pItem = rg_give_item(pPlayer, sName, eType);

    if(is_nullent(pItem) || !Ammo)
        return;

    new iAmmoType = get_member(pItem, m_Weapon_iPrimaryAmmoType);
    if(get_member(pPlayer, m_rgAmmo, iAmmoType) >= Ammo)
        return;

    new MaxAmmo = rg_get_iteminfo(pItem, ItemInfo_iMaxAmmo1);
    if(MaxAmmo -Ammo < 1)
        Ammo = MaxAmmo;

    set_member(pPlayer, m_rgAmmo, Ammo, iAmmoType);
}
Последний раз редактировалось [N][E][M][E][C] 06 фев 2023, 16:22, всего редактировалось 6 раз(а).
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

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

Сообщение [N][E][M][E][C] » 06 фев 2023, 14:36

Незнаю, может это бесполезняк, но всёже!!

Код: Выделить всё
/**
 * Creates a menu
 *
 * @param pClient       Client index
 * @param sItem         Menu items
 * @param iLen          Length of the sItem array
 * @param sHandler      Name of the menu handler
 * @param sTitle        Menu name
 *
 * @return              0 - if the menu has not been created, 1 - if the menu has been created
 */
stock bool:_create_menu(const pClient, const sItem[][], iLen = sizeof(sItem), const sHandler[] = "handler_menu", const sTitle[] = "Server menu", any:...) {
    new sTmp[191];
    vformat(sTmp, charsmax(sTmp), sTitle, 6);

    new iMenu = menu_create(sTmp, sHandler);

    for(new i; i < iLen; ++i) {
        if(!sItem[i][0])
            return false;

        menu_additem(iMenu, sItem[i], fmt("%i", i +1));
    }

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

    menu_display(pClient, iMenu);
    return true;

Добавлено форматирование массива sTitle 

Пример использования:
Код: Выделить всё
#define AUTHOR "AMX Mod Coder"

new Menu = _create_menu(id, sTmp, _, _, "Меню сервера <\r%s\y>", AUTHOR);
 
Последний раз редактировалось [N][E][M][E][C] 09 фев 2023, 00:17, всего редактировалось 6 раз(а).
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

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

Сообщение БиЗоН » 06 фев 2023, 14:53

[N][E][M][E][C], чего делает сток rg_give_weapon? Описание бы добавлять к функциям для понимания.
И нет универсальности параметра GiveType:type у функции rg_give_item. Да и для корректной установки патронов дополнительно ещё нужны функции:
Код: Выделить всё
// ammo
rg_set_iteminfo(iItem, ItemInfo_iMaxClip, count);
rg_set_user_ammo(pPlayer, get_member(iItem, m_iId), count);

// bpammo
rg_set_iteminfo(iItem, ItemInfo_iMaxAmmo1, count);
rg_set_user_bpammo(pPlayer, get_member(iItem, m_iId), count); 


И насчёт rg_create_menu. Зачем приставка rg_? Какое-то отношение к reapi?
Также можно было бы добавить форматирование из-под коробки через vformat (просто для удобности, знаю, что есть fmt()).
Вечно занятой. Вечно в павне.
Аватара пользователя
БиЗоН
 
Сообщения: 165
Зарегистрирован: 24 мар 2014, 21:05
Благодарил (а): 10 раз.
Поблагодарили: 49 раз.
Опыт программирования: Больше трех лет

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

Сообщение [N][E][M][E][C] » 06 фев 2023, 14:59

Также можно было бы добавить форматирование из-под коробки через vformat (просто для удобности, знаю, что есть fmt()).

Помню как то выкидывал что то для древнего кода, вам не понравилось))). Fmt годно для таких случаев
rg_give_item(pPlayer, sName, GT_REPLACE);

Добавил тип выдачи.
// ammo
rg_set_iteminfo(iItem, ItemInfo_iMaxClip, count);
rg_set_user_ammo(pPlayer, get_member(iItem, m_iId), count);

В этом стоке задействована выдача боеприпасов только в запас, не в абойму, только что проверить на выдачу количество не превышаемого реального.
Добавил.
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

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

Сообщение [N][E][M][E][C] » 07 фев 2023, 13:39

Автор данного творения Vaqtincha.
Вроде небыло :thumbs_up
-
Код: Выделить всё
#include <cstrike>

cs_get_user_buyzone(pClient); 

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

stock bool:rg_get_user_buyzone(const pClient) {
    new iSignals[UnifiedSignals];
    get_member(pClient, m_signals, iSignals);

    return bool:(SignalState:iSignals[US_State] & SIGNAL_BUY);
}
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

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

Сообщение БиЗоН » 07 фев 2023, 16:42

[N][E][M][E][C], можно тогда уж расширить сток.

Возвращает по сигналу (наличию иконки) нахождение в одной из зон:

Код: Выделить всё
// из cssdk_const.inc
/**
* Flags for CUnifiedSignals m_signals
*/
enum SignalState
{
    SIGNAL_BUY       = BIT(0), // зона закупки
    SIGNAL_BOMB      = BIT(1), // зона установки бомбы
    SIGNAL_RESCUE    = BIT(2), // зона спасения заложника
    SIGNAL_ESCAPE    = BIT(3), // зона эвакуации VIP
    SIGNAL_VIPSAFETY = BIT(4), // безопасная зона VIP
};


Код: Выделить всё
// сам сток
stock bool: rg_has_user_signal(pPlayer, SignalState: iSignalType)
{
    new iSignals[UnifiedSignals];
    get_member(pPlayer, m_signals, iSignals);

    return bool:(SignalState: iSignals[US_State] & iSignalType);
}


Код: Выделить всё
//Пример использования:
if(rg_has_user_signal(pPlayer, SIGNAL_BUY))
    client_print_color(pPlayer, print_team_default, "Вы в зоне закупки");
Вечно занятой. Вечно в павне.
Аватара пользователя
БиЗоН
 
Сообщения: 165
Зарегистрирован: 24 мар 2014, 21:05
Благодарил (а): 10 раз.
Поблагодарили: 49 раз.
Опыт программирования: Больше трех лет

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

Сообщение [N][E][M][E][C] » 07 фев 2023, 21:14

Я планировал это сделать изначально, но цель была замены зоны закупки
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

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

Сообщение [N][E][M][E][C] » 13 фев 2023, 13:16

Код: Выделить всё
/**
 * Gives a usage limit for the exposed seconds
 *
 * @param iSeconds       Time interval in seconds
 *
 * @return              Will return access to use
 */

stock bool:get_access_time(const iSeconds = 10) {
    static iUsageTime;
    new iCurrentTime = get_systime();

    if(iUsageTime > iCurrentTime)
        return false;

    iUsageTime = iCurrentTime +iSeconds;
    return true;


Код: Выделить всё
//Пример использования:
if(!get_access_time(20))
    return
Аватара пользователя
[N][E][M][E][C]
 
Сообщения: 641
Зарегистрирован: 14 фев 2021, 10:48
Благодарил (а): 50 раз.
Поблагодарили: 89 раз.
Опыт программирования: Около года
Языки программирования: Нуждаюсь в помощи

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

Сообщение sb123 » 27 июн 2023, 22:36

Код: Выделить всё
stock is_utf8_name(const name[])
{
    new i, v
    for 
(= 0; i < 32; i++)
    {
        v = name[i]
        if (== 0)
        {
            break
        
}
        else if (!(< v < 128))
        {
            return 1
        
}
    }
    return 0
}


Код: Выделить всё
    static name[32]
    get_user_name(id, name, 31)
    if (is_utf8_name(name))
    {
        message_begin(MSG_BROADCAST, get_user_msgid("BotVoice"))
        write_byte(0)
        write_byte(id)
        message_end()
    
Аватара пользователя
sb123
 
Сообщения: 4
Зарегистрирован: 18 ноя 2021, 19:55
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.
Языки программирования: Я ничего не знаю

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

Сообщение Fedcomp » 20 июл 2023, 06:57

sb123 писал(а):
Код: Выделить всё
stock is_utf8_name(const name[])
{
    new i, v
    for 
(= 0; i < 32; i++)
    {
        v = name[i]
        if (== 0)
        {
            break
        
}
        else if (!(< v < 128))
        {
            return 1
        
}
    }
    return 0
}


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


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

Пред.След.

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

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

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