* 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/Character.cpp: Prevent clients and minds for using
FUTURE_SECONDS on ops other than tick. Remove all handling
of FUTURE_SECONDS when processing move ops from clients and minds.
* 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: Immobilise character if they have no stamina.
* configure.ac, NEWS: Increment version and update news.
* TODO: Remove done TODO items.
* 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.
* rulesets/Character.cpp: Report a warning when action ops are sent
from client or mind code.
* rulesets/Py_Location.cpp: Allow invalid vectors to be used
to set attributes on Location.
* rulesets/acorn/world/objects/undead/Skeleton.py,
rulesets/mason/world/objects/undead/Skeleton.py: Remove action
ops replacing them with setting MODE of skeleton to
collapsed.
* rulesets/basic/mind/NPCMind.py,
rulesets/basic/mind/goals/common/misc_goal.py: Use Imaginary ops
rather than Action for emotes.
* rulesets/Character.cpp: Audit all mindFooOperation() methods, to
ensure operations from the mind or client code are handled in
a correct and consistant manner. Improve comments documenting
the mind operation interface.
* rulesets/Entity.cpp: Add comments documenting how externalOperation
should be used.
* rulesets/Task.h: Make irrelevant() virtual so that each task
class is responsible for doing most of its cleanup.
* rulesets/Movement.h: Make updateNeeded() public so other code
can determine if a character is moving.
* rulesets/Character.h, rulesets/Character.cpp: Add a stamina property.
Add clearTask() used to clear the current running task. Check
if tasks are irrelevant immediatly after setup, or after each
tick, and remove if they are.
* rulesets/Combat.h: Add irrelevant() implementation, and a static
variable defining stamina level below which combat cannot occur.
* rulesets/Combat.cpp: Switch to stamina as the base stat for
combat. Implement checking stamina at setup to ensure
both combatants are fit to fight, and each tick to determine if
someone has lost.
* rulesets/Character.cpp: Fix handling of Touch op so it now
returns a Sight(Touch) rather than an Action op to indicate
what has occured.
* common/custom.cpp: Fix inheritance of Attack op to Action.
* TODO: Add a note about optimising the mind operation interface.
* rulesets/Character.cpp, rulesets/Character.h: Add a Statistics
objects as a member variable of Character, and use it to
determine if a character is strong enough to move other
entities.
* rulesets/Character.cpp: Re-order code so that its not necessary
to lookup an entity that is to be moved unless we already know
its not the current entity.
* rulesets/Character.cpp: Implement destination based movement when
the target position is specified with a different LOC to the
current LOC of the character.
* modules/Location.cpp: Document the functions used to determine
relative distance vectors.
* 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.
* rulesets/Character.cpp: If reading quaternion from Atlas results
in an invalid quaternion, report an ERROR. Abort processing
the move op if any exception is thrown when reading values
from Atlas.
* rulesets/Character.cpp, rulesets/Character.h:
Add handler for chop ops, which is a quick implementation of
Axe murder to test the health bar in clients.
* rulesets/Character.cpp, rulesets/Character.h: Add Attack operation
handler to set up combat when sent by attacker.
* rulesets/Combat.cpp: Fix bootstrap tick op, and return a future tick
op from the tick op handler.
* rulesets/Entity.h, rulesets/Entity.cpp: Add default script
only handler for Attack ops.
* rulesets/Character.cpp: When Attack op comes from mind,
move it on to the target entity.
* client/ClientConnection.cpp: Improve error reporting when
unexpected object arrives from server.
* rulesets/Character.cpp: Invert test so that tool use op arguments
are now set correctly.
* rulesets/Entity.cpp: Use proper entities to handle responses to
Create and Look ops.
* server/Connection.cpp, server/EntityFactory.cpp: Improve error
reporting using String::compose.
* server/EntityFactory.cpp: Invert test so that all custom ops
now don't fail to get installed. Ensure that custom ops that
need to wait for their parent a properly inserted into the
waiting queue.
* common/custom.cpp, rulesets/Character.cpp: Ensure all custom op
types are registered with the Atlas factories, and switch
to using it for tool operations.
* common/compose.hpp: Add Ole Laursen's fine string composition
library for improved messages.
* rulesets/Character.cpp: Fix inverted check for string pos,
and add a clearer error message when it fails, using
compose.
* 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/Movement.h, rulesets/Pedestrian.h, rulesets/Movement.cpp,
rulesets/Pedestrian.cpp: Get rid of m_collAxis as it was unused.
Add velocity to the interface of getTickAddition to avoid using
the redundant m_velocity member of Movement. Fix calculation
of velocity magnitude in new movement code. Correctly set
velocity to zero when movement reaches its target.
* rulesets/Character.cpp: Add alternative movement processing
code based on the new mathods in Pedestrian.
* rulesets/Movement.h, rulesets/Pedestrian.h, rulesets/Pedestrian.cpp:
Add a return value to getUpdatedLocation to indicate whether an
update was necessary or not.
* rulesets/Character.cpp: Add some notes on how this code could be
adapted to Use the new Movement code.
* rulesets/Character.cpp, rulesets/Movement.cpp, rulesets/Movement.h,
rulesets/Pedestrian.cpp: Rename some variables to make the code
more comprehensible.
* rulesets/Character.cpp, rulesets/Character.h, rulesets/attributes.h,
server/Persistor.cpp, server/Persistor_impl.h, server/Restorer.cpp;
Make right_hand_wield a real Atlas property, and add it to the
database code.
* rulesets/Character.cpp: When wielding a tool, set right_hand_wield
correctly to notify clients.
* data/mason.xml: Add a new rule for fish.
* rulesets/mason/define_world.py: Add a shoal of fish to the lake.
* common/custom.cpp, rulesets/Character.cpp,
rulesets/basic/mind/NPCMind.py: Use Unseen operation to notify
minds when they attempt to interactive with something that
they can't iteract with, either because its outside their
area of perception, or because its been deleted.
* rulesets/Character.cpp: Add some debug stuff.
* rulesets/World.cpp, rulesets/World.h: Add handler for delve
operations. Just for testing for now, no functionality.
* rulesets/Character.cpp: Include POS from a Use op argument when
building the arg for the resulting op.
* rulesets/Py_Point3D.cpp: Add a print handler.
* rulesets/Python_API.cpp: When constructing Point3D or Vector3D
accept an Atlas list as well as a standard python list.
* common/custom.cpp, common/Delve.h,
common/operations.cpp, common/operations.h:
Add new delve operation for digging with a pickaxe.
* data/basic.xml, rulesets/basic/world/objects/tools/Pickaxe.py:
Add new pickaxe entity which emits a Delve operation when
used.
* rulesets/Character.cpp: Fix a bug where a segfault occured
if an operation was requested by a tool that was unknown to
to the core server code. Instead an error message is emitted.
* rulesets/World.cpp: Subscribe world terrain to delve ops.
* common/Property.cpp, rulesets/EntityProperties.cpp,
server/Persistor.cpp, server/Restorer.cpp, tools/cycmd.cpp:
Tweak template code to work with stricter standard compliance
of gcc 4.
* rulesets/Character.h, rulesets/Character.cpp: static const
members need to be defined in the .cpp to satisfy all compilers.