-
Random player assignment
I want to randomly assign all players from each team to an integer 1 up to 12 and send each through a switch.
It's important the player selection is random so the players are not assigned the same Case every round.
Allies
1 - random player to Case 1
2 - random player to Case 2
3 - random player to Case 3
Etc
Switch
Case 1
Case 2
Case 3
Etc
Also important is priority to assigning 1 then 2 then 3 etc
What's the best way to do that ?
-
The logic for this would be:
1- Get random number from the total players
2- Check if that number is already assigned
3- if it is, create another number
4 - If not set player with the number:
$player[local.random_number]
But for this to work properly you have to store the numbers in a cvar or a file because other way you will lose the numbers when the new round start.
-
I have trouble with for statements -
How do I create a new number without repeating already used numbers?
Here is what I have so far - so you can better see what Im trying to do.
Actually, only the first three need to be random as all the following assignments are the same. If that makes it simpler.
I am working in sorrids state files also - using SH
Code:
/* <<<<< Sorridstrokers weapon state >>>>>
If you want to make any variable accesable after the player has left the server:
self.listener.your_variable = your value
Else:
self.your_variable = your value
*/
main local.weapon:
if (self.dmteam == "allies")
{
local.randomchoice = randomint(self.dmteam.size)+1
for(local.i=1;local.i<=self.dmteam.size;local.i++)
{
if(local.randomchoice != self.player[local.i])
{
self.player[local.i] = local.randomchoice
thread allied_squad_assignment local.i local.weapon
}
else {wtf}
}
}
else
{//axis}
end
allied_squad_assignment local.i local.weapon:
switch( local.i )
{
case 1://Lieutenant - SMG SQUAD LEADER
self takeall
if(getcvar SUB_SMGforM1 == "1")
{
self give ("models/weapons/m1_garand.tik")
}
else
{
self give ("models/weapons/thompsonsmg.tik")
}
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self ammo grenade 1
self useweaponclass smg
break
case 2://Corporal - SNIPER SPECIALIST
self takeall
self give ("models/weapons/svt_rifle.tik")
self give ("models/weapons/silencedpistol.tik")
self give ("models/weapons/RDG-1_Smoke_grenade.tik")
self ammo smokegrenade 2
self useweaponclass rifle
break
case 3://Seargent - BAR SPECIALIST
self takeall
if(getcvar SUB_MGforM1 == "1")
{
self give ("models/weapons/m1_garand.tik")
}
else
{
self give ("models/weapons/bar.tik")
}
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self give ("models/weapons/RDG-1_Smoke_grenade.tik")
self ammo grenade 1
self ammo smokegrenade 1
self useweaponclass mg
break
default://PRIVATE - RIFLER
self takeall
self give ("models/weapons/enfield.tik")
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/enfield.tik
//thread weapon_check local.rweapon local.weapon
break
}
end
-
-
I'm not fully understanding arrays in a for statement.
if i have a team of 6 players, would I be making an array with random integers 1-6 like this -
Code:
level.random_pick = makeArray
1 "5"
2 "3"
3 "2"
4 "4"
5 "6"
6 "1"
endArray
Do I fill the array with random numbers first then the first player is assigned - 5, second - 3 and so on?
or am I making the array and assigning the players simultaneously?
-
You might not even need to save those values in a separate file. I think using game.variables or game.arrays (as opposed to local. and level.) can save a player's assignment between levels. But that assumes every player keeps the same entnum between levels too.
Something like this below may or may not be useful.
Code:
NOTE: you might need to add "game.playerassigned[0] = NIL" before running this script. initializing [0] as NIL makes .size = 0 instead of -1.
main: // exec global/thisscript.scr, run this after level waittill spawn.
while($player.size < 1) { waitframe }
local.players = $player.size
for(local.i = 1; local.i <= $player.size; local.i++)
{
if($player[local.i] != NULL && ($player[local.i].dmteam == "allies" || $player[local.i].dmteam == "axis"))
{
if(game.playerassigned[local.i] == NIL || game.playerassigned[local.i] != $player[local.i].assignment)
{
local.r = randomint(12) + 1
while(local.r == $player[local.i].assignment)
{
local.r = randomint(12) + 1
waitframe
}
$player[local.i].assignment = local.r
game.playerassigned[local.i] = local.r
if($player[local.i].dmteam == "allies") { thread allied_squad_assignment local.r }
if($player[local.i].dmteam == "axis") { thread axis_squad_assignment local.r }
}
}
if($player[local.i] == NULL) { game.playerassigned[local.i] = NIL }
}
while($player.size <= local.players) { waitframe } // wait until a new player joins, then restart this thread.
thread main
end
-
Thanks for your help everybody, I'm afraid I just couldn't wrap my head around using the array in a for statement. So I had to think of another way.
I made a cascading switch - players are randomly sent to one of the cases and if its taken they are sent to the next case and so on. if they reach the bottom they are sent to the top.
Does this seem efficient?
It seems to work except for this -
Code:
self model ("models/player/german_wehrmacht_soldier.tik")
the axis models don't have team icons and are seen by allies with allied avatars.
team selector
Code:
squad_builder local.weapon:
self takeall
if (self.dmteam == "allies")
{
local.r = randomint(allies.dmteam.size)+1
local.t = allies.dmteam.size
/////////////////////////debug////
//local.r = (int(getcvar test_randomchoice))
//local.t = (int(getcvar test_teamsize))
/////////////////////////debug////
//level.2assigned = 1
thread allied_squad_assignment local.r local.t local.weapon
}
else
{
local.r = randomint(axis.dmteam.size)+1
local.t = axis.dmteam.size
/////////////////////////debug////
//local.r = (int(getcvar test_randomchoice))
//local.t = (int(getcvar test_teamsize))
/////////////////////////debug////
thread axis_squad_assignment local.r local.t local.weapon
}
end
allied squad assignments
Code:
allied_squad_assignment local.r local.t local.weapon:
switch( local.r )
{
case 1:////////////Lieutenant - SMG SQUAD LEADER////////////
if(level.1assigned == 1 )
{
local.r = 2
goto allied_squad_assignment local.r local.t local.weapon
}
if(level.1assigned == nil)
level.1assigned = 1
self takeall
local.sub = (getcvar "SUB_SMGforM1")
switch( local.sub )
{
case 1:
self give ("models/weapons/m1_garand.tik")
self useweaponclass rifle
//local.rweapon = models/weapons/m1_garand.tik
//thread weapon_check local.rweapon local.weapon
break
default:
self give ("models/weapons/thompsonsmg.tik")
self useweaponclass smg
//local.rweapon = models/weapons/thompsonsmg.tik
//thread weapon_check local.rweapon local.weapon
break
}
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self ammo grenade 1
self model ("models/player/allied_airborne.tik")
wait 5
self iprint ("You are a Lieutenant - SQUAD LEADER ") 1
break
case 2:////////////Corporal - SNIPER SPECIALIST////////////
if(level.2assigned == 1 )
{
if(local.t <= 2)
{
local.r = 1
goto allied_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 3
goto allied_squad_assignment local.r local.t local.weapon
}
}
if(level.2assigned == nil)
level.2assigned = 1
self takeall
self give ("models/weapons/svt_rifle.tik")
self give ("models/weapons/silencedpistol.tik")
self give ("models/weapons/RDG-1_Smoke_grenade.tik")
self ammo smokegrenade 2
self useweaponclass rifle
//local.rweapon = models/weapons/svt_rifle.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/allied_501st_pir_soldier.tik")
wait 5
self iprint ("You are a Corporal - SNIPER SPECIALIST") 1
break
case 3:////////////Seargent - BAR SPECIALIST////////////
if(level.3assigned == 1 )
{
if(local.t <= 3)
{
local.r = 1
goto allied_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 4
goto allied_squad_assignment local.r local.t local.weapon
}
}
if(level.3assigned == nil)
level.3assigned = 1
self takeall
local.sub = (getcvar "SUB_MGforM1")
switch( local.sub )
{
case 1:
self give ("models/weapons/m1_garand.tik")
self useweaponclass rifle
//local.rweapon = models/weapons/m1_garand.tik
//thread weapon_check local.rweapon local.weapon
break
default:
self give ("models/weapons/bar.tik")
self useweaponclass smg
//local.rweapon = models/weapons/bar.tik
//thread weapon_check local.rweapon local.weapon
break
}
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self give ("models/weapons/RDG-1_Smoke_grenade.tik")
self ammo grenade 1
self ammo smokegrenade 1
self useweaponclass mg
//local.rweapon = models/weapons/bar.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/allied_501st_pir_soldier.tik")
wait 5
self iprint ("You are a Seargent - BAR SPECIALIST ") 1
break
case 4:////////////SPECIALIST RIFLER////////////
if(level.4assigned == 1 )
{
if(local.t <= 4)
{
local.r = 1
goto allied_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 5
goto allied_squad_assignment local.r local.t local.weapon
}
}
if(level.4assigned == nil)
level.4assigned = 1
self takeall
self give ("models/weapons/enfield.tik")
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/enfield.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/allied_501st_Pir_scout.tik")
wait 5
self iprint ("You are a SPECIALIST - RIFLER") 1
break
case 5:////////////PRIVATE - RIFLER////////////
if(level.5assigned == 1 )
{
if(local.t <= 5)
{
local.r = 1
goto allied_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 6
goto allied_squad_assignment local.r local.t local.weapon
}
}
if(level.5assigned == nil)
level.5assigned = 1
self takeall
self give ("models/weapons/enfield.tik")
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/enfield.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/allied_501st_Pir_scout.tik")
wait 5
self iprint ("You are a PRIVATE 1ST CLASS - RIFLER") 1
break
case 6:////////////PRIVATE - SCOUT////////////
if(level.6assigned == 1 )
{
if(local.local.t <= 6)
{
local.r = 1
goto allied_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 6
goto allied_squad_assignment local.r local.t local.weapon
}
}
if(level.6assigned == nil)
level.6assigned = 1
self takeall
self give ("models/weapons/enfield.tik")
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/enfield.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/allied_501st_Pir_scout.tik")
wait 5
self iprint ("You are a PRIVATE - SCOUT RIFLER") 1
break
case 7:////////////PRIVATE - RIFLER////////////
if(level.7assigned == 1 )
{
if(local.t <= 7)
{
local.r = 1
goto allied_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 8
goto allied_squad_assignment local.r local.t local.weapon
}
}
if(level.7assigned == nil)
level.7assigned = 1
self takeall
self give ("models/weapons/enfield.tik")
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/enfield.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/allied_501st_Pir_scout.tik")
wait 5
self iprint ("You are a PRIVATE 1st Class - RIFLER") 1
break
case 8:////////////PRIVATE - SCOUT RIFLER////////////
if(level.8assigned == 1 )
{
local.r = 1
wait .2
goto allied_squad_assignment local.r local.t local.weapon
}
if(level.8assigned == nil)
level.8assigned = 1
self takeall
self give ("models/weapons/enfield.tik")
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/enfield.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/allied_501st_Pir_scout.tik")
wait 5
self iprint ("You are a PRIVATE - SCOUT RIFLER") 1
break
default:////////////PRIVATE - RIFLER////////////
self takeall
self give ("models/weapons/enfield.tik")
self give ("models/weapons/colt45.tik")
self give ("models/weapons/m2frag_grenade.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/enfield.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/allied_501st_Pir_scout.tik")
wait 5
self iprint ("You are a PRIVATE - RIFLER") 1
break
}
end
axis squad assignments
Code:
axis_squad_assignment local.r local.t local.weapon:
switch( local.r )
{
case 1://Gruppenführer - SMG SQUAD LEADER
if(level.1xassigned == 1 )
{
local.r = 2
goto aaxis_squad_assignment local.r local.t local.weapon
}
if(level.1xassigned == nil)
level.1xassigned = 1
self takeall
self give ("models/weapons/mp40.tik")
self give ("models/weapons/p38.tik")
self give ("models/weapons/steilhandgranate.tik")
self ammo grenade 1
self useweaponclass smg
//local.rweapon = models/weapons/mp40.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/German_wehrmacht_officer.tik")
wait 5
self iprint ("You are Gruppenführer - SQUAD LEADER ")
break
case 2://Scharfschützin - SNIPER SPECIALIST
if(level.2xassigned == 1 )
{
if(local.t <= 2)
{
local.r = 1
goto axis_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 3
goto axis_squad_assignment local.r local.t local.weapon
}
}
if(level.2xassigned == nil)
level.2xassigned = 1
self takeall
self give ("models/weapons/g43.tik")
self give ("models/weapons/silencedpistol.tik")
self give ("models/weapons/RDG-1_Smoke_grenade.tik")
self ammo smokegrenade 2
self useweaponclass rifle
//local.rweapon = models/weapons/g43.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/german_wehrmacht_soldier.tik")
wait 5
self iprint ("You are Scharfschützin - SNIPER SPECIALIST ")
break
case 3://M.G.Schütze - MG SPECIALIST
if(level.3xassigned == 1 )
{
if(local.t <= 3)
{
local.r = 1
goto axis_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 4
goto axis_squad_assignment local.r local.t local.weapon
}
}
if(level.3xassigned == nil)
level.3xassigned = 1
self takeall
self give ("models/weapons/mp44.tik")
self give ("models/weapons/p38.tik")
self give ("models/weapons/steilhandgranate.tik")
self give ("models/weapons/RDG-1_Smoke_grenade.tik")
self ammo grenade 1
self ammo smokegrenade 1
self useweaponclass mg
//local.rweapon = models/weapons/mp44.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/german_wehrmacht_soldier.tik")
wait 5
self iprint ("You are M.G.Schütze - MG SPECIALIST ")
break
case 4://Schützen - RIFLER
if(level.4xassigned == 1 )
{
if(local.t <= 4)
{
local.r = 1
goto axis_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 5
goto axis_squad_assignment local.r local.t local.weapon
}
}
if(level.4xassigned == nil)
level.4xassigned = 1
self takeall
self give ("models/weapons/kar98.tik")
self give ("models/weapons/p38.tik")
self give ("models/weapons/steilhandgranate.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/kar98.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/german_Kradshutzen.tik")
wait 5
self iprint ("You are Schützen - RIFLER ")
break
case 5://Schützen - RIFLER
if(level.5xassigned == 1 )
{
if(local.t <= 5)
{
local.r = 1
goto axis_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 6
goto axis_squad_assignment local.r local.t local.weapon
}
}
if(level.5xassigned == nil)
level.5xassigned = 1
self takeall
self give ("models/weapons/kar98.tik")
self give ("models/weapons/p38.tik")
self give ("models/weapons/steilhandgranate.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/kar98.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/german_Kradshutzen.tik")
wait 5
self iprint ("You are Schützen - RIFLER ")
break
case 6://Schützen - RIFLER
if(level.6xassigned == 1 )
{
if(local.local.t <= 6)
{
local.r = 1
goto axis_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 6
goto axis_squad_assignment local.r local.t local.weapon
}
}
if(level.6xassigned == nil)
level.6xassigned = 1
self takeall
self give ("models/weapons/kar98.tik")
self give ("models/weapons/p38.tik")
self give ("models/weapons/steilhandgranate.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/kar98.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/german_Kradshutzen.tik")
wait 5
self iprint ("You are Schützen - RIFLER ")
break
case 7://Schützen - RIFLER
if(level.7xassigned == 1 )
{
if(local.t <= 7)
{
local.r = 1
goto axis_squad_assignment local.r local.t local.weapon
}
else
{
local.r = 8
goto axis_squad_assignment local.r local.t local.weapon
}
}
if(level.7xassigned == nil)
level.7xassigned = 1
self takeall
self give ("models/weapons/kar98.tik")
self give ("models/weapons/p38.tik")
self give ("models/weapons/steilhandgranate.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/kar98.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/german_Kradshutzen.tik")
wait 5
self iprint ("You are Schützen - RIFLER ")
break
case 8://Schützen - RIFLER
if(level.8xassigned == 1 )
{
local.r = 1
wait .2
goto axis_squad_assignment local.r local.t local.weapon
}
if(level.8xassigned == nil)
level.8xassigned = 1
self takeall
self give ("models/weapons/kar98.tik")
self give ("models/weapons/steilhandgranate.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/kar98.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/german_Kradshutzen.tik")
wait 5
self iprint ("You are Schützen - RIFLER ")
break
default://Schützen - RIFLER
self takeall
self give ("models/weapons/kar98.tik")
self give ("models/weapons/p38.tik")
self give ("models/weapons/steilhandgranate.tik")
self ammo grenade 1
self useweaponclass rifle
//local.rweapon = models/weapons/kar98.tik
//thread weapon_check local.rweapon local.weapon
self model ("models/player/german_Kradshutzen.tik")
wait 5
self iprint ("You are Schützen - RIFLER ")
break
}
end
-
@Searingwolfe: The "game" variable dont work on MP, only works properly on SP mode.
-
Quote:
Originally Posted by
ViPER
Code:
self model ("models/player/german_wehrmacht_soldier.tik")
Is "model" a SP var ? Is that why it only works properly for allies? Aside from that issue I like that it doesn't change the user's preference so the next map it's back to thier chosen skin.
I tried
germanmodel
germanplayermodel
dm_germanplayermodel
Is it possible to remove all the team avatars and detection cross hairs ? This would be a preferred solution, adding realism.