ReHLDS/HLDS Top Awards

pantrypei

Пользователь
Регистрация
10 Янв 2018
Сообщения
164
Симпатии
28
Пол
Мужской
#1
Плагин: Top Awards
Версия: 1.0
Автор: Dom1no_[KZ]

Описание:
• Плагин дает бонусные флаги для топ ИГРОКОВ

Настройки:
Настройки в исходнике:
Код:
#define IGNORE_FLAGS (ADMIN_MENU|ADMIN_LEVEL_H)
    //    Игнорируемые флаги
    //    Закоментируйте если не требуется

#define    STATS_SYSTEM 0       ;       Система записи статистики
    //    0 - CSX
    //    1 - CsStats MySQL by SKAJIbnEJIb
    //    2 - CsStatsX SQL by serfreeman1337

#define MAX_AWARDS 256      ;      Максимальная количество наград

const Float: TIME = 3.0;              ;      Задержка в секундах перед проверкой игрока
Настройки в конфиге:
Код:
!n - стандартный цвет
!g - зелёный цвет
!t - командный цвет
%name% - Никнейм игрока

"Флаг" "Сообщения"

Пример:  "u" "!n[!gTop Awards!n] !t%name% !nвы получили админ за - !t1 место"
 

Вложения

flexcorejz

Пользователь
Регистрация
8 Ноя 2017
Сообщения
271
Симпатии
17
#2
Давно искал бесплатный аналог, взял на тест ;)
10 Мар 2019
И еще вопрос, выставлять несколько флагов можно же ? Пример :
"tbs" "!n[!gMG!n] !g%name% !nвы получили зам.админ за - !g1 место"
10 Мар 2019
И еще вопрос :D Если к примеру на 1-3 местах игроки с привилегиями, то оно никому не будет выдавать, или следующим 3 ?
 

flexcorejz

Пользователь
Регистрация
8 Ноя 2017
Сообщения
271
Симпатии
17
#3
L 03/10/2019 - 16:50:14: [AMXX] Displaying debug trace (plugin "top_awards.amxx", version "1.0")
L 03/10/2019 - 16:50:14: [AMXX] Run time error 4: index out of bounds
L 03/10/2019 - 16:50:14: [AMXX] [0] top_awards.sma::client_give_awards (line 118)
 

pantrypei

Пользователь
Регистрация
10 Янв 2018
Сообщения
164
Симпатии
28
Пол
Мужской
#4
Давно искал бесплатный аналог, взял на тест ;)
10 Мар 2019
И еще вопрос, выставлять несколько флагов можно же ? Пример :
"tbs" "!n[!gMG!n] !g%name% !nвы получили зам.админ за - !g1 место"
10 Мар 2019
И еще вопрос :D Если к примеру на 1-3 местах игроки с привилегиями, то оно никому не будет выдавать, или следующим 3 ?
1. Можно указать несколько флаги
2. Если IGNORE_FLAGS выключено, то плагин работает у всех как вы указали на конфиге даже игрокам с привилегиями
а если IGNORE_FLAGS включено то плагин работает только те игрокам которые не указано на IGNORE_FLAGS
11 Мар 2019
L 03/10/2019 - 16:50:14: [AMXX] Displaying debug trace (plugin "top_awards.amxx", version "1.0")
L 03/10/2019 - 16:50:14: [AMXX] Run time error 4: index out of bounds
L 03/10/2019 - 16:50:14: [AMXX] [0] top_awards.sma::client_give_awards (line 118)
Данную ошибку может исправит Dom1no_[KZ]. Пока я писал ему, ждем ответа
 

flexcorejz

Пользователь
Регистрация
8 Ноя 2017
Сообщения
271
Симпатии
17
#5
1. Можно указать несколько флаги
2. Если IGNORE_FLAGS выключено, то плагин работает у всех как вы указали на конфиге даже игрокам с привилегиями
а если IGNORE_FLAGS включено то плагин работает только те игрокам которые не указано на IGNORE_FLAGS
11 Мар 2019

Данную ошибку может исправит Dom1no_[KZ]. Пока я писал ему, ждем ответа
А что за ошибка выше?
 

