Beispiel #1
0
void warn_in_prog( CHAR_DATA * ch, int low, int high, const char *where, int vnum, MPROG_DATA * mprog, RENUMBER_AREA * r_area )
{
   const char *p, *start_number;
   int num;

   p = mprog->comlist;
   while( *p )
   {
      if( isdigit( *p ) )
      {
         start_number = p;
         while( isdigit( *p ) && *p )
            p++;

         char* temp = (char*) malloc((p - start_number + 1) * sizeof(char));
         memcpy(temp, start_number, p - start_number + 1);
         num = atoi( temp );
         free(temp);

         if( num >= low && num <= high )
         {
            pager_printf( ch,
                          "Warning! %s prog in %s vnum %d might contain a reference to %d.\r\n(Translation: Room %d, Obj %d, Mob %d)\r\n",
                          mprog_type_to_name( mprog->type ), where, vnum, num, find_translation( num, r_area->r_room ),
                          find_translation( num, r_area->r_obj ), find_translation( num, r_area->r_mob ) );
         }
         if( *p == '\0' )
            break;
      }
      p++;
   }
}
Beispiel #2
0
/* 
 * Displays MOBprogram triggers of a mobile
 *
 * Syntax: mpstat [name]
 */
void do_mpstat(CHAR_DATA * ch, char *argument)
{
    char arg[MAX_STRING_LENGTH];
    MPROG_LIST *mprg;
    CHAR_DATA *victim;
    int i;

    one_argument(argument, arg);

    if (arg[0] == '\0') {
	send_to_char("Mpstat whom?\n\r", ch);
	return;
    }
    if ((victim = get_char_world(ch, arg)) == NULL) {
	send_to_char("No such creature.\n\r", ch);
	return;
    }
    if (!IS_NPC(victim)) {
	send_to_char("That is not a mobile.\n\r", ch);
	return;
    }
    if ((victim = get_char_world(ch, arg)) == NULL) {
	send_to_char("No such creature visible.\n\r", ch);
	return;
    }
    sprintf(arg, "Mobile #%-6d [%s]\n\r",
	    victim->pIndexData->vnum, victim->short_descr);
    send_to_char(arg, ch);

    sprintf(arg, "Delay   %-6d [%s]\n\r",
	    victim->mprog_delay,
	    victim->mprog_target == NULL
	    ? "No target" : victim->mprog_target->name);
    send_to_char(arg, ch);

    if (!victim->pIndexData->mprog_flags) {
	send_to_char("[No programs set]\n\r", ch);
	return;
    }
    for (i = 0, mprg = victim->pIndexData->mprogs; mprg != NULL;
	 mprg = mprg->next) {
	sprintf(arg, "[%2d] Trigger [%-8s] Program [%4d] Phrase [%s]\n\r",
		++i,
		mprog_type_to_name(mprg->trig_type),
		mprg->vnum,
		mprg->trig_phrase);
	send_to_char(arg, ch);
    }

    return;

}
Beispiel #3
0
char * progs( void * point )
{
static	char buf[MSL];
	char tmpbuf[MIL];
	int cnt;
	MPROG_LIST * list = *(MPROG_LIST **) point;

	buf[0] = '\0';
	strcat(buf, "Programs:\n\r");

	for (cnt=0; list; list=list->next)
        {
              if (cnt ==0)
                      strcat ( buf, "#UN  Vnum  Trigger Phrase     #u\n\r" );

              sprintf(tmpbuf, "%2d %5d %7.7s %s\n\r", cnt,
                     list->vnum, mprog_type_to_name(list->trig_type),
                     list->trig_phrase);
              strcat( buf, tmpbuf );
              cnt++;
        }

	return buf;
}
Beispiel #4
0
/*****************************************************************************
 Name:		save_mobile
 Purpose:	Save one mobile to file, new format -- Hugin
 Called by:	save_mobiles (below).
 ****************************************************************************/
