Re: Installing Item and Level Limits (question)

From: Brian Christopher Guilbault (guil9964@nova.gmi.edu)
Date: 05/07/96


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



This archive was generated by hypermail 2b30 : 12/18/00 PST