pantrypei

Пользователь
Регистрация
10 Янв 2018
Сообщения
164
Симпатии
28
Пол
Мужской
#9

Portugal

Пользователь
Регистрация
2 Мар 2018
Сообщения
241
Симпатии
4
Пол
Мужской
#10
Подскажите поставил плагин флаги выдаёт каторые указал но привилегии которые на этих флагах не все выдаёт допустим у меня вип стоит на флаге "t" вип выдаёт всё что связанно с вип плагином выдаёт а вот модель игрока вип катороя тоже на флаге 't' не выдаёт тоже самое и с heal nade вместо смока
 

pantrypei

Пользователь
Регистрация
10 Янв 2018
Сообщения
164
Симпатии
28
Пол
Мужской
#11
Подскажите поставил плагин флаги выдаёт каторые указал но привилегии которые на этих флагах не все выдаёт допустим у меня вип стоит на флаге "t" вип выдаёт всё что связанно с вип плагином выдаёт а вот модель игрока вип катороя тоже на флаге 't' не выдаёт тоже самое и с heal nade вместо смока
Код:
/*
    Copyright by Dom1no_[KZ]
    2019 © https://vk.com/m.kent03
*/

#include <amxmodx>

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif

#define    PLUGIN    "Top Awards"
#define    VERSION    "1.0"
#define    AUTHOR    "Dom1no_[KZ]"

/* Настройки */
#define IGNORE_FLAGS (ADMIN_MENU|ADMIN_LEVEL_H)
    //    Игнорируемые флаги
    //    Закоментируйте если не требуется

#define    STATS_SYSTEM 0 // Система записи статистики
    //    0 - CSX
    //    1 - CsStats MySQL by SKAJIbnEJIb
    //    2 - CsStatsX SQL by serfreeman1337

#define MAX_AWARDS 256
    // Максимальная количество наград

enum _:DATA {
    FLAGS[32],
    MSG[128]
};
new g_arrAwardData[MAX_AWARDS][DATA], g_iDataSize = 1;
#if    STATS_SYSTEM == 0
    #include <csx>
    #define    get_player_stats get_user_stats
#endif
#if    STATS_SYSTEM == 1
    #include <csstats_mysql>
#endif
#if    STATS_SYSTEM == 2
    #include <csstatsx_sql>
    #define    get_player_stats get_user_stats_sql
#endif

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR);
}

public plugin_cfg(){
    new szPath[64];
    get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
    add(szPath, charsmax(szPath), "/top_awards.ini");

    new iFile = fopen(szPath, "rt");
    if(!iFile){
        new szError[96];
        formatex(szError, charsmax(szError), "File '%s' not found OR incorrect CHMOD!", szPath);
        set_fail_state(szError);
    }

    new szBuffer[MAX_AWARDS];
    while(!feof(iFile)){
        fgets(iFile, szBuffer, charsmax(szBuffer));
        trim(szBuffer);

        if(!szBuffer[0] || szBuffer[0] == ';')
            continue;

        if(parse(szBuffer,
            g_arrAwardData[g_iDataSize][FLAGS], charsmax(g_arrAwardData[][FLAGS]),
            g_arrAwardData[g_iDataSize][MSG], charsmax(g_arrAwardData[][MSG])
        ) == 2)    g_iDataSize++;
    }
    fclose(iFile);
}

public client_putinserver(id){
    new g_iAccess, szName[32];
    g_iAccess = get_user_flags(id);
    get_user_name(id, szName, charsmax(szName));

    if(!is_user_connected(id)){
        return;
    }
    #if defined IGNORE_FLAGS
        if(g_iAccess & IGNORE_FLAGS){
            return;
        }
    #endif

    #if    STATS_SYSTEM == 0 || STATS_SYSTEM == 2
        new szStats[8];
        new iRank = get_player_stats(id, szStats, szStats);
    #else
        new szStats[22];
        new iRank = csstats_get_user_stats(id, szStats);
    #endif

    if(iRank <= g_iDataSize){
        set_user_flags(id, g_iAccess | read_flags(g_arrAwardData[iRank][FLAGS]));

        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!n", "^1");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!t", "^3");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!g", "^4");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "%name%", szName);

        client_print_color(id, print_team_default, "%s", g_arrAwardData[iRank][MSG]);
    }
    else{
        remove_user_flags(id, g_arrAwardData[iRank][FLAGS]);
    }
}
А если вот так? если робит этот код, то класс, но тут сообщения зря, т.к игрок не видит
 

