Commit graph

437 commits

Author SHA1 Message Date
Al Riddoch
02bbdc7af5 2006-04-05 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: Improve error logging in task setup.

	* rulesets/Task.h, rulesets/Py_Task.cpp: Add an accessor for the
	  refcount of a task, and expose it to the script interface.

	* rulesets/mason/world/tasks/Combat.py: Add a check that there are
	  still at least two participants in combat, or end the task.
2006-04-15 09:55:22 +00:00
Al Riddoch
816a2dfc6c 2006-04-05 Al Riddoch <alriddoch@zepler.org>
* common/BaseWorld.h, server/WorldRouter.h, server/WorldRouter.cpp:
	  Add interface to allow world entities to activate tasks based on
	  tool use operations.

	* server/EntityFactory.h, server/EntityFactory.cpp: Add method which
	  createa a new task in response to an activation request.

	* rulesets/Character.cpp: When a character uses a tool, use the
	  tool type and operation to activate a task if one is available.
2006-04-05 01:21:40 +00:00
Al Riddoch
7dc0d82303 2006-04-03 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: Further cleanups of mind Use op handler,
	  and improvements to error messages.
2006-04-03 13:46:02 +00:00
Al Riddoch
39fbb91462 2006-04-03 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.h, rulesets/Character.cpp: Add stub of Use op
	  handler on character. Re-write the mind Use op handler to be
	  cleaner, faster and easier to understand.
