From 3213c9a5ce8ecd38910bda2854f6348a45762379 Mon Sep 17 00:00:00 2001 From: ineed bots Date: Sun, 22 Sep 2024 18:02:05 -0600 Subject: [PATCH] just commit this --- scripts/mp/drawdmg.gsc | 236 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) create mode 100644 scripts/mp/drawdmg.gsc diff --git a/scripts/mp/drawdmg.gsc b/scripts/mp/drawdmg.gsc new file mode 100644 index 0000000..cdc8b00 --- /dev/null +++ b/scripts/mp/drawdmg.gsc @@ -0,0 +1,236 @@ +#include common_scripts\utility; +#include maps\mp\_utility; +#include maps\mp\gametypes\_hud_util; + +main() +{ + replacefunc( maps\mp\gametypes\_globallogic_player::finishplayerdamagewrapper, ::finishplayerdamagewrapper ); +} + +init() +{ + set_dvar_if_unset( "scr_killstreak_print", 0 ); + set_dvar_if_unset( "scr_printDamage", false ); + set_dvar_if_unset( "scr_showHP", false ); + + level.showHP = getDvarInt( "scr_showHP" ); + level.killstreakPrint = getDvarInt( "scr_killstreak_print" ); + level.allowPrintDamage = getDvarInt( "scr_printDamage" ); + + level thread onPlayerConnect(); +} + +onPlayerConnect() +{ + for ( ;; ) + { + level waittill( "connected", player ); + + player thread onPlayerSpawned(); + } +} + +onPlayerSpawned() +{ + self endon( "disconnect" ); + + self.printDamage = true; + + for ( ;; ) + { + self waittill( "spawned_player" ); + + if ( level.killstreakPrint ) + { + self thread watchNotifyKSMessage(); + } + + if ( level.showHP ) + { + self thread drawHP(); + } + } +} + +watchNotifyKSMessage() +{ + self endon( "disconnect" ); + self endon( "death" ); + + for ( lastKs = self.pers["cur_kill_streak"];; ) + { + wait 0.05; + + for ( curStreak = lastKs + 1; curStreak <= self.pers["cur_kill_streak"]; curStreak++ ) + { + //if (curStreak == 5) + // continue; + + if ( curStreak % 5 != 0 ) + { + continue; + } + + self thread streakNotify( curStreak ); + } + + lastKs = self.pers["cur_kill_streak"]; + } +} + +streakNotify( streakVal ) +{ + self endon( "disconnect" ); + + notifyData = spawnStruct(); + + if ( level.killstreakPrint > 1 ) + { + xpReward = streakVal * 100; + + self thread maps\mp\gametypes\_rank::giveRankXP( "killstreak_bonus", xpReward ); + + notifyData.notifyText = "+" + xpReward; + } + + wait .05; + + notifyData.titleLabel = &"MP_KILLSTREAK_N"; + notifyData.titleText = streakVal; + + self maps\mp\gametypes\_hud_message::notifyMessage( notifyData ); + + iprintln( &"RANK_KILL_STREAK_N", self, streakVal ); +} + +doPrintDamage( dmg, hitloc, flags ) +{ + self endon( "disconnect" ); + + huddamage = newclienthudelem( self ); + huddamage.alignx = "center"; + huddamage.horzalign = "center"; + huddamage.x = 10; + huddamage.y = 235; + huddamage.fontscale = 1.6; + huddamage.font = "objective"; + huddamage setvalue( dmg ); + + if ( ( flags & level.iDFLAGS_RADIUS ) != 0 ) + { + huddamage.color = ( 0.25, 0.25, 0.25 ); + } + + if ( ( flags & level.iDFLAGS_PENETRATION ) != 0 ) + { + huddamage.color = ( 1, 1, 0.25 ); + } + + if ( hitloc == "head" ) + { + huddamage.color = ( 1, 0.25, 0.25 ); + } + + huddamage moveovertime( 1 ); + huddamage fadeovertime( 1 ); + huddamage.alpha = 0; + huddamage.x = randomIntRange( 25, 70 ); + + val = 1; + + if ( randomInt( 2 ) ) + { + val = -1; + } + + huddamage.y = 235 + randomIntRange( 25, 70 ) * val; + + wait 1; + + if ( isDefined( huddamage ) ) + { + huddamage destroy(); + } +} + +finishplayerdamagewrapper( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ) +{ + pixbeginevent( "finishPlayerDamageWrapper" ); + + if ( isDefined( level.allowPrintDamage ) && level.allowPrintDamage ) + { + if ( !isDefined( eattacker ) ) + { + if ( !isDefined( einflictor ) && isDefined( self.printDamage ) && self.printDamage ) + { + self thread doPrintDamage( idamage, shitloc, idflags ); + } + } + else if ( isPlayer( eattacker ) && isDefined( eattacker.printDamage ) && eattacker.printDamage ) + { + eattacker thread doPrintDamage( idamage, shitloc, idflags ); + } + else if ( isDefined( eattacker.owner ) && isPlayer( eattacker.owner ) && isDefined( eattacker.owner.printDamage ) && eattacker.owner.printDamage ) + { + eattacker.owner thread doPrintDamage( idamage, shitloc, idflags ); + } + } + + if ( !level.console && idflags & level.idflags_penetration && isplayer( eattacker ) ) + { +/# + println( "penetrated:" + self getentitynumber() + " health:" + self.health + " attacker:" + eattacker.clientid + " inflictor is player:" + isplayer( einflictor ) + " damage:" + idamage + " hitLoc:" + shitloc ); +#/ + eattacker addplayerstat( "penetration_shots", 1 ); + } + + self finishplayerdamage( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime, boneindex ); + + if ( getdvar( #"scr_csmode" ) != "" ) + { + self shellshock( "damage_mp", 0.2 ); + } + + self damageshellshockandrumble( eattacker, einflictor, sweapon, smeansofdeath, idamage ); + pixendevent(); +} + +initHPdraw() +{ + self endon( "disconnect" ); + + self.drawHP = self createFontString( "default", 1.2 ); + self.drawHP setPoint( "BOTTOM RIGHT", "BOTTOM RIGHT", -150, -20 ); + + self.drawSpeed = self createFontString( "default", 1.2 ); + self.drawSpeed setPoint( "BOTTOM RIGHT", "BOTTOM RIGHT", -150, -10 ); + + self waittill( "death" ); + + if ( isDefined( self.drawHP ) ) + { + self.drawHP destroy(); + } + + if ( isDefined( self.drawSpeed ) ) + { + self.drawSpeed destroy(); + } +} + +drawHP() +{ + self endon( "disconnect" ); + self endon( "death" ); + self thread initHPdraw(); + + for ( ;; ) + { + //self.drawHP setText("HP: "+self.health+" KS: "+self.pers["cur_kill_streak"]); + self.drawHP setValue( self.health ); + + vel = self getVelocity(); + self.drawSpeed setValue( int( length( ( vel[0], vel[1], 0 ) ) ) ); + wait 0.05; + } +}