I see two choices, Python 'style' (what Cyphesis currently uses and is used in examples here) or XML. XML would be more standard but Python 'style' is more debugger/command line friendly.
In any case they are 'just' strings, here are some Python 'style' examples:
"event('make',what=ething('_Nisuf3',name='Nisuf',type='farmer'),loc=(20, 50, 300))" "event('destroy', what='_Nisuf3')" "event('move', what='_Nisuf3', loc=(-50, 50, 290))" "event('move', what='_axe10', loc='_Nisuf3')" "event('fire', what='_fire', loc='_house2', target='_house2')"(strings starting with underscore are ids)
event: ------ EVENT ATTRIBUTES not all these are needed (command and what are always needed) command: type of event: examples: "move", "make", "destroy", "say", "fire" type: string source: sender of event (world sets this if not set) type: id string target: receiver of event (you should set this for any thing that changes things, for example delete and change events) type: id string (in future also others, like: circle(loc,radius) desc: description of event type: string what: to what thing event relates or operates type: id string type string or ething or esay or string (attribute name) or (inside server actual thing) what_desc: description of above type: string loc: location of event type: id string or tuple (x,y,z) will likely change to: (id string, (x,y,z)) format loc_desc: description of above type: string amount: how big fire, how strong visual signal, how much to change object type: type of attribute that is changed time: time of event (world sets this if not set) type: mktime compatible tuple: (612, 1, 6, 8, 0, 0.0, 0, 6, -1) DIFFERENT COMMANDS: command "make": what="thing to make" as string or ething optional desc=for example "birth" optional loc=place for thing to appear (otherwise it appears in what issued event) issuers: mind: event("make",what="axe", what_desc="ordinary axe") body: event("make", desc="birth", what=ething(...)) house: event("make",what=fire) command "destroy": what=id string of thing to destroy command "change": what=what to change (is string or attribute name) amount=amount of change Here 'what' could be attribute name instead of id of thing. If target doesn't have that attribute it's initialized to given amount. Otherwise it's added to given amount. If 'what' is an id, then status attribute is changed. Target then would have id of target or in future some area or maybe some Python code or if not set then everything is changed. command "look": what=like change target=like change Will result in sight event, where 'what' is asked thing: if asked thing was attribute, then 'what' is its value if asked thing was id (or not defined), then return all attributes as ething source=target in look event command "move": what=what to move loc=location to move into command "cut": CHEAT! (will likely change) what=what thing is used in cutting command "sight": what=event (for example move, destroy or make) or ething command "say": what=esay command "sound" (not used yet): what=event command "fire": what=fire loc=place of fire (for observers) target=target of fire amount=how big it is command "extinguish": what=fire to extinguish target=same as what command "goal": what=resulting event list from decision, example: [event('move',source='_farmer',target='_farmer',what='_farmer', loc=(12.5431347914, 95.4016955914, 265.44628788))] what_desc=decision derivation string, example: goal('find place for home and build it'). goal('find place for home and make it'). goal('find place for home not too near or far from others'). find_place() command "illegal": what=event what_desc=description about what's wrong: source_xyz, target_xyz command "debug": what=on or off command "NYI" (Not Yet Implemented): desc=description about what should have been implemented command "imaginary": desc=description about what events happened ;-) command "empty" (NOP, not really used) metaevents for engine.py: command "step" (run one tick in world) ething: ------- first is id or when thing doesn't yet exist, then use name as id type: what kind of thing is going to be created (example: "farmer") other attributes are attributes for thing (like: sex="female") Examples: ething("Nisuf",type="farmer",sex="male") ething("_Nisuf3",name="Nisuf",type="thing.vbody.body.farmer",sex="male") esay: ----- Experimental feature verb: string subject: string or id string object: string or id string type: string string: string (this is for PC to PC communication) examples: esay('own',subject='_Nisuf',object='_house') esay('know',subject='axe',object='smithy') esay('know',subject='smithy',object=(20, 10, 305)) esay('learn',subject='chop trees',object= "cut_something(self,'chop trees', 'winter', 'forest','axe')")
'>': from map editor
'<': from server
'#': comments: seek this character for interesting parts
(recommended, this is quite long)
This is just 'create itself' or login thing. >> "[event('make',what=ething('Observer',desc='external mind', name='Observer',type='god_body',xyz=(-100, -100, -100)))]" #(here it invisibly returns ibody CORBA object, #not really part of official protocol, not shown here) > [event('make',what=ething('house',desc='ordinary house (_Observer_1)', name='house',place='home',xyz=(20, 50, 300),type='house'))] #create house < [event('sight',what=event('make',what=ething('_illegal',desc='some thing', type='thing',xyz=(0, 0, 0),name='illegal',status=1.0), time=(612, 1, 1, 0, 30, 0.0, 2, 1, -1))), event('sight',what=event('make',what=ething('_Observer', desc='external mind',type='thing.vbody.god_body', xyz=(-100, -100, -100),name='Observer',place='home',status=1.0), time=(612, 1, 1, 0, 30, 0.0, 2, 1, -1)))] #it now sees officially its creation ;-) < [event('sight',what=event('make',source='_Observer', what=ething('_house',desc='ordinary house (_Observer_1)', type='thing.house',xyz=(20, 50, 300),name='house',place='home', status=1.0),time=(612, 1, 1, 1, 0, 0.0, 2, 1, -1))), event('sight',what='_house')] #here sight of house creation is received #This another (short) sight event will be replaced with something like: #event('sight',what=event('appear',what='_house',loc=(10,20,30))) #and #event('sight',what=event('disappear',what='_house',loc=(100,-20,30))) #or similar. > [event('make',what=ething('axe', desc='normal axe good for cutting trees (_Observer_2)', name='axe', place='forest',xyz=(150, -50, 250),status=1.0))] < [event('sight',what='_house')] < [event('sight',what=event('make',source='_Observer', what=ething('_axe', desc='normal axe good for cutting trees (_Observer_2)', type='thing',xyz=(150, -50, 250),name='axe',place='forest', status=1.0), time=(612, 1, 1, 2, 0, 0.0, 2, 1, -1))), event('sight',what='_house')] > [event('make',what=ething('Nisuf',desc='ordinary farmer (_Observer_3)', name='Nisuf',type='farmer',age=864000.0,xyz=(20, 50, 300),sex='male'))] #make NPC < [event('sight',what='_house')] < [event('sight',what=event('make',source='_Observer', what=ething('_Nisuf',desc='ordinary farmer (_Observer_3)', type='thing.vbody.body.farmer',xyz=(20, 50, 300), name='Nisuf',place='home',age=864000.0,sex='male',status=1.0), time=(612, 1, 1, 3, 0, 0.0, 2, 1, -1))), event('sight',what='_house')] #sight of NPC creation > [event('make',what=ething('Miyora',sex='female',name='Miyora', type='farmer',copy='_Nisuf',desc='some thing (_Observer_4)'))] < [event('sight',what='_house')] < [event('sight',what=event('make',source='_Observer', what=ething('_Miyora',desc='some thing (_Observer_4)', type='thing.vbody.body.farmer',xyz=(20, 50, 300), name='Miyora',place='home',age=867600.0,sex='female',status=1.0), time=(612, 1, 1, 4, 0, 0.0, 2, 1, -1))), event('sight',what='_house')] > [event('say',target='_Nisuf',what=esay('own',subject='_Nisuf', object='_house'))] #tell it that it owns house > [event('say',target='_Miyora',what=esay('own',subject='_Miyora', object='_house'))] > [event('say',target='_Nisuf',what=esay('own',subject='_Nisuf', object='_axe'))] > [event('say',target='_Nisuf',what=esay('know',subject='axe', object='smithy'))] #tell it that axes can be acquired from smithy > [event('say',target='_Nisuf',what=esay('know',subject='smithy', object=(20, 10, 305)))] #tell it where smithy resides > [event('say',target='_Nisuf',what=esay('know',subject='forest', object=(150, -50, 250)))] > [event('say',target='_Nisuf',what=esay('know',subject='tavern', object=(50, 30, 295)))] > [event('say',target='_Miyora',what=esay('know',subject='axe', object='smithy'))] > [event('say',target='_Miyora',what=esay('know',subject='smithy', object=(20, 10, 305)))] > [event('say',target='_Miyora',what=esay('know',subject='forest', object=(150, -50, 250)))] > [event('say',target='_Miyora',what=esay('know',subject='tavern', object=(50, 30, 295)))] > [event('say',target='_Nisuf',what=esay('know',subject='home', object=(20, 50, 300)))] > [event('say',target='_Miyora',what=esay('know',subject='home', object=(20, 50, 300)))] > [event('say',target='_Nisuf',what=esay('know',subject='field', object=(-100, 50, 300)))] > [event('say',target='_Miyora',what=esay('know',subject='field', object=(-100, 50, 300)))] > [event('say',target='_Nisuf',what=esay('learn',subject='breakfast', object="imaginary('have a breakfast', 'morning', 'home')"))] #give imaginary goal (this is really NPC scripting specific) > [event('say',target='_Nisuf',what=esay('learn',subject='dinner', object="imaginary('have a dinner', 'midday', 'home')"))] > [event('say',target='_Nisuf',what=esay('learn',subject='supper', object="imaginary('have a supper', 'evening', 'home')"))] > [event('say',target='_Nisuf',what=esay('learn',subject='sleep', object="imaginary('sleep good night', 'night', 'home')"))] > [event('say',target='_Nisuf',what=esay('learn',subject='build home', object='build_home'))] #find suitable place for home and build home goal (see mgoal.py) > [event('say',target='_Miyora',what=esay('learn',subject='breakfast', object="imaginary('have a breakfast', 'morning', 'home')"))] > [event('say',target='_Miyora',what=esay('learn',subject='dinner', object="imaginary('have a dinner', 'midday', 'home')"))] > [event('say',target='_Miyora',what=esay('learn',subject='supper', object="imaginary('have a supper', 'evening', 'home')"))] > [event('say',target='_Miyora',what=esay('learn',subject='sleep', object="imaginary('sleep good night', 'night', 'home')"))] > [event('say',target='_Miyora',what=esay('learn',subject='build home', object='build_home'))] > [event('say',target='_Nisuf',what=esay('learn',subject='chop trees', object="cut_something(self,'chop trees', 'winter', 'forest','axe')"))] #chop trees in forest > [event('make',what=ething('house',desc='ordinary house (_Observer_5)', name='house',place='home',xyz=(70, 0, 300),type='house'))] < [event('sight',what='_house')] < [event('sight',what=event('make',source='_Observer', what=ething('_house1',desc='ordinary house (_Observer_5)', type='thing.house',xyz=(70, 0, 300),name='house',place='home', status=1.0),time=(612, 1, 1, 5, 0, 0.0, 2, 1, -1))), event('sight',what='_house'), event('sight',what='_house1')] > [event('make',what=ething('smithy',desc='ordinary smithy (_Observer_6)', name='smithy',place='smithy',xyz=(20, 10, 305), type='house',status=1.0))] < [event('imaginary',source='_Miyora',desc='sleep good night', time=(612, 1, 1, 5, 30, 0.0, 2, 1, -1)), event('goal',source='_Miyora', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 5, 30, 0.0, 2, 1, -1)), event('imaginary',source='_Nisuf',desc='sleep good night', time=(612, 1, 1, 5, 30, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 5, 30, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')] #lots of imaginary events and goal event: #goal event is NPCs thoughts (for debugging, not for PCs) < [event('sight',what=event('make',source='_Observer', what=ething('_smithy',desc='ordinary smithy (_Observer_6)', type='thing.house',xyz=(20, 10, 305),name='smithy', place='smithy',status=1.0), time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1))), event('imaginary',source='_Miyora',desc='sleep good night', time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1)), event('goal',source='_Miyora', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1)), event('imaginary',source='_Nisuf',desc='sleep good night', time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 6, 0, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')] > [event('make',what=ething('Bjorn',desc='only smith in village (_Observer_7)', type='smith',age=1728000.0,xyz=(70, 0, 300),place='home', name='Bjorn',sex='male'))] < [event('imaginary',source='_Miyora',desc='sleep good night', time=(612, 1, 1, 6, 30, 0.0, 2, 1, -1)), event('goal',source='_Miyora', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 6, 30, 0.0, 2, 1, -1)), event('imaginary',source='_Nisuf',desc='sleep good night', time=(612, 1, 1, 6, 30, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 6, 30, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')] < [event('imaginary',source='_Miyora',desc='sleep good night', time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1)), event('goal',source='_Miyora', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1)), event('sight',what=event('make',source='_Observer', what=ething('_Bjorn',desc='only smith in village (_Observer_7)', type='thing.vbody.body.smith',xyz=(70, 0, 300),name='Bjorn', place='home',age=1728000.0,sex='male',status=1.0), time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1))), event('imaginary',source='_Nisuf',desc='sleep good night', time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 7, 0, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')] > [event('say',target='_Bjorn',what=esay('own',subject='_Bjorn', object='_house1'))] > [event('say',target='_Bjorn',what=esay('own',subject='_Bjorn', object='_smithy'))] > [event('say',target='_Bjorn',what=esay('know',subject='axe', object='smithy'))] > [event('say',target='_Bjorn',what=esay('know',subject='smithy', object=(20, 10, 305)))] > [event('say',target='_Bjorn',what=esay('know',subject='forest', object=(150, -50, 250)))] > [event('say',target='_Bjorn',what=esay('know',subject='tavern', object=(50, 30, 295)))] > [event('say',target='_Bjorn',what=esay('know',subject='home', object=(70, 0, 300)))] > [event('say',target='_Bjorn',what=esay('learn',subject='breakfast', object="imaginary('have a breakfast', 'morning', 'home')"))] > [event('say',target='_Bjorn',what=esay('learn',subject='dinner', object="imaginary('have a dinner', 'midday', 'home')"))] > [event('say',target='_Bjorn',what=esay('learn',subject='supper', object="imaginary('have a supper', 'evening', 'home')"))] > [event('say',target='_Bjorn',what=esay('learn',subject='sleep', object="imaginary('sleep good night', 'night', 'home')"))] > [event('say',target='_Bjorn',what=esay('learn',subject='build home', object='build_home'))] > [event('say',target='_Bjorn',what=esay('learn',subject='create axes', object="make_amount('axe',10,'ordinary axe','smithy')"))] #make axes goal #From now forward it's one way only < [event('imaginary',source='_Miyora',desc='sleep good night', time=(612, 1, 1, 7, 30, 0.0, 2, 1, -1)), event('goal',source='_Miyora', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 7, 30, 0.0, 2, 1, -1)), event('imaginary',source='_Nisuf',desc='sleep good night', time=(612, 1, 1, 7, 30, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 7, 30, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')] < [event('imaginary',source='_Miyora',desc='sleep good night', time=(612, 1, 1, 8, 0, 0.0, 2, 1, -1)), event('goal',source='_Miyora', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 8, 0, 0.0, 2, 1, -1)), event('imaginary',source='_Nisuf',desc='sleep good night', time=(612, 1, 1, 8, 0, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('imaginary',desc='sleep good night')], what_desc="imaginary('sleep good night').imaginary()", time=(612, 1, 1, 8, 0, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')] < [event('imaginary',source='_Miyora',desc='have a breakfast', time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)), event('goal',source='_Miyora', what=[event('imaginary',desc='have a breakfast')], what_desc="imaginary('have a breakfast').imaginary()", time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)), event('imaginary',source='_Bjorn',desc='have a breakfast', time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)), event('goal',source='_Bjorn', what=[event('imaginary',desc='have a breakfast')], what_desc="imaginary('have a breakfast').imaginary()", time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)), event('imaginary',source='_Nisuf',desc='have a breakfast', time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('imaginary',desc='have a breakfast')], what_desc="imaginary('have a breakfast').imaginary()", time=(612, 1, 1, 8, 30, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')] < [event('imaginary',source='_Miyora',desc='have a breakfast', time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)), event('goal',source='_Miyora', what=[event('imaginary',desc='have a breakfast')], what_desc="imaginary('have a breakfast').imaginary()", time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)), event('imaginary',source='_Bjorn',desc='have a breakfast', time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)), event('goal',source='_Bjorn', what=[event('imaginary',desc='have a breakfast')], what_desc="imaginary('have a breakfast').imaginary()", time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)), event('imaginary',source='_Nisuf',desc='have a breakfast', time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('imaginary',desc='have a breakfast')], what_desc="imaginary('have a breakfast').imaginary()", time=(612, 1, 1, 9, 0, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')] < [event('goal',source='_Bjorn', what=[event('move',what='_Bjorn',loc=(20, 10, 305))], what_desc="make_amount('axe',10).move_me('smithy').move_to_loc()", time=(612, 1, 1, 9, 30, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('move',what='_Nisuf',loc=(150, -50, 250))], what_desc="cut_something('axe').acquire_thing('axe'). acquire_known_thing('axe').move_it_into_me('_axe'). move_me((150, -50, 250)).move_to_loc()", time=(612, 1, 1, 9, 30, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')] #more complicated goal events #following section: sight of NPC moving and making things #decimals in move command: body didn't allow NPC to move #directly to target ;-) < [event('sight',source='_Bjorn', what=event('move',source='_Bjorn',target='_Bjorn', what='_Bjorn',loc=(20, 10, 305), time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)), time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)), event('sight',what=event('make',source='_Bjorn', what=ething('_axe1',desc='ordinary axe',type='thing',name='axe', place='_Bjorn',status=0.1), time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1))), event('goal',source='_Bjorn', what=[event('make',what='axe',what_desc='ordinary axe')], what_desc="make_amount('axe',10).do_all()", time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)), event('sight',source='_Nisuf',what=event('move',source='_Nisuf', target='_Nisuf',what='_Nisuf', loc=(95.8175396576, -8.32118435198, 270.839407824), time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)), time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)), event('goal',source='_Nisuf', what=[event('move',what='_Nisuf',loc=(150, -50, 250))], what_desc="cut_something('axe').acquire_thing('axe'). acquire_known_thing('axe').move_it_into_me('_axe'). move_me((150, -50, 250)).move_to_loc()", time=(612, 1, 1, 10, 0, 0.0, 2, 1, -1)), event('sight',what='_house'), event('sight',what='_house1')]