Commit graph

331 commits

Author SHA1 Message Date
Al Riddoch
403cb8d391 * configure.in, common/config.h, common/database.h, tools/cypasswd.cpp:
Added config check that looks for DB3's db_cxx.h on default
	  include path if it cannot be found in db3/. This fixes building
	  on Debian.

	* server/server.cpp, server/WorldRouter.cpp, acorn.vconf,
	  globals.h, globals.cpp: Added inittime config option used to
	  influence the game time used at server startup.

	* server/WorldTime.cpp: Added in new time of day descriptions for
	  more flexible goals.

	* server/ServerRouting.cpp: Removed output used to debug memory
	  cleanup code.

	* rulesets/basic/mind/goals/common/misc_goal.py: Added time
	  parameters to trading goals.

	* rulesets/Thing.cpp: Fixed appearance/disappearance operations
	  which were not getting sent most of the time.

	* client/define_world.py: Added in more NPC and modified behavoir.
	  Everyone now goes to the inn for lunch and in the evening, and
	  market traders only work during the day.

Al Riddoch  <alriddoch@zepler.org>
2001-05-30 14:49:38 +00:00
Al Riddoch
d74d7117e5 * server/server.cpp, server/CommClient.h, server/Account.h,
server/Account.cpp, rulesets/Entity.h, rulesets/Entity.cpp,
	  rulesets/Character.h, rulesets/Character.cpp, rulesets/BaseMind.h,
	  rulesets/BaseMind.cpp, common/types.h, common/operations.h,
	  common/op_switch.h, common/BaseEntity.h, common/BaseEntity.cpp:
	  Added support for imaginary operations used in a similar way
	  to emoting.

	* server/WorldTime.h: Added update method so underlying DataTime
	  can be updated.

	* server/ServerRouting.h, server/Lobby.h, server/Lobby.cpp
	  server/ServerRouting.cpp, server/Connection.h,
	  server/Connection.cpp, server/Account.h, server/Account.cpp: Added
	  a lobby object which handles lobby chat. Essentially it stores
	  a list of accounts and allows operations to be sent or broadcast
	  to other accounts.

	* rulesets/Py_WorldTime.cpp: Added python is_now() method because
	  using comparison does not appear to work.

	* rulesets/BaseMind.cpp: Added updating of minds WorldTime each
	  time an operation is received.

	* modules/DateTime.h: Added operator << so DateTime can be sent
	  to cout.

	* common/types.h: Added types for storing accounts in Lobby.

Al Riddoch  <alriddoch@zepler.org>
2001-05-29 11:16:09 +00:00
Al Riddoch
0572ab631b * Renamed Operataion method names throughout so they no longer
all have the name Operation but are now called MoveOperation,
	  according to the type of operation they handle.

	* modules/DateTime.cpp, modules/DataTime.h: Filled in functionality,
	  allowing initialisation and updating from a time values in seconds.

	* modules/Location.h: Modified collision detection code so no
	  checking is done between two moving objects.

	* rulesets/BaseMind.h, rulesets/BaseMind.cpp, rulesets/Entity.h,
	  rulesets/Entity.cpp: Removed virtual getMap() method and replaced
	  with a fixed method in BaseMind only. Added time member veriable
	  to BaseMind so each mind keeps track of time by itself.

	* rulesets/Python_API.h, rulesets/Py_Mind.cpp, rulesets/Py_Mind.h:
	  Added specific python interface for mind objects, because if
	  increasing differences in the way this must be handled.

	* rulesets/Character.h, rulesets/Character.cpp: Added isAlive flag
	  which is cleared if the character is dead. If this flag is cleared,
	  operations are no longer sent to the mind.

	* rulesets/Movement.h, rulesets/Movement.cpp, rulesets/Pedestrian.h,
	  rulesets/Pedestrian.cpp: Cleaned up the code, made members more
	  distinctive, and make interface more general.

	* rulesets/Py_Thing.cpp: Removed features used to support mind.

	* rulesets/Py_WorldTime.cpp: Added support for comparison of
	  time with strings, to establish whether it matches descriptions
	  of time.

	* rulesets/Python_API.cpp: Modified creating of scripts so mind
	  scripts use a slightly different interface from entity scripts,
	  to support the fact that a mind handles its own timekeeping,
	  has a memory map, and has no access to the world.

	* server/WorldTime.cpp, server/WorldTime.h: Brought WorldTime into
	  the build. Used to track details of the time. Added support for
	  checking time descriptions such as "midday", "summer" against
	  DateTime.

Al Riddoch  <alriddoch@zepler.org>
2001-05-28 14:58:24 +00:00
Al Riddoch
da1ae9e16d * rulesets/Entity.cpp: Added dynamic attributes to atlas entity
representation.

	* rulesets/Py_World.cpp: Added get_object() method so that python
	  scripts can actually interact with other objects.

	* rulesets/basic/mind/goals/common/misc_goal.py: Fixed hunt goal
	  so that the arrow is removed from inventory as it is fired.

	* client/define_world.py: Added archer, arrow and deer to test
	  shooting code.

	* server/server.cpp: Made CommClient more robust in the event
	  if immediate disconnection by initialising pointers to NULL;

Al Riddoch  <alriddoch@zepler.org>
2001-05-24 18:22:02 +00:00
Al Riddoch
089d3e48a3 The memory leak crackdown
* rulesets/BaseMind.cpp, rulesets/MemMap.h, rulesets/MemMap.cpp:
	  Add code to flush a characters memory as its mind is
	  deleted.

	* rulsets/Character.cpp: Delete movement class associated with
	  character when character is deleted.

	* rulesets/EntityFactory.h, rulesets/EntityFactory.cpp: Delete
	  all the entity factories when the server shuts down.

	* rulesets/PythonScript.cpp: Decrease reference of and thereby
	  delete the python script at delete time.

	* server/ServerRouting.cpp: Delete all the objects in idDict,
	  which should include all in game objects, and all explicitly
	  out of game objects, like accounts.

	* server/WorldRouter.cpp: Delete all pending operations, gameWorld
	  object. Ensure that an object is deleted from ServerRouting's
	  idDict when it is deleted from the world.

	* server/CommServer.h, server/server.cpp: Added CommServer destructor
	  which deletes all client objects and the server object.

	* server/server.cpp: Delete the database persistant object and the
	  entity factory at shutdown.

Al Riddoch  <alriddoch@zepler.org>
2001-05-23 19:09:15 +00:00
Al Riddoch
b6a7e1302a 2001-05-22 Al Riddoch <alriddoch@zepler.org>
* client/define_world.py: Added archers who can hunt deer.

	* rulesets/basic/mind/goals/common/misc_goal.py:
	  Added the hunting goal.

	* rulesets/basic/mind/goals/common/move.py: Modified hunt_for()
	  goal so it has variable attack proximity.

	* common/op_switch.h, common/operations.h, common/Generic.h,
	  rulesets/Character.cpp, rulesets/Entity.h, rulesets/Entity.cpp,
	  rulesets/Python_API.cpp: Added handling of operation types not
	  directly supported by C++ classes in the scripting engine. In
	  order for these to be used they must be created in a script, and
	  received in a script.

	* rulesets/Character.cpp: Avoid using RootOperation pointers unless
	  that is really what we mean.

	* rulesets/Character.cpp: Added code to delete operations from
	  internal mind when external mind is active.

	* rulesets/Entity.cpp: Handled leaking of null script objects,
	  and python script objects.

	* rulesets/Connection.cpp: Delete characters external mind when
	  connection goes down.

Al Riddoch  <alriddoch@zepler.org>
2001-05-22 17:59:43 +00:00
Al Riddoch
bd1c48a0b1 * client/define_world.py: Started coding new NPC's for Acorn 0.4
* rulesets/basic/mind/goals/common/misc_goal.py: Fixed bug in
	  announcing trade left over from old mode code.

Al Riddoch  <alriddoch@zepler.org>
2001-05-21 23:32:59 +00:00
Al Riddoch
d339cbe5e4 * rulesets/BaseMind.h/cpp: Added isAwake flag to indicate whether the
mind is active or not. Defaults to true.

	* rulesets/Py_Object.cpp: Reverted to storing complex attributes
	  in a python dict.

	* rulesets/Python_API.cpp: Get complex attributes from operation
	  arguments.

	* rulesets/Thing.cpp: Added in broadcast of sight(create) operation
	  to setup when object is created. See Thing::Opertion(Create) for
	  details.

	* rulesets/basic/mind/goals/common/misc_goal.py: Cleaned up comments.

Al Riddoch  <alriddoch@zepler.org>
2001-05-20 19:02:41 +00:00
Al Riddoch
0152420e02 * Added ruleset entries for characters to match all the recently
added animations.

	* server/Player.cpp: Added checks which allow player to be any of
	  the currently available characters.

Al Riddoch  <alriddoch@zepler.org>
2001-05-18 18:37:01 +00:00
Al Riddoch
e091bfd8f8 * server/Admin.cpp: Modified database loading code so it picks up
the object parent correctly instead of looking for a type attribute.

	* server/server.cpp: Made metaserver address a config file option.

	* common/database.h: Put in compiler error if code is built without
	  database support.

	* common/BaseEntity.cpp: Switched over to using stamp instead of seq
	  as the attribute used to check whether entity needs to be
	  updated.

	* Used action operation throughout python code to denote performing
	  an action, as differentiated from setting mode.

	* rulesets/skills: Added the beginnings of a skill system.

	* example/client: Fixed Atlas-C++ 0.5 example client so it
	  compiles again.

	* README: Wrote a README file

Al Riddoch  <alriddoch@zepler.org>
2001-05-06 23:51:37 +00:00
Al Riddoch
a481668f13 * rulesets/Py_Object.cpp: Added support for complex attributes
for Entities used as argument for operations.

Al Riddoch  <alriddoch@zepler.org>
2001-05-03 22:04:43 +00:00
Al Riddoch
617252bb7d * common/database.*, common/persistance.*: Added new database tables
for mind data, and server data.

	* common/persistance.*, server/Admin.cpp: Implemented saving and
	  loading of mind state to mind table. Initially only saving the
	  contents of the memory map is supported.

	* rulesets/MemMap.h: Added asObject() method to convert contents
	  into Atlas representation.

	* rulesets/BaseMind.*: Added handling of load and save operations
	  which in conjunction with the Python mind component build an
	  Atlas representation of the mind state.

Al Riddoch  <alriddoch@zepler.org>
2001-04-20 16:23:34 +00:00
Al Riddoch
d839c45152 * rulesets/Py_Location.cpp: Added bbox and bmedian attributes of
location object to python wrappers.

	* rulesets/Character.cpp: Added initialisation of bounding box
	  median for characters.

	* modules/DateTime.*: Added configurability to date so that
	  each period of time has definable number of divisions. Default
	  is as per real world calendar restricted to 30 day months.

	* Added Fire operation handling to Thing class, so that any entity
	  with a burn_speed attribute will burn.

	* Added Food C++ base class, which implements cooking.

	* Altered the semantics of the Eat/Fire/Nourish operations so
	  multiple arguments are no longer required. from is used to
	  determine the other entity involved.

	* Added the beginnings of an astronomy system, but not yet used
	  anywhere.

	* Added appearance handling to BaseMind and Memory.

	* Added sequence no to all entities, which is incremented each time
	  a move or set operation is received. sequence no "seq" is included
	  in args of Appearance operations.

	* Moved functionality from Animal python base class into Character
	  C++ base class. This much improves the performance of modelling
	  animals, and means that player characters, and NPCs get hungry and
	  need to eat. Reduced the speed at which animals consume energy
	  so they don't starve quite as quickly.

	* Added collision prediction functions that handle both entities
	  having velocity.

	* Added combine functionality to Stackable. Divide comes next.
	  Once functional, this will become the base class for any items
	  which will commonly be used as stacks.

Al
2001-03-07 11:49:43 +00:00
Al Riddoch
35d78b27a2 * Implemented beginnings of ranges code:
* modules/Location.h: Added inRange() method which can be used
	  to check whether location, including bounding box, is within
	  given range of a given location. Changed parent member
	  variable to ref to fit with Atlas spec. Changed all code
	  related to using the term ref instead of parent so
	  that there is no confusion between ref for coordinates
          and parent in the Atlas hierarchy.

        * rulesets/Thing.cpp: Added code to move operation to check
          what entities come into and out of range when entity moves.
          Appearance and Disappearance operations are sent to the
          moving entity with a list of the relevant entities as their
          argument.

        * server/WorldRouter.h/cpp: Added overloaded Look operation
          handler which applies range constraints to the contains
          attribute before returning.

        * common/BaseEntity.h, rulesets/Thing.h, rulesets/Character.h:
          Added handling of Appearance and Disappearance operations.

        * server/WorldRouter.cpp: Added primitive check to broadcast
          operations to avoid delivering broadcast operation to
          entities out of range.

        * Removed world.get_object() use from server python code, as
          its use is not required.

        * server/WorldRouter.h: Implemented fetching of floating point time
          from the OS so movement is much smoother.

Al
2001-02-19 06:13:31 +00:00
Al Riddoch
7baa6b36c6 * Fixed pig mind so it is now better able to detect "Sowee"
* Removed map from Thing, and put it into basmind. Re-wrote
	  script_Operation for thing so it now looks things up in world
	  dictionary rather than in local map. This removes a memory leak.

This is Acorn 0.3 server release candidate 1. There is one known issue
which must be solved before Acorn 0.3, but everything else should work.

Al
2001-01-02 17:50:10 +00:00
Al Riddoch
f9e8d1c832 * Fixed inheritance bug in BaseMind::operation()
* Tweaked the way Look operations are handled when sent from mind, so
	  an argument is not required if to is set.

	* Made some performance enhancements.

	* Implemented nourish operation.

	* Modifed move_me() goal so it sets face direction.

	* Fixed memory leak in MemMap.

	* Implemented fully deleting of entities.

	* Cleaned up and tweaked python scripts so eating acorns now works.

	* Implemented hooks in MemMap for python scripts.


This is the work I got done over the Christmas break. Acorn now works
with a couple of minor glitches.

Al
2000-12-30 23:16:57 +00:00
Al Riddoch
3925000cd3 * Cleaned up auto-* stuff, and created spec file for RPMs.
Al
2000-12-17 22:21:43 +00:00
Al Riddoch
defe46b91e * Set up rulesets processing so that everything is handled dynamically
from config files. Global ruleset should indicate top level ruleset
	  which can depend on a list of other rulesets.

	* Sorted out installation directories. Cyphesis will now need to be
	  installed before it can be run.

	* Cleaned up a load more python scripts for more Acorn stuff.

	* Added getting x y and z from Vector3D.

	* Made acorn the default ruleset.

Al
2000-12-13 12:10:48 +00:00
Al Riddoch
4343c8d383 * Removed lots of extraneous debugging output, and turned the rest
off using debug flags.

	* Added halt_time, which is number of seconds server should run before
	  it exits.

	* Cleaned a bunch if the remaining memory leaks.

	* Cleaned up the way time is handled.

	* More tweaks to Python code and API to get Acorn working.

	* Inlined some methods into the class definitions, for performance.

	* Updated movement code to sort out setting mode properlly, and
	  deal with stuttering NPC movement.

This is quite a big commit, and most of Acorn now works. Performance seems
to be good too.
2000-12-11 13:06:12 +00:00
Al Riddoch
b1a1db69d3 * Major attack on the more fiddly memory leaks. The only noticable
leak now is copied Location objects in the python interface code.

	* Added hook into the time code so the server can be set to exit
	  after a given number of seconds. This is required for LeakTracer
	  to generate its report.

Al
2000-12-08 11:40:32 +00:00
Al Riddoch
faf8b6dbca * Fixed so that we are no longer sending broadcast look ops, which
clag the server up and are not correct behavoir.

	* Minor fixes/python tweaks.

	* Slight change to ordering of ops in the queue, so more recently
	  created ops with the same time stamp come of the queue after
	  older ops.

	* Implemented contains attribute so newly created objects are added
	  to their parents contains list, and when objects are move, they are
	  transfered from old parents to new parents contains list.


Lots more stuff is now happening in the world, though I can't see what it is
because things don't show up in uclient now that broadcast Look doesn't
work. It is also clear that I need to seriously attack the memory leak situation
now.

Al
2000-12-07 20:38:20 +00:00
Al Riddoch
d1f2e912a0 * Added handling for removing connections.
* Removed some unused code.

	* Tweaked some python scripts so they import correctly.

	* Added in_game flag to BaseEntity so it is possible to tell
	  if an object is in game.

	* Increased the number of operations handled by Message()

	* Added handling for initialisation of location.parent using me
	  in mind code.

	* Added is_object_delete() functionality to python interface to world
	  object.

	* Added handling for converting Tuple into Message::Object, and then
	  ensured that non-basic python types don't get stored as attributes
	  of a Message::Object.

Many more improvements to goal behavoir. Guard now patrols correctly,
and butcher tries to by a cleaver, because he fails to notice he already
has one.

Al
2000-12-07 12:14:35 +00:00
Al Riddoch
1826587f9d * Fixes to worlds object list so it now contains world.
* More python code tweaks to work with modifications to interface.

	* Modified code which gets Thing attributes from Message::Object
	  so it can use any object dictionary to look up parent object.

	* Fixed handling of Thing's static type attribute.

	* Modified creation of operations from python to eliminate
	  some strange segfaults.

	* Re-wrote and fixed Entity creation from python.

	* Implemented dictlist.remove_value for removing things from inventory.

	* Implemented Vector3D arithmetic and methods from python.

	* Implemented as_entity() and get_xyz() methods for Thing from
	  python.

	* Commented out deletion of operations from python OperationObject
	  dealloc() function as it was causing segfaults. There is a problem
	  somewhere with ownership not being cleared, but I can't find it.

	* Implemented conversion of Python Operation and Oplist objects
	  to Message::Object.

	* Fixed MemMap so that attributes of Things are accuratly updated.

	* Fixed it so that look ops from mind are broadcast rather than sent
	  to world. This may have to be reverted.

	* Tweaked autoconf to make it cleaner and work better. Still needs
	  alot of work.

