예제 #1
0
        public bool StartGame(TasSayEventArgs e)
        {
            try {
                if (!autoHost.ComFix(e, "silent"))
                {
                    autoHost.Respond(e, "Teams were not fixed, fixing");
                    return(false);
                }

                string currentMapName = tas.GetBattle().Map.Name;
                var    planet         = server.GetAttackOptions(account).Where(p => p.MapName == currentMapName).SingleOrDefault();

                if (planet == null)
                {
                    autoHost.SayBattle("This planet is not currently allowed, select another one");
                    return(false);
                }

                var factions = server.GetFactions(account);
                var actual   = new List <IPlayer>();
                foreach (var user in tas.GetBattle().Users)
                {
                    if (!user.IsSpectator)
                    {
                        var info = server.GetPlayerInfo(account, user.name);
                        actual.Add(info);
                        string side    = tas.GetBattle().Mod.Sides[user.Side];
                        string hisSide = factions.Where(f => f.Name == info.FactionName).Single().SpringSide;

                        if (!string.Equals(side, hisSide, StringComparison.InvariantCultureIgnoreCase))
                        {
                            autoHost.SayBattle(string.Format("{0} must switch to {1}", user.name, hisSide), false);
                            return(false);
                        }
                    }
                }


                string options = server.GetStartupModOptions(account, tas.GetBattle().Map.Name, actual);
                //SayBattle(Encoding.ASCII.GetString(Convert.FromBase64String(options.Replace("+", "="))));
                var b = tas.GetBattle();
                foreach (var o in b.Mod.Options)
                {
                    if (o.Key == "planetwars")
                    {
                        string res;
                        if (o.GetPair(options, out res))
                        {
                            tas.SetScriptTag(res);

                            var startEvent = server.GetPlayersToNotify(account, currentMapName, ReminderEvent.OnBattleStarted);
                            foreach (var s in startEvent)
                            {
                                tas.Say(TasClient.SayPlace.User, s, string.Format("PlanetWars battle for planet {0} owned by {1} is starting.", planet.Name, planet.OwnerName), false);
                            }

                            return(true);
                        }
                        else
                        {
                            autoHost.Respond(e, "Eror setting script tag");
                            return(false);
                        }
                    }
                }
                autoHost.Respond(e, "This mod does not support PlanetWars");
                return(false);
            } catch (Exception ex) {
                autoHost.SayBattle(string.Format("Error when checking PlanetWars teams: {0}", ex), false);
                return(false);
            }
        }