2006-04-03 00:52:53 +00:00
Al Riddoch
410312f866 2006-02-20 Al Riddoch <alriddoch@zepler.org>
* 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.
2006-02-21 01:41:59 +00:00
Al Riddoch
fac57eee73 2006-01-19 Al Riddoch <alriddoch@zepler.org>
* aiclient/ClientAccount.cpp, aiclient/ClientAccount.h,
	  aiclient/ClientConnection.cpp, aiclient/ClientConnection.h,
	  aiclient/client.cpp, aiclient/client.h, client/BaseClient.cpp,
	  client/BaseClient.h, client/CharacterClient.cpp,
	  client/CharacterClient.h, client/ClientConnection.cpp,
	  client/ClientConnection.h, client/CreatorClient.cpp,
	  client/CreatorClient.h, client/ObserverClient.cpp,
	  client/ObserverClient.h, client/Py_CreatorClient.cpp,
	  client/Py_CreatorClient.h, client/client.cpp,
	  client/define_world.cpp, client/define_world.h, common/Add.h,
	  common/Affect.h, common/AtlasFileLoader.cpp,
	  common/AtlasFileLoader.h, common/Attack.h, common/BaseEntity.cpp,
	  common/BaseEntity.h, common/BaseWorld.cpp, common/BaseWorld.h,
	  common/Burn.h, common/Chop.h, common/Connect.h, common/CustomOp.cpp,
	  common/CustomOp.h, common/CustomOp_impl.h, common/Cut.h,
	  common/Database.cpp, common/Database.h, common/Delve.h, common/Dig.h,
	  common/Eat.h, common/FormattedXMLWriter.cpp,
	  common/FormattedXMLWriter.h, common/Generic.h, common/Load.h,
	  common/Monitor.h, common/Mow.h, common/Nourish.h,
	  common/OOGThing.cpp, common/OOGThing.h, common/Property.cpp,
	  common/Property.h, common/Property_impl.h, common/Save.h,
	  common/Setup.h, common/Tick.h, common/Unseen.h, common/Update.h,
	  common/Use.h, common/Wield.h, common/accountbase.cpp,
	  common/accountbase.h, common/const.cpp, common/const.h,
	  common/custom.cpp, common/debug.h, common/globals.cpp,
	  common/globals.h, common/id.cpp, common/id.h, common/inheritance.cpp,
	  common/inheritance.h, common/inheritance_impl.h, common/log.cpp,
	  common/log.h, common/newid.cpp, common/nls.h, common/op_switch.h,
	  common/operations.cpp, common/operations.h, common/random.h,
	  common/refno.h, common/serialno.cpp, common/serialno.h,
	  common/system.cpp, common/system.h, common/terrain_utils.cpp,
	  common/terrain_utils.h, common/type_utils.h, common/types.h,
	  common/utility.cpp, common/utility.h, modules/DateTime.cpp,
	  modules/DateTime.h, modules/Location.cpp, modules/Location.h,
	  modules/WorldTime.cpp, modules/WorldTime.h, physics/BBox.cpp,
	  physics/BBox.h, physics/Collision.cpp, physics/Collision.h,
	  physics/Quaternion.cpp, physics/Quaternion.h, physics/Vector3D.cpp,
	  physics/Vector3D.h, physics/VectorPol.h, rulesets/Area.cpp,
	  rulesets/Area.h, rulesets/AreaProperty.cpp, rulesets/AreaProperty.h,
	  rulesets/ArithmeticScript.cpp, rulesets/ArithmeticScript.h,
	  rulesets/BaseMind.cpp, rulesets/BaseMind.h,
	  rulesets/CalendarProperty.cpp, rulesets/CalendarProperty.h,
	  rulesets/Character.cpp, rulesets/Character.h, rulesets/Combat.cpp,
	  rulesets/Combat.h, rulesets/Container.cpp, rulesets/Container.h,
	  rulesets/Creator.cpp, rulesets/Creator.h, rulesets/Entity.cpp,
	  rulesets/Entity.h, rulesets/EntityProperties.cpp,
	  rulesets/Entity_getLocation.h, rulesets/Fell.cpp, rulesets/Fell.h,
	  rulesets/Food.cpp, rulesets/Food.h, rulesets/Line.cpp,
	  rulesets/Line.h, rulesets/LineProperty.cpp, rulesets/LineProperty.h,
	  rulesets/MemEntity.cpp, rulesets/MemEntity.h, rulesets/MemMap.cpp,
	  rulesets/MemMap.h, rulesets/MemMap_methods.h,
	  rulesets/MindFactory.cpp, rulesets/MindFactory.h, rulesets/Missile.h,
	  rulesets/Motion.cpp, rulesets/Motion.h, rulesets/Movement.cpp,
	  rulesets/Movement.h, rulesets/Pedestrian.cpp, rulesets/Pedestrian.h,
	  rulesets/Plant.cpp, rulesets/Plant.h, rulesets/Py_BBox.cpp,
	  rulesets/Py_BBox.h, rulesets/Py_EntityWrapper.h,
	  rulesets/Py_Location.cpp, rulesets/Py_Location.h,
	  rulesets/Py_Map.cpp, rulesets/Py_Map.h, rulesets/Py_Mind.cpp,
	  rulesets/Py_Mind.h, rulesets/Py_Object.cpp, rulesets/Py_Object.h,
	  rulesets/Py_Operation.cpp, rulesets/Py_Operation.h,
	  rulesets/Py_Oplist.cpp, rulesets/Py_Oplist.h, rulesets/Py_Optime.cpp,
	  rulesets/Py_Optime.h, rulesets/Py_Point3D.cpp, rulesets/Py_Point3D.h,
	  rulesets/Py_Property.cpp, rulesets/Py_Property.h,
	  rulesets/Py_Quaternion.cpp, rulesets/Py_Quaternion.h,
	  rulesets/Py_RootEntity.cpp, rulesets/Py_RootEntity.h,
	  rulesets/Py_Statistics.cpp, rulesets/Py_Statistics.h,
	  rulesets/Py_Task.cpp, rulesets/Py_Task.h, rulesets/Py_Thing.cpp,
	  rulesets/Py_Thing.h, rulesets/Py_Vector3D.cpp,
	  rulesets/Py_Vector3D.h, rulesets/Py_World.cpp, rulesets/Py_World.h,
	  rulesets/Py_WorldTime.cpp, rulesets/Py_WorldTime.h,
	  rulesets/PythonArithmeticScript.cpp,
	  rulesets/PythonArithmeticScript.h, rulesets/PythonMindScript.cpp,
	  rulesets/PythonMindScript.h, rulesets/PythonScript.cpp,
	  rulesets/PythonScript.h, rulesets/PythonThingScript.cpp,
	  rulesets/PythonThingScript.h, rulesets/PythonWrapper.cpp,
	  rulesets/PythonWrapper.h, rulesets/Python_API.cpp,
	  rulesets/Python_API.h, rulesets/Python_Script_Utils.h,
	  rulesets/Script.cpp, rulesets/Script.h, rulesets/Stackable.cpp,
	  rulesets/Stackable.h, rulesets/Statistics.cpp, rulesets/Statistics.h,
	  rulesets/StatisticsProperty.cpp, rulesets/StatisticsProperty.h,
	  rulesets/Structure.cpp, rulesets/Structure.h, rulesets/Task.cpp,
	  rulesets/Task.h, rulesets/TaskScript.cpp, rulesets/TaskScript.h,
	  rulesets/TerrainProperty.cpp, rulesets/TerrainProperty.h,
	  rulesets/Thing.cpp, rulesets/Thing.h, rulesets/ThingFactory.cpp,
	  rulesets/ThingFactory.h, rulesets/World.cpp, rulesets/World.h,
	  rulesets/attributes.h, server/Account.cpp, server/Account.h,
	  server/Admin.cpp, server/Admin.h, server/ArithmeticFactory.cpp,
	  server/ArithmeticFactory.h, server/CommClient.cpp,
	  server/CommClient.h, server/CommIdleSocket.cpp,
	  server/CommIdleSocket.h, server/CommListener.cpp,
	  server/CommListener.h, server/CommLocalClient.cpp,
	  server/CommLocalClient.h, server/CommMDNSPublisher.cpp,
	  server/CommMDNSPublisher.h, server/CommMaster.cpp,
	  server/CommMaster.h, server/CommMetaClient.cpp,
	  server/CommMetaClient.h, server/CommPSQLSocket.cpp,
	  server/CommPSQLSocket.h, server/CommPeer.cpp,
	  server/CommPeer.h, server/CommPeerListener.cpp,
	  server/CommPeerListener.h, server/CommRemoteClient.cpp,
	  server/CommRemoteClient.h, server/CommServer.cpp,
	  server/CommServer.h, server/CommSlaveClient.cpp,
	  server/CommSlaveClient.h, server/CommSlaveListener.cpp,
	  server/CommSlaveListener.h, server/CommSocket.cpp,
	  server/CommSocket.h, server/CommUnixListener.cpp,
	  server/CommUnixListener.h, server/Connection.cpp,
	  server/Connection.h, server/Connection_methods.h,
	  server/EntityFactory.cpp, server/EntityFactory.h,
	  server/ExternalMind.cpp, server/ExternalMind.h,
	  server/Idle.cpp, server/Idle.h, server/Lobby.cpp, server/Lobby.h,
	  server/Master.cpp, server/Master.h, server/Peer.cpp, server/Peer.h,
	  server/Persistance.cpp, server/Persistance.h,
	  server/PersistantThingFactory.cpp, server/PersistantThingFactory.h,
	  server/PersistantThingFactory_impl.h, server/Persistor.cpp,
	  server/Persistor.h, server/Persistor_impl.h,
	  server/Player.cpp, server/Player.h, server/Restoration.cpp,
	  server/Restoration.h, server/Restorer.cpp, server/Restorer.h,
	  server/Restorer_impl.h, server/ScriptFactory.cpp,
	  server/ScriptFactory.h, server/ServerRouting.cpp,
	  server/ServerRouting.h, server/ServerRouting_methods.h,
	  server/SlaveClientConnection.cpp, server/SlaveClientConnection.h,
	  server/TaskFactory.cpp, server/TaskFactory.h,
	  server/TrustedConnection.cpp, server/TrustedConnection.h,
	  server/WorldRouter.cpp, server/WorldRouter.h,
	  server/server.cpp, server/server.h, server/slave.cpp,
	  tests/Areatest.cpp, tests/BaseEntitytest.cpp,
	  tests/Charactertest.cpp, tests/Containertest.cpp,
	  tests/Creatortest.cpp, tests/EntityExerciser.h,
	  tests/EntityFactorytest.cpp, tests/Entitytest.cpp,
	  tests/Foodtest.cpp, tests/IGEntityExerciser.h,
	  tests/Linetest.cpp, tests/Locationtest.cpp, tests/OOGThingtest.cpp,
	  tests/Planttest.cpp, tests/Propertytest.cpp, tests/Stackabletest.cpp,
	  tests/Structuretest.cpp, tests/Tasktest.cpp, tests/TestWorld.h,
	  tests/Thingtest.cpp, tests/WorldTimetest.cpp, tests/Worldtest.cpp,
	  tests/allOperations.h, tests/collisiontest.cpp, tests/consttest.cpp,
	  tests/distancetest.cpp, tests/emergencetest.cpp,
	  tests/inheritancetest.cpp, tests/logtest.cpp, tests/randomtest.cpp,
	  tests/systemtest.cpp, tests/transformtest.cpp,
	  tests/type_utilstest.cpp, tests/utilitytest.cpp,
	  tools/AdminClient.cpp, tools/AdminClient.h, tools/cyaddrules.cpp,
	  tools/cycmd.cpp, tools/cyconfig.cpp, tools/cyconvertrules.cpp,
	  tools/cyctrl.cpp, tools/cydbload.cpp, tools/cydumprules.cpp,
	  tools/cyisoload.cpp, tools/cyloadrules.cpp, tools/cypasswd.cpp,
	  tools/cywatchdog.cpp: Replace the copyright and license statements
	  with new versions that include disclaimer of warranty, and
	  permit distribution under later versions of the GPL.
