- Home /
Question by
ItsChipper · Jan 14, 2019 at 09:28 PM ·
networkingmultiplayermultiplayer-networkingteams
Making a team based multiplayer game with Unet but problem with making teams
i have a problem when trying to make teams where anyone who joins after the host are on the same team. IE the host is on red but anyone who joins after is on blue.
relevant code
private Dictionary Score = new Dictionary();
public Dictionary<string, string> Teams = new Dictionary<string, string>();
private Dictionary<string, int> AmountInTemas = new Dictionary<string, int>();
private List<string> TeamsStore = new List<string>();
[SyncVar]
public int TeamCount = 0;
private int LowestValue = -1;
private void Start()
{
Score.Add("blue", 0);
Score.Add("red", 0);
Score.Add("yellow", 0);
Score.Add("green", 0);
AmountInTemas.Add("blue", 0);
AmountInTemas.Add("red", 0);
AmountInTemas.Add("yellow", 0);
AmountInTemas.Add("green", 0);
}
public string SearchLists(string Item)
{
string Team = Teams[Item];
return Team;
}
public string AddToTeam(string Player)
{
foreach (KeyValuePair<string, int> names in AmountInTemas)
{
if (LowestValue == -1)
{
LowestValue = names.Value;
TeamsStore.Add(names.Key);
}else if(names.Value < LowestValue)
{
LowestValue = names.Value;
TeamsStore.Clear();
TeamsStore.Add(names.Key);
}else if(names.Value == LowestValue)
{
TeamsStore.Add(names.Key);
}
}
LowestValue = -1;
int RndNum = Random.Range(0, ((TeamsStore.Count) - 1));
Teams.Add(Player, TeamsStore[RndNum]);
AmountInTemas[TeamsStore[RndNum]] += 1;
TeamsStore.Clear();
foreach (KeyValuePair<string,string> names in Teams)
{
Debug.Log(names);
}
return Teams[Player];
}
public void SetTeam (string Player, string Team)
{
Teams.Add(Player, Team);
foreach (KeyValuePair<string, string> names in Teams)
{
Debug.Log(names);
}
}
public void UpdateTeam(string Player, string Team)
{
Teams[Player] = Team;
foreach (KeyValuePair<string, string> names in Teams)
{
Debug.Log(names);
}
}
public string CheckTeam(string Player)
{
return Teams[Player];
}
public void IncreaseScore(string Team)
{
Score[Team] += 1;
}
public void LogScore()
{
foreach (KeyValuePair<string, int> scores in Score)
{
Debug.Log(scores);
}
}
}
public void SetUp() { Body = this.gameObject.transform.GetChild(2); Body = Body.gameObject.transform.GetChild(0);
BodyRend = Body.GetComponent<Renderer>();
if (Teams == null) {
Teams = GameObject.Find("GameManager").GetComponent<TeamManager>();
}
Enabled = new bool[DeathDisable.Length];
for(int i = 0; i < Enabled.Length; i++)
{
Enabled[i] = DeathDisable[i].enabled;
}
if (isLocalPlayer)
{
TempTeam = Teams.AddToTeam(this.transform.name);
CmdSetTeam(TempTeam);
}else if (!isLocalPlayer)
{
Teams.SetTeam(this.transform.name, Team);
}
SetStart();
}
[Command]
public void CmdSetTeam(string CurrentTeam)
{
Team = CurrentTeam;
}
void OnHook(string value)
{
Team = value;
Teams.UpdateTeam(this.transform.name, Team);
SetColour();
}
any help would be greatly appreciated, thanks in advance.
Comment
Your answer
Follow this Question
Related Questions
Unity networking tutorial? 6 Answers
Can i make multiplayer game without unity multiplayer service ? 1 Answer
MLAPI spawn player prefab 2 Answers
UNET Multiplayer Lobby not creating an instance of the lobby player 1 Answer
How do I setup a specific Multiplayer game where there are rounds and teams? 1 Answer