August 2000
- Pfile Wiping: was The Player Wimping Guidebook William Katzell
- Pfile Wiping: was The Player Wimping Guidebook Koster, Raph
- Release of Blood Drops ver 0.1 adam@treyarch.com
- MUD Wimping -- An anecdote Zak Jarvis
- Responses to the Mudwimping article Dmitri Zagidulin
- Responses to the Mudwimping article Greg Underwood
- Responses to the Mudwimping article Nathan Clemons
- wimping/wiping and the big blind spot Peter
- wimping/wiping and the big blind spot Tamzen Cannoy
- wimping/wiping and the big blind spot Josh Rollyson
- World Event Model Matt Chatterley
- World Event Model adam@treyarch.com
- World Event Model Christoph Seifert
- World Event Model Josh Rollyson
- World Event Model Christian Loth
Greetings,
On Fri, Aug 04, 2000 at 11:05:30AM +0200, Christoph Seifert wrote:
> Hello!
>
> I read through the ideas for making events and even downloaded the
> example by Adam.
>
> The mud I code on - The Realm of Magic (http://rom.mud.de) - uses a
> system for
> events as well, but with a different approach on priorities. Events in
> there
> are actions or something that goes over several rounds or for a longer
> time.
Once I also coded for the MUD Realm of Magic, and it was me who
gave the first initative for its event system, though it developed
in a direction that I didn't like very much.
Since then I started my own MUD Project called 'Gidayu', and I also
developed an event system, based on my basic ideas for the RoM-event
system, but this time I developed details on my own, and I'd like to
report how they turned out.
In Gidayu, events are also periodic occurances, that have an interval
of execution. Gidayu is supposed to be a heavliy event-driven MUD,
more even than RoM, therefore my goal was also to design an event
system that could easily hold several thousands of events, without
showing runtime issues.
SCHEDULING
----------
First: priority based scheduling
Gidayu events are sorted in a priority queue. An events priority is
a 64 bit unsigned long long (GNU C extension). The priority consists
of two 32 bit unsigned longs, where the first one is the time slice
when the event will be executed next, and the second is the event's
running number. The time slice count is 0 at Startup, and increases
by one ever 25 miliseconds, so that we have 4 slices in a second.
This is a nice granularity, which will give us the opportunity to
implement speed-based (I call it pseudo-realtime, but realtime is
an overstretched expression) instead of round-based combat.
Second: type based scheduling
There are 7 event-types (social with action, social, combat, magic,
death, action, and detached). Normaly an event is attached to an
instance in the world (room, item, npc, player, etc.). Upon creation,
it is checked, if an event can be scheduled at all, depending on what
events are active in that instance (e.g. a fighting character will
have a hard time dancing!). After that, it is checked, if that new
event purges an already existing event (e.g. a dancing player, if
dragged into combat, will start fighting and stop dancing). These
checks are done with two tables having two dimensions each, where
each event type is checked against the other event types, and either
is 'true', or 'false'. A special case are the detached events, which
work independent, and are not scheduled by type (this is e.g. used
for system events, like Auto-Player-Saving, Date/Time bookkeeping,
several kinds of Updating Events, etc.).
The Event Handler
-----------------
The Event Handler is the class that manages all events (e.g. it is
the class that contains the priority queue). For one, it counts
the slices, which are used for calculating an event's priority.
Then it is responsible for executing all events that are to be
executed in the current time slice. It also keeps track of the
event managers (see below) and the discarding queue (see also below).
Event Managers
--------------
One point I didn't like about the event system of RoM was, that it
often crashed because an instance in the world was deleted, without
it properly telling it's events (see Christoph's remark about
avoiding crashes) or the events simply asserting that it was still
there. It was dissatisfying, that each instance in the world had to do its
very own checks for events, and vice versa. Therefore I implemented
a proxy class in the Gidayu System, which keeps track of events for a world
instance, however when that instance gets deleted, the proxy is still there.
It will then get placed into the discarding queue, and all events are
properly signaled, that the world instance has gone. The Event Manager
keeps on existing as long as the events that once were using the world
instance for something still exist - maybe that world instance was not
critical for the event, or proper cleanup work still needs to be done.
Of course this is hard to do when all event data is stored with the actual
instance. With the help of this proxy class I neatly got the
'validation code' for events centralized, thus sparing me a lot of
maintainence work and danger of crashes.
Events themselves
-----------------
There is a great deal of flexibility for Gidayu Events. Just like the
events from RoM, events are able to trap commands, overriding the
actual execution of a command, and using special code in it's place.
Then they regularly execute code. It can be used for regular updates,
or for regular validation checks (which, if failed, might set the
event's state to 'finished' which will delete the event at next
opportunity). The interface is pretty general, and can do almost anything
at a very nice granularity of time. The generality also provides that
the code of the event system is kept relatively simple, and thus
easily maintainable.
> Anyway, I am not 100% satisfied with the priority handling, although I
> didn't think it up
> in one day.
Actually I agree with Christoph that RoM's events were (at my time of
leaving) awkwardly scheduled, however I am very content with Gidayu's
scheme, and must say it works nicely so far. However, at the moment with
Gidayu being in alpha development phase, I didn't have any great
stress setups, but just very limited sandboxes, so Gidayu's system
didn't survive any stress tests yet (though I must say, high uptimes
surely boost your ego ;) ), though I'm very positive it will.
>
> I would appreciate any comment or discussion on it.
>
Whether Gidayu's event system is evolutionary or degressive compared
to RoM's, I think only the future can tell (or maybe any of the
true gurus on this list ;) ).
- Chris
--
Christian Loth
Coder of 'Project Gidayu'
Computer Science Student, University of Dortmund
chris@gidayu.mud.de - http://gidayu.mud.de
- Player-admins, was wimping/wiping and the big blind spot Patrick Dughi
- Player-admins, was wimping/wiping and the big blind spot Brian 'Psychochild' Green
- Player-admins, was wimping/wiping and the big blind spot Patrick Dughi
- Player-admins, was wimping/wiping and the big blind spot Matt Chatterley
- Player-admins, was wimping/wiping and the big blind spot Peter
- Player-admins, was wimping/wiping and the big blind spot Sellers, Michael
- Player-admins, was wimping/wiping and the big blind spot Matthew Mihaly
- Player-admins, was wimping/wiping and the big blind spot rayzam
- Player-admins, was wimping/wiping and the big blind spot adam@treyarch.com
- Player-admins, was wimping/wiping and the big blind spot Matthew Mihaly
- Pfile Wiping, etc. Jon Callas
- Pfile Wiping, etc. rayzam
- Pfile Wiping, etc. Sanvean
- Pfile Wiping, etc. rayzam
- Pfile Wiping, etc. adam@treyarch.com
- linked worlds (was: On Lockless Threading and X/Open XA) Bruce
- linked worlds (was: On Lockless Threading and X/Open XA) Matthew Mihaly
- Mud Evolution rayzam
- Mud Evolution Koster, Raph
- Mud Evolution rayzam
- Unique Items (was MUD Wimping) Lord Ashon
- Unique Items (was MUD Wimping) Neddy Seagoon
- Pfile Wiping, etc. Christoph Seifert
- Mud Metrics rayzam
- Mud Metrics Justin Rogers
- Mud Metrics rayzam
- Law of Resource Congestion Christian Loth
- Law of Resource Congestion Josh Rollyson
- Law of Resource Congestion Dan Merillat
- Law of Resource Congestion Dan Shiovitz
- Law of Resource Congestion Christian Loth
- Law of Resource Congestion Patrick Dughi
- Law of Resource Congestion Scion
- Law of Resource Congestion ens017@mizzou.edu
- Law of Resource Congestion Nathan F. Yospe
- Law of Resource Congestion Matthew Mihaly
- Law of Resource Congestion Nathan F. Yospe
- Law of Resource Congestion Matthew Mihaly
- Law of Resource Congestion Patrick Dughi
- Law of Resource Congestion Nathan F. Yospe
- Law of Resource Congestion Andy
- World Event Model (Christian Loth) Christoph Seifert
- World Event Model [Josh Rollyson] Christoph Seifert
- Player-admins, was wimping/wiping and the big blind Hess, Ian W {Ian}
- Majesty (was: Player-admins, was wimping/wiping and the big blind) Chris Jacobson
- World Event Model [Josh Rollyson] (long/technical) Christoph Seifert
- Skotos News & Skotos @ Gencon Christopher Allen
- Harry Potter stuff Timothy Dang
- Harry Potter stuff Chris Gray
- Harry Potter stuff Matthew Mihaly
- Child animations in MUDs (UO) Brett
- Child animations in MUDs (UO) Koster, Raph
- Constraint as a Design Problem Christopher Allen
- an opportunity Matthew Mihaly
- UO rants Matthew Mihaly
- UO rants Norman Short
- UO rants Wes Connell
- UO rants Schubert, Damion
- UO rants Wes Connell
- UO rants Matthew Mihaly
- UO rants John Buehler
- UO rants Shawn L Johnston
- UO rants Matthew Mihaly
- UO rants John Buehler
- UO rants Brian 'Psychochild' Green
- UO rants Matthew Mihaly
- UO rants Vincent Archer
- UO rants Dan Merillat
- UO rants John Buehler
- UO rants Tess Lowe
- UO rants Matthew Mihaly
- UO rants Dan Merillat
- UO rants Ian Macintosh
- UO rants Koster, Raph
- UO rants Matthew Mihaly
- UO rants Tess Lowe
- UO rants Paul Schwanz - Enterprise Services
- UO rants Jeff Freeman
- UO rants Chris Lloyd
- UO rants Koster, Raph
- UO rants Koster, Raph
- UO rants Dan Merillat
- UO rants John Buehler
- UO rants Chris Lloyd
- UO rants Richard A. Bartle
- UO rants Koster, Raph
- UO rants Zak Jarvis
- Object Representations? KevinL
- Object Representations? Lazarus
- Object Representations? Patrick Dughi
- Object Representations? Phillip Lenhardt
- Reality vs Fantasy (was Law of Resource Congestion) Mordengaard
- Reality vs Fantasy (was Law of Resource Congestion) Caliban Tiresias Darklock
- [gods] Player Representatives? (fwd) J C Lawrence
- Re:[gods] Player Representatives? (fwd) Christoph Seifert
- UO Virtues Schubert, Damion
- UO Virtues John Buehler
- Object Representations? Robert Zubek
- Reputation & Trust Circles [was UO rants] Joe Andrieu
- Reputation & Trust Circles [was UO rants] Bruce
- Reputation & Trust Circles [was UO rants] Ben
- Reputation & Trust Circles [was UO rants] John Buehler
- Reputation & Trust Circles [was UO rants] Matthew Mihaly
- Reputation & Trust Circles [was UO rants] Matt Chatterley
- Reputation & Trust Circles [was UO rants] Dan Merillat
- Reputation & Trust Circles [was UO rants] Matt Chatterley
- Reputation & Trust Circles [was UO rants] Michael Tresca
- Reputation & Trust Circles [was UO rants] Dan Merillat
- Reputation & Trust Circles [was UO rants] Paul Schwanz - Enterprise Services
- Reputation & Trust Circles [was UO rants] Ben
- Reputation & Trust Circles [was UO rants] Paul Schwanz - Enterprise Services
- Reputation & Trust Circles [was UO rants] Milne, Alistair
- Reputation & Trust Circles [was UO rants] Ian Macintosh
- MXP/Extending MUD Technologies (Was Object Representations?) Nathan Clemons
- Matching and Maximizing: How players choose between activities John Hopson
- PK vs. PvP (was: UO rants) Ananda Dawnsinger
- PK vs. PvP (was: UO rants) Matthew Mihaly
- PK vs. PvP (was: UO rants) Vincent Archer
- PK vs. PvP (was: UO rants) Matt Chatterley
- PK vs. PvP (was: UO rants) Vincent Archer
- PK vs. PvP (was: UO rants) Zak Jarvis
- PK vs. PvP (was: UO rants) Matt Chatterley
- PK vs. PvP (was: UO rants) Matthew Mihaly
- PK vs. PvP (was: UO rants) Zak Jarvis
- PK vs. PvP (was: UO rants) Vincent Archer
- PK vs. PvP (was: UO rants) Dan Merillat
- PK vs. PvP (was: UO rants) Dan Merillat
- Crime Ben
- Cooperation vs Competition Ron Moore
- Cooperation vs Competition Jo Dillon
- [Moebius] MXP/Extending MUD Technologies (Was Object Representations?) KevinL
- FW: UO rants John Buehler
- Reincarnation instead of Resurrection Lovecraft
- Reincarnation instead of Resurrection Shawn L Johnston
- Reincarnation instead of Resurrection Matthew Mihaly
- PvP solutions WAS: UO rants Zak Jarvis
- PvP solutions WAS: UO rants Paul Schwanz - Enterprise Services
- Playerkilling Pacifists Michael Tresca
- Playerkilling Pacifists Matthew Mihaly
- Playerkilling Pacifists Michael Tresca
- url for The Hundred Years War Ron Moore
- url for The Hundred Years War Marc Bowden
- [paper] The Sacred and the Virtual: Religion in Multi-User Virtual Reality Jon Lambert
- Avatar rights redux Koster, Raph
- Avatar rights redux Dave Rickey
- Holidays Jeff Freeman
- Transportation (was: UO rants) Chris Lloyd
- Transportation (was: UO rants) Patrick Dughi
- Transportation (was: UO rants) Brad Wyble
- Transportation (was: UO rants) Norman Short
- Transportation (was: UO rants) Chris Lloyd
- Transportation (was: UO rants) KevinL
- Transportation (was: UO rants) Patrick Dughi
- Transportation (was: UO rants) Dan Merillat
- Transportation (was: UO rants) Warren Powell
- Transportation (was: UO rants) KevinL
- Fraud (was: UO rants) Brian 'Psychochild' Green
- Fraud (was: UO rants) John Buehler
- Transportation Ron Moore
- Transportation Madrona Tree
- time delays on PK (was UO rants) gmiller@classic-games.com
- time delays on PK (was UO rants) Erik Jarvi
- Copyright Question for the Hobbyists Kristen L. Koster
- Copyright Question for the Hobbyists Patrick Dughi
- Copyright Question for the Hobbyists Travis Casey
- Copyright Question for the Hobbyists Alex
- Copyright Question for the Hobbyists Lazarus
- Copyright Question for the Hobbyists Marc Bowden