#OLD##I#QUERY FIRST SHOULD NOT HAPPEN type=1#I#QUERY FIRST SHOULD NOT HAPPEN type=1#I#QUERY FIRST SHOULD NOT HAPPEN type=1#I#QUERY FIRST SHOULD NOT HAPPEN type=1#I#QUERY FIRST SHOULD NOT HAPPEN type=1#I#QUERY FIRST SHOULD NOT HAPPEN type=1#I##I##I##I#
[SD] Enable multikill
[SD] Enable multikill
Heres the result: http://social.xfire.com/video/62f82e
Changes to make to your sd file:
in callback_startgametype:
PHP Code:
thread limitmultikill ();
This will fix an infinite issue which crashes the server in the vid
In callback_playerdamage, in the else of if(isPlayer(eAttacker) && (self != eAttacker) && (self.pers["team"] == eAttacker.pers["team"])):
PHP Code:
else { // Make sure at least one point of damage is done if( iDamage < 1 ) iDamage = 1 ; self makepassthroughbullet ( eInflictor , eAttacker , iDamage , iDFlags , sMeansOfDeath , sWeapon , vPoint , vDir , sHitLoc , psOffsetTime ); self finishPlayerDamage ( eInflictor , eAttacker , iDamage , iDFlags , sMeansOfDeath , sWeapon , vPoint , vDir , sHitLoc , psOffsetTime ); // Shellshock/Rumble self thread maps \ mp \ gametypes \ _shellshock :: shellshockOnDamage ( sMeansOfDeath , iDamage ); self playrumble ( "damage_heavy" ); }
spawnplayer:
PHP Code:
waittillframeend ; self notify ( "spawned_player" ); if( isdefined ( self . eyemarker )) self . eyemarker delete (); self . eyemarker = spawn ( "script_origin" , self geteye ()); self . eyemarker thread deleteonevent ( "disconect" , self ); self . eyemarker thread deleteonevent ( "spawned_player" , self ); self thread linkeyemarker ( self . eyemarker ); }
and finally, the additional functions:
PHP Code:
deleteonevent ( ev , us ) { us waittill ( ev ); if( isdefined ( self )) self delete (); } linkeyemarker ( marker ) { wait 0.05 ; if(! isdefined ( self ) || ! isdefined ( self . sessionstate ) || self . sessionstate != "playing" ) { if( isdefined ( marker )) marker delete (); return; } if( isdefined ( marker )) { marker . linked = true ; marker linkto ( self , "tag_eye" , ( 0 , 0 , 0 ), ( 0 , 0 , 0 )); } } makepassthroughbullet ( eInflictor , eAttacker , iDamage , iDFlags , sMeansOfDeath , sWeapon , vPoint , vDir , sHitLoc , psOffsetTime ) { if(! isdefined ( vDir ) || ! isdefined ( vPoint ) || ! isdefined ( eAttacker ) || ! isplayer ( eAttacker )) return; if(! isdefined ( sMeansOfDeath ) || sMeansOfDeath != "MOD_RIFLE_BULLET" ) return; trace = bullettrace ( vPoint , maps \ mp \ _utility :: vectorscale ( vDir , 1000 ) + vPoint , true , self ); sHitLoc = "none" ; if( isdefined ( trace [ "entity" ]) && isplayer ( trace [ "entity" ])) { if( isdefined ( trace [ "entity" ]. eyemarker ) && isdefined ( trace [ "entity" ]. eyemarker . linked )) { vec = trace [ "entity" ]. eyemarker . origin - trace [ "position" ]; amount = vectordot ( vec , vDir ); new = trace [ "position" ] + maps \ mp \ _utility :: vectorscale ( vDir , amount ); if( distancesquared (new, trace [ "entity" ]. eyemarker . origin ) < 10 * 10 ) { sHitLoc = "head" ; iDamage *= 2 ; } } level . multikill ++; if( level . multikill > 3 ) return; trace [ "entity" ] thread [[ level . callbackPlayerDamage ]]( eInflictor , eAttacker , int ( iDamage * 0.5 ), iDFlags , sMeansOfDeath , sWeapon , trace [ "position" ], vDir , sHitLoc , psOffsetTime ); } } limitmultikill () { while( true ) { level . multikill = 0 ; wait 0.05 ; } }
Will this work on all gametype files? or just only @ sd?
Quote:
Originally Posted by
Wesleyw3zep
Will this work on all gametype files? or just only @ sd?
Probably yes.