ReHLDS/HLDS Lite top damage

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
578
Симпатии
185
Пол
Мужской
VKcom
e1337ace
#1
Автор: neygomon, AcE
RE Версия: 1.1
HLDS Версия:
1.1
Описание:

Выводит меню с топом по урону в конце раунда.
  • Показывает точный урон.
  • Нет лишних модулей (ham, fm, re) для HLDS
  • При игре 1х1 тоже работает как надо.
Настройки:
Код:
say /topdmg, say_team /topdmg // Вкл/Выкл меню топа.
const ShowTime = 5 // Время показа меню топа. (В секундах)
const MinPlayers = 2 // Минимальное кол-во игроков для вывода меню топа.
const MaxUsersInTopByDmg = 5 // Кол-во игроков в меню топа. (Больше 10 ставить нет смысла)
Если поставить например 5 то цифра в меню тоже поменяется.
 

Вложения

Последнее редактирование модератором:

kasperch1k

Пользователь
Регистрация
8 Июн 2017
Сообщения
166
Симпатии
44
Пол
Мужской
#2
забрал спасибо тебе Толя
 

d3m37r4

Постоялец
Регистрация
8 Июн 2017
Сообщения
504
Симпатии
245
Пол
Мужской
VKcom
id109544387
Telegram
@dmitry_isakow
#3
Точный урон как раз-таки в _TakeDamage мы можем получить, там число с плавающей точкой.
7 Май 2018
7 Май 2018
PHP:
public StartRound()
{
    for (new i = 1; i <= MaxClients; ++ i)
        g_dmg[i] = 0
}
arrayset использовать, чтобы циклы не гонять, низя?
7 Май 2018
Код:
(0 < killer <= MaxClients) == false
Это что за конструкция?) почему нельзя проверить просто используя is_user_connected ?
 

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
578
Симпатии
185
Пол
Мужской
VKcom
e1337ace
#4
Точный урон как раз-таки в _TakeDamage мы можем получить, там число с плавающей точкой.
7 Май 2018
7 Май 2018
PHP:
public StartRound()
{
    for (new i = 1; i <= MaxClients; ++ i)
        g_dmg[i] = 0
}
arrayset использовать, чтобы циклы не гонять, низя?
7 Май 2018
Код:
(0 < killer <= MaxClients) == false
Это что за конструкция?) почему нельзя проверить просто используя is_user_connected ?
Ну допустим
Код:
if (!is_user_connected(killer) || killer == victim) return
_TakeDamage? а смысл какой? проверял урон дамагером + урон который в стату пишется одинаков! а если нет разницы то нахрена мне заморачиватся с Float
Мне нужно что бы урон совпадал с дамагером и с уроном в стате!
ну и arrayset без цикла толку?
 

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
578
Симпатии
185
Пол
Мужской
VKcom
e1337ace
#5
по делу я забыл только это сделать
Код:
public client_putinserver(id)
    g_dmg[id] = 0
 

ake

Пользователь
Регистрация
19 Янв 2018
Сообщения
22
Симпатии
4
#6
Код:
for (new i, x, imax, last; i < pnum; ++ i)
    {
        for (x = 0, imax = 0, last = 0; x < pnum; ++ x)
        {
            if (!bExclude[players[x]])
            {
                if (iDmg[players[x]] > imax)
                {
                    imax = iDmg[players[x]]
                    last = players[x]
                }
            }
        }
        bExclude[last] = true
        sortedId[i] = last
    }
32*32 (1024) итераций вместо 32.... сразу видно лайт)
 

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
578
Симпатии
185
Пол
Мужской
VKcom
e1337ace
#7
Код:
for (new i, x, imax, last; i < pnum; ++ i)
    {
        for (x = 0, imax = 0, last = 0; x < pnum; ++ x)
        {
            if (!bExclude[players[x]])
            {
                if (iDmg[players[x]] > imax)
                {
                    imax = iDmg[players[x]]
                    last = players[x]
                }
            }
        }
        bExclude[last] = true
        sortedId[i] = last
    }
32*32 (1024) итераций вместо 32.... сразу видно лайт)
Вырезал из плагина csx easy stats by neygomon!
сделай лучше.
 

d3m37r4

Постоялец
Регистрация
8 Июн 2017
Сообщения
504
Симпатии
245
Пол
Мужской
VKcom
id109544387
Telegram
@dmitry_isakow
#8
Определись: тебе нужен одинаковый урон или точный?) Т.к. в заявленном тобой описании написано:
А сейчас ты утверждаешь:
проверял урон дамагером + урон который в стату пишется одинаков!
 

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
578
Симпатии
185
Пол
Мужской
VKcom
e1337ace
#9
Определись: тебе нужен одинаковый урон или точный?) Т.к. в заявленном тобой описании написано:

А сейчас ты утверждаешь:
бля не еби мне мозг! урон показывает точно! + совпадает с уроном дамагера и статистикой!
Попал в ебло на 105 hp дамагер показывает 105 в стате 105 в меню тоже 105 показывает. с /me, /hp урон тоже совпадает (Лично у меня) Проверял с _TakeDamage урон одинаковый! смысла в _TakeDamage не вижу!
 
Последнее редактирование: Анатолий

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
578
Симпатии
185
Пол
Мужской
VKcom
e1337ace
#11
Супер-точный урон... снес 105hp (а с авп- все 400) из 100
ну кто виноват что в cs так сделано? можно сделать что бы показывало точный урон тобишь больше 100hp с человека не выбьешь но мне так не нравится. у Leo[BH] есть такой плагин качайте у него на страничке.
 

iOS

Пользователь
Регистрация
9 Июн 2017
Сообщения
362
Симпатии
56
Пол
Мужской
#12
У меня стоит плагин, чтоб урон не могли нанести, больше чем хп. Так реалистичнее.
 

