一个python MUD游戏, 设计参考自<MUD Game Programming>中的BetterMUD。
整个游戏世界由以下实体组成:
- Account
- Character(玩家或NPC)
- Item
- Room
- Portal
- Region
- Template(用于生成Character或Item)
游戏响应用户输入的字符形式的命令, 解析完交给玩家对应的Character中某个Command实例执行(通过调用Command.Execute).
游戏类Game提供一些基础事件, 比说某个角色尝试在某个房间发讲话 AttemptSay, 某个角色进入某个通道 AttemptEnterPortal。
单个事件根据需要调用各个涉及到的实体Entity.Query(conditon)查询事件能否发生, 再调用Entity.React(action)响应该事件, 做出反映, 从而完成一个事件. 具体请参考Game.Say/EnterPortal方法以及BasicLogic类的实现。
用户的单条命令的功能可以与游戏功能无关的, 也可以是由零个或多个游戏的基础事件组成, 甚至再直接点, 直接让零个或多个实体的响应某些动作.
以下是几个比较重要的方法/函数:
- Game.PorcessEvent
- Game.ExecuteCommand
- LogicEntity.React
- Command.Execute
第一层为游戏事件, 第二层为游戏事件实现时需要查询的实体条件或者调用到基础动作. Condition的命令已'Can'开头.
Event/Condition/Action都是像dict类型一样, 不过很想JavaScript中的Object可以通过Object.attrname引用Object[attrname].
Event/Condition/Action三者都包含一个特别的属性type指明其类型.
- ...
- Error: message
- EnterWorld: who
- EnterRoom: who, room, portal=None
- EnterRegion: who
- EnterWorld: who
- News|Welcome|TODO
- LeaveWorld: who
- LeaveRoom: who, room, portal=None
- LeaveRegion: who
- LeaveWorld: who
- Bye|TODO
- Announce,通知整个游戏中的在线玩家: content
- Announce: content
- SpawnCharacter: templateid, room
- SpawnCharacter: character, room
- SpawnItem: templateid, room, region
- SpawnItem: item, room, region - 房间
- SpawnItem: item - 角色
- DestoryCharacter: character
- DestoryCharacter: character
- DropItem: who, item, quantity
- DestoryItem: item
- DestoryItem: item
- AttemptSay,玩家在房间内说话: who, content
- CanSay: who, content
- Say: who, content
- AttemptGetItem: who, item, quantity
- CanGetItem: who, item, quantity
- GetItem: who, item
- AttemptDropItem: who, item, quantity
- CanDropItem: who, item, quantity
- DropItem: who, item
- AttemptGiveItem: giver, receiver, item, quantity
- CanGiveItem: character, item, quantity
- CanReceiveItem: character, item, quantity
- GiveItem: giver, receiver, item, quantity
- 判断是否是接受者,接受者特殊处理
- AttemptEnterPortal,玩家通过通道进行移动: who, portal, direction
- AttemptTransport: who, room
- ForceTransport: who, room
- CanLeaveRegion/CanEnterRegion: who, region
- CanLeaveRoom/CanEnterRoom:who, portal
- CanEnterPortal: who, portal
- LeaveRegion: who
- LeaveRoom: who, portal
- EnterPortal: who, portal
- EnterRegion: who
- EnterRoom: who, portal
- cleanup
- savedatabases
- saveregion
- saveplayers
- reloaditems
- reloadcharacters
- reloadregion
- reloadcommands
- reloadlogics
以下是已经实现的部分命令
- ListItems
- Go direction
- Get [n] itemname
- Drop [n] itemname
- Quit
- Chat
- Say
- Self
- Quiet
- Shutdown
- Look
- Commands
- Announce
- Items
- SaveDatabase
- chat
- announce
- vision
- command
- do
- messagelogic
- addlogic
- dellogic
- modifyattrbute, entity attr value