Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Unreal Mini Damager

, Очередной дамагер, ага!
Статус пользователя karaulov
сообщение 4.2.2022, 9:00
Сообщение #1


Стаж: 15 лет

Сообщений: 1077
Благодарностей: 435
Полезность: 465

Очередной плагин отображения урона.


Версия плагина:
1.2


Особенности отличающие данный плагин от других:

* Отображает смертельный выстрел
* Отображает урон в режиме наблюдения.
* Возможность установить отдельно флаги для дамагера, и урона по невидимым.


Ничего лишнего.

Код:
#include <amxmodx>
#include <amxmisc>
#include <engine>
#include <reapi>

#define PLUGIN "Unreal Mini Damager"
#define VERSION "1.2"
#define AUTHOR "Karaulov"

new g_hSyncObjAttacker;
new g_hSyncObjTarget;

new bool:g_bDmgEnabled[50] = {true, ...};

// Установите флаг для доступа к дамагеру
//#define DAMAGE_FLAG ADMIN_RESERVATION

// Установите флаг для тех кто будет видеть урон через стены
//#define INVISIBLED_FLAG ADMIN_BAN

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_clcmd("say /damager","toggle_damager",_,"Вкл/выкл damager");
register_clcmd("say_team /damager","toggle_damager",_,"Вкл/выкл damager");
g_hSyncObjAttacker = CreateHudSyncObj();
g_hSyncObjTarget = CreateHudSyncObj();
RegisterHookChain(RG_CBasePlayer_TakeDamage, "TakeDamage_Post", true);
}

public toggle_damager(id){
g_bDmgEnabled[id] = !g_bDmgEnabled[id];
set_hudmessage(0, 100, 200, -1.0, 0.55, 0, 0.1, 2.0, 0.02, 0.02, -1);
show_hudmessage(id, "Отображение урона %s", g_bDmgEnabled[id] ? "ВКЛЮЧЕНО" : "ВЫКЛЮЧЕНО");
}

public client_putinserver(id)
{
g_bDmgEnabled[id] = true;
}

public print_damage_to_spectators(attacker,target,damage)
{
new iPlayers[32], iNum, specPlayer;
get_players(iPlayers, iNum,"bch") ;
for(new i = 0; i < iNum; i++)
{
specPlayer = iPlayers[i];
new specTarget = get_entvar(specPlayer, var_iuser2);
if( specTarget == attacker )
{
set_hudmessage(0, 50, 200, -1.0, 0.45, 0, 0.1, 2.5, 0.02, 0.02, 2);
if (is_user_alive(target))
{
ShowSyncHudMsg(specPlayer, g_hSyncObjAttacker, "%i^n", damage);
}
else
{
ShowSyncHudMsg(specPlayer, g_hSyncObjAttacker, "%i - СМЕРТЕЛЬНЫЙ^n",damage);
}
}
else if( specTarget == target )
{
set_hudmessage(200, 20, 20, -1.0, 0.55, 0, 0.1, 2.5, 0.02, 0.02, 3);
if (is_user_alive(target))
{
ShowSyncHudMsg(specPlayer, g_hSyncObjTarget, "%i^n", damage);
}
else
{
ShowSyncHudMsg(specPlayer, g_hSyncObjTarget, "%i - СМЕРТЕЛЬНЫЙ^n",damage);
}
}
}
}

