* rulesets/Entity.h, rulesets/Thing.cpp: Add a signal to be emitted
when an entities container changes, and emit it during
MoveOperation processing.
* rulesets/Character.h, rulesets/Character.cpp: Hook up to the
containered signal of a wielded entity, and unwield it when its
container changes.
* common/Pickup.h, common/Drop.h, common/custom.cpp,
common/operations.cpp, common/types.h: Add and install two new
op types for Pickup and Drop.
* rulesets/Thing.cpp: Send sights of Pickup and Drop when characters
perform this actions implicitly with move ops.
* common/types.h, server/Persistance.h, common/BaseWorld.h,
common/BaseWorld.cpp, server/WorldRouter.cpp:
Switch core world map to reference by integer ID rather than string.
Add version of getEntity() which converts from string to integer
automatically.
* rulesets/Character.cpp, rulesets/Thing.cpp, rulesets/World.cpp,
server/EntityFactory.cpp,
Use getEntity() when looking up an entity, so that conversion of
ID from string to integer is automatic.
* rulesets/BaseMind.cpp, rulesets/MemMap.cpp, rulesets/MemMap.h:
Switch to using integer IDs in MemMap's core mapping.
* server/Account.cpp, server/Account.h: Switch a few function
parameters to use integer ID values, making the code cleaner.
* server/Account.cpp, server/Admin.cpp, server/Persistance.cpp:
Handle string ID to integer conversions as required.
* 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.
* modules/Location.cpp, modules/Location.h:
Add const accessors for location data, in preparation for
adding cached collision data which must be updated every
time data is modified.
* physics/Collision.cpp, rulesets/Character.cpp, rulesets/Entity.cpp,
rulesets/Entity.h, rulesets/MemMap.cpp, rulesets/Movement.cpp,
rulesets/Pedestrian.cpp, rulesets/Plant.cpp,
rulesets/Py_Location.cpp, rulesets/Thing.cpp, rulesets/World.cpp,
server/Account.cpp, server/EntityFactory.cpp, server/Persistor.cpp,
server/Persistor_impl.h, server/Restorer_impl.h,
server/WorldRouter.cpp, tests/Locationtest.cpp:
Use the const accessors whenver reading data from Location.
* common/BaseEntity.cpp, common/BaseEntity.h, common/inheritance.cpp,
common/inheritance.h, rulesets/BaseMind.cpp, rulesets/BaseMind.h,
rulesets/Character.cpp, rulesets/Character.h, rulesets/Entity.cpp,
rulesets/Food.cpp, rulesets/Plant.cpp, rulesets/Stackable.cpp,
rulesets/Thing.cpp, rulesets/World.cpp, server/Account.cpp,
server/Admin.cpp, server/Connection.cpp, server/server.cpp:
Remove the subscription mechanism as it is no longer necessary
now that operations have class numbers.
* 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.
* common/const.cpp, common/const.h: Git rid of bizare scheme
where each constant appears twice, debug and non-debug versions.
* rulesets/Pedestrian.cpp, rulesets/Thing.cpp,
server/WorldRouter.cpp: Fix problem where an essential call
was inside an assert, so did not happen when built in non-debug
mode.
* common/inheritance.h: Set the correct objtype on the Root meta class.
* rulesets/Character.cpp, rulesets/Food.cpp, rulesets/Plant.cpp,
rulesets/Stackable.cpp, rulesets/Thing.cpp, server/Account.cpp,
server/Admin.cpp, server/Connection.cpp, tools/AdminClient.cpp,
tools/cycmd.cpp: Switch to renamed copyAttr() method from
Atlas-C++.
* common/AtlasFileLoader.cpp, common/Database.cpp,
common/FormattedXMLWriter.cpp, common/Property.cpp,
common/accountbase.cpp, rulesets/Character.cpp,
rulesets/Entity_getLocation.h, rulesets/MemMap.cpp,
rulesets/Pedestrian.cpp, rulesets/Plant.cpp,
rulesets/Py_Object.cpp, rulesets/Thing.cpp,
server/Admin.cpp, server/Connection.cpp, server/EntityFactory.cpp,
server/WorldRouter.cpp, tools/AdminClient.cpp, tools/cycmd.cpp,
tools/cyconvertrules.cpp: After an Element has been checked
with isFoo(), it is more efficient to get its value using Foo()
rather than asFoo() which repeats the check.
* server/Account.cpp, rulesets/Thing.cpp, rulesets/Character.cpp:
Replace asserts with proper checks that arguments are of the
expected type.
* common/custom.cpp: Put ignite op installation back in.
* rulesets/basic/mind/goals/common/misc_goal.py: Don't return
non-existant ops.
* rulesets/Thing.cpp: Fix some places where root_operations
were being returned.
* common/inheritance.cpp: Add "affect" operation base class,
and fix parents on use and wield.
* common/custom.cpp: Install atlas factories for custom op
types.
* rulesets/Entity.cpp, rulesets/Thing.cpp: Use static LOC and POS
members in RootEntity.
* rulesets/Entity_getLocation.h: Add some slightly more thorough
checking for location data.
* modules/Location.h, rulesets/Pedestrian.cpp, rulesets/Thing.cpp,
server/WorldRouter.cpp: Store the last movement update time
in location, so it can be used for interpolation elsewhere.
Don't yet update it in the main Move code is this causes movement
jitter.
* common/BaseWorld.h, server/WorldRouter.cpp, server/WorldRouter.h:
Modify world interface so it takes a string mode when adjusting
the height of entities. Handle floating and swimming entities
accordingly.
* rulesets/Thing.cpp: Change the order in which mode is checked
so it is available when adjusting height.
* rulesets/mason/define_world.py: Randomise height of fish, so they
look more like they are swimming.
* rulesets/Thing.cpp: Fix leak of Motion object.
* rulesets/World.cpp, rulesets/World.h: Make tileShader a member
variable, and delete it in the destructor to avoid a leak.
* server/PersistantThingFactory.cpp: Fix leak of ScriptFactorys.
* server/PersistantThingFactory_impl.h: Fix leak of Persistor
in ForbiddenThingFactory.
* rulesets/Entity.cpp, rulesets/Thing.cpp: Move Create op subscription
into Entity, as that is where the method is.
* rulesets/World.cpp: Create a boulder entity when the pickaxe
is used on rocky terain.
* client/CharacterClient.cpp: Don't process ops from the server in
* rulesets/Motion.h, rulesets/Motion.cpp: Add a little more API,
and provide stubs of existing methods.
* rulesets/Thing.cpp: Add a motion instance to all physical
entities, and pass mode setting to it.
* rulesets/Thing.cpp: Remove obsolete commented out code.
* server/Account.cpp, server/Connection.cpp:
Add a note about serialno/refno handling when code sends ops
directly to the client.
* server/CommClient.cpp, server/CommClient.h: Clean up some debug
code, and method names.
* server/Lobby.cpp: Fix a case where a private message would fail
silently if account had logged on recenlty but was no longer.
* rulesets/Entity.h: Add a pointer to a Motion object to entities.
* rulesets/Thing.cpp: Add notes about Motion implementation.
Clean up some variable names.
* common/Database.cpp: Fix some lingering missuse of the varconf API.
* rulesets/Thing.cpp: Remove some debug output.
* rulesets/Py_Vector3D.cpp: Add error checking so that normalising
a zero mangitude vector does not abort.
* common/BaseWorld.h, rulesets/Character.cpp, rulesets/Py_World.cpp,
rulesets/PythonThingScript.cpp, rulesets/Stackable.cpp,
rulesets/Thing.cpp, rulesets/World.cpp, server/Account.cpp,
server/Admin.cpp, server/Connection.cpp, server/EntityFactory.cpp,
server/Restoration.cpp, server/WorldRouter.cpp, server/WorldRouter.h:
Rename some functions in the World interface so they make more
sense.
* rulesets/Entity.cpp, rulesets/Entity.h: Add destroyed flag to
Entity so we can tell if its no longer in the world.
* server/WorldRouter.cpp: Cut down the special case handling of
delete ops as we can now broadcast ops from entities that
have been removed from the world.
* rulesets/Entity.cpp, rulesets/Entity.h, rulesets/Thing.cpp,
server/WorldRouter.cpp: Increment reference count on parent
entity when a child has a reference to it.
* common/Property.h, rulesets/Thing.cpp: Clean up some comments.
* rulesets/EntityProperties.cpp: Remove specialisation of
ImmutableProperty::set for EntitySet, as its the same as the
default.
* rulesets/Script.h: Update the copyright date, and clean up some
comments.
* rulesets/Container.cpp, rulesets/Container.h,
tests/Containertest.cpp: New virtualised classes for handling
entity containership, with API that mimics STL set. To be used to
allow entities to handle containership differently.
* rulesets/EntityProperties.cpp: Add specialisation of
ImmutableProperty for Container class.
* rulesets/Character.cpp: Clarify error message on tool use.
* rulesets/Thing.cpp: Allow setting of mode attribute from args
of move op for efficiency.
* server/Player.cpp, server/Admin.cpp, server/Player.cpp:
Add TO to all accounts at the account level, so the client
can tell they are for the account.
* rulesets/Character.cpp, rulesets/EntityProperties.cpp,
rulesets/Thing.cpp: Use pre-increment in for loops.
* server/WorldRouter.cpp: Optimise inserting ops into the queue.