aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS_TheReturn
diff options
context:
space:
mode:
authorMichael <[email protected]>2017-07-27 12:03:55 -0400
committerMichael <[email protected]>2017-07-27 12:03:55 -0400
commit89dfed83afbb8272388940cd0b4b46b8b066153f (patch)
tree79e9e22d4c8a5d8274db55ed1c54dc17d58c5db5 /ShiftOS_TheReturn
parentcac4e1f9a7af1c92e4bd61a42fb48359df6eeaec (diff)
downloadshiftos_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.cs66
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; }
}
}