Perhaps direct the newbie C programers to a C programing mailing list or a good newsgroup (I have tried a few there arent any that I seen soo far) also suggested reading would be nice I know a lot of people like me dont want to buy a 40 dollar book and have it be useless or ment for pascal programers (grrr personal experiance) and I again appologise for excessive messages but as I said I write when things come to mind You Have been enlightened by: The /./. i d n i g h t |) r a g o n Telnet mud.ag.net 4000 Sig Toasted on request On Thu, 16 Nov 1995, Chris Herringshaw wrote: > Okay, in an effort to move this list away from "Please give me code to do > XXX. I am a newbie C coder who wants to run a MUD, but I don't know > UNIX, and I don't want to take the time to work through the code > myself." type messages, I went into the archives and grabbed my > event driven server message. This message is high-level, and there > is no actual code in it. This list is about running and maintaining > CircleMUDs, not how to program in C. NOTHING being done in CircleMUD, > other than the socket routines, take any experience to figure out. > Sit down with grep, your favorite editor, and a C book, and you > will figure it out without much help. You can flame me if you like, > but just so you know in advance - I will delete your long, thought out > message without reading it. > > There were several (like half a dozen) people interested in this > message when I mentioned it in a post a few weeks back. Several > people checked the list archives and said they couldn't find it. > I'm not sure where they were looking, but it was there, in 1994's > archive from October, message #811 (I think). Just do a grep for > "hunderstorm". > > --- > Christopher Herringshaw | University of Michigan Medical Center > Special Projects Development | 1500 East Medical Center Dr. B1-240TC > xxviper@umich.edu | Ann Arbor, Michigan 48109-0704 > http://www.umich.edu/~xxviper | +0101 (313) 747-2778 > > > > Event Server Message Follows: > > Return-Path: circle-owner@marble.bu.edu > Return-Path: <circle-owner@marble.bu.edu> > Received: from marble.bu.edu > by blaze.cs.jhu.edu; Tue, 20 Sep 94 22:18:21 EDT > Received: from goodman.itn.med.umich.edu (goodman.itn.med.umich.edu [141.214.252.144]) by > marble.bu.edu (8.6.9/Marble-2.3) with SMTP > id WAA27399 for <circle@marble.bu.edu>; Tue, 20 Sep 1994 22:22:43 -0400 > Received: from hendrix.itn.med.umich.edu by goodman.itn.med.umich.edu with SMTP id AA01233 > (5.65b/IDA-1.4.3 for circle@marble.bu.edu); Tue, 20 Sep 94 22:16:25 -0400 > Date: Tue, 20 Sep 1994 22:16:23 -0400 (EDT) > From: Chris Herringshaw <Chris.Herringshaw@med.umich.edu> > Sender: Chris Herringshaw <Chris.Herringshaw@med.umich.edu> > Reply-To: Chris Herringshaw <Chris.Herringshaw@med.umich.edu> > Subject: Re: event driven code (question, not answer) > To: Mathue Moyer <mmoyer@sdcc10.ucsd.edu> > Cc: circle@marble.bu.edu > In-Reply-To: <9409201721.AA17272@sdcc10.UCSD.EDU> > Message-Id: <Pine.3.89.9409202132.A4374-0100000@hendrix.itn.med.umich.edu> > Mime-Version: 1.0 > Content-Type: TEXT/PLAIN; CHARSET=US-ASCII > > Well, it'd be too hard to cut and paste everything in the engine, > but I will be more than glad to summarize. Everything I did and do > is unique (meaning I don't keep other source codes on my machine > to cut and paste code in from...I write it *all* myself, so it may > not be pretty...) > > Okay here is how I have it set up: > > I have one global event queue, which gets decremented each time a > loop pass is made. If the timer on an event reaches zero, the > event is executed. A typical event struct looks like this: > > struct event_struct { > int (*event)(); > int timer; > long chr; > long obj; > long vict; > int var1; > int var2; > char *arg; > struct event_struct *this; > struct event_struct *next; > }; > > > Every single command, skill, and spell is an event, and when one gets > executed, it is placed into an event envelope (like above), with > the appropriate timer value. There are some additional variables > (var1 and var2) in case ones needs them. When an event gets enveloped, > the function to be called (ie...PlayerMove, or SkillSneak) is placed > into the (*event)(); function pointer, along with the player > who invoked the event, the victim if any, etc. From there on > it operates like a normal command. The advantage of things like this > is that you can have future events placed into the queue. For example > an incoming thunderstorm can be placed into the event system, and when > the timer runs out, print a message like "You see dark clouds and hear > a low rumbling in the distance..."; reset the event timer to some > value, store the instance of the event, then process it again. > > Clearer example: > > void WeatherThunderstorm(blah blah blah) > { > static instance = 0; > > switch (instance++) { > > case 1: ResetTimer(this, 1200) /* reset timer to 5 mins */ > print "Dark clouds and thunder far far away" > break > case 2: ResetTimer(this, 1200) /* reset timer to 5 mins */ > print "Dark clouds thunder, lightning in distance" > break > case 3: ResetTimer(this, 1200) /* reset timer to 5 mins */ > print "Ominous clouds, lightning heavy thunder closeby" > break > case 4: ResetTimer(this, 1200) /* reset timer to 5 mins */ > print "Nasty-ass storm has hit your area" > TakeCareOfWeatherRoutine(LightStorm) > break; > case 5: ResetTimer(this, 1200) /* reset timer to 5 mins */ > print "Storm gets REALLY nasty..." > TakeCareOfWeatherRoutine(NastyStorm) > break; > case 6: ResetTimer(this, 1200) /* reset timer to 5 mins */ > print "Storm is moving away..." > TakeCareOfWeatherRoutine(LightStorm) > break > case 7: /* We don't reset timer so event will be killed */ > print "Storm moves far off to the south" > TakeCareOfWeatherRoutine(Normal) > break; > default: LogProblem(or something like that) > break; > } /* switch*/ > } > > > Well, here is a simple event which handles a 35 minute long > thunderstorm. Same can be done with caravans, or bands of orcs > raiding a village, etc. Hope this pseudo code proves usefull > to someone! > > ==================================================================== > Christopher Herringshaw Networking and Special Projects Division > Medical Center Information Technology (MCIT) xxviper@med.umich.edu > University of Michigan Medical Center, B1911 CFOB > 1414 Catherine Street, Ann Arbor, MI 48109-0704 (313) 747-2778 > ==================================================================== > > On Tue, 20 Sep 1994, Mathue Moyer wrote: > > > >for a long time, I feel. I've written an event driven MUD server, > > >and now I want to make it an event driven OO server. (gee, what fun you > > > > > > > Hullo... I was just wondering if you might be willing to send me an > > example of your event driven code? Or perhaps can point me to such > > examples available on the internet? This is entirely for my own > > edification, and not for use in any muds. I simply want to take a > > look at event-driven code so I can see how it's done. If you'd > > rather not for any reason, feel free to say so, of course. :) > > > > -- > > -Mathue Moyer > > -mathue@ucsd.edu > > > > >
This archive was generated by hypermail 2b30 : 12/07/00 PST