2006-01-19 02:17:06 +00:00
Al Riddoch
8963785b31 2006-01-17 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: Remove error reports when client sends
	  move ops which refer to a non-existant entity.
2006-01-17 16:37:44 +00:00
Al Riddoch
c51eb98c01 2006-01-11 Al Riddoch <alriddoch@zepler.org>
* rulesets/PythonArithmeticScript.cpp: Implement getting attribute
	  values from statistics script.

	* rulesets/Statistics.cpp, rulesets/Statistics.h,
	  rulesets/Py_Statistics.cpp, rulesets/Character.cpp,
	  rulesets/Combat.cpp: Remove hard coded stats for combat
	  and strength.

	* rulesets/mason/world/statistics/Statistics.py: Add test support
	  for combat and strength stats.

	* server/PersistantThingFactory.cpp: Remove debug output.
2006-01-11 16:55:55 +00:00
Al Riddoch
223a8cc309 2005-12-31 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: Reduce the rate at which animal mass is
	  consumed when they are starving.
2005-12-31 00:55:14 +00:00
Al Riddoch
d3f2f1a351 2005-12-30 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp, rulesets/StatisticsProperty.h,
	  rulesets/StatisticsProperty.cpp: Add a property handler for
	  statistics.

	* rulesets/Character.cpp: When setting task, check if an existing
	  task needs to be cleared first. When clearing a task, check
	  whether a task exists or not.

	* rulesets/Character.cpp: When initiating combat task from task
	  factory, check to see if the task is successfully created before
	  using it.

	* rulesets/Py_Property.cpp, rulesets/Py_Property.h: New python wrapper
	  class for entity properties.

	* rulesets/Py_Mind.cpp: Re-work getattr logic to make it clearer.

	* rulesets/Py_Object.cpp: Return Py_None when an Atlas Element cannot
	  be converted to python. This ensures that this function never returns
	  null.

	* rulesets/Py_Statistics.cpp: Add temporary handlers for hardcoded
	  statistics for "attack", "defence", and "strength".

	* rulesets/Py_Task.cpp: Add wrappers for methods Task.irrelevant and
	  Task.obsolete, as these are now required in combat scripts.

	* rulesets/Py_Task.h: Fix the PyTask_Check macro, which was miscoded.

	* rulesets/Py_Thing.cpp: Add wrapper for Entity.send_world so that
	  scripts can channel ops through entities.

	* rulesets/Py_Thing.h, rulesets/Py_Thing.cpp: Add an addition structure
	  for directlty wrapping Character in a type safe way. Add method
	  structure pointer to Entity and Character wrappers so that
	  the same getattr method is used for both. Add new method table for
	  Character including wrappers for set_task and clear_task, allowing
	  task scripts to add themselves and remove themselves from
	  characters. Modify wrapEntity() to ensure that Character entities
	  get the right wrapper.

	* rulesets/Py_Thing.cpp: Re-work getattr code so that properties and
	  soft attributes are checked individually, rather than in a single
	  call to Entity.get. Use new python property wrappers to wrap
	  properties explicitly if required rather than converting to Atlas
	  then to generic Python data.

	* rulesets/TerrainProperty.h: Fix incorrect class description in
	  documentation.

	* rulesets/mason/world/tasks/Combat.py: Complete implementation of
	  simple example combat.

	* server/TaskFactory.cpp: Remove debug output.
