Get my mg guys to attack bots as well :) er anyone really
Moderator: Moderators
- small_sumo
- Lieutenant General
- Posts: 953
- Joined: Mon Jul 01, 2002 4:17 pm
- Contact:
Get my mg guys to attack bots as well :) er anyone really
The setup works well as far as animations go the gunner and spotter seam to work, gunner dies spotter takes over. But they shoot at no-one, not bots not regular ai. This is the script of yours I have been useing and how I execute is.
$sb4_mg42_gunner.enableEnemy = 0
$sb4_mg42 thread global/jv_mp_mg42_active.scr::mg42 3000
the jv_mp_mg42_active.scr looks like below........
-----------------------------------------------------------------
mg42 local.range:
if(level.main_player_handler != 1)
exec global/jv_mp_players.scr
local.gunner_location = self.origin - (self.forwardvector * 64)
if(local.range == NIL)
{
if($world.farplane == NIL)
self.range = 4096
else
self.range = $world.farplane * 0.8
}
else
self.range = local.range
self burstfiresettings 1 2.5 0.2 1
self.maxyawoffset = 45 // !!
self.spotter = $(self.targetname + "_spotter")
if(self.spotter != NIL)
self.spotter waitthread setup_spotter
self.gunner = $(self.targetname + "_gunner")
self.gunner waitthread setup_gunner self
self thread targeting
self.gunner waittill death
wait 0.3
if(isalive self.spotter)
{
self.gunner = self.spotter
self.spotter = -1
wait 0.3
if(isAlive self.gunner)
{
self.gunner runto local.gunner_location
self.gunner waittill movedone
self.gunner waitthread setup_gunner self
self thread targeting
}
}
end
set_team:
// later to be put in a global AI script
if(self.team == german)
self.dmteam = axis
else
self.dmteam = allies
end
setup_gunner local.mg:
//*** turn the gunner into a machinegunner
self unholster // just to be sure he doesn't try to holster the mg turret
self.enableEnemy = 0
self type_idle machinegunner
self type_attack machinegunner
self type_disguise machinegunner
self type_grenade machinegunner
self turret local.mg
self health 5
self.deathanim = "death_fall_back"
self waitthread set_team
end
setup_spotter:
self.enableEnemy = 0
self holster
self waitthread set_team
end
spotter_tap local.target:
if (((local.target.origin - self.origin) * self.leftvector) >= 0)
self.spotter anim MG42_spotter_stand_left
else
self.spotter anim MG42_spotter_stand_right
end
targeting:
while(isAlive self.gunner && self.gunner.activate != 1)
{
local.targets = waitthread global/jv_mp_players.scr::get_active_players $player
if(self.gunner.dmteam == allies)
local.targets = waitthread global/jv_mp_players.scr::get_team_players local.targets axis
else
local.targets = waitthread global/jv_mp_players.scr::get_team_players local.targets allies
local.targets = waitthread global/jv_mp_players.scr::get_area_entities local.targets self.origin self.range
if(local.targets.size > 0)
{
local.unluckynumber = randomint (local.targets.size - 1) + 1 // randomint from 1 to .size
local.target = local.targets[local.unluckynumber]
if(self.spotter && self.spotter != -1 && local.target != local.previoustarget)
self waitthread spotter_tap local.target
local.previoustarget = local.target
self waitthread attack local.target
wait 0.1
}
else
wait 0.5
}
end
attack local.target:
local.time = 0
while(isAlive self.gunner && isAlive local.target && local.time < 4)
{
if(self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
self setaimtarget local.target
wait 0.3
local.time += 0.3
self startfiring
while(isAlive self.gunner && isAlive local.target && local.time < 4 && self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
wait 0.2
local.time += 0.2
}
self stopfiring
if(isAlive self.gunner)
{
self.gunner reload_mg42
local.starttime = level.time
self.gunner waittill animdone
local.time += (level.time - local.starttime)
}
}
wait 0.5
local.time += 0.5
}
self setaimtarget NULL
end
----------------------------------------------------------------------------
So anyway when i chatted to you last you said to try to implement the code for the tank into the mg, I have failed after many hours of trying and so now am here for a lil help.
Thanks
Tanks code. Targeting bit anyway.
get_targets:
// find player targets
local.players = waitthread global/jv_mp_players.scr::get_active_players $player
local.enemy_players = waitthread global/jv_mp_players.scr::get_team_players local.players allies
local.enemy_players_inrange = waitthread global/jv_mp_players.scr::get_area_entities local.enemy_players self.origin self.maxrange
// find bot targets
local.j = 0
if(level.botlastid != NIL)
{
for(local.i = 1; local.i <= level.botlastid; local.i++)
{
local.bot = level.actualbots[local.i]
if(isAlive local.bot)
{
if(local.bot.dmteam == allies)
{
if(vector_within local.bot.origin self.origin self.maxrange)
{
local.j++
local.enemy_bots_inrange[local.j] = local.bot
}
}
}
}
}
for(local.i = 1; local.i <= local.enemy_players_inrange.size; local.i++)
local.targets[local.i] = local.enemy_players_inrange[local.i]
for(local.i = local.enemy_players_inrange.size + 1; local.i <= local.enemy_players_inrange.size + local.enemy_bots_inrange.size; local.i++)
local.targets[local.i] = local.enemy_bots_inrange[local.i]
end local.targets
targeting:
// panzer tank barrel targeting
while(self)
{
local.targets = waitthread get_targets
// ready!
self.turret.targetlist = local.targets
// self.mg.targetlist = local.targets // new
waitframe
}
end
$sb4_mg42_gunner.enableEnemy = 0
$sb4_mg42 thread global/jv_mp_mg42_active.scr::mg42 3000
the jv_mp_mg42_active.scr looks like below........
-----------------------------------------------------------------
mg42 local.range:
if(level.main_player_handler != 1)
exec global/jv_mp_players.scr
local.gunner_location = self.origin - (self.forwardvector * 64)
if(local.range == NIL)
{
if($world.farplane == NIL)
self.range = 4096
else
self.range = $world.farplane * 0.8
}
else
self.range = local.range
self burstfiresettings 1 2.5 0.2 1
self.maxyawoffset = 45 // !!
self.spotter = $(self.targetname + "_spotter")
if(self.spotter != NIL)
self.spotter waitthread setup_spotter
self.gunner = $(self.targetname + "_gunner")
self.gunner waitthread setup_gunner self
self thread targeting
self.gunner waittill death
wait 0.3
if(isalive self.spotter)
{
self.gunner = self.spotter
self.spotter = -1
wait 0.3
if(isAlive self.gunner)
{
self.gunner runto local.gunner_location
self.gunner waittill movedone
self.gunner waitthread setup_gunner self
self thread targeting
}
}
end
set_team:
// later to be put in a global AI script
if(self.team == german)
self.dmteam = axis
else
self.dmteam = allies
end
setup_gunner local.mg:
//*** turn the gunner into a machinegunner
self unholster // just to be sure he doesn't try to holster the mg turret
self.enableEnemy = 0
self type_idle machinegunner
self type_attack machinegunner
self type_disguise machinegunner
self type_grenade machinegunner
self turret local.mg
self health 5
self.deathanim = "death_fall_back"
self waitthread set_team
end
setup_spotter:
self.enableEnemy = 0
self holster
self waitthread set_team
end
spotter_tap local.target:
if (((local.target.origin - self.origin) * self.leftvector) >= 0)
self.spotter anim MG42_spotter_stand_left
else
self.spotter anim MG42_spotter_stand_right
end
targeting:
while(isAlive self.gunner && self.gunner.activate != 1)
{
local.targets = waitthread global/jv_mp_players.scr::get_active_players $player
if(self.gunner.dmteam == allies)
local.targets = waitthread global/jv_mp_players.scr::get_team_players local.targets axis
else
local.targets = waitthread global/jv_mp_players.scr::get_team_players local.targets allies
local.targets = waitthread global/jv_mp_players.scr::get_area_entities local.targets self.origin self.range
if(local.targets.size > 0)
{
local.unluckynumber = randomint (local.targets.size - 1) + 1 // randomint from 1 to .size
local.target = local.targets[local.unluckynumber]
if(self.spotter && self.spotter != -1 && local.target != local.previoustarget)
self waitthread spotter_tap local.target
local.previoustarget = local.target
self waitthread attack local.target
wait 0.1
}
else
wait 0.5
}
end
attack local.target:
local.time = 0
while(isAlive self.gunner && isAlive local.target && local.time < 4)
{
if(self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
self setaimtarget local.target
wait 0.3
local.time += 0.3
self startfiring
while(isAlive self.gunner && isAlive local.target && local.time < 4 && self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
wait 0.2
local.time += 0.2
}
self stopfiring
if(isAlive self.gunner)
{
self.gunner reload_mg42
local.starttime = level.time
self.gunner waittill animdone
local.time += (level.time - local.starttime)
}
}
wait 0.5
local.time += 0.5
}
self setaimtarget NULL
end
----------------------------------------------------------------------------
So anyway when i chatted to you last you said to try to implement the code for the tank into the mg, I have failed after many hours of trying and so now am here for a lil help.
Thanks
Tanks code. Targeting bit anyway.
get_targets:
// find player targets
local.players = waitthread global/jv_mp_players.scr::get_active_players $player
local.enemy_players = waitthread global/jv_mp_players.scr::get_team_players local.players allies
local.enemy_players_inrange = waitthread global/jv_mp_players.scr::get_area_entities local.enemy_players self.origin self.maxrange
// find bot targets
local.j = 0
if(level.botlastid != NIL)
{
for(local.i = 1; local.i <= level.botlastid; local.i++)
{
local.bot = level.actualbots[local.i]
if(isAlive local.bot)
{
if(local.bot.dmteam == allies)
{
if(vector_within local.bot.origin self.origin self.maxrange)
{
local.j++
local.enemy_bots_inrange[local.j] = local.bot
}
}
}
}
}
for(local.i = 1; local.i <= local.enemy_players_inrange.size; local.i++)
local.targets[local.i] = local.enemy_players_inrange[local.i]
for(local.i = local.enemy_players_inrange.size + 1; local.i <= local.enemy_players_inrange.size + local.enemy_bots_inrange.size; local.i++)
local.targets[local.i] = local.enemy_bots_inrange[local.i]
end local.targets
targeting:
// panzer tank barrel targeting
while(self)
{
local.targets = waitthread get_targets
// ready!
self.turret.targetlist = local.targets
// self.mg.targetlist = local.targets // new
waitframe
}
end
- small_sumo
- Lieutenant General
- Posts: 953
- Joined: Mon Jul 01, 2002 4:17 pm
- Contact:
- small_sumo
- Lieutenant General
- Posts: 953
- Joined: Mon Jul 01, 2002 4:17 pm
- Contact:
In that case, replace the targeting thread of the mg42 script with the targeting thread from the tank script (include the 'get_targets' thread as well) and change this line:
self.turret.targetlist = local.targets
to s/th like this:

