private bool IsOperatedByAnother(ItemComponent target) { foreach (var c in Character.CharacterList) { if (c == character) { continue; } if (!HumanAIController.IsFriendly(c)) { continue; } if (c.SelectedConstruction != target.Item) { continue; } // If the other character is player, don't try to operate if (c.IsRemotePlayer || Character.Controlled == c) { return(true); } if (c.AIController is HumanAIController humanAi) { // If the other character is ordered to operate the item, let him do it if (humanAi.ObjectiveManager.IsCurrentOrder <AIObjectiveOperateItem>()) { return(true); } else { if (target is Steering) { // Steering is hard-coded -> cannot use the required skills collection defined in the xml return(character.GetSkillLevel("helm") <= c.GetSkillLevel("helm")); } else { return(target.DegreeOfSuccess(character) <= target.DegreeOfSuccess(c)); } } } else { // Shouldn't go here, unless we allow non-humans to operate items return(false); } } return(false); }