On Tue, 7 May 1996, Brian Christopher Guilbault wrote:
> On Mon, 6 May 1996, Hades wrote:
>
> > >
> > > I would like to add level limits to items, as I get very tired of watching
> > > newbies run around with my suposed 'high-level' weapons and armor. My
> > > question is: has anyone done this and does it require a pfile wipe or
> > > plrobj file deletion?
>
> Disregarding the arguments about this and answering your question, we do
> this in a simpler way than the first solution posted. In our method you
> don't have to add another variable to the entire object structure, rather
> just add a few flags.
>
> In structs.h and constants.c, define your new ITEM flags. We call them
> LVL10, LVL20., LVL30, etc. Then in handler.c you will find a piece of
> code called invalid_class. This is the function that checks to see if a
> character can't use an item because it is not usable by his/her class. At
> the end of these checks, just add your new checks for the equipment like
> below. Granted it uses up some flags, but in exchange, adding a limit is
> as simple as adding another bit to the item in the object file.
>
>
> int invalid_class(struct char_data *ch, struct obj_data *obj) {
> if ((IS_OBJ_STAT(obj, ITEM_ANTI_MAGIC_USER) && IS_MAGIC_USER(ch)) ||
> (IS_OBJ_STAT(obj, ITEM_ANTI_CLERIC) && IS_CLERIC(ch)) ||
> (IS_OBJ_STAT(obj, ITEM_ANTI_WARRIOR) && IS_WARRIOR(ch)) ||
> (IS_OBJ_STAT(obj, ITEM_ANTI_THIEF) && IS_THIEF(ch)) ||
> (IS_OBJ_STAT(obj, ITEM_LVL10) && (GET_LEVEL(ch) <= 9)) ||
> (IS_OBJ_STAT(obj, ITEM_LVL20) && (GET_LEVEL(ch) <= 19)) ||
> (IS_OBJ_STAT(obj, ITEM_LVL30) && (GET_LEVEL(ch) <= 29)) ||
> (IS_OBJ_STAT(obj, ITEM_LVL40) && (GET_LEVEL(ch) <= 39)) ||
> (IS_OBJ_STAT(obj, ITEM_LVL50) && (GET_LEVEL(ch) <= 49)))
> return 1;
> /* else*/
> return 0;
> }
>
>
> We have 60 mortal levels, so the 5 flags are enough for us. Also, we have
> another way to add more flags if we run out. We do it for PRF_FLAGS by
> adding a new set called PRF2_FLAGS. Works out nicely since we added new
> communication channels and you can now be !MUSIC, !IMMNET, etc. I know
> lots of people were looking for ways to add more flags and this is a
> simple way. It didn't even require a p-file wipe. When you sdsstat a
> player, they now have another field under "PRF" that says "PRF2: None" or
> whatever. I will dig around for all the pieces of code today and post it
> later if you guysd want it.
>
>
> Hope that helps,
>
> -Brian
>
>
No offense but what about a mud that has 300 levels.. like the one i'm
on. Thats 30 flags? Lets just clog the structs file up. I wrote a way
to do it using integer variables - that way you dont HAVE to have
increments of ten anyways, which is stupid if you want something
restricted to level 45 or so, what do you do ? Everyone's gonna be
warring to get to the next 10 levels, not the next one, or whatever.
I saw a mud where they had LVL_10 LVL_20 etc and I just laughed, because
they had a similar thing for mob attacks ATTACK_2 etc etc., making it
very clumsy to work out. Besides I really go for elegance. :) Anyways I
have a complete way on how to do it floating around the list somewhere,
feel free to hack the idea up and use it, its not skin off my back.. :)
If you want to see how I parsed the new variables into the obj_proto drop
me a line and I'll show you how I did it. Its a peice of cake, and imo
if you're not afraid to fiddle db.c you'll find it makes things much more
free in the end than a bunch of flags. Sorry but thats how I feel.
Code well..
Christopher Voutsis
Email: s337239@student.uq.edu.au
This archive was generated by hypermail 2b30 : 12/18/00 PST