void save_mobile( FILE *fp, MOB_INDEX_DATA *pMobIndex )
{
    sh_int race = pMobIndex->race;
    long temp;
    char buf[MAX_STRING_LENGTH];
    MPROG_LIST *pMprog;

    fprintf( fp, "#%d\n",         pMobIndex->vnum );
    fprintf( fp, "%s~\n",         pMobIndex->player_name );
    fprintf( fp, "%s~\n",         pMobIndex->short_descr );
    fprintf( fp, "%s~\n",         fix_string( pMobIndex->long_descr ) );
    fprintf( fp, "%s~\n",         fix_string( pMobIndex->description) );
    fprintf( fp, "%s~\n",	race_table[race].name );

    temp = DIF( pMobIndex->act, race_table[race].act );
    fprintf( fp, "%s ",	          fwrite_flag( temp,	buf ) );

    temp = DIF( pMobIndex->affected_by, race_table[race].aff );
    fprintf( fp, "%s ",	          fwrite_flag( temp,	buf ) );

    fprintf( fp, "%d %d\n",	  pMobIndex->alignment , pMobIndex->group);
    fprintf( fp, "%d ",	          pMobIndex->level );
    fprintf( fp, "%d ",	          pMobIndex->hitroll );
    fprintf( fp, "%dd%d+%d ",     pMobIndex->hit[DICE_NUMBER], 
	     	     	          pMobIndex->hit[DICE_TYPE], 
	     	     	          pMobIndex->hit[DICE_BONUS] );
    fprintf( fp, "%dd%d+%d ",     pMobIndex->mana[DICE_NUMBER], 
	     	     	          pMobIndex->mana[DICE_TYPE], 
	     	     	          pMobIndex->mana[DICE_BONUS] );
    fprintf( fp, "%dd%d+%d ",     pMobIndex->damage[DICE_NUMBER], 
	     	     	          pMobIndex->damage[DICE_TYPE], 
	     	     	          pMobIndex->damage[DICE_BONUS] );
    fprintf( fp, "%s\n",          attack_table[pMobIndex->dam_type].name );
    fprintf( fp, "%d %d %d %d\n", pMobIndex->ac[AC_PIERCE] / 10, 
	     	     	          pMobIndex->ac[AC_BASH]   / 10, 
	     	     	          pMobIndex->ac[AC_SLASH]  / 10, 
	     	     	          pMobIndex->ac[AC_EXOTIC] / 10 );

    temp = DIF( pMobIndex->off_flags, race_table[race].off );
    fprintf( fp, "%s ",           fwrite_flag( temp,	buf ) );

    temp = DIF( pMobIndex->imm_flags, race_table[race].imm );
    fprintf( fp, "%s ",	          fwrite_flag( temp,	buf ) );

    temp = DIF( pMobIndex->res_flags, race_table[race].res );
    fprintf( fp, "%s ",           fwrite_flag( temp,	buf ) );

    temp = DIF( pMobIndex->vuln_flags, race_table[race].vuln );
    fprintf( fp, "%s\n",          fwrite_flag( temp,	buf ) );

    fprintf( fp, "%s %s %s %ld\n",
	                          position_table[pMobIndex->start_pos].short_name,
	         	     	  position_table[pMobIndex->default_pos].short_name,
	         	     	  sex_table[pMobIndex->sex].name,
	         	     	  pMobIndex->wealth );

    temp = DIF( pMobIndex->form,	race_table[race].form );
    fprintf( fp, "%s ",           fwrite_flag( temp,	buf ) );

    temp = DIF( pMobIndex->parts,	race_table[race].parts );
    fprintf( fp, "%s ",      	  fwrite_flag( temp,	buf ) );

    fprintf( fp, "%s ",           size_table[pMobIndex->size].name );
    fprintf( fp, "'%s'\n",	((pMobIndex->material[0] != '\0') ? pMobIndex->material : "unknown") );

    if ((temp = DIF(race_table[race].act,pMobIndex->act)))
     	fprintf( fp, "F act %s\n", fwrite_flag(temp, buf) );

    if ((temp = DIF(race_table[race].aff,pMobIndex->affected_by)))
     	fprintf( fp, "F aff %s\n", fwrite_flag(temp, buf) );

    if ((temp = DIF(race_table[race].off,pMobIndex->off_flags)))
     	fprintf( fp, "F off %s\n", fwrite_flag(temp, buf) );

    if ((temp = DIF(race_table[race].imm,pMobIndex->imm_flags)))
     	fprintf( fp, "F imm %s\n", fwrite_flag(temp, buf) );

    if ((temp = DIF(race_table[race].res,pMobIndex->res_flags)))
     	fprintf( fp, "F res %s\n", fwrite_flag(temp, buf) );
	
    if ((temp = DIF(race_table[race].vuln,pMobIndex->vuln_flags)))
     	fprintf( fp, "F vul %s\n", fwrite_flag(temp, buf) );
	
    if ((temp = DIF(race_table[race].form,pMobIndex->form)))
     	fprintf( fp, "F for %s\n", fwrite_flag(temp, buf) );

    if ((temp = DIF(race_table[race].parts,pMobIndex->parts)))
    	fprintf( fp, "F par %s\n", fwrite_flag(temp, buf) );

    for (pMprog=pMobIndex->mprogs;pMprog;pMprog=pMprog->next)
    {
        fprintf(fp, "M '%s' %d %s~\n",
        mprog_type_to_name(pMprog->trig_type), pMprog->vnum,
                pMprog->trig_phrase);
    }

    return;
}
Beispiel #5
0
void do_mpstat(CHAR_DATA * ch, char *argument)
{
	char buf[MAX_STRING_LENGTH];
	char arg[MAX_INPUT_LENGTH];
	MPROG_DATA *mprg;
	CHAR_DATA *victim;

	one_argument(argument, arg);

	if (arg[0] == '\0') {
		send_to_char(C_DEFAULT, "MobProg stat whom?\n\r", ch);
		return;
	}

	if ((victim = get_char_world(ch, arg)) == NULL) {
		send_to_char(C_DEFAULT, "They aren't here.\n\r", ch);
		return;
	}

	if (!IS_NPC(victim)) {
		send_to_char(C_DEFAULT, "Only Mobiles can have Programs!\n\r",
			     ch);
		return;
	}

	if (!(victim->pIndexData->progtypes)) {
		send_to_char(C_DEFAULT, "That Mobile has no Programs set.\n\r",
			     ch);
		return;
	}

	sprintf(buf, "Name: %s.  Vnum: %d.\n\r",
		victim->name, victim->pIndexData->vnum);
	send_to_char(C_DEFAULT, buf, ch);

	sprintf(buf, "Short description: %s.\n\rLong  description: %s",
		victim->short_descr,
		victim->long_descr[0] != '\0' ?
		victim->long_descr : "(none).\n\r");
	send_to_char(C_DEFAULT, buf, ch);

	sprintf(buf, "Hp: %d/%d(%d).  Mana: %d/%d(%d).  Move: %d/%d(%d).\n\r",
		victim->hit, victim->perm_hit, MAX_HIT(victim),
		victim->mana, victim->perm_mana, MAX_MANA(victim),
		victim->move, victim->perm_move, MAX_MOVE(victim));
	send_to_char(C_DEFAULT, buf, ch);

#ifdef NEW_MONEY
	sprintf(buf,
		"Lv: %d.  Class: %s.  Align: %d.  AC: %d.  Exp: %d.\n\r",
		victim->level, class_numbers(victim, FALSE), victim->alignment,
		GET_AC(victim), victim->exp);
	send_to_char(C_DEFAULT, buf, ch);
	sprintf(buf, "Gold: %d   Silver: %d   Copper: %d.\n\r",
		victim->money.gold, victim->money.silver, victim->money.copper);
	send_to_char(C_DEFAULT, buf, ch);
#else
	sprintf(buf,
		"Lv: %d.  Class: %s.  Align: %d.  AC: %d.  Gold: %d.  Exp: %d.\n\r",
		victim->level, class_numbers(victim, FALSE), victim->alignment,
		GET_AC(victim), victim->gold, victim->exp);
	send_to_char(C_DEFAULT, buf, ch);
#endif
	for (mprg = victim->pIndexData->mobprogs; mprg != NULL;
	     mprg = mprg->next) {
		sprintf(buf, ">%s %s\n\r%s\n\r\n\r",
			mprog_type_to_name(mprg->type),
			mprg->arglist, mprg->comlist);
		send_to_char(C_DEFAULT, buf, ch);
	}

	return;

}
Beispiel #6
0
void build_save_mobs()
{
     MOB_INDEX_DATA *pMobIndex;
     MPROG_DATA* mprg;
     int finish_progs;
     
     if (Pointer==NULL)  /* Start */
      {
       if (CurSaveArea->first_area_mobile==NULL)
	{
	 Section++;
	 return;
	}
       send_to_char("Saving mobs.\n",CurSaveChar);
       fprintf(SaveFile,"#MOBILES\n");
       Pointer=CurSaveArea->first_area_mobile;
      }

     pMobIndex=Pointer->data;
     fprintf(SaveFile,"#%i\n",pMobIndex->vnum);
     fprintf(SaveFile,"%s~\n",pMobIndex->player_name);
     fprintf(SaveFile,"%s~\n",pMobIndex->short_descr);
     fprintf(SaveFile,"%s~\n",pMobIndex->long_descr);
     fprintf(SaveFile,"%s~\n",pMobIndex->description);
     fprintf(SaveFile,"%i %i %i S\n",pMobIndex->act,
			 pMobIndex->affected_by,pMobIndex->alignment);
     fprintf(SaveFile,"%i %i\n",pMobIndex->level,pMobIndex->sex);
     fprintf(SaveFile,"%i %i %i\n",pMobIndex->ac_mod, pMobIndex->hr_mod,
			 pMobIndex->dr_mod);

     /* Save in Envy format.... */
/*     fprintf(Envy,"#%i\n",((pMobIndex->vnum)+offset) );      */
/*     fprintf(Envy,"%s~\n",pMobIndex->player_name);           */
/*     fprintf(Envy,"%s~\n",pMobIndex->short_descr);           */
/*     fprintf(Envy,"%s~\n",pMobIndex->long_descr);   	       */
/*     fprintf(Envy,"%s~\n",pMobIndex->description);           */
/*     fprintf(Envy,"%i %i %i S\n",pMobIndex->act,             */
/*			 pMobIndex->affected_by,pMobIndex->alignment); */
/*     fprintf(Envy,"%i 0 0 0d0+0 0d0+0\n0 0\n0 0       */
/*     		%i\n",convert(pMobIndex->level),pMobIndex->sex);   */
     

   /* Write out new details - clan, class, race and skills
    * The '!' signifies new section to load_mobiles() in db.c
    */
    

   fprintf( SaveFile, "! %i %i %i %i %i %i %i\n",
      pMobIndex->class, 
      pMobIndex->clan, 
      pMobIndex->race,
      pMobIndex->position,
      pMobIndex->skills,
      pMobIndex->cast,
      pMobIndex->def );
     
     
     mprg=pMobIndex->first_mprog;
     finish_progs=0;
     while (mprg)
      {
       if (mprg->filename == NULL)
	{
	 fprintf(SaveFile,">%s ",mprog_type_to_name(mprg->type));
	 fprintf(SaveFile,"%s~\n",mprg->arglist);
	 fprintf(SaveFile,"%s~\n",mprg->comlist);
	 finish_progs=1;
	}
       mprg=mprg->next;
      }
     if (finish_progs)
     {
       fprintf(SaveFile,"|\n");
     }


     Pointer=Pointer->next;
     if (Pointer==NULL) /* End */
      {
       fprintf(SaveFile,"#0\n");
       Section++;
      }
      return;
}