Re: [Circle] Spec_Prov Problem

From: Charles Canning (charles@engr.mun.ca)
Date: 07/30/96


Hi,

there are some errors in this spec_proc that might be your problem:

On Tue, 30 Jul 1996 linebacker@microlink.net wrote:

> while (time_info.hours == 10) {
>   for (i = world[ch->in_room].contents; i; i = i->next_content) {
>     act("The Moonshadow has left dock and headed down river.", FALSE, ch, 0, 0, TO_ROOM);
>     obj_from_room(i);
>     ship_count 6~= 1;
>     return TRUE;
>     }
Because of the return statement here, the for loop will only ever execute 
once. If that is what you want, why use a for loop. 

>    }
> 
> while ((time_info.hours == 8) && (ship_count == 1)) {
>     ship = read_object(ship_num, VIRTUAL);
>     obj_to_room(ship, real_room(dock_num));
>     act("The Moonshadow has quietly pulled into dock.", FALSE, ch, 0, 0, TO_ROOM);
>     ship_count=0;
>     return TRUE;
>     } 
> 
>   return FALSE;
> }
> 

Also, everytime this function is called, ship_count is reset to 1.

I have never coded one of these before, but give this a try (i did not 
try to change much of what you wanted)

SPECIAL(dockmaster)
{

    struct obj_data *ship;
    struct obj_data *iterator;

    long shipVirtNum = 10039;
    long dockVirtNum = 2113;
    
    int MaxAllowableShips = 1;

    static int numShips = 0; /* only initialized once and stored */

    bool retCode = FALSE;    /* rename to something more descriptive */

/* start of special procedure, at 10 o'clock the ship leaves,
 at 8 o'clock it arrives. */

    if (time_info.hours == 10) { /* is it 10 o'clock, if so remove ship */
        for(iterator = world[ch->in_room].contents;iterator;;) {
            if (iterator->virtual == shipVirtNum) { /* is obj a ship? */
                act("The Moonshadow has left dock and headed down river.",\
                     FALSE, ch, 0, 0, TO_ROOM);
                obj_from_room(iterator); /* if ship not created by proc */
                numShips--;             /* you will have a problem  */
                retCode = TRUE;     /* don't know purpose of TRUE here */
            }
            iterator = iterator->next_content; /* check next obj for ship */
        }
        return retCode; /* still FALSE if no ships in room */
    }

    if ((time_info.hours == 8) && (numShips < MaxAllowableShips)){ 
    /* if it is 8 o'clock and max ships not reached, add ship to room */
        act("The Moonshadow has quietly pulled into dock.",\
             FALSE, ch, 0, 0, TO_ROOM);
        ship = real_object(shipVirtNum);
        obj_to_room(ship, real_room(dockVirtNum));
        numShips++;
        retCode = TRUE;
    }
    return retCode;
}

Later...
...Chuck

Crom of Dragon'Spire
+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
|   http://cspo.queensu.ca/~fletcher/Circle/list_faq.html   |
+-----------------------------------------------------------+



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