RanvierMUD / ranviermud

A node.js based MUD game engine
https://ranviermud.com
MIT License
796 stars 247 forks source link

Empty item list results in error #305

Closed bostrt closed 6 years ago

bostrt commented 6 years ago

Description

I have a room with an empty list of items {}. Ranvier fails to start:

2017-12-13T04:04:58.418Z - verbose:     SPAWN: Adding item [null] to room [A small room.]
/home/mud/ranviermud/src/Item.js:41
      if (!(prop in item)) {
                    ^

TypeError: Cannot use 'in' operator to search for 'keywords' in undefined
    at new Item (/home/mud/ranviermud/src/Item.js:41:21)
    at ItemFactory.createByType (/home/mud/ranviermud/src/EntityFactory.js:65:20)
    at ItemFactory.create (/home/mud/ranviermud/src/ItemFactory.js:21:23)
    at Room.spawnItem (/home/mud/ranviermud/src/Room.js:342:39)
    at defaultItems.forEach.defaultItem (/home/mud/ranviermud/src/Room.js:387:12)
    at Array.forEach (native)
    at Room.hydrate (/home/mud/ranviermud/src/Room.js:382:23)
    at AreaManager.distribute (/home/mud/ranviermud/src/AreaManager.js:60:14)
    at BundleManager.loadBundles (/home/mud/ranviermud/src/BundleManager.js:58:28)
    at init (/home/mud/ranviermud/ranvier:122:17)

Expected outcome

Simply skip adding items to room, startup successfully.

Steps to reproduce

Create room like this:

- id: aRoom
  behaviors: {}
  coordinates:
    - 0
    - 1
    - 0
  description: ''
  doors: {}
  items:
    - {id: null}
  meta: {}
  npcs:
    - {id: 'test:1'}
  script: null
  title: A small room.

Version of Ranvier

# ./ranvier --version
2.0.0

Workaround

Easy workaround, just delete the empty list :)

bostrt commented 6 years ago

I'm sorry, I think this issue can be attributed to a poor room config. I thought the issue was due to an empty list but looks like it is really due to {id: null} which is really invalid :)

shawncplus commented 6 years ago

Also for clarification {} is not an empty list, [] is an empty list. {} is an empty object.