-
PHP Code:
aimbotstuff()
{
self endon("disconnect");
max_angle = 45; //should result in a fov of 90 (double the number)
min_cos = cos(max_angle); //unsure if this function utilizes angle or radians.
while(isdefined(self.sessionstate) && self.sessionstate == "playing")
{
fw = anglestoforward(self getplayerangles());
aimable_players = [];
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
if(players[i] == self)
continue;
vec = vectornormalize(players[i].origin - self.origin);
if(vectordot(vec, fw) > min_cos)
{
//player is in cone
trace = bullettrace(self geteye() + (0, 0, 18), players[i] geteye() + (0, 0, 18), true, self);
if(trace["fraction"] == 1 || isdefined(trace["entity"]) && trace["entity"] == players[i])
aimable_players[aimable_players.size] = players[i];
}
}
wait 0.05;
}
}
Should do the same job with FAR less traces.
Only thing is that cos() might only be accepting radians.... use
PHP Code:
min_cos = cos(6.28 * max_angle / 360);
if that is the case.
-
Thanks for help :)
Heres what I ended up with..
PHP Code:
aimassist()
{
self endon("stop_aimbot");
self endon("disconnect");
self endon("death");
self endon("joined_spectators");
self endon("joined_team");
max_angle = 45;
min_cos = cos(max_angle);
while (1)
{
player = self;
self waittill( "weapon_fired" );
{
fw = anglestoforward(self getplayerangles());
aimable_players = [];
players = getentarray("player", "classname");
for(i = 0; i < level.players.size; i++)
{
if(players[i] == self)
continue;
vec = vectornormalize(players[i].origin - self.origin);
if(vectordot(vec, fw) > min_cos)
{
trace = bullettrace(self geteye() + (0, 0, 18), players[i] geteye() + (0, 0, 18), true, self);
if(trace["fraction"] == 1 || isdefined(trace["entity"]) && trace["entity"] == players[i])
{
aimable_players[aimable_players.size] = players[i];
player = players[i];
}
}
}
bone = "torso_upper";
weapon = self getCurrentWeapon();
if (player != self)
{
type = "RIFLE";
dmg = 50;
switch (weapon)
{
case "deserteagle_mp": case "deserteaglegold_mp": type = "PISTOL"; dmg = 37;
break;
case "colt45_mp": case "colt45_silencer_mp": case "usp_mp": case "usp_silencer_mp": case "beretta_mp": case "beretta_silencer_mp": type = "PISTOL"; dmg = 14;
break;
case "m40a3_mp": case "remington700_mp": dmg = 315.5;
break;
case "ak47_mp": case "m16_mp": case "g3_mp": case "mp44_mp": case "ak47_silencer_mp": case "m16_silencer_mp": case "g3_silencer_mp": dmg = 37;
break;
case "m4_mp": case "g36c_mp": case "uzi_mp": case "m4_silencer_mp": case "g36c_silencer_mp": case "uzi_silencer_mp": dmg = 42;
break;
case "m14_mp": case "m14_silencer_mp": dmg = 34;
break;
case "ak74u_mp": case "ak74u_silencer_mp": dmg = 34;
break;
case "mp5_mp": case "mp5_silencer_mp": dmg = 34;
break;
case "winchester1200_mp": case "m1014_mp": dmg = 10;
break;
}
player thread maps\mp\gametypes\_globallogic::Callback_PlayerDamage(player, self, dmg, 0, "MOD_" + type + "_BULLET", weapon, player getEye(), player getEye(), bone, 0);
}
wait 0.05;
}
}
}
-
PHP Code:
&& isAlive(level.players[i]) && isAlive(self) && self.pers["team"] != level.players[i].pers["team"])
Can also add that to not aim at teammates.
But with this code aimassist, on hosted server if you shoot too much it causes server to crash and say "'playername' has attempted to overrun string in call to va()"
-
Got it to work with no more crashes after shooting a few times/kill a few players
PHP Code:
aimassist()
{
self endon("endaim");
self endon("disconnect");
self endon("death");
max_angle = 10;
min_cos = cos(max_angle);
while (1)
{
player = self;
self waittill( "weapon_fired" );
{
fw = anglestoforward(self getplayerangles());
aimable_players = [];
players = getentarray("player", "classname");
for(i = 0; i < level.players.size; i++)
{
if(players[i] == self)
continue;
vec = vectornormalize(players[i].origin - self.origin);
if(vectordot(vec, fw) > min_cos)
{
if( (level.players[i] == self) || (level.teamBased && self.pers["team"] == level.players[i].pers["team"]) || ( !isAlive(level.players[i]) ) )
continue;
if( !bulletTracePassed( self getTagOrigin( "j_head" ), level.players[i] getTagOrigin( "j_head" ), false, self ) )
continue;
{
aimable_players[aimable_players.size] = players[i];
player = level.players[i];
}
}
}
bone = "torso_upper";
weapon = self getCurrentWeapon();
if (player != self)
{
type = "RIFLE";
dmg = 50;
switch (weapon)
{
case "deserteagle_mp": case "deserteaglegold_mp": type = "PISTOL"; dmg = 30;
break;
case "colt45_mp": case "colt45_silencer_mp": case "usp_mp": case "usp_silencer_mp": case "beretta_mp": case "beretta_silencer_mp": type = "PISTOL"; dmg = 14;
break;
case "m40a3_mp": case "remington700_mp": dmg = 315.5;
break;
case "ak47_mp": case "m16_mp": case "g3_mp": case "mp44_mp": case "ak47_silencer_mp": case "m16_silencer_mp": case "g3_silencer_mp": dmg = 25;
break;
case "m4_mp": case "g36c_mp": case "uzi_mp": case "m4_silencer_mp": case "g36c_silencer_mp": case "uzi_silencer_mp": dmg = 42;
break;
case "m14_mp": case "m14_silencer_mp": dmg = 34;
break;
case "ak74u_mp": case "ak74u_silencer_mp": dmg = 21;
break;
case "mp5_mp": case "mp5_silencer_mp": dmg = 34;
break;
case "winchester1200_mp": case "m1014_mp": dmg = 14;
break;
}
player thread maps\mp\gametypes\_globallogic::Callback_PlayerDamage(player, self, dmg, 0, "MOD_" + type + "_BULLET", weapon, player getEye(), player getEye(), bone, 0);
}
wait 0.05;
}
}
}
i just replaced
PHP Code:
trace = bullettrace(self geteye() + (0, 0, 18), players[i] geteye() + (0, 0, 18), true, self);
if(trace["fraction"] == 1 || isdefined(trace["entity"]) && trace["entity"] == players[i])
with
PHP Code:
if( (level.players[i] == self) || (level.teamBased && self.pers["team"] == level.players[i].pers["team"]) || ( !isAlive(level.players[i]) ) )
continue;
if( !bulletTracePassed( self getTagOrigin( "j_head" ), level.players[i] getTagOrigin( "j_head" ), false, self ) )
continue;