Плагин /me /hp

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
27
Реакции
-7
Как сделать в две строчки?
[say] Вас убил: NIK
[say] У него осталось 90 хп

Код:
/*
    Credits:
        * Radius - помощь с кодом. Подсказки по оптимизации.
*/

#include <amxmodx>
#include <engine>
#include <hamsandwich>

// #define NOT_ALIVE    // Использовать /me может только МЕРТВЫЙ игрок. Чтобы разрешить всем пользоваться, закомментируйте;)
#define INFO_KILLER    // Информация /me и /hp после смерти игрока
//#define NO_ROUND    // Поддержка бесконечного раунда.

#define msgSayText     76
#define maxPlayers    32

#if AMXX_VERSION_NUM == 183
enum _:info
{
    damage,
    lasthit,
    killerid,
    killername[32],
    Float:hpkiller,
    Float:apkiller,
    Float:distance
}
new g_iPlayerData[maxPlayers+1][info];
#else
enum _:info
{
    damage,
    lasthit,
    killerid,
    killername[32]
}
new g_iPlayerData[maxPlayers+1][info];
new Float:g_fHpKiller[maxPlayers+1];
new Float:g_fApKiller[maxPlayers+1];
new Float:g_fDistance[maxPlayers+1];
#endif
new const g_szHitPlaces[][] = { "-", "голову", "грудь", "живот", "левую руку", "правую руку", "левую ногу", "правую ногу" };

public plugin_init()
{
    register_plugin("Say me and Say hp", "1.4", "neygomon");   

    register_event("Damage", "eventDamage", "b", "2!0");   
#if defined NO_ROUND
    RegisterHam(Ham_Spawn, "player", "fwdPlayerSpawn", true);
#else
    register_event("HLTV",     "eventRoundStart", "a", "1=0", "2=0");
#endif
    RegisterHam(Ham_Killed, "player", "fwdPlayerKilled", true);

    register_clcmd("say /me",     "ClCmdSayMe");
    register_clcmd("say_team /me",     "ClCmdSayMe");
    register_clcmd("say /hp",     "ClCmdSayHp");
    register_clcmd("say_team /hp",     "ClCmdSayHp");
}

public client_putinserver(id)
{
    arrayset(g_iPlayerData[id], 0, info);
    #if AMXX_VERSION_NUM < 183
    g_fHpKiller[id] = g_fApKiller[id] = g_fDistance[id] = 0.0;
    #endif   
}
#if defined NO_ROUND
public fwdPlayerSpawn(const id)
{
    arrayset(g_iPlayerData[id], 0, info);
    #if AMXX_VERSION_NUM < 183
    g_fHpKiller[id] = g_fApKiller[id] = g_fDistance[id] = 0.0;
    #endif
}
#else
public eventRoundStart()
{
    for(new i = 1; i <= maxPlayers; i++)
    {
        arrayset(g_iPlayerData[i], 0, info);
    #if AMXX_VERSION_NUM < 183   
        g_fHpKiller[i] = g_fApKiller[i] = g_fDistance[i] = 0.0;
    #endif   
    }
}
#endif
public eventDamage(id)
{
    static attacker, hit; attacker = get_user_attacker(id, 0, hit);
    if(id != attacker && 1 <= attacker <= maxPlayers)
    {
        g_iPlayerData[attacker][damage] += read_data(2);
        g_iPlayerData[attacker][lasthit] = hit;
    }   
}

public fwdPlayerKilled(pVictim, pKiller)
{
    if(pVictim == pKiller || !is_user_connected(pKiller) || !is_user_connected(pVictim))
        return;
#if AMXX_VERSION_NUM == 183
    g_iPlayerData[pVictim][hpkiller] = entity_get_float(pKiller, EV_FL_health);
    g_iPlayerData[pVictim][apkiller] = entity_get_float(pKiller, EV_FL_armorvalue);
    g_iPlayerData[pVictim][distance] = entity_range(pKiller, pVictim) / 32.00;
#else
    g_fHpKiller[pVictim] = entity_get_float(pKiller, EV_FL_health);
    g_fApKiller[pVictim] = entity_get_float(pKiller, EV_FL_armorvalue);
    g_fDistance[pVictim] = entity_range(pKiller, pVictim) / 32.00;
#endif   
    g_iPlayerData[pVictim][killerid] = pKiller;
    get_user_name(pKiller, g_iPlayerData[pVictim][killername], charsmax(g_iPlayerData[][killername]));
#if defined INFO_KILLER
    ClCmdSayHp(pVictim);
    ClCmdSayMe(pVictim);
#endif
}

