Example #1
0
        public static void ProcesssCallToArms(Players.Player player, Colony colony)
        {
            var state = ColonyState.GetColonyState(colony);

            state.CallToArmsEnabled = !state.CallToArmsEnabled;

            if (!_Jobs.ContainsKey(colony))
            {
                _Jobs.Add(colony, new Dictionary <NPCBase, IJob>());
            }

            try
            {
                if (state.CallToArmsEnabled)
                {
                    PandaChat.Send(player, "Call to arms activated!", ChatColor.red, ChatStyle.bold);


                    foreach (var follower in colony.Followers)
                    {
                        var job = follower.Job;

                        if (job != null && CantCallToArms(job))
                        {
                            continue;
                        }

                        try
                        {
                            if (job != null)
                            {
                                if (job.GetType() != typeof(CalltoArmsJob))
                                {
                                    _Jobs[colony][follower] = job;
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            PandaLogger.LogError(ex);
                        }

                        var armsJob = new CalltoArmsJob();
                        follower.TakeJob(armsJob);
                    }
                }
                else
                {
                    PandaChat.Send(player, "Call to arms deactivated.", ChatColor.green, ChatStyle.bold);
                    var assignedWorkers = new List <NPCBase>();

                    foreach (var follower in colony.Followers)
                    {
                        var job = follower.Job;

                        if (job != null && job.GetType() == typeof(CalltoArmsJob))
                        {
                            follower.ClearJob();
                        }

                        if (_Jobs[colony].ContainsKey(follower) && _Jobs[colony][follower].NeedsNPC)
                        {
                            assignedWorkers.Add(follower);
                            follower.TakeJob(_Jobs[colony][follower]);
                        }
                    }

                    _Jobs[colony].Clear();
                }
            }
            catch (Exception ex)
            {
                PandaLogger.LogError(ex);
            }

            colony.SendCommonData();
        }
        public bool TryDoCommand(Players.Player player, string chat)
        {
            if (player == null || player.ID == NetworkID.Server)
            {
                return(true);
            }

            string[]    array  = CommandManager.SplitCommand(chat);
            Colony      colony = Colony.Get(player);
            PlayerState state  = PlayerState.GetPlayerState(player);

            state.CallToArmsEnabled = !state.CallToArmsEnabled;

            if (state.CallToArmsEnabled)
            {
                PandaChat.Send(player, "Call to arms activated!", ChatColor.red, ChatStyle.bold);

                foreach (var follower in colony.Followers)
                {
                    var job = follower.Job;

                    if (!CanCallToArms(job))
                    {
                        continue;
                    }

                    try
                    {
                        if (job != null)
                        {
                            if (job.GetType() != typeof(CalltoArmsJob))
                            {
                                _Jobs[follower] = job;
                            }

                            job.OnRemovedNPC();
                            follower.ClearJob();
                        }
                    }
                    catch (Exception ex)
                    {
                        PandaLogger.LogError(ex);
                    }

                    var armsJob = new CalltoArmsJob();
                    _callToArmsJobs.Add(armsJob);
                    armsJob.OnAssignedNPC(follower);
                    follower.TakeJob(armsJob);
                }
            }
            else
            {
                PandaChat.Send(player, "Call to arms deactivated.", ChatColor.green, ChatStyle.bold);
                List <NPCBase> assignedWorkers = new List <NPCBase>();

                foreach (var follower in colony.Followers)
                {
                    var job = follower.Job;

                    if (job != null && job.GetType() == typeof(CalltoArmsJob))
                    {
                        follower.ClearJob();
                        job.OnRemovedNPC();
                        ((JobTracker.JobFinder)JobTracker.GetOrCreateJobFinder(player)).openJobs.Remove(job);
                    }

                    if (_Jobs.ContainsKey(follower) && _Jobs[follower].NeedsNPC)
                    {
                        assignedWorkers.Add(follower);
                        follower.TakeJob(_Jobs[follower]);
                        _Jobs[follower].OnAssignedNPC(follower);
                        JobTracker.Remove(player, _Jobs[follower].KeyLocation);
                    }
                }

                _Jobs.Clear();
            }

            foreach (var armsJob in _callToArmsJobs)
            {
                ((JobTracker.JobFinder)JobTracker.GetOrCreateJobFinder(player)).openJobs.Remove(armsJob);
            }

            _callToArmsJobs.Clear();
            JobTracker.Update();
            Colony.SendColonistCount(player);

            return(true);
        }