2005-12-30 18:02:40 +00:00
Al Riddoch
8dc08013dd 2005-12-26 Al Riddoch <alriddoch@zepler.org>
* common/BaseWorld.h: Add factory method for new tasks to the world
	  interface.

	* rulesets/Character.cpp: Use world interface to create combat
	  task, rather than using EntityFactory directly.

	* server/WorldRouter.h, server/WorldRouter.cpp: Implement the
	  new task method in the core world object.
2005-12-26 23:05:16 +00:00
Al Riddoch
d68e894f5a 2005-12-26 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: Switch to using the test combat script.

	* rulesets/Py_EntityWrapper.h, rulesets/Py_Statistics.h: Move the
	  generic entity wrapper structure into its own header.

	* client/Py_CreatorClient.cpp, rulesets/Py_Location.cpp,
	  rulesets/Py_Location.h, rulesets/Py_Mind.cpp, rulesets/Py_Thing.cpp,
	  rulesets/Python_API.cpp: Modify PyLocation so that rather than
	  having a flag to indicate whether the script owns the object,
	  it instead stores a pointer to the entity that owns it in that
	  eventuality.

	* rulesets/Py_Thing.cpp: Allow map and list attributes to be set from
	  scripts as long as the contents are Atlas compatible.

	* rulesets/Python_API.cpp: Fix script output handling so only complete
	  lines are output.

	* rulesets/mason/world/tasks/Combat.py: Add code for identifying
	  attacker and defender in a combat.
