ReHLDS/ReAPI Top damage round

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
173
Симпатии
67
Пол
Мужской
#21
Coder, Ты либо попал в топ раунда, либо не попал, вот это логично
код скинул выше попробуй его, но по сути смотри, выводишь ты 10 человек лучших, на сервере играет 7, значит они всегда будут попадать в этот топ. Тут нужно для каждого сервера подбирать сколько выводить, в зависимости от среднего онлайна. Играет на серваке например 15 человек, достаточно 5 выводить, думаю ты понял о чем я.
 

To be or not to be

Постоялец
Регистрация
9 Июн 2017
Сообщения
819
Симпатии
176
#22
Coder, код нужно нормально написать.
Выводить максимальное количество игроков, а выводить в этот предел уже тех, кто нанес урон. О каком онлайне речь идет, лул?
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
173
Симпатии
67
Пол
Мужской
#23
Coder, код нужно нормально написать.
Выводить максимальное количество игроков, а выводить в этот предел уже тех, кто нанес урон. О каком онлайне речь идет, лул?
лул, типы в настройки ставят вывод списка 10 человек, а на сервере играет 5 человек вот тебе и выводится максимальное количество игроков и не важно есть дамаг у них или нет, кому не надо выводить таких типов скинул участок кода в предыдущих сообщениях. Действительно, код написан ху**о из-за одной проверки, которая как я считаю вовсе не нужна)
 
Регистрация
28 Янв 2018
Сообщения
150
Симпатии
57
#24
Код:
new g_bShow = true;
Не вижу смысла.

Код:
new g_isSwitch[MAX_PLAYERS + 1] = {0, ...};
Он и так по дефолту 0 (а лучше юзать bool)

Код:
#define Keys
#define PREFIX
Юзай более уникальные имена и желательно с верхним регистром
напр:
Код:
#define DMG_MENU_KEYS
#define DMG_CHAT_PREFIX
....

Код:
client_cmd(id, "setinfo _topdamage %s", g_szText);
Не надежно и не эффективно (да и можно бан получить)

Код:
g_isSwitch[id] = (g_isSwitch[id]) ? 0 : 1;
лучше так:
Код:
g_isSwitch[id] = !g_isSwitch[id];
....

Код:
public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, const pevAttacker, Float:flDamage, bitsDamageType)
{
    if(pevVictim == pevAttacker || get_member(pevVictim, m_iTeam) == get_member(pevAttacker, m_iTeam) || bitsDamageType & DMG_BLAST)
        return HC_CONTINUE;
    
    if(IsPlayer(pevAttacker) && rg_is_player_can_takedamage(pevVictim, pevAttacker))
        g_flPlayerDmg[pevAttacker] += flDamage;
    
    return HC_CONTINUE;
}
тут проверку IsPlayer(pevAttacker) переместить выше (те всегда ставить ненативные проверки первыми)
а от rg_is_player_can_takedamage нет смысла если сравниваешь команду игрока. Итоге:

Код:
public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, const pevAttacker, Float:flDamage, bitsDamageType)
{
    if (pevVictim == pevAttacker || !IsPlayer(pevAttacker) || (bitsDamageType & DMG_BLAST))
        return HC_CONTINUE;
    
    if (!GetHookChainReturn(ATYPE_INTEGER)) // еще одна проверка функции CBasePlayer::TakeDamage
        return HC_CONTINUE;
        
    if (get_member(pevVictim, m_iTeam) == get_member(pevAttacker, m_iTeam)) {
        g_flPlayerDmg[pevAttacker] += flDamage;
    }
    
    return HC_CONTINUE;
}
Насчет тасков можно было бы обойтись и без них.
Нелогичное использование MIN_PLAYERS (он не там где надо).
Много циклов.
Также не вижу смысла от KILLS так плагин "Top Round Damage"
Не забудь про Credits. откуда скопирован куски кода, идеи.
 
