PDA

View Full Version : fov



omnimouz
14th May 2013, 23:10
trace = []; count = 0; for (f = 0; f < 8; f++)
{
vec = anglesToForward(self getPlayerAngles() + (-2 + (f / 2), -2, 0));
trace[count] = bulletTrace(self getEye() + (0, 0, 18), self getEye() + (20000 * vec[0], 20000 * vec[1], 20000 * vec[2] + 18), true, self);
count++;
for (p = 0; p < 8; p++)
{
vec = anglesToForward(self getPlayerAngles() + (-2 + (f / 2), -2 + (p / 2), 0));
trace[count] = bulletTrace(self getEye() + (0, 0, 18), self getEye() + (20000 * vec[0], 20000 * vec[1], 20000 * vec[2] + 18), true, self);
count++;
}
}

This code builds a 'fov' right? What numbers to tweak to make it 'bigger'?

Ni3ls
15th May 2013, 08:50
Just use

self setClientCvar("cg_fov", "160");

default = 80

omnimouz
15th May 2013, 10:00
this is setting a fov for something else, not the players view

Ni3ls
15th May 2013, 10:27
What kind of other fov's are there? :/ (F)ield (o)f (V)iew

omnimouz
15th May 2013, 10:50
'fov' for an aimbot, idk what else to call it

Ni3ls
15th May 2013, 11:07
You mean to get players in sight? And then rotate to them and kill them?

kung foo man
15th May 2013, 11:54
You can increase both 8's, till your server is lagging like mad. Now you have 8x8=64 traces. Why dont you just iterate the players-array and compare the forward-vector and the delta-vector to each enemy with vectordot()?

Tally
15th May 2013, 13:18
'fov' for an aimbot, idk what else to call it

Isn't it a "Line of Sight" code? Looks like that to me. Does COD2 have sightconeTrace() like COD4? If so, use that instead.

omnimouz
15th May 2013, 15:26
Isn't it a "Line of Sight" code? Looks like that to me. Does COD2 have sightconeTrace() like COD4? If so, use that instead.

Yes and yes


You can increase both 8's, till your server is lagging like mad. Now you have 8x8=64 traces. Why dont you just iterate the players-array and compare the forward-vector and the delta-vector to each enemy with vectordot()?

thanks, 16x16 is fine, doesnt cause too much lag but I'll try out the method you suggested aswell

serthy
15th May 2013, 15:56
you should tell us what EXACTLY you want to do
getting players in view or not, with sighttraces or detect walls or other entities or what?

IzNoGoD
15th May 2013, 18:05
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


min_cos = cos(6.28 * max_angle / 360);

if that is the case.

omnimouz
15th May 2013, 20:14
Thanks for help :)

Heres what I ended up with..



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_PlayerDam age(player, self, dmg, 0, "MOD_" + type + "_BULLET", weapon, player getEye(), player getEye(), bone, 0);
}
wait 0.05;
}
}
}

omnimouz
16th May 2013, 18:15
&& 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()"

omnimouz
20th May 2013, 19:40
Got it to work with no more crashes after shooting a few times/kill a few players


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_PlayerDam age(player, self, dmg, 0, "MOD_" + type + "_BULLET", weapon, player getEye(), player getEye(), bone, 0);
}
wait 0.05;
}
}
}


i just replaced


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


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;