[Release] Player bullet was off (meters) from victim

Topic created ยท 6 Posts ยท 110 Views
  • Put this in onplayerconnect:

    player.first = true;
    

    Put this in onplayerspawned and run it only once:

    if (self.first)
    {
        self thread watchBullet();
        self.first = false;
    }
    

    Put this anywhere in your code:

    watchBullet()
    {
        /*
    
        If you want the victim who about got hit on to recieve a message, you would do:
        player iprintln(self.name " almost hit you");
    
        */
    
    
        self endon("death");
        self endon("disconnect");
        level endon("game_ended");
        
        for(;;) 
        {
        
            self waittill("weapon_fired");
            
            // you can edit this to your liking but this worked for me
            radius = 100;
            maxDist = 110;
    
            forward = self getTagOrigin("j_head");
            end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
            predictedLoc = bulletTrace( forward, end, false, self )["position"];
            
            foreach(player in level.players) 
            {
                // found the teambased vars in a dump, probably helpful. its in there just in case (:
                if( !isAlive(player) || player == self || player.team == self.team && level.teamBased )
                {
                    continue;
                }
            }
    
            dist = distance(player.origin, predictedLoc);
            if(dist < radius && dist <= maxDist) {
                 self iprintln("Shot ^6" + int(distance(self.origin, attacker.origin)*0.0254) + " ^7meters off of ^6" + player.name);
            }
        }
    }
    

    You can edit the radius and maxDist variable but I only recommend if you know what you are doing. I don't think any external functions are needed but if you get a error at vectorScale, make sure your includes are correct or you have a vectorScale function.

  • Just in case you need it:

    vectorScale(vec,scale)
    {
        vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale);
        return vec;
    } 
    
  • @mikey said in [Release] Player bullet was off (meters) from victim:

    Just in case you need it:

    vectorScale(vec,scale)
    {
        vec=(vec[0]*scale,vec[1]*scale,vec[2]*scale);
        return vec;
    } 
    

    Last I checked you can't use a variable before initializing it and expect it to work

    predictedLoc = bulletTrace( forward, end, false, self )["position"];
    end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);

  • @mikey To do that you can use the EB code, you can find the code for this type of EB online, is a free to use.
    I don't know why you keep calling radius and mixDist for every single shoot, is not necessary.

    watch_player_near(){
    	radius = 100;
     	for(;;) {
            self waittill("weapon_fired");
            end = vectorScale(anglestoforward(self getPlayerAngles()), 1000000);
            forward = self getTagOrigin("j_head"); ( 
            predictedLoc = bulletTrace( forward, end, false, self )["position"];
            
            foreach(player in level.players) {
              
                if( isAlive(player) && player != self || (player.team != self.team && level.teamBased) ){
                    if(distance(player.origin, predictedLoc) < radius)
                    	self iprintln("Shot ^6" + int(distance(self.origin, player.origin)*0.0254) + " ^7meters off of ^6" + player.name);
                }
            } 
    	}
    }
    

    I don't know why you use a maximum distance, everyone can be hit if you don't have a limit (like in my servers, in my server you can hit enemy to close).
    The attacker is not defined in this function. I don't know what is the point of calling the attacker.

  • @Matrix my bad, rushed the code and forgot to double look

  • @Sorex my bad, i completely rushed the code and did not take a second to relook and fix stuff. i take blame ๐Ÿ™‚

Log in to reply