Регистрация
28 Янв 2018
Сообщения
150
Симпатии
57
#26
А лучше вообще не пытайтесь установить/обновить амхх 183 (и все эти dev'ы) если вы не разработчик/тестер. Юзайте только амхх 182 пока не будет релиз.
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
173
Симпатии
67
Пол
Мужской
#27
Код:
new g_bShow = true;
Не вижу смысла.

Код:
new g_isSwitch[MAX_PLAYERS + 1] = {0, ...};
Он и так по дефолту 0 (а лучше юзать bool)

Код:
#define Keys
#define PREFIX
Юзай более уникальные имена и желательно с верхним регистром
напр:
Код:
#define DMG_MENU_KEYS
#define DMG_CHAT_PREFIX
....

Код:
client_cmd(id, "setinfo _topdamage %s", g_szText);
Не надежно и не эффективно (да и можно бан получить)

Код:
g_isSwitch[id] = (g_isSwitch[id]) ? 0 : 1;
лучше так:
Код:
g_isSwitch[id] = !g_isSwitch[id];
....

Код:
public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, const pevAttacker, Float:flDamage, bitsDamageType)
{
    if(pevVictim == pevAttacker || get_member(pevVictim, m_iTeam) == get_member(pevAttacker, m_iTeam) || bitsDamageType & DMG_BLAST)
        return HC_CONTINUE;
   
    if(IsPlayer(pevAttacker) && rg_is_player_can_takedamage(pevVictim, pevAttacker))
        g_flPlayerDmg[pevAttacker] += flDamage;
   
    return HC_CONTINUE;
}
тут проверку IsPlayer(pevAttacker) переместить выше (те всегда ставить ненативные проверки первыми)
а от rg_is_player_can_takedamage нет смысла если сравниваешь команду игрока. Итоге:

Код:
public CBasePlayer_TakeDamage(const pevVictim, pevInflictor, const pevAttacker, Float:flDamage, bitsDamageType)
{
    if (pevVictim == pevAttacker || !IsPlayer(pevAttacker) || (bitsDamageType & DMG_BLAST))
        return HC_CONTINUE;
   
    if (!GetHookChainReturn(ATYPE_INTEGER)) // еще одна проверка функции CBasePlayer::TakeDamage
        return HC_CONTINUE;
       
    if (get_member(pevVictim, m_iTeam) == get_member(pevAttacker, m_iTeam)) {
        g_flPlayerDmg[pevAttacker] += flDamage;
    }
   
    return HC_CONTINUE;
}
Насчет тасков можно было бы обойтись и без них.
Нелогичное использование MIN_PLAYERS (он не там где надо).
Много циклов.
Также не вижу смысла от KILLS так плагин "Top Round Damage"
Не забудь про Credits. откуда скопирован куски кода, идеи.
Переписал чуть код глянь сейчас что можно еще подкорректировать, прикрепил исходник к сообщению.
1. Убрал сохранение через setinfo и переписал через bool, но теперь нужно будет каждую карту писать команду отключения, если не нужно выводить, тогда вопрос это лучше реализовать через nvault? или есть еще какие-то способы?
2. Насчет имен ок, что касается функции урона, если сделать вот эту проверку
C++:
if (!GetHookChainReturn(ATYPE_INTEGER)) // еще одна проверка функции CBasePlayer::TakeDamage
        return HC_CONTINUE;
то урон начинает считать меньше в раза 2, чем нанес реально, поэтому я ее не буду использовать, но возьму на заметку. Также убрал проверку на команду и оставил rg_is_player_can_takedamage(pevVictim, pevAttacker)
3. Что касается тасков, я бы с радостью от них избавился, но будет неточность урона в плане последнего попадания, оно просто не успеет его посчитать, если можно сделать без таска, то каким способом еще я не знаю.
4. Нелогичное использование MIN_PLAYERS (он не там где надо), вот не вижу места, куда его поместить логичнее)
5. Циклы чуть урезал, может еще можно, глянь пожалуйста.
6. Также не вижу смысла от KILLS так плагин "Top Round Damage", сделаю потом переключение в настройке, кому не надо можно будет выключить.
7. По поводу credits как я понимаю что-то увидел в твоем плагине, как писал в описании темы плагин создавался относительно давненько для себя, возможно часть смотрел где-то в чьих-то плагинах, не помню, короче поищу и в некст обновлении уже укажу.
Понедельник в 16:19
К слову, не пытайтесь пихнуть где попало = !, Она иногда не хочет собираться под 183 с энумами
в данном случае с переключением показа стоит использовать или нет? или можно конкретный пример глянуть где оно создает проблему, но взял в любой случае на заметку.
Понедельник в 16:24
А лучше вообще не пытайтесь установить/обновить амхх 183 (и все эти dev'ы) если вы не разработчик/тестер. Юзайте только амхх 182 пока не будет релиз.
вот приведу пример почему я перешел на 1.8.3 и не остался на 1.8.2. На сервере используется стата фримена, а к базе прикручено 3 сервера, 2 из них стоят рядом с базой, основной 3й сервер в другом городе. Так вот при смене карты звание на 1.8.2 подгружается 10-20 секунд, а на 1.8.3 примерно 2-5 секунды, но конечно же эти показатели не всегда такие, но в большинстве случаев.
 

Вложения

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
173
Симпатии
67
Пол
Мужской
#29
Обновил 1й пост, рефакторинг кода, спасибо за советы Vaqtincha
 

Andrey777best

Пользователь
Регистрация
10 Июн 2017
Сообщения
60
Симпатии
9
Пол
Мужской
#30
Coder, Можете добавить в меню топа, что бы свой ник выделялся, что бы был другим цветом?
Вторник в 13:52
Так же урон не правильно показывает, нанес 416 показывает 420, или нанес 67 показывает 68. И сделайте что бы меню было помимо настройки в 5 сек, еще было до начала нового раунда, а то после разминки, в новом раунде показывает во время игры.
 

Andrey777best

Пользователь
Регистрация
10 Июн 2017
Сообщения
60
Симпатии
9
Пол
Мужской
#31
Закончилась разминка, выскакивает топ меню, и висит 5 сек, можно что бы она не работала на разминку?
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
173
Симпатии
67
Пол
Мужской
#32
Coder, Можете добавить в меню топа, что бы свой ник выделялся, что бы был другим цветом?
Вторник в 13:52
Так же урон не правильно показывает, нанес 416 показывает 420, или нанес 67 показывает 68. И сделайте что бы меню было помимо настройки в 5 сек, еще было до начала нового раунда, а то после разминки, в новом раунде показывает во время игры.
Ник другим цветом не вижу смысла и так цветов мало для меню (а точнее всего 4). Урон считает точно, это либо в моем плагине нужно просто считать урон как целое значение, а не с плавающей точкой, либо в плагине где используется команда /me считать урон с плавающей точкой.
По поводу разминки, есть 2 решения как по мне, может больше. 1-е просто выставить со 2го раунда вывод, но минус в том, что в пистолетке не будет выводить (плохой вариант). 2-е делать нативы в плагине разминки. Возможно можно еще как-то сделать проще, но я не знаю.
 

d3m37r4

Пользователь
Регистрация
8 Июн 2017
Сообщения
288
Симпатии
127
Пол
Мужской
#33
Coder, если с плавающей точкой дамаг, тогда нужно округлять в большую сторону. Было установлено опытным путем :D
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
173
Симпатии
67
Пол
Мужской
#34
Coder, если с плавающей точкой дамаг, тогда нужно округлять в большую сторону. Было установлено опытным путем :D
у меня нету разницы в дамаге с командой /me и этим плагином) а если округлять, то почему тогда в большую сторону и где оно может пригодится такое округление?
 

d3m37r4

Пользователь
Регистрация
8 Июн 2017
Сообщения
288
Симпатии
127
Пол
Мужской
#35
если округлять, то почему тогда в большую сторону и где оно может пригодится такое округление?
В некоторых случаях, нанесенный урон, при обычном округлении будет на единицу меньше фактического. Поэтому число дамага с плавающей точкой в большую нужно округлить.
 

Andrey777best

Пользователь
Регистрация
10 Июн 2017
Сообщения
60
Симпатии
9
Пол
Мужской
#36
Coder, Вот так сделайте, чтобы свой ник выделялся, так удобнее и красивее, сразу в газа бросается, это как у Vaqtincha в плагине было, ну и с уроном как бы сделать без округления, потому что другие показывают точно, сколько нанес.
 

Вложения

  • 12,3 KB 13

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
173
Симпатии
67
Пол
Мужской
#37
Coder, Вот так сделайте, чтобы свой ник выделялся, так удобнее и красивее, сразу в газа бросается, это как у Vaqtincha в плагине было, ну и с уроном как бы сделать без округления, потому что другие показывают точно, сколько нанес.
если делать выделение ника, то это нужно возвращать код к версии 1.01 и в функции вывода списка гонять цикл для каждого игрока (то есть максимальное количество итераций будет 32 игрока умножить на TOP_PLAYERS, вместо текущей реализации одного цикла до TOP_PLAYERS). По поводу урона легче скинь плагин, которым считаешь нанесенный урон для команды /me, так как у тебя есть несоответствие, а у кого-то нету.
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
173
Симпатии
67
Пол
Мужской
#38
обновил 1й пост.
Изменения в подсчете урона (теперь целым числом) и перенес проверку на минимальное количество игроков с fnCompareDamage() в RoundEnd()
Среда в 16:59
Отдельные хотелки в виде выделения ника цветом или убрать вывод в разминке делаются за отдельную плату.
 

Andrey777best

Пользователь
Регистрация
10 Июн 2017
Сообщения
60
Симпатии
9
Пол
Мужской
#39
обновил 1й пост.
Изменения в подсчете урона (теперь целым числом) и перенес проверку на минимальное количество игроков с fnCompareDamage() в RoundEnd()
Среда в 16:59
Отдельные хотелки в виде выделения ника цветом или убрать вывод в разминке делаются за отдельную плату.
Всеравно не сходится, нанес 170, показывает 180.
 

Coder

Пользователь
Регистрация
10 Июн 2017
Сообщения
173
Симпатии
67
Пол
Мужской
#40

Вложения

  • 112,2 KB 11
  • 108,5 KB 11
  • 114 KB 9