Maybe add a whole new layer of string logic...
Equals(= 1.equals(2) ) : (red slave: String 1, green slave: String 2) -> 0..1
Concatenate(= 1+2 ) : (red slave: String 1, green slave: String 2) -> String
Subtract(= 1-2 ) : (red slave: String 1, green slave: String 2)
Contains(= 1.contains(2) ) : (red slave: String, green slave: SubString) -> 0..1
abstract StringLogic(red slave: String [, green slave: string 2] [, blue slave: logic 0..1 set-able])
All accept 1 logic input (= blue slave : default = true) which allows them change their output if the inputs change
Connect StringLogic:
try{ connect as red slave }
-> special case(red already set) -> try to connect as green slave
try{ connect as green (=second) slave }
-> special case(green already set) -> throw error( disconnect a red or green slave first )
Connect BitLogic:
try{ connect as blue slave }
-> special case(blue already set) -> throw error( can only have one blue slave (0..1 logic gates) )
Could also solve the faction-permission issue with passwords.
To avoid lag, I imagine something like : each String logic block on your ship produces 1 logic-power per 0.5 seconds and adds 2 logic-power capacity. Each action requires 1 logic power. If you run out of power, delay processing by 0.5 seconds and you have enough power to continue.
Maybe with diminishing returns per individual blocks connected to each other...