2005-12-26 18:49:14 +00:00
Al Riddoch
c2e1e78271 2005-12-23 Al Riddoch <alriddoch@zepler.org>
* rulesets/mason/world/tasks/Combat.py: Expand the sample combat
	  to include tick ops.

	* rulesets/Python_API.cpp, rulesets/Py_Operation.cpp: Add necessary
	  handlers for sub_to attribute on operations.

	* rulesets/Character.cpp: Adapt test code for combat scripts to
	  the latest task API.
2005-12-23 23:34:19 +00:00
Al Riddoch
c6ddb48ac8 2005-12-09 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.h, rulesets/Character.cpp: Add a function to
	  assign a task to a character.

	* tests/Tasktest.cpp: Test the combat task.
2005-12-09 22:43:40 +00:00
Al Riddoch
c111c29826 2005-12-09 Al Riddoch <alriddoch@zepler.org>
* rulesets/Script.cpp: Document the script interface.

	* rulesets/Task.h: Modify task interface so tasks now expect
	  the operation that initiated the task to be passed in
	  to an init function.

	* rulesets/Combat.h, rulesets/Combat.cpp: Modify the combat task
	  methods to match the interface changes.

	* rulesets/Character.cpp: Modify Combat use to take account
	  of interface changes. Prototype using script based
	  combat.

	* rulesets/TaskScript.h, rulesets/TaskScript.cpp: Implement
	  passing the initialising op through to the script using the
	  standard scripp operation handling functions.

	* rulesets/mason/world/tasks/Combat.py: Add handler for Attack
	  operation, which should now be passed in at init time.
2005-12-09 09:33:17 +00:00
Al Riddoch
c2ab5ff120 2005-11-23 Al Riddoch <alriddoch@zepler.org>
* common/id.cpp, common/id.h: Break integer ID conversion into
	  two versions, one which abort()s and one which returns a known
	  invalid ID.

	* rulesets/Character.cpp: Fix the grammar in an error message.

	* server/Player.cpp: Make error message on failed character creation
	  clearer.
2005-11-23 11:13:11 +00:00
Al Riddoch
895e7e6797 2005-11-23 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: Prevent characters from attacking themselves.
2005-11-23 10:52:20 +00:00
Al Riddoch
7da6d9838c 2005-11-21 Al Riddoch <alriddoch@zepler.org>
* rulesets/Entity.cpp: Switch to using SignalProperty for BBOX.

	* rulesets/Area.cpp, rulesets/Character.cpp, rulesets/Line.cpp,
	  rulesets/Plant.cpp, rulesets/Py_Location.cpp:
	  Update bbox on location using setBBox(), so cached values are
	  updated.
2005-11-21 14:34:03 +00:00
Al Riddoch
162f57955e 2005-11-11 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-11-11 02:04:56 +00:00
Al Riddoch
75e9d3a546 2005-11-10 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-11-11 00:06:48 +00:00
Al Riddoch
cab0671c68 2005-11-02 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-11-02 02:46:57 +00:00
Al Riddoch
8c0a05b40b 2005-11-02 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-11-02 02:06:38 +00:00
Al Riddoch
ec7f371b75 2005-10-24 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: Immobilise character if they have no stamina.

	* configure.ac, NEWS: Increment version and update news.

	* TODO: Remove done TODO items.
2005-10-24 16:11:59 +00:00
Al Riddoch
2735f09740 2005-10-23 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: Report an error if m_task becomes null
	  while processing a task tick op.

	* rulesets/Combat.cpp: Remove debug output.

	* rulesets/Statistics.cpp: Remove debug output.
2005-10-23 21:10:48 +00:00
Al Riddoch
409060aec3 2005-10-20 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-10-20 21:47:51 +00:00
Al Riddoch
e3806759eb 2005-10-20 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-10-20 14:34:01 +00:00
Al Riddoch
be74e78b55 2005-10-20 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-10-20 13:43:04 +00:00
Al Riddoch
4a344efba4 2005-10-19 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-10-19 16:41:27 +00:00
Al Riddoch
1ab13bf6c3 2005-10-18 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-10-18 21:46:42 +00:00
Al Riddoch
2e0f9a4c83 2005-10-16 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-10-16 20:47:33 +00:00
Al Riddoch
26fbbe9d4b 2005-10-01 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-10-01 17:34:21 +00:00
Al Riddoch
a0836a6818 2005-09-28 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-28 23:02:50 +00:00
Al Riddoch
9f84ec07ef 2005-09-26 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: Report an error if a movement tick op has
	  no serialno. Remove some obsolete comments.
2005-09-27 00:00:17 +00:00
Al Riddoch
7edb9b919e 2005-09-26 Al Riddoch <alriddoch@zepler.org>
* rulesets/Character.cpp: When processing Move op from mind,
	  suppress Tick op used to update if character is not moving.
2005-09-26 12:43:40 +00:00
Al Riddoch
0504e6cf79 2005-09-26 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-26 01:56:21 +00:00
Al Riddoch
f3a20714ec 2005-09-26 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-26 00:06:19 +00:00
Al Riddoch
ab71b9c6b8 2005-09-22 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-22 17:24:03 +00:00
Al Riddoch
168480f85c 2005-09-20 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-20 23:09:22 +00:00
Al Riddoch
ab7244ccb0 2005-09-20 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-20 00:26:42 +00:00
Al Riddoch
85f6672fbe 2005-09-19 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-19 22:36:14 +00:00
Al Riddoch
77cfe37fb4 2005-09-19 Al Riddoch <alriddoch@zepler.org>
* rulesets/Task.h, rulesets/Task.cpp: Add reference counting to the
	  task interface.

	* rulesets/Character.cpp, rulesets/Combat.cpp, rulesets/Combat.h:
	  Add experimental code to handle initiating combat.
2005-09-19 00:42:03 +00:00
Al Riddoch
68fdae5266 2005-09-18 Al Riddoch <alriddoch@zepler.org>
* common/Attack.h, common/operations.cpp, common/types.h:
	  Add a new Attack operation type.

	* common/op_switch.h, common/BaseEntity.h, common/BaseEntity.cpp,
	  rulesets/BaseMind.cpp, rulesets/BaseMind.h,
	  rulesets/Character.cpp, rulesets/Character.h: Add handlers to base
	  classes for Attack op.
2005-09-18 02:03:37 +00:00
Al Riddoch
d52414f72a 2005-09-18 Al Riddoch <alriddoch@zepler.org>
* rulesets/PythonMindScript.cpp, rulesets/PythonMindScript.h,
	  rulesets/PythonThingScript.cpp, rulesets/PythonThingScript.h
	  rulesets/PythonScript.h, rulesets/Script.cpp, rulesets/Script.h:
	  Clean up script API.

	* rulesets/BaseMind.cpp, rulesets/Character.cpp, rulesets/Entity.cpp,
	  rulesets/Food.cpp, rulesets/Plant.cpp, rulesets/Stackable.cpp,
	  rulesets/Thing.cpp: Modify script calls to new API.

	* rulesets/BaseMind.cpp, rulesets/BaseMind.h: All sub_op calls now
	  take const ref for sub_op argument.
2005-09-18 00:55:58 +00:00
Al Riddoch
f2a739734a 2005-09-14 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-13 23:29:42 +00:00
Al Riddoch
6c5aedd3e8 2005-09-12 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-12 01:11:35 +00:00
Al Riddoch
2ef3642327 2005-09-10 Al Riddoch <alriddoch@zepler.org>
* rulesets/Thing.cpp, rulesets/Character.cpp: Use getVelocity()
	  on RootEntity, rather than accessing it as a soft attribute.
2005-09-10 01:26:23 +00:00
Al Riddoch
aef624468b 2005-09-07 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-09-07 17:18:27 +00:00
Al Riddoch
39918324e0 2005-08-31 Al Riddoch <alriddoch@zepler.org>
* 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++.
2005-08-30 23:53:34 +00:00
Al Riddoch
42e1c99565 2005-08-30 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-08-30 20:43:19 +00:00
Al Riddoch
776ee701f0 2005-08-29 Al Riddoch <alriddoch@zepler.org>
* 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.
2005-08-29 03:34:24 +00:00