From 1976967dbbc820fb2a5cf8c34c05d5b9c4b479ef Mon Sep 17 00:00:00 2001 From: z411 Date: Thu, 3 Sep 2020 16:20:20 -0400 Subject: [PATCH] Implemented attackertext --- qcsrc/client/hud/panel/infomessages.qc | 11 ++-- qcsrc/common/mutators/mutator/_mod.inc | 1 + qcsrc/common/mutators/mutator/_mod.qh | 1 + .../mutators/mutator/attackertext/_mod.inc | 8 +++ .../mutators/mutator/attackertext/_mod.qh | 11 ++++ .../mutator/attackertext/attackertext.qc | 3 + .../mutator/attackertext/attackertext.qh | 4 ++ .../mutator/attackertext/cl_attackertext.qc | 61 +++++++++++++++++++ .../mutator/attackertext/cl_attackertext.qh | 4 ++ .../mutator/attackertext/sv_attackertext.qc | 25 ++++++++ .../mutator/attackertext/sv_attackertext.qh | 1 + 11 files changed, 126 insertions(+), 4 deletions(-) create mode 100644 qcsrc/common/mutators/mutator/attackertext/_mod.inc create mode 100644 qcsrc/common/mutators/mutator/attackertext/_mod.qh create mode 100644 qcsrc/common/mutators/mutator/attackertext/attackertext.qc create mode 100644 qcsrc/common/mutators/mutator/attackertext/attackertext.qh create mode 100644 qcsrc/common/mutators/mutator/attackertext/cl_attackertext.qc create mode 100644 qcsrc/common/mutators/mutator/attackertext/cl_attackertext.qh create mode 100644 qcsrc/common/mutators/mutator/attackertext/sv_attackertext.qc create mode 100644 qcsrc/common/mutators/mutator/attackertext/sv_attackertext.qh diff --git a/qcsrc/client/hud/panel/infomessages.qc b/qcsrc/client/hud/panel/infomessages.qc index 03465cce5..a5322f93b 100644 --- a/qcsrc/client/hud/panel/infomessages.qc +++ b/qcsrc/client/hud/panel/infomessages.qc @@ -122,15 +122,15 @@ void HUD_InfoMessages() InfoMessage(s); } - bool mutator_returnvalue = MUTATOR_CALLHOOK(DrawInfoMessages, pos, mySize, img_curr_group); + //bool mutator_returnvalue = MUTATOR_CALLHOOK(DrawInfoMessages, pos, mySize, img_curr_group); pos = M_ARGV(0, vector); img_curr_group = M_ARGV(2, int); - if(!mutator_returnvalue) - { + //if(!mutator_returnvalue) + //{ s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey(_("jump"), "+jump")); InfoMessage(s); - } + //} } if (time < STAT(GAMESTARTTIME)) @@ -220,6 +220,9 @@ void HUD_InfoMessages() InfoMessage(s); } } + + // z411 + MUTATOR_CALLHOOK(DrawInfoMessages, pos, mySize, img_curr_group); } else { diff --git a/qcsrc/common/mutators/mutator/_mod.inc b/qcsrc/common/mutators/mutator/_mod.inc index 40a763c8e..1479a1dfa 100644 --- a/qcsrc/common/mutators/mutator/_mod.inc +++ b/qcsrc/common/mutators/mutator/_mod.inc @@ -1,5 +1,6 @@ // generated file; do not modify +#include #include #include #include diff --git a/qcsrc/common/mutators/mutator/_mod.qh b/qcsrc/common/mutators/mutator/_mod.qh index 6a9261dd4..465495828 100644 --- a/qcsrc/common/mutators/mutator/_mod.qh +++ b/qcsrc/common/mutators/mutator/_mod.qh @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include diff --git a/qcsrc/common/mutators/mutator/attackertext/_mod.inc b/qcsrc/common/mutators/mutator/attackertext/_mod.inc new file mode 100644 index 000000000..52b56df94 --- /dev/null +++ b/qcsrc/common/mutators/mutator/attackertext/_mod.inc @@ -0,0 +1,8 @@ +// generated file; do not modify +#include +#ifdef CSQC + #include +#endif +#ifdef SVQC + #include +#endif diff --git a/qcsrc/common/mutators/mutator/attackertext/_mod.qh b/qcsrc/common/mutators/mutator/attackertext/_mod.qh new file mode 100644 index 000000000..e712e37c9 --- /dev/null +++ b/qcsrc/common/mutators/mutator/attackertext/_mod.qh @@ -0,0 +1,11 @@ +// generated file; do not modify +#include +#ifdef CSQC + #include +#endif +#ifdef SVQC + #include +#endif +#ifdef MENUQC + #include +#endif diff --git a/qcsrc/common/mutators/mutator/attackertext/attackertext.qc b/qcsrc/common/mutators/mutator/attackertext/attackertext.qc new file mode 100644 index 000000000..dafd533c7 --- /dev/null +++ b/qcsrc/common/mutators/mutator/attackertext/attackertext.qc @@ -0,0 +1,3 @@ +#include "attackertext.qh" + +REGISTER_NET_TEMP(attackertext) diff --git a/qcsrc/common/mutators/mutator/attackertext/attackertext.qh b/qcsrc/common/mutators/mutator/attackertext/attackertext.qh new file mode 100644 index 000000000..96d63a7af --- /dev/null +++ b/qcsrc/common/mutators/mutator/attackertext/attackertext.qh @@ -0,0 +1,4 @@ +#pragma once + +const int ATFLAG_SAMETEAM = BIT(0); + diff --git a/qcsrc/common/mutators/mutator/attackertext/cl_attackertext.qc b/qcsrc/common/mutators/mutator/attackertext/cl_attackertext.qc new file mode 100644 index 000000000..2e5dee78f --- /dev/null +++ b/qcsrc/common/mutators/mutator/attackertext/cl_attackertext.qc @@ -0,0 +1,61 @@ +#include "cl_attackertext.qh" + +AUTOCVAR_SAVE(cl_attackertext, bool, true, "Draw damage dealt where you hit the enemy"); +AUTOCVAR_SAVE(cl_attackertext_friendlyfire, bool, false, "Show for friendlyfire"); +AUTOCVAR_SAVE(cl_attackertext_time, float, 3, "Time to show"); +AUTOCVAR_SAVE(cl_attackertext_fadetime, float, 2, "Time to fade"); +AUTOCVAR_SAVE(cl_attackertext_decolorize, int, 1, "1 = decolorize names when teamplay, 2 = decolorize always"); + +REGISTER_MUTATOR(attackertext, true); + +MUTATOR_HOOKFUNCTION(attackertext, DrawInfoMessages) +{ + if (autocvar_cl_attackertext == 0) return false; + + float fade_start = max(0, autocvar_cl_attackertext_time); + float fade_time = max(0, autocvar_cl_attackertext_fadetime); + + if (last_attack_time && last_attack_time > time - fade_start - fade_time) { + vector pos = M_ARGV(0, vector); + vector mySize = M_ARGV(1, vector); + vector fontsize = '0.2 0.2 0' * mySize.y; + int img_curr_group = M_ARGV(2, int); + + float alpha_ = 0; + + if (last_attack_time + fade_start > time) + alpha_ = panel_fg_alpha; + else if (fade_time != 0) + alpha_ = panel_fg_alpha - bound(0, (time - last_attack_time - fade_start) * (1 / fade_time), 1); + else + return true; + + pos = InfoMessages_drawstring(last_attack_name, pos, mySize, alpha_, fontsize); + img_curr_group = -1; + + return true; + } + + return false; +} + + +NET_HANDLE(attackertext, bool isNew) +{ + int server_entity_index = ReadByte(); + int flags = ReadByte(); + bool friendlyfire = flags & ATFLAG_SAMETEAM; + + return = true; + + if (autocvar_cl_attackertext == 0) return; + if (friendlyfire && autocvar_cl_attackertext_friendlyfire == 0) return; + + string s = entcs_GetName(server_entity_index - 1); + if ((autocvar_cl_attackertext_decolorize == 1 && teamplay) || autocvar_cl_attackertext_decolorize == 2) + s = playername(s, entcs_GetTeam(server_entity_index - 1)); + + last_attack_time = time; + strfree(last_attack_name); + strcpy(last_attack_name, s); +} diff --git a/qcsrc/common/mutators/mutator/attackertext/cl_attackertext.qh b/qcsrc/common/mutators/mutator/attackertext/cl_attackertext.qh new file mode 100644 index 000000000..c2c6d6e47 --- /dev/null +++ b/qcsrc/common/mutators/mutator/attackertext/cl_attackertext.qh @@ -0,0 +1,4 @@ +#pragma once + +float last_attack_time; +string last_attack_name; \ No newline at end of file diff --git a/qcsrc/common/mutators/mutator/attackertext/sv_attackertext.qc b/qcsrc/common/mutators/mutator/attackertext/sv_attackertext.qc new file mode 100644 index 000000000..59b0865d6 --- /dev/null +++ b/qcsrc/common/mutators/mutator/attackertext/sv_attackertext.qc @@ -0,0 +1,25 @@ +#include "sv_attackertext.qh" + +AUTOCVAR(sv_attackertext, int, 1, "0: disabled, 1: visible"); + +REGISTER_MUTATOR(attackertext, true); + +#define SV_ATTACKERTEXT_DISABLED() (autocvar_sv_attackertext <= 0) +#define SV_ATTACKERTEXT_ENABLED() (autocvar_sv_attackertext >= 1) + +MUTATOR_HOOKFUNCTION(attackertext, PlayerDamaged) { + if (SV_ATTACKERTEXT_DISABLED()) return; + + entity attacker = M_ARGV(0, entity); + entity hit = M_ARGV(1, entity); if (hit == attacker) return; + + if (!IS_REAL_CLIENT(hit) || !IS_PLAYER(attacker)) return; + + int flags = 0; + if (SAME_TEAM(hit, attacker)) flags |= ATFLAG_SAMETEAM; + + msg_entity = hit; + WriteHeader(MSG_ONE, attackertext); + WriteByte(MSG_ONE, etof(attacker)); + WriteByte(MSG_ONE, flags); +} diff --git a/qcsrc/common/mutators/mutator/attackertext/sv_attackertext.qh b/qcsrc/common/mutators/mutator/attackertext/sv_attackertext.qh new file mode 100644 index 000000000..6f70f09be --- /dev/null +++ b/qcsrc/common/mutators/mutator/attackertext/sv_attackertext.qh @@ -0,0 +1 @@ +#pragma once -- 2.39.2