* server/CorePropertyManager.cpp: Modify DECAYS Delete handler so
that the parent entity handles the creation of entities that
have resulted from the decay.
* rulesets/Character.cpp: Call Entity::operation() from operation()
to ensure operation handlers are called, and all future
modifications get picked up too.
* data/basic.xml, data/mason.xml: Add a DECAYS property leaving a
skull to all humanoid classes.
* common/types.h: Add an entity pointer to the handler function
pointer arguments.
* rulesets/ActivePropertyFactory_impl.h: Fix the guard comment.
* rulesets/Character.cpp: Remove debugging output.
* rulesets/Entity.cpp: Fix new property code so it now sets the
value. Improve the debug reporting when dealing with op handlers.
* rulesets/mason/define_world.py: Test the decays property.
* server/CorePropertyManager.cpp: Add a DECAYS property and a
test handler for it.
* rulesets/Character.h: Fix broken doc comments on constants for
metabolism.
* rulesets/Character.cpp: Switch metabolism code over to use the
update mechanism, to remove race conditions. Re-write the
math so that nothing can stay alive for ages by consuming all their
mass. Tune constants so a well fed character will take a month.
* data/mason.xml: Set up goblin and settler class so that by
default they will starve to death in a few hours, and need to find
food to avoid this.
* common/const.h: Oops. Database got disabled again by accident.
Turn it back on.
* rulesets/OutfitProperty.cpp, rulesets/OutfitProperty.h: Make this
property sigc++ trackable, and add a method to handle signals
indicating that the entity has been removed from the outfit.
* rulesets/mason/define_world.py: Add a test function for messing
with outfit.
* rulesets/Character.cpp: Make sure the "outfit" property really is
an OutfitProperty.
* rulesets/Character.cpp, rulesets/Character.h: Remove SEX property
from Character.
* rulesets/attributes.h, server/Persistor_impl.h, server/Restorer.cpp:
Remove SEX property from the persistence code.
* tests/Charactertest.cpp, tests/Creatortest.cpp: Remove SEX attribute
from the tests, as it is no longer there.
* rulesets/OutfitProperty.h, rulesets/OutfitProperty.cpp: Ensure that
removed garments or equipment get reported as empty IDs, and provide
a function to clean them up. Provide a direct function for adding
garments, without needing to go through the slower standard interface.
* rulesets/mason/define_world.py: Add a quick hacked in test garment.
* rulesets/Character.cpp: Implement adding OUTFIT property on demand,
and adding to it anything wielded that has a WORN attribute.
* rulesets/Character.cpp, rulesets/Creator.cpp, rulesets/Entity.cpp,
rulesets/Entity.h, rulesets/Pedestrian.cpp, rulesets/Py_Thing.cpp,
rulesets/Stackable.cpp, rulesets/Thing.cpp, rulesets/World.cpp:
Remove m_world member variable from all Entity classes, and
access the world manager object as a singleton.
* rulesets/EntityProperty.cpp: Modify EntityProperty so it
shows its value as an empty ID if it is not set to anything,
and clears its reference if it is set to an empty string.
* rulesets/Character.cpp: Fix the code that handles an empty wield
argument, so it clears the wielded entity correctly and efficiently.
* rulesets/attributes.h, server/Persistor_impl.h,
server/Restorer.cpp: Remove right_hand_wield from the
persistence layer, pending its complete removal.
* rulesets/EntityProperty.h, rulesets/EntityProperty.cpp:
Make EntityProperty a more normal property by making it hold
a reference to its value, not the value itself.
* rulesets/Character.cpp, rulesets/Character.h: Use EntityProperty
for right_hand_wield attribute, so it stores the value long term
which I think is more efficient.
* rulesets/Thing.cpp: Add some debug instrumentation to the new
Property update mechanism.
* rulesets/Character.cpp: Re-write the Wield handling code to use
Update ops.
* client/CharacterClient.cpp, client/ClientConnection.h,
rulesets/Character.cpp, rulesets/Character.h, tools/cyaddrules.cpp,
tools/cyconfig.cpp, tools/cyconvertrules.cpp, tools/cyctrl.cpp,
tools/cydumprules.cpp, tools/cyloadrules.cpp, tools/cypasswd.cpp:
Add inline documentation.
* client/CharacterClient.h, client/CharacterClient.cpp: Remove
overriden sight operation handlers, as they are no longer
present in the base class, and will never be called.
* client/ClientConnection.h: Remove obsolete unimplemented template
declaration.
* rulesets/Entity.cpp: Remove documentation for an argument that was
never there.
* tools/cyctrl.cpp: Mark as removed from the build.
* Add a FIXME about removing hard coded gender property
* common/op_switch.h, rulesets/Character.h, rulesets/Character.cpp:
Add Update to the poll op handlers in the world2mind interface,
removing the special case.
* rulesets/BaseMind.cpp, rulesets/Character.cpp, rulesets/Food.cpp,
rulesets/Plant.cpp, rulesets/Stackable.cpp, rulesets/Thing.cpp:
Remove script override calls from the individual C++ operation
methods, as script overrides are now done centrally.
* rulesets/Entity.h, rulesets/Entity.cpp: Add a override of
BaseEntities operation() method which handles calling
script operation handlers directly, rather than relying
on the C++ handlers to check for them later.
* rulesets/Character.cpp, rulesets/BaseMind.cpp: Check for script
operation handlers centrally in Character and BaseMind too.
* rulesets/Stackable.cpp: Report an error if a divide op has
args with the wrong ID.
* rulesets/Character.h, rulesets/Character.cpp: Add function
to check if an entity is in the characters inventory.
* rulesets/Character.cpp: First pass at implementing filters
for combine and divide ops from the client.
* 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/Movement.h: Add method to check if a target position has
been specified.
* rulesets/Character.cpp: Don't return a tick for movement if no
target is specified, as the old movement object has no further
role to play.
* server/Connection.cpp, server/CommClient.cpp, server/Account.cpp:
Only set refnos on ops if the client has set a serial number.
* rulesets/Character.cpp: Simplify handling the transfer of
operations from client to in-game. Don't give new operations
serial numbers at this point.
* rulesets/Character.cpp: Be more severe about error messages if
client sends an action op. Remove obsolete comments.
Warn if client sends a Set op. Don't accept look ops with
an arg containing no ID - nothing sends this, and nothing should.
* rulesets/Thing.cpp: Add an error report if an explicit Action op
is received by an entity.
* common/Database.cpp, common/newid.cpp, server/server.cpp:
Modify new ID checks so that code still runs when database is
unavailable, and events requiring new IDs fail cleanly.
* server/Connection.cpp: Report a failure to create a player
account if no ID available.
* rulesets/BaseMind.cpp: When processing appearance ops, handle
stamp more efficiently, report an error if ID is missing
from argument.
* server/IdlePSQLConnector.cpp, server/IdlePSQLConnector.h:
Implement re-connecting to the Database if connection is lost.
* rulesets/Character.cpp, rulesets/Entity.cpp, rulesets/Thing.cpp:
Ensure STAMP is present on appearance op args.
* server/CommListener.cpp, server/CommListener.h,
server/CommPeerListener.cpp, server/CommPeerListener.h,
server/CommSlaveListener.cpp, server/CommSlaveListener.h,
server/CommUnixListener.cpp, server/CommUnixListener.h:
Add a return value to method for creating new client socket
objects, and use it to return failure if no ID is available
from the database for a new object.
* rulesets/Py_Point3D.cpp, rulesets/Py_Vector3D.cpp,
rulesets/Python_API.cpp: Add "new" method for class wrappers, and
call the in place constructor from new rather than init. Re-write
internal function for creating new instances so it uses the "new"
method.
* rulesets/Py_Statistics.cpp: Remove some obsolete code inadvertedly
copied from another file. Comment out some unused code to get rid
of a warning.
* server/CommPSQLSocket.cpp: Clear the database connection from
destructor.
* tests/python_class.cpp: A new test for experimenting with new
Python wrappers.
* rulesets/Character.cpp, rulesets/Task.cpp: Fix the name of the
TASKS attribute.
* rulesets/mason/world/tasks/Logging.py: Make the logging task
progress in the right direction.
* rulesets/Task.cpp, rulesets/Task.h: Add two members to task,
progress and rate which handle the progress towards completion,
and the rate at which it is changing. Add a member function which
adds an atlas representation of the task as an attribute to an
Atlas entity.
* rulesets/Py_Task.cpp: Expose progress and rate attributes allowing
them to be set.
* server/TaskFactory.cpp: Set the name of a task when it is created
by its factory.
* rulesets/mason/world/tasks/Logging.py: Set the progress and rate
of the logging task as it progresses.
* rulesets/Character.h, rulesets/Character.cpp: Add updateTask()
method to be called when task ticks. Make initTask, updateTask
and clearTask emit Set operations which set the TASK attribute
on the character to reflect the current status of the task.
* rulesets/mason/world/tasks/Ram.py: Use two move ops to give the
entity being hammered a short burst of velocity, so it being
hammered in is visible.
* rulesets/Character.cpp: Don't process task tick ops if they have
no serial number.
* rulesets/mason/world/tasks/Logging.py,
rulesets/mason/world/tasks/Raise.py,
rulesets/mason/world/tasks/Ram.py,
rulesets/mason/world/tasks/Sharpen.py: Add serial numbers to
tick ups.
* rulesets/mason/world/tasks/Combat.py: Fix the attacker initiative
and detect if combat is obsolete if a character has been defeated.
* rulesets/Task.h: Add an accessor to return an incremented serial
number for a new tick op.
* rulesets/Py_Task.cpp: Add python wrapper for new tick accessor.
* rulesets/Character.cpp: Add debug output to code enforcing
old task ticks.
* rulesets/Character.cpp: Re-write the way combat is initialised
so each participant owns its own combat task object.
* rulesets/mason/world/tasks/Combat.py: Re-implement the example
combat system so it works with one instance per character instead
of one per battle.
* rulesets/Character.cpp: When the client sends a Use op with
no args, stop the current task. A mechanism for testing the
task for interruptibility is still required, so characters can't
escape too easily from combat.
* rulesets/Character.cpp: Stop using SUB_TO for tick and setup ops to
subsystems, and use argument.NAME instead to indicate the subsystem
to be compatible with movement ticks.
* rulesets/Character.cpp: Simplify check tick ops for subsystem.
* rulesets/Combat.h, rulesets/Fell.h: Remove obsolete hard coded
tasks from the build.
* tests/Tasktest.cpp, tests/Fell.cpp, tests/Fell.h: Move old Fell
class into tests, and use it to verify tasks operate correctly.
* rulesets/Character.cpp, rulesets/Task.cpp, rulesets/Task.h,
rulesets/TaskScript.cpp: Re-work tick ops to tasks so they use
argument, not sub_to to get routed to the task. Do the groundwork
for having a serial number for each op, which resets to zero when
a new task is started.
* rulesets/mason/world/tasks/Combat.py,
rulesets/mason/world/tasks/Logging.py,
rulesets/mason/world/tasks/Raise.py,
rulesets/mason/world/tasks/Ram.py,
rulesets/mason/world/tasks/Sharpen.py: Modify all current tasks
to set their arg as required.
* common/BaseWorld.h, rulesets/Character.cpp,
server/EntityFactory.cpp, server/EntityFactory.h,
server/TaskFactory.h, server/WorldRouter.cpp,
server/WorldRouter.h: Specify the target base type that a given
task is valid for, and provide target type when activating a task.
* data/mason.xml: Add target base types to most task rules.
* rulesets/mason/world/tasks/Combat.py: Fix the copyright date.
* rulesets/mason/world/tasks/Sharpen.py: Proof of concept task
for turning logs into stakes.
* rulesets/Py_Vector3D.cpp: Fix incorrect METH_VARARGS function type
of the three rotateN methods, as it should have been converted to
METH_O. Add a new rotate method used to rotate a vector using a
quaternion.
* rulesets/Py_Quaternion.cpp: Add a method to check the validity of
the quaternion, and a type method to create a string representation
of the quaternion.
* rulesets/Character.cpp: Remove commented out legacy hard coded
combat task setup. Now all tasks are scripts.
* rulesets/mason/world/tasks/Logging.py: Break logging down into
something that happens over many ticks, using the orientation of
the tree to determine if its felled yet.
* rulesets/Character.cpp: When tick ops are passed to mind, check
that SUB_TO=="mind" so that task ticks don't get treated as mind
ticks.
* rulesets/mason/world/tasks/Combat.py: Clean up logic for checking
attacker stamina on initialisation.
* rulesets/mason/world/tasks/Combat.py: Re-work the way combat works
so all involved entities do their own tick ops, rather than the
whole thing being coordinated by only one entity. This simplifies
removing the task once obsolete.
* rulesets/Py_Thing.cpp: Add get_task() on Character so task is
available to scripts.
* rulesets/Py_Oplist.cpp: Allow an oplist to be appended to an
oplist as well as being added.
* rulesets/Character.h: Add an accessor for task.
* rulesets/Character.cpp: Ensure a task is cleared if it does not
get initialised.