Re: array question "Brian Williams - Nashak" at Oct 4, 97 05:46:57 pm

From: Andrew Helm (ashe@IGLOU.COM)
Date: 10/04/97


>
> On Sat, 4 Oct 1997, Andrew Helm wrote:
> > SNIP
>
> Okay, what I mean is.. I have an array in the pfile.. int memorized[100];
> which stores spellnums, if they forget a spell, I want it to set the
> spellnum to 0, and if there is a 0 in the array, I want it to move all
> entries to the left one after the zero, so there are no more zeros until
> the end of the array
> i.e.
> 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 5
> would equal this:
> 1, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

This is mailer code. You've been warned.
When you first make the array be sure to initialize every entry
to zero.


#define MAX_MEMORIZED 100
#define MEMORIZED(c) how to get the memorized array from the player here

Note: the array should be declared as  int array[MAX_MEMORIZED]


int memorize_spell(struct char_data *ch, int spellnum) {
  unsigned int i;

  for (i = 0; (i < MAX_MEMORIZED) && MEMORIZED(ch)[i]; ++i)
    ;
  if (i == MAX_MEMORIZED)
    return 0;

  MEMORIZED(ch)[i] = spellnum;
  return 1;
}


int forget_spell(struct char_data *ch, int spellnum) {
  unsigned int i;

  if (spellnum == 0)
    return 1;

  for (i = 0; (i < MAX_MEMORIZED) && (MEMORIZED(ch)[i] != spellnum); ++i)
    ;
  if (i == MAX_MEMORIZED)
    return 0;

  if (i != MAX_MEMORIZED - 1) {
    for (; (MEMORIZED(ch)[i] = MEMORIZED(ch)[i + 1]) && (i < MAX_MEMORIZED - 1); ++i)
      ;
    MEMORIZED(ch)[i + 1] = 0;
  }
  MEMORIZED(ch)[MAX_MEMORIZED - 1] = 0;

  return 1;
}


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



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