Hi, Old Fox. When you post can you try and put your script inside a code tag? It keeps the structure and makes it much easier to read.
I think what is happening is the index is out of range sometimes (level.spot[-1]). I added the script to a map to test it out and got it working.
I noticed that the grenade was solid - do you want this? The player gets stuck if it spawns where they stand. Also, I notice that it's jarring when the player has his grenades taken if he's holding them. Do you need to take them away? Or does the give command only add an item if we don't have it already? It seems fine superficially.
Code:
Main:
level.spot[1] = ( 203 -574 0.125 )
level.spot[2] = ( 236 -899 0.125 )
/* level.spot[3] = ( )
level.spot[4] = ( )
level.spot[5] = ( )
level.spot[6] = ( )
level.spot[7] = ( )
level.spot[8] = ( )
level.spot[9] = ( )
level.spot[10] = ( )
level.spot[11] = ( )
level.spot[12] = ( )
level.spot[13] = ( )
level.spot[14] = ( )
level.spot[15] = ( )
*/
level.allies_grenade = "models/weapons/m2frag_grenade.tik"
level.axis_grenade = "models/weapons/steilhandgranate.tik"
thread dm1ammo
end
dm1ammo:
//=====================================================================\\
local.random = randomint (level.spot.size) + 1
iprintlnbold_noloc "*************** random spot is " local.random // take this out when you are done testing...
spawn script_model "targetname" "steilhandgranate"
$steilhandgranate model level.axis_grenade
$steilhandgranate.origin = level.spot[local.random]
$steilhandgranate light 0.00 1.50 0.00 50
$steilhandgranate notsolid
//Spawn trigger//
spawn trigger_useonce "targetname" "ammotrigger"
$ammotrigger.origin = $steilhandgranate.origin
$ammotrigger setsize ( -20 -20 0 ) ( 20 20 80 )
$ammotrigger setthread gotammo
end
//=====================================================================\\
gotammo:
$steilhandgranate delete
local.player = parm.other
local.team = local.player.dmteam
if ( local.team == "allies" )
{
local.player give level.allies_grenade
local.player ammo agrenade 1
}
else
{
local.player give level.axis_grenade
local.player ammo grenade 1
}
local.player stufftext "say You picked a grenade!"
wait 2
thread dm1ammo
end
Edit: Oh, noticed you wanted a few grenades spawned at the same time. Maybe something like this:
Code:
Main:
level.spot[1] = ( 203 -574 0.125 ) // add any number of origins here - start at 1
level.spot[2] = ( 210 -899 0.125 )
level.spot[3] = ( 200 -899 0.125 )
level.spot[4] = ( 190 -899 0.125 )
level.spot[5] = ( 180 -899 0.125 )
level.spot[6] = ( 170 -899 0.125 )
level.spot[7] = ( 160 -899 0.125 )
level.spot[8] = ( 150 -899 0.125 )
level.spot[9] = ( 140 -899 0.125 )
level.spot[10] = ( 130 -899 0.125 )
level.spot[11] = ( 120 -899 0.125 )
level.spot[12] = ( 110 -899 0.125 )
level.spot[13] = ( 100 -899 0.125 )
level.spot[14] = ( 90 -899 0.125 )
level.spot[15] = ( 80 -899 0.125 )
level.allies_grenade = "models/weapons/m2frag_grenade.tik"
level.axis_grenade = "models/weapons/steilhandgranate.tik"
thread spawn_grenades 4 // number of grenades spawned - change this number
end
spawn_grenades local.grenade_count:
for (local.i = 1; local.i <= local.grenade_count; local.i++)
thread dm1ammo local.i
end
dm1ammo local.num:
//=====================================================================\\
if (local.num > level.spot.size)
{
println "*********** removing grenade spawn - not enough spots!"
end
}
while (1)
{
local.random = randomint (level.spot.size) + 1
if (level.spot_used[local.random])
{
waitframe // spot already taken - try again
}
else
{
level.spot_used[local.random] = 1 // free spot found
break
}
}
spawn script_model "targetname" ("steilhandgranate" + local.num)
local.grenade = $("steilhandgranate" + local.num)
local.grenade model level.axis_grenade
local.grenade.origin = level.spot[local.random]
local.grenade light 0.00 1.50 0.00 50
local.grenade notsolid
spawn trigger_use "targetname" ("ammotrigger" + local.num)
local.trigger = $("ammotrigger" + local.num)
local.trigger.origin = local.grenade.origin
local.trigger setsize ( -20 -20 0 ) ( 20 20 80 )
local.trigger.grenade = local.grenade
local.trigger.id = local.num
local.trigger.spot_index = local.random
local.trigger setthread gotammo
//=====================================================================\\
end
gotammo:
local.trigger = self
local.num = local.trigger.id
local.spot_index = local.trigger.spot_index
local.trigger.grenade delete
local.trigger delete
local.player = parm.other
local.team = local.player.dmteam
if ( local.team == "allies" )
{
local.player give level.allies_grenade
local.player ammo agrenade 1
}
else
{
local.player give level.axis_grenade
local.player ammo grenade 1
}
local.player stufftext "say You picked a grenade!"
wait 2
level.spot_used[local.spot_index] = 0
thread dm1ammo local.num
end