* common/BaseEntity.cpp, common/BaseEntity.h: Remove opEnumerate
method as its now a trivila call to another method.
* rulesets/BaseMind.cpp, rulesets/Character.cpp, rulesets/Creator.cpp:
Replace calls to opEnumerate with direct calls to getClassNo().
* common/BaseEntity.cpp, rulesets/Character.cpp, rulesets/Creator.cpp,
server/Account.cpp, server/Admin.cpp, server/Connection.cpp,
server/Lobby.cpp, server/WorldRouter.cpp: Don't bother with serial
numbers on ops generated inside the server. They just leak and upset
clients.
* rulesets/Entity.cpp, rulesets/Creator.cpp, common/BaseEntity.cpp:
Catch the last few places, and ensure refno is only set if
serialno is set on the causing op.
* common/BaseWorld.h, rulesets/Creator.cpp, rulesets/World.cpp,
server/WorldRouter.cpp, server/WorldRouter.h, tests/TestWorld.h:
Pass perceptive entities to the world by pointer rather than
by ID, avoiding a lookup in the dictionary.
* rulesets/Creator.cpp: Send an unseen op if admin attempts to
puppet something that does not exist. Add some comments and
a FIXME.
* TODO: Add a note about the lack of crossover between ops used
by OOG code and IG code.
* rulesets/Creator.cpp: When an op is being source routed by an admin
client, find its target and insert it into the world using the
target so it appears to be from the target, rather than using
the "cheat" marker.
* server/WorldRouter.cpp: Remove check for FROM=="cheat", and
simplify setting FROM on ops. Use flags to check for FUTURE_SECONDS.
* rulesets/Creator.cpp: Reply to client with Unseen op when client
looks for an IG entity by name or type which returns no results.
* tools/cycmd.cpp: Add a cancel command to stop current running task.
Detect Unseen at the end of a flush task, and end the task.
Remove a bunch of debug output. Fix typo in add_agent output.
* tools/cycmd.cpp: Modify flusher so it uses tick ops to schedule
regular queries, until no more are found rather then attempting
to purge all entities asap, which caused race conditions. Check
the type of entities before deleting them.
* rulesets/Creator.cpp: Improve debug output. Don't dispatch ops
from client to creator locally if the are scheduled to occur
in the future.
* rulesets/Creator.cpp: Ensure Look returns nothing when client
is searching by name or type, and nothing is found.
* tools/cycmd.cpp: Add help for some more commands. Ensure help is
formatted ok, no matter how long the commands are. Report an
error if commands that required an argument don't get one.
Ensure find_by_name and find_by_type still work ok if
nothing is seen.
* common/BaseEntity.h, common/BaseEntity.cpp: Add an integer ID
member variable, and accessor, and require it to be initialised
along with string ID in constructor.
* common/const.cpp, common/const.h: Add a const for the integer value
of the world ID.
* rulesets/Area.cpp, rulesets/Area.h, rulesets/BaseMind.cpp,
rulesets/BaseMind.h, rulesets/Character.cpp, rulesets/Character.h,
rulesets/Creator.cpp, rulesets/Creator.h, rulesets/Entity.cpp,
rulesets/Entity.h, rulesets/Food.cpp, rulesets/Food.h,
rulesets/Line.cpp, rulesets/Line.h, rulesets/MemEntity.cpp,
rulesets/MemEntity.h, rulesets/Plant.cpp, rulesets/Plant.h,
rulesets/Stackable.cpp, rulesets/Stackable.h, rulesets/Structure.cpp,
rulesets/Structure.h, rulesets/Thing.cpp, rulesets/Thing.h,
rulesets/World.cpp, rulesets/World.h: Add integer ID handling to
constructors of all in-game entity classes.
* rulesets/MemMap.cpp: Initialise integer ID of entities in the mind
map.
* rulesets/MindFactory.cpp, rulesets/MindFactory.h: Handle integer
ID when constructing mind objects.
* server/EntityFactory.cpp, server/EntityFactory.h,
server/PersistantThingFactory_impl.h: Handle integer
ID when contructing entity objects.
* server/Restoration.cpp, server/Restoration.h, server/Restorer.h,
server/Restorer_impl.h: Handle integer ID when restoring from
database.
* server/WorldRouter.cpp: Assign integer ID when constructing the
world.
* rulesets/basic/mind/NPCMind.py: Don't respond to knowledge
queries if the character has no knowledge.
* server/Connection.cpp, rulesets/Creator.cpp, rulesets/Character.cpp:
Use flag check to see if operations have FROM set, rather than
checking for an empty string.
* rulesets/Thing.cpp: When handling move ops, avoid lookup of LOC
in world unless it has changed.
* rulesets/Character.cpp, rulesets/Creator.cpp: Modify operations
in place rather than copying first in the mind operation interface
as this should be much more efficient.
* common/BaseEntity.cpp, common/custom.cpp, common/op_switch.h,
common/types.h, rulesets/BaseMind.cpp, rulesets/Character.cpp,
rulesets/Creator.cpp, rulesets/Food.cpp, rulesets/Plant.cpp,
rulesets/Thing.cpp, rulesets/World.cpp, server/Admin.cpp,
server/Admin.cpp: Replace OpNo enumeration with defines for the
integer class numbers. Expand the switch statements used for op
dispatch because runtime extended op definitions don't have a const
number.
* server/EntityFactory.cpp: Re-order installation of ops to ensure
the number registered in enumeration maps is the one returned by
the Atlas factories.
* rulesets/Character.cpp: Improve debug output for op handling when
debug is enabled for this file.
* server/Account.cpp, server/Admin.cpp, server/CommClient.cpp,
server/Connection.cpp: Don't set refno on unicast OOG ops,
instead set them at the interface with the client in one
place.
* server/WorldRouter.cpp: Modify setting refno on IG ops so its
now only set on unicast responses.
* rulesets/Creator.cpp: Set refno on responses direct ops from creator
clients more manually.
* common/BaseEntity.cpp: Only set refno on unicast error ops.
* common/refno.h: Disable as this file is no longer used.
* common/BaseEntity.cpp, common/BaseWorld.h, common/refno.h,
common/serialno.h, rulesets/Character.cpp, rulesets/Creator.cpp,
rulesets/World.h, server/Account.cpp, server/Admin.cpp,
server/Connection.cpp, server/Lobby.cpp, server/ServerRouting.h,
server/WorldRouter.cpp, server/WorldRouter.h, tests/Creatortest.cpp,
tests/Worldtest.cpp: Simplify the way operation refnos and serialnos
are handled, getting rid of some unnecessary virtual methods and
functions.
* rulesets/Creator.cpp: Ensure self-destruct delete ops have
an argument.
* tests/transformtest.cpp: Add a vector rotation test to clarify
quaternion sign conventions.
* server/Connection.cpp, rulesets/Creator.cpp, rulesets/Character.cpp:
Check and clean up places where args are checked before querying
their contents.
* rulesets/Character.cpp: Assert that Movement::getMoveOperation()
always returns an operation, rather than a normal tolerant test.
Remove a FIXME about the Python code operations conversion functions.
* server/Connection.cpp, rulesets/Thing.h, rulesets/Entity.h,
rulesets/Entity.cpp, rulesets/Creator.h, rulesets/Creator.cpp,
rulesets/Character.h, rulesets/Character.cpp: Modify
externalOperation() so it no longer returns anything, ensuring
that Entity::externalOperation() passes its results back to
the world.
* rulesets/Creator.h, rulesets/Creator.cpp: Rename sendMind() to
sendExternalMind() to make it clear that its not the same as the
method in Character.
* rulesets/Character.h, rulesets/Character.cpp: Remove world2body()
as it was identical in semantics to callOperation().
* rulesets/Creator.cpp: Allow creator to handle a few more op
types, and use switch to determine what to do.
* rulesets/Character.cpp: Remove setting and checking of sub_to
on Use and Wield ops as it is not relevant.
* common/BaseEntity.cpp, common/BaseEntity.h,
rulesets/Character.cpp, rulesets/Creator.cpp,
server/CommClient.cpp, server/ExternalMind.cpp,
server/ExternalMind.h, client/CharacterClient.cpp,
client/CommClient.cpp: Remove the message method from BaseEntity
and everything that inherits from it - its redundant.
* tests/Charactertest.cpp, tests/Creatortest.cpp,
tests/EntityExerciser.h: Sort out the tests so they no longer use
message, and try and get the character class tests working a bit
better.
* common/BaseWorld.h, rulesets/Creator.cpp, rulesets/Thing.h,
rulesets/World.cpp, server/WorldRouter.cpp, server/WorldRouter.h:
Modify the world interface to get rid of some pointless
infeffiencies.
* server/Account.cpp, server/Admin.cpp, server/Connection.cpp,
server/Lobby.cpp, server/ServerRouting.h, server/WorldRouter.cpp,
server/WorldRouter.h: Change getSerialNo to newSerialNo to make it
clear what it does.
* common/BaseEntity.h, common/BaseEntity.cpp, common/refno.h,
server/Account.cpp, rulesets/Creator.cpp, server/WorldRouter.cpp:
Move refno functions which don't need to be methods into
their own header.
* common/BaseWorld.h, common/BaseWorld.cpp, rulesets/Character.cpp,
rulesets/Creator.cpp, server/WorldRouter.cpp, server/WorldRouter.h:
Make BaseWorld no longer inherit from anything, as we were not
using this inheritance at all.
* server/Lobby.cpp: Add some debugging messages.
* server/CommServer.cpp: Tweak select loop so that closed connections
are cleaned up as soon as they are detected.
* rulesets/World.cpp: Make demo terrain a bit more mountainous.
* Convert entire codebase over to using Atlas-C++ 0.4.90, as
start of transition to 0.6 API.
* server/EntityFactory.cpp, rulesets/Python_API.h,
rulesets/Python_API.cpp, rulesets/PythonThingScript.h,
rulesets/PythonThingScript.cpp, rulesets/PythonMindScript.cpp,
rulesets/Py_World.cpp, rulesets/Py_Thing.h, rulesets/Py_Thing.cpp,
rulesets/Py_Operation.cpp, rulesets/Py_Map.cpp,
rulesets/Py_Location.cpp, rulesets/Movement.h,
rulesets/MemMap_methods.h, rulesets/MemMap.h, rulesets/MemMap.cpp,
rulesets/Entity.cpp, rulesets/BaseMind.cpp,
client/Py_CreatorClient.cpp:
Rename all references from thing to entity, as thing is
no longer the base class for IG entities.
* rulesets/World.h, rulesets/World.cpp, rulesets/Thing.h,
rulesets/Structure.h, rulesets/Stackable.h, rulesets/Stackable.cpp,
rulesets/Plant.h, rulesets/Plant.cpp, rulesets/Missile.h,
rulesets/Line.h, rulesets/Line.cpp, rulesets/Food.h,
rulesets/Food.cpp, rulesets/Creator.h, rulesets/Character.h,
rulesets/Character.cpp, rulesets/Area.h, rulesets/Area.cpp:
Add a typedef for the parent class of all entity classes.
* rulesets/Plant.h, rulesets/Plant.cpp:
Add in code to fully integrate hardcoded attributes.
* server/Restoration.cpp: Send restored entities a setup op, so the
AI gets initialised as if the entity had just been created.
* Clean up member variable names.
* rulesets/mason/mind/SkelMind.py: Get skeleton to recognise
settlers.
* client/CommClient.cpp, client/CreatorClient.cpp,
client/ObserverClient.cpp, client/Py_CreatorClient.cpp,
common/BaseEntity.cpp, common/BaseEntity.h,
common/types.h, rulesets/Area.cpp, rulesets/BaseMind.cpp,
rulesets/Character.cpp, rulesets/Entity.cpp,
rulesets/Food.cpp, rulesets/Line.cpp,
rulesets/MemMap.cpp, rulesets/Pedestrian.cpp,
rulesets/Plant.cpp, rulesets/Py_Mind.cpp,
rulesets/Py_Object.cpp, rulesets/Py_Thing.cpp,
rulesets/Python_API.cpp, rulesets/Stackable.cpp,
rulesets/Thing.cpp, rulesets/World.cpp,
server/Account.cpp, server/Admin.cpp, server/CommClient.cpp,
server/CommServer.cpp, server/Connection.cpp,
server/EntityFactory.cpp, server/Lobby.cpp,
server/Persistance.cpp, server/Player.cpp,
server/ServerRouting.cpp, server/WorldRouter.cpp:
Switch to using Element as name for Atlas::Message::Object,
to avoid name clashes on Object, and bring into line with
the way Atlas-C++ will be.
* Use " instead of < when including application headers.
* Re-work the interface between server and worldrouter objects
so that the are less tied together, and more flexible.
* common/const.cpp, common/const.h, rulesets/Creator.cpp,
rulesets/Entity.cpp, rulesets/Entity.h, server/WorldRouter.cpp:
Re-work omnipresent flag so it can only work in a debug build,
and has no performance impact on the production code.
* common/globals.cpp: Only persist this sessions command line
options if the user is overriding the installation directory.
* cyphesis.vconf, client/Py_CreatorClient.cpp,
client/Py_CreatorClient.h, client/client.cpp:
Add client functionality to allow diferent scripts to be run to
perform different functions on the server.
* client/CharacterClient.cpp: Add debug option.
* rulesets/Character.h: Make mind operation functions virtual,
so they can be overridden.
* common/BaseWorld.h, server/WorldRouter.cpp,
server/WorldRouter.h: Add server functions to search for
entities by name or type.
* rulesets/Creator.h, rulesets/Creator.cpp: Allow creator to
specify a look without an id to search for entities with
a given name or type.
* client/CreatorClient.cpp, client/CreatorClient.h,
client/ObserverClient.cpp, client/ObserverClient.h,
client/Py_CreatorClient.cpp, rulesets/basic/editor.py,
rulesets/mason/define_world.py:
Add support for looking for entities in the world by name or
type from client script, so client scripts can modify existing
world.
* rulesets/Entity.cpp, rulesets/Movement.cpp,
rulesets/Py_Object.cpp, rulesets/Py_Operation.cpp,
rulesets/Py_Oplist.cpp, rulesets/Python_API.cpp,
rulesets/Stackable.cpp, rulesets/Thing.cpp,
rulesets/World.cpp, server/Account.cpp,
server/CommServer.cpp, server/Connection.cpp,
server/Player.cpp, server/ServerRouting.cpp,
server/server.cpp, tools/cycmd.cpp,
tools/cywatchdog.cpp: Code formatting cleanups.
* rulesets/basic/world/objects/tools/Bow.py: Fix up bow so it now
fires correctly.
* ALL: Cleaned up headers into correct order.
* common/log.h, common/log.cpp: Write some logging code which
handles message of different types using syslog or standard
error, depending on whether we are running as a daemon.
* ALL: Switched to using log() for all output.
* client/CommClient.cpp, client/ClientConnection.cpp, tools/cycmd.cpp:
Ensure clients use username in login ops.
* common/BaseEntity.cpp, common/op_switch.h, rulesets/BaseMind.cpp:
Modify the way op switchers work so they can be used for functions
that return any type.
* rulesets/Character.cpp, rulesets/Character.h: Re-write world2mind
layer so that rather than copying ops that are to be sent to
the mind, the w2m functions returning a flag indicating whether
the op should be passed to the mind. Made w2m and mind op handlers
final, as they are never overridden.
* rulesets/Creator.cpp: Correct comments.
* rulesets/MemMap.cpp: Add comments clarifying behavoir, and remove
old pseudo-code.
* server/Account.cpp, server/Account.h: Ensure that an accounts
character dictionary only ever contains characters. Other entities
that the account chooses to create will no be stored here. Add
function to be called at login time to make sure that characters
stored here are still around.
* server/Connection.cpp, server/Connection.h, server/ExternalMind.cpp,
server/ExternalMind.h: When external mind of a character is
destroyed, ensure that the character is removed from the
connection's object reference store.
* server/WorldRouter.h, server/WorldRouter.cpp, common/BaseWorld.h,
rulesets/Creator.cpp, rulesets/World.cpp: Removed unused and
unnecessary code from BaseWorld class, and move some stuff into
the WorldRouter where it belongs.
* rulesets/Character.cpp: Fixed a bug in the way ops from the
mind are handled which caused a segfault.
* rulesets/Character.h, rulesets/Creator.h: Made some functions
which are never overridden non-virtual for speed.
* rulesets/MemMap.cpp, rulesets/MemMap.h, rulesets/MemMap_methods.h:
Cleaned up the memmap code to get rid of inefficiency, and badly
written code.
* rulesets/Movement.cpp: Code formatting cleanup.
* server/Routing.h: Remove old commented out code.
* server/Account.cpp, server/Connection.cpp: Switched to using
USERNAME of accounts rather that ID for login and account creation.
Toughened up the connection code, so invalid login/create ops
are handled.
* server/Connection.h: Removed unused getObject method.
* rulesets/Character.cpp, rulesets/Character.h: Get rid of
inefficiency handling ops from internal and external mind. Fix
leak of some ops.
* common/BaseWorld.h, server/WorldRouter.cpp, server/WorldRouter.h:
Add method for getting a new serialno.
* rulesets/Thing.cpp, rulesets/Thing.h, server/WorldRouter.cpp:
Set refno on ops as they come back from entities. Set serialnos
on same ops at the same time, but do not set serialnos
on ops that come in from elsewhere, as those are now handled at
source.
* rulesets/Creator.cpp, rulesets/Character.cpp:
Ensure that ops from external client preserve their serialno,
and assign new serialnos to other ops created at the same time.
* rulesets/Creator.cpp: Admin's creator entity serves no purpose
if it is no longer connected to a client, so it now destroys
itself if it is disconnected.