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++; } }
/* * 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; }
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; }
/***************************************************************************** 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; }
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; }
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; }