A simple test of some goals now works! The lych goals worked to some
extent and no-longer gives python errors. Only a few more things are
required before Acorn can run, at which point I will release 0.1
for testing.

Al
2000-12-06 18:21:35 +00:00
Al Riddoch
e6d6f7ef0d * Added new common namespace to prevent collision with math function
log.

	* Added in lots of deletes to sort memory leaks.

	* More python tweaks.

	* Implemented status attributes of thing.

	* Re-wrote some code which needlessly creates objects in the
	  free store.

Very nearly all works now.

TODO:
Tidy some of the rest of the leak handling, including all of the stuff
to deal with connections going down.

Sort out how mind gets its attributes set and updated.

Sort out iritating python error in init of Vector3D

delete oplists in OplistObjects. The pointers are never passed back.

Al
2000-12-05 14:26:04 +00:00
Al Riddoch
21b18875f6 * Started working on sorting out memory leaks.
* Implemented python function to deal with not being able to check
	  type of python objects implemented in C.

	* Added method to thing for extracting location data from a
	  Message::Object

	* More work on python references to improve leakage.

	* Added flag so that python Operation object can own
	  the operation they point to, and thus delete it in dealloc().

	* Implemented find_by_location() and find_by_type() as required in
	  MemMap, and corresponding python interface.

	* Put in temporary work around to deal with the fact that a mind
	  does not know its name. Currently the mind is not able to
	  discover any of its bodies attributes, and I am not sure how
	  to solve this.

	* Fixed Location and Vector3D so they use operator bool() to detect
	  whether they are set.

	* Fixed bugs in getting parent from Location in python which caused
	  segfaults.

	* Imported all the basic ruleset entity python scripts.


Goals now work to some extent, though nothing moves around still. The main
priority is to work out how minds inherit the attributes of their
bodies, and keep them up to date. aloril?

Al
2000-12-04 20:08:21 +00:00
Al Riddoch
4b0b328c92 * Debugged set_kw() and confirmed that it does work.
* Added python API support for self.world.

Al
2000-12-03 16:56:10 +00:00
Al Riddoch
fda1182f78 * Added dictfunc functionality to Python interface.
* Added creation of Entities for use in Operation arguments.

	* Added initialisation of Vector3D through constructor
	  arguments in python.

	* Added append() method to python interface for Oplist.

	* Added support for coercion of operation into addable form.

Al
2000-12-01 00:13:39 +00:00
Al Riddoch
907455c4c8 * Added more required functionality to base python Thing class
so that operation manipulations can now work.

	* Implemented getting of object name to python/C API, and added
	  methods for differentiating between op and object.

	* Implemented on-the-fly de-coding of operations, from operation
	  arguuments in python/C API. This will be obsolete once Atlas-C++
	  does full decode later.

	* Implemented get and setattr for Message Object from
	  python. Attributes are stored both in Object, and in supplementary
	  python dictionary for non Atlas compatable attributes.

	* Implemented copy() method for Python/C Location class.

Al
2000-11-30 12:51:59 +00:00
Al Riddoch
ece4c15d3d * Added in debug function for python code.
* Fixed coersion of non-oplist types for addition.

	* Implemented getting attributes from Message::Object maps
	  from python.

It now crashes in the interlinguish code. Closer and closer.

Al
2000-11-29 18:02:01 +00:00
Al Riddoch
222786df66 * Added support for decoding Sound operations in BaseMind.
* Added Talk operation throughout operation handling code.

	* Added basic WorldTime class together with python wrapper.
	  Can fill in functionality as required.

	* Put debugging back in cos I still need it.

Python mind code now gets talk ops. Some tweaking still to go.
2000-11-29 15:19:36 +00:00
Al Riddoch
e635657e3f * Added in Python interface code to deal with manipulation of operation
time.

	* Made basic_tick a float, because it should be.

	* Imported all the rulesets python code from python cyphesis.

Al
2000-11-27 18:28:20 +00:00