Portugal

Пользователь
Регистрация
2 Мар 2018
Сообщения
241
Симпатии
4
Пол
Мужской
#12
Код:
/*
    Copyright by Dom1no_[KZ]
    2019 © https://vk.com/m.kent03
*/

#include <amxmodx>

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif

#define    PLUGIN    "Top Awards"
#define    VERSION    "1.0"
#define    AUTHOR    "Dom1no_[KZ]"

/* Настройки */
#define IGNORE_FLAGS (ADMIN_MENU|ADMIN_LEVEL_H)
    //    Игнорируемые флаги
    //    Закоментируйте если не требуется

#define    STATS_SYSTEM 0 // Система записи статистики
    //    0 - CSX
    //    1 - CsStats MySQL by SKAJIbnEJIb
    //    2 - CsStatsX SQL by serfreeman1337

#define MAX_AWARDS 256
    // Максимальная количество наград

enum _:DATA {
    FLAGS[32],
    MSG[128]
};
new g_arrAwardData[MAX_AWARDS][DATA], g_iDataSize = 1;
#if    STATS_SYSTEM == 0
    #include <csx>
    #define    get_player_stats get_user_stats
#endif
#if    STATS_SYSTEM == 1
    #include <csstats_mysql>
#endif
#if    STATS_SYSTEM == 2
    #include <csstatsx_sql>
    #define    get_player_stats get_user_stats_sql
#endif

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR);
}

public plugin_cfg(){
    new szPath[64];
    get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
    add(szPath, charsmax(szPath), "/top_awards.ini");

    new iFile = fopen(szPath, "rt");
    if(!iFile){
        new szError[96];
        formatex(szError, charsmax(szError), "File '%s' not found OR incorrect CHMOD!", szPath);
        set_fail_state(szError);
    }

    new szBuffer[MAX_AWARDS];
    while(!feof(iFile)){
        fgets(iFile, szBuffer, charsmax(szBuffer));
        trim(szBuffer);

        if(!szBuffer[0] || szBuffer[0] == ';')
            continue;

        if(parse(szBuffer,
            g_arrAwardData[g_iDataSize][FLAGS], charsmax(g_arrAwardData[][FLAGS]),
            g_arrAwardData[g_iDataSize][MSG], charsmax(g_arrAwardData[][MSG])
        ) == 2)    g_iDataSize++;
    }
    fclose(iFile);
}

