ID:150127
 
Does anyone know how to make locked doors that require a key with the same number as the door without codeing each door seperately?
obj/door
var/keycode
var/locked = 0 as num
var/open = 0 as num
icon='closed.dmi'
density = 1
opacity = 1
New()
..()
anchor
keycode = "[rand(1,4)][rand(1,4)][rand(1,4)][rand(1,4)]"
for(var/obj/door/O in world)
if(O.keycode == src.keycode)
goto anchor
src.name = "Door [src.keycode]"
verb/MakeKey()
set src in oview(1)
var/newkey = new /obj/key (usr)
newkey.keycode = src.keycode
newkey.name = "Key [newkey.codekey]"
verb/LockUnlock()
set src in oview(1)
set name = "Lock/Unlock Door"
var/keysmatched = 0 as num
for(var/obj/Key/O in usr.contents)
if(O.keycode == src.keycode)
keysmatched += 1
if(keysmatched > 0)
if(!src.locked)
src.locked = 1
else
src.locked = 0
verb/OpenClose()
set src in oview(1)
set name = "Open/Close Door"
if(!src.locked)
if(src.open)
src.open = 0
src.icon = 'closed.dmi'
src.density = 1
src.opacity = 1
else
src.open = 1
src.icon = 'open.dmi'
src.density = 0
src.opacity = 0
else
usr << "The door is locked."
obj/key/var/keycode


Chew on that...
You can make a GM verb that creates a key and connects it do a door in-game. Example:
obj
  key
    icon = 'key.dmi'
    var
      obj/door/unlocks

mob
  verb
    keyCreate(obj/door/D in view(1))
      var/obj/key/K = new()
      K.unlocks = D
      K.loc = src
    keyInfo(obj/key/K in view(1))
      var/door/D = K.unlocks
      src << "This key unlocks the door at [D.x],[D.y],[D.z]"

A GM can now stand next to a door and create a key that unlocks it. This works if you only want a key to unlock one door. If you want the key to unlock several doors, you need a unlocks list in the key instead of a var.


/Andreas