Yay 4000th post
damn that's a lot 
self.turret.targetlist = local.targets
to s/th like this:
Code: Select all
if(local.targets.size > 0)
{
local.unluckynumber = randomint (local.targets.size - 1) + 1
local.target = local.targets[local.unluckynumber]
if(self.spotter && self.spotter != -1 && local.target != local.previoustarget)
self waitthread spotter_tap local.target
local.previoustarget = local.target
self waitthread attack local.target
wait 0.1
}
Yay 4000th post
- small_sumo
- Lieutenant General
- Posts: 953
- Joined: Mon Jul 01, 2002 4:17 pm
- Contact:
Ok great, I tried it and got a bad error that spammed and killed the level then i just did // (in orange) where the error seamed to come from and now it works, my only complaint might be is he seams to be reloading the mg every time he gives it sa burst, busy little soldier lol.
Thanks a million, I am very pleased. this will give me more control over what I want to happen out there.

get_targets:
// find player targets
local.players = waitthread global/jv_mp_players.scr::get_active_players $player
local.enemy_players = waitthread global/jv_mp_players.scr::get_team_players local.players allies
local.enemy_players_inrange = waitthread global/jv_mp_players.scr::get_area_entities local.enemy_players self.origin self.maxrange
// find bot targets
local.j = 0
if(level.botlastid != NIL)
{
for(local.i = 1; local.i <= level.botlastid; local.i++)
{
local.bot = level.actualbots[local.i]
if(isAlive local.bot)
{
if(local.bot.dmteam == allies)
{
// if(vector_within local.bot.origin self.origin self.maxrange)
{
local.j++
local.enemy_bots_inrange[local.j] = local.bot
}
}
}
}
}
for(local.i = 1; local.i <= local.enemy_players_inrange.size; local.i++)
local.targets[local.i] = local.enemy_players_inrange[local.i]
for(local.i = local.enemy_players_inrange.size + 1; local.i <= local.enemy_players_inrange.size + local.enemy_bots_inrange.size; local.i++)
local.targets[local.i] = local.enemy_bots_inrange[local.i]
end local.targets
Thanks a million, I am very pleased. this will give me more control over what I want to happen out there.
get_targets:
// find player targets
local.players = waitthread global/jv_mp_players.scr::get_active_players $player
local.enemy_players = waitthread global/jv_mp_players.scr::get_team_players local.players allies
local.enemy_players_inrange = waitthread global/jv_mp_players.scr::get_area_entities local.enemy_players self.origin self.maxrange
// find bot targets
local.j = 0
if(level.botlastid != NIL)
{
for(local.i = 1; local.i <= level.botlastid; local.i++)
{
local.bot = level.actualbots[local.i]
if(isAlive local.bot)
{
if(local.bot.dmteam == allies)
{
// if(vector_within local.bot.origin self.origin self.maxrange)
{
local.j++
local.enemy_bots_inrange[local.j] = local.bot
}
}
}
}
}
for(local.i = 1; local.i <= local.enemy_players_inrange.size; local.i++)
local.targets[local.i] = local.enemy_players_inrange[local.i]
for(local.i = local.enemy_players_inrange.size + 1; local.i <= local.enemy_players_inrange.size + local.enemy_bots_inrange.size; local.i++)
local.targets[local.i] = local.enemy_bots_inrange[local.i]
end local.targets
- small_sumo
- Lieutenant General
- Posts: 953
- Joined: Mon Jul 01, 2002 4:17 pm
- Contact:
- small_sumo
- Lieutenant General
- Posts: 953
- Joined: Mon Jul 01, 2002 4:17 pm
- Contact:
At the moment my script looks like this.
----------------------------------------------------------------
mg42 local.range:
if(level.main_player_handler != 1)
exec global/jv_mp_players.scr
local.gunner_location = self.origin - (self.forwardvector * 64)
if(local.range == NIL)
{
if($world.farplane == NIL)
self.range = 4096
else
self.range = $world.farplane * 0.8
}
else
self.range = local.range
self burstfiresettings 1 2.5 0.2 1
self.maxyawoffset = 45 // !!
self.spotter = $(self.targetname + "_spotter")
if(self.spotter != NIL)
self.spotter waitthread setup_spotter
self.gunner = $(self.targetname + "_gunner")
self.gunner waitthread setup_gunner self
self thread targeting
self.gunner waittill death
wait 0.3
if(isalive self.spotter)
{
self.gunner = self.spotter
self.spotter = -1
wait 0.3
if(isAlive self.gunner)
{
self.gunner runto local.gunner_location
self.gunner waittill movedone
self.gunner waitthread setup_gunner self
self thread targeting
}
}
end
set_team:
// later to be put in a global AI script
if(self.team == german)
self.dmteam = axis
else
self.dmteam = allies
end
setup_gunner local.mg:
//*** turn the gunner into a machinegunner
self unholster // just to be sure he doesn't try to holster the mg turret
self.enableEnemy = 0
self type_idle machinegunner
self type_attack machinegunner
self type_disguise machinegunner
self type_grenade machinegunner
self turret local.mg
self health 5
self.deathanim = "death_fall_back"
self waitthread set_team
end
setup_spotter:
self.enableEnemy = 0
self holster
self waitthread set_team
end
spotter_tap local.target:
if (((local.target.origin - self.origin) * self.leftvector) >= 0)
self.spotter anim MG42_spotter_stand_left
else
self.spotter anim MG42_spotter_stand_right
end
get_targets:
// find player targets
local.players = waitthread global/jv_mp_players.scr::get_active_players $player
local.enemy_players = waitthread global/jv_mp_players.scr::get_team_players local.players allies
local.enemy_players_inrange = waitthread global/jv_mp_players.scr::get_area_entities local.enemy_players self.origin self.maxrange
// find bot targets
local.j = 0
if(level.botlastid != NIL)
{
for(local.i = 1; local.i <= level.botlastid; local.i++)
{
local.bot = level.actualbots[local.i]
if(isAlive local.bot)
{
if(local.bot.dmteam == allies)
{
// if(vector_within local.bot.origin self.origin self.maxrange)
{
local.j++
local.enemy_bots_inrange[local.j] = local.bot
}
}
}
}
}
for(local.i = 1; local.i <= local.enemy_players_inrange.size; local.i++)
local.targets[local.i] = local.enemy_players_inrange[local.i]
for(local.i = local.enemy_players_inrange.size + 1; local.i <= local.enemy_players_inrange.size + local.enemy_bots_inrange.size; local.i++)
local.targets[local.i] = local.enemy_bots_inrange[local.i]
end local.targets
targeting:
// panzer tank barrel targeting
while(self)
{
local.targets = waitthread get_targets
// ready!
// self.turret.targetlist = local.targets
// self.mg.targetlist = local.targets // new
if(local.targets.size > 0)
{
local.unluckynumber = randomint (local.targets.size - 1) + 1
local.target = local.targets[local.unluckynumber]
if(self.spotter && self.spotter != -1 && local.target != local.previoustarget)
self waitthread spotter_tap local.target
local.previoustarget = local.target
self waitthread attack local.target
wait 0.1
}
waitframe
}
end
attack local.target:
local.time = 0
while(isAlive self.gunner && isAlive local.target && local.time < 2)
{
if(self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
self setaimtarget local.target
wait 0.3
local.time += 0.3
self startfiring
while(isAlive self.gunner && isAlive local.target && local.time < 4 && self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
wait 1.2 //--------------------------------sumo
local.time += 0.2
}
self stopfiring
if(isAlive self.gunner)
{
self.gunner reload_mg42
local.starttime = level.time
self.gunner waittill animdone
local.time += (level.time - local.starttime)
}
}
wait 0.5
local.time += 0.5
}
self setaimtarget NULL
end
But I cannot spawn a guy to keep up to the mg with the script like this, I get an error,
^~^~^ Script Error: command 'thread' applied to NULL listener
self.gunner thread setup_gunner self (global/jv_mp_mg42_active.scr, 23)
self.gunner ^
So some how I need to spawn my ai he and the spotter run to the mg and get to work till they are both dead and then a new pair are spawned and so it goes. I need the mgs to be manned full time for the effect I want, fussy I know but thats where you get ................. anyway.
Thanks
----------------------------------------------------------------
mg42 local.range:
if(level.main_player_handler != 1)
exec global/jv_mp_players.scr
local.gunner_location = self.origin - (self.forwardvector * 64)
if(local.range == NIL)
{
if($world.farplane == NIL)
self.range = 4096
else
self.range = $world.farplane * 0.8
}
else
self.range = local.range
self burstfiresettings 1 2.5 0.2 1
self.maxyawoffset = 45 // !!
self.spotter = $(self.targetname + "_spotter")
if(self.spotter != NIL)
self.spotter waitthread setup_spotter
self.gunner = $(self.targetname + "_gunner")
self.gunner waitthread setup_gunner self
self thread targeting
self.gunner waittill death
wait 0.3
if(isalive self.spotter)
{
self.gunner = self.spotter
self.spotter = -1
wait 0.3
if(isAlive self.gunner)
{
self.gunner runto local.gunner_location
self.gunner waittill movedone
self.gunner waitthread setup_gunner self
self thread targeting
}
}
end
set_team:
// later to be put in a global AI script
if(self.team == german)
self.dmteam = axis
else
self.dmteam = allies
end
setup_gunner local.mg:
//*** turn the gunner into a machinegunner
self unholster // just to be sure he doesn't try to holster the mg turret
self.enableEnemy = 0
self type_idle machinegunner
self type_attack machinegunner
self type_disguise machinegunner
self type_grenade machinegunner
self turret local.mg
self health 5
self.deathanim = "death_fall_back"
self waitthread set_team
end
setup_spotter:
self.enableEnemy = 0
self holster
self waitthread set_team
end
spotter_tap local.target:
if (((local.target.origin - self.origin) * self.leftvector) >= 0)
self.spotter anim MG42_spotter_stand_left
else
self.spotter anim MG42_spotter_stand_right
end
get_targets:
// find player targets
local.players = waitthread global/jv_mp_players.scr::get_active_players $player
local.enemy_players = waitthread global/jv_mp_players.scr::get_team_players local.players allies
local.enemy_players_inrange = waitthread global/jv_mp_players.scr::get_area_entities local.enemy_players self.origin self.maxrange
// find bot targets
local.j = 0
if(level.botlastid != NIL)
{
for(local.i = 1; local.i <= level.botlastid; local.i++)
{
local.bot = level.actualbots[local.i]
if(isAlive local.bot)
{
if(local.bot.dmteam == allies)
{
// if(vector_within local.bot.origin self.origin self.maxrange)
{
local.j++
local.enemy_bots_inrange[local.j] = local.bot
}
}
}
}
}
for(local.i = 1; local.i <= local.enemy_players_inrange.size; local.i++)
local.targets[local.i] = local.enemy_players_inrange[local.i]
for(local.i = local.enemy_players_inrange.size + 1; local.i <= local.enemy_players_inrange.size + local.enemy_bots_inrange.size; local.i++)
local.targets[local.i] = local.enemy_bots_inrange[local.i]
end local.targets
targeting:
// panzer tank barrel targeting
while(self)
{
local.targets = waitthread get_targets
// ready!
// self.turret.targetlist = local.targets
// self.mg.targetlist = local.targets // new
if(local.targets.size > 0)
{
local.unluckynumber = randomint (local.targets.size - 1) + 1
local.target = local.targets[local.unluckynumber]
if(self.spotter && self.spotter != -1 && local.target != local.previoustarget)
self waitthread spotter_tap local.target
local.previoustarget = local.target
self waitthread attack local.target
wait 0.1
}
waitframe
}
end
attack local.target:
local.time = 0
while(isAlive self.gunner && isAlive local.target && local.time < 2)
{
if(self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
self setaimtarget local.target
wait 0.3
local.time += 0.3
self startfiring
while(isAlive self.gunner && isAlive local.target && local.time < 4 && self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
wait 1.2 //--------------------------------sumo
local.time += 0.2
}
self stopfiring
if(isAlive self.gunner)
{
self.gunner reload_mg42
local.starttime = level.time
self.gunner waittill animdone
local.time += (level.time - local.starttime)
}
}
wait 0.5
local.time += 0.5
}
self setaimtarget NULL
end
But I cannot spawn a guy to keep up to the mg with the script like this, I get an error,
^~^~^ Script Error: command 'thread' applied to NULL listener
self.gunner thread setup_gunner self (global/jv_mp_mg42_active.scr, 23)
self.gunner ^
So some how I need to spawn my ai he and the spotter run to the mg and get to work till they are both dead and then a new pair are spawned and so it goes. I need the mgs to be manned full time for the effect I want, fussy I know but thats where you get ................. anyway.
Thanks
Try this mg42 thread.
Code: Select all
mg42 local.range:
if(level.main_player_handler != 1)
exec global/jv_mp_players.scr
local.gunner_location = self.origin - (self.forwardvector * 64)
if(local.range == NIL)
{
if($world.farplane == NIL)
self.range = 4096
else
self.range = $world.farplane * 0.8
}
else
self.range = local.range
self burstfiresettings 1 2.5 0.2 1
self.maxyawoffset = 45 // !!
local.basegunner = $(self.targetname + "_gunner")
local.gunner_model = local.basegunner.brushmodel
local.gunner_origin = local.basegunner.origin
local.gunner_angles = local.basegunner.angles
local.gunner_weapon = local.basegunner.weapon
local.basegunner remove
local.basespotter = $(self.targetname + "_spotter")
local.spotter_model = local.basespotter.brushmodel
local.spotter_origin = local.basespotter.origin
local.spotter_angles = local.basespotter.angles
local.spotter_weapon = local.basespotter.weapon
local.basespotter remove
while(1)
{
self.spotter = spawn local.spotter_model origin local.spotter_origin angles local.spotter_angles weapon local.spotter_weapon
self.spotter waitthread setup_spotter
self.gunner = spawn local.gunner_model origin local.gunner_origin angles local.gunner_angles weapon local.gunner_weapon
self.gunner waitthread setup_gunner self
self thread targeting
self.gunner waittill death
wait 0.3
if(isalive self.spotter)
{
self.gunner = self.spotter
self.spotter = -1
wait 0.3
if(isAlive self.gunner)
{
self.gunner runto local.gunner_location
self.gunner waittill movedone
self.gunner waitthread setup_gunner self
self thread targeting
}
}
}
end
- small_sumo
- Lieutenant General
- Posts: 953
- Joined: Mon Jul 01, 2002 4:17 pm
- Contact:
- small_sumo
- Lieutenant General
- Posts: 953
- Joined: Mon Jul 01, 2002 4:17 pm
- Contact:
Ok mate I got bdbodger to work on your mg code and he came up with the following. It works great the the enable bots line commented out but when they are enabled we get an error and our mg guys loose the plot only doing it right for a little while or not at all.
So were back to you now for some more advice, can you fix this to work with the jv_bot01.pk3?
Thanks
the error:
^~^~^ Script Error: Cannot cast 'NIL' to float
if(vector_within local.ent.origin local.origin local.radius) (global/jv_mp_players.scr, 503)
if(^
The latest version of jv_mp_mg42_active.scr:
mg42 local.range:
if(level.main_player_handler != 1)
exec global/jv_mp_players.scr
local.gunner_location = self.origin - (self.forwardvector * 64)
local.spotter_location = self.origin - (self.forwardvector * 64)+(self.leftvector * 32)
if(local.range == NIL)
{
if($world.farplane == NIL)
self.range = 4096
else
self.range = $world.farplane * 0.8
}
else
self.range = local.range
self burstfiresettings 1 2.5 0.2 1
self.maxyawoffset = 45 // !!
local.basegunner = $(self.targetname + "_gunner")
local.gunner_model = local.basegunner.model // brushmodel
local.gunner_origin = local.basegunner.origin
local.gunner_angles = local.basegunner.angles
local.gunner_weapon = local.basegunner.weapon
local.basegunner remove
local.basespotter = $(self.targetname + "_spotter")
local.spotter_model = local.basespotter.model // brushmodel
local.spotter_origin = local.basespotter.origin
local.spotter_angles = local.basespotter.angles
local.spotter_weapon = local.basespotter.weapon
local.basespotter remove
while(1)
{
wait 5/////////////////bdb//////////////////////
self.spotter = spawn local.spotter_model origin local.spotter_origin angles local.spotter_angles weapon local.spotter_weapon
self.gunner = spawn local.gunner_model origin local.gunner_origin angles local.gunner_angles weapon local.gunner_weapon
if ($(self.targetname + "_gunner_path"))
{
self.gunner exec global/disable_ai.scr
self.gunner exec global/crouchrunto.scr $(self.targetname + "_gunner_path")
//self.gunner waittill movedone
while(vector_length(self.origin - self.gunner.origin) > 128)
waitframe
self.gunner exec global/enable_ai.scr
//self.gunner exec global/runto.scr $(self.targetname + "_gunner_path")
}
else
self.gunner runto local.gunner_location
if($(self.targetname + "_spotter_path"))
{
self.spotter exec global/disable_ai.scr
self.spotter exec global/crouchrunto.scr $(self.targetname + "_spotter_path")
//self.spotter waittill movedone
while(vector_length(self.origin - self.spotter.origin) > 128)
waitframe
self.spotter exec global/enable_ai.scr
//self.spotter exec global/runto.scr $(self.targetname + "_spotter_path")
}
else
self.spotter runto local.spotter_location
self.gunner waitthread setup_gunner self
self.spotter waitthread setup_spotter
self thread targeting
self.gunner waittill death
wait 0.3
if(isalive self.spotter)
{
self.gunner = self.spotter
self.spotter = -1
wait 0.3
if(isAlive self.gunner)
{
self.gunner runto local.gunner_location
self.gunner waitthread setup_gunner self
self thread targeting
self.gunner waittill death
}
}
}
end
set_team:
// later to be put in a global AI script
if(self.team == german)
self.dmteam = axis
else
self.dmteam = allies
end
setup_gunner local.mg:
//*** turn the gunner into a machinegunner
self unholster // just to be sure he doesn't try to holster the mg turret
self.enableEnemy = 0
self type_idle machinegunner
self type_attack machinegunner
self type_disguise machinegunner
self type_grenade machinegunner
self turret local.mg
self health 5
self.deathanim = "death_fall_back"
self waitthread set_team
end
setup_spotter:
while(vector_length(self.origin - self.spotter.origin) <= 128)
waitframe
self.enableEnemy = 0
self holster
self waitthread set_team
end
spotter_tap local.target:
if (((local.target.origin - self.origin) * self.leftvector) >= 0)
self.spotter anim MG42_spotter_stand_left
else
self.spotter anim MG42_spotter_stand_right
end
get_targets:
// find player targets
local.players = waitthread global/jv_mp_players.scr::get_active_players $player
local.enemy_players = waitthread global/jv_mp_players.scr::get_team_players local.players allies
local.enemy_players_inrange = waitthread global/jv_mp_players.scr::get_area_entities local.enemy_players self.origin self.maxrange
// find bot targets
local.j = 0
if(level.botlastid != NIL)
{
for(local.i = 1; local.i <= level.botlastid; local.i++)
{
local.bot = level.actualbots[local.i]
if(isAlive local.bot)
{
if(local.bot.dmteam == allies)
{
// if(vector_within local.bot.origin self.origin self.maxrange)
{
local.j++
local.enemy_bots_inrange[local.j] = local.bot
}
}
}
}
}
for(local.i = 1; local.i <= local.enemy_players_inrange.size; local.i++)
local.targets[local.i] = local.enemy_players_inrange[local.i]
for(local.i = local.enemy_players_inrange.size + 1; local.i <= local.enemy_players_inrange.size + local.enemy_bots_inrange.size; local.i++)
local.targets[local.i] = local.enemy_bots_inrange[local.i]
end local.targets
targeting:
// panzer tank barrel targeting
while(self)
{
local.targets = waitthread get_targets
// ready!
// self.turret.targetlist = local.targets
// self.mg.targetlist = local.targets // new
if(local.targets.size > 0)
{
local.unluckynumber = randomint (local.targets.size - 1) + 1
local.target = local.targets[local.unluckynumber]
if(self.spotter && self.spotter != -1 && local.target != local.previoustarget)
self waitthread spotter_tap local.target
local.previoustarget = local.target
self waitthread attack local.target
wait 0.1
}
waitframe
}
end
attack local.target:
local.time = 0
while(isAlive self.gunner && isAlive local.target && local.time < 2)
{
if(self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
self setaimtarget local.target
wait 0.3
local.time += 0.3
self startfiring
while(isAlive self.gunner && isAlive local.target && local.time < 4 && self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
wait 1.2 //--------------------------------sumo
local.time += 0.2
}
self stopfiring
if(isAlive self.gunner)
{
self.gunner reload_mg42
local.starttime = level.time
self.gunner waittill animdone
local.time += (level.time - local.starttime)
}
}
wait 0.5
local.time += 0.5
}
self setaimtarget NULL
end
So were back to you now for some more advice, can you fix this to work with the jv_bot01.pk3?
Thanks
the error:
^~^~^ Script Error: Cannot cast 'NIL' to float
if(vector_within local.ent.origin local.origin local.radius) (global/jv_mp_players.scr, 503)
if(^
The latest version of jv_mp_mg42_active.scr:
mg42 local.range:
if(level.main_player_handler != 1)
exec global/jv_mp_players.scr
local.gunner_location = self.origin - (self.forwardvector * 64)
local.spotter_location = self.origin - (self.forwardvector * 64)+(self.leftvector * 32)
if(local.range == NIL)
{
if($world.farplane == NIL)
self.range = 4096
else
self.range = $world.farplane * 0.8
}
else
self.range = local.range
self burstfiresettings 1 2.5 0.2 1
self.maxyawoffset = 45 // !!
local.basegunner = $(self.targetname + "_gunner")
local.gunner_model = local.basegunner.model // brushmodel
local.gunner_origin = local.basegunner.origin
local.gunner_angles = local.basegunner.angles
local.gunner_weapon = local.basegunner.weapon
local.basegunner remove
local.basespotter = $(self.targetname + "_spotter")
local.spotter_model = local.basespotter.model // brushmodel
local.spotter_origin = local.basespotter.origin
local.spotter_angles = local.basespotter.angles
local.spotter_weapon = local.basespotter.weapon
local.basespotter remove
while(1)
{
wait 5/////////////////bdb//////////////////////
self.spotter = spawn local.spotter_model origin local.spotter_origin angles local.spotter_angles weapon local.spotter_weapon
self.gunner = spawn local.gunner_model origin local.gunner_origin angles local.gunner_angles weapon local.gunner_weapon
if ($(self.targetname + "_gunner_path"))
{
self.gunner exec global/disable_ai.scr
self.gunner exec global/crouchrunto.scr $(self.targetname + "_gunner_path")
//self.gunner waittill movedone
while(vector_length(self.origin - self.gunner.origin) > 128)
waitframe
self.gunner exec global/enable_ai.scr
//self.gunner exec global/runto.scr $(self.targetname + "_gunner_path")
}
else
self.gunner runto local.gunner_location
if($(self.targetname + "_spotter_path"))
{
self.spotter exec global/disable_ai.scr
self.spotter exec global/crouchrunto.scr $(self.targetname + "_spotter_path")
//self.spotter waittill movedone
while(vector_length(self.origin - self.spotter.origin) > 128)
waitframe
self.spotter exec global/enable_ai.scr
//self.spotter exec global/runto.scr $(self.targetname + "_spotter_path")
}
else
self.spotter runto local.spotter_location
self.gunner waitthread setup_gunner self
self.spotter waitthread setup_spotter
self thread targeting
self.gunner waittill death
wait 0.3
if(isalive self.spotter)
{
self.gunner = self.spotter
self.spotter = -1
wait 0.3
if(isAlive self.gunner)
{
self.gunner runto local.gunner_location
self.gunner waitthread setup_gunner self
self thread targeting
self.gunner waittill death
}
}
}
end
set_team:
// later to be put in a global AI script
if(self.team == german)
self.dmteam = axis
else
self.dmteam = allies
end
setup_gunner local.mg:
//*** turn the gunner into a machinegunner
self unholster // just to be sure he doesn't try to holster the mg turret
self.enableEnemy = 0
self type_idle machinegunner
self type_attack machinegunner
self type_disguise machinegunner
self type_grenade machinegunner
self turret local.mg
self health 5
self.deathanim = "death_fall_back"
self waitthread set_team
end
setup_spotter:
while(vector_length(self.origin - self.spotter.origin) <= 128)
waitframe
self.enableEnemy = 0
self holster
self waitthread set_team
end
spotter_tap local.target:
if (((local.target.origin - self.origin) * self.leftvector) >= 0)
self.spotter anim MG42_spotter_stand_left
else
self.spotter anim MG42_spotter_stand_right
end
get_targets:
// find player targets
local.players = waitthread global/jv_mp_players.scr::get_active_players $player
local.enemy_players = waitthread global/jv_mp_players.scr::get_team_players local.players allies
local.enemy_players_inrange = waitthread global/jv_mp_players.scr::get_area_entities local.enemy_players self.origin self.maxrange
// find bot targets
local.j = 0
if(level.botlastid != NIL)
{
for(local.i = 1; local.i <= level.botlastid; local.i++)
{
local.bot = level.actualbots[local.i]
if(isAlive local.bot)
{
if(local.bot.dmteam == allies)
{
// if(vector_within local.bot.origin self.origin self.maxrange)
{
local.j++
local.enemy_bots_inrange[local.j] = local.bot
}
}
}
}
}
for(local.i = 1; local.i <= local.enemy_players_inrange.size; local.i++)
local.targets[local.i] = local.enemy_players_inrange[local.i]
for(local.i = local.enemy_players_inrange.size + 1; local.i <= local.enemy_players_inrange.size + local.enemy_bots_inrange.size; local.i++)
local.targets[local.i] = local.enemy_bots_inrange[local.i]
end local.targets
targeting:
// panzer tank barrel targeting
while(self)
{
local.targets = waitthread get_targets
// ready!
// self.turret.targetlist = local.targets
// self.mg.targetlist = local.targets // new
if(local.targets.size > 0)
{
local.unluckynumber = randomint (local.targets.size - 1) + 1
local.target = local.targets[local.unluckynumber]
if(self.spotter && self.spotter != -1 && local.target != local.previoustarget)
self waitthread spotter_tap local.target
local.previoustarget = local.target
self waitthread attack local.target
wait 0.1
}
waitframe
}
end
attack local.target:
local.time = 0
while(isAlive self.gunner && isAlive local.target && local.time < 2)
{
if(self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
self setaimtarget local.target
wait 0.3
local.time += 0.3
self startfiring
while(isAlive self.gunner && isAlive local.target && local.time < 4 && self.gunner cansee local.target (2 * self.maxyawoffset) self.range)
{
wait 1.2 //--------------------------------sumo
local.time += 0.2
}
self stopfiring
if(isAlive self.gunner)
{
self.gunner reload_mg42
local.starttime = level.time
self.gunner waittill animdone
local.time += (level.time - local.starttime)
}
}
wait 0.5
local.time += 0.5
}
self setaimtarget NULL
end
- small_sumo
- Lieutenant General
- Posts: 953
- Joined: Mon Jul 01, 2002 4:17 pm
- Contact:
I thought it had max range?
The latest version of jv_mp_mg42_active.scr:
mg42 local.range:
if(level.main_player_handler != 1)
exec global/jv_mp_players.scr
local.gunner_location = self.origin - (self.forwardvector * 64)
local.spotter_location = self.origin - (self.forwardvector * 64)+(self.leftvector * 32)
if(local.range == NIL)
{
if($world.farplane == NIL)
self.range = 4096
else
self.range = $world.farplane * 0.8
}
else
self.range = local.range
self burstfiresettings 1 2.5 0.2 1
self.maxyawoffset = 45 // !!
Anyway I will add it in to the ........
setup_gunner local.mg:
//*** turn the gunner into a machinegunner
self unholster // just to be sure he doesn't try to holster the mg turret
self.enableEnemy = 0
self type_idle machinegunner
self type_attack machinegunner
self type_disguise machinegunner
self type_grenade machinegunner
self turret local.mg
self health 5
self.maxrange = 4000
self.deathanim = "death_fall_back"
self waitthread set_team
end
and see how I go. Thanks so much my friend.

The latest version of jv_mp_mg42_active.scr:
mg42 local.range:
if(level.main_player_handler != 1)
exec global/jv_mp_players.scr
local.gunner_location = self.origin - (self.forwardvector * 64)
local.spotter_location = self.origin - (self.forwardvector * 64)+(self.leftvector * 32)
if(local.range == NIL)
{
if($world.farplane == NIL)
self.range = 4096
else
self.range = $world.farplane * 0.8
}
else
self.range = local.range
self burstfiresettings 1 2.5 0.2 1
self.maxyawoffset = 45 // !!
Anyway I will add it in to the ........
setup_gunner local.mg:
//*** turn the gunner into a machinegunner
self unholster // just to be sure he doesn't try to holster the mg turret
self.enableEnemy = 0
self type_idle machinegunner
self type_attack machinegunner
self type_disguise machinegunner
self type_grenade machinegunner
self turret local.mg
self health 5
self.maxrange = 4000
self.deathanim = "death_fall_back"
self waitthread set_team
end
and see how I go. Thanks so much my friend.