perfectblood0

Команда форума
Администратор
Регистрация
29 Окт 2017
Сообщения
1.627
Симпатии
524
#13
У меня стоит плагин, чтоб урон не могли нанести, больше чем хп. Так реалистичнее.
А какая, собственно разница? Снесёт он 100 вместо 400, игрок будет живее от этого?
 

fantom

Постоялец
Регистрация
11 Июн 2017
Сообщения
236
Симпатии
158
Пол
Мужской
#15
урон показывает точно! + совпадает с уроном дамагера и статистикой!
взаимоисключающие параграфы
Супер-точный урон... снес 105hp (а с авп- все 400) из 100
Тут все верно нанесенный урон может быть больше снятого хп.


А вообше то есть RegameDLL. Благодаря s1lent-у можете спокойно смотреть как оно изнутри работает дабы не писать вот такие непонятные плагины. Но всем лень, и лучше убеждать что чей то плагин супер лайт даже не понимая ничего в алгоритмах
 

iOS

Пользователь
Регистрация
9 Июн 2017
Сообщения
362
Симпатии
56
Пол
Мужской
#16
Так если у меня стоит плагин "Real Damage", твой топ будет точно урон выводить?
 

fantom

Постоялец
Регистрация
11 Июн 2017
Сообщения
236
Симпатии
158
Пол
Мужской
#17
Так если у меня стоит плагин "Real Damage", твой топ будет точно урон выводить?
Смысл данного плагина? Или вы не отличаете урон от ХП. Это разные вещи. А если хотите топ по отнятому хп, то может стоит не лепить костыль, а считивать отнятое хп вместо нанесенного урона
 

Bars

Пользователь
Регистрация
10 Июн 2017
Сообщения
55
Симпатии
4
Пол
Мужской
#19
Автор: neygomon, AcE
Версия: 1.0



Описание:
Выводит меню с топом по урону в конце раунда.
  • Показывает точный урон.
  • Нет лишних модулей (ham, fm, re)
  • При игре 1х1 тоже работает как надо.
Настройки:
Код:
const MaxUsersInTopByDmg = 10 // Кол-во игроков в меню топа.
Если поставить например 5 то цифра в меню тоже поменяется.
От себя:
Вырезал из плагина csx easy stats by neygomon
Под RE делать не буду. Плагин использует только #include <amxmodx> Дополнять лишними модулями нет смысла.
Плагин делал чисто для себя! Решил поделится.
спасибо Толян)
 

Анатолий

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
578
Симпатии
185
Пол
Мужской
VKcom
e1337ace
#20
Так лучше?
C++:
#include <amxmodx>

#if AMXX_VERSION_NUM < 183
    new MaxClients
    const MAX_PLAYERS = 32
    const MAX_NAME_LENGTH = 32
#endif

const MaxUsersInTopByDmg = 10         // Кол-во игроков в меню топа.

enum _:PlayerData
{
    DAMAGE,
    PLAYER_ID
}
new g_dmg[MAX_PLAYERS +1]
new g_arrData[MAX_PLAYERS +1][PlayerData]

public plugin_init()
{
    register_plugin("Lite Top Damage", "1.0", "neugomon, AcE")
    register_event("HLTV", "StartRound", "a", "1=0", "2=0")
    register_logevent("RoundEnd_Post", 2, "1=Round_End")
    register_event("Damage", "eDamage", "b", "2!0", "3=0", "4!0")

#if AMXX_VERSION_NUM < 183
    MaxClients = get_maxplayers()
#endif
}

public client_putinserver(id)
{
    g_dmg[id] = 0
    arrayset(g_arrData[id], 0, PlayerData)
}

public StartRound()
{
    for (new i = 1; i <= MaxClients; ++ i)
    {
        g_dmg[i] = 0
        arrayset(g_arrData[i], 0, PlayerData)
    }
}

public eDamage(victim)
{
    static killer
    killer = get_user_attacker(victim)
    if (!is_user_connected(killer) || killer == victim) return
    g_dmg[killer] += read_data(2)
}

public RoundEnd_Post()
    set_task(0.5, "TopMenu")

public TopMenu()
{
    new players[MAX_PLAYERS], pnum
    get_players(players, pnum, "h")

    for (new i; i < pnum; i ++)
    {
        g_arrData[i][PLAYER_ID] = players[i]
        g_arrData[i][DAMAGE] = g_dmg[players[i]]
    }
    SortCustom2D(g_arrData, sizeof g_arrData, "SortTopDamage")

    new bool:bAllowShow, szPlayers[512], len = formatex(szPlayers, charsmax(szPlayers), "\y[\wТОП \r%d\y] \wТоп по урону^n^n", MaxUsersInTopByDmg)
    for (new i, name[MAX_NAME_LENGTH]; i < MaxUsersInTopByDmg; ++ i)
    {
        if (g_arrData[i][DAMAGE] <= 0)
            continue

        get_user_name(g_arrData[i][PLAYER_ID], name, charsmax(name))
        len += formatex(szPlayers[len], charsmax(szPlayers) - len, "\r%d \w- \y[\r%d\y] \w- \y%s^n", i +1, g_arrData[i][DAMAGE], name)
        bAllowShow = true
    }
    if (bAllowShow)
    {
        for (new i, m, nm; i < pnum; ++ i)
            if (!player_menu_info(g_arrData[i][PLAYER_ID], m, nm))
                show_menu(g_arrData[i][PLAYER_ID], MENU_KEY_0|MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9, szPlayers, 5)
    }
}

public SortTopDamage(const elem1[], const elem2[])
{
    return (elem1[DAMAGE] < elem2[DAMAGE]) ? 1 : (elem1[DAMAGE] > elem2[DAMAGE]) ? -1 : 0
}