public client_putinserver(id){
    new g_iAccess, szName[32];
    g_iAccess = get_user_flags(id);
    get_user_name(id, szName, charsmax(szName));

    if(!is_user_connected(id)){
        return;
    }
    #if defined IGNORE_FLAGS
        if(g_iAccess & IGNORE_FLAGS){
            return;
        }
    #endif

    #if    STATS_SYSTEM == 0 || STATS_SYSTEM == 2
        new szStats[8];
        new iRank = get_player_stats(id, szStats, szStats);
    #else
        new szStats[22];
        new iRank = csstats_get_user_stats(id, szStats);
    #endif

    if(iRank <= g_iDataSize){
        set_user_flags(id, g_iAccess | read_flags(g_arrAwardData[iRank][FLAGS]));

        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!n", "^1");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!t", "^3");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!g", "^4");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "%name%", szName);

        client_print_color(id, print_team_default, "%s", g_arrAwardData[iRank][MSG]);
    }
    else{
        remove_user_flags(id, g_arrAwardData[iRank][FLAGS]);
    }
}
А если вот так? если робит этот код, то класс, но тут сообщения зря, т.к игрок не видит
Вроде не робит флаги вобще не какие не выдаёт :( у меня так настроено
Код:
/*
    Copyright by Dom1no_[KZ]
    2019 © https://vk.com/m.kent03
*/

#include <amxmodx>

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
#endif

#define    PLUGIN    "Top Awards"
#define    VERSION    "1.0"
#define    AUTHOR    "Dom1no_[KZ]"

/* Настройки */
#define IGNORE_FLAGS (ADMIN_MENU|ADMIN_LEVEL_H)
    //    Игнорируемые флаги
    //    Закоментируйте если не требуется

#define    STATS_SYSTEM 2 // Система записи статистики
    //    0 - CSX
    //    1 - CsStats MySQL by SKAJIbnEJIb
    //    2 - CsStatsX SQL by serfreeman1337

#define MAX_AWARDS 256
    // Максимальная количество наград

enum _:DATA {
    FLAGS[32],
    MSG[128]
};
new g_arrAwardData[MAX_AWARDS][DATA], g_iDataSize = 1;
#if    STATS_SYSTEM == 0
    #include <csx>
    #define    get_player_stats get_user_stats
#endif
#if    STATS_SYSTEM == 1
    #include <csstats_mysql>
#endif
#if    STATS_SYSTEM == 2
    #include <csstatsx_sql>
    #define    get_player_stats get_user_stats_sql
#endif

public plugin_init(){
    register_plugin(PLUGIN, VERSION, AUTHOR);
}

public plugin_cfg(){
    new szPath[64];
    get_localinfo("amxx_configsdir", szPath, charsmax(szPath));
    add(szPath, charsmax(szPath), "/top_awards.ini");

    new iFile = fopen(szPath, "rt");
    if(!iFile){
        new szError[96];
        formatex(szError, charsmax(szError), "File '%s' not found OR incorrect CHMOD!", szPath);
        set_fail_state(szError);
    }

    new szBuffer[MAX_AWARDS];
    while(!feof(iFile)){
        fgets(iFile, szBuffer, charsmax(szBuffer));
        trim(szBuffer);

        if(!szBuffer[0] || szBuffer[0] == ';')
            continue;

        if(parse(szBuffer,
            g_arrAwardData[g_iDataSize][FLAGS], charsmax(g_arrAwardData[][FLAGS]),
            g_arrAwardData[g_iDataSize][MSG], charsmax(g_arrAwardData[][MSG])
        ) == 2)    g_iDataSize++;
    }
    fclose(iFile);
}

public client_putinserver(id){
    new g_iAccess, szName[32];
    g_iAccess = get_user_flags(id);
    get_user_name(id, szName, charsmax(szName));

    if(!is_user_connected(id)){
        return;
    }
    #if defined IGNORE_FLAGS
        if(g_iAccess & IGNORE_FLAGS){
            return;
        }
    #endif

    #if    STATS_SYSTEM == 0 || STATS_SYSTEM == 2
        new szStats[8];
        new iRank = get_player_stats(id, szStats, szStats);
    #else
        new szStats[22];
        new iRank = csstats_get_user_stats(id, szStats);
    #endif

    if(iRank <= g_iDataSize){
        set_user_flags(id, g_iAccess | read_flags(g_arrAwardData[iRank][FLAGS]));

        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!n", "^1");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!t", "^3");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "!g", "^4");
        replace_all(g_arrAwardData[iRank][MSG], charsmax(g_arrAwardData[][MSG]), "%name%", szName);

        client_print_color(id, print_team_default, "%s", g_arrAwardData[iRank][MSG]);
    }
    else{
        remove_user_flags(id, g_arrAwardData[iRank][FLAGS]);
    }
}
 

georgeml

Постоялец
Регистрация
12 Сен 2017
Сообщения
445
Симпатии
210
#13
C++:
if(!is_user_connected(id)){
        return;
    }
//Игрок уже гарантированно находится на сервере

set_user_flags(id, g_iAccess | read_flags(g_arrAwardData[iRank][FLAGS]));
//достаточно выдать только нужные флаги. Натив работает по принципу добавления (без замещения существующих)

