Что лучше юзать?

Анатолий

Постоялец
Регистрация
8 Июн 2017
Сообщения
478
Симпатии
157
Пол
Мужской
#1
Что лучше юзать? что быстрее будет работать?
Это
C++:
public StartRound()
{
    new players[MAX_PLAYERS], pnum
    get_players(players, pnum, "h")
    for (new i; i < pnum; i ++)
        arrayset(g_arrMeData[players[i]], 0, SayMeData)
}

public EventDamage(victim)
{
    static attacker, hit
    attacker = get_user_attacker(victim, 0, hit)
    if (!is_user_connected(attacker) || attacker == victim) return
    g_arrMeData[attacker][Damage] += read_data(2)
    g_arrMeData[attacker][LastHit] = hit
}
Или это
C++:
public StartRound()
{
    for (new i = 1; i <= MaxClients; ++ i)
        arrayset(g_arrMeData[i], 0, SayMeData)
}

public EventDamage(victim)
{
    static attacker, hit
    attacker = get_user_attacker(victim, 0, hit)
    if (victim != attacker && 1 <= attacker <= MaxClients)
    {
        g_arrMeData[attacker][Damage] += read_data(2)
        g_arrMeData[attacker][LastHit] = hit
    }
}
RE не предлагать!
 

bekzod281093

Пользователь
Регистрация
8 Июл 2018
Сообщения
68
Симпатии
3
Пол
Мужской
#2
Что лучше юзать? что быстрее будет работать?
Это
C++:
public StartRound()
{
    new players[MAX_PLAYERS], pnum
    get_players(players, pnum, "h")
    for (new i; i < pnum; i ++)
        arrayset(g_arrMeData[players[i]], 0, SayMeData)
}

public EventDamage(victim)
{
    static attacker, hit
    attacker = get_user_attacker(victim, 0, hit)
    if (!is_user_connected(attacker) || attacker == victim) return
    g_arrMeData[attacker][Damage] += read_data(2)
    g_arrMeData[attacker][LastHit] = hit
}
Или это
C++:
public StartRound()
{
    for (new i = 1; i <= MaxClients; ++ i)
        arrayset(g_arrMeData[i], 0, SayMeData)
}

public EventDamage(victim)
{
    static attacker, hit
    attacker = get_user_attacker(victim, 0, hit)
    if (victim != attacker && 1 <= attacker <= MaxClients)
    {
        g_arrMeData[attacker][Damage] += read_data(2)
        g_arrMeData[attacker][LastHit] = hit
    }
}
RE не предлагать!
первый
 

d3m37r4

Постоялец
Регистрация
8 Июн 2017
Сообщения
422
Симпатии
192
Пол
Мужской
#4
Проверка на валидность игрока: смысл второго вариант мне не понятен, если есть is_user_connected зачем то же самое костылить?
arrayset вроде и двумерные может обнулять, чтобы обойтись без цикла. Нужно проверить, на амх-х затрагивалась данная тема
 
Последнее редактирование: d3m37r4

Анатолий

Постоялец
Регистрация
8 Июн 2017
Сообщения
478
Симпатии
157
Пол
Мужской
#5
Проверка на валидность игрока: смысл второго вариант мне не понятен, если есть is_user_connected зачем то же самое костылить?
arrayset вроде и двумерные может обнулять, чтобы обойтись без цикла. Нужно проверить, на амх-х затрагивалась данная тема
ну тут уже не меня нужно спрашивать а неугомона это его код то) скачай его me и сам глянь. я просто хочу сделать для себя нормально поэтому и спрашиваю как лучше.
Пока как то так получилось.
C++:
#include <amxmodx>

#if AMXX_VERSION_NUM < 183
    #include <colorchat>
    const MAX_PLAYERS = 32
    const MAX_NAME_LENGTH = 32
    #define client_disconnected client_disconnect
#endif

#define SAY_ME_HP             // Выводить ли /me, /hp после смерти автоматически?
const NOT_ALIVE = 0             // Доступ к команде /me (0 - Только мёртвым. 1 - Всем.)
//#define NO_ROUND             // Поддержка бесконечного раунда.

