nmud
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:A NodeJS MUD prototype
nmud
====
The NodeJS MUD server.

Game Objects
============
Game objects (mobiles, rooms, items, etc) are composed of *traits* and
*prototypes*. Traits and prototypes add methods and properties to the objects 
they are mixed into. The differentiation between a trait and prototype is
entirely logical; traits are more akin to interfaces that add common meta
functionality to an object, while a prototype is supposed to define what
the object *is*.

Another way to look at it is that traits define what an object is in metagame
terms, while a prototype defines what the object is in game terms.

Examples:

* A room has the `Container` trait and the `Room` prototype.
* A player has the `Player` trait and `Mobile` prototype.
* A weapon might have the `Item` and `Weapon` prototypes.

Traits
------
The current list of traits follows.

### Container ###
Use: `traits.Container`

Signifies that this object can store other objects inside it. This is more
generic than a container in the literal sense. A Container can store ANY mud
object, such as mobiles, items, or entities.
  
Properties:
  
  * None.
  
Methods: 
  
  * `canStore(mudObj)`: Determines what the Container can store. Override to
  limit what types of objects can be stored. By default, stores everything.
  * `add(mudObj)`: Adds a mud object to this Container.
  * `remove(mudObjOrMemID)`: Removes a mud object by memory ID or by object
    reference.
  * `find(name)`: Finds a mud object in the container by name (e.g. "sword").

### Player ###
Use: `traits.Player(socket)`

The Player trait allows the object to be under a player's control. This trait
adds properties and events that connect the player object to a socket so the
player can control it. The socket is optional. If it is not passed in, the
object will be divorced from any remote connection.
  
Properties:
  
  * `socket`: The currently connected socket. Will be null if there is no
     socket.

Methods:

  * `send(data)`: Sends some data to the other end of the player's socket.
  * `command(text)`: Execute a command as if it were received from the socket.

Events:

  * `command(data)`: Fired when a command is executed. `data` is the command
    text.
  * `move(oldRoom, newRoom)`: Fired when the player moves from one room to
     another.
    
Prototypes
----------
The current list of prototypes follows.

### Mobile ###
Use: `protos.Mobile`

Signifies that this object is a mobile. Mobiles encompass both PCs and NPCs
usually. A player will be a mobile with a class, leveling, and other stats.
An NPC will be a mobile with AI and other things.
  
Properties:

  * `commandContext`: A dynamic property that always returns a context for
    command execution. Do not override.
  * `name`: The name of the mobile. Will be displayed to other occupants of a
    room.
  * `room`: The current room the mobile is in.

Methods:

  * `move(newRoom)`: Move to a new room.
    
### Room ###
Use: `protos.Room`

A Room is an object that has a title, description, and exits that link it to
other Rooms. Rooms are also usually Containers, so they can have mobiles and
items and entities inside them.
  
Properties:
  
  * `north`: The north exit.
  * `south`: The south exit.
  * `east`: The east exit.
  * `west`: The west exit.
  * `up`: The up exit.
  * `down`: The down exit.
    
Events:

  * `enter(obj)`: Fired when a mud object enters the room via movement.
  * `exit(obj)`: Fired when a mud object leaves the room via movement.



Design
======
Rules of Business Logic:

1. Do not emit any information output events in anything but commands or ticker.
2. Prototype/Trait events should not do any output.

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。