Hi
On Fri, 7 Jun 1996, Fionn Colvin wrote:
> Hi all,
> I'd like to add a new trigger for mob progs so mobs can do stuff
> depending on what the time is. I followed the outline in the docs for
> making a new trigger. Below is the function I added to mobprog.c. However
> it doesn't work. I know its a bit clumsy. Any ideas as to what I should
> be doing?
> >time_prog 10~
> Shout its 10am.
> ~
I presume you add this to the prog structs of the mob? (hey another
stupid question ;)
> int mprog_time_trigger(struct char_data *mob)
> {
> MPROG_DATA *mprg;
>
> for (mprg = mob_index[mob->nr].mobprogs; mprg != NULL; mprg = mprg->next)
> if (mprg->type & TIME_PROG) {
> if (time_info.hours == atoi(mprg->arglist))
> return 1;
> else
> return -1;
> }
> return -1;
> }
Should this execute the prog? If yes: you don't make a call to
mprog_driver (that's the part of the code that executes the actual
trigger 'code'
> Also at current I think that It will just keep doing the stuff
> in act_time while time is equal to whatever the arg for the prog is. How
> could I make it so it only does the command once per day?
act_time??? that correct? anyways I just had a look at the code dunno for
sure where to add the call to this trigger.. have to look into it...
great idea tough time triggers! (doin' a bit of a rewrite on the
Mobprogram parser at the moment in an attempt to make it faster (we wanna
loose all special C routs in the mud) first beta versions are running
quite stable. Let me know wether you got it working (I'll make a post as
soon as I get my stuff running (at a releasable level))
On second look! look in weather.c function called another_hour if that
one's called every hour to update gametime then that's the place to add
it.... (I guess)
from mobprog.c:
void mprog_hitprcnt_trigger(struct char_data *mob, struct char_data *ch)
{
MPROG_DATA *mprg;
if (IS_NPC(mob) && (mob_index[mob->nr].progtypes & HITPRCNT_PROG))
for (mprg = mob_index[mob->nr].mobprogs; mprg != NULL; mprg =
mprg->next)
if ((mprg->type & HITPRCNT_PROG)
&& ((100 * mob->points.hit / mob->points.max_hit) <
atoi(mprg->arglist)))
{
mprog_driver(mprg->comlist, mob, ch, NULL, NULL);
break;
}
}
I guess your trigger should look more something like this one...
Like:
void mprog_time_trigger(struct char_data *mob)
{
MPROG_DATA *mprg;
if (IS_NPC(mob) && (mob_index[mob->nr].progtypes & HITPRCNT_PROG))
for (mprg = mob_index[mob->nr].mobprogs; mprg != NULL; mprg =
mprg->next)
if (mprg->type & TIME_PROG)
{
if (time_info.hours == atoi(mprg->arglist))
mprog_driver(mprg->comlist, mob, NULL, NULL, NULL);
else
return;
}
}
So that's another bit of cut and paste... always works... in theory.... ;)
Have a go with it... Hope it works!
Greetinx GrimReaper of Realms of Frustration
-----+++++*****************************************************+++++++++-------
- Ric Klaren - j.klaren@student.utwente.nl - ia_ric@cs.utwente.nl -------------
-----+++++*****************************************************+++++++++-------
``Why don't we just invite them to dinner and massacre them all when
they're drunk?''
``You heard the man. There's seven hundred thousand of them.''
``Ah? So it'd have to be something simple with pasta, then.''
-------------------------------------------------------------------------------
From: Interesting Times by Terry Pratchet
-----+++++*****************************************************+++++++++-------
This archive was generated by hypermail 2b30 : 12/18/00 PST