remove_user_flags(id, g_arrAwardData[iRank][FLAGS]);
//зачем что-то удалять при входе игрока, если достаточно просто не выдавать
//при этом, если   iRank будет больше MAX_AWARDS , то в g_arrAwardData[iRank][FLAGS] будет выход за пределы массива
 

Portugal

Пользователь
Регистрация
2 Мар 2018
Сообщения
241
Симпатии
4
Пол
Мужской
#14
Ребят я мало шарю в этом )) флаги выдаёт указанные а вот допустим модель игрока модель ножа гранату хилку вместо смока это всё стоит на флаге каторый выдаётся но всё это не выдаёт возможно это пофиксить ))?
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
1.723
Симпатии
558
#15
Ребят я мало шарю в этом )) флаги выдаёт указанные а вот допустим модель игрока модель ножа гранату хилку вместо смока это всё стоит на флаге каторый выдаётся но всё это не выдаёт возможно это пофиксить ))?
Это зависит от плагинов, которые дают хилку и модель. Смотря с каким условием они выдают.
 

Portugal

Пользователь
Регистрация
2 Мар 2018
Сообщения
241
Симпатии
4
Пол
Мужской
#16
Это зависит от плагинов, которые дают хилку и модель. Смотря с каким условием они выдают.
Вот код хилки вместо смока на флаг что тут изменить нужно :)?
Код:
/**
* Copyright (C) Dev-CS Team, 2018
*
* This software is licensed under the GNU General Public License, version 3 or higher.
* Additional exceptions apply. For full license details, see LICENSE.txt or visit:
*     https://alliedmods.net/amxmodx-license
*
*    Description:
*        This plugin add a new grenade item to game names as 'HealthNade'.
*        The grenade will give additional health of allies (or all) nearby.
*
*    Changelog:
*    - 0.0.1 (20.11.17):
*        - Init;
*    - 0.0.2 (23.11.17):
*        - FIX: AMXX 1.8.2 compilation;
*        - Removed HamSandwich module.
*    - 0.0.3 (25.12.17):
*        - FIX: some bugs with 'emessage' flood; (Thanks to Mistrick)
*        - Removed AMXX 1.8.2 support;
*    - 0.0.4 (09.08.18):
*        - FIX: The blinding effect is no longer reset;
*        - Add: ScreenFade effect settings;
*        - Add: Customisable models use (on/off);
*        - Rework function for restrict item;
*        - Simply API: SHN_S(G)etStatus (realy nned it?!);
*   
*    TODO:
*        - Change the principle of the replacement Item (smart replacement).
*
* Credits: Arkshine, https://forums.alliedmods.net/showpost.php?p=1567176&postcount=16
*/

#include <amxmodx>
#include <fakemeta>
#include <engine>
#include <fun>
#include <csx>

/* Settings */
    /* Enable action only for the privileged */
#define ACCESS_FLAGS    ( ADMIN_LEVEL_B )

    /* Enable action only for teammates */
#define ONLY_FOR_TEAMMATES

    /* Enable Screenfade effect */
#define EFFECT_SCREENFADE

const HEALTH_TO_HEAL    = 50;
const HEALTH_MAX        = 100;
const HEAL_RADIUS        = 200;

    /* You can disable those models */
#define MODEL_V        "models/msfkhlnd/v_he_mk_nade.mdl"
#define MODEL_P        "models/msfkhlnd/p_he_mk_nade.mdl"
#define MODEL_W        "models/msfkhlnd/w_he_mk_nade.mdl"

new const SPRITE_EXPLODE1[]    = "sprites/msfkhlnd/heal_explode.spr";
new const SPRITE_PROS[]        = "sprites/msfkhlnd/heal_shape.spr";

new const SOUND_HEAL[]        = "msfkwoomen_expr.wav";
/* End of settings */

enum {
    XO_WEAPON    = 4,
    XO_CGRENADE     = 5,
    m_pPlayer    = 41,
    m_usEvent    = 114
}

new const EXCLASS[] = "grenade";

enum { STATUSICON_HIDE = 0, STATUSICON_FLASH = 2 };

