* server/WorldRouter.cpp: Switch to using stringstream to
generate ids.
* rulesets/Thing.cpp: Re-write SetupOperation so Sight
operation is not lost and leaked.
* rulesets/Python_API.h, rulesets/Python_API.cpp,
rulesets/Py_WorldTime.cpp, rulesets/Py_World.cpp,
rulesets/Py_Thing.cpp, rulesets/Py_Operation.cpp,
rulesets/Py_Object.cpp: Sort out correct handling of
python references, and ensure C++ objects are
deleted as required.
Al Riddoch <alriddoch@zepler.org>
server/Account.cpp: Modified server to use Entity * instead
of Thing *.
* Removed unnecessary includes from many files.
* common/config.h, configure.in, common/persistance.cpp:
More config changes to try and get it working on Debian.
Al Riddoch <alriddoch@zepler.org>
be loaded into the database.
* tools/cycmd.cpp: Cleaned up usage and help functions.
* tools/cyisoload.cpp: Cleaned up usage(), and made sure build
completes okay if libraries are missing, and missing
functionality is reported to the user.
* server/server.cpp: Added config options that specifies that
the contents of the db should loaded on server startup. Cleaned
up some debug code.
* server/WorldTime.cpp, server/WorldRouter.cpp,
server/Connection.cpp, rulesets/Structure.h,
rulesets/Python_API.cpp, rulesets/Py_WorldTime.cpp,
rulesets/Movement.cpp, rulesets/Entity.cpp,
physics/Vector3D.h, common/persistance.cpp,
common/database.h, common/database.cpp: Removed output either
to debug mode, or removed altogether.
* common/BaseEntity.h, common/BaseEntity.cpp: Removed redundant header
includes.
* server/ServerRouting.cpp, common/persistance.h,
common/persistance.cpp: Modified admin account function names it
fit convention.
* module/Location.h: Fixed collision detection so that entities
with velocity set to 0 still get checked.
* rulesets/Entity.cpp, rulesets/Thing.cpp, rulesets/Character.cpp,
rulesets/BaseMind.cpp, rulesets/Creator.cpp,
rulesets/ExternalMind.cpp, rulesets/Food.cpp, rulesets/MemMap.cpp,
rulesets/Movement.cpp, rulesets/Pedestrian.cpp, rulesets/Plant.cpp,
rulesets/Py_Location.cpp, rulesets/Py_*.cpp, rulesets/World.cpp:
Removed unnecessary #includes.
Al Riddoch <alriddoch@zepler.org>
a collision occurs.
* server/WorldRouter.cpp, server/WorldRouter.h: Fixed uptime
measurement which was grossly out because it subtracted the
server initTime twice, and did not take account of the
in game start time offset.
Al Riddoch <alriddoch@zepler.org>
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>
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>
* 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>
make server operation customisable. Added comments.
* server/server.cpp, server/CommServer.h: Changed methods which
return int to returning bool if they are success/faul results.
* server/WorldRouter.cpp: Removed some unused debugging code.
Optimised heavily used code. Changed error message on
sending to a non-existant entity so that it is no longer
reported as a critical error.
* server/ServerRouting.h, server/Connection.h,
server/Connection_methods.h: inlined simple methods.
* server/Connection.cpp: Optimised frequently used code.
* server/CommClient.h: Simplified read method so it no
longer checks status redundantly.
* common/BaseEntity.h, rulesets/Thing.h, rulesets/Entity.h: Added
comments explaing purpose of classes.
* rulesets/Thing.cpp: Added detailed comments, and removed unnecessary
initialisation of some attributes.
* rulesets/PythonMindScript.cpp: Removed redundant NULL check.
* rulesets/MemMap.h: Added inlines for inlined methods.
* rulesets/Entity.h, common/BaseEntity.h: Moved seq from BaseEntity
to Entity as it does not apply to Out Of Game objects.
* rulesets/Entity.cpp: Added in stamp/seq attribute. Nade name
attribute optional.
* rulesets/Character.cpp: Simplified some op handling code
to make it more readable and hopefully faster. Added comments
explaining movement, removed unused commented out code, and
removed some unnecessary debugging code.
* common/operations.h: Explanatory comments.
* common/*.h: Re-wrote extended operations to fit in
with Atlas-C++ 0.4.2 conventions.
* common/log.*: Commented out unused logging code.
Al Riddoch <alriddoch@zepler.org>
This code will no longer build against the last release of Atlas-C++ 0.4
Please use cvs Atlas-C++ stable branch.
* rulesets/Thing.cpp: Tweaked ranges code in movement to cut
down CPU time used.
* common/BaseEntity.cpp: Re-ordered opEnumerate so that most
frequently used ops are detected soonest.
* modules/WorldTime.h/.cpp: Moved WorldTime to modules directory.
Al Riddoch <alriddoch@zepler.org>
* Substantial re-work of object model. Moved many attributes out
of BaseEntity class. Changed WoldRouter so it now handles
objects in terms of Entity, rather than BaseEntity.
* Code cleanups, including removing reduntant includes, and
getting rid of C style comments.
* Fixed the way attributes are handled in Set operations and
when merging from an Atlas::Message::Object. This fixed
problem with setting gender of characters.
* rulesets/Pedestrian.*, rulesets/Movement.*: Re-named
Movement variables to make them clearer. Added in
separate handling for collisions from moving to
target position. Modified collision handling so
objects can slide next to each other.
* rulesets/Thing.cpp, rulesets/Character.cpp: Cleaned up and
rationalised movement code. Much shorter, faster and
more compact than before.
* Made better use of iterators throughout, eliminating unnecessary
lookups, and copying of data.
* Moved all virtual functions out of header files, making
less work for the linker.
* Made more use of const references to avoid the need to copy
data before being able to inspect it.
Al Riddoch <alriddoch@zepler.org>
instead of pointer.
* physics/Vector3D.h: Re-ordered functions to allow correct inlining.
Changed member names to correct convention.
* rulesets/MemMap.cpp,rulesets/MemMap_methods.h: Re-ordered function
to allow inlining, and moved non-inlinable functions into .cpp file.
* Changed new operation initialisation to be done at construction
time instead of imediatly after construction for performance
reasons.
* server/WorldTime.*: Modified member names for convention, and
moved non-inlineable function to .cpp file.
Al Riddoch <alriddoch@zepler.org>
begin with a lower case letter and do not contain _.
* Fixed retrieval of Account from database so that the Account
is now correctly referenced in the server object.
* common/types.h: Changed type name to make them clearer.
* rulesets/Character.h: Moved MovementInfo into its own class
file, and made it a base class, with a Pedestrian super class.
This allows different types of movement handling classes
to be used to handle things that move differently.
Al Riddoch <alriddoch@zepler.org>
script types to be cleanly dropped in.
* Re-work on server and communication related classes to use
references where they are apropriate. Code is now much more
robust.
* Huge cleanup of header files removing redundant includes.
* server/WorldRouter.h: Removed is_object_deleted because it
is broken and not used.
* server/Connection.h: Removed unused disconnect() methods.
* rulesets/Entity.*: Added new in game base class from which
all mind and object classes are derived. This removes
clutter of Thing class from mind classes.
* aiclient/*: Progress with creating AI client for mind handling.
* common/globals.*: Moved some globals out of server specific files.
* rulesets/Makefile.am: Separated rulesets code into 3 almost stand
alone packages; entities, mind and python interface code.
Acorn may well not work now, but I would apreciate it if people could
test the code on their setups. Lots of code has changed, and almost
everything is now cleaner.
Al Riddoch <alriddoch@zepler.org>
the server database.
* configure.in: Added check for coal (0.2) which is used in map
loader tool.
* common/database.cc: Modified database initialisation functions
so that whether or not the database should be created can be
specified. Added separate function for decoding a database
object into an Atlas::Message::Object. Fix to the way objects
are added to the database which solves some corruption problems.
* common/database.*: Added database iterator class that can be
used to iterate over the database.
* server/Admin.cpp: Added handler for admin load command, which
loads world state from database.
* server/WorldRouter.*: Tweak to allow objects added to world
to have pre-defined id.
Al Riddoch (alriddoch@zepler.org)
entity is not yet in it.
* modules/Location.h, modules/Location.cpp: Added get_xyz() to
find absolute coordinates.
* modules/Location.h: Added true location based range checking.
* servers/WorldRouter.cpp: Implemented new location based range
checking so that operations that take place inside buildings are
range checked properly.
* servers/WorldRouter.cpp: Re-wrote id generation code to be a bit
more robust.
Al Riddoch (alriddoch@zepler.org)
sent to the admin account on the server.
* server/WorldRouter.cpp: Removed mechanism for shutting down server
after a fixed run period.
* server/Admin.*: Added reception of Set operation by admin account
` which contain commands from an admin client. Implemented shutdown
command, which sets a flag indicating server shutdown should start.
* server/server.cpp: Added output indicating that shutdown is taking
place, to make it clear that it is not a crash.
Al Riddoch (alriddoch@zepler.org)
* */*: Fixed mistake in copyright statement.
* tools/cypasswd.cpp: Fixed usage message.
* tools/cycmd.cpp: Added tools for sending administrative commands
to server.
* server/server.cpp: Send terminate instruction to metaserver on
server shutdown.
Al Riddoch (alriddoch@zepler.org)
which prevents users from being able to create accounts.
* server/ServerRouting.cpp: Added restricted flag to the
server Object passed to client as result of a Get operation, so
the client can report it to the user.
* tools/cypasswd.cpp: Added tool to administrate password database
table.
* server/server.*: Added exit flag to ensure that of exit is requested
database is shutdown properlly.
* server/WorldRouter.cpp: Maintenance shutdown is now done cleanly.
* server/Connection.cpp: Added code to handle accounts using the
persistance system. Accounts would now be handled by the
database if the persistance code was complete.
* common/persistance.*: More work on database code.
Al
of oplist to take advantage of vector's best performance.
* Modified OP_SWITCH macros to improve speed, and made it inlinable.
* Cleaned up python interface code to improve compile and link time.
* Moved custom operation definitions in one header file per class
to improve modularity and compile time.
* Modified boundingbox handling so it now uses size and median.
* Added collision check and inbox member function to Vector3D class.
* Added collision prediction and checking to Location and Vector3D
classes.
* Added collision prediction into MovementInfo class.
* Modified Thing::operator[] so that static attributes can be handled
and added Thing::set() which must be used to modify attributes.
* Added collision resolution so characters can no longer walk through
each other.
* Moved weight attribute to being static attribute of Thing, so it
can be much more easily handled in movement code.
Al
* 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
* Throughout entire code base:
Removed all obsolete code and commented out code relating to porting
from python. Removed interim data types bad_type and None. Added
const throughout where apropriate. Change various flags to bool
type. Removed unused members.
* Added TODO list.
Al
to object if they have not been set.
* Added code to example client so it now reads characters list
when it logs in.
* Removed support for obsolete old-atlas locations.
* Changed behavoir on unexpected error from client socket, so
it no longer causes an abort.
* 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
be accessed, and certain move operations caused an abort.
* Removed attributes from python object which don't have attributes.
* Added Py*_Check() macros, and used them for easier code reading.
* Added snow attribute to weather.
* Commented out code which makes server exit(0) after a certain time.
Al
and shifting code around to optimise it.
* Heavy use of inlining to improve code performance.
* Added global exception handler to catch exceptions while processing
operations.
Al
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.
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
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
* 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
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
* 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
non-perceptive entities.
* Sorted out removing spaces from id strings.
* Implemented Entity arguments to Operaiton creation in python.
My TODO list is now empty, but it still does not quite work.
Al
* Used config file to list enitity types and their python class files.
* Cleaned up reference counting in Python API related C++ code.
References should all now be handled correctly.
* Added support for adding None to Operation and Oplist.
Reference count changes have solved some segfaults I was getting. New
config files allows easy specification of rulesets, and has allowed
me to test the complete range of python entity classes used in Acorn.
Import hook code does not appear to work for classes imported directly using
python API calls.
Al
* 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.
* Implemented getting and setting of to and from in operations
using map to lookup what the mind knows about the entities
in question. This involved adding an extra field to the
RootOperationObject structure to store to and from entities.
* Sorted out base_init() python member so __init__() of all
classes in inheritance tree are called.
* Started work on set_kw() replacement.
* Added python module finding mechanism which is required to deal
with rulesets correctly. I am not convinced this works.
Al
* Fixed setting weight as float on default Thing.
* Added more support for mode and face in movement code.
* Cleaned up the debugging output code.
* Fixed looking, and added support for contains attribute
Al
class hierarchy.
* Added setting of refno to operations, so client can tell
what they apply to.
* Sorted out initialisation of python path.
* Added loading of admin account, allowing admin client to communicate.
* Made sure all attributes of created objects are set, so that
character gender works.
* Added face attribute to Thing, to indicate what direction it faces!
* Modified error operation so it complies with traditional format
Al
* Cleaned up detection of disconnected client
* Re-wrote thing factory so it is now a static object instance rather
that a static method, and added the beginnings of support for
python "Thing" classes.
atlas is correctly.
Implemented most of the mind<->body interaction required for Character(),
and most of the operation handling for Thing(). Entities should now be
able to do stuff in the world.
Left to do, I need to work out how to implement the set operation,
and then work out a mechanism for returning multiple operation from
a function.
Al
botched attempt to add support for optimised non-string object ids.
Modified the idle routine so it now delivers all the waiting operations
rather than only one per cycle.
Al
objects in the world, mind and external minds. You can now log in, create
a character, and witness other operations in the world through receiving
sight operations.
Al
Now adding character body and mind code so mind and body abstraction can
work and communication between client and server character entity can
work. The code is not currently in any particular state, but I have not
commited for a while, so I am doing it now for security.
Al