public ClCmdSayMe(id)
{
#if defined NOT_ALIVE
    if(is_user_alive(id))
    {
        ChatColor(id, id, "^1[^3SayMe^1] ^4Данная функция доступна ^3только ^4мертвым игрокам!");
        return PLUGIN_HANDLED;
    }   
#endif
    switch(g_iPlayerData[id][damage])
    {
        case 0: ChatColor(id, id, "^1[^3SayMe^1] ^4Вы ни в кого ^3не ^4попали.");
        default:ChatColor(id, id, "^1[^3SayMe^1] ^4Вы нанесли ^3%d^4 урона. Последнее попадание в ^3%s^4.", g_iPlayerData[id][damage], g_szHitPlaces[g_iPlayerData[id][lasthit]]);
    }   
    return PLUGIN_HANDLED;   
}

public ClCmdSayHp(id)
{
    switch(g_iPlayerData[id][killerid])
    {
        case 0: ChatColor(id, id, "^1[^3SayHp^1] ^4Вас ^3никто ^4не убивал.");
#if AMXX_VERSION_NUM == 183       
        default:ChatColor(id, g_iPlayerData[id][killerid], "^1[^3SayHp^1] ^4Вас убил: ^3%s^4 с расстояния ^3%.0f^4 метров. У него осталось: ^3%.0f^1HP ^4и ^3%.0f^1AP", g_iPlayerData[id][killername], g_iPlayerData[id][distance], g_iPlayerData[id][hpkiller], g_iPlayerData[id][apkiller]);
#else
        default:ChatColor(id, g_iPlayerData[id][killerid], "^1[^3SayHp^1] ^4Вас убил: ^3%s^4 с расстояния ^3%.0f^4 метров. У него осталось: ^3%.0f^1HP ^4и ^3%.0f^1AP", g_iPlayerData[id][killername], g_fDistance[id], g_fHpKiller[id], g_fApKiller[id]);
#endif       
    }
    return PLUGIN_HANDLED;
}

stock ChatColor(id, id2, const szMessage[], any:...)
{
    if(!is_user_connected(id))
        return;
        
    static szMsg[190]; vformat(szMsg, charsmax(szMsg), szMessage, 4);
    message_begin(MSG_ONE, msgSayText, .player = id);
    write_byte(id2);
    write_string(szMsg);
    message_end();   
}
 
Сообщения
1,419
Реакции
2,508
Помог
59 раз(а)
Отправлять два сообщения (два раза ChatColor с разным текстом).
 
Сообщения
27
Реакции
-7
w0w, Не получается ошибку выдает error 016: multiple defaults in "switch"
 
Сообщения
1,419
Реакции
2,508
Помог
59 раз(а)
poduna, потому что нужно не вставлять еще раз default: а в default: добавить второе сообщение.
 
Сообщения
27
Реакции
-7
w0w,
Код:
default:ChatColor(id, g_iPlayerData[id][killerid], "^4[SayHp] ^1Вас убил: ^4%s^1 с расстояния ^4%.0f^1 метров.", g_iPlayerData[id][killername], g_fDistance[id]);           
                ChatColor(id, g_iPlayerData[id][killerid], "^4[SayHp] ^1У него осталось: ^4%.0f^1HP и ^4%.0f^1AP", g_fHpKiller[id], g_fApKiller[id]);
Так сделал теперь еще куча ошибок
 
Сообщения
271
Реакции
423
Помог
5 раз(а)
poduna,
Код:
default:
        {
            ChatColor(id, g_iPlayerData[id][killerid], "^4[SayHp] ^1Вас убил: ^4%s^1 с расстояния ^4%.0f^1 метров.", g_iPlayerData[id][killername], g_fDistance[id]);           
            ChatColor(id, g_iPlayerData[id][killerid], "^4[SayHp] ^1У него осталось: ^4%.0f^1HP и ^4%.0f^1AP", g_fHpKiller[id], g_fApKiller[id]);
        }
17 Дек 2018
w0w, опять опередили:rofl:
 
Сообщения
27
Реакции
-7
Спасибо, только я спасибо не могу ставить не вижу такой кнопки
17 Дек 2018
Еще вопрос по плагин, как сделать в место ^1[^3SayMe^1] ^4Вы нанесли ^3%d^4 урона. Последнее попадание в ^3%s^4.
Так: Вы нанесли N урона, попадание N кол-во, убито N кол-во.
 
Сообщения
1,419
Реакции
2,508
Помог
59 раз(а)
poduna, подставлять аргументы. Пример: client_print_color(id, print_team_default, "^1Урон: ^4%d", g_iPlayerData[id][damage]);
 
Последнее редактирование:
Сообщения
271
Реакции
423
Помог
5 раз(а)
get_user_frags (id)
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу