Server Version 1.5 Release Notes
From Multiverse
| Multiverse Servers |
|
Installing • Installing on Linux • Running • Troubleshooting • FAQ • Release Notes • Updating • JMX Monitoring & Mgmt. |
| Infrastructure |
|
Platform Architecture • Registering a World • Proxy Server • Event Handling • World Manager • Voice Server |
| Messaging System |
|
Perception Messaging • Using Extension Messages • Message Marshalling • Multi-subject Messaging • Message Catalog |
| Object Architecture |
|
World Instancing • Server Object Search • Server Regions • Server Markers |
| Scalability and Performance |
| Reference |
|
File Layout • Property File • Logging • API |
Platform Requirements
Minimimum requirements for the Multiverse servers are:
- Operating System: Windows XP / Vista or Linux (tested on Fedora core 4)
- Processor: Pentium 4 - 2.5GHz or greater
- RAM: 1GB or more
Upgrading to version 1.5
Creating your own world based on Sampleworld
To create your own world based on Sampleworld, follow the instructions in Getting Started. Additionally, you must do the following:
- In world editor, create a marker called "spawn" that will be the player spawn location.
- Edit
mv-home/config/world-name/startup-instance.pyand changesampleworld.mvwto the name of your world file, for examplemyworld.mvw.
Update release 1.5.1
The update release fixes the following bugs:
- Sample asset Brax problem.
- Sometimes when you log out, a "stuck login" remains in world (seen in demo Times Square).
- ExtensionMessages were not sent to the client properly.
- Bug in
multiverse.mars.behaviors.ChatResponseBehavior. - Method
InstanceClient.objectInstanceEntry() does not work. - Error logs contain spurious instancing-related errors.
- There are world-specific plugin dependencies.
- Startup script specified
extensions_mobserver.pyinconfig/commonrather thanconfig/<worldname>.
Also:
- Support overriding the machine specific local host name (used to identify the proxy host)
New features and changes
Instancing
The servers now support instances. See World Instancing.
Startup scripts
By default, the startup scripts will start the voice server. To disable the voice server.... (TBD)
The functionality of the world reader plug-in has been subsumed into the new instance server.
Marker support
The server now has APIs providing complete access to markers defined by the World Editor. Markers have a location, orientation, and properties. Previously, the server only provided access to the marker location. The term "waypoint" is now deprecated and will be removed from the server API.
This means you can control:
- The direction player faces when spawning (both login and instance entry)
- The orientation of spawned-gen'd NPCs
See:
- Server Markers
-
multiverse.server.objects.Marker -
multiverse.server.plugins.InstanceClient.getMarker()
Region support
The server now has APIs providing complete access to regions defined by the World Editor.
- Server Regions
-
multiverse.server.objects.Region -
multiverse.server.plugins.InstanceClient.getRegion()
Region Entry Triggers
You can register custom code to run when a player enters a region (defined in the world editor). Region properties control which code is run and what it does.
See: Custom Region Triggers.
Login and logout messages
When a player logs in, the proxy server sends a login message; when a player logs out the proxy server sends a logout message. The proxy server sends the messages using broadcast RPC so all subscribers must respond. The proxy waits for all responses before proceeding with login or logout.
For more information, see Proxy Server - Login and logout messages.
Object search framework
The server has a framework for performing server object search. A single API can be used to find different types of objects matching some criteria.
See: Server Object Search
Object system improvements
The object system now supports object unload and delete. In addition, changes have been made to object persistence.
- Multiverse Object Architecture#Distributed_object_persistence
- Multiverse Object Architecture#Unloading_Objects
- Multiverse Object Architecture#Deleting_Objects
Run Python via JMX
The Engine JMX MBean includes an operation to run a Python script and return the text it outputs.
See: Monitoring and Managing the Servers#Python_Scripting
Remote API to create spawn generators
The mob server supports creating spawn generators dynamically via MobManagerClient.createSpawnGenerator(). Also, there are many changes to the way the mob server is configured, see Upgrading to Version 1.5.
See: Managing Mobs
Proxy extension message handlers
The proxy will run registered handlers for client-originated extension messages.
See: Proxy Server#Proxy_extension_hooks
Log file names
The default names of some of the log files have changed:
- World Manager log file
wmgr1.outchanged towmgr_1.out - Proxy server log file
proxy.outchanged toproxy_1.out
Advertisement file names
The advertisement file names are now constructed from the agent type like this: <agent-type>-ads.txt
This resulted in one file name change from 1.1: wmgr1-ads.txt changed to wmgr-ads.txt
See: Configuring Agents and Plugins
Plugin dependencies
Plugin dependencies are now expressed in terms of plugin types. See: Configuring Agents and Plugins
MARS
There is now a MARS Experience System for advancing skills and training abilities.
See also: Mars Trainer Plugin, Mars Professions
There is now a MARS Group System to allow the creation of groups with a group chat channel.
Other
- This release uses Jython version 2.2.1. Previous releases used version 2.1. The Jython "cachedir" is now located in $MV_HOME/other/cachedir/ (the previous location was $MV_HOME/bin/cachedir).
- The Python module search path is now '../other/Lib' which is usually MV_HOME/other/Lib
- Many
Entitymethods have been moved toEntityManager. The methods remain on Entity, but are marked deprecated and will be removed in the next release. - PerceptionFilter supports adding targets after the object has spawned. Previously, targets had to be added before the object was spawned.
- Exceptions thrown inside RPC handlers now flow back to the caller where a runtime RPCException is thrown. Previously, an RPC handler exception caused the caller to block forever.
- Throw exceptions NoRecipientsException and MultipleRecipientsException as appropriate when sending RPC messages.
- NamespaceFilter moved from ObjectManagerClient to multiverse.server.messages
- Changed PerceptionFilter.setMessageTypes() to PerceptionFilter.setTypes()
- The WorldEditorReader (plugin and process) has been replaced by the InstancePlugin and instance process
- Free region-generated objects when player despawns
- Add ObjectManagerClient.fixWorldNode() to change an object world node (in the db) without loading the object
- Removed deprecated functions: WorldManagerClient.getObjectProperty(), WorldManagerClient.setObjectProperty()
- ScriptManagers now operate within a single namespace/module. Use ScriptManager.initLocal() to get the old behavior.
- Add ObjectManagerClient.getTemplateNames()
- Removed WorldManagerClient.spawnStructure() -- structures can be created with ObjectManagerClient.generateObject() and spawned with WorldManagerClient.spawn(); same as all other objects.
Bug fixes
- Fix WorldManagerClient.setWorldNode()
- Fix spawning structures after player spawn
Known issues
- Kill quests do not work.
- If you shut down the servers when a client is connected, the client will not exit.
Mob patrol behavior takes priority over attacking
Mobs inappropriately move out of an combat situation due to patrol behavior taking priority over attacking.
No event class for parseBytes
This causes the following error in the proxy log file.
ERROR [2008-05-05 16:39:10,110] RDPCallback found no event class foroid 1421634175308, id 333
ERROR [2008-05-05 16:39:10,112] RDPCallback Event.parseBytes, dumpingstack for thread RDPCallback
at multiverse.server.engine.EventServer.parseBytes(EventServer.java:40)
at multiverse.server.plugins.ProxyPlugin.processPacket(ProxyPlugin.java:731)
at multiverse.server.network.rdp.RDPServer.callbackProcessPacket(RDPServer.java:1243)
at multiverse.server.network.rdp.RDPServer$PacketCallbackThread.run(RDPServer.java:1200)
at java.lang.Thread.run(Thread.java:595)
ERROR [2008-05-05 16:39:10,112] RDPCallback Engine: event server returned null event
WorldManagerClient APIs fail if oid does not exist
The following APIs will fail if the oid does not exist. The hook will throw a run time exception which will cause the caller to block forever.
- WorldManagerClient.getWorldNode()
- WorldManagerClient.getObjectInfo()
- WorldManagerClient.getDisplayContext()
They should return 'null' if the object does not exist.
Audio track still plays after instancing
When an instance contains a video, you hear the audio track even after leaving an instance.
Player does not drop on collision volume after instancing
Sometimes the player does not get dropped on collision volumes when instancing.
Positional voice carries through instances
When you have been near enough to hear voice chat from a player, then you go into another instance, the players can still hear each other, even though they are in different instances.
Mobs move after dead
When you kill a mob when it's in motion, it does not stop until it reaches the end of its path.
ExtensionMessage sent to client as property event
ExtensionMessages sent from server to client are actually sent as property messages. This bug does not affect TargetedExtensionMessage.