const flagSmokeEvent    = (1 << 1);

#define IsSgGrenade(%1)            (get_pdata_int(%1, m_usEvent, XO_CGRENADE) & flagSmokeEvent)

#define _GetEntOwner(%1)        pev(%1, pev_owner)
#define _GetEntOrigin(%1,%2)    pev(%1, pev_origin, %2)

#define _SetViewModel(%1,%2)    set_pev(%1, pev_viewmodel2, %2)
#define _SetWeaponModel(%1,%2)    set_pev(%1, pev_weaponmodel2, %2)
#define _SetWorldModel(%1,%2)    engfunc(EngFunc_SetModel, %1, %2)

#define _RemoveEntity(%1)        engfunc(EngFunc_RemoveEntity, %1)

#define _get_blindStartTime(%1)    get_ent_data_float(%1, "CBasePlayer", "m_blindStartTime")
#define _get_blindFadeTime(%1)    get_ent_data_float(%1, "CBasePlayer", "m_blindFadeTime")

#if AMXX_VERSION_NUM < 183
    #error [ERROR]: AMXX 1.8.2 - not supported (cuz use new fakemeta natives)!
#endif

new g_MsgId_StatusIcon, g_MsgId_ScreenFade;

new g_pFirstExplosion,
    g_pPros,
    g_pCircle;

enum status_s { status_DISABLED = 0, status_ENABLED = 1 };
new status_s: g_bCanUseItem = status_ENABLED;

new const VERSION[] = "0.0.4";

public plugin_natives()
{
    register_native("SHN_SetStatus", "native__SetStatus", .style = 0);
    register_native("SHN_GetStatus", "native__GetStatus", .style = 0);
}

public plugin_init() {
    register_plugin("Smoke: HealthNade", VERSION, "wopox1337");

    g_MsgId_StatusIcon = get_user_msgid("StatusIcon");
    g_MsgId_ScreenFade = get_user_msgid("ScreenFade");

    register_touch(EXCLASS, "*", "CGrenade_ExplodeTouch");

    register_event("CurWeapon", "Event_CurWeapon", "be", "1=1");
}

public plugin_precache() {
#if defined MODEL_V
    precache_model(MODEL_V);
#endif
#if defined MODEL_P
    precache_model(MODEL_P);
#endif
#if defined MODEL_W
    precache_model(MODEL_W);
#endif

    g_pFirstExplosion = precache_model(SPRITE_EXPLODE1);
    g_pPros = precache_model(SPRITE_PROS);
    g_pCircle = precache_model("sprites/shockwavemsfk.spr");

    precache_sound(SOUND_HEAL);
}

public Event_CurWeapon(pPlayer) {
    enum { WeaponID = 2 };
    if(read_data(WeaponID) == CSW_SMOKEGRENADE)    {
        if(!IsAllowedToUse(pPlayer)) return;

#if defined MODEL_V
        OnPlayer_SetViewModels(pPlayer);
#endif

        Send_StatusIcon__Cross(pPlayer);
    }
    else Send_StatusIcon__Cross(pPlayer, .status = STATUSICON_HIDE);
}

public grenade_throw(pPlayer, pEnt, w_id) {
    if(w_id != CSW_SMOKEGRENADE)
        return;

    if(!IsAllowedToUse(pPlayer))
        return;

#if defined MODEL_W
    OnGrenade_SetWorldModel(pEnt);
#endif
}

public CGrenade_ExplodeTouch(const pEnt, const pOther) {
    // Filter to another grenades type
    if(!IsSgGrenade(pEnt))
        return;

    static iOwner; iOwner = _GetEntOwner(pEnt);

    if(!IsAllowedToUse(iOwner))
        return;

    static Float: fOrigin[3], iOrigin[3];
    _GetEntOrigin(pEnt, fOrigin);
    FVecIVec(fOrigin, iOrigin);

    // Show visuals
    Send_Explode(iOrigin);
    Send_Pros(iOrigin);
    Send_ShockWave(iOrigin);
    OnGrenade_PlaySound(pEnt);

    // Removed default smoke entity, and his detonate event accordingly
    OnGrenade_RemoveByTouch(pEnt);
 
    // Action on near players
    HealPlayersOnRadius(iOwner, fOrigin);
}