enum GetStatsFunctions {StatsMe, StatsHp}
enum _:SayMeData {Damage, LastHit, HpKiller, ApKiller, KillerId, KillerName[MAX_NAME_LENGTH]}
new const g_szHit[][] = {"", "голову", "грудь", "живот", "левую руку", "правую руку", "левую ногу", "правую ногу"}
new g_arrMeData[MAX_PLAYERS +1][SayMeData]

public plugin_init()
{
    register_clcmd("say /me", "clCMD_SayMe")
    register_clcmd("say_team /me", "clCMD_SayMe")
    register_clcmd("say /hp", "clCMD_SayHp")
    register_clcmd("say_team /hp", "clCMD_SayHp")

    register_event("Damage", "EventDamage", "b", "2!0")
    register_event("DeathMsg", "EventDeath", "a", "1>0")

#if defined NO_ROUND
    register_event("ResetHUD", "eResetHud", "be")
#else
    register_event("HLTV", "StartRound", "a", "1=0", "2=0")
#endif
}

public clCMD_SayMe(id)
    return GetStats(id, StatsMe)
public clCMD_SayHp(id)
    return GetStats(id, StatsHp)

public client_putinserver(id)
    arrayset(g_arrMeData[id], 0, SayMeData)
public client_disconnected(id)
    arrayset(g_arrMeData[id], 0, SayMeData)

#if defined NO_ROUND
public eResetHud(id)
    arrayset(g_arrMeData[id], 0, SayMeData)
#else
public StartRound()
{
    new players[MAX_PLAYERS], pnum
    get_players(players, pnum, "h")
    for (new i; i < pnum; i ++)
        arrayset(g_arrMeData[players[i]], 0, SayMeData)
}
#endif

public EventDamage(victim)
{
    static attacker, hit
    attacker = get_user_attacker(victim, 0, hit)
    if (!is_user_connected(attacker) || attacker == victim) return
    g_arrMeData[attacker][Damage] += read_data(2)
    g_arrMeData[attacker][LastHit] = hit
}

public EventDeath()
{
    static killer, victim
    killer = read_data(1), victim = read_data(2)
    if (!is_user_connected(killer) || killer == victim) return

    g_arrMeData[victim][KillerId] = killer
    g_arrMeData[victim][ApKiller] = get_user_armor(killer)
    g_arrMeData[victim][HpKiller] = get_user_health(killer)
    get_user_name(killer, g_arrMeData[victim][KillerName], charsmax(g_arrMeData[][KillerName]))

#if defined SAY_ME_HP
    GetStats(victim, StatsMe)
    GetStats(victim, StatsHp)
#endif
}

GetStats(id, GetStatsFunctions:type)
{
    if (!is_user_connected(id))
        return PLUGIN_HANDLED

    switch(type)
    {
        case StatsMe:
        {
            if (is_user_alive(id) && !NOT_ALIVE)
                client_print_color(id, print_team_default, "^1[^4SayMe^1] Команда доступна только ^3мёртвым ^1игрокам!")
            else
            {
                if (!g_arrMeData[id][Damage])
                    client_print_color(id, print_team_default, "^1[^4SayMe^1] Вы ни в кого ^3не ^1попали!")
                else
                {
                    client_print_color(id, print_team_default, "^1[^4SayMe^1] Вы нанесли ^3%d ^1урона!", g_arrMeData[id][Damage])
                    client_print_color(id, print_team_default, "^1[^4SayMe^1] Последнее попадание ^3в ^4%s", g_szHit[g_arrMeData[id][LastHit]])
                }
            }
        }
        case StatsHp:
        {
            if (!g_arrMeData[id][KillerId]) client_print_color(id, print_team_default, "^1[^4SayHp^1] Вас ^3никто ^1не убивал!")
            else client_print_color(id, g_arrMeData[id][KillerId], "^1[^4SayHp^1] Вас убил ^3%s^1. У него осталось ^3%d^4HP ^1и ^3%d^4AP", g_arrMeData[id][KillerName], g_arrMeData[id][HpKiller], g_arrMeData[id][ApKiller])
        }
    }
    return PLUGIN_HANDLED
}