Re: Retirement

From: Mysidia (jmhess@i-55.com)
Date: 07/03/01


> An 'rnum' should fit in the same space as a 'vnum' otherwise you have a
> rather useless batch of real numbers.

   Well yeah.. i'm rather meaning there ought to be explicit typecasts
to type (room_vnum) or (obj_vnum) for example when a vnum variable is
being used to hold a rnum and an (obj_rnum) cast when the rnum is being
extracted, so it's obvious that that's what's happening --- perhaps there
should be a gen_vnum type to indicate the largest datatype used for vnums,
so that a single variable can be used to hold all different kinds of
vnums, and similarly a gen_rnum (generic rnum) type, being the largest
sort of int used on rnums...

in many cases where a vnum is put into an int, different kinds of
vnums/rnums are also put into that int

> A lot of that is historical and the patchlevel sizes aren't exactly small
> already to go make sweeping changes.  People like to throw fits when we
> make a lot of small changes too so I'm expecting another round of groans
> shortly.

   Well, ignore 'em!  Worst-case scenario, they run patch and manually
sort out the rejects -- which is nothing to give them reason for groaning
unless the patch changes aren't altering function parameters; if they
have real complaints, that's another matter.. but patches of small changes
is trivial; perhaps they're doing something they shouldn't necessarily
be doing, attempting to integrate all the stock changes into their custom
codebase a thing bound to give them a few headaches

   I'm not suggesting that an extroardinary amount of sweeping changes
are neededin a single patchlevel -- but I think some things in stock
aren't quite as they ought to be.

The way shop functions are implemented is annoying..

Suppose you want to check if a mob has a certain proc as a condition
for some hook from the command parser or some other place.. what you
want to do is...

SPECIAL(foo);
...
if (GET_MOB_SPEC(char) == foo)
    ... do stuff ...

What you are instead forced to do is execute a search of the shop database
something evil, something resembling...

<pseudocode>
typedef int SPEC_FUN (struct char_data *, void *me, CMDTYPE *, char *);

SPEC_FUN * get_proc(struct char_data *character, SPEC_FUN *func) {
    shop_rnum srn;

    if (GET_MOB_SPEC(character) != SPEC(shop_keeper))

    for(srn = bottom_shop; VALID_SHP_RNUM(srn); srn = NEXT_SHOP(srn))
        if (SHOP_KEEPER(srn) == GET_MOB_RNUM(character)))
            break;
    if (VALID_SHP_RNUM(srn))
        return ((SPEC_FUN *)SHOP_FUNC(srn));
    return GET_MOB_SPEC(character);
}
</pseudocode>

Now it doesn't seem that bad, I guess -- I just don't like that a search
is necessary, it makes the GET_MOB_SPEC() macro seem a little misleading
if it doesn't always report the place where the spec_assign.c proc has
been assigned.

Having a MOB_SHOP NPC flag set by the system and then used by the command
interpreter in special case fashion would be better than that.

Just some ideas:>

-Mysid

--
   +---------------------------------------------------------------+
   | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
   | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
   +---------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/06/01 PST