void SessionFounder() { Random random = new Random(); while (sessionAwaitPlayers.Count > 1) { lock (sessionAwaitPlayers) { var p1 = sessionAwaitPlayers[random.Next(sessionAwaitPlayers.Count)]; sessionAwaitPlayers.Remove(p1); var p2 = sessionAwaitPlayers[random.Next(sessionAwaitPlayers.Count)]; sessionAwaitPlayers.Remove(p2); var session = new CardSessionServer.Session(new Position(8, 8), new Pair <Modifier, int>[] { new Pair <Modifier, int>(new DurableModifier(typeof(Destroyable), "DeltaHealth", new object[] { 10 }), 15), new Pair <Modifier, int>(new Modifier(typeof(Attacker), "DeltaAttack", new object[] { -10 }), 15) }); foreach (var f in p1.PlayerInfo.SharedPlayerInfo.CurrentSoliders) { var ser = Soliders.Find(q => q.Obj2 == f).Obj1; var o = BinarySerializer.Deserialize(BinarySerializer.Serialize(ser)); ((Container)o).SetOwner(p1.ControllerInfo); session.AddObject((Container)o); } foreach (var f in p1.PlayerInfo.SharedPlayerInfo.CurrentSpells) { var ser = Spells.Find(q => q.Obj2 == f).Obj1; var o = BinarySerializer.Deserialize(BinarySerializer.Serialize(ser)); ((Container)o).SetOwner(p1.ControllerInfo); session.AddObject((Container)o); } foreach (var f in p2.PlayerInfo.SharedPlayerInfo.CurrentSoliders) { var ser = Soliders.Find(q => q.Obj2 == f).Obj1; var o = BinarySerializer.Deserialize(BinarySerializer.Serialize(ser)); ((Container)o).SetOwner(p2.ControllerInfo); session.AddObject((Container)o); } foreach (var f in p2.PlayerInfo.SharedPlayerInfo.CurrentSpells) { var ser = Spells.Find(q => q.Obj2 == f).Obj1; var o = BinarySerializer.Deserialize(BinarySerializer.Serialize(ser)); ((Container)o).SetOwner(p2.ControllerInfo); session.AddObject((Container)o); } session.AddController(p1); session.AddController(p2); session.StartSession(); } } }
public Pair <InterpretedObject, Info> LootSolider(List <Pair <InterpretedObject, Info> > owned) { if (owned.Count == Soliders.Count) { return(null); } Random random = new Random(); var f = Soliders.FindAll(q => !owned.Contains(q.Obj2)); return(f[random.Next(f.Count)].Obj2); }
public Supervisor(List <Pair <Container, Info> > soliders, List <Pair <Container, Info> > spells, SimpleDatabase.Database database, int startSolidersCount, int startSpellsCount) { if ((this.database = database) == null) { throw new ArgumentNullException(nameof(database)); } foreach (var f in soliders) { Soliders.Add(new Pair <Container, Pair <InterpretedObject, Info> >(f.Obj1, new Pair <InterpretedObject, Info>(Interpretor.Interpretate(f.Obj1), f.Obj2))); } foreach (var f in spells) { Spells.Add(new Pair <Container, Pair <InterpretedObject, Info> >(f.Obj1, new Pair <InterpretedObject, Info>(Interpretor.Interpretate(f.Obj1), f.Obj2))); } (sessionFounder = new Task(new Action(SessionFounder))).Start(); StartSolidersCount = startSolidersCount; StartSpellsCount = startSpellsCount; }