diff options
| author | Michael <[email protected]> | 2017-07-27 12:03:55 -0400 |
|---|---|---|
| committer | Michael <[email protected]> | 2017-07-27 12:03:55 -0400 |
| commit | 89dfed83afbb8272388940cd0b4b46b8b066153f (patch) | |
| tree | 79e9e22d4c8a5d8274db55ed1c54dc17d58c5db5 /ShiftOS_TheReturn | |
| parent | cac4e1f9a7af1c92e4bd61a42fb48359df6eeaec (diff) | |
| download | shiftos_thereturn-89dfed83afbb8272388940cd0b4b46b8b066153f.tar.gz shiftos_thereturn-89dfed83afbb8272388940cd0b4b46b8b066153f.tar.bz2 shiftos_thereturn-89dfed83afbb8272388940cd0b4b46b8b066153f.zip | |
Hacking UI is coming in.
Diffstat (limited to 'ShiftOS_TheReturn')
| -rw-r--r-- | ShiftOS_TheReturn/Hacking.cs | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/ShiftOS_TheReturn/Hacking.cs b/ShiftOS_TheReturn/Hacking.cs index ea2d89b..8eb34b4 100644 --- a/ShiftOS_TheReturn/Hacking.cs +++ b/ShiftOS_TheReturn/Hacking.cs @@ -74,29 +74,66 @@ namespace ShiftOS.Engine { Value = 25, Name = "SMTP mailserver (unencrypted)", + Tier = hsys.Data.LockTier, + Locks = GetLocks(hsys.Data.LockTier, hsys.Data.FirewallStrength), }); if (data.SystemType.HasFlag(Objects.SystemType.FileServer)) hsys.PortsToUnlock.Add(new Port { Value = 22, Name = "File Transfer Protocol", + Tier = hsys.Data.LockTier, + Locks = GetLocks(hsys.Data.LockTier, hsys.Data.FirewallStrength), }); if (data.SystemType.HasFlag(Objects.SystemType.SSHServer)) hsys.PortsToUnlock.Add(new Port { Value = 21, Name = "ShiftSSH server", + Tier = hsys.Data.LockTier, + Locks = GetLocks(hsys.Data.LockTier, hsys.Data.FirewallStrength), }); if (data.SystemType.HasFlag(Objects.SystemType.Database)) hsys.PortsToUnlock.Add(new Port { Value = 3306, Name = "MySQL database", + Tier = hsys.Data.LockTier, + Locks = GetLocks(hsys.Data.LockTier, hsys.Data.FirewallStrength), }); CurrentHackable = hsys; } + public static List<PortLock> GetLocks(int tier, int fwallstrength) + { + var locks = new List<PortLock>(); + var lckTypes = new List<Type>(); + foreach(var lck in ReflectMan.Types.Where(x=>x.BaseType == typeof(PortLock))) + { + var lckAttrib = lck.GetCustomAttributes(false).FirstOrDefault(x => x is LockAttribute) as LockAttribute; + if(lckAttrib != null) + { + if(lckAttrib.Tier == tier) + { + lckTypes.Add(lck); + } + } + } + if (lckTypes.Count > 0) + { + var rnd = new Random(); + for (int i = 0; i < fwallstrength; i++) + { + int _typeindex = rnd.Next(lckTypes.Count); + var type = (PortLock)Activator.CreateInstance(lckTypes[_typeindex], lckTypes[_typeindex].GetCustomAttributes(false).FirstOrDefault(x => x is LockAttribute)); + lckTypes.RemoveAt(_typeindex); + locks.Add(type); + } + } + return locks; + } + public static void FailHack() { if (CurrentHackable == null) @@ -180,5 +217,34 @@ namespace ShiftOS.Engine { public string Name { get; set; } public int Value { get; set; } + public int Tier { get; set; } + public List<PortLock> Locks { get; set; } //not a hackmud thing i promise + } + + public abstract class PortLock + { + public PortLock(LockAttribute attrib) + { + Attribute = attrib; + } + + public LockAttribute Attribute { get; private set; } + + public abstract bool Evaluate(Dictionary<string, object> args); + } + + [AttributeUsage(AttributeTargets.Class, AllowMultiple =false)] + public class LockAttribute : Attribute + { + public LockAttribute(string name, string company, int tier) + { + Name = name; + Company = company; + Tier = tier; + } + + public int Tier { get; private set; } + public string Name { get; private set; } + public string Company { get; private set; } } } |