public print_damage_to_player(attacker,target,damage)
{
new bool:bIsAttackerConnected = is_user_connected(attacker) > 0;
new bool:bIsTargetConnected = is_user_connected(target) > 0;

#if defined INVISIBLED_FLAG
new bool:bIsVisibled = true;
if (bIsAttackerConnected && bIsTargetConnected)
bIsVisibled = is_user_visibled(attacker,target);
#endif

if (attacker != target && bIsAttackerConnected && g_bDmgEnabled[attacker])
{
#if defined DAMAGE_FLAG
if (get_user_flags(attacker) & DAMAGE_FLAG)
#endif
#if defined INVISIBLED_FLAG
if (bIsVisibled || get_user_flags(attacker) & INVISIBLED_FLAG)
#endif
{
set_hudmessage(0, 50, 200, -1.0, 0.45, 0, 0.1, 2.5, 0.02, 0.02, 2);
if (is_user_alive(target))
{
ShowSyncHudMsg(attacker, g_hSyncObjAttacker, "%i^n", damage);
}
else
{
ShowSyncHudMsg(attacker, g_hSyncObjAttacker, "%i - СМЕРТЕЛЬНЫЙ^n",damage);
}
}
}

if (bIsTargetConnected && g_bDmgEnabled[target])
{
#if defined DAMAGE_FLAG
if (get_user_flags(target) & DAMAGE_FLAG)
#endif
{
set_hudmessage(200, 20, 20, -1.0, 0.55, 0, 0.1, 2.5, 0.02, 0.02, 3);
if (is_user_alive(target))
{
ShowSyncHudMsg(target, g_hSyncObjTarget, "%i^n", damage);
}
else
{
ShowSyncHudMsg(target, g_hSyncObjTarget, "%i - СМЕРТЕЛЬНЫЙ^n",damage);
}
}
}
}

public TakeDamage_Post(const pevVictim, pevInflictor, pevAttacker, Float:flDamage, bitsDamageType)
{
new iDamage = floatround(flDamage);
if (iDamage > 1)
{
print_damage_to_player(pevAttacker,pevVictim,iDamage);
print_damage_to_spectators(pevAttacker,pevVictim,iDamage);
}
}

stock bool:is_user_visibled(const pevAttacker, const pevVictim)
{
static Float:f_vRes[3];
new Float:f_vOrigAttacker[3], Float:f_vOrigVictim[3];
get_entvar(pevAttacker,var_origin,f_vOrigAttacker);
get_entvar(pevVictim,var_origin,f_vOrigVictim);
return trace_line(pevAttacker, f_vOrigAttacker, f_vOrigVictim, f_vRes) == pevVictim;
}


Скриншот
Прикрепленное изображение

Отредактировал: karaulov, - 4.2.2022, 11:23
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя d3m37r4
сообщение 5.2.2022, 4:23
Сообщение #2


Стаж: 11 лет

Сообщений: 304
Благодарностей: 119
Полезность: 604

Если mini, значит не unreal, переделывай.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя karaulov
сообщение 6.2.2022, 5:26
Сообщение #3


Стаж: 15 лет

Сообщений: 1077
Благодарностей: 435
Полезность: 465

Цитата(d3m37r4 @ 5.2.2022, 5:23) *
Если mini, значит не unreal, переделывай.

Я же не написал Unreal Damager, а просто Unreal Mini Damager, а то подумали бы что там есть много функций)



Обновление 1.2 :
* Удалено 3 строки кода
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ssx
сообщение 6.2.2022, 10:10
Сообщение #4


Стаж: 12 лет

Сообщений: 2237
Благодарностей: 1343
Полезность: 836

Сток по проверки виден ли игрок работает как-то через раз. Бывает что полностью видно игрока а не отображает урон.

Переделал (чисто для тестов) под
Код:
if(!ExecuteHam(Ham_FVisible, attacker, victim) )

и намного лучше, практически идеально определяет.

Может в вашем стоке какие-то недоработки или почему так коряво работает?


[Half-Life DM FFA] 78.152.169.100:27016
[CS 1.6 GunGame] 78.152.169.100:27018
[CS 1.6 DM AIM] 78.152.169.100:27017
[CS 1.6 DM FFA] 78.152.169.100:27015
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя karaulov
сообщение 6.2.2022, 10:49
Сообщение #5


Стаж: 15 лет

Сообщений: 1077
Благодарностей: 435
Полезность: 465

ssx, да вроде как должен работать, хотя я не проверял :)

попробую этот вариант выглядит проще, вечером проверю

Отредактировал: karaulov, - 6.2.2022, 10:50
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: