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); }