From 83a2e644ea88753677ea441cc462d02dd165691e Mon Sep 17 00:00:00 2001 From: JezuzLizard Date: Tue, 19 May 2020 09:42:09 -0700 Subject: [PATCH] checked 3 scripts 1 of which was a dual script _copter, and _wager for patch_mp have been checked. _weapons for patch_mp and patch_zm have been checked. --- patch_mp/maps/mp/gametypes/_copter.gsc | 336 ++++--- patch_mp/maps/mp/gametypes/_wager.gsc | 310 +++---- patch_mp/maps/mp/gametypes/_weapons.gsc | 869 +++++++++--------- patch_mp/readme.md | 8 +- patch_zm/maps/mp/gametypes_zm/_weapons.gsc | 983 ++++++++++----------- patch_zm/readme.md | 2 +- 6 files changed, 1161 insertions(+), 1347 deletions(-) diff --git a/patch_mp/maps/mp/gametypes/_copter.gsc b/patch_mp/maps/mp/gametypes/_copter.gsc index dd916ef..3ae8390 100644 --- a/patch_mp/maps/mp/gametypes/_copter.gsc +++ b/patch_mp/maps/mp/gametypes/_copter.gsc @@ -1,5 +1,6 @@ +//checked no includes -init() +init() //checked changed to match cerberus output { level.coptermodel = "vehicle_cobra_helicopter_fly"; precachemodel( level.coptermodel ); @@ -7,55 +8,48 @@ init() level.copter_maxvel = 700; level.copter_rotspeed = 90; level.copter_accellookahead = 2; - level.coptercenteroffset = vectorScale( ( 0, 0, -1 ), 72 ); - level.coptertargetoffset = vectorScale( ( 0, 0, -1 ), 45 ); + level.coptercenteroffset = vectorScale( ( 0, 0, 1 ), 72 ); + level.coptertargetoffset = vectorScale( ( 0, 0, 1 ), 45 ); level.copterexplosion = loadfx( "explosions/fx_default_explosion" ); level.copterfinalexplosion = loadfx( "explosions/fx_large_vehicle_explosion" ); } -getabovebuildingslocation( location ) +getabovebuildingslocation( location ) //checked changed to match cerberus output { - trace = bullettrace( location + vectorScale( ( 0, 0, -1 ), 10000 ), location, 0, undefined ); + trace = bullettrace( location + vectorScale( ( 0, 0, 1 ), 10000 ), location, 0, undefined ); startorigin = trace[ "position" ] + vectorScale( ( 0, 0, -1 ), 514 ); zpos = 0; maxxpos = 13; maxypos = 13; - xpos = 0; - while ( xpos < maxxpos ) + for ( xpos = 0; xpos < maxxpos; xpos++ ) { - ypos = 0; - while ( ypos < maxypos ) + for ( ypos = 0; ypos < maxypos; ypos++ ) { - thisstartorigin = startorigin + ( ( ( xpos / ( maxxpos - 1 ) ) - 0,5 ) * 1024, ( ( ypos / ( maxypos - 1 ) ) - 0,5 ) * 1024, 0 ); + thisstartorigin = startorigin + ( ( ( xpos / ( maxxpos - 1 ) ) - 0.5 ) * 1024, ( ( ypos / ( maxypos - 1 ) ) - 0.5 ) * 1024, 0 ); thisorigin = bullettrace( thisstartorigin, thisstartorigin + vectorScale( ( 0, 0, -1 ), 10000 ), 0, undefined ); zpos += thisorigin[ "position" ][ 2 ]; - ypos++; } - xpos++; } zpos /= maxxpos * maxypos; zpos += 850; return ( location[ 0 ], location[ 1 ], zpos ); } -vectorangle( v1, v2 ) +vectorangle( v1, v2 ) //checked changed to match cerberus output { dot = vectordot( v1, v2 ); if ( dot >= 1 ) { return 0; } - else + else if ( dot <= -1 ) { - if ( dot <= -1 ) - { - return 180; - } + return 180; } return acos( dot ); } -vectortowardsothervector( v1, v2, angle ) +vectortowardsothervector( v1, v2, angle ) //checked matches cerberus output { dot = vectordot( v1, v2 ); if ( dot <= -1 ) @@ -66,18 +60,18 @@ vectortowardsothervector( v1, v2, angle ) return vectorScale( v1, cos( angle ) ) + vectorScale( v3, sin( angle ) ); } -veclength( v ) +veclength( v ) //checked changed to match cerberus output { - return distance( ( 0, 0, -1 ), v ); + return distance( ( 0, 0, 0 ), v ); } -createcopter( location, team, damagetrig ) +createcopter( location, team, damagetrig ) //checked changed to match cerberus output dvars taken from the beta dump { location = getabovebuildingslocation( location ); scriptorigin = spawn( "script_origin", location ); - scriptorigin.angles = vectorToAngle( ( 0, 0, -1 ) ); + scriptorigin.angles = vectorToAngle( ( 1, 0, 0 ) ); copter = spawn( "script_model", location ); - copter.angles = vectorToAngle( ( 0, 0, -1 ) ); + copter.angles = vectorToAngle( ( 1, 0, 0 ) ); copter linkto( scriptorigin ); scriptorigin.copter = copter; copter setmodel( level.coptermodel ); @@ -87,15 +81,15 @@ createcopter( location, team, damagetrig ) scriptorigin.damagetrig = damagetrig; scriptorigin.finaldest = location; scriptorigin.finalzdest = location[ 2 ]; - scriptorigin.desireddir = ( 0, 0, -1 ); + scriptorigin.desireddir = ( 1, 0, 0 ); scriptorigin.desireddirentity = undefined; - scriptorigin.desireddirentityoffset = ( 0, 0, -1 ); - scriptorigin.vel = ( 0, 0, -1 ); + scriptorigin.desireddirentityoffset = ( 0, 0, 0 ); + scriptorigin.vel = ( 0, 0, 0 ); scriptorigin.dontascend = 0; scriptorigin.health = 2000; - if ( getDvar( #"A8262D2E" ) != "" ) + if ( getDvar( "scr_copter_health" ) != "" ) { - scriptorigin.health = getDvarFloat( #"A8262D2E" ); + scriptorigin.health = getDvarFloat( "scr_copter_health" ); } scriptorigin.team = team; scriptorigin thread copterai(); @@ -103,7 +97,7 @@ createcopter( location, team, damagetrig ) return scriptorigin; } -makecopterpassive() +makecopterpassive() //checked matches cerberus output { self.damagetrig notify( "unlink" ); self.damagetrig = undefined; @@ -112,7 +106,7 @@ makecopterpassive() self.desireddir = undefined; } -makecopteractive( damagetrig ) +makecopteractive( damagetrig ) //checked matches cerberus output { damagetrig.origin = self.origin; damagetrig thread mylinkto( self ); @@ -121,18 +115,18 @@ makecopteractive( damagetrig ) self thread copterdamage( damagetrig ); } -mylinkto( obj ) +mylinkto( obj ) //checked matches cerberus output { self endon( "unlink" ); while ( 1 ) { self.angles = obj.angles; self.origin = obj.origin; - wait 0,1; + wait 0.1; } } -setcopterdefensearea( areaent ) +setcopterdefensearea( areaent ) //checked changed to match cerberus output { self.areaent = areaent; self.areadescentpoints = []; @@ -140,15 +134,13 @@ setcopterdefensearea( areaent ) { self.areadescentpoints = getentarray( areaent.target, "targetname" ); } - i = 0; - while ( i < self.areadescentpoints.size ) + for ( i = 0; i < self.areadescentpoints.size; i++ ) { self.areadescentpoints[ i ].targetent = getent( self.areadescentpoints[ i ].target, "targetname" ); - i++; } } -copterai() +copterai() //checked changed to match cerberus output and partially the beta dump { self thread coptermove(); self thread coptershoot(); @@ -160,16 +152,16 @@ copterai() returningtoarea = 0; while ( 1 ) { - while ( !isDefined( self.areaent ) ) + if ( !isDefined( self.areaent ) ) { wait 1; + continue; } players = level.players; enemytargets = []; - while ( self.team != "neutral" ) + if ( self.team != "neutral" ) { - i = 0; - while ( i < players.size ) + for ( i = 0; i < players.size; i++ ) { if ( isalive( players[ i ] ) && isDefined( players[ i ].pers[ "team" ] ) && players[ i ].pers[ "team" ] != self.team && !isDefined( players[ i ].usingobj ) ) { @@ -180,30 +172,25 @@ copterai() enemytargets[ enemytargets.size ] = players[ i ]; } } - i++; } } insidetargets = []; outsidetargets = []; - skyheight = bullettrace( self.origin, self.origin + vectorScale( ( 0, 0, -1 ), 10000 ), 0, undefined )[ "position" ][ 2 ] - 10; + skyheight = bullettrace( self.origin, self.origin + vectorScale( ( 0, 0, 1 ), 10000 ), 0, undefined )[ "position" ][ 2 ] - 10; besttarget = undefined; bestweight = 0; - i = 0; - while ( i < enemytargets.size ) + for ( i = 0; i < enemytargets.size; i++ ) { inside = 0; - trace = bullettrace( enemytargets[ i ].origin + vectorScale( ( 0, 0, -1 ), 10 ), enemytargets[ i ].origin + vectorScale( ( 0, 0, -1 ), 10000 ), 0, undefined ); + trace = bullettrace( enemytargets[ i ].origin + vectorScale( ( 0, 0, 1 ), 10 ), enemytargets[ i ].origin + vectorScale( ( 0, 0, 1 ), 10000 ), 0, undefined ); if ( trace[ "position" ][ 2 ] >= skyheight ) { outsidetargets[ outsidetargets.size ] = enemytargets[ i ]; - i++; - continue; } else { insidetargets[ insidetargets.size ] = enemytargets[ i ]; } - i++; } gotopos = undefined; calcedgotopos = 0; @@ -218,7 +205,6 @@ copterai() if ( isDefined( descendingent ) ) { gotopos = result[ "position" ]; - break; } else { @@ -226,19 +212,18 @@ copterai() } } } - else olddescendingent = descendingent; - if ( insidetargets.size == 0 ) + else { - flying = 1; - } - else - { - if ( outsidetargets.size > 0 ) + olddescendingent = descendingent; + if ( insidetargets.size == 0 ) + { + flying = 1; + } + else if ( outsidetargets.size > 0 ) { if ( !isDefined( descendingent ) ) { flying = 1; - break; } else { @@ -265,7 +250,6 @@ copterai() descendingent = result[ "descendEnt" ]; gotopos = result[ "position" ]; reacheddescendingent = 0; - break; } else if ( isDefined( descendingent ) ) { @@ -277,7 +261,6 @@ copterai() { gotopos = descendingent.origin; } - break; } else { @@ -293,20 +276,20 @@ copterai() { desireddist = 2560; disttoarea = distance( ( self.origin[ 0 ], self.origin[ 1 ], self.areaent.origin[ 2 ] ), self.areaent.origin ); - if ( outsidetargets.size == 0 && disttoarea > ( self.areaent.radius + ( desireddist * 0,25 ) ) ) + if ( outsidetargets.size == 0 && disttoarea > ( self.areaent.radius + ( desireddist * 0.25 ) ) ) { returningtoarea = 1; } else { - if ( disttoarea < ( self.areaent.radius * 0,5 ) ) + if ( disttoarea < ( self.areaent.radius * 0.5 ) ) { returningtoarea = 0; } } - while ( outsidetargets.size == 0 && !returningtoarea ) + if ( outsidetargets.size == 0 && !returningtoarea ) { - while ( self.team != "neutral" ) + if ( self.team != "neutral" ) { i = 0; while ( i < players.size ) @@ -326,8 +309,7 @@ copterai() } best = undefined; bestdist = 0; - i = 0; - while ( i < outsidetargets.size ) + for ( i = 0; i < outsidetargets.size; i++ ) { dist = abs( distance( outsidetargets[ i ].origin, self.origin ) - desireddist ); if ( !isDefined( best ) || dist < bestdist ) @@ -335,7 +317,6 @@ copterai() best = outsidetargets[ i ]; bestdist = dist; } - i++; } if ( isDefined( best ) ) { @@ -357,42 +338,51 @@ copterai() } continue; } - else if ( distance( self.origin, descendingent.origin ) < descendingent.radius ) + else { - reacheddescendingent = 1; - } - if ( isDefined( olddescendingent ) ) - { - godirectly = olddescendingent == descendingent; - } - if ( godirectly ) - { - godirectly = reacheddescendingent; - } - self.desireddir = vectornormalize( descendingent.targetent.origin - gotopos - level.coptercenteroffset ); - self.desireddirentity = descendingent.targetent; - self.desireddirentityoffset = ( 0, 0, -1 ); - if ( gotopos != self.origin ) - { - self setcopterdest( gotopos - level.coptercenteroffset, 1, godirectly ); - wait 0,3; - continue; - } - else - { - wait 0,3; + if ( distance( self.origin, descendingent.origin ) < descendingent.radius ) + { + reacheddescendingent = 1; + } + if ( isdefined( oldDescendingEnt ) && oldDescendingEnt == descendingEnt ) + { + goDirectly = 1; + } + else + { + goDirectly = 0; + } + if ( goDirectly && reachedDescendingEnt ) + { + goDirectly = 1; + } + else + { + goDirectly = 0; + } + self.desireddir = vectornormalize( descendingent.targetent.origin - gotopos - level.coptercenteroffset ); + self.desireddirentity = descendingent.targetent; + self.desireddirentityoffset = ( 0, 0, 0 ); + if ( gotopos != self.origin ) + { + self setcopterdest( gotopos - level.coptercenteroffset, 1, godirectly ); + wait 0.3; + } + else + { + wait 0.3; + } } } } -determinebestpos( targets, descendent, startorigin ) +determinebestpos( targets, descendent, startorigin ) //checked changed to match cerberus output { targetpos = descendent.targetent.origin; circleradius = distance( targetpos, descendent.origin ); bestpoint = undefined; bestdist = 0; - i = 0; - while ( i < targets.size ) + for ( i = 0; i < targets.size; i++ ) { enemypos = targets[ i ].origin + level.coptertargetoffset; passed = bullettracepassed( enemypos, targetpos, 0, undefined ); @@ -413,19 +403,17 @@ determinebestpos( targets, descendent, startorigin ) } } } - i++; } return bestpoint; } -determinebestent( targets, descendents, startorigin ) +determinebestent( targets, descendents, startorigin ) //checked changed to match cerberus output { result = []; bestpos = undefined; bestent = 0; bestdist = 0; - i = 0; - while ( i < descendents.size ) + for ( i = 0; i < descendents.size; i++ ) { thispos = determinebestpos( targets, descendents[ i ], startorigin ); if ( isDefined( thispos ) ) @@ -438,7 +426,6 @@ determinebestent( targets, descendents, startorigin ) bestdist = thisdist; } } - i++; } if ( isDefined( bestpos ) ) { @@ -449,7 +436,7 @@ determinebestent( targets, descendents, startorigin ) return result; } -determinebestattackpos( targetpos, curpos, desireddist ) +determinebestattackpos( targetpos, curpos, desireddist ) //checked changed to match cerberus output { targetposcopterheight = ( targetpos[ 0 ], targetpos[ 1 ], curpos[ 2 ] ); attackdirx = curpos - targetposcopterheight; @@ -457,8 +444,7 @@ determinebestattackpos( targetpos, curpos, desireddist ) attackdiry = ( 0 - attackdirx[ 1 ], attackdirx[ 0 ], 0 ); bestpos = undefined; bestdist = 0; - i = 0; - while ( i < 8 ) + for ( i = 0; i < 8; i++ ) { theta = ( i / 8 ) * 360; thisdir = vectorScale( attackdirx, cos( theta ) ) + vectorScale( attackdiry, sin( theta ) ); @@ -473,26 +459,28 @@ determinebestattackpos( targetpos, curpos, desireddist ) bestdist = thisdist; } } - i++; } gotopos = undefined; if ( isDefined( bestpos ) ) { gotopos = bestpos; } - else dist = distance( targetposcopterheight, curpos ); - if ( dist > desireddist ) - { - gotopos = self.origin + vectorScale( vectornormalize( attackdirx ), 0 - dist - desireddist ); - } else { - gotopos = self.origin; + dist = distance( targetposcopterheight, curpos ); + if ( dist > desireddist ) + { + gotopos = self.origin + vectorScale( vectornormalize( attackdirx ), 0 - dist - desireddist ); + } + else + { + gotopos = self.origin; + } } return gotopos; } -getrandompos( origin, radius ) +getrandompos( origin, radius ) //checked does not match cerberus output does match beta dump leaving as is { pos = origin + ( ( randomfloat( 2 ) - 1 ) * radius, ( randomfloat( 2 ) - 1 ) * radius, 0 ); while ( distancesquared( pos, origin ) > ( radius * radius ) ) @@ -502,7 +490,7 @@ getrandompos( origin, radius ) return pos; } -coptershoot() +coptershoot() //checked changed to match cerberus output { self endon( "death" ); self endon( "passive" ); @@ -527,31 +515,29 @@ coptershoot() { self playsound( "mp_copter_shoot" ); numshots = 20; - i = 0; - while ( i < numshots ) + for ( i = 0; i < numshots; i++ ) { mypos = self.origin + level.coptercenteroffset; dir = anglesToForward( self.angles ); - dir += ( ( randomfloat( 2 ) - 1 ) * 0,015, ( randomfloat( 2 ) - 1 ) * 0,015, ( randomfloat( 2 ) - 1 ) * 0,015 ); + dir += ( ( randomfloat( 2 ) - 1 ) * 0.015, ( randomfloat( 2 ) - 1 ) * 0.015, ( randomfloat( 2 ) - 1 ) * 0.015 ); dir = vectornormalize( dir ); self mymagicbullet( mypos, dir ); - wait 0,075; - i++; + wait 0.075; } - wait 0,25; + wait 0.25; } } } - wait 0,25; + wait 0.25; } } -mymagicbullet( pos, dir ) +mymagicbullet( pos, dir ) //checked matches cerberus output dvars found in beta dump { damage = 20; - if ( getDvar( #"9E8F8CB7" ) != "" ) + if ( getDvar( "scr_copter_damage" ) != "" ) { - damage = getDvarInt( #"9E8F8CB7" ); + damage = getDvarInt( "scr_copter_damage" ); } trace = bullettrace( pos, pos + vectorScale( dir, 10000 ), 1, undefined ); if ( isDefined( trace[ "entity" ] ) && isplayer( trace[ "entity" ] ) && isalive( trace[ "entity" ] ) ) @@ -560,7 +546,7 @@ mymagicbullet( pos, dir ) } } -setcopterdest( newlocation, descend, dontascend ) +setcopterdest( newlocation, descend, dontascend ) //checked matches cerberus output { self.finaldest = getabovebuildingslocation( newlocation ); if ( isDefined( descend ) && descend ) @@ -579,13 +565,13 @@ setcopterdest( newlocation, descend, dontascend ) } } -notifyarrived() +notifyarrived() //checked matches cerberus output { - wait 0,05; + wait 0.05; self notify( "arrived" ); } -coptermove() +coptermove() //checked changed to match cerberus output { self endon( "death" ); if ( isDefined( self.coptermoverunning ) ) @@ -594,8 +580,8 @@ coptermove() } self.coptermoverunning = 1; self.intransit = 0; - interval = 0,15; - zinterp = 0,1; + interval = 0.15; + zinterp = 0.1; tiltamnt = 0; while ( 1 ) { @@ -633,9 +619,11 @@ coptermove() } else { + /* /# assert( movingvertically ); #/ + */ thisdest = ( self.origin[ 0 ], self.origin[ 1 ], desiredz ); } movevec = thisdest - self.origin; @@ -652,43 +640,40 @@ coptermove() self.vel = vectorScale( self.vel, level.copter_maxvel / vlen ); } thisdest = self.origin + vectorScale( self.vel, interval ); - self moveto( thisdest, interval * 0,999 ); + self moveto( thisdest, interval * 0.999 ); speed = veclength( self.vel ); if ( isDefined( self.desireddirentity ) && isDefined( self.desireddirentity.origin ) ) { self.destdir = vectornormalize( ( self.desireddirentity.origin + self.desireddirentityoffset ) - ( self.origin + level.coptercenteroffset ) ); } + else if ( isDefined( self.desireddir ) ) + { + self.destdir = self.desireddir; + break; + } + else if ( movingvertically ) + { + self.destdir = anglesToForward( self.angles ); + self.destdir = vectornormalize( ( self.destdir[ 0 ], self.destdir[ 1 ], 0 ) ); + break; + } else { - if ( isDefined( self.desireddir ) ) + tiltamnt = speed / level.copter_maxvel; + tiltamnt = ( tiltamnt - 0.1 ) / 0.9; + if ( tiltamnt < 0 ) { - self.destdir = self.desireddir; - break; - } - else if ( movingvertically ) - { - self.destdir = anglesToForward( self.angles ); - self.destdir = vectornormalize( ( self.destdir[ 0 ], self.destdir[ 1 ], 0 ) ); - break; - } - else - { - tiltamnt = speed / level.copter_maxvel; - tiltamnt = ( tiltamnt - 0,1 ) / 0,9; - if ( tiltamnt < 0 ) - { - tiltamnt = 0; - } - self.destdir = movevec; - self.destdir = vectornormalize( ( self.destdir[ 0 ], self.destdir[ 1 ], 0 ) ); - tiltamnt *= 1 - ( vectorangle( anglesToForward( self.angles ), self.destdir ) / 180 ); - self.destdir = vectornormalize( ( self.destdir[ 0 ], self.destdir[ 1 ], tiltamnt * -0,4 ) ); + tiltamnt = 0; } + self.destdir = movevec; + self.destdir = vectornormalize( ( self.destdir[ 0 ], self.destdir[ 1 ], 0 ) ); + tiltamnt *= 1 - ( vectorangle( anglesToForward( self.angles ), self.destdir ) / 180 ); + self.destdir = vectornormalize( ( self.destdir[ 0 ], self.destdir[ 1 ], tiltamnt * -0.4 ) ); } newdir = self.destdir; - if ( newdir[ 2 ] < -0,4 ) + if ( newdir[ 2 ] < -0.4 ) { - newdir = vectornormalize( ( newdir[ 0 ], newdir[ 1 ], -0,4 ) ); + newdir = vectornormalize( ( newdir[ 0 ], newdir[ 1 ], -0.4 ) ); } copterangles = self.angles; copterangles = combineangles( copterangles, vectorScale( ( 0, 0, -1 ), 90 ) ); @@ -698,7 +683,7 @@ coptermove() newdir2d = vectornormalize( ( newdir[ 0 ], newdir[ 1 ], 0 ) ); angle = vectorangle( olddir2d, newdir2d ); angle3d = vectorangle( olddir, newdir ); - if ( angle > 0,001 && thisrotspeed > 0,001 ) + if ( angle > 0.001 && thisrotspeed > 0.001 ) { thisangle = thisrotspeed * interval; if ( thisangle > angle ) @@ -711,24 +696,21 @@ coptermove() interpz = oldz + ( ( newz - oldz ) * ( thisangle / angle ) ); newdir = vectornormalize( ( newdir2d[ 0 ], newdir2d[ 1 ], interpz ) ); copterangles = vectorToAngle( newdir ); - copterangles = combineangles( copterangles, vectorScale( ( 0, 0, -1 ), 90 ) ); - self rotateto( copterangles, interval * 0,999 ); + copterangles = combineangles( copterangles, vectorScale( ( 0, -1, 0 ), 90 ) ); + self rotateto( copterangles, interval * 0.999 ); } - else + else if ( angle3d > 0.001 && thisrotspeed > 0.001 ) { - if ( angle3d > 0,001 && thisrotspeed > 0,001 ) + thisangle = thisrotspeed * interval; + if ( thisangle > angle3d ) { - thisangle = thisrotspeed * interval; - if ( thisangle > angle3d ) - { - thisangle = angle3d; - } - newdir = vectortowardsothervector( olddir, newdir, thisangle ); - newdir = vectornormalize( newdir ); - copterangles = vectorToAngle( newdir ); - copterangles = combineangles( copterangles, vectorScale( ( 0, 0, -1 ), 90 ) ); - self rotateto( copterangles, interval * 0,999 ); + thisangle = angle3d; } + newdir = vectortowardsothervector( olddir, newdir, thisangle ); + newdir = vectornormalize( newdir ); + copterangles = vectorToAngle( newdir ); + copterangles = combineangles( copterangles, vectorScale( ( 0, -1, 0 ), 90 ) ); + self rotateto( copterangles, interval * 0.999 ); } wait interval; } @@ -740,7 +722,7 @@ copterdamage( damagetrig ) while ( 1 ) { damagetrig waittill( "damage", amount, attacker ); - while ( isDefined( attacker ) && isplayer( attacker ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] == self.team ) + if ( isDefined( attacker ) && isplayer( attacker ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] == self.team ) { continue; } @@ -753,13 +735,13 @@ copterdamage( damagetrig ) } } -copterdie() +copterdie() //checked changed to match cerberus output { self endon( "passive" ); self death_notify_wrapper(); self.dead = 1; self thread copterexplodefx(); - interval = 0,2; + interval = 0.2; rottime = 15; self rotateyaw( 360 + randomfloat( 360 ), rottime ); self rotatepitch( 360 + randomfloat( 360 ), rottime ); @@ -773,11 +755,8 @@ copterdie() { break; } - else - { - self moveto( newpos, interval * 0,999 ); - wait interval; - } + self moveto( newpos, interval * 0,999 ); + wait interval; } playfx( level.copterfinalexplosion, self.origin ); fakeself = spawn( "script_origin", self.origin ); @@ -788,7 +767,7 @@ copterdie() fakeself delete(); } -deletecopter() +deletecopter() //checked matches cerberus output { if ( isDefined( self.damagetrig ) ) { @@ -799,13 +778,14 @@ deletecopter() self delete(); } -copterexplodefx() +copterexplodefx() //checked matches cerberus output { self endon( "finaldeath" ); while ( 1 ) { playfx( level.copterexplosion, self.origin ); self playsound( "mp_copter_explosion" ); - wait ( 0,5 + randomfloat( 1 ) ); + wait ( 0.5 + randomfloat( 1 ) ); } } + diff --git a/patch_mp/maps/mp/gametypes/_wager.gsc b/patch_mp/maps/mp/gametypes/_wager.gsc index e244cee..a8c3c58 100644 --- a/patch_mp/maps/mp/gametypes/_wager.gsc +++ b/patch_mp/maps/mp/gametypes/_wager.gsc @@ -1,3 +1,4 @@ +//checked includes match cerberus output #include maps/mp/killstreaks/_killstreaks; #include maps/mp/gametypes/_class; #include maps/mp/gametypes/_globallogic_audio; @@ -10,7 +11,7 @@ #include common_scripts/utility; #include maps/mp/_utility; -init() +init() //checked matches cerberus output { precachestring( &"MP_HEADS_UP" ); precachestring( &"MP_U2_ONLINE" ); @@ -37,7 +38,7 @@ init() level.takelivesondeath = 1; } -onplayerconnect() +onplayerconnect() //checked matches cerberus output { for ( ;; ) { @@ -47,7 +48,7 @@ onplayerconnect() } } -initwagerplayer() +initwagerplayer() //checked changed to match cerberus output { self endon( "disconnect" ); self waittill( "spawned_player" ); @@ -57,7 +58,7 @@ initwagerplayer() self.pers[ "wager_sideBetWinnings" ] = 0; self.pers[ "wager_sideBetLosses" ] = 0; } - if ( isDefined( level.inthemoneyonradar ) || level.inthemoneyonradar && isDefined( level.firstplaceonradar ) && level.firstplaceonradar ) + if ( isDefined( level.inthemoneyonradar ) && level.inthemoneyonradar || isDefined( level.firstplaceonradar ) && level.firstplaceonradar ) { self.pers[ "hasRadar" ] = 1; self.hasspyplane = 1; @@ -70,7 +71,7 @@ initwagerplayer() self thread deductplayerante(); } -ondisconnect() +ondisconnect() //checked matches cerberus output { level endon( "game_ended" ); self endon( "player_eliminated" ); @@ -78,7 +79,7 @@ ondisconnect() level notify( "player_eliminated" ); } -deductplayerante() +deductplayerante() //checked matches cerberus output { if ( isDefined( self.pers[ "hasPaidWagerAnte" ] ) ) { @@ -109,7 +110,7 @@ deductplayerante() self thread maps/mp/gametypes/_persistence::uploadstatssoon(); } -incrementescrowforplayer( amount ) +incrementescrowforplayer( amount ) //checked matches cerberus output { if ( !isDefined( self ) || !isplayer( self ) ) { @@ -130,7 +131,7 @@ incrementescrowforplayer( amount ) game[ "escrows" ][ game[ "escrows" ].size ] = escrowstruct; } -clearescrows() +clearescrows() //checked changed to match cerberus output { if ( !isDefined( game[ "escrows" ] ) ) { @@ -138,22 +139,20 @@ clearescrows() } escrows = game[ "escrows" ]; numescrows = escrows.size; - i = 0; - while ( i < numescrows ) + for ( i = 0; i < numescrows; i++ ) { escrowstruct = escrows[ i ]; - i++; } game[ "escrows" ] = []; } -addrecentearningstostat( recentearnings ) +addrecentearningstostat( recentearnings ) //checked matches cerberus output { currearnings = self maps/mp/gametypes/_persistence::getrecentstat( 1, 0, "score" ); self maps/mp/gametypes/_persistence::setrecentstat( 1, 0, "score", currearnings + recentearnings ); } -prematchperiod() +prematchperiod() //checked matches cerberus output { if ( !level.wagermatch ) { @@ -161,7 +160,7 @@ prematchperiod() } } -finalizewagerround() +finalizewagerround() //checked matches cerberus output { if ( level.wagermatch == 0 ) { @@ -176,9 +175,13 @@ finalizewagerround() determinewagerwinnings() { - if ( isDefined( level.dontcalcwagerwinnings ) ) + if ( !isDefined( level.dontcalcwagerwinnings ) || !level.dontcalcwagerwinnings ) { - shouldcalculatewinnings = !level.dontcalcwagerwinnings; + shouldcalculatewinnings = 0; + } + else + { + shouldcalculatewinnings = 1; } if ( !shouldcalculatewinnings ) { @@ -194,33 +197,28 @@ determinewagerwinnings() } } -calculatefreeforallpayouts() +calculatefreeforallpayouts() //checked changed to match cerberus output { playerrankings = level.placement[ "all" ]; - payoutpercentages = array( 0,5, 0,3, 0,2 ); + payoutpercentages = array( 0.5, 0.3, 0.2 ); if ( playerrankings.size == 2 ) { - payoutpercentages = array( 0,7, 0,3 ); + payoutpercentages = array( 0.7, 0.3 ); } - else + else if ( playerrankings.size == 1 ) { - if ( playerrankings.size == 1 ) - { - payoutpercentages = array( 1 ); - } + payoutpercentages = array( 1 ); } setwagerwinningsonplayers( level.players, 0 ); if ( isDefined( level.hostforcedend ) && level.hostforcedend ) { wagerbet = getDvarInt( "scr_wagerBet" ); - i = 0; - while ( i < playerrankings.size ) + for ( i = 0; i < playerrankings.size; i++ ) { if ( !playerrankings[ i ] islocaltohost() ) { playerrankings[ i ].wagerwinnings = wagerbet; } - i++; } } else if ( level.players.size == 1 ) @@ -233,8 +231,7 @@ calculatefreeforallpayouts() cumulativepayoutpercentage = payoutpercentages[ 0 ]; playergroup = []; playergroup[ playergroup.size ] = playerrankings[ 0 ]; - i = 1; - while ( i < playerrankings.size ) + for ( i = 1; i < playerrankings.size; i++ ) { if ( playerrankings[ i ].pers[ "score" ] < playergroup[ 0 ].pers[ "score" ] ) { @@ -248,20 +245,18 @@ calculatefreeforallpayouts() { cumulativepayoutpercentage += payoutpercentages[ currentpayoutpercentage ]; } - i++; } setwagerwinningsonplayers( playergroup, int( ( game[ "wager_pot" ] * cumulativepayoutpercentage ) / playergroup.size ) ); } } -calculateplacesbasedonscore() +calculateplacesbasedonscore() //checked changed to match cerberus output { level.playerplaces = array( [], [], [] ); playerrankings = level.placement[ "all" ]; placementscores = array( playerrankings[ 0 ].pers[ "score" ], -1, -1 ); currentplace = 0; - index = 0; - while ( index < playerrankings.size && currentplace < placementscores.size ) + for ( index = 0; index < playerrankings.size && currentplace < placementscores.size; index++ ) { player = playerrankings[ index ]; if ( player.pers[ "score" ] < placementscores[ currentplace ] ) @@ -269,19 +264,15 @@ calculateplacesbasedonscore() currentplace++; if ( currentplace >= level.playerplaces.size ) { - return; + break; } - else - { - placementscores[ currentplace ] = player.pers[ "score" ]; - } - level.playerplaces[ currentplace ][ level.playerplaces[ currentplace ].size ] = player; - index++; + placementscores[ currentplace ] = player.pers[ "score" ]; } + level.playerplaces[ currentplace ][ level.playerplaces[ currentplace ].size ] = player; } } -calculateteampayouts() +calculateteampayouts() //checked changed to match cerberus output { winner = maps/mp/gametypes/_globallogic::determineteamwinnerbygamestat( "teamScores" ); if ( winner == "tie" ) @@ -290,8 +281,7 @@ calculateteampayouts() return; } playersonwinningteam = []; - index = 0; - while ( index < level.players.size ) + for ( index = 0; index < level.players.size; index++ ) { player = level.players[ index ]; player.wagerwinnings = 0; @@ -299,7 +289,6 @@ calculateteampayouts() { playersonwinningteam[ playersonwinningteam.size ] = player; } - index++; } if ( playersonwinningteam.size == 0 ) { @@ -310,17 +299,15 @@ calculateteampayouts() setwagerwinningsonplayers( playersonwinningteam, winningssplit ); } -setwagerwinningsonplayers( players, amount ) +setwagerwinningsonplayers( players, amount ) //checked changed to match cerberus output { - index = 0; - while ( index < players.size ) + for ( index = 0; index < players.size; index++ ) { players[ index ].wagerwinnings = amount; - index++; } } -finalizewagergame() +finalizewagergame() //checked changed to match cerberus output { level.wagergamefinalized = 1; if ( level.wagermatch == 0 ) @@ -330,10 +317,9 @@ finalizewagergame() determinewagerwinnings(); determinetopearners(); players = level.players; - wait 0,5; + wait 0.5; playerrankings = level.wagertopearners; - index = 0; - while ( index < players.size ) + for ( index = 0; index < players.size; index++ ) { player = players[ index ]; if ( isDefined( player.pers[ "wager_sideBetWinnings" ] ) ) @@ -348,12 +334,11 @@ finalizewagergame() { maps/mp/gametypes/_globallogic_score::updatewinstats( player ); } - index++; } clearescrows(); } -payoutwagerwinnings( player, winnings ) +payoutwagerwinnings( player, winnings ) //checked matches cerberus output { if ( winnings == 0 ) { @@ -365,12 +350,11 @@ payoutwagerwinnings( player, winnings ) player addrecentearningstostat( winnings ); } -determinetopearners() +determinetopearners() //checked changed to match beta dump { topwinnings = array( -1, -1, -1 ); level.wagertopearners = []; - index = 0; - while ( index < level.players.size ) + for ( index = 0; index < level.players.size; index++ ) { player = level.players[ index ]; if ( !isDefined( player.wagerwinnings ) ) @@ -385,8 +369,6 @@ determinetopearners() level.wagertopearners[ 2 ] = level.wagertopearners[ 1 ]; level.wagertopearners[ 1 ] = level.wagertopearners[ 0 ]; level.wagertopearners[ 0 ] = player; - index++; - continue; } else if ( player.wagerwinnings > topwinnings[ 1 ] ) { @@ -394,22 +376,16 @@ determinetopearners() topwinnings[ 1 ] = player.wagerwinnings; level.wagertopearners[ 2 ] = level.wagertopearners[ 1 ]; level.wagertopearners[ 1 ] = player; - index++; - continue; } - else + else if ( player.wagerwinnings > topwinnings[ 2 ] ) { - if ( player.wagerwinnings > topwinnings[ 2 ] ) - { - topwinnings[ 2 ] = player.wagerwinnings; - level.wagertopearners[ 2 ] = player; - } + topwinnings[ 2 ] = player.wagerwinnings; + level.wagertopearners[ 2 ] = player; } - index++; } } -postroundsidebet() +postroundsidebet() //checked matches cerberus output { if ( isDefined( level.sidebet ) && level.sidebet ) { @@ -418,7 +394,7 @@ postroundsidebet() } } -sidebettimer() +sidebettimer() //checked changed to match cerberus output { level endon( "side_bet_end" ); secondstowait = ( level.sidebetendtime - getTime() ) / 1000; @@ -427,19 +403,17 @@ sidebettimer() secondstowait = 0; } wait secondstowait; - playerindex = 0; - while ( playerindex < level.players.size ) + for ( playerindex = 0; playerindex < level.players.size; playerindex++ ) { if ( isDefined( level.players[ playerindex ] ) ) { level.players[ playerindex ] closemenu(); } - playerindex++; } level notify( "side_bet_end" ); } -sidebetallbetsplaced() +sidebetallbetsplaced() //checked changed to match cerberus output { secondsleft = ( level.sidebetendtime - getTime() ) / 1000; if ( secondsleft <= 3 ) @@ -448,19 +422,17 @@ sidebetallbetsplaced() } level.sidebetendtime = getTime() + 3000; wait 3; - playerindex = 0; - while ( playerindex < level.players.size ) + for ( playerindex = 0; playerindex < level.players.size; playerindex++ ) { if ( isDefined( level.players[ playerindex ] ) ) { level.players[ playerindex ] closemenu(); } - playerindex++; } level notify( "side_bet_end" ); } -setupblankrandomplayer( takeweapons, chooserandombody, weapon ) +setupblankrandomplayer( takeweapons, chooserandombody, weapon ) //checked changed to match cerberus output { if ( !isDefined( chooserandombody ) || chooserandombody ) { @@ -484,23 +456,21 @@ setupblankrandomplayer( takeweapons, chooserandombody, weapon ) { self.hasspyplane = 1; } - while ( isDefined( self.powerups ) && isDefined( self.powerups.size ) ) + if ( isDefined( self.powerups ) && isDefined( self.powerups.size ) ) { - i = 0; - while ( i < self.powerups.size ) + for ( i = 0; i < self.powerups.size; i++ ) { self applypowerup( self.powerups[ i ] ); - i++; } } self setradarvisibility(); } -assignrandombody() +assignrandombody() //checked matches cerberus output { } -queuewagerpopup( message, points, submessage, announcement ) +queuewagerpopup( message, points, submessage, announcement ) //checked matches cerberus output { self endon( "disconnect" ); size = self.wagernotifyqueue.size; @@ -512,7 +482,7 @@ queuewagerpopup( message, points, submessage, announcement ) self notify( "received award" ); } -helpgameend() +helpgameend() //checked changed to match beta dump { level endon( "game_ended" ); for ( ;; ) @@ -522,37 +492,30 @@ helpgameend() { continue; } - else + wait 0.05; + players = level.players; + playersleft = 0; + for ( i = 0; i < players.size; i++ ) { - wait 0,05; - players = level.players; - playersleft = 0; - i = 0; - while ( i < players.size ) + if ( isDefined( players[ i ].pers[ "lives" ] ) && players[ i ].pers[ "lives" ] > 0 ) { - if ( isDefined( players[ i ].pers[ "lives" ] ) && players[ i ].pers[ "lives" ] > 0 ) - { - playersleft++; - } - i++; + playersleft++; } - while ( playersleft == 2 ) + } + if ( playersleft == 2 ) + { + for ( i = 0; i < players.size; i++ ) { - i = 0; - while ( i < players.size ) - { - players[ i ] queuewagerpopup( &"MP_HEADS_UP", 0, &"MP_U2_ONLINE", "wm_u2_online" ); - players[ i ].pers[ "hasRadar" ] = 1; - players[ i ].hasspyplane = 1; - level.activeuavs[ players[ i ] getentitynumber() ]++; - i++; - } + players[ i ] queuewagerpopup( &"MP_HEADS_UP", 0, &"MP_U2_ONLINE", "wm_u2_online" ); + players[ i ].pers[ "hasRadar" ] = 1; + players[ i ].hasspyplane = 1; + level.activeuavs[ players[ i ] getentitynumber() ]++; } } } } -setradarvisibility() +setradarvisibility() //checked changed to match cerberus output { prevscoreplace = self.prevscoreplace; if ( !isDefined( prevscoreplace ) ) @@ -570,31 +533,27 @@ setradarvisibility() self setperk( "specialty_gpsjammer" ); } } - else + else if ( isDefined( level.firstplaceonradar ) && level.firstplaceonradar ) { - if ( isDefined( level.firstplaceonradar ) && level.firstplaceonradar ) + if ( prevscoreplace == 1 && isDefined( self.score ) && self.score > 0 ) { - if ( prevscoreplace == 1 && isDefined( self.score ) && self.score > 0 ) - { - self unsetperk( "specialty_gpsjammer" ); - return; - } - else - { - self setperk( "specialty_gpsjammer" ); - } + self unsetperk( "specialty_gpsjammer" ); + return; + } + else + { + self setperk( "specialty_gpsjammer" ); } } } -playerscored() +playerscored() //checked changed to match cerberus output { self notify( "wager_player_scored" ); self endon( "wager_player_scored" ); - wait 0,05; + wait 0.05; maps/mp/gametypes/_globallogic::updateplacement(); - i = 0; - while ( i < level.placement[ "all" ].size ) + for ( i = 0; i < level.placement["all"].size; i++ ) { prevscoreplace = level.placement[ "all" ][ i ].prevscoreplace; if ( !isDefined( prevscoreplace ) ) @@ -602,16 +561,13 @@ playerscored() prevscoreplace = 1; } currentscoreplace = i + 1; - j = i - 1; - while ( j >= 0 ) + for ( j = i - 1; j >= 0; j-- ) { if ( level.placement[ "all" ][ i ].score == level.placement[ "all" ][ j ].score ) { currentscoreplace--; } - j--; - } wasinthemoney = prevscoreplace <= 3; isinthemoney = currentscoreplace <= 3; @@ -619,25 +575,21 @@ playerscored() { level.placement[ "all" ][ i ] wagerannouncer( "wm_in_the_money" ); } - else + else if ( wasinthemoney && !isinthemoney ) { - if ( wasinthemoney && !isinthemoney ) - { - level.placement[ "all" ][ i ] wagerannouncer( "wm_oot_money" ); - } + level.placement[ "all" ][ i ] wagerannouncer( "wm_oot_money" ); } level.placement[ "all" ][ i ].prevscoreplace = currentscoreplace; level.placement[ "all" ][ i ] setradarvisibility(); - i++; } } -wagerannouncer( dialog, group ) +wagerannouncer( dialog, group ) //checked matches cerberus output { self maps/mp/gametypes/_globallogic_audio::leaderdialogonplayer( dialog, group ); } -createpowerup( name, type, displayname, iconmaterial ) +createpowerup( name, type, displayname, iconmaterial ) //checked matches cerberus output { powerup = spawnstruct(); powerup.name = []; @@ -648,32 +600,30 @@ createpowerup( name, type, displayname, iconmaterial ) return powerup; } -addpowerup( name, type, displayname, iconmaterial ) +addpowerup( name, type, displayname, iconmaterial ) //checked changed to match cerberus output { if ( !isDefined( level.poweruplist ) ) { level.poweruplist = []; } - i = 0; - while ( i < level.poweruplist.size ) + for ( i = 0; i < level.poweruplist.size; i++ ) { if ( level.poweruplist[ i ].displayname == displayname ) { level.poweruplist[ i ].name[ level.poweruplist[ i ].name.size ] = name; return; } - i++; } powerup = createpowerup( name, type, displayname, iconmaterial ); level.poweruplist[ level.poweruplist.size ] = powerup; } -copypowerup( powerup ) +copypowerup( powerup ) //checked matches cerberus output { return createpowerup( powerup.name[ 0 ], powerup.type, powerup.displayname, powerup.iconmaterial ); } -applypowerup( powerup ) +applypowerup( powerup ) //checked changed to match cerberus output { switch( powerup.type ) { @@ -700,23 +650,20 @@ applypowerup( powerup ) self setweaponammoclip( powerup.name[ 0 ], 2 ); break; case "perk": - i = 0; - while ( i < powerup.name.size ) + for ( i = 0; i < powerup.name.size; i++ ) { self setperk( powerup.name[ i ] ); - i++; } - case "killstreak": - self maps/mp/killstreaks/_killstreaks::givekillstreak( powerup.name[ 0 ] ); - break; - case "score_multiplier": - self.scoremultiplier = powerup.name[ 0 ]; - break; - } + case "killstreak": + self maps/mp/killstreaks/_killstreaks::givekillstreak( powerup.name[ 0 ] ); + break; + case "score_multiplier": + self.scoremultiplier = powerup.name[ 0 ]; + break; } } -givepowerup( powerup, doanimation ) +givepowerup( powerup, doanimation ) //checked changed to match cerberus output { if ( !isDefined( self.powerups ) ) { @@ -724,27 +671,25 @@ givepowerup( powerup, doanimation ) } powerupindex = self.powerups.size; self.powerups[ powerupindex ] = copypowerup( powerup ); - i = 0; - while ( i < powerup.name.size ) + for ( i = 0; i < powerup.name.size; i++ ) { self.powerups[ powerupindex ].name[ self.powerups[ powerupindex ].name.size ] = powerup.name[ i ]; - i++; } self applypowerup( self.powerups[ powerupindex ] ); self thread showpowerupmessage( powerupindex, doanimation ); } -pulsepowerupicon( powerupindex ) +pulsepowerupicon( powerupindex ) //checked changed to match cerberus output { - if ( isDefined( self ) && isDefined( self.powerups ) || !isDefined( self.powerups[ powerupindex ] ) && !isDefined( self.powerups[ powerupindex ].hud_elem_icon ) ) + if ( !isDefined( self ) || !isDefined( self.powerups ) || !isDefined( self.powerups[ powerupindex ] ) || !isDefined( self.powerups[ powerupindex ].hud_elem_icon ) ) { return; } self endon( "disconnect" ); self endon( "delete" ); self endon( "clearing_powerups" ); - pulsepercent = 1,5; - pulsetime = 0,5; + pulsepercent = 1.5; + pulsetime = 0.5; hud_elem = self.powerups[ powerupindex ].hud_elem_icon; if ( isDefined( hud_elem.animating ) && hud_elem.animating ) { @@ -758,18 +703,18 @@ pulsepowerupicon( powerupindex ) bigheight = origheight * pulsepercent; xoffset = ( bigwidth - origwidth ) / 2; yoffset = ( bigheight - origheight ) / 2; - hud_elem scaleovertime( 0,05, int( bigwidth ), int( bigheight ) ); - hud_elem moveovertime( 0,05 ); + hud_elem scaleovertime( 0.05, int( bigwidth ), int( bigheight ) ); + hud_elem moveovertime( 0.05 ); hud_elem.x = origx - xoffset; hud_elem.y = origy - yoffset; - wait 0,05; + wait 0.05; hud_elem scaleovertime( pulsetime, origwidth, origheight ); hud_elem moveovertime( pulsetime ); hud_elem.x = origx; hud_elem.y = origy; } -showpowerupmessage( powerupindex, doanimation ) +showpowerupmessage( powerupindex, doanimation ) //checked changed to match cerberus output { self endon( "disconnect" ); self endon( "delete" ); @@ -836,7 +781,7 @@ showpowerupmessage( powerupindex, doanimation ) { self thread queuewagerpopup( self.powerups[ powerupindex ].displayname, 0, &"MP_BONUS_ACQUIRED" ); } - pulsetime = 0,5; + pulsetime = 0.5; if ( doanimation ) { self.powerups[ powerupindex ].hud_elem fadeovertime( pulsetime ); @@ -867,33 +812,28 @@ showpowerupmessage( powerupindex, doanimation ) { self thread queuewagerpopup( self.powerups[ powerupindex ].displayname, 0, &"MP_BONUS_ACQUIRED" ); } - wait 1,5; - i = 0; - while ( i <= powerupindex ) + wait 1.5; + for ( i = 0; i <= powerupindex; i++ ) { - self.powerups[ i ].hud_elem fadeovertime( 0,25 ); + self.powerups[ i ].hud_elem fadeovertime( 0.25 ); self.powerups[ i ].hud_elem.alpha = 0; - i++; } - wait 0,25; - i = 0; - while ( i <= powerupindex ) + wait 0.25; + for ( i = 0; i <= powerupindex; i++ ) { - self.powerups[ i ].hud_elem_icon moveovertime( 0,25 ); + self.powerups[ i ].hud_elem_icon moveovertime( 0.25 ); self.powerups[ i ].hud_elem_icon.x = 0 - iconsize; self.powerups[ i ].hud_elem_icon.horzalign = "user_right"; - i++; } self.powerups[ powerupindex ].hud_elem_icon.animating = 0; } -clearpowerups() +clearpowerups() //checked changed to match cerberus output { self notify( "clearing_powerups" ); while ( isDefined( self.powerups ) && isDefined( self.powerups.size ) ) { - i = 0; - while ( i < self.powerups.size ) + for ( i = 0; i < self.powerups.size; i++ ) { if ( isDefined( self.powerups[ i ].hud_elem ) ) { @@ -903,13 +843,12 @@ clearpowerups() { self.powerups[ i ].hud_elem_icon destroy(); } - i++; } } self.powerups = []; } -trackwagerweaponusage( name, incvalue, statname ) +trackwagerweaponusage( name, incvalue, statname ) //checked matches cerberus output { if ( !isDefined( self.wagerweaponusage ) ) { @@ -926,7 +865,7 @@ trackwagerweaponusage( name, incvalue, statname ) self.wagerweaponusage[ name ][ statname ] += incvalue; } -gethighestwagerweaponusage( statname ) +gethighestwagerweaponusage( statname ) //checked partially changed to match cerberus output did not use continues in for loop see github for more info { if ( !isDefined( self.wagerweaponusage ) ) { @@ -935,26 +874,22 @@ gethighestwagerweaponusage( statname ) bestweapon = undefined; highestvalue = 0; wagerweaponsused = getarraykeys( self.wagerweaponusage ); - i = 0; - while ( i < wagerweaponsused.size ) + for ( i = 0; i < wagerweaponsused.size; i++ ) { weaponstats = self.wagerweaponusage[ wagerweaponsused[ i ] ]; if ( !isDefined( weaponstats[ statname ] ) || !getbaseweaponitemindex( wagerweaponsused[ i ] ) ) { - i++; - continue; } else if ( !isDefined( bestweapon ) || weaponstats[ statname ] > highestvalue ) { bestweapon = wagerweaponsused[ i ]; highestvalue = weaponstats[ statname ]; } - i++; } return bestweapon; } -setwagerafteractionreportstats() +setwagerafteractionreportstats() //checked changed to match beta dump { topweapon = self gethighestwagerweaponusage( "kills" ); topkills = 0; @@ -978,11 +913,10 @@ setwagerafteractionreportstats() } else { - i = 0; - while ( i < 3 ) + for(i = 0; i < 3; i++) { self maps/mp/gametypes/_persistence::setafteractionreportstat( "wagerAwards", 0, i ); - i++; } } } + diff --git a/patch_mp/maps/mp/gametypes/_weapons.gsc b/patch_mp/maps/mp/gametypes/_weapons.gsc index cac0a41..ebcdc5d 100644 --- a/patch_mp/maps/mp/gametypes/_weapons.gsc +++ b/patch_mp/maps/mp/gametypes/_weapons.gsc @@ -1,3 +1,4 @@ +//checked includes changed to match cerberus output #include maps/mp/gametypes/_gameobjects; #include maps/mp/gametypes/_shellshock; #include maps/mp/killstreaks/_dogs; @@ -10,12 +11,30 @@ #include maps/mp/killstreaks/_killstreak_weapons; #include maps/mp/gametypes/_class; #include maps/mp/_bb; +#include maps/mp/_hacker_tool; +#include maps/mp/_riotshield; +#include maps/mp/_satchel_charge; +#include maps/mp/_ballistic_knife; +#include maps/mp/_trophy_system; +#include maps/mp/_bouncingbetty; +#include maps/mp/_proximity_grenade; +#include maps/mp/_sticky_grenade; +#include maps/mp/_explosive_bolt; +#include maps/mp/_scrambler; +#include maps/mp/_tacticalinsertion; +#include maps/mp/_sensor_grenade; +#include maps/mp/_acousticsensor; +#include maps/mp/_heatseekingmissile; +#include maps/mp/_smokegrenade; +#include maps/mp/gametypes/_weaponobjects; +#include maps/mp/_entityheadicons; +#include maps/mp/_empgrenade; #include maps/mp/_flashgrenades; #include maps/mp/gametypes/_weapon_utils; #include maps/mp/_utility; #include common_scripts/utility; -init() +init() //checked matches cerberus output { precacheitem( "knife_mp" ); precacheitem( "knife_held_mp" ); @@ -72,7 +91,7 @@ init() maps/mp/_hacker_tool::init(); } -onplayerconnect() +onplayerconnect() //checked matches cerberus output { for ( ;; ) { @@ -85,7 +104,7 @@ onplayerconnect() } } -onplayerspawned() +onplayerspawned() //checked matches cerberus output { self endon( "disconnect" ); for ( ;; ) @@ -109,7 +128,7 @@ onplayerspawned() } } -watchturretuse() +watchturretuse() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -120,7 +139,7 @@ watchturretuse() } } -watchfortowfire( turret ) +watchfortowfire( turret ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -133,7 +152,7 @@ watchfortowfire( turret ) } } -watchmissleunlink( turret ) +watchmissleunlink( turret ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -142,7 +161,7 @@ watchmissleunlink( turret ) self relinktoturret( turret ); } -watchweaponchange() +watchweaponchange() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -165,7 +184,7 @@ watchweaponchange() } if ( newweapon != "none" ) { - if ( !isprimaryweapon( newweapon ) && issidearm( newweapon ) && !isDefined( self.hitsthismag[ newweapon ] ) ) + if ( !isprimaryweapon( newweapon ) || issidearm( newweapon ) && !isDefined( self.hitsthismag[ newweapon ] ) ) { self.hitsthismag[ newweapon ] = weaponclipsize( newweapon ); } @@ -178,7 +197,7 @@ watchweaponchange() } } -watchriotshielduse() +watchriotshielduse() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -190,7 +209,7 @@ watchriotshielduse() } } -updatelastheldweapontimings( newtime ) +updatelastheldweapontimings( newtime ) //checked matches cerberus output { if ( isDefined( self.currentweapon ) && isDefined( self.currentweaponstarttime ) ) { @@ -203,7 +222,7 @@ updatelastheldweapontimings( newtime ) } } -updateweapontimings( newtime ) +updateweapontimings( newtime ) //checked changed to match beta dump { if ( self is_bot() ) { @@ -220,38 +239,32 @@ updateweapontimings( newtime ) return; } self.staticweaponsstarttime = newtime; - while ( isDefined( self.weapon_array_grenade ) ) + if ( isDefined( self.weapon_array_grenade ) ) { - i = 0; - while ( i < self.weapon_array_grenade.size ) + for(i = 0; i < self.weapon_array_grenade.size; i++) { self addweaponstat( self.weapon_array_grenade[ i ], "timeUsed", totaltime ); - i++; } } - while ( isDefined( self.weapon_array_inventory ) ) + if ( isDefined( self.weapon_array_inventory ) ) { - i = 0; - while ( i < self.weapon_array_inventory.size ) + for(i = 0; i < self.weapon_array_inventory.size; i++) { self addweaponstat( self.weapon_array_inventory[ i ], "timeUsed", totaltime ); - i++; } } - while ( isDefined( self.killstreak ) ) + if ( isDefined( self.killstreak ) ) { - i = 0; - while ( i < self.killstreak.size ) + for ( i = 0; i < self.killstreak.size; i++ ) { killstreakweapon = level.menureferenceforkillstreak[ self.killstreak[ i ] ]; if ( isDefined( killstreakweapon ) ) { self addweaponstat( killstreakweapon, "timeUsed", totaltime ); } - i++; } } - while ( level.rankedmatch && level.perksenabled ) + if ( level.rankedmatch && level.perksenabled ) { perksindexarray = []; specialtys = self.specialty; @@ -263,33 +276,29 @@ updateweapontimings( newtime ) { return; } - while ( isDefined( self.class_num ) ) + if ( isDefined( self.class_num ) ) { - numspecialties = 0; - while ( numspecialties < level.maxspecialties ) + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) { perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); if ( perk != 0 ) { perksindexarray[ perk ] = 1; } - numspecialties++; } perkindexarraykeys = getarraykeys( perksindexarray ); - i = 0; - while ( i < perkindexarraykeys.size ) + for ( i = 0; i < perkindexarraykeys.size; i++ ) { if ( perksindexarray[ perkindexarraykeys[ i ] ] == 1 ) { self adddstat( "itemStats", perkindexarraykeys[ i ], "stats", "timeUsed", "statValue", totaltime ); } - i++; } } } } -trackweapon() +trackweapon() //checked changed to match beta dump { currentweapon = self getcurrentweapon(); currenttime = getTime(); @@ -309,7 +318,6 @@ trackweapon() currentweapon = newweapon; currenttime = newtime; } - continue; } else { @@ -323,7 +331,7 @@ trackweapon() } } -maydropweapon( weapon ) +maydropweapon( weapon ) //checked matches cerberus output { if ( level.disableweapondrop == 1 ) { @@ -349,7 +357,7 @@ maydropweapon( weapon ) return 1; } -dropweaponfordeath( attacker, sweapon, smeansofdeath ) +dropweaponfordeath( attacker, sweapon, smeansofdeath ) //checked matches cerberus output dvars taken from beta dump { if ( level.disableweapondrop == 1 ) { @@ -362,42 +370,50 @@ dropweaponfordeath( attacker, sweapon, smeansofdeath ) } if ( !isDefined( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: not defined" ); #/ } + */ return; } if ( weapon == "none" ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: weapon == none" ); #/ } + */ return; } if ( !self hasweapon( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); #/ } + */ return; } if ( !self anyammoforweaponmodes( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: no ammo for weapon modes" ); #/ } + */ return; } if ( !shoulddroplimitedweapon( weapon, self ) ) @@ -413,12 +429,14 @@ dropweaponfordeath( attacker, sweapon, smeansofdeath ) clip_and_stock_ammo = clipammo + stockammo; if ( !clip_and_stock_ammo ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: no ammo" ); #/ } + */ return; } stockmax = weaponmaxammo( weapon ); @@ -429,17 +447,21 @@ dropweaponfordeath( attacker, sweapon, smeansofdeath ) item = self dropitem( weapon ); if ( !isDefined( item ) ) { + /* /# iprintlnbold( "dropItem: was not able to drop weapon " + weapon ); #/ + */ return; } + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "dropped weapon: " + weapon ); #/ } + */ droplimitedweapon( weapon, self, item ); self.droppeddeathweapon = 1; item itemweaponsetammo( clipammo, stockammo ); @@ -451,46 +473,54 @@ dropweaponfordeath( attacker, sweapon, smeansofdeath ) item thread deletepickupafterawhile(); } -dropweapontoground( weapon ) +dropweapontoground( weapon ) //checked changed to match cerberus output dvars taken from beta dump { if ( !isDefined( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: not defined" ); #/ } + */ return; } if ( weapon == "none" ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: weapon == none" ); #/ } + */ return; } if ( !self hasweapon( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); #/ } + */ return; } if ( !self anyammoforweaponmodes( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: no ammo for weapon modes" ); #/ } + */ switch( weapon ) { case "m202_flash_mp": @@ -501,8 +531,7 @@ dropweapontoground( weapon ) self takeweapon( weapon ); break; default: - } - return; + break; } if ( !shoulddroplimitedweapon( weapon, self ) ) { @@ -512,13 +541,15 @@ dropweapontoground( weapon ) stockammo = self getweaponammostock( weapon ); clip_and_stock_ammo = clipammo + stockammo; if ( !clip_and_stock_ammo ) - { + { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: no ammo" ); #/ } + */ return; } stockmax = weaponmaxammo( weapon ); @@ -527,12 +558,14 @@ dropweapontoground( weapon ) stockammo = stockmax; } item = self dropitem( weapon ); + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "dropped weapon: " + weapon ); #/ } + */ droplimitedweapon( weapon, self, item ); item itemweaponsetammo( clipammo, stockammo ); item.owner = self; @@ -541,7 +574,7 @@ dropweapontoground( weapon ) } } -deletepickupafterawhile() +deletepickupafterawhile() //checked matches cerberus output { self endon( "death" ); wait 60; @@ -552,23 +585,33 @@ deletepickupafterawhile() self delete(); } -getitemweaponname() +getitemweaponname() //checked matches cerberus output { classname = self.classname; + /* /# assert( getsubstr( classname, 0, 7 ) == "weapon_" ); #/ + */ weapname = getsubstr( classname, 7 ); return weapname; } -watchpickup() +watchpickup() //checked changed to match cerberus output dvar taken from beta dump { self endon( "death" ); weapname = self getitemweaponname(); - self waittill( "trigger", player, droppeditem ); + while ( 1 ) + { + self waittill( "trigger", player, droppeditem ); + if ( isdefined( droppeditem ) ) + { + break; + } + } + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "picked up weapon: " + weapname + ", " + isDefined( self.ownersattacker ) ); #/ @@ -579,6 +622,7 @@ watchpickup() /# assert( isDefined( player.pickedupweaponkills ) ); #/ + */ if ( isDefined( droppeditem ) ) { droppedweaponname = droppeditem getitemweaponname(); @@ -586,6 +630,7 @@ watchpickup() { droppeditem.owner = player.tookweaponfrom[ droppedweaponname ]; droppeditem.ownersattacker = player; + player.tookweaponfrom[ droppedweaponname ] = undefined; } droppeditem thread watchpickup(); } @@ -599,10 +644,12 @@ watchpickup() } else { + player.tookweaponfrom[ weapname ] = undefined; + player.pickedupweaponkills[ weapname ] = undefined; } } -itemremoveammofromaltmodes() +itemremoveammofromaltmodes() //checked matches cerberus output { origweapname = self getitemweaponname(); curweapname = weaponaltweaponname( origweapname ); @@ -615,7 +662,7 @@ itemremoveammofromaltmodes() } } -dropoffhand() +dropoffhand() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info { grenadetypes = []; index = 0; @@ -626,21 +673,18 @@ dropoffhand() index++; continue; } - else count = self getammocount( grenadetypes[ index ] ); + count = self getammocount( grenadetypes[ index ] ); if ( !count ) { index++; continue; } - else - { - self dropitem( grenadetypes[ index ] ); - } + self dropitem( grenadetypes[ index ] ); index++; } } -watchweaponusage() +watchweaponusage() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -669,7 +713,7 @@ watchweaponusage() self thread updatemagshots( curweapon ); } } - switch( weaponclass( curweapon ) ) + switch ( weaponclass( curweapon ) ) { case "rifle": if ( curweapon == "crossbow_mp" ) @@ -682,8 +726,8 @@ watchweaponusage() self addweaponstat( curweapon, "shots", 1 ); self thread begingrenadetracking(); break; - } - else case "mg": + } + case "mg": case "pistol": case "pistol spread": case "smg": @@ -696,29 +740,28 @@ watchweaponusage() self addweaponstat( curweapon, "shots", 1 ); break; default: - } - if ( maps/mp/killstreaks/_killstreak_weapons::isheldkillstreakweapon( curweapon ) ) - { - self.pers[ "held_killstreak_ammo_count" ][ curweapon ]--; - - self.usedkillstreakweapon[ curweapon ] = 1; - } + break; + } + if ( maps/mp/killstreaks/_killstreak_weapons::isheldkillstreakweapon( curweapon ) ) + { + self.pers[ "held_killstreak_ammo_count" ][ curweapon ]--; + self.usedkillstreakweapon[ curweapon ] = 1; } } } -updatemagshots( weaponname ) +updatemagshots( weaponname ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); self endon( "updateMagShots_" + weaponname ); self.hitsthismag[ weaponname ]--; - wait 0,05; + wait 0.05; self.hitsthismag[ weaponname ] = weaponclipsize( weaponname ); } -checkhitsthismag( weaponname ) +checkhitsthismag( weaponname ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -735,7 +778,7 @@ checkhitsthismag( weaponname ) } } -trackweaponfire( curweapon ) +trackweaponfire( curweapon ) //checked matches cerberus output { pixbeginevent( "trackWeaponFire" ); self trackweaponfirenative( curweapon, 1, self.hits, 1 ); @@ -745,9 +788,9 @@ trackweaponfire( curweapon ) pixendevent(); } -checkhit( sweapon ) +checkhit( sweapon ) //checked changed to match cerberus output { - switch( weaponclass( sweapon ) ) + switch ( weaponclass( sweapon ) ) { case "mg": case "pistol": @@ -760,16 +803,15 @@ checkhit( sweapon ) self.hits = 1; break; default: - } - waittillframeend; - if ( isDefined( self ) && isDefined( self.hitsthismag ) && isDefined( self.hitsthismag[ sweapon ] ) ) - { - self thread checkhitsthismag( sweapon ); - } + } + waittillframeend; + if ( isDefined( self ) && isDefined( self.hitsthismag ) && isDefined( self.hitsthismag[ sweapon ] ) ) + { + self thread checkhitsthismag( sweapon ); } } -watchgrenadeusage() +watchgrenadeusage() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -799,7 +841,7 @@ watchgrenadeusage() } } -watchmissileusage() +watchmissileusage() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -808,50 +850,48 @@ watchmissileusage() { self waittill( "missile_fire", missile, weapon_name ); self.hasdonecombat = 1; + /* /# assert( isDefined( missile ) ); #/ + */ level.missileentities[ level.missileentities.size ] = missile; missile thread watchmissiledeath(); } } -watchmissiledeath() +watchmissiledeath() //checked matches cerberus output { self waittill( "death" ); arrayremovevalue( level.missileentities, self ); } -dropweaponstoground( origin, radius ) +dropweaponstoground( origin, radius ) //checked changed to match cerberus output { weapons = getdroppedweapons(); - i = 0; - while ( i < weapons.size ) + for ( i = 0; i < weapons.size; i++ ) { if ( distancesquared( origin, weapons[ i ].origin ) < ( radius * radius ) ) { - trace = bullettrace( weapons[ i ].origin, weapons[ i ].origin + vectorScale( ( 0, 0, 1 ), 2000 ), 0, weapons[ i ] ); + trace = bullettrace( weapons[ i ].origin, weapons[ i ].origin + vectorScale( ( 0, 0, -1 ), 2000 ), 0, weapons[ i ] ); weapons[ i ].origin = trace[ "position" ]; } - i++; } } -dropgrenadestoground( origin, radius ) +dropgrenadestoground( origin, radius ) //checked changed to match cerberus output { grenades = getentarray( "grenade", "classname" ); - i = 0; - while ( i < grenades.size ) + for ( i = 0; i < grenades.size; i++ ) { if ( distancesquared( origin, grenades[ i ].origin ) < ( radius * radius ) ) { - grenades[ i ] launch( vectorScale( ( 0, 0, 1 ), 5 ) ); + grenades[ i ] launch( vectorScale( ( 1, 1, 1 ), 5 ) ); } - i++; } } -watchgrenadecancel() +watchgrenadecancel() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -867,7 +907,7 @@ watchgrenadecancel() self notify( "grenade_throw_cancelled" ); } -watchoffhandend() +watchoffhandend() //checked changed to match cerberus output { self notify( "watchOffhandEnd" ); self endon( "watchOffhandEnd" ); @@ -878,14 +918,11 @@ watchoffhandend() { break; } - else - { - } } self setoffhandvisible( 0 ); } -isusingoffhandequipment() +isusingoffhandequipment() //checked matches cerberus output { if ( self isusingoffhand() ) { @@ -898,7 +935,7 @@ isusingoffhandequipment() return 0; } -begingrenadetracking() +begingrenadetracking() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -906,9 +943,11 @@ begingrenadetracking() starttime = getTime(); self thread watchgrenadecancel(); self waittill( "grenade_fire", grenade, weaponname ); + /* /# assert( isDefined( grenade ) ); #/ + */ level.missileentities[ level.missileentities.size ] = grenade; grenade thread watchmissiledeath(); if ( grenade maps/mp/_utility::ishacked() ) @@ -924,26 +963,24 @@ begingrenadetracking() { case "frag_grenade_mp": level.globalfraggrenadesfired++; - case "sticky_grenade_mp": - self addweaponstat( weaponname, "used", 1 ); - case "explosive_bolt_mp": - grenade.originalowner = self; - break; - case "satchel_charge_mp": - level.globalsatchelchargefired++; - break; - } - if ( weaponname == "sticky_grenade_mp" || weaponname == "frag_grenade_mp" ) - { - grenade setteam( self.pers[ "team" ] ); - grenade setowner( self ); - } - self.throwinggrenade = 0; - } + case "sticky_grenade_mp": + self addweaponstat( weaponname, "used", 1 ); + case "explosive_bolt_mp": + grenade.originalowner = self; + break; + case "satchel_charge_mp": + level.globalsatchelchargefired++; + break; } + if ( weaponname == "sticky_grenade_mp" || weaponname == "frag_grenade_mp" ) + { + grenade setteam( self.pers[ "team" ] ); + grenade setowner( self ); + } + self.throwinggrenade = 0; } -beginothergrenadetracking() +beginothergrenadetracking() //checked partially changed to match cerberus output changed at own discretion { self notify( "grenadeTrackingStart" ); self endon( "grenadeTrackingStart" ); @@ -953,71 +990,65 @@ beginothergrenadetracking() self waittill( "grenade_fire", grenade, weaponname, parent ); if ( grenade maps/mp/_utility::ishacked() ) { - break; - continue; - } - else switch( weaponname ) - { - case "flash_grenade_mp": - break; - continue; - case "concussion_grenade_mp": + continue; + } + switch( weaponname ) + { + case "flash_grenade_mp": + break; + case "concussion_grenade_mp": + break; case "willy_pete_mp": grenade thread maps/mp/_smokegrenade::watchsmokegrenadedetonation( self ); break; - continue; case "tabun_gas_mp": grenade thread maps/mp/_tabun::watchtabungrenadedetonation( self ); break; - continue; case "sticky_grenade_mp": grenade thread checkstucktoplayer( 1, 1, weaponname ); grenade thread checkstucktoshield(); break; - continue; case "c4_mp": case "satchel_charge_mp": grenade thread checkstucktoplayer( 1, 0, weaponname ); break; - continue; case "proximity_grenade_mp": grenade thread checkstucktoshield(); grenade thread maps/mp/_proximity_grenade::watchproximitygrenadehitplayer( self ); break; - continue; case "tactical_insertion_mp": grenade thread maps/mp/_tacticalinsertion::watch( self ); break; - continue; case "scrambler_mp": - case "explosive_bolt_mp": - grenade.ownerweaponatlaunch = self.currentweapon; - if ( self playerads() == 1 ) - { - } - else grenade.owneradsatlaunch = 0; - grenade thread maps/mp/_explosive_bolt::watch_bolt_detonation( self ); - grenade thread checkstucktoplayer( 1, 0, weaponname ); - grenade thread checkstucktoshield(); - break; - continue; - case "hatchet_mp": - grenade.lastweaponbeforetoss = self getlastweapon(); - grenade thread checkhatchetbounce(); - grenade thread checkstucktoplayer( 0, 0, weaponname ); - self addweaponstat( weaponname, "used", 1 ); - break; - continue; - case "emp_grenade_mp": - grenade thread maps/mp/_empgrenade::watchempexplosion( self, weaponname ); - break; - continue; - } + break; + case "explosive_bolt_mp": + grenade.ownerweaponatlaunch = self.currentweapon; + if ( self playerads() == 1 ) + { + grenade.owneradsatlaunch = 1; + } + else + { + grenade.owneradsatlaunch = 0; + } + grenade thread maps/mp/_explosive_bolt::watch_bolt_detonation( self ); + grenade thread checkstucktoplayer( 1, 0, weaponname ); + grenade thread checkstucktoshield(); + break; + case "hatchet_mp": + grenade.lastweaponbeforetoss = self getlastweapon(); + grenade thread checkhatchetbounce(); + grenade thread checkstucktoplayer( 0, 0, weaponname ); + self addweaponstat( weaponname, "used", 1 ); + break; + case "emp_grenade_mp": + grenade thread maps/mp/_empgrenade::watchempexplosion( self, weaponname ); + break; } } } -checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) +checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) //checked matches cerberus output { self endon( "death" ); self waittill( "stuck_to_player", player ); @@ -1038,14 +1069,14 @@ checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) } } -checkstucktoshield() +checkstucktoshield() //checked matches cerberus output { self endon( "death" ); self waittill( "stuck_to_shield", other, owner ); other maps/mp/_riotshield::watchriotshieldstuckentitydeath( self, owner ); } -checkhatchetbounce() +checkhatchetbounce() //checked matches cerberus output { self endon( "stuck_to_player" ); self endon( "death" ); @@ -1053,7 +1084,7 @@ checkhatchetbounce() self.bounced = 1; } -stucktoplayerteamchange( player ) +stucktoplayerteamchange( player ) //checked matches cerberus output { self endon( "death" ); player endon( "disconnect" ); @@ -1069,7 +1100,7 @@ stucktoplayerteamchange( player ) } } -beginsatcheltracking() +beginsatcheltracking() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -1077,7 +1108,7 @@ beginsatcheltracking() self.throwinggrenade = 0; } -watchforthrowbacks() +watchforthrowbacks() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -1089,19 +1120,16 @@ watchforthrowbacks() self.gotpullbacknotify = 0; continue; } - else if ( !issubstr( weapname, "frag_" ) ) + if ( !issubstr( weapname, "frag_" ) ) { continue; } - else - { - grenade.threwback = 1; - grenade.originalowner = self; - } + grenade.threwback = 1; + grenade.originalowner = self; } } -waitanddeletedud( waittime ) +waitanddeletedud( waittime ) //checked matches cerberus output { self endon( "death" ); wait waittime; @@ -1111,11 +1139,10 @@ waitanddeletedud( waittime ) } } -makeallboltsdud() +makeallboltsdud() //checked changed to match cerberus output { grenades = getentarray( "grenade", "classname" ); - i = 0; - while ( i < grenades.size ) + for ( i = 0; i < grenades.size; i++ ) { if ( grenades[ i ].model == "t5_weapon_crossbow_bolt" ) { @@ -1126,11 +1153,10 @@ makeallboltsdud() } grenades[ i ].isdud = 1; } - i++; } } -turngrenadeintoadud( weapname, isthrowngrenade, player ) +turngrenadeintoadud( weapname, isthrowngrenade, player ) //checked changed to match cerberus output { if ( level.roundstartexplosivedelay >= ( maps/mp/gametypes/_globallogic_utils::gettimepassed() / 1000 ) ) { @@ -1145,25 +1171,21 @@ turngrenadeintoadud( weapname, isthrowngrenade, player ) { self makeallboltsdud(); player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - return; + } + else if ( isthrowngrenade ) + { + player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); } else { - if ( isthrowngrenade ) - { - player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - } - else - { - player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - } - self makegrenadedud(); + player iprintlnbold( &"MP_LAUNCHER_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); } + self makegrenadedud(); } } } -watchforgrenadeduds() +watchforgrenadeduds() //checked matches cerberus output { self endon( "spawned_player" ); self endon( "disconnect" ); @@ -1174,7 +1196,7 @@ watchforgrenadeduds() } } -watchforgrenadelauncherduds() +watchforgrenadelauncherduds() //checked matches cerberus output { self endon( "spawned_player" ); self endon( "disconnect" ); @@ -1182,15 +1204,17 @@ watchforgrenadelauncherduds() { self waittill( "grenade_launcher_fire", grenade, weapname ); grenade turngrenadeintoadud( weapname, 0, self ); + /* /# assert( isDefined( grenade ) ); #/ + */ level.missileentities[ level.missileentities.size ] = grenade; grenade thread watchmissiledeath(); } } -getdamageableents( pos, radius, dolos, startradius ) +getdamageableents( pos, radius, dolos, startradius ) //checked partially changed to match cerberus output did not use continue in for loop and foreach see github for more info { ents = []; if ( !isDefined( dolos ) ) @@ -1202,13 +1226,10 @@ getdamageableents( pos, radius, dolos, startradius ) startradius = 0; } players = level.players; - i = 0; - while ( i < players.size ) + for ( i = 0; i < players.size; i++ ) { if ( !isalive( players[ i ] ) || players[ i ].sessionstate != "playing" ) { - i++; - continue; } else { @@ -1226,11 +1247,9 @@ getdamageableents( pos, radius, dolos, startradius ) ents[ ents.size ] = newent; } } - i++; } grenades = getentarray( "grenade", "classname" ); - i = 0; - while ( i < grenades.size ) + for ( i = 0; i < grenades.size; i++ ) { entpos = grenades[ i ].origin; distsq = distancesquared( pos, entpos ); @@ -1245,11 +1264,9 @@ getdamageableents( pos, radius, dolos, startradius ) newent.damagecenter = entpos; ents[ ents.size ] = newent; } - i++; } destructibles = getentarray( "destructible", "targetname" ); - i = 0; - while ( i < destructibles.size ) + for ( i = 0; i < destructibles.size; i++ ) { entpos = destructibles[ i ].origin; distsq = distancesquared( pos, entpos ); @@ -1264,11 +1281,9 @@ getdamageableents( pos, radius, dolos, startradius ) newent.damagecenter = entpos; ents[ ents.size ] = newent; } - i++; } destructables = getentarray( "destructable", "targetname" ); - i = 0; - while ( i < destructables.size ) + for ( i = 0; i < destructables.size; i++ ) { entpos = destructables[ i ].origin; distsq = distancesquared( pos, entpos ); @@ -1283,14 +1298,10 @@ getdamageableents( pos, radius, dolos, startradius ) newent.damagecenter = entpos; ents[ ents.size ] = newent; } - i++; } dogs = maps/mp/killstreaks/_dogs::dog_manager_get_dogs(); - _a1453 = dogs; - _k1453 = getFirstArrayKey( _a1453 ); - while ( isDefined( _k1453 ) ) + foreach ( dog in dogs ) { - dog = _a1453[ _k1453 ]; if ( !isalive( dog ) ) { } @@ -1310,18 +1321,17 @@ getdamageableents( pos, radius, dolos, startradius ) ents[ ents.size ] = newent; } } - _k1453 = getNextArrayKey( _a1453, _k1453 ); } return ents; } -weapondamagetracepassed( from, to, startradius, ignore ) +weapondamagetracepassed( from, to, startradius, ignore ) //checked matches cerberus output { trace = weapondamagetrace( from, to, startradius, ignore ); return trace[ "fraction" ] == 1; } -weapondamagetrace( from, to, startradius, ignore ) +weapondamagetrace( from, to, startradius, ignore ) //checked changed to match cerberus output { midpos = undefined; diff = to - from; @@ -1332,22 +1342,22 @@ weapondamagetrace( from, to, startradius, ignore ) dir = vectornormalize( diff ); midpos = from + ( dir[ 0 ] * startradius, dir[ 1 ] * startradius, dir[ 2 ] * startradius ); trace = bullettrace( midpos, to, 0, ignore ); - if ( getDvarInt( #"0A1C40B1" ) != 0 ) + if ( getDvarInt( "scr_damage_debug" ) != 0 ) { if ( trace[ "fraction" ] == 1 ) { - thread debugline( midpos, to, ( 0, 0, 1 ) ); + thread debugline( midpos, to, ( 1, 1, 1 ) ); } else { - thread debugline( midpos, trace[ "position" ], ( 1, 0,9, 0,8 ) ); - thread debugline( trace[ "position" ], to, ( 1, 0,4, 0,3 ) ); + thread debugline( midpos, trace[ "position" ], ( 1, 0.9, 0.8 ) ); + thread debugline( trace[ "position" ], to, ( 1, 0.4, 0.3 ) ); } } return trace; } -damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) +damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) //checked does not match cerberus output matches beta dump { if ( self.isplayer ) { @@ -1370,24 +1380,24 @@ damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, da { return; } - self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 1 ), ( 0, 0, 1 ), "mod_explosive", "", "" ); + self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "mod_explosive", "", "" ); } } -debugline( a, b, color ) +debugline( a, b, color ) //checked changed to match cerberus output { + /* /# - i = 0; - while ( i < 600 ) + for ( i = 0; i < 600; i++ ) { line( a, b, color ); - wait 0,05; - i++; + wait 0.05; #/ } + */ } -onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) +onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -1397,7 +1407,7 @@ onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) radius = 512; if ( self == eattacker ) { - radius *= 0,5; + radius *= 0.5; } scale = 1 - ( distance( self.origin, einflictor.origin ) / radius ); if ( scale < 0 ) @@ -1405,10 +1415,10 @@ onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) scale = 0; } time = 2 + ( 4 * scale ); - wait 0,05; + wait 0.05; if ( self hasperk( "specialty_stunprotection" ) ) { - time *= 0,1; + time *= 0.1; } self thread playconcussionsound( time ); if ( self mayapplyscreeneffect() ) @@ -1427,7 +1437,7 @@ onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) } } -playconcussionsound( duration ) +playconcussionsound( duration ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -1437,25 +1447,25 @@ playconcussionsound( duration ) concussionsound thread deleteentonownerdeath( self ); concussionsound playsound( "" ); concussionsound playloopsound( "" ); - if ( duration > 0,5 ) + if ( duration > 0.5 ) { - wait ( duration - 0,5 ); + wait ( duration - 0.5 ); } concussionsound playsound( "" ); - concussionsound stoploopsound( 0,5 ); - wait 0,5; + concussionsound stoploopsound( 0.5 ); + wait 0.5; concussionsound notify( "delete" ); concussionsound delete(); } -deleteentonownerdeath( owner ) +deleteentonownerdeath( owner ) //checked matches cerberus output { self endon( "delete" ); owner waittill( "death" ); self delete(); } -monitor_dog_special_grenades() +monitor_dog_special_grenades() //checked matches cerberus output { self endon( "death" ); while ( 1 ) @@ -1465,68 +1475,62 @@ monitor_dog_special_grenades() { damage_area = spawn( "trigger_radius", self.origin, 0, 128, 128 ); attacker thread maps/mp/killstreaks/_dogs::flash_dogs( damage_area ); - wait 0,05; + wait 0.05; damage_area delete(); } } } -isprimaryweapon( weaponname ) +isprimaryweapon( weaponname ) //checked matches cerberus output { return isDefined( level.primary_weapon_array[ weaponname ] ); } -issidearm( weaponname ) +issidearm( weaponname ) //checked matches cerberus output { return isDefined( level.side_arm_array[ weaponname ] ); } -isinventory( weaponname ) +isinventory( weaponname ) //checked matches cerberus output { return isDefined( level.inventory_array[ weaponname ] ); } -isgrenade( weaponname ) +isgrenade( weaponname ) //checked matches cerberus output { return isDefined( level.grenade_array[ weaponname ] ); } -isexplosivebulletweapon( weaponname ) +isexplosivebulletweapon( weaponname ) //checked changed to match cerberus output { - if ( weaponname != "chopper_minigun_mp" && weaponname != "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" && weaponname == "cobra_20mm_comlink_mp" ) + if ( weaponname == "chopper_minigun_mp" || weaponname == "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" || weaponname == "cobra_20mm_comlink_mp" ) { return 1; } return 0; } -getweaponclass_array( current ) +getweaponclass_array( current ) //checked changed to match cerberus output { if ( isprimaryweapon( current ) ) { return level.primary_weapon_array; } + else if ( issidearm( current ) ) + { + return level.side_arm_array; + } + else if ( isgrenade( current ) ) + { + return level.grenade_array; + } else { - if ( issidearm( current ) ) - { - return level.side_arm_array; - } - else - { - if ( isgrenade( current ) ) - { - return level.grenade_array; - } - else - { - return level.inventory_array; - } - } + return level.inventory_array; } } -updatestowedweapon() +updatestowedweapon() //checked partially changed to match cerberus output did not use for loop see github for more info { self endon( "spawned" ); self endon( "killed_player" ); @@ -1538,7 +1542,7 @@ updatestowedweapon() while ( 1 ) { self waittill( "weapon_change", newweapon ); - while ( self ismantling() ) + if ( self ismantling() ) { continue; } @@ -1558,65 +1562,61 @@ updatestowedweapon() case "minigun_mp": idx++; continue; - default: - } - if ( !hasstowed || currentstowed == weaponslist[ idx ] ) - { - currentstowed = weaponslist[ idx ]; - hasstowed = 1; - } - if ( isprimaryweapon( weaponslist[ idx ] ) ) - { - self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else if ( issidearm( weaponslist[ idx ] ) ) - { - self.weapon_array_sidearm[ self.weapon_array_sidearm.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else if ( isgrenade( weaponslist[ idx ] ) ) - { - self.weapon_array_grenade[ self.weapon_array_grenade.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else if ( isinventory( weaponslist[ idx ] ) ) - { - self.weapon_array_inventory[ self.weapon_array_inventory.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else - { - if ( isweaponprimary( weaponslist[ idx ] ) ) - { - self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; - } - } - idx++; - } - if ( newweapon != "none" || !hasstowed ) - { - detach_all_weapons(); - stow_on_back(); - stow_on_hip(); - } + default: + break; } + if ( !hasstowed || currentstowed == weaponslist[ idx ] ) + { + currentstowed = weaponslist[ idx ]; + hasstowed = 1; + } + if ( isprimaryweapon( weaponslist[ idx ] ) ) + { + self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; + idx++; + continue; + } + if ( issidearm( weaponslist[ idx ] ) ) + { + self.weapon_array_sidearm[ self.weapon_array_sidearm.size ] = weaponslist[ idx ]; + idx++; + continue; + } + if ( isgrenade( weaponslist[ idx ] ) ) + { + self.weapon_array_grenade[ self.weapon_array_grenade.size ] = weaponslist[ idx ]; + idx++; + continue; + } + if ( isinventory( weaponslist[ idx ] ) ) + { + self.weapon_array_inventory[ self.weapon_array_inventory.size ] = weaponslist[ idx ]; + idx++; + continue; + } + if ( isweaponprimary( weaponslist[ idx ] ) ) + { + self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; + } + idx++; + } + if ( newweapon != "none" || !hasstowed ) + { + detach_all_weapons(); + stow_on_back(); + stow_on_hip(); } } } -forcestowedweaponupdate() +forcestowedweaponupdate() //checked matches cerberus output { detach_all_weapons(); stow_on_back(); stow_on_hip(); } -detachcarryobjectmodel() +detachcarryobjectmodel() //checked matches cerberus output { if ( isDefined( self.carryobject ) && isDefined( self.carryobject maps/mp/gametypes/_gameobjects::getvisiblecarriermodel() ) ) { @@ -1628,7 +1628,7 @@ detachcarryobjectmodel() } } -detach_all_weapons() +detach_all_weapons() //checked matches cerberus output { if ( isDefined( self.tag_stowed_back ) ) { @@ -1656,7 +1656,7 @@ detach_all_weapons() } } -non_stowed_weapon( weapon ) +non_stowed_weapon( weapon ) //checked matches cerberus output { if ( self hasweapon( "knife_ballistic_mp" ) && weapon != "knife_ballistic_mp" ) { @@ -1669,7 +1669,7 @@ non_stowed_weapon( weapon ) return 0; } -stow_on_back( current ) +stow_on_back( current ) //checked partially changed to match cerberus output did not use for loop see github for more info { current = self getcurrentweapon(); currentalt = self getcurrentweaponaltweapon(); @@ -1682,56 +1682,51 @@ stow_on_back( current ) self attach( self.tag_stowed_back, "tag_stowed_back", 1 ); return; } - else + if ( non_stowed_weapon( current ) ) { - if ( non_stowed_weapon( current ) ) + return; + } + if ( current != "none" ) + { + idx = 0; + while ( idx < self.weapon_array_primary.size ) { - return; - } - else - { - while ( current != "none" ) + temp_index_weapon = self.weapon_array_primary[ idx ]; + /* +/# + assert( isDefined( temp_index_weapon ), "Primary weapon list corrupted." ); +#/ + */ + if ( temp_index_weapon == current ) { - idx = 0; - while ( idx < self.weapon_array_primary.size ) - { - temp_index_weapon = self.weapon_array_primary[ idx ]; -/# - assert( isDefined( temp_index_weapon ), "Primary weapon list corrupted." ); -#/ - if ( temp_index_weapon == current ) - { - idx++; - continue; - } - else if ( temp_index_weapon == currentalt ) - { - idx++; - continue; - } - else - { - index_weapon = temp_index_weapon; -/# - assert( isDefined( self.curclass ), "Player missing current class" ); -#/ - if ( issubstr( index_weapon, self.pers[ "primaryWeapon" ] ) && issubstr( self.curclass, "CUSTOM" ) ) - { - self.tag_stowed_back = getweaponmodel( index_weapon ); - } - else - { - stowedmodelindex = getweaponstowedmodel( index_weapon ); - self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); - } - if ( issubstr( self.curclass, "CUSTOM" ) ) - { - weaponoptions = self calcweaponoptions( self.class_num, 0 ); - } - } - idx++; - } + idx++; + continue; } + if ( temp_index_weapon == currentalt ) + { + idx++; + continue; + } + index_weapon = temp_index_weapon; + /* +/# + assert( isDefined( self.curclass ), "Player missing current class" ); +#/ + */ + if ( issubstr( index_weapon, self.pers[ "primaryWeapon" ] ) && issubstr( self.curclass, "CUSTOM" ) ) + { + self.tag_stowed_back = getweaponmodel( index_weapon ); + } + else + { + stowedmodelindex = getweaponstowedmodel( index_weapon ); + self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); + } + if ( issubstr( self.curclass, "CUSTOM" ) ) + { + weaponoptions = self calcweaponoptions( self.class_num, 0 ); + } + idx++; } } if ( !isDefined( self.tag_stowed_back ) ) @@ -1741,7 +1736,7 @@ stow_on_back( current ) self setstowedweapon( index_weapon ); } -stow_on_hip() +stow_on_hip() //checked partially changed to match cerberus output did not use for loop see github for more info { current = self getcurrentweapon(); self.tag_stowed_hip = undefined; @@ -1753,15 +1748,12 @@ stow_on_hip() idx++; continue; } - else if ( !self getweaponammostock( self.weapon_array_inventory[ idx ] ) ) + if ( !self getweaponammostock( self.weapon_array_inventory[ idx ] ) ) { idx++; continue; } - else - { - self.tag_stowed_hip = self.weapon_array_inventory[ idx ]; - } + self.tag_stowed_hip = self.weapon_array_inventory[ idx ]; idx++; } if ( !isDefined( self.tag_stowed_hip ) ) @@ -1777,7 +1769,7 @@ stow_on_hip() self attach( weapon_model, "tag_stowed_hip_rear", 1 ); } -stow_inventory( inventories, current ) +stow_inventory( inventories, current ) //checked matches cerberus output { if ( isDefined( self.inventory_tag ) ) { @@ -1797,12 +1789,12 @@ stow_inventory( inventories, current ) } } -weapons_get_dvar_int( dvar, def ) +weapons_get_dvar_int( dvar, def ) //checked matches cerberus output { return int( weapons_get_dvar( dvar, def ) ); } -weapons_get_dvar( dvar, def ) +weapons_get_dvar( dvar, def ) //checked matches cerberus output { if ( getDvar( dvar ) != "" ) { @@ -1815,7 +1807,7 @@ weapons_get_dvar( dvar, def ) } } -player_is_driver() +player_is_driver() //checked matches cerberus output { if ( !isalive( self ) ) { @@ -1837,15 +1829,17 @@ player_is_driver() return 0; } -loadout_get_offhand_weapon( stat ) +loadout_get_offhand_weapon( stat ) //checked matches cerberus output { if ( isDefined( level.givecustomloadout ) ) { return "weapon_null_mp"; } + /* /# assert( isDefined( self.class_num ) ); #/ + */ if ( isDefined( self.class_num ) ) { index = self maps/mp/gametypes/_class::getloadoutitemfromddlstats( self.class_num, stat ); @@ -1857,16 +1851,18 @@ loadout_get_offhand_weapon( stat ) return "weapon_null_mp"; } -loadout_get_offhand_count( stat ) +loadout_get_offhand_count( stat ) //checked matches cerberus output { count = 0; if ( isDefined( level.givecustomloadout ) ) { return 0; } + /* /# assert( isDefined( self.class_num ) ); #/ + */ if ( isDefined( self.class_num ) ) { count = self maps/mp/gametypes/_class::getloadoutitemfromddlstats( self.class_num, stat ); @@ -1874,7 +1870,7 @@ loadout_get_offhand_count( stat ) return count; } -scavenger_think() +scavenger_think() //checked partially changed to match cerberus output did not use for loops see github for more info { self endon( "death" ); self waittill( "scavenger", player ); @@ -1897,32 +1893,25 @@ scavenger_think() weapon = offhand_weapons_and_alts[ i ]; if ( ishackweapon( weapon ) ) { - break; - i++; - continue; - } - else switch( weapon ) - { - case "satchel_charge_mp": - if ( player maps/mp/gametypes/_weaponobjects::anyobjectsinworld( weapon ) ) - { - break; i++; continue; } - else case "bouncingbetty_mp": - case "claymore_mp": - case "frag_grenade_mp": - case "hatchet_mp": - case "sticky_grenade_mp": - if ( isDefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) - { - break; - i++; - continue; - } - else + switch ( weapon ) { + case "satchel_charge_mp": + if ( player maps/mp/gametypes/_weaponobjects::anyobjectsinworld( weapon ) ) + { + break; + } + case "bouncingbetty_mp": + case "claymore_mp": + case "frag_grenade_mp": + case "hatchet_mp": + case "sticky_grenade_mp": + if ( isDefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) + { + break; + } case "concussion_grenade_mp": case "emp_grenade_mp": case "flash_grenade_mp": @@ -1936,11 +1925,7 @@ scavenger_think() if ( isDefined( player.grenadetypesecondarycount ) && player.grenadetypesecondarycount < 1 ) { break; - i++; - continue; - } - else - { + } maxammo = weaponmaxammo( weapon ); stock = player getweaponammostock( weapon ); if ( isDefined( level.customloadoutscavenge ) ) @@ -1951,12 +1936,9 @@ scavenger_think() { maxammo = loadout_primary_count; } - else + else if ( weapon == loadout_secondary ) { - if ( weapon == loadout_secondary ) - { - maxammo = loadout_secondary_count; - } + maxammo = loadout_secondary_count; } if ( stock < maxammo ) { @@ -1970,48 +1952,41 @@ scavenger_think() player thread maps/mp/_challenges::scavengedgrenade(); } break; + } + i++; + } + i = 0; + while ( i < primary_weapons.size ) + { + weapon = primary_weapons[ i ]; + if ( ishackweapon( weapon ) ) + { i++; continue; } + stock = player getweaponammostock( weapon ); + start = player getfractionstartammo( weapon ); + clip = weaponclipsize( weapon ); + clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 1 ); + clip = int( clip ); + maxammo = weaponmaxammo( weapon ); + if ( stock < ( maxammo - clip ) ) + { + ammo = stock + clip; + player setweaponammostock( weapon, ammo ); + player.scavenged = 1; + exit_early = 1; + i++; + continue; + } + player setweaponammostock( weapon, maxammo ); + player.scavenged = 1; + exit_early = 1; + i++; } } -i++; -} -i = 0; -while ( i < primary_weapons.size ) -{ -weapon = primary_weapons[ i ]; -if ( ishackweapon( weapon ) ) -{ - i++; - continue; -} -else stock = player getweaponammostock( weapon ); -start = player getfractionstartammo( weapon ); -clip = weaponclipsize( weapon ); -clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 1 ); -clip = int( clip ); -maxammo = weaponmaxammo( weapon ); -if ( stock < ( maxammo - clip ) ) -{ - ammo = stock + clip; - player setweaponammostock( weapon, ammo ); - player.scavenged = 1; - exit_early = 1; - i++; - continue; -} -else -{ - player setweaponammostock( weapon, maxammo ); - player.scavenged = 1; - exit_early = 1; -} -i++; -} -} -scavenger_hud_create() +scavenger_hud_create() //checked matches cerberus output { if ( level.wagermatch ) { @@ -2025,15 +2000,15 @@ scavenger_hud_create() height = 24; if ( level.splitscreen ) { - width = int( width * 0,5 ); - height = int( height * 0,5 ); + width = int( width * 0.5 ); + height = int( height * 0.5 ); } self.scavenger_icon.x = ( width * -1 ) / 2; self.scavenger_icon.y = 16; self.scavenger_icon setshader( "hud_scavenger_pickup", width, height ); } -dropscavengerfordeath( attacker ) +dropscavengerfordeath( attacker ) //checked matches cerberus output { if ( sessionmodeiszombiesgame() ) { @@ -2066,7 +2041,7 @@ dropscavengerfordeath( attacker ) item thread scavenger_think(); } -addlimitedweapon( weapon_name, owner, num_drops ) +addlimitedweapon( weapon_name, owner, num_drops ) //checked matches cerberus output { limited_info = spawnstruct(); limited_info.weapon = weapon_name; @@ -2074,7 +2049,7 @@ addlimitedweapon( weapon_name, owner, num_drops ) owner.limited_info = limited_info; } -shoulddroplimitedweapon( weapon_name, owner ) +shoulddroplimitedweapon( weapon_name, owner ) //checked matches cerberus output { limited_info = owner.limited_info; if ( !isDefined( limited_info ) ) @@ -2092,7 +2067,7 @@ shoulddroplimitedweapon( weapon_name, owner ) return 1; } -droplimitedweapon( weapon_name, owner, item ) +droplimitedweapon( weapon_name, owner, item ) //checked matches cerberus output { limited_info = owner.limited_info; if ( !isDefined( limited_info ) ) @@ -2108,7 +2083,7 @@ droplimitedweapon( weapon_name, owner, item ) item thread limitedpickup( limited_info ); } -limitedpickup( limited_info ) +limitedpickup( limited_info ) //checked matches cerberus output { self endon( "death" ); self waittill( "trigger", player, item ); @@ -2118,3 +2093,7 @@ limitedpickup( limited_info ) } player.limited_info = limited_info; } + + + + diff --git a/patch_mp/readme.md b/patch_mp/readme.md index d5e0872..24cd39d 100644 --- a/patch_mp/readme.md +++ b/patch_mp/readme.md @@ -33,6 +33,8 @@ patch_mp/maps/mp/bots/_bot_sd.gsc patch_mp/maps/mp/gametypes/_battlechatter_mp.gsc patch_mp/maps/mp/gametypes/_callbacksetup.gsc +patch_mp/maps/mp/gametypes/_class.gsc +patch_mp/maps/mp/gametypes/_copter.gsc patch_mp/maps/mp/gametypes/_damagefeedback.gsc patch_mp/maps/mp/gametypes/_deathicons.gsc patch_mp/maps/mp/gametypes/_friendicons.gsc @@ -50,6 +52,8 @@ patch_mp/maps/mp/gametypes/_rank.gsc patch_mp/maps/mp/gametypes/_serversettings.gsc patch_mp/maps/mp/gametypes/_spectating.gsc patch_mp/maps/mp/gametypes/_tweakables.gsc +patch_mp/maps/mp/gametypes/_wager.gsc +patch_mp/maps/mp/gametypes/_weapons.gsc patch_mp/maps/mp/gametypes/_weapon_utils.gsc patch_mp/maps/mp/gametypes/conf.gsc patch_mp/maps/mp/gametypes/ctf.gsc @@ -68,8 +72,6 @@ patch_mp/maps/mp/gametypes/tdm.gsc ``` ### The following scripts are not checked yet, uploaded to setup a baseline: ``` -patch_mp/maps/mp/gametypes/_class.gsc -patch_mp/maps/mp/gametypes/_copter.gsc patch_mp/maps/mp/gametypes/_gameobjects.gsc patch_mp/maps/mp/gametypes/_globallogic_actor.gsc patch_mp/maps/mp/gametypes/_globallogic_audio.gsc @@ -84,9 +86,7 @@ patch_mp/maps/mp/gametypes/_hud_message.gsc patch_mp/maps/mp/gametypes/_hud_util.gsc patch_mp/maps/mp/gametypes/_spawning.gsc patch_mp/maps/mp/gametypes/_spawnlogic.gsc -patch_mp/maps/mp/gametypes/_wager.gsc patch_mp/maps/mp/gametypes/_weaponobjects.gsc -patch_mp/maps/mp/gametypes/_weapons.gsc ``` ### The following scipts are dev scripts filled with dev calls making them useless to modify for now ``` diff --git a/patch_zm/maps/mp/gametypes_zm/_weapons.gsc b/patch_zm/maps/mp/gametypes_zm/_weapons.gsc index c70cd9c..55c93d4 100644 --- a/patch_zm/maps/mp/gametypes_zm/_weapons.gsc +++ b/patch_zm/maps/mp/gametypes_zm/_weapons.gsc @@ -1,3 +1,4 @@ +//checked includes changed to match cerberus output #include maps/mp/gametypes_zm/_gameobjects; #include maps/mp/gametypes_zm/_shellshock; #include maps/mp/gametypes_zm/_globallogic_utils; @@ -5,11 +6,15 @@ #include maps/mp/_challenges; #include maps/mp/gametypes_zm/_weapons; #include maps/mp/_bb; +#include maps/mp/_sticky_grenade; +#include maps/mp/gametypes_zm/_weaponobjects; #include maps/mp/gametypes_zm/_weapon_utils; #include maps/mp/_utility; #include common_scripts/utility; -init() +//whole script first checked as mp version then checked againt zm version + +init() //checked changed to match cerberus output { precacheitem( "knife_mp" ); precacheitem( "knife_held_mp" ); @@ -24,6 +29,9 @@ init() precachemodel( "t6_wpn_motion_sensor_world_detect" ); precachemodel( "t6_wpn_trophy_system_world_detect" ); precachemodel( "t6_wpn_bouncing_betty_world_detect" ); + precachemodel( "t6_wpn_tac_insert_world" ); + precachemodel( "t6_wpn_shield_stow_world" ); + precachemodel( "t6_wpn_shield_carry_world" ); precachemodel( "t5_weapon_camera_head_world" ); precacheitem( "scavenger_item_mp" ); precacheitem( "scavenger_item_hack_mp" ); @@ -36,11 +44,11 @@ init() precacheshellshock( "proximity_grenade_exit" ); level.missileentities = []; level.hackertooltargets = []; - if ( !isDefined( level.grenadelauncherdudtime ) ) + if ( !isdefined( level.grenadelauncherdudtime ) ) { level.grenadelauncherdudtime = 0; } - if ( !isDefined( level.throwngrenadedudtime ) ) + if ( !isdefined(level.throwngrenadedudtime ) ) { level.throwngrenadedudtime = 0; } @@ -52,7 +60,7 @@ init() } } -onplayerconnect() +onplayerconnect() //checked matches cerberus output { for ( ;; ) { @@ -65,13 +73,14 @@ onplayerconnect() } } -onplayerspawned() +onplayerspawned() //checked matches cerberus output { self endon( "disconnect" ); for ( ;; ) { self waittill( "spawned_player" ); self.concussionendtime = 0; + self.scavenged = 0; self.hasdonecombat = 0; self.shielddamageblocked = 0; self thread watchweaponusage(); @@ -88,7 +97,7 @@ onplayerspawned() } } -watchturretuse() +watchturretuse() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -99,7 +108,7 @@ watchturretuse() } } -watchfortowfire( turret ) +watchfortowfire( turret ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -112,7 +121,7 @@ watchfortowfire( turret ) } } -watchmissleunlink( turret ) +watchmissleunlink( turret ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -121,7 +130,7 @@ watchmissleunlink( turret ) self relinktoturret( turret ); } -watchweaponchange() +watchweaponchange() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -132,6 +141,7 @@ watchweaponchange() { self.hitsthismag[ weapon ] = weaponclipsize( weapon ); } + self.lastweaponchange = 0; while ( 1 ) { previous_weapon = self getcurrentweapon(); @@ -139,10 +149,11 @@ watchweaponchange() if ( maydropweapon( newweapon ) ) { self.lastdroppableweapon = newweapon; + self.lastweaponchange = getTime(); } if ( newweapon != "none" ) { - if ( !isprimaryweapon( newweapon ) && issidearm( newweapon ) && !isDefined( self.hitsthismag[ newweapon ] ) ) + if ( !isprimaryweapon( newweapon ) || issidearm( newweapon ) && !isDefined( self.hitsthismag[ newweapon ] ) ) { self.hitsthismag[ newweapon ] = weaponclipsize( newweapon ); } @@ -150,11 +161,11 @@ watchweaponchange() } } -watchriotshielduse() +watchriotshielduse() //checked changed to match cerberus output { } -updatelastheldweapontimings( newtime ) +updatelastheldweapontimings( newtime ) //checked matches cerberus output { if ( isDefined( self.currentweapon ) && isDefined( self.currentweaponstarttime ) ) { @@ -167,7 +178,7 @@ updatelastheldweapontimings( newtime ) } } -updateweapontimings( newtime ) +updateweapontimings( newtime ) //checked changed to match beta dump { if ( self is_bot() ) { @@ -184,38 +195,32 @@ updateweapontimings( newtime ) return; } self.staticweaponsstarttime = newtime; - while ( isDefined( self.weapon_array_grenade ) ) + if ( isDefined( self.weapon_array_grenade ) ) { - i = 0; - while ( i < self.weapon_array_grenade.size ) + for(i = 0; i < self.weapon_array_grenade.size; i++) { self addweaponstat( self.weapon_array_grenade[ i ], "timeUsed", totaltime ); - i++; } } - while ( isDefined( self.weapon_array_inventory ) ) + if ( isDefined( self.weapon_array_inventory ) ) { - i = 0; - while ( i < self.weapon_array_inventory.size ) + for(i = 0; i < self.weapon_array_inventory.size; i++) { self addweaponstat( self.weapon_array_inventory[ i ], "timeUsed", totaltime ); - i++; } } - while ( isDefined( self.killstreak ) ) + if ( isDefined( self.killstreak ) ) { - i = 0; - while ( i < self.killstreak.size ) + for ( i = 0; i < self.killstreak.size; i++ ) { killstreakweapon = level.menureferenceforkillstreak[ self.killstreak[ i ] ]; if ( isDefined( killstreakweapon ) ) { self addweaponstat( killstreakweapon, "timeUsed", totaltime ); } - i++; } } - while ( level.rankedmatch && level.perksenabled ) + if ( level.rankedmatch && level.perksenabled ) { perksindexarray = []; specialtys = self.specialty; @@ -227,33 +232,29 @@ updateweapontimings( newtime ) { return; } - while ( isDefined( self.class_num ) ) + if ( isDefined( self.class_num ) ) { - numspecialties = 0; - while ( numspecialties < level.maxspecialties ) + for ( numspecialties = 0; numspecialties < level.maxspecialties; numspecialties++ ) { perk = self getloadoutitem( self.class_num, "specialty" + ( numspecialties + 1 ) ); if ( perk != 0 ) { perksindexarray[ perk ] = 1; } - numspecialties++; } perkindexarraykeys = getarraykeys( perksindexarray ); - i = 0; - while ( i < perkindexarraykeys.size ) + for ( i = 0; i < perkindexarraykeys.size; i++ ) { if ( perksindexarray[ perkindexarraykeys[ i ] ] == 1 ) { self adddstat( "itemStats", perkindexarraykeys[ i ], "stats", "timeUsed", "statValue", totaltime ); } - i++; } } } } -trackweapon() +trackweapon() //checked changed to match beta dump { currentweapon = self getcurrentweapon(); currenttime = getTime(); @@ -272,11 +273,10 @@ trackweapon() currentweapon = newweapon; currenttime = newtime; } - continue; } else { - if ( event != "disconnect" ) + if ( event != "disconnect" && isDefined( self ) ) { self maps/mp/_bb::commitweapondata( spawnid, currentweapon, currenttime ); updateweapontimings( newtime ); @@ -286,7 +286,7 @@ trackweapon() } } -maydropweapon( weapon ) +maydropweapon( weapon ) //checked matches cerberus output { if ( level.disableweapondrop == 1 ) { @@ -312,7 +312,7 @@ maydropweapon( weapon ) return 1; } -dropweaponfordeath( attacker ) +dropweaponfordeath( attacker, sweapon, smeansofdeath ) //checked matches cerberus output dvars taken from beta dump { if ( level.disableweapondrop == 1 ) { @@ -325,42 +325,50 @@ dropweaponfordeath( attacker ) } if ( !isDefined( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: not defined" ); #/ } + */ return; } if ( weapon == "none" ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: weapon == none" ); #/ } + */ return; } if ( !self hasweapon( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); #/ } + */ return; } if ( !self anyammoforweaponmodes( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: no ammo for weapon modes" ); #/ } + */ return; } if ( !shoulddroplimitedweapon( weapon, self ) ) @@ -372,12 +380,14 @@ dropweaponfordeath( attacker ) clip_and_stock_ammo = clipammo + stockammo; if ( !clip_and_stock_ammo ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: no ammo" ); #/ } + */ return; } stockmax = weaponmaxammo( weapon ); @@ -388,66 +398,80 @@ dropweaponfordeath( attacker ) item = self dropitem( weapon ); if ( !isDefined( item ) ) { + /* /# iprintlnbold( "dropItem: was not able to drop weapon " + weapon ); #/ + */ return; } + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "dropped weapon: " + weapon ); #/ } + */ droplimitedweapon( weapon, self, item ); self.droppeddeathweapon = 1; item itemweaponsetammo( clipammo, stockammo ); item.owner = self; item.ownersattacker = attacker; + item.sweapon = sweapon; + item.smeansofdeath = smeansofdeath; item thread watchpickup(); item thread deletepickupafterawhile(); } -dropweapontoground( weapon ) +dropweapontoground( weapon ) //checked changed to match cerberus output dvars taken from beta dump { if ( !isDefined( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: not defined" ); #/ } + */ return; } if ( weapon == "none" ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: weapon == none" ); #/ } + */ return; } if ( !self hasweapon( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: don't have it anymore (" + weapon + ")" ); #/ } + */ return; } if ( !self anyammoforweaponmodes( weapon ) ) { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: no ammo for weapon modes" ); #/ } + */ switch( weapon ) { case "m202_flash_mp": @@ -458,8 +482,7 @@ dropweapontoground( weapon ) self takeweapon( weapon ); break; default: - } - return; + break; } if ( !shoulddroplimitedweapon( weapon, self ) ) { @@ -469,13 +492,15 @@ dropweapontoground( weapon ) stockammo = self getweaponammostock( weapon ); clip_and_stock_ammo = clipammo + stockammo; if ( !clip_and_stock_ammo ) - { + { + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "didn't drop weapon: no ammo" ); #/ } + */ return; } stockmax = weaponmaxammo( weapon ); @@ -484,12 +509,14 @@ dropweapontoground( weapon ) stockammo = stockmax; } item = self dropitem( weapon ); + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "dropped weapon: " + weapon ); #/ } + */ droplimitedweapon( weapon, self, item ); item itemweaponsetammo( clipammo, stockammo ); item.owner = self; @@ -498,7 +525,7 @@ dropweapontoground( weapon ) } } -deletepickupafterawhile() +deletepickupafterawhile() //checked matches cerberus output { self endon( "death" ); wait 60; @@ -509,33 +536,33 @@ deletepickupafterawhile() self delete(); } -getitemweaponname() +getitemweaponname() //checked matches cerberus output { classname = self.classname; + /* /# assert( getsubstr( classname, 0, 7 ) == "weapon_" ); #/ + */ weapname = getsubstr( classname, 7 ); return weapname; } -watchpickup() +watchpickup() //checked changed to match cerberus output dvar taken from beta dump { self endon( "death" ); weapname = self getitemweaponname(); - while ( 1 ) + while ( { self waittill( "trigger", player, droppeditem ); - if ( isDefined( droppeditem ) ) + if ( isdefined( droppeditem ) ) { break; } - else - { - } } + /* /# - if ( getDvar( #"08F7FC88" ) == "1" ) + if ( getDvar( "scr_dropdebug" ) == "1" ) { println( "picked up weapon: " + weapname + ", " + isDefined( self.ownersattacker ) ); #/ @@ -546,21 +573,28 @@ watchpickup() /# assert( isDefined( player.pickedupweaponkills ) ); #/ + */ droppedweaponname = droppeditem getitemweaponname(); if ( isDefined( player.tookweaponfrom[ droppedweaponname ] ) ) { droppeditem.owner = player.tookweaponfrom[ droppedweaponname ]; droppeditem.ownersattacker = player; + player.tookweaponfrom[ droppedweaponname ] = undefined; } droppeditem thread watchpickup(); if ( isDefined( self.ownersattacker ) && self.ownersattacker == player ) { - player.tookweaponfrom[ weapname ] = self.owner; + player.tookweaponfrom[ weapname ].previousowner = self.owner; player.pickedupweaponkills[ weapname ] = 0; } - else } + else + { + player.tookweaponfrom[ weapname ] = undefined; + player.pickedupweaponkills[ weapname ] = undefined; + } +} -itemremoveammofromaltmodes() +itemremoveammofromaltmodes() //checked matches cerberus output { origweapname = self getitemweaponname(); curweapname = weaponaltweaponname( origweapname ); @@ -573,7 +607,7 @@ itemremoveammofromaltmodes() } } -dropoffhand() +dropoffhand() //checked partially changed to match cerberus output did not change while loop to for loop see github for more info { grenadetypes = []; index = 0; @@ -584,21 +618,18 @@ dropoffhand() index++; continue; } - else count = self getammocount( grenadetypes[ index ] ); + count = self getammocount( grenadetypes[ index ] ); if ( !count ) { index++; continue; } - else - { - self dropitem( grenadetypes[ index ] ); - } + self dropitem( grenadetypes[ index ] ); index++; } } -watchweaponusage() +watchweaponusage() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -627,48 +658,50 @@ watchweaponusage() self thread updatemagshots( curweapon ); } } - switch( weaponclass( curweapon ) ) + switch ( weaponclass( curweapon ) ) { case "rifle": + if ( curweapon == "crossbow_mp" ) + { + level.globalcrossbowfired++; + } if ( curweapon == "crossbow_explosive_mp" ) { level.globalcrossbowfired++; self addweaponstat( curweapon, "shots", 1 ); self thread begingrenadetracking(); break; - continue; - } - else case "mg": + } + case "mg": case "pistol": + case "pistol spread": case "smg": case "spread": self trackweaponfire( curweapon ); level.globalshotsfired++; break; - continue; case "grenade": case "rocketlauncher": self addweaponstat( curweapon, "shots", 1 ); break; - continue; default: - } + break; } } } -updatemagshots( weaponname ) +updatemagshots( weaponname ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); self endon( "updateMagShots_" + weaponname ); self.hitsthismag[ weaponname ]--; - wait 0,05; + wait 0.05; self.hitsthismag[ weaponname ] = weaponclipsize( weaponname ); } -checkhitsthismag( weaponname ) +checkhitsthismag( weaponname ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -685,10 +718,10 @@ checkhitsthismag( weaponname ) } } -trackweaponfire( curweapon ) +trackweaponfire( curweapon ) //checked changed to match cerberus output { shotsfired = 1; - if ( isDefined( self.laststandparams ) && self.laststandparams.laststandstarttime == getTime() ) + if ( isdefined( self.laststandparams ) && self.laststandparams.laststandstarttime == GetTime() ) { self.hits = 0; return; @@ -700,7 +733,7 @@ trackweaponfire( curweapon ) } self addweaponstat( curweapon, "shots", shotsfired ); self addweaponstat( curweapon, "hits", self.hits ); - if ( isDefined( level.add_client_stat ) ) + if ( isdefined( level.add_client_stat ) ) { self [[ level.add_client_stat ]]( "total_shots", shotsfired ); self [[ level.add_client_stat ]]( "hits", self.hits ); @@ -720,9 +753,9 @@ trackweaponfire( curweapon ) pixendevent(); } -checkhit( sweapon ) +checkhit( sweapon ) //checked changed to match cerberus output { - switch( weaponclass( sweapon ) ) + switch ( weaponclass( sweapon ) ) { case "mg": case "pistol": @@ -735,20 +768,20 @@ checkhit( sweapon ) self.hits = 1; break; default: - } - waittillframeend; - if ( isDefined( self.hitsthismag ) && isDefined( self.hitsthismag[ sweapon ] ) ) - { - self thread checkhitsthismag( sweapon ); - } - if ( sweapon != "bazooka_mp" || isstrstart( sweapon, "t34" ) && isstrstart( sweapon, "panzer" ) ) - { - self addweaponstat( sweapon, "hits", 1 ); - } + break; + } + waittillframeend; + if ( isDefined( self ) && isDefined( self.hitsthismag ) && isDefined( self.hitsthismag[ sweapon ] ) ) + { + self thread checkhitsthismag( sweapon ); + } + if(sweapon == "bazooka_mp" || isstrstart(sweapon, "t34") || isstrstart(sweapon, "panzer")) + { + self addweaponstat(sweapon, "hits", 1); } } -watchgrenadeusage() +watchgrenadeusage() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -773,7 +806,7 @@ watchgrenadeusage() } } -watchmissileusage() +watchmissileusage() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -782,72 +815,73 @@ watchmissileusage() { self waittill( "missile_fire", missile, weapon_name ); self.hasdonecombat = 1; + /* /# assert( isDefined( missile ) ); #/ + */ level.missileentities[ level.missileentities.size ] = missile; missile thread watchmissiledeath(); } } -watchmissiledeath() +watchmissiledeath() //checked matches cerberus output { self waittill( "death" ); arrayremovevalue( level.missileentities, self ); } -dropweaponstoground( origin, radius ) +dropweaponstoground( origin, radius ) //checked changed to match cerberus output { weapons = getdroppedweapons(); - i = 0; - while ( i < weapons.size ) + for ( i = 0; i < weapons.size; i++ ) { if ( distancesquared( origin, weapons[ i ].origin ) < ( radius * radius ) ) { - trace = bullettrace( weapons[ i ].origin, weapons[ i ].origin + vectorScale( ( 0, 0, 1 ), 2000 ), 0, weapons[ i ] ); + trace = bullettrace( weapons[ i ].origin, weapons[ i ].origin + vectorScale( ( 0, 0, -1 ), 2000 ), 0, weapons[ i ] ); weapons[ i ].origin = trace[ "position" ]; } - i++; } } -dropgrenadestoground( origin, radius ) +dropgrenadestoground( origin, radius ) //checked changed to match cerberus output { grenades = getentarray( "grenade", "classname" ); - i = 0; - while ( i < grenades.size ) + for ( i = 0; i < grenades.size; i++ ) { if ( distancesquared( origin, grenades[ i ].origin ) < ( radius * radius ) ) { - grenades[ i ] launch( vectorScale( ( 0, 0, 1 ), 5 ) ); + grenades[ i ] launch( vectorScale( ( 1, 1, 1 ), 5 ) ); } - i++; } } -watchgrenadecancel() +watchgrenadecancel() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); self endon( "grenade_fire" ); - self waittill( "weapon_change" ); + self waittill( "weapon_change", weapon ); self.throwinggrenade = 0; self.gotpullbacknotify = 0; } -begingrenadetracking() +begingrenadetracking() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); + self endon( "grenade_throw_cancelled" ); starttime = getTime(); self thread watchgrenadecancel(); self waittill( "grenade_fire", grenade, weaponname ); + /* /# assert( isDefined( grenade ) ); #/ + */ level.missileentities[ level.missileentities.size ] = grenade; grenade thread watchmissiledeath(); - if ( grenade maps/mp/gametypes_zm/_weaponobjects::ishacked() ) + if ( grenade maps/mp/_utility::ishacked() ) { return; } @@ -861,24 +895,23 @@ begingrenadetracking() case "frag_grenade_zm": case "sticky_grenade_zm": self addweaponstat( weaponname, "used", 1 ); - case "explosive_bolt_zm": - grenade.originalowner = self; - break; - } - if ( weaponname == "sticky_grenade_zm" || weaponname == "frag_grenade_zm" ) - { - grenade setteam( self.pers[ "team" ] ); - grenade setowner( self ); - } - self.throwinggrenade = 0; + case "explosive_bolt_zm": + grenade.originalowner = self; + break; } + if ( weaponname == "sticky_grenade_zm" || weaponname == "frag_grenade_zm" ) + { + grenade setteam( self.pers[ "team" ] ); + grenade setowner( self ); + } + self.throwinggrenade = 0; } -beginothergrenadetracking() +beginothergrenadetracking() //checked matches cerberus output { } -checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) +checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) //checked matches cerberus output { self endon( "death" ); self waittill( "stuck_to_player", player ); @@ -890,15 +923,12 @@ checkstucktoplayer( deleteonteamchange, awardscoreevent, weaponname ) } if ( awardscoreevent && isDefined( self.originalowner ) ) { - if ( self.originalowner isenemyplayer( player ) ) - { - } } self.stucktoplayer = player; } } -checkhatchetbounce() +checkhatchetbounce() //checked matches cerberus output { self endon( "stuck_to_player" ); self endon( "death" ); @@ -906,7 +936,7 @@ checkhatchetbounce() self.bounced = 1; } -stucktoplayerteamchange( player ) +stucktoplayerteamchange( player ) //checked matches cerberus output { self endon( "death" ); player endon( "disconnect" ); @@ -922,7 +952,7 @@ stucktoplayerteamchange( player ) } } -beginsatcheltracking() +beginsatcheltracking() //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -930,7 +960,7 @@ beginsatcheltracking() self.throwinggrenade = 0; } -watchforthrowbacks() +watchforthrowbacks() //checked changed to match cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -942,43 +972,37 @@ watchforthrowbacks() self.gotpullbacknotify = 0; continue; } - else if ( !issubstr( weapname, "frag_" ) ) + if ( !issubstr( weapname, "frag_" ) ) { continue; } - else - { - grenade.threwback = 1; - grenade.originalowner = self; - } + grenade.threwback = 1; + grenade.originalowner = self; } } -registergrenadelauncherduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) +registergrenadelauncherduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) //checked changed to match cerberus output { dvarstring = "scr_" + dvarstring + "_grenadeLauncherDudTime"; - if ( getDvar( dvarstring ) == "" ) + if ( GetDvar( dvarstring ) == "" ) { setdvar( dvarstring, defaultvalue ); } - if ( getDvarInt( dvarstring ) > maxvalue ) + if ( GetDvarInt( dvarstring ) > maxvalue ) { setdvar( dvarstring, maxvalue ); } - else + else if ( GetDvarInt( dvarstring ) < minvalue ) { - if ( getDvarInt( dvarstring ) < minvalue ) - { - setdvar( dvarstring, minvalue ); - } + setdvar( dvarstring, minvalue ); } level.grenadelauncherdudtimedvar = dvarstring; level.grenadelauncherdudtimemin = minvalue; level.grenadelauncherdudtimemax = maxvalue; - level.grenadelauncherdudtime = getDvarInt( level.grenadelauncherdudtimedvar ); + level.grenadelauncherdudtime = GetDvarInt( level.grenadelauncherdudtimedvar ); } -registerthrowngrenadeduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) +registerthrowngrenadeduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) //checked changed to match cerberus output { dvarstring = "scr_" + dvarstring + "_thrownGrenadeDudTime"; if ( getDvar( dvarstring ) == "" ) @@ -989,12 +1013,9 @@ registerthrowngrenadeduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) { setdvar( dvarstring, maxvalue ); } - else + else if ( getDvarInt( dvarstring ) < minvalue ) { - if ( getDvarInt( dvarstring ) < minvalue ) - { - setdvar( dvarstring, minvalue ); - } + setdvar( dvarstring, minvalue ); } level.throwngrenadedudtimedvar = dvarstring; level.throwngrenadedudtimemin = minvalue; @@ -1002,7 +1023,7 @@ registerthrowngrenadeduddvar( dvarstring, defaultvalue, minvalue, maxvalue ) level.throwngrenadedudtime = getDvarInt( level.throwngrenadedudtimedvar ); } -registerkillstreakdelay( dvarstring, defaultvalue, minvalue, maxvalue ) +registerkillstreakdelay( dvarstring, defaultvalue, minvalue, maxvalue ) //checked changed to match cerberus output { dvarstring = "scr_" + dvarstring + "_killstreakDelayTime"; if ( getDvar( dvarstring ) == "" ) @@ -1013,17 +1034,14 @@ registerkillstreakdelay( dvarstring, defaultvalue, minvalue, maxvalue ) { setdvar( dvarstring, maxvalue ); } - else + else if ( getDvarInt( dvarstring ) < minvalue ) { - if ( getDvarInt( dvarstring ) < minvalue ) - { - setdvar( dvarstring, minvalue ); - } + setdvar( dvarstring, minvalue ); } level.killstreakrounddelay = getDvarInt( dvarstring ); } -turngrenadeintoadud( weapname, isthrowngrenade, player ) +turngrenadeintoadud( weapname, isthrowngrenade, player ) //checked changed to match cerberus output { if ( level.grenadelauncherdudtime >= ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) && !isthrowngrenade ) { @@ -1038,29 +1056,26 @@ turngrenadeintoadud( weapname, isthrowngrenade, player ) self makegrenadedud(); } } - else + else if ( level.throwngrenadedudtime >= ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) && isthrowngrenade ) { - if ( level.throwngrenadedudtime >= ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) && isthrowngrenade ) + if ( weapname == "frag_grenade_mp" || weapname == "sticky_grenade_mp" ) { - if ( weapname == "frag_grenade_mp" || weapname == "sticky_grenade_mp" ) + if ( isDefined( player.suicide ) && player.suicide ) { - if ( isDefined( player.suicide ) && player.suicide ) - { - return; - } - timeleft = int( level.throwngrenadedudtime - ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) ); - if ( !timeleft ) - { - timeleft = 1; - } - player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); - self makegrenadedud(); + return; } + timeleft = int( level.throwngrenadedudtime - ( maps/mp/gametypes_zm/_globallogic_utils::gettimepassed() / 1000 ) ); + if ( !timeleft ) + { + timeleft = 1; + } + player iprintlnbold( &"MP_GRENADE_UNAVAILABLE_FOR_N", " " + timeleft + " ", &"EXE_SECONDS" ); + self makegrenadedud(); } } } -watchforgrenadeduds() +watchforgrenadeduds() //checked matches cerberus output { self endon( "spawned_player" ); self endon( "disconnect" ); @@ -1071,7 +1086,7 @@ watchforgrenadeduds() } } -watchforgrenadelauncherduds() +watchforgrenadelauncherduds() //checked matches cerberus output { self endon( "spawned_player" ); self endon( "disconnect" ); @@ -1082,7 +1097,7 @@ watchforgrenadelauncherduds() } } -getdamageableents( pos, radius, dolos, startradius ) +getdamageableents( pos, radius, dolos, startradius ) //checked partially changed to match cerberus output did not use continue in for loop and foreach see github for more info { ents = []; if ( !isDefined( dolos ) ) @@ -1094,13 +1109,10 @@ getdamageableents( pos, radius, dolos, startradius ) startradius = 0; } players = level.players; - i = 0; - while ( i < players.size ) + for ( i = 0; i < players.size; i++ ) { if ( !isalive( players[ i ] ) || players[ i ].sessionstate != "playing" ) { - i++; - continue; } else { @@ -1118,11 +1130,9 @@ getdamageableents( pos, radius, dolos, startradius ) ents[ ents.size ] = newent; } } - i++; } grenades = getentarray( "grenade", "classname" ); - i = 0; - while ( i < grenades.size ) + for ( i = 0; i < grenades.size; i++ ) { entpos = grenades[ i ].origin; distsq = distancesquared( pos, entpos ); @@ -1137,11 +1147,9 @@ getdamageableents( pos, radius, dolos, startradius ) newent.damagecenter = entpos; ents[ ents.size ] = newent; } - i++; } destructibles = getentarray( "destructible", "targetname" ); - i = 0; - while ( i < destructibles.size ) + for ( i = 0; i < destructibles.size; i++ ) { entpos = destructibles[ i ].origin; distsq = distancesquared( pos, entpos ); @@ -1156,11 +1164,9 @@ getdamageableents( pos, radius, dolos, startradius ) newent.damagecenter = entpos; ents[ ents.size ] = newent; } - i++; } destructables = getentarray( "destructable", "targetname" ); - i = 0; - while ( i < destructables.size ) + for ( i = 0; i < destructables.size; i++ ) { entpos = destructables[ i ].origin; distsq = distancesquared( pos, entpos ); @@ -1175,18 +1181,17 @@ getdamageableents( pos, radius, dolos, startradius ) newent.damagecenter = entpos; ents[ ents.size ] = newent; } - i++; } return ents; } -weapondamagetracepassed( from, to, startradius, ignore ) +weapondamagetracepassed( from, to, startradius, ignore ) //checked matches cerberus output { trace = weapondamagetrace( from, to, startradius, ignore ); return trace[ "fraction" ] == 1; } -weapondamagetrace( from, to, startradius, ignore ) +weapondamagetrace( from, to, startradius, ignore ) //checked changed to match cerberus output { midpos = undefined; diff = to - from; @@ -1197,22 +1202,22 @@ weapondamagetrace( from, to, startradius, ignore ) dir = vectornormalize( diff ); midpos = from + ( dir[ 0 ] * startradius, dir[ 1 ] * startradius, dir[ 2 ] * startradius ); trace = bullettrace( midpos, to, 0, ignore ); - if ( getDvarInt( #"0A1C40B1" ) != 0 ) + if ( getDvarInt( "scr_damage_debug" ) != 0 ) { if ( trace[ "fraction" ] == 1 ) { - thread debugline( midpos, to, ( 0, 0, 1 ) ); + thread debugline( midpos, to, ( 1, 1, 1 ) ); } else { - thread debugline( midpos, trace[ "position" ], ( 1, 0,9, 0,8 ) ); - thread debugline( trace[ "position" ], to, ( 1, 0,4, 0,3 ) ); + thread debugline( midpos, trace[ "position" ], ( 1, 0.9, 0.8 ) ); + thread debugline( trace[ "position" ], to, ( 1, 0.4, 0.3 ) ); } } return trace; } -damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) +damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, damagedir ) //checked does not match cerberus output matches beta dump { if ( self.isplayer ) { @@ -1235,24 +1240,24 @@ damageent( einflictor, eattacker, idamage, smeansofdeath, sweapon, damagepos, da { return; } - self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 1 ), ( 0, 0, 1 ), "mod_explosive", "", "" ); + self.entity damage_notify_wrapper( idamage, eattacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "mod_explosive", "", "" ); } } -debugline( a, b, color ) +debugline( a, b, color ) //checked changed to match cerberus output { + /* /# - i = 0; - while ( i < 600 ) + for ( i = 0; i < 600; i++ ) { line( a, b, color ); - wait 0,05; - i++; + wait 0.05; #/ } + */ } -onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) +onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -1262,7 +1267,7 @@ onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) radius = 512; if ( self == eattacker ) { - radius *= 0,5; + radius *= 0.5; } scale = 1 - ( distance( self.origin, einflictor.origin ) / radius ); if ( scale < 0 ) @@ -1270,10 +1275,10 @@ onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) scale = 0; } time = 2 + ( 4 * scale ); - wait 0,05; + wait 0.05; if ( self hasperk( "specialty_stunprotection" ) ) { - time *= 0,1; + time *= 0.1; } self thread playconcussionsound( time ); if ( self mayapplyscreeneffect() ) @@ -1288,7 +1293,7 @@ onweapondamage( eattacker, einflictor, sweapon, meansofdeath, damage ) } } -playconcussionsound( duration ) +playconcussionsound( duration ) //checked matches cerberus output { self endon( "death" ); self endon( "disconnect" ); @@ -1298,84 +1303,78 @@ playconcussionsound( duration ) concussionsound thread deleteentonownerdeath( self ); concussionsound playsound( "" ); concussionsound playloopsound( "" ); - if ( duration > 0,5 ) + if ( duration > 0.5 ) { - wait ( duration - 0,5 ); + wait ( duration - 0.5 ); } concussionsound playsound( "" ); - concussionsound stoploopsound( 0,5 ); - wait 0,5; + concussionsound stoploopsound( 0.5 ); + wait 0.5; concussionsound notify( "delete" ); concussionsound delete(); } -deleteentonownerdeath( owner ) +deleteentonownerdeath( owner ) //checked matches cerberus output { self endon( "delete" ); owner waittill( "death" ); self delete(); } -monitor_dog_special_grenades() +monitor_dog_special_grenades() //checked matches cerberus output { } -isprimaryweapon( weaponname ) +isprimaryweapon( weaponname ) //checked matches cerberus output { return isDefined( level.primary_weapon_array[ weaponname ] ); } -issidearm( weaponname ) +issidearm( weaponname ) //checked matches cerberus output { return isDefined( level.side_arm_array[ weaponname ] ); } -isinventory( weaponname ) +isinventory( weaponname ) //checked matches cerberus output { return isDefined( level.inventory_array[ weaponname ] ); } -isgrenade( weaponname ) +isgrenade( weaponname ) //checked matches cerberus output { return isDefined( level.grenade_array[ weaponname ] ); } -isexplosivebulletweapon( weaponname ) +isexplosivebulletweapon( weaponname ) //checked changed to match cerberus output { - if ( weaponname != "chopper_minigun_mp" && weaponname != "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" && weaponname == "cobra_20mm_comlink_mp" ) + if ( weaponname == "chopper_minigun_mp" || weaponname == "cobra_20mm_mp" || weaponname == "littlebird_guard_minigun_mp" || weaponname == "cobra_20mm_comlink_mp" ) { return 1; } return 0; } -getweaponclass_array( current ) +getweaponclass_array( current ) //checked changed to match cerberus output { if ( isprimaryweapon( current ) ) { return level.primary_weapon_array; } + else if ( issidearm( current ) ) + { + return level.side_arm_array; + } + else if ( isgrenade( current ) ) + { + return level.grenade_array; + } else { - if ( issidearm( current ) ) - { - return level.side_arm_array; - } - else - { - if ( isgrenade( current ) ) - { - return level.grenade_array; - } - else - { - return level.inventory_array; - } - } + return level.inventory_array; } } -updatestowedweapon() +updatestowedweapon() //checked partially changed to match cerberus output did not use for loop see github for more info { self endon( "spawned" ); self endon( "killed_player" ); @@ -1405,57 +1404,53 @@ updatestowedweapon() case "zipline_mp": idx++; continue; - default: - } - if ( isprimaryweapon( weaponslist[ idx ] ) ) - { - self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else if ( issidearm( weaponslist[ idx ] ) ) - { - self.weapon_array_sidearm[ self.weapon_array_sidearm.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else if ( isgrenade( weaponslist[ idx ] ) ) - { - self.weapon_array_grenade[ self.weapon_array_grenade.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else if ( isinventory( weaponslist[ idx ] ) ) - { - self.weapon_array_inventory[ self.weapon_array_inventory.size ] = weaponslist[ idx ]; - idx++; - continue; - } - else - { - if ( isweaponprimary( weaponslist[ idx ] ) ) - { - self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; - } - } - idx++; - } - detach_all_weapons(); - stow_on_back(); - stow_on_hip(); + default: + break; } + if ( isprimaryweapon( weaponslist[ idx ] ) ) + { + self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; + idx++; + continue; + } + if ( issidearm( weaponslist[ idx ] ) ) + { + self.weapon_array_sidearm[ self.weapon_array_sidearm.size ] = weaponslist[ idx ]; + idx++; + continue; + } + if ( isgrenade( weaponslist[ idx ] ) ) + { + self.weapon_array_grenade[ self.weapon_array_grenade.size ] = weaponslist[ idx ]; + idx++; + continue; + } + if ( isinventory( weaponslist[ idx ] ) ) + { + self.weapon_array_inventory[ self.weapon_array_inventory.size ] = weaponslist[ idx ]; + idx++; + continue; + } + if ( isweaponprimary( weaponslist[ idx ] ) ) + { + self.weapon_array_primary[ self.weapon_array_primary.size ] = weaponslist[ idx ]; + } + idx++; } + detach_all_weapons(); + stow_on_back(); + stow_on_hip(); } } -forcestowedweaponupdate() +forcestowedweaponupdate() //checked matches cerberus output { detach_all_weapons(); stow_on_back(); stow_on_hip(); } -detachcarryobjectmodel() +detachcarryobjectmodel() //checked matches cerberus output { if ( isDefined( self.carryobject ) && isDefined( self.carryobject maps/mp/gametypes_zm/_gameobjects::getvisiblecarriermodel() ) ) { @@ -1467,7 +1462,7 @@ detachcarryobjectmodel() } } -detach_all_weapons() +detach_all_weapons() //checked matches cerberus output { if ( isDefined( self.tag_stowed_back ) ) { @@ -1495,7 +1490,7 @@ detach_all_weapons() } } -non_stowed_weapon( weapon ) +non_stowed_weapon( weapon ) //checked matches cerberus output { if ( self hasweapon( "knife_ballistic_mp" ) && weapon != "knife_ballistic_mp" ) { @@ -1508,9 +1503,10 @@ non_stowed_weapon( weapon ) return 0; } -stow_on_back( current ) +stow_on_back( current ) //checked partially changed to match cerberus output did not use for loop see github for more info { current = self getcurrentweapon(); + currentalt = self getcurrentweaponaltweapon(); self.tag_stowed_back = undefined; weaponoptions = 0; index_weapon = ""; @@ -1520,77 +1516,49 @@ stow_on_back( current ) self attach( self.tag_stowed_back, "tag_stowed_back", 1 ); return; } - else + if ( non_stowed_weapon( current ) || self.hasriotshield ) { - if ( non_stowed_weapon( current ) || self.hasriotshield ) + return; + } + if ( current != "none" ) + { + if ( issubstr( current, "gl_" ) || issubstr( temp_index_weapon, "gl_" ) || issubstr( current, "mk_" ) || issubstr( temp_index_weapon, "mk_" ) || issubstr( current, "dualoptic_" ) || issubstr( temp_index_weapon, "dualoptic_" ) || issubstr( current, "ft_" ) || issubstr( temp_index_weapon, "ft_" ) ) { - return; + index_weapon_tok = strtok( temp_index_weapon, "_" ); + current_tok = strtok( current, "_" ); + for ( i = 0; i < index_weapon_tok.size; i++ ) + { + if ( !issubstr( current, index_weapon_tok[ i ] ) || index_weapon_tok.size != current_tok.size ) + { + i = 0; + break; + } + } + if ( i == index_weapon_tok.size ) + { + continue; + } + } + index_weapon = temp_index_weapon; + /* +/# + assert( isDefined( self.curclass ), "Player missing current class" ); +#/ + */ + if ( issubstr( index_weapon, self.pers[ "primaryWeapon" ] ) && issubstr( self.curclass, "CUSTOM" ) ) + { + self.tag_stowed_back = getweaponmodel( index_weapon ); } else { - idx = 0; - while ( idx < self.weapon_array_primary.size ) - { - temp_index_weapon = self.weapon_array_primary[ idx ]; -/# - assert( isDefined( temp_index_weapon ), "Primary weapon list corrupted." ); -#/ - if ( temp_index_weapon == current ) - { - idx++; - continue; - } - else if ( current == "none" ) - { - idx++; - continue; - } - else if ( !issubstr( current, "gl_" ) && !issubstr( temp_index_weapon, "gl_" ) && !issubstr( current, "mk_" ) && !issubstr( temp_index_weapon, "mk_" ) && !issubstr( current, "dualoptic_" ) && !issubstr( temp_index_weapon, "dualoptic_" ) || issubstr( current, "ft_" ) && issubstr( temp_index_weapon, "ft_" ) ) - { - index_weapon_tok = strtok( temp_index_weapon, "_" ); - current_tok = strtok( current, "_" ); - i = 0; - while ( i < index_weapon_tok.size ) - { - if ( !issubstr( current, index_weapon_tok[ i ] ) || index_weapon_tok.size != current_tok.size ) - { - i = 0; - break; - } - else - { - i++; - } - } - if ( i == index_weapon_tok.size ) - { - idx++; - continue; - } - } - else - { - index_weapon = temp_index_weapon; -/# - assert( isDefined( self.curclass ), "Player missing current class" ); -#/ - if ( issubstr( index_weapon, self.pers[ "primaryWeapon" ] ) && issubstr( self.curclass, "CUSTOM" ) ) - { - self.tag_stowed_back = getweaponmodel( index_weapon, self getloadoutitem( self.class_num, "primarycamo" ) ); - } - else - { - stowedmodelindex = getweaponstowedmodel( index_weapon ); - self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); - } - if ( issubstr( self.curclass, "CUSTOM" ) ) - { - weaponoptions = self calcweaponoptions( self.class_num, 0 ); - } - } - idx++; - } + stowedmodelindex = getweaponstowedmodel( index_weapon ); + self.tag_stowed_back = getweaponmodel( index_weapon, stowedmodelindex ); } + if ( issubstr( self.curclass, "CUSTOM" ) ) + { + weaponoptions = self calcweaponoptions( self.class_num, 0 ); + } + idx++; } if ( !isDefined( self.tag_stowed_back ) ) { @@ -1599,7 +1567,7 @@ stow_on_back( current ) self setstowedweapon( index_weapon ); } -stow_on_hip() +stow_on_hip() //checked partially changed to match cerberus output did not use for loop see github for more info { current = self getcurrentweapon(); self.tag_stowed_hip = undefined; @@ -1611,15 +1579,12 @@ stow_on_hip() idx++; continue; } - else if ( !self getweaponammostock( self.weapon_array_inventory[ idx ] ) ) + if ( !self getweaponammostock( self.weapon_array_inventory[ idx ] ) ) { idx++; continue; } - else - { - self.tag_stowed_hip = self.weapon_array_inventory[ idx ]; - } + self.tag_stowed_hip = self.weapon_array_inventory[ idx ]; idx++; } if ( !isDefined( self.tag_stowed_hip ) ) @@ -1635,7 +1600,7 @@ stow_on_hip() self attach( weapon_model, "tag_stowed_hip_rear", 1 ); } -stow_inventory( inventories, current ) +stow_inventory( inventories, current ) //checked matches cerberus output { if ( isDefined( self.inventory_tag ) ) { @@ -1655,12 +1620,12 @@ stow_inventory( inventories, current ) } } -weapons_get_dvar_int( dvar, def ) +weapons_get_dvar_int( dvar, def ) //checked matches cerberus output { return int( weapons_get_dvar( dvar, def ) ); } -weapons_get_dvar( dvar, def ) +weapons_get_dvar( dvar, def ) //checked matches cerberus output { if ( getDvar( dvar ) != "" ) { @@ -1673,7 +1638,7 @@ weapons_get_dvar( dvar, def ) } } -player_is_driver() +player_is_driver() //checked matches cerberus output { if ( !isalive( self ) ) { @@ -1695,14 +1660,16 @@ player_is_driver() return 0; } -loadout_get_class_num() +loadout_get_class_num() //checked matches cerberus output { + /* /# assert( isplayer( self ) ); #/ /# assert( isDefined( self.class ) ); #/ + */ if ( isDefined( level.classtoclassnum[ self.class ] ) ) { return level.classtoclassnum[ self.class ]; @@ -1715,51 +1682,60 @@ loadout_get_class_num() return class_num; } -loadout_get_offhand_weapon( stat ) +loadout_get_offhand_weapon( stat ) //checked matches cerberus output { if ( isDefined( level.givecustomloadout ) ) { return "weapon_null_mp"; } - class_num = self loadout_get_class_num(); - index = 0; - if ( isDefined( level.tbl_weaponids[ index ] ) && isDefined( level.tbl_weaponids[ index ][ "reference" ] ) ) + /* +/# + assert( isDefined( self.class_num ) ); +#/ + */ + if ( isDefined( self.class_num ) ) { - return level.tbl_weaponids[ index ][ "reference" ] + "_mp"; + index = self maps/mp/gametypes_zm/_class::getloadoutitemfromddlstats( self.class_num, stat ); + if ( isDefined( level.tbl_weaponids[ index ] ) && isDefined( level.tbl_weaponids[ index ][ "reference" ] ) ) + { + return level.tbl_weaponids[ index ][ "reference" ] + "_mp"; + } } return "weapon_null_mp"; } -loadout_get_offhand_count( stat ) +loadout_get_offhand_count( stat ) //checked matches cerberus output { + count = 0; if ( isDefined( level.givecustomloadout ) ) { return 0; } - class_num = self loadout_get_class_num(); - count = 0; + /* +/# + assert( isDefined( self.class_num ) ); +#/ + */ + if ( isDefined( self.class_num ) ) + { + count = self maps/mp/gametypes_zm/_class::getloadoutitemfromddlstats( self.class_num, stat ); + } return count; } -scavenger_think() +scavenger_think() //checked partially changed to match cerberus output did not use for loops see github for more info { self endon( "death" ); self waittill( "scavenger", player ); primary_weapons = player getweaponslistprimaries(); offhand_weapons_and_alts = array_exclude( player getweaponslist( 1 ), primary_weapons ); arrayremovevalue( offhand_weapons_and_alts, "knife_mp" ); + offhand_weapons_and_alts = array_reverse( offhand_weapons_and_alts ); player playsound( "fly_equipment_pickup_npc" ); player playlocalsound( "fly_equipment_pickup_plr" ); player.scavenger_icon.alpha = 1; player.scavenger_icon fadeovertime( 2,5 ); player.scavenger_icon.alpha = 0; - scavenger_lethal_proc = 1; - scavenger_tactical_proc = 1; - if ( !isDefined( player.scavenger_lethal_proc ) ) - { - player.scavenger_lethal_proc = 0; - player.scavenger_tactical_proc = 0; - } loadout_primary = player loadout_get_offhand_weapon( "primarygrenade" ); loadout_primary_count = player loadout_get_offhand_count( "primarygrenadecount" ); loadout_secondary = player loadout_get_offhand_weapon( "specialgrenade" ); @@ -1770,160 +1746,100 @@ scavenger_think() weapon = offhand_weapons_and_alts[ i ]; if ( ishackweapon( weapon ) ) { - break; + i++; + continue; + } + switch ( weapon ) + { + case "satchel_charge_mp": + if ( player maps/mp/gametypes_zm/_weaponobjects::anyobjectsinworld( weapon ) ) + { + break; + } + case "bouncingbetty_mp": + case "claymore_mp": + case "frag_grenade_mp": + case "hatchet_mp": + case "sticky_grenade_mp": + if ( isDefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) + { + break; + } + case "concussion_grenade_mp": + case "emp_grenade_mp": + case "flash_grenade_mp": + case "nightingale_mp": + case "pda_hack_mp": + case "proximity_grenade_mp": + case "sensor_grenade_mp": + case "tabun_gas_mp": + case "trophy_system_mp": + case "willy_pete_mp": + if ( isDefined( player.grenadetypesecondarycount ) && player.grenadetypesecondarycount < 1 ) + { + break; + } + maxammo = weaponmaxammo( weapon ); + stock = player getweaponammostock( weapon ); + if ( isDefined( level.customloadoutscavenge ) ) + { + maxammo = self [[ level.customloadoutscavenge ]]( weapon ); + } + else if ( weapon == loadout_primary ) + { + maxammo = loadout_primary_count; + } + else if ( weapon == loadout_secondary ) + { + maxammo = loadout_secondary_count; + } + if ( stock < maxammo ) + { + ammo = stock + 1; + if ( ammo > maxammo ) + { + ammo = maxammo; + } + player setweaponammostock( weapon, ammo ); + player.scavenged = 1; + player thread maps/mp/_challenges::scavengedgrenade(); + } + break; + } i++; - continue; } - else switch( weapon ) + i = 0; + while ( i < primary_weapons.size ) { - case "bouncingbetty_mp": - case "claymore_mp": - case "frag_grenade_mp": - case "hatchet_mp": - case "satchel_charge_mp": - case "sticky_grenade_mp": - if ( isDefined( player.grenadetypeprimarycount ) && player.grenadetypeprimarycount < 1 ) - { - break; + weapon = primary_weapons[ i ]; + if ( ishackweapon( weapon ) || weapon == "kniferang_mp" ) + { i++; continue; } - else - { - if ( player getweaponammostock( weapon ) != loadout_primary_count ) - { - if ( player.scavenger_lethal_proc < scavenger_lethal_proc ) - { - player.scavenger_lethal_proc++; - break; - i++; - continue; - } - else player.scavenger_lethal_proc = 0; - player.scavenger_tactical_proc = 0; - } - case "concussion_grenade_mp": - case "emp_grenade_mp": - case "flash_grenade_mp": - case "nightingale_mp": - case "pda_hack_mp": - case "proximity_grenade_mp": - case "sensor_grenade_mp": - case "tabun_gas_mp": - case "trophy_system_mp": - case "willy_pete_mp": - if ( isDefined( player.grenadetypesecondarycount ) && player.grenadetypesecondarycount < 1 ) - { - break; - i++; - continue; - } - else - { - if ( weapon == loadout_secondary && player getweaponammostock( weapon ) != loadout_secondary_count ) - { - if ( player.scavenger_tactical_proc < scavenger_tactical_proc ) - { - player.scavenger_tactical_proc++; - break; - i++; - continue; - } - else player.scavenger_tactical_proc = 0; - player.scavenger_lethal_proc = 0; - } - maxammo = weaponmaxammo( weapon ); stock = player getweaponammostock( weapon ); - if ( isDefined( level.customloadoutscavenge ) ) + start = player getfractionstartammo( weapon ); + clip = weaponclipsize( weapon ); + clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 1 ); + clip = int( clip ); + maxammo = weaponmaxammo( weapon ); + if ( stock < ( maxammo - clip ) ) { - maxammo = self [[ level.customloadoutscavenge ]]( weapon ); - } - else if ( weapon == loadout_primary ) - { - maxammo = loadout_primary_count; - } - else - { - if ( weapon == loadout_secondary ) - { - maxammo = loadout_secondary_count; - } - } - if ( stock < maxammo ) - { - ammo = stock + 1; - if ( ammo > maxammo ) - { - ammo = maxammo; - } + ammo = stock + clip; player setweaponammostock( weapon, ammo ); - player thread maps/mp/_challenges::scavengedgrenade(); + player.scavenged = 1; + exit_early = 1; + i++; + continue; } - break; - i++; - continue; - default: - if ( islauncherweapon( weapon ) ) - { - stock = player getweaponammostock( weapon ); - start = player getfractionstartammo( weapon ); - clip = weaponclipsize( weapon ); - clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 2 ); - clip = int( clip ); - maxammo = weaponmaxammo( weapon ); - if ( stock < ( maxammo - clip ) ) - { - ammo = stock + clip; - player setweaponammostock( weapon, ammo ); - break; - } - else - { - player setweaponammostock( weapon, maxammo ); - } - } - break; - i++; - continue; -} -} -} -i++; -} -i = 0; -while ( i < primary_weapons.size ) -{ -weapon = primary_weapons[ i ]; -if ( ishackweapon( weapon ) || weapon == "kniferang_mp" ) -{ -i++; -continue; -} -else -{ -stock = player getweaponammostock( weapon ); -start = player getfractionstartammo( weapon ); -clip = weaponclipsize( weapon ); -clip *= getdvarfloatdefault( "scavenger_clip_multiplier", 2 ); -clip = int( clip ); -maxammo = weaponmaxammo( weapon ); -if ( stock < ( maxammo - clip ) ) -{ -ammo = stock + clip; -player setweaponammostock( weapon, ammo ); -i++; -continue; -} -else -{ -player setweaponammostock( weapon, maxammo ); -} -} -i++; -} + player setweaponammostock( weapon, maxammo ); + player.scavenged = 1; + exit_early = 1; + i++; + } } -scavenger_hud_create() +scavenger_hud_create() //checked matches cerberus output { if ( level.wagermatch ) { @@ -1932,21 +1848,20 @@ scavenger_hud_create() self.scavenger_icon = newclienthudelem( self ); self.scavenger_icon.horzalign = "center"; self.scavenger_icon.vertalign = "middle"; - self.scavenger_icon.x = -16; - self.scavenger_icon.y = 16; self.scavenger_icon.alpha = 0; - width = 32; - height = 16; - if ( self issplitscreen() ) + width = 48; + height = 24; + if ( level.splitscreen ) { - width = int( width * 0,5 ); - height = int( height * 0,5 ); - self.scavenger_icon.x = -8; + width = int( width * 0.5 ); + height = int( height * 0.5 ); } + self.scavenger_icon.x = ( width * -1 ) / 2; + self.scavenger_icon.y = 16; self.scavenger_icon setshader( "hud_scavenger_pickup", width, height ); } -dropscavengerfordeath( attacker ) +dropscavengerfordeath( attacker ) //checked matches cerberus output { if ( sessionmodeiszombiesgame() ) { @@ -1968,14 +1883,18 @@ dropscavengerfordeath( attacker ) { item = self dropscavengeritem( "scavenger_item_hack_mp" ); } - else + else if ( isplayer( attacker ) && attacker hasperk( "specialty_scavenger" ) ) { item = self dropscavengeritem( "scavenger_item_mp" ); } + else + { + return; + } item thread scavenger_think(); } -addlimitedweapon( weapon_name, owner, num_drops ) +addlimitedweapon( weapon_name, owner, num_drops ) //checked matches cerberus output { limited_info = spawnstruct(); limited_info.weapon = weapon_name; @@ -1983,7 +1902,7 @@ addlimitedweapon( weapon_name, owner, num_drops ) owner.limited_info = limited_info; } -shoulddroplimitedweapon( weapon_name, owner ) +shoulddroplimitedweapon( weapon_name, owner ) //checked matches cerberus output { limited_info = owner.limited_info; if ( !isDefined( limited_info ) ) @@ -2001,7 +1920,7 @@ shoulddroplimitedweapon( weapon_name, owner ) return 1; } -droplimitedweapon( weapon_name, owner, item ) +droplimitedweapon( weapon_name, owner, item ) //checked matches cerberus output { limited_info = owner.limited_info; if ( !isDefined( limited_info ) ) @@ -2017,7 +1936,7 @@ droplimitedweapon( weapon_name, owner, item ) item thread limitedpickup( limited_info ); } -limitedpickup( limited_info ) +limitedpickup( limited_info ) //checked matches cerberus output { self endon( "death" ); self waittill( "trigger", player, item ); @@ -2027,3 +1946,5 @@ limitedpickup( limited_info ) } player.limited_info = limited_info; } + + diff --git a/patch_zm/readme.md b/patch_zm/readme.md index b836c34..b6f744b 100644 --- a/patch_zm/readme.md +++ b/patch_zm/readme.md @@ -59,6 +59,7 @@ patch_zm/maps/mp/gametypes_zm/_perplayer.gsc patch_zm/maps/mp/gametypes_zm/_serversettings.gsc patch_zm/maps/mp/gametypes_zm/_spectating.gsc patch_zm/maps/mp/gametypes_zm/_tweakables.gsc +patch_zm/maps/mp/gametypes_zm/_weapons.gsc patch_zm/maps/mp/gametypes_zm/_weapon_utils.gsc patch_zm/maps/mp/zombies/_zm_blockers.gsc patch_zm/maps/mp/zombies/_zm_buildables.gsc @@ -95,7 +96,6 @@ patch_zm/maps/mp/gametypes_zm/_hud_util.gsc patch_zm/maps/mp/gametypes_zm/_spawning.gsc patch_zm/maps/mp/gametypes_zm/_spawnlogic.gsc patch_zm/maps/mp/gametypes_zm/_weaponobjects.gsc -patch_zm/maps/mp/gametypes_zm/_weapons.gsc ``` ### The following scripts have not been checked using the proper debugging methods: ```