stock HealPlayersOnRadius(pInflictor, Float: fOrigin[3]) {
    for(new pPlayer = 1; pPlayer <= MaxClients; pPlayer++) {
        if(is_user_alive(pPlayer)) {

#if !defined ONLY_FOR_TEAMMATES
            if(get_user_team(pInflictor) != get_user_team(pPlayer))
                continue;
#endif
        #pragma unused pInflictor

            static Float: playerOrigin[3];
            _GetEntOrigin(pPlayer, playerOrigin);

            if(get_distance_f(fOrigin, playerOrigin) < HEAL_RADIUS)
                OnPlayer_HealEvent(pPlayer);
        }
    }
}

stock OnPlayer_HealEvent(const pPlayer) {
    set_user_health(pPlayer, min(get_user_health(pPlayer) + HEALTH_TO_HEAL, HEALTH_MAX));

#if defined EFFECT_SCREENFADE
    if(!IsBlind(pPlayer))
        __UTIL_ScreenFade(pPlayer);
#endif
}

#if (defined MODEL_V || defined MODEL_P)
stock OnPlayer_SetViewModels(const pPlayer) {
#if defined MODEL_V
    _SetViewModel(pPlayer, MODEL_V);
#endif
#if defined MODEL_P
    _SetWeaponModel(pPlayer, MODEL_P);
#endif
}
#endif

stock OnGrenade_SetWorldModel(const pEnt)
    _SetWorldModel(pEnt, MODEL_W);

stock OnGrenade_RemoveByTouch(const pEnt)
    _RemoveEntity(pEnt);

stock Send_StatusIcon__Cross(const pPlayer, status = STATUSICON_FLASH) {
    message_begin(MSG_ONE_UNRELIABLE, g_MsgId_StatusIcon, .player = pPlayer);
    write_byte(status);
    write_string("cross");
    write_byte(0);
    write_byte(255);
    write_byte(0);
    message_end();
}

stock OnGrenade_PlaySound(const pEnt)
    engfunc(EngFunc_EmitSound, pEnt, CHAN_WEAPON, SOUND_HEAL, VOL_NORM, ATTN_NORM, 0, PITCH_NORM);


stock Send_Explode(iOrigin[3]) {
    emessage_begin(MSG_PVS, SVC_TEMPENTITY);
    ewrite_byte(TE_EXPLOSION);
    ewrite_coord(iOrigin[0]);
    ewrite_coord(iOrigin[1]);
    ewrite_coord(iOrigin[2] + 65);
    ewrite_short(g_pFirstExplosion);
    ewrite_byte(30);
    ewrite_byte(20);
    ewrite_byte(TE_EXPLFLAG_NOSOUND | TE_EXPLFLAG_NOPARTICLES);
    emessage_end();
}

stock Send_Pros(iOrigin[3]) {
    emessage_begin(MSG_PVS, SVC_TEMPENTITY);
    ewrite_byte(TE_SPRITETRAIL);
    ewrite_coord(iOrigin[0]);
    ewrite_coord(iOrigin[1]);
    ewrite_coord(iOrigin[2] + 20);
    ewrite_coord(iOrigin[0]);
    ewrite_coord(iOrigin[1]);
    ewrite_coord(iOrigin[2] + 80);
    ewrite_short(g_pPros);
    ewrite_byte(20);
    ewrite_byte(20);
    ewrite_byte(4);
    ewrite_byte(20);
    ewrite_byte(10);
    emessage_end();
}

stock Send_ShockWave(iOrigin[3]) {
    emessage_begin(MSG_PVS, SVC_TEMPENTITY);
    ewrite_byte(TE_BEAMCYLINDER);
    ewrite_coord(iOrigin[0]);
    ewrite_coord(iOrigin[1]);
    ewrite_coord(iOrigin[2]);
    ewrite_coord(iOrigin[0]);
    ewrite_coord(iOrigin[1]);
    ewrite_coord(iOrigin[2] + HEAL_RADIUS);
    ewrite_short(g_pCircle);
    ewrite_byte(0);
    ewrite_byte(1);
    ewrite_byte(5);
    ewrite_byte(30);
    ewrite_byte(1);
    ewrite_byte(10);
    ewrite_byte(255);
    ewrite_byte(40);
    ewrite_byte(255);
    ewrite_byte(5);
    emessage_end();
}

stock __UTIL_ScreenFade(const pPlayer, iColor[3] = {170, 255, 0}, iAlpha = 80, Float: flFxTime = 1.0, Float: flHoldTime = 0.3) {
    const FFADE_IN = 0x0000;

    emessage_begin(MSG_ONE_UNRELIABLE, g_MsgId_ScreenFade, .player = pPlayer);
    ewrite_short(FixedUnsigned16(flFxTime));
    ewrite_short(FixedUnsigned16(flHoldTime));
    ewrite_short(FFADE_IN);
    ewrite_byte(iColor[0]);
    ewrite_byte(iColor[1]);
    ewrite_byte(iColor[2]);
    ewrite_byte(iAlpha);
    emessage_end();
}

stock FixedUnsigned16(Float:flValue, iScale = (1 << 12)) {
    return clamp(floatround(flValue * iScale), 0, 0xFFFF);
}

stock IsUserHaveAccessToUse(const pPlayer) {
    // Anytime we can add other checks like cached bool
    return (get_user_flags(pPlayer) & ACCESS_FLAGS);
}

bool: IsAllowedToUse(pPlayer) {
#pragma unused pPlayer

#if defined ACCESS_FLAGS
    if(!IsUserHaveAccessToUse(pPlayer)) {
        return false;
    }
#endif

    if(g_bCanUseItem == status_DISABLED) {
        // client_print_color(pPlayer, print_team_red, "^3 You no may use this grenade now!");
        return false;
    }

    // Also you can add another conditions there...
    return true;
}

stock bool: IsBlind(pPlayer) {
    return bool:(Float: _get_blindStartTime(pPlayer) + Float: _get_blindFadeTime(pPlayer) >= get_gametime());
}

/* API?! */

/**
 * Set item status to use.
 *
 * @note Usage examples:
 *       SHN_SetStatus(1);
 *
 * @param status: 1 - enabled / 0 - disabled
 *
 * @noreturn
 */
    // native SHN_SetStatus(status)
public native__SetStatus(plugin_id, argc)
{
    enum { arg_status = 1 };

    g_bCanUseItem = get_param(arg_status) == 1 ? status_ENABLED : status_DISABLED;
}

/**
 * Retrieves the item status to use.
 *
 * @note Usage examples:
 *       SHN_GetStatus();
 *
 * @return Current status: 1 - enabled / 0 - disabled
 */
    // native SHN_GetStatus()
public native__GetStatus(plugin_id, argc)
{
    return g_bCanUseItem == status_ENABLED ? status_ENABLED : status_DISABLED;
}
 

Shadowless

Пользователь
Регистрация
24 Фев 2019
Сообщения
124
Симпатии
2
Пол
Мужской
#17
did anyone solved this problem?

L 05/06/2019 - 03:08:00: Start of error session.
L 05/06/2019 - 03:08:00: Info (map "fy_snow") (file "addons/amxmodx/logs/error_20190506.log")
L 05/06/2019 - 03:08:00: [AMXX] Displaying debug trace (plugin "top_awards.amxx", version "1.0")
L 05/06/2019 - 03:08:00: [AMXX] Run time error 4: index out of bounds
L 05/06/2019 - 03:08:00: [AMXX] [0] 7z803820.sma.p::client_give_awards (line 118)
L 05/06/2019 - 03:13:43: [AMXX] Displaying debug trace (plugin "top_awards.amxx", version "1.0")
L 05/06/2019 - 03:13:43: [AMXX] Run time error 4: index out of bounds
L 05/06/2019 - 03:13:43: [AMXX] [0] 7z803820.sma.p::client_give_awards (line 118)