[CODE] Call Dragon Spell

From: Carlo Mocci (mocci@TIN.IT)
Date: 04/27/98


I've made a Call Dragon spell that calls a dragon to carry the caster and
his group (those who are in the same room of the caster) in a room named
ASTRAL_TARGET_ROOM (a vnum). Note that the dragon isn't real, is basically
a teleport group spell.

The spell works, but I don't like the way I used the boolean array stanza[]
to store which people are being transported of the group (I'm not going to
carry PG that aren't in the same room of the caster, or with position <
POS_STANDING).

So, I'm putting in the list the spell, but I would like to have some advice
from you in a more neat way to handle the bool stanza[] thing.
Messages are in italian, but it shouldn't be too difficult to translate if
you can understand the code (anyway mail me to have a translation if
somebody want to use the spell).

TIA

KABIR
Coder of DalilaMUD
dalila.shopitaly.net 4000

--------------------

ASPELL(spell_call_dragon)
{
#define ASTRAL_TARGET_ROOM 11300

  struct char_data * k;
  struct follow_type * f;
  room_rnum room_cast;
  bool stanza[1000]; //It's terrible, but it works
  int i;

  if (ch == NULL)
    return;

  act("Evochi un potente drago e ci sali sopra, preparandoti a viaggiare.",
TRUE, ch, 0, 0, TO_CHAR);
  act("$n evoca un potente drago.", TRUE, ch, 0, 0, TO_ROOM);

  if (!IS_AFFECTED(ch, AFF_GROUP))
    {
    send_to_char("Il drago ti porta in mezzo alle nuvole e poi
scompare.\r\n", ch);
    act("$n sale in groppa al drago e scompare.", TRUE, ch, 0, 0, TO_ROOM);
    char_from_room(ch);
    char_to_room(ch, real_room(ASTRAL_TARGET_ROOM));
    act("$n arriva in groppa ad un drago maestoso, scende, e il drago
scompare.", TRUE, ch, 0, 0, TO_ROOM);
    look_at_room(ch, 0);
    }
  else
    {
    for (i=0; i<1000; i++) stanza[i]=FALSE;
    room_cast=ch->in_room;

    if (ch->master) k = ch->master;
    else k = ch;

    if ( (IS_AFFECTED(k, AFF_GROUP)) && (k->in_room==room_cast) &&
(GET_POS(k)>= POS_STANDING) )
      {
      stanza[0]=TRUE;
      act("$n sale in groppa al drago maestoso.", TRUE, k, 0, 0, TO_ROOM);
      if (k!=ch) send_to_char("Sali in groppa al drago maestoso,
preparandoti a viaggiare.\r\n", k);
      }
    i=1;
    for (f = k->followers; f; f = f->next)
      if ( (IS_AFFECTED(f->follower, AFF_GROUP)) &&
(f->follower->in_room==room_cast) &&
            (GET_POS(f->follower)>= POS_STANDING) )
        {
        if (i>=1000) {log("ERRORE in spell_call_dragon: piu' di mille
giocatori gruppati ?");}
        else stanza[i++]=TRUE;
        act("$n sale in groppa al drago maestoso.", TRUE, f->follower, 0,
0, TO_ROOM);
        if (f->follower!=ch) send_to_char("Sali in groppa al drago maestoso
preparandoti a viaggiare.\r\n", f->follower);
        }

    send_to_room("Un drago maestoso appare.\r\n",
real_room(ASTRAL_TARGET_ROOM));

    if (stanza[0])
      {
      char_from_room(k);
      char_to_room(k, real_room(ASTRAL_TARGET_ROOM));
      send_to_char("Il drago maestoso ti trasporta coi tuoi compagni in
mezzo alle nuvole.\r\n", k);
      }
    i=1;
    for (f = k->followers; f; f = f->next)
      if (stanza[i++])
        {
        char_from_room(f->follower);
        char_to_room(f->follower, real_room(ASTRAL_TARGET_ROOM));
        send_to_char("Il drago maestoso ti trasporta coi tuoi compagni in
mezzo alle nuvole.\r\n", f->follower);
        }

    send_to_room("Il drago maestoso scompare con tutti i suoi
cavalieri.\r\n", room_cast);

    if (stanza[0])
      {
      act("$n scende dal drago.", TRUE, k, 0, 0, TO_ROOM);
      send_to_char("Scendi dal drago maestoso.\r\n", k);
      }
    i=1;
    for (f = k->followers; f; f = f->next)
      if (stanza[i++])
        {
        act("$n scende dal drago.", TRUE, f->follower, 0, 0, TO_ROOM);
        send_to_char("Scendi dal drago maestoso.\r\n", f->follower);
        }

    send_to_room("Il drago maestoso scompare.\r\n",
real_room(ASTRAL_TARGET_ROOM));

    if (stanza[0])
      look_at_room(k, 0);
    i=1;
    for (f = k->followers; f; f = f->next)
      if (stanza[i++])
        look_at_room(f->follower, 0);

    }

#undef ASTRAL_TARGET_ROOM
}

---------------------------------------------------------------
|        __         __            __  __         __       __  |
|   __  (  )  ___  (  )    __    (  \/  )  __   / _)  __ (  ) |
|  / _) /__\ (  ,)  )(__  /  \    )    (  /  \ ( (_  / _) )(  |
| ( (_ (_)(_) )  \ (____)( () )  (_/\/\_)( () ) \__)( (_ (__) |
|  \__)      (_)\_)       \__/            \__/       \__)     |
|                                                             |
| mailto: mocci@tin.it                                        |
| http://volftp.tin.it/IT/IT/ITALIANI/MOCCI                   |
| http://www.geocities.com/SunsetStrip/Palms/7010             |
---------------------------------------------------------------


     +------------------------------------------------------------+
     | 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/15/00 PST