/**************************************************************************** * ResortMUD Version 5.0 was mainly programmed by Ntanel, Garinan, Josh, * * Badastaz, Digifuzz, Senir, Kratas, Scion, Shogar and Tagith. * * ------------------------------------------------------------------------ * * Copyright (C) 1996 - 2001 Haslage Net Electronics: MudWorld of Lorain, * * Ohio. ALL RIGHTS RESERVED See /doc/RMLicense.txt for more details. * ****************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include "mud.h" #include "axsmaug.h" extern MOB_INDEX_DATA *mob_index_hash[]; extern OBJ_INDEX_DATA *obj_index_hash[]; extern ROOM_INDEX_DATA *room_index_hash[]; EXIT_DATA *pExit; extern char * const ex_flags[]; extern char * const wear_locs[]; extern bool fBootDb; extern int top_mob_index; extern int top_obj_index; extern int top_room; extern int top_sn; extern int top_herb; extern int top_ed; extern int top_affect; extern int top_shop; extern int top_repair; extern int top_area; int extmob[500],extobj[500],top_extmob,top_extobj,addmobrange,addobjrange; int objnew[500],mobnew[500],newrange; extern int mprog_name_to_type args ( ( char* name ) ); struct sub_skill { struct sub_skill *next; struct sub_skill *prev; char *from; char *to; } *subskill,*firstsubskill,*lastsubskill; struct sub_spell { struct sub_spell *next; struct sub_spell *prev; char *from; char *to; } *subspell,*firstsubspell,*lastsubspell; struct sub_objflag { struct sub_objflag *next; struct sub_objflag *prev; char *from; char *to; } *subobjflag,*firstsubobjflag,*lastsubobjflag; struct sub_mflag { struct sub_mflag *next; struct sub_mflag *prev; char *from; char *to; } *submobflag,*firstsubmobflag,*lastsubmobflag; struct sub_aflag { struct sub_aflag *next; struct sub_aflag *prev; char *from; char *to; } *subareaflag,*firstsubareaflag,*lastsubareaflag; struct sub_affected { struct sub_affected *next; struct sub_affected *prev; char *from; char *to; } *subaffected,*firstsubaffectedflag,*lastsubaffectedflag; struct sub_mobrace { struct sub_mobrace *next; struct sub_mobrace *prev; char *from; char *to; } *submobrace,*firstsubmobrace,*lastsubmobrace; struct sub_mobclass { struct sub_mobclass *next; struct sub_mobclass *prev; char *from; char *to; } *submobclass,*firstsubmobclass,*lastsubmobclass; struct sub_moblang { struct sub_moblang *next; struct sub_moblang *prev; char *from; char *to; } *submoblang,*firstsubmoblang,*lastsubmoblang; struct sub_mobpos { struct sub_mobpos *next; struct sub_mobpos *prev; char *from; char *to; } *submobpos,*firstsubmobpos,*lastsubmobpos; struct sub_sector { struct sub_sector *next; struct sub_sector *prev; char *from; char *to; } *subsector,*firstsubsector,*lastsubsector; struct sub_bodypart { struct sub_bodypart *next; struct sub_bodypart *prev; char *from; char *to; } *subbodypart,*firstsubbodypart,*lastsubbodypart; struct sub_risflag { struct sub_risflag *next; struct sub_risflag *prev; char *from; char *to; } *subrisflag,*firstsubrisflag,*lastsubrisflag; struct sub_attack { struct sub_attack *next; struct sub_attack *prev; char *from; char *to; } *subattack,*firstsubattack,*lastsubattack; struct sub_defense { struct sub_defense *next; struct sub_defense *prev; char *from; char *to; } *subdefense,*firstsubdefense,*lastsubdefense; struct sub_objtype { struct sub_objtype *next; struct sub_objtype *prev; char *from; char *to; } *subobjtype,*firstsubobjtype,*lastsubobjtype; struct sub_wearflag { struct sub_wearflag *next; struct sub_wearflag *prev; char *from; char *to; } *subwearflag,*firstsubwearflag,*lastsubwearflag; struct sub_contflag { struct sub_contflag *next; struct sub_contflag *prev; char *from; char *to; } *subcontflag,*firstsubcontflag,*lastsubcontflag; struct sub_wearlayerflag { struct sub_wearlayerflag *next; struct sub_wearlayerflag *prev; char *from; char *to; } *subwearlayerflag,*firstsubwearlayerflag,*lastsubwearlayerflag; struct sub_liquid { struct sub_liquid *next; struct sub_liquid *prev; char *from; char *to; } *subliquid,*firstsubliquid,*lastsubliquid; struct sub_herb { struct sub_herb *next; struct sub_herb *prev; char *from; char *to; } *subherb,*firstsubherb,*lastsubherb; struct sub_trigger { struct sub_trigger *next; struct sub_trigger *prev; char *from; char *to; } *subtrigger,*firstsubtrigger,*lastsubtrigger; struct sub_traptype { struct sub_traptype *next; struct sub_traptype *prev; char *from; char *to; } *subtraptype,*firstsubtraptype,*lastsubtraptype; struct sub_trapflag { struct sub_trapflag *next; struct sub_trapflag *prev; char *from; char *to; } *subtrapflag,*firstsubtrapflag,*lastsubtrapflag; struct sub_weapontype { struct sub_weapontype *next; struct sub_weapontype *prev; char *from; char *to; } *subweapontype,*firstsubweapontype,*lastsubweapontype; struct sub_objaffects { struct sub_objaffects *next; struct sub_objaffects *prev; char *from; char *to; } *subobjaffects,*firstsubobjaffects,*lastsubobjaffects; struct sub_roomflag { struct sub_roomflag *next; struct sub_roomflag *prev; char *from; char *to; } *subroomflag,*firstsubroomflag,*lastsubroomflag; struct sub_exitdir { struct sub_exitdir *next; struct sub_exitdir *prev; char *from; char *to; } *subexitdir,*firstsubexitdir,*lastsubexitdir; struct sub_exitflag { struct sub_exitflag *next; struct sub_exitflag *prev; char *from; char *to; } *subexitflag,*firstsubexitflag,*lastsubexitflag; struct sub_spec { struct sub_spec *next; struct sub_spec *prev; char *from; char *to; } *subspec,*firstsubspec,*lastsubspec; struct sub_wearloc { struct sub_wearloc *next; struct sub_wearloc *prev; char *from; char *to; } *subwearloc,*firstsubwearloc,*lastsubwearloc; struct sub_progtrig { struct sub_progtrig *next; struct sub_progtrig *prev; char *from; char *to; } *subprogtrig,*firstsubprogtrig,*lastsubprogtrig; struct sub_progcomm { struct sub_progcomm *next; struct sub_progcomm *prev; char *from; char *to; } *subprogcomm,*firstsubprogcomm,*lastsubprogcomm; /* externals ... or to be mades */ int get_areaflag args( ( char *flag ) ); int get_actflag args( ( char *flag ) ); int get_npc_race args( ( char *flag ) ); int get_npc_class args( ( char *flag ) ); int get_risflag args( ( char *flag ) ); int get_langflag args( ( char *flag ) ); int get_partflag args( ( char *flag ) ); int get_attackflag args( ( char *flag ) ); int get_attackflag2 args( ( char *flag ) ); int get_defenseflag args( ( char *flag ) ); int get_wflag args( ( char *flag ) ); int get_mflag args( ( char *flag ) ); int get_trigflag args( ( char *flag ) ); int get_trapflag args( ( char *flag ) ); int get_rflag args( ( char *flag ) ); int get_rflag2 args( ( char *flag ) ); int get_exflag args( ( char *flag ) ); int get_wearloc args( ( char *flag ) ); void mprog_read_programs( FILE *fp, MOB_INDEX_DATA *pMobIndex); void oprog_read_programs( FILE *fp, OBJ_INDEX_DATA *pObjIndex); void rprog_read_programs( FILE *fp, ROOM_INDEX_DATA *pRoomIndex); void fix_exits(void); /* the good stuff */ /* * Pick off one argument from a string and return the rest. * Understands quotes. do not mess with case. * as opposed to native one_argument which ignores case. */ char *One_Argument( char *argument, char *arg_first ) { char cEnd; sh_int count; count = 0; while ( isspace(*argument) ) argument++; cEnd = ' '; if ( *argument == '\'' || *argument == '"' ) cEnd = *argument++; while ( *argument != '\0' || ++count >= 255 ) { if ( *argument == cEnd ) { argument++; break; } *arg_first = (*argument); arg_first++; argument++; } *arg_first = '\0'; while ( isspace(*argument) ) argument++; return argument; } char * find_sub(void *sub, char *s) { if(sub == subskill) { struct sub_skill *subit; for(subit = firstsubskill; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subspell) { struct sub_spell *subit; for(subit = firstsubspell; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subobjflag) { struct sub_objflag *subit; for(subit = firstsubobjflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == submobflag) { struct sub_mflag *subit; for(subit = firstsubmobflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subareaflag) { struct sub_aflag *subit; for(subit = firstsubareaflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subaffected) { struct sub_affected *subit; for(subit = firstsubaffectedflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == submobrace) { struct sub_mobrace *subit; for(subit = firstsubmobrace; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == submobclass) { struct sub_mobclass *subit; for(subit = firstsubmobclass; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == submoblang) { struct sub_moblang *subit; for(subit = firstsubmoblang; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == submobpos) { struct sub_mobpos *subit; for(subit = firstsubmobpos; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subsector) { struct sub_sector *subit; for(subit = firstsubsector; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subbodypart) { struct sub_bodypart *subit; for(subit = firstsubbodypart; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subrisflag) { struct sub_risflag *subit; for(subit = firstsubrisflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subattack) { struct sub_attack *subit; for(subit = firstsubattack; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subdefense) { struct sub_defense *subit; for(subit = firstsubdefense; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subobjtype) { struct sub_objtype *subit; for(subit = firstsubobjtype; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subwearflag) { struct sub_wearflag *subit; for(subit = firstsubwearflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subcontflag) { struct sub_contflag *subit; for(subit = firstsubcontflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subwearlayerflag) { struct sub_wearlayerflag *subit; for(subit = firstsubwearlayerflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subliquid) { struct sub_liquid *subit; for(subit = firstsubliquid; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subherb) { struct sub_herb *subit; for(subit = firstsubherb; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subtrigger) { struct sub_trigger *subit; for(subit = firstsubtrigger; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subtraptype) { struct sub_traptype *subit; for(subit = firstsubtraptype; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subtrapflag) { struct sub_trapflag *subit; for(subit = firstsubtrapflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subweapontype) { struct sub_weapontype *subit; for(subit = firstsubweapontype; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subobjaffects) { struct sub_objaffects *subit; for(subit = firstsubobjaffects; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subroomflag) { struct sub_roomflag *subit; for(subit = firstsubroomflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subexitdir) { struct sub_exitdir *subit; for(subit = firstsubexitdir; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subexitflag) { struct sub_exitflag *subit; for(subit = firstsubexitflag; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subspec) { struct sub_spec *subit; for(subit = firstsubspec; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subwearloc) { struct sub_wearloc *subit; for(subit = firstsubwearloc; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subprogtrig) { struct sub_progtrig *subit; for(subit = firstsubprogtrig; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } if(sub == subprogcomm) { struct sub_progcomm *subit; for(subit = firstsubprogcomm; subit; subit=subit->next) { if(!strcmp(subit->from,s)) { return subit->to; } } return NULL; } bug("unknown sub array",0); return NULL; } void clean_subs(void) { struct sub_skill *sub1; struct sub_spell *sub2; struct sub_objflag *sub3; struct sub_mflag *sub4; struct sub_aflag *sub5; struct sub_affected *sub6; struct sub_mobrace *sub7; struct sub_mobclass *sub8; struct sub_moblang *sub9; struct sub_mobpos *sub10; struct sub_sector *sub11; struct sub_bodypart *sub12; struct sub_risflag *sub13; struct sub_attack *sub14; struct sub_defense *sub15; struct sub_objtype *sub16; struct sub_wearflag *sub17; struct sub_contflag *sub18; struct sub_wearlayerflag *sub19; struct sub_liquid *sub20; struct sub_herb *sub21; struct sub_trigger *sub22; struct sub_traptype *sub23; struct sub_trapflag *sub24; struct sub_weapontype *sub25; struct sub_objaffects *sub26; struct sub_roomflag *sub27; struct sub_exitdir *sub28; struct sub_exitflag *sub29; struct sub_spec *sub30; struct sub_wearloc *sub31; struct sub_progtrig *sub32; struct sub_progcomm *sub33; for(sub1=firstsubskill;sub1;sub1=sub1->next) { STRFREE(sub1->to); STRFREE(sub1->from); } while((sub1=firstsubskill)) { UNLINK(sub1,firstsubskill,lastsubskill,next,prev); DISPOSE(sub1); } for(sub2=firstsubspell;sub2;sub2=sub2->next) { STRFREE(sub2->to); STRFREE(sub2->from); } while((sub2=firstsubspell)) { UNLINK(sub2,firstsubspell,lastsubspell,next,prev); DISPOSE(sub2); } for(sub3=firstsubobjflag;sub3;sub3=sub3->next) { STRFREE(sub3->to); STRFREE(sub3->from); } while((sub3=firstsubobjflag)) { UNLINK(sub3,firstsubobjflag,lastsubobjflag,next,prev); DISPOSE(sub3); } for(sub4=firstsubmobflag;sub4;sub4=sub4->next) { STRFREE(sub4->to); STRFREE(sub4->from); } while((sub4=firstsubmobflag)) { UNLINK(sub4,firstsubmobflag,lastsubmobflag,next,prev); DISPOSE(sub4); } for(sub5=firstsubareaflag;sub5;sub5=sub5->next) { STRFREE(sub5->to); STRFREE(sub5->from); } while((sub5=firstsubareaflag)) { UNLINK(sub5,firstsubareaflag,lastsubareaflag,next,prev); DISPOSE(sub5); } for(sub6=firstsubaffectedflag;sub6;sub6=sub6->next) { STRFREE(sub6->to); STRFREE(sub6->from); } while((sub6=firstsubaffectedflag)) { UNLINK(sub6,firstsubaffectedflag,lastsubaffectedflag,next,prev); DISPOSE(sub6); } for(sub7=firstsubmobrace;sub7;sub7=sub7->next) { STRFREE(sub7->to); STRFREE(sub7->from); } while((sub7=firstsubmobrace)) { UNLINK(sub7,firstsubmobrace,lastsubmobrace,next,prev); DISPOSE(sub7); } for(sub8=firstsubmobclass;sub8;sub8=sub8->next) { STRFREE(sub8->to); STRFREE(sub8->from); } while((sub8=firstsubmobclass)) { UNLINK(sub8,firstsubmobclass,lastsubmobclass,next,prev); DISPOSE(sub8); } for(sub9=firstsubmoblang;sub9;sub9=sub9->next) { STRFREE(sub9->to); STRFREE(sub9->from); } while((sub9=firstsubmoblang)) { UNLINK(sub9,firstsubmoblang,lastsubmoblang,next,prev); DISPOSE(sub9); } for(sub10=firstsubmobpos;sub10;sub10=sub10->next) { STRFREE(sub10->to); STRFREE(sub10->from); } while((sub10=firstsubmobpos)) { UNLINK(sub10,firstsubmobpos,lastsubmobpos,next,prev); DISPOSE(sub10); } for(sub11=firstsubsector;sub11;sub11=sub11->next) { STRFREE(sub11->to); STRFREE(sub11->from); } while((sub11=firstsubsector)) { UNLINK(sub11,firstsubsector,lastsubsector,next,prev); DISPOSE(sub11); } for(sub12=firstsubbodypart;sub12;sub12=sub12->next) { STRFREE(sub12->to); STRFREE(sub12->from); } while((sub12=firstsubbodypart)) { UNLINK(sub12,firstsubbodypart,lastsubbodypart,next,prev); DISPOSE(sub12); } for(sub13=firstsubrisflag;sub13;sub13=sub13->next) { STRFREE(sub13->to); STRFREE(sub13->from); } while((sub13=firstsubrisflag)) { UNLINK(sub13,firstsubrisflag,lastsubrisflag,next,prev); DISPOSE(sub13); } for(sub14=firstsubattack;sub14;sub14=sub14->next) { STRFREE(sub14->to); STRFREE(sub14->from); } while((sub14=firstsubattack)) { UNLINK(sub14,firstsubattack,lastsubattack,next,prev); DISPOSE(sub14); } for(sub15=firstsubdefense;sub15;sub15=sub15->next) { STRFREE(sub15->to); STRFREE(sub15->from); } while((sub15=firstsubdefense)) { UNLINK(sub15,firstsubdefense,lastsubdefense,next,prev); DISPOSE(sub15); } for(sub16=firstsubobjtype;sub16;sub16=sub16->next) { STRFREE(sub16->to); STRFREE(sub16->from); } while((sub16=firstsubobjtype)) { UNLINK(sub16,firstsubobjtype,lastsubobjtype,next,prev); DISPOSE(sub16); } for(sub17=firstsubwearflag;sub17;sub17=sub17->next) { STRFREE(sub17->to); STRFREE(sub17->from); } while((sub17=firstsubwearflag)) { UNLINK(sub17,firstsubwearflag,lastsubwearflag,next,prev); DISPOSE(sub17); } for(sub18=firstsubcontflag;sub18;sub18=sub18->next) { STRFREE(sub18->to); STRFREE(sub18->from); } while((sub18=firstsubcontflag)) { UNLINK(sub18,firstsubcontflag,lastsubcontflag,next,prev); DISPOSE(sub18); } for(sub19=firstsubwearlayerflag;sub19;sub19=sub19->next) { STRFREE(sub19->to); STRFREE(sub19->from); } while((sub19=firstsubwearlayerflag)) { UNLINK(sub19,firstsubwearlayerflag,lastsubwearlayerflag,next,prev); DISPOSE(sub19); } for(sub20=firstsubliquid;sub20;sub20=sub20->next) { STRFREE(sub20->to); STRFREE(sub20->from); } while((sub20=firstsubliquid)) { UNLINK(sub20,firstsubliquid,lastsubliquid,next,prev); DISPOSE(sub20); } for(sub21=firstsubherb;sub21;sub21=sub21->next) { STRFREE(sub21->to); STRFREE(sub21->from); } while((sub21=firstsubherb)) { UNLINK(sub21,firstsubherb,lastsubherb,next,prev); DISPOSE(sub21); } for(sub22=firstsubtrigger;sub22;sub22=sub22->next) { STRFREE(sub22->to); STRFREE(sub22->from); } while((sub22=firstsubtrigger)) { UNLINK(sub22,firstsubtrigger,lastsubtrigger,next,prev); DISPOSE(sub22); } for(sub23=firstsubtraptype;sub23;sub23=sub23->next) { STRFREE(sub23->to); STRFREE(sub23->from); } while((sub23=firstsubtraptype)) { UNLINK(sub23,firstsubtraptype,lastsubtraptype,next,prev); DISPOSE(sub23); } for(sub24=firstsubtrapflag;sub24;sub24=sub24->next) { STRFREE(sub24->to); STRFREE(sub24->from); } while((sub24=firstsubtrapflag)) { UNLINK(sub24,firstsubtrapflag,lastsubtrapflag,next,prev); DISPOSE(sub24); } for(sub25=firstsubweapontype;sub25;sub25=sub25->next) { STRFREE(sub25->to); STRFREE(sub25->from); } while((sub25=firstsubweapontype)) { UNLINK(sub25,firstsubweapontype,lastsubweapontype,next,prev); DISPOSE(sub25); } for(sub26=firstsubobjaffects;sub26;sub26=sub26->next) { STRFREE(sub26->to); STRFREE(sub26->from); } while((sub26=firstsubobjaffects)) { UNLINK(sub26,firstsubobjaffects,lastsubobjaffects,next,prev); DISPOSE(sub26); } for(sub27=firstsubroomflag;sub27;sub27=sub27->next) { STRFREE(sub27->to); STRFREE(sub27->from); } while((sub27=firstsubroomflag)) { UNLINK(sub27,firstsubroomflag,lastsubroomflag,next,prev); DISPOSE(sub27); } for(sub28=firstsubexitdir;sub28;sub28=sub28->next) { STRFREE(sub28->to); STRFREE(sub28->from); } while((sub28=firstsubexitdir)) { UNLINK(sub28,firstsubexitdir,lastsubexitdir,next,prev); DISPOSE(sub28); } for(sub29=firstsubexitflag;sub29;sub29=sub29->next) { STRFREE(sub29->to); STRFREE(sub29->from); } while((sub29=firstsubexitflag)) { UNLINK(sub29,firstsubexitflag,lastsubexitflag,next,prev); DISPOSE(sub29); } for(sub30=firstsubspec;sub30;sub30=sub30->next) { STRFREE(sub30->to); STRFREE(sub30->from); } while((sub30=firstsubspec)) { UNLINK(sub30,firstsubspec,lastsubspec,next,prev); DISPOSE(sub30); } for(sub31=firstsubwearloc;sub31;sub31=sub31->next) { STRFREE(sub31->to); STRFREE(sub31->from); } while((sub31=firstsubwearloc)) { UNLINK(sub31,firstsubwearloc,lastsubwearloc,next,prev); DISPOSE(sub31); } for(sub32=firstsubprogtrig;sub32;sub32=sub32->next) { STRFREE(sub32->to); STRFREE(sub32->from); } while((sub32=firstsubprogtrig)) { UNLINK(sub32,firstsubprogtrig,lastsubprogtrig,next,prev); DISPOSE(sub32); } for(sub33=firstsubprogcomm;sub33;sub33=sub33->next) { STRFREE(sub33->to); STRFREE(sub33->from); } while((sub33=firstsubprogcomm)) { UNLINK(sub33,firstsubprogcomm,lastsubprogcomm,next,prev); DISPOSE(sub33); } } void add_sub(void *sub, char *buf) { char arg1[1024]; char arg2[1024]; buf=buf=One_Argument(buf,arg1); buf=buf=One_Argument(buf,arg2); if(!*arg1 || !*arg2) /* probably a blank line */ return; if(sub == subskill) { struct sub_skill *subit; CREATE(subit,struct sub_skill,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubskill,lastsubskill,next,prev); return; } if(sub == subspell) { struct sub_spell *subit; CREATE(subit,struct sub_spell,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubspell,lastsubspell,next,prev); return; } if(sub == subobjflag) { struct sub_objflag *subit; CREATE(subit,struct sub_objflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubobjflag,lastsubobjflag,next,prev); return; } if(sub == submobflag) { struct sub_mflag *subit; CREATE(subit,struct sub_mflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubmobflag,lastsubmobflag,next,prev); return; } if(sub == subareaflag) { struct sub_aflag *subit; CREATE(subit,struct sub_aflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubareaflag,lastsubareaflag,next,prev); return; } if(sub == subaffected) { struct sub_affected *subit; CREATE(subit,struct sub_affected,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubaffectedflag,lastsubaffectedflag,next,prev); return; } if(sub == submobrace) { struct sub_mobrace *subit; CREATE(subit,struct sub_mobrace,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubmobrace,lastsubmobrace,next,prev); return; } if(sub == submobclass) { struct sub_mobclass *subit; CREATE(subit,struct sub_mobclass,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubmobclass,lastsubmobclass,next,prev); return; } if(sub == submobclass) { struct sub_moblang *subit; CREATE(subit,struct sub_moblang,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubmoblang,lastsubmoblang,next,prev); return; } if(sub == submobpos) { struct sub_mobpos *subit; CREATE(subit,struct sub_mobpos,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubmobpos,lastsubmobpos,next,prev); return; } if(sub == subsector) { struct sub_sector *subit; CREATE(subit,struct sub_sector,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubsector,lastsubsector,next,prev); return; } if(sub == subbodypart) { struct sub_bodypart *subit; CREATE(subit,struct sub_bodypart,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubbodypart,lastsubbodypart,next,prev); return; } if(sub == subrisflag) { struct sub_risflag *subit; CREATE(subit,struct sub_risflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubrisflag,lastsubrisflag,next,prev); return; } if(sub == subattack) { struct sub_attack *subit; CREATE(subit,struct sub_attack,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubattack,lastsubattack,next,prev); return; } if(sub == subdefense) { struct sub_defense *subit; CREATE(subit,struct sub_defense,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubdefense,lastsubdefense,next,prev); return; } if(sub == subobjtype) { struct sub_objtype *subit; CREATE(subit,struct sub_objtype,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubobjtype,lastsubobjtype,next,prev); return; } if(sub == subwearflag) { struct sub_wearflag *subit; CREATE(subit,struct sub_wearflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubwearflag,lastsubwearflag,next,prev); return; } if(sub == subcontflag) { struct sub_contflag *subit; CREATE(subit,struct sub_contflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubcontflag,lastsubcontflag,next,prev); return; } if(sub == subwearlayerflag) { struct sub_wearlayerflag *subit; CREATE(subit,struct sub_wearlayerflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubwearlayerflag,lastsubwearlayerflag,next,prev); return; } if(sub == subliquid) { struct sub_liquid *subit; CREATE(subit,struct sub_liquid,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubliquid,lastsubliquid,next,prev); return; } if(sub == subherb) { struct sub_herb *subit; CREATE(subit,struct sub_herb,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubherb,lastsubherb,next,prev); return; } if(sub == subtrigger) { struct sub_trigger *subit; CREATE(subit,struct sub_trigger,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubtrigger,lastsubtrigger,next,prev); return; } if(sub == subtraptype) { struct sub_traptype *subit; CREATE(subit,struct sub_traptype,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubtraptype,lastsubtraptype,next,prev); return; } if(sub == subtrapflag) { struct sub_trapflag *subit; CREATE(subit,struct sub_trapflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubtrapflag,lastsubtrapflag,next,prev); return; } if(sub == subweapontype) { struct sub_weapontype *subit; CREATE(subit,struct sub_weapontype,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubweapontype,lastsubweapontype,next,prev); return; } if(sub == subobjaffects) { struct sub_objaffects *subit; CREATE(subit,struct sub_objaffects,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubobjaffects,lastsubobjaffects,next,prev); return; } if(sub == subroomflag) { struct sub_roomflag *subit; CREATE(subit,struct sub_roomflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubroomflag,lastsubroomflag,next,prev); return; } if(sub == subexitdir) { struct sub_exitdir *subit; CREATE(subit,struct sub_exitdir,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubexitdir,lastsubexitdir,next,prev); return; } if(sub == subexitflag) { struct sub_exitflag *subit; CREATE(subit,struct sub_exitflag,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubexitflag,lastsubexitflag,next,prev); return; } if(sub == subspec) { struct sub_spec *subit; CREATE(subit,struct sub_spec,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubspec,lastsubspec,next,prev); return; } if(sub == subwearloc) { struct sub_wearloc *subit; CREATE(subit,struct sub_wearloc,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubwearloc,lastsubwearloc,next,prev); return; } if(sub == subprogtrig) { struct sub_progtrig *subit; CREATE(subit,struct sub_progtrig,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubprogtrig,lastsubprogtrig,next,prev); return; } if(sub == subprogcomm) { struct sub_progcomm *subit; CREATE(subit,struct sub_progcomm,1); subit->from=STRALLOC(arg1); subit->to=STRALLOC(arg2); LINK(subit,firstsubprogcomm,lastsubprogcomm,next,prev); return; } bug("unknown sub array",0); } int getmobext(AREA_DATA *tarea,int vnum) { int i; for(i=0;i<top_extmob;i++) { if(extmob[i]==vnum) { if(mobnew[i]) return mobnew[i]; if(vnum < tarea->low_m_vnum || vnum > tarea->hi_m_vnum) { mobnew[i]=newrange; return newrange++; } else { mobnew[i]=extmob[i]; return vnum; } } } bug("mob %d not found",vnum); return 0; } int getobjext(AREA_DATA *tarea,int vnum) { int i; for(i=0;i<top_extobj;i++) { if(extobj[i]==vnum) { if(objnew[i]) return objnew[i]; if(vnum < tarea->low_o_vnum || vnum > tarea->hi_o_vnum) { objnew[i]=newrange; return newrange++; } else { objnew[i]=vnum; return vnum; } } } bug("mob %d not found",vnum); return 0; } void find_externals(AREA_DATA *tarea) { RESET_DATA *treset; MOB_INDEX_DATA *pMobIndex; OBJ_INDEX_DATA *pObjIndex; int vnum; top_extmob=0; top_extobj=0; addmobrange=0; addobjrange=0; for(vnum=tarea->low_m_vnum;vnum<= tarea->hi_m_vnum;vnum++) { if(!(pMobIndex=get_mob_index(vnum))) { continue; } #ifdef DRAGONBANE if (IS_SET(pMobIndex->act,ACT_DELETED)) continue; #endif mobnew[top_extmob]=0; extmob[top_extmob++]=vnum; } for(vnum=tarea->low_o_vnum;vnum<= tarea->hi_o_vnum;vnum++) { if(!(pObjIndex=get_obj_index(vnum))) { continue; } #ifdef DRAGONBANE if (pObjIndex->item_type == ITEM_DELETED) continue; #endif objnew[top_extmob]=0; extobj[top_extobj++]=vnum; } for ( treset = tarea->first_reset; treset; treset = treset->next ) { switch( treset->command ) /* extra arg1 arg2 arg3 */ { default: break; case 'o': case 'O': case 'e': case 'E': case 'g': case 'G': case 'p': case 'P': vnum=treset->arg1; if(vnum >= tarea->low_o_vnum && vnum <= tarea->hi_o_vnum) break; objnew[top_extmob]=0; extobj[top_extobj++]=vnum; addobjrange++; break; case 'm': case 'M': vnum=treset->arg1; if(vnum >= tarea->low_m_vnum && vnum <= tarea->hi_m_vnum) break; mobnew[top_extmob]=0; extmob[top_extmob++]=vnum; addmobrange++; break; } } } static char mudprog[MAX_STRING_LENGTH]; char * make_out_prog(char *s) { char buf[MAX_STRING_LENGTH]; char arg[MAX_STRING_LENGTH]; char *bptr; bptr=buf; mudprog[0]=0; while(*s) { if(*s == '\n') { s++; *bptr=0; bptr=buf; bptr=one_argument(bptr,arg); while(*arg) { if(!str_prefix(arg,"mpoload")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); sprintf(mudprog + strlen(mudprog), "%d ",OUT_VNUM(atoi(arg))); bptr=one_argument(bptr,arg); if(*arg) { sprintf(mudprog + strlen(mudprog), "%f",OUT_LEVEL(atoi(arg))); } strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpmload")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); sprintf(mudprog + strlen(mudprog), "%d ",OUT_VNUM(atoi(arg))); strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpat")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); if(isdigit(arg[strlen(arg)-1])) { sprintf(mudprog + strlen(mudprog), "%d %s",OUT_VNUM(atoi(arg)),bptr); } else { sprintf(mudprog + strlen(mudprog), "%s %s",arg,bptr); } strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpgoto")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); if(isdigit(arg[strlen(arg)-1])) { sprintf(mudprog + strlen(mudprog), "%d ",OUT_VNUM(atoi(arg))); } else { sprintf(mudprog + strlen(mudprog), "%s ",bptr); } strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mptransfer")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); sprintf(mudprog + strlen(mudprog), "%s ",arg); bptr=one_argument(bptr,arg); if(*arg) { sprintf(mudprog + strlen(mudprog), "%d ",OUT_VNUM(atoi(arg))); } strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpopenpassage")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); sprintf(mudprog + strlen(mudprog), "%d ",OUT_VNUM(atoi(arg))); bptr=one_argument(bptr,arg); sprintf(mudprog + strlen(mudprog), "%d ",OUT_VNUM(atoi(arg))); sprintf(mudprog + strlen(mudprog), "%s",bptr); strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpclosepassage")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); sprintf(mudprog + strlen(mudprog), "%d ",OUT_VNUM(atoi(arg))); sprintf(mudprog + strlen(mudprog), "%s",bptr); strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else { sprintf(mudprog + strlen(mudprog), "%s %s\n",arg,bptr); *arg=0; } } bptr=buf; *bptr=0; } *bptr++ = *s++; } return mudprog; } char * make_in_prog(char *s,char *name,int its_vnum, int lowvnum, int hivnum,FILE *axlog) { char buf[MAX_STRING_LENGTH]; char arg[MAX_STRING_LENGTH]; char *bptr,*word; int vnum; bptr=buf; mudprog[0]=0; while(*s) { if(*s == '\n') { s++; *bptr=0; bptr=buf; bptr=one_argument(bptr,arg); if((word=find_sub(subprogcomm,arg))) { strcpy(arg,word); } if (*arg && strcmp(arg,"if") && strcmp(arg,"endif") && strcmp(arg,"else") && strcmp(arg,"~") && strcmp(arg,"|") && ! find_command(arg) && ! find_social(arg)) { fprintf(axlog,"Uknown Command,%s, in mud program for %s (%d)\n", arg,name,its_vnum); } while(*arg) { if(!str_prefix(arg,"mpoload")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); vnum=IN_VNUM(atoi(arg)); if(vnum < lowvnum || vnum > hivnum) fprintf(axlog,"mpoload references external object for %s (%d)\n", name,its_vnum); sprintf(mudprog + strlen(mudprog), "%d ",vnum); bptr=one_argument(bptr,arg); if(*arg) { sprintf(mudprog + strlen(mudprog), "%d",IN_LEVEL(atof(arg))); } strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpmload")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); vnum=IN_VNUM(atoi(arg)); if(vnum < lowvnum || vnum > hivnum) fprintf(axlog,"mpmload references external mobile for %s (%d)\n", name,its_vnum); sprintf(mudprog + strlen(mudprog), "%d ",vnum); strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpat")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); if(isdigit(arg[strlen(arg)-1])) { vnum=IN_VNUM(atoi(arg)); if(vnum < lowvnum || vnum > hivnum) fprintf(axlog,"mpat references external room for %s (%d)\n", name,its_vnum); sprintf(mudprog + strlen(mudprog), "%d %s",vnum,bptr); } else { sprintf(mudprog + strlen(mudprog), "%s %s ",arg,bptr); } strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpgoto")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); if(isdigit(arg[strlen(arg)-1])) { vnum=IN_VNUM(atoi(arg)); if(vnum < lowvnum || vnum > hivnum) fprintf(axlog,"mpgoto references external room for %s (%d)\n", name,its_vnum); sprintf(mudprog + strlen(mudprog), "%d ",vnum); } else { sprintf(mudprog + strlen(mudprog), "%s %s ",arg,bptr); } strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mptransfer")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); sprintf(mudprog + strlen(mudprog), "%s ",arg); bptr=one_argument(bptr,arg); if(*arg) { vnum=IN_VNUM(atoi(arg)); if(vnum < lowvnum || vnum > hivnum) fprintf(axlog,"mptransfer references external room for %s (%d)\n", name,its_vnum); sprintf(mudprog + strlen(mudprog), "%d ",vnum); } strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpopenpassage")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); vnum=IN_VNUM(atoi(arg)); if(vnum < lowvnum || vnum > hivnum) fprintf(axlog,"mpopenpassage references external room for %s (%d)\n", name,its_vnum); sprintf(mudprog + strlen(mudprog), "%d ",vnum); bptr=one_argument(bptr,arg); vnum=IN_VNUM(atoi(arg)); if(vnum < lowvnum || vnum > hivnum) fprintf(axlog,"mpopenpassage references external room for %s (%d)\n", name,its_vnum); sprintf(mudprog + strlen(mudprog), "%d ",vnum); sprintf(mudprog + strlen(mudprog), "%s",bptr); strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else if(!str_prefix(arg,"mpclosepassage")) { strcat(mudprog,arg); strcat(mudprog," "); bptr=one_argument(bptr,arg); vnum=IN_VNUM(atoi(arg)); if(vnum < lowvnum || vnum > hivnum) fprintf(axlog,"mpclosepassage references external room for %s (%d)\n", name,its_vnum); sprintf(mudprog + strlen(mudprog), "%d ",vnum); sprintf(mudprog + strlen(mudprog), "%s",bptr); strcat(mudprog,"\n"); bptr=one_argument(bptr,arg); continue; } else { sprintf(mudprog + strlen(mudprog), "%s %s\n",arg,bptr); *arg=0; } } bptr=buf; *bptr=0; } *bptr++ = *s++; } return mudprog; } void do_ax_import(CHAR_DATA *ch, char *argument) { FILE *fp,*axlog; char buff[2048]; char *buf=buff; char command[80]; char word[80]; char filename[80]; AREA_DATA *area=NULL,*tarea=NULL; char *s; int subtype=0,i=0,iHash=0,letter=0,extra=0,arg1=0,arg2=0,arg3=0; int buyslot=0; MOB_INDEX_DATA *pMobIndex=NULL; OBJ_INDEX_DATA *pObjIndex=NULL; ROOM_INDEX_DATA *pRoomIndex=NULL; SHOP_DATA *pShop; REPAIR_DATA *rShop; int noextlink=0; if(! *argument) { display(version); display("aximport <filename.aex> [newstartvnum] [NOEXTLINK]\n\r"); return; } argument=One_Argument(argument,filename); argument=One_Argument(argument,word); fBootDb=TRUE; if(isdigit(*word)) { renumber=atoi(word); argument=One_Argument(argument,word); } if(!str_cmp(word,"noextlink")) { noextlink=1; } if(strchr(filename,'/')) { sprintf(buf,"../exchange/%s",filename); strcpy(strrchr(buf,'/'),"/axsub.dat"); } else { sprintf(buf,"../exchange/axsub.dat"); } if((fp=fopen(buf,"r"))==NULL) { display("Can't open "); display(buf); display("\n\r"); return; } while(fgets(buff,1000,fp)) { buf=strip_cr(buff); if(strrchr(buf,'\n')) *(strrchr(buf,'\n'))=0; buf=One_Argument(buf,command); if(!strcmp(command,"#GOLDADJUSTPERCENT")) { goldadjust=atof(buf); } if(!strcmp(command,"#SPELLS")) { subtype=1; continue; } if(!strcmp(command,"#SKILLS")) { subtype=2; continue; } if(!strcmp(command,"#OBJFLAGS")) { subtype=3; continue; } if(!strcmp(command,"#MOBFLAGS")) { subtype=4; continue; } if(!strcmp(command,"#AREAFLAGS")) { subtype=5; continue; } if(!strcmp(command,"#AFFECTED")) { subtype=6; continue; } if(!strcmp(command,"#MOBRACE")) { subtype=7; continue; } if(!strcmp(command,"#MOBCLASS")) { subtype=8; continue; } if(!strcmp(command,"#MOBLANGUAGES")) { subtype=9; continue; } if(!strcmp(command,"#MOBPOSITIONS")) { subtype=10; continue; } if(!strcmp(command,"#SECTORTYPES")) { subtype=11; continue; } if(!strcmp(command,"#BODYPARTS")) { subtype=12; continue; } if(!strcmp(command,"#RISFLAGS")) { subtype=13; continue; } if(!strcmp(command,"#MOBATTACKS")) { subtype=14; continue; } if(!strcmp(command,"#MOBDEFENSES")) { subtype=15; continue; } if(!strcmp(command,"#OBJTYPES")) { subtype=16; continue; } if(!strcmp(command,"#WEARFLAGS")) { subtype=17; continue; } if(!strcmp(command,"#CONTAINERFLAGS")) { subtype=18; continue; } if(!strcmp(command,"#OBJWEARLAYERS")) { subtype=19; continue; } if(!strcmp(command,"#LIQUIDTYPES")) { subtype=20; continue; } if(!strcmp(command,"#HERBS")) { subtype=21; continue; } if(!strcmp(command,"#TRAPTRIGGERS")) { subtype=22; continue; } if(!strcmp(command,"#TRAPTYPES")) { subtype=23; continue; } if(!strcmp(command,"#TRAPFLAGS")) { subtype=24; continue; } if(!strcmp(command,"#WEAPONTYPES")) { subtype=25; continue; } if(!strcmp(command,"#OBJAPPLYTYPES")) { subtype=26; continue; } if(!strcmp(command,"#ROOMFLAGS")) { subtype=27; continue; } if(!strcmp(command,"#ROOMEXITDIRS")) { subtype=28; continue; } if(!strcmp(command,"#ROOMEXITFLAGS")) { subtype=29; continue; } if(!strcmp(command,"#SPECIALFUNCTIONS")) { subtype=30; continue; } if(!strcmp(command,"#WEARLOCATIONS")) { subtype=31; continue; } if(!strcmp(command,"#PROGTRIGGERS")) { subtype=32; continue; } if(!strcmp(command,"#PROGCOMMANDS")) { subtype=33; continue; } if(!strcmp(command,"#END")) { subtype=0; break; } buf=strip_cr(buff); if(strrchr(buf,'\n')) *(strrchr(buf,'\n'))=0; switch(subtype) { case 0: break; case 1: add_sub(subskill,buf); break; case 2: add_sub(subspell,buf); break; case 3: add_sub(subobjflag,buf); break; case 4: add_sub(submobflag,buf); break; case 5: add_sub(subareaflag,buf); break; case 6: add_sub(subaffected,buf); break; case 7: add_sub(submobrace,buf); break; case 8: add_sub(submobclass,buf); break; case 9: add_sub(submoblang,buf); break; case 10: add_sub(submobpos,buf); break; case 11: add_sub(subsector,buf); break; case 12: add_sub(subbodypart,buf); break; case 13: add_sub(subrisflag,buf); break; case 14: add_sub(subattack,buf); break; case 15: add_sub(subdefense,buf); break; case 16: add_sub(subobjtype,buf); break; case 17: add_sub(subwearflag,buf); break; case 18: add_sub(subcontflag,buf); break; case 19: add_sub(subwearlayerflag,buf); break; case 20: add_sub(subliquid,buf); break; case 21: add_sub(subherb,buf); break; case 22: add_sub(subtrigger,buf); break; case 23: add_sub(subtraptype,buf); break; case 24: add_sub(subtrapflag,buf); break; case 25: add_sub(subweapontype,buf); break; case 26: add_sub(subobjaffects,buf); break; case 27: add_sub(subroomflag,buf); break; case 28: add_sub(subexitdir,buf); break; case 29: add_sub(subexitflag,buf); break; case 30: add_sub(subspec,buf); break; case 31: add_sub(subwearloc,buf); break; case 32: add_sub(subprogtrig,buf); break; case 33: add_sub(subprogcomm,buf); break; default: sprintf(buf,"Unknow SubType %d\n",subtype); bug(buf,0); break; } } fclose(fp); sprintf(buf,"../exchange/%s",filename); if((fp=fopen(buf,"r"))==NULL) { display("Can't open "); display(buf); display("\n\r"); return; } strcat(buf,".log"); if((axlog=fopen(buf,"w"))==NULL) { display("Can't open "); display(buf); display("\n\r"); return; } while(fgets(buff,2040,fp)) { buf=strip_cr(buff); if(strrchr(buf,'\n')) *(strrchr(buf,'\n'))=0; buf=One_Argument(buf,command); if(!strcmp(command,"#EXPORTEDBY")) { /* documentary */ continue; } if(!strcmp(command,"#AREANAME")) { CREATE(area,AREA_DATA,1); LINK( area, first_build, last_build, next, prev ); top_area++; area=last_build; area->name=STRALLOC(buf); if(strchr(filename,'/')) { strcpy(filename,strrchr(filename,'/')+1); } area->filename=STRALLOC(filename); continue; } if(!strcmp(command,"#STARTVNUM")) { startvnum = atoi(buf); if(renumber < 1) { renumber=startvnum; } if(IN_VNUM(0) > MAX_POSSIBLE_VNUM) { display("Out of range vnum detected, try aiming a little lower\n\r"); STRFREE(area->filename); STRFREE(area->name); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); top_area--; return; } continue; } if(!strcmp(command,"#AUTHOR")) { area->author=STRALLOC(buf); continue; } if(!strcmp(command,"#SOFTRANGE")) { buf=One_Argument(buf,word); area->low_soft_range=IN_LEVEL(atof(word)); buf=One_Argument(buf,word); area->hi_soft_range=IN_LEVEL(atof(word)); continue; } if(!strcmp(command,"#HARDRANGE")) { buf=One_Argument(buf,word); area->low_hard_range=IN_LEVEL(atof(word)); buf=One_Argument(buf,word); area->hi_hard_range=IN_LEVEL(atof(word)); continue; } if(!strcmp(command,"#ROOMRANGE")) { buf=One_Argument(buf,word); area->low_r_vnum=IN_VNUM(atoi(word)); buf=One_Argument(buf,word); area->hi_r_vnum=IN_VNUM(atoi(word)); if(IN_VNUM(atoi(word)) > MAX_POSSIBLE_VNUM) { display("Out of range vnum detected, try aiming a little lower\n\r"); STRFREE(area->filename); STRFREE(area->name); STRFREE(area->author); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); return; } for(tarea=first_area;tarea;tarea=tarea->next) { if(area==tarea) { continue; } if((area->low_r_vnum >=tarea->low_r_vnum && area->low_r_vnum <= tarea->hi_r_vnum) || (area->hi_r_vnum >=tarea->low_r_vnum && area->hi_r_vnum <= tarea->hi_r_vnum)) { sprintf(buff,"%s (%d - %d) would overlap %s (%d - %d) rooms\n\r", area->name, area->low_r_vnum, area->hi_r_vnum, tarea->name, tarea->low_r_vnum, tarea->hi_r_vnum); display(buff); STRFREE(area->filename); STRFREE(area->name); STRFREE(area->author); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); return; } } for(tarea=first_build;tarea;tarea=tarea->next) { if(area==tarea) { continue; } if((area->low_r_vnum >=tarea->low_r_vnum && area->low_r_vnum <= tarea->hi_r_vnum) || (area->hi_r_vnum >=tarea->low_r_vnum && area->hi_r_vnum <= tarea->hi_r_vnum)) { sprintf(buff,"%s (%d - %d) would overlap %s (%d - %d) rooms\n\r", area->name, area->low_r_vnum, area->hi_r_vnum, tarea->name, tarea->low_r_vnum, tarea->hi_r_vnum); display(buff); STRFREE(area->filename); STRFREE(area->name); STRFREE(area->author); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); return; } } continue; } if(!strcmp(command,"#MOBRANGE")) { buf=One_Argument(buf,word); area->low_m_vnum=IN_VNUM(atoi(word)); buf=One_Argument(buf,word); area->hi_m_vnum=IN_VNUM(atoi(word)); if(IN_VNUM(atoi(word)) > MAX_POSSIBLE_VNUM) { display("Out of range vnum detected, try aiming a little lower\n\r"); STRFREE(area->filename); STRFREE(area->name); STRFREE(area->author); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); return; } for(tarea=first_area;tarea;tarea=tarea->next) { if(area==tarea) { continue; } if((area->low_m_vnum >=tarea->low_m_vnum && area->low_m_vnum <= tarea->hi_m_vnum) || (area->hi_m_vnum >=tarea->low_m_vnum && area->hi_m_vnum <= tarea->hi_m_vnum)) { sprintf(buff,"%s (%d - %d) would overlap %s (%d - %d) mobs\n\r", area->name, area->low_m_vnum, area->hi_m_vnum, tarea->name, tarea->low_m_vnum, tarea->hi_m_vnum); display(buff); STRFREE(area->filename); STRFREE(area->name); STRFREE(area->author); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); return; } } for(tarea=first_build;tarea;tarea=tarea->next) { if(area==tarea) { continue; } if((area->low_m_vnum >=tarea->low_m_vnum && area->low_m_vnum <= tarea->hi_m_vnum) || (area->hi_m_vnum >=tarea->low_m_vnum && area->hi_m_vnum <= tarea->hi_m_vnum)) { sprintf(buff,"%s (%d - %d) would overlap %s (%d - %d) mobs\n\r", area->name, area->low_m_vnum, area->hi_m_vnum, tarea->name, tarea->low_m_vnum, tarea->hi_m_vnum); display(buff); STRFREE(area->filename); STRFREE(area->name); STRFREE(area->author); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); return; } } continue; } if(!strcmp(command,"#OBJRANGE")) { buf=One_Argument(buf,word); area->low_o_vnum=IN_VNUM(atoi(word)); buf=One_Argument(buf,word); area->hi_o_vnum=IN_VNUM(atoi(word)); if(IN_VNUM(atoi(word)) > MAX_POSSIBLE_VNUM) { display("Out of range vnum detected, try aiming a little lower\n\r"); STRFREE(area->filename); STRFREE(area->name); STRFREE(area->author); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); return; } for(tarea=first_area;tarea;tarea=tarea->next) { if(area==tarea) { continue; } if((area->low_o_vnum >=tarea->low_o_vnum && area->low_o_vnum <= tarea->hi_o_vnum) || (area->hi_o_vnum >=tarea->low_o_vnum && area->hi_o_vnum <= tarea->hi_o_vnum)) { sprintf(buff,"%s (%d - %d) would overlap %s (%d - %d) objects\n\r", area->name, area->low_o_vnum, area->hi_o_vnum, tarea->name, tarea->low_o_vnum, tarea->hi_o_vnum); display(buff); STRFREE(area->filename); STRFREE(area->name); STRFREE(area->author); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); return; } } for(tarea=first_build;tarea;tarea=tarea->next) { if(area==tarea) { continue; } if((area->low_o_vnum >=tarea->low_o_vnum && area->low_o_vnum <= tarea->hi_o_vnum) || (area->hi_o_vnum >=tarea->low_o_vnum && area->hi_o_vnum <= tarea->hi_o_vnum)) { sprintf(buff,"%s (%d - %d) would overlap %s (%d - %d) objects\n\r", area->name, area->low_o_vnum, area->hi_o_vnum, tarea->name, tarea->low_o_vnum, tarea->hi_o_vnum); display(buff); STRFREE(area->filename); STRFREE(area->name); STRFREE(area->author); UNLINK( area, first_build, last_build, next, prev ); DISPOSE(area); return; } } continue; } if(!strcmp(command,"#RESETMSG")) { area->resetmsg=STRALLOC(buf); continue; } if(!strcmp(command,"#RESETFREQUENCY")) { area->reset_frequency = atoi(buf); continue; } if(!strcmp(command,"#RECALL")) { continue; } if(!strcmp(command,"#AREAFLAGS")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subareaflag,word))) { strcpy(word,s); } if((i=get_areaflag(word)) > -1) { SET_BIT(area->flags,1 << i); } else { fprintf(axlog,"Unknown area flag: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"#ECONOMY")) { buf=One_Argument(buf,word); area->high_economy=atoi(word); buf=One_Argument(buf,word); area->low_economy=atoi(word); continue; } if(!strcmp(command,"#MOBILES")) { continue; } if(!strcmp(command,"!mobvnum")) { CREATE(pMobIndex,MOB_INDEX_DATA,1); pMobIndex->vnum=IN_VNUM(atoi(buf)); iHash = pMobIndex->vnum % MAX_KEY_HASH; pMobIndex->next = mob_index_hash[iHash]; mob_index_hash[iHash] = pMobIndex; #ifdef DRAGONBANE pMobIndex->talk=STRALLOC(""); #endif top_mob_index++; continue; } if(!strcmp(command,"@mobkeywordname")) { pMobIndex->player_name = STRALLOC(buf); continue; } if(!strcmp(command,"@mobactionname")) { pMobIndex->short_descr = STRALLOC(buf); continue; } if(!strcmp(command,"@mobinroomname")) { strcat(buf,"\n\r"); pMobIndex->long_descr = STRALLOC(buf); continue; } if(!strcmp(command,"@moblookdescription")) { pMobIndex->description=fread_string(fp); continue; } if(!strcmp(command,"@mobtalkreply")) { #ifdef DRAGONBANE pMobIndex->talk=fread_string(fp); #endif continue; } if(!strcmp(command,"@mobactflags")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(submobflag,word))) { strcpy(word,s); } if((i=get_actflag(word)) > -1) { #ifdef SMAUG102 SET_BIT(pMobIndex->act,1 << i); #endif #ifdef SMAUG14 xSET_BIT(pMobIndex->act,i); #endif } else { fprintf(axlog,"Unknown mobactflag flag: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobaffectedby")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subaffected,word))) { strcpy(word,s); } if((i=get_aflag(word)) > -1) { #ifdef SMAUG102 SET_BIT(pMobIndex->affected_by,1 << i); #endif #ifdef SMAUG14 xSET_BIT(pMobIndex->affected_by,i); #endif } else { fprintf(axlog,"Unknown mobaffectedby flag: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobalignment")) { pMobIndex->alignment=(int)(atof(buf) * MAX_ALIGNMENT); continue; } if(!strcmp(command,"@moblevel")) { pMobIndex->level=IN_LEVEL(atof(buf)); continue; } if(!strcmp(command,"@mobthac0")) { pMobIndex->mobthac0=atoi(buf); continue; } if(!strcmp(command,"@mobarmorclass")) { pMobIndex->ac=(int)(atof(buf) * MAX_MOBARMORCLASS); continue; } if(!strcmp(command,"@mobnumberofhitdice")) { pMobIndex->hitnodice=IN_DICE(atof(buf)); continue; } if(!strcmp(command,"@mobsizeofhitdice")) { pMobIndex->hitsizedice=IN_DICE(atof(buf)); continue; } if(!strcmp(command,"@mobplustohitdice")) { pMobIndex->hitplus=IN_DICE(atof(buf)); continue; } if(!strcmp(command,"@mobnumberofdamagedice")) { pMobIndex->damnodice=IN_DICE(atof(buf)); continue; } if(!strcmp(command,"@mobsizeofdamagedice")) { pMobIndex->damsizedice=IN_DICE(atof(buf)); continue; } if(!strcmp(command,"@mobplustodamagedice")) { pMobIndex->damplus=IN_DICE(atof(buf)); continue; } if(!strcmp(command,"@mobgold")) { pMobIndex->gold= GOLDADJ(atoi(buf)); continue; } if(!strcmp(command,"@mobexperience")) { pMobIndex->exp=atoi(buf); continue; } if(!strcmp(command,"@mobposition")) { i=0; if((s=find_sub(submobpos,word))) { strcpy(buf,s); } while(ax_position[i]) { if(!strcmp(ax_position[i],buf)) { pMobIndex->position=i; break; } i++; } if(!ax_position[i]) { fprintf(axlog,"Unknown mobposition %s\n",buf); } continue; } if(!strcmp(command,"@mobdefaultposition")) { i=0; if((s=find_sub(submobpos,word))) { strcpy(buf,s); } while(ax_position[i]) { if(!strcmp(ax_position[i],buf)) { pMobIndex->defposition=i; break; } i++; } if(!ax_position[i]) { fprintf(axlog,"Unknown mobdefaultposition %s\n",buf); } continue; } if(!strcmp(command,"@mobsex")) { i=0; while(ax_sex[i]) { if(!strcmp(ax_sex[i],buf)) { pMobIndex->sex=i; break; } i++; } if(!ax_sex[i]) { fprintf(axlog,"Unknown mobsex %s\n",buf); } continue; } if(!strcmp(command,"@mobstrength")) { pMobIndex->perm_str = (int) (atof(buf) * MAX_PRIME_ATTRIB); continue; } if(!strcmp(command,"@mobintelligence")) { pMobIndex->perm_int = (int) (atof(buf) * MAX_PRIME_ATTRIB); continue; } if(!strcmp(command,"@mobwisdom")) { pMobIndex->perm_wis = (int) (atof(buf) * MAX_PRIME_ATTRIB); continue; } if(!strcmp(command,"@mobdexterity")) { pMobIndex->perm_dex = (int) (atof(buf) * MAX_PRIME_ATTRIB); continue; } if(!strcmp(command,"@mobconstitution")) { pMobIndex->perm_con = (int) (atof(buf) * MAX_PRIME_ATTRIB); continue; } if(!strcmp(command,"@mobcharisma")) { pMobIndex->perm_cha = (int) (atof(buf) * MAX_PRIME_ATTRIB); continue; } if(!strcmp(command,"@mobluck")) { pMobIndex->perm_lck = (int) (atof(buf) * MAX_PRIME_ATTRIB); continue; } if(!strcmp(command,"@mobsavevspoisondeath")) { pMobIndex->saving_poison_death=atoi(buf); continue; } if(!strcmp(command,"@mobsavevswand")) { pMobIndex->saving_wand=atoi(buf); continue; } if(!strcmp(command,"@mobsavevsparapetri")) { pMobIndex->saving_para_petri=atoi(buf); continue; } if(!strcmp(command,"@mobsavevsbreath")) { pMobIndex->saving_breath=atoi(buf); continue; } if(!strcmp(command,"@mobsavevsspellstaff")) { pMobIndex->saving_spell_staff=atoi(buf); continue; } if(!strcmp(command,"@mobsavevspsionic")) { #ifdef DRAGONBANE pMobIndex->saving_psionics=atoi(buf); #endif continue; } if(!strcmp(command,"@mobrace")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(submobrace,word))) { strcpy(word,s); } if((i=get_npc_race(word)) > -1) { pMobIndex->race=i; } else { fprintf(axlog,"Unknown mobrace: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobclass")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(submobclass,word))) { strcpy(word,s); } if((i=get_npc_class(word)) > -1) { pMobIndex->class=i; } else { fprintf(axlog,"Unknown mobclass: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobheight")) { pMobIndex->height=atoi(buf); continue; } if(!strcmp(command,"@mobweight")) { pMobIndex->weight=atoi(buf); continue; } if(!strcmp(command,"@mobspeaks")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(submoblang,word))) { strcpy(word,s); } if((i=get_langflag(word)) > -1) { SET_BIT(pMobIndex->speaks,1 << i); } else { fprintf(axlog,"Unknown mobspeaks: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobspeaking")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(submoblang,word))) { strcpy(word,s); } if((i=get_langflag(word)) > -1) { SET_BIT(pMobIndex->speaking,1 << i); } else { fprintf(axlog,"Unknown mobspeaking: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobnumberofattacks")) { pMobIndex->numattacks=atoi(buf); continue; } if(!strcmp(command,"@mobhoardroom")) { #ifdef DRAGONBANE pMobIndex->hoard=IN_VNUM(atoi(buf)); #endif continue; } if(!strcmp(command,"@mobstayterraintype")) { #ifdef DRAGONBANE i=0; if((s=find_sub(subsector,word))) { strcpy(buf,s); } while(ax_sector_names[i]) { if(!strcmp(ax_sector_names[i],buf)) { pMobIndex->terrain=i; break; } i++; } if(!ax_sector_names[i]) { fprintf(axlog,"Unknown mobstayterraintype %s\n",buf); } #endif continue; } if(!strcmp(command,"@mobhitroll")) { pMobIndex->hitroll=atoi(buf); continue; } if(!strcmp(command,"@mobdamageroll")) { pMobIndex->damroll=atoi(buf); continue; } if(!strcmp(command,"@mobbodyparts")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subbodypart,word))) { strcpy(word,s); } if((i=get_partflag(word)) > -1) { SET_BIT(pMobIndex->xflags,1 << i); } else { fprintf(axlog,"Unknown mobbodyparts: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobisresistant")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subrisflag,word))) { strcpy(word,s); } if((i=get_risflag(word)) > -1) { SET_BIT(pMobIndex->resistant,1 << i); } else { fprintf(axlog,"Unknown mobisresistant: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobisimmune")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subrisflag,word))) { strcpy(word,s); } if((i=get_risflag(word)) > -1) { SET_BIT(pMobIndex->immune,1 << i); } else { fprintf(axlog,"Unknown mobisimmune: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobissusceptible")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subrisflag,word))) { strcpy(word,s); } if((i=get_risflag(word)) > -1) { SET_BIT(pMobIndex->susceptible,1 << i); } else { fprintf(axlog,"Unknown mobissusceptible: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobattacks")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subattack,word))) { strcpy(word,s); } if((i=get_attackflag(word)) > -1) { #ifdef SMAUG102 SET_BIT(pMobIndex->attacks,1 << i); #endif #ifdef SMAUG14 xSET_BIT(pMobIndex->attacks, i); #endif }/* I have 2 attack bit vectors .. soo */ #ifdef DRAGONBANE else if((i=get_attackflag2(word)) > -1) { SET_BIT(pMobIndex->attack2,1 << i); } #endif else { fprintf(axlog,"Unknown mobattacks: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobdefenses")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subdefense,word))) { strcpy(word,s); } if((i=get_defenseflag(word)) > -1) { #ifdef SMAUG102 SET_BIT(pMobIndex->defenses,1 << i); #endif #ifdef SMAUG14 xSET_BIT(pMobIndex->defenses, i); #endif } else { fprintf(axlog,"Unknown mobdefenses: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@mobspecial")) { if((s=find_sub(subspec,buf))) { strcpy(buf,s); } if(spec_lookup(buf)) { pMobIndex->spec_fun=spec_lookup(buf); } else { fprintf(axlog,"Unknown mobspecial: %s\n",buf); } continue; } if(!strcmp(command,"@mobprograms")) { MPROG_DATA *mprog = NULL; char *prog; int err=0; char progbuf[MAX_STRING_LENGTH]; while(fgets(buff,1000,fp)) { if(strrchr(buff,'\n')) *(strrchr(buff,'\n'))=0; if(strrchr(buff,'~')) *(strrchr(buff,'~'))=0; buf=strip_cr(buff); buf=One_Argument(buf,word); if(!strcmp(word,">")) { err=0; buf=One_Argument(buf,word); if((s=find_sub(subprogtrig,word))) { strcpy(word,s); } i = mprog_name_to_type(word); if(i==ERROR_PROG) { err=1; fprintf(axlog,"Unknown mob prog trigger %s\n",word); continue; } if(pMobIndex->mudprogs) { mprog->comlist=STRALLOC(progbuf); CREATE( mprog->next, MPROG_DATA, 1 ); mprog = mprog->next; } else { CREATE( mprog, MPROG_DATA, 1 ); pMobIndex->mudprogs=mprog; } progbuf[0]=0; mprog->type=i; #ifdef SMAUG14 xSET_BIT(pMobIndex->progtypes,mprog->type); #else pMobIndex->progtypes = pMobIndex->progtypes | mprog->type; #endif mprog->arglist=STRALLOC(buf); } else if(!strcmp(word,"|")) { mprog->comlist=STRALLOC(progbuf); mprog->next = NULL; break; } else { if(err) { continue; } sprintf(progbuf + strlen(progbuf),"%s\n",buff); } } for ( mprog = pMobIndex->mudprogs; mprog; mprog = mprog->next ) { prog=make_in_prog(mprog->comlist, pMobIndex->player_name, pMobIndex->vnum, area->low_m_vnum, area->hi_m_vnum, axlog); STRFREE(mprog->comlist); mprog->comlist=STRALLOC(prog); } continue; } if(!strcmp(command,"#OBJECTS")) { continue; } if(!strcmp(command,"!objvnum")) { CREATE(pObjIndex,OBJ_INDEX_DATA,1); pObjIndex->vnum=IN_VNUM(atoi(buf)); iHash = pObjIndex->vnum % MAX_KEY_HASH; pObjIndex->next = obj_index_hash[iHash]; obj_index_hash[iHash] = pObjIndex; top_obj_index++; pObjIndex->action_desc = STRALLOC(""); continue; } if(!strcmp(command,"@objlevel")) { pObjIndex->level=IN_VNUM(atoi(buf)); continue; } if(!strcmp(command,"@objkeywordname")) { pObjIndex->name = STRALLOC(buf); continue; } if(!strcmp(command,"@objinventoryname")) { pObjIndex->short_descr = STRALLOC(buf); continue; } if(!strcmp(command,"@objinroomname")) { strcat(buf,"\n\r"); pObjIndex->description = STRALLOC(buf); continue; } if(!strcmp(command,"@objactiondescription")) { STRFREE(pObjIndex->action_desc); pObjIndex->action_desc = STRALLOC(buf); continue; } if(!strcmp(command,"@objitemtype")) { buf=One_Argument(buf,word); if((s=find_sub(subobjtype,word))) { strcpy(word,s); } if((i=get_otype(word)) > -1) { pObjIndex->item_type=i; } else { fprintf(axlog,"Unknown objtype: %s\n",word); } continue; } if(!strcmp(command,"@objflags")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subobjflag,word))) { strcpy(word,s); } if((i=get_oflag(word)) > -1) { #ifdef SMAUG102 SET_BIT(pObjIndex->extra_flags,1 << i); #endif #ifdef SMAUG14 xSET_BIT(pObjIndex->extra_flags, i); #endif } else if((i=get_mflag(word)) > -1) { SET_BIT(pObjIndex->magic_flags,1 << i); } else { fprintf(axlog,"Unknown objflag: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@objwearflags")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subwearflag,word))) { strcpy(word,s); } if((i=get_wflag(word)) > -1) { SET_BIT(pObjIndex->wear_flags,1 << i); } else { fprintf(axlog,"Unknown wearflag: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@objwearlayers")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subwearlayerflag,word))) { strcpy(word,s); } i=0; while(ax_layers[i]) { if(!strcmp(word,ax_layers[i])) { SET_BIT(pObjIndex->layers,1 << i); break; } i++; } if(!ax_layers[i]) { fprintf(axlog,"Unknown objwearlayer: %s\n",word); } buf=One_Argument(buf,word); } continue; } if (!strcmp(command,"@objcurrac") || !strcmp(command,"@objorgac") || !strcmp(command,"@objcapacity") || !strcmp(command,"@objcontainerflags") || !strcmp(command,"@objkeyvnum") || !strcmp(command,"@objcontainercondtn") || !strcmp(command,"@objdrinkcapacity") || !strcmp(command,"@objdrinkquantity") || !strcmp(command,"@objliquidtype") || !strcmp(command,"@objliquidpoisonflag") || !strcmp(command,"@objfoodvalue") || !strcmp(command,"@objfoodcondition") || !strcmp(command,"@objfoodpoisonflag") || !strcmp(command,"@objherbdoses") || !strcmp(command,"@objherbname") || !strcmp(command,"@objkeylockvnum") || !strcmp(command,"@objtriggerflags") || !strcmp(command,"@objtrigtoroom") || !strcmp(command,"@objrandomizeroom") || !strcmp(command,"@objtrigfromroom") || !strcmp(command,"@objlighthrsleft") || !strcmp(command,"@objnumbercoins") || !strcmp(command,"@objcointype") || !strcmp(command,"@objspelllevel") || !strcmp(command,"@objspell1") || !strcmp(command,"@objspell2") || !strcmp(command,"@objspell3") || !strcmp(command,"@objmaxcharge") || !strcmp(command,"@objnumcharge") || !strcmp(command,"@objchargedelay") || !strcmp(command,"@objtrapcharges") || !strcmp(command,"@objtraptype") || !strcmp(command,"@objtraplevel") || !strcmp(command,"@objtrapflag") || !strcmp(command,"@objtreasuretype") || !strcmp(command,"@objtreasurecond") || !strcmp(command,"@objweaponcond") || !strcmp(command,"@objweaponnumdice") || !strcmp(command,"@objweaponsizedice") || !strcmp(command,"@objweapontype") || !strcmp(command,"@objpenusesleft")) { switch ( pObjIndex->item_type ) { case ITEM_ARMOR: if(!strcmp(command,"@objcurrac")) { pObjIndex->value[0]=atoi(buf); } if(!strcmp(command,"@objorgac")) { pObjIndex->value[1]=atoi(buf); } break; case ITEM_CONTAINER: if(!strcmp(command,"@objcapacity")) { pObjIndex->value[0]=atoi(buf); } if(!strcmp(command,"@objcontainerflags")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subcontflag,word))) { strcpy(word,s); } if((i=get_cont_flag(word)) > -1) SET_BIT(pObjIndex->value[1], 1 << i); buf=One_Argument(buf,word); } } if(!strcmp(command,"@objkeyvnum")) { if(!strncmp(buf,"none",4)) { pObjIndex->value[2]= -1; continue; } pObjIndex->value[2]=IN_VNUM(atoi(buf)); if(pObjIndex->value[2] < area->low_o_vnum || pObjIndex->value[2] > area->hi_o_vnum) { if(pObjIndex->value[2] > 0) fprintf(axlog,"Key from outside the area for %d\n", pObjIndex->vnum); } } if(!strcmp(command,"@objcontainercondtn")) { pObjIndex->value[3]=atoi(buf); } break; case ITEM_DRINK_CON: case ITEM_FOUNTAIN: if(!strcmp(command,"@objdrinkcapacity")) { pObjIndex->value[0]=atoi(buf); } if(!strcmp(command,"@objdrinkquantity")) { pObjIndex->value[1]=atoi(buf); } if(!strcmp(command,"@objliquidtype")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subliquid,word))) { strcpy(word,s); } while(i < LIQ_MAX) { if(!strcmp(word,liq_table[i].liq_name)) { pObjIndex->value[2]=i; break; } i++; } if(i == LIQ_MAX) { fprintf(axlog,"Unknown liquid %s\n",word); } } if(!strcmp(command,"@objliquidpoisonflag")) { pObjIndex->value[3]=atoi(buf); } break; case ITEM_BLOOD: if(!strcmp(command,"@objdrinkcapacity")) { pObjIndex->value[0]=atoi(buf); } if(!strcmp(command,"@objdrinkquantity")) { pObjIndex->value[1]=atoi(buf); } if(!strcmp(command,"@objliquidpoisonflag")) { /* yep its three, not a boo boo */ pObjIndex->value[3]=atoi(buf); } break; case ITEM_FOOD: if(!strcmp(command,"@objfoodvalue")) { pObjIndex->value[0]=atoi(buf); } if(!strcmp(command,"@objfoodcondition")) { pObjIndex->value[1]=atoi(buf); } if(!strcmp(command,"@objfoodpoisonflag")) { pObjIndex->value[3]=atoi(buf); } break; case ITEM_HERB: if(!strcmp(command,"@objherbdoses")) { pObjIndex->value[0]=atoi(buf); } if(!strcmp(command,"@objherbname")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subherb,word))) { strcpy(word,s); } while(i < top_herb) { if(!strcmp(word,herb_table[i]->name)) { pObjIndex->value[2]=i; break; } i++; } if(i == top_herb) { fprintf(axlog,"Unknown herb %s\n",buf); } } break; case ITEM_KEY: if(!strcmp(command,"@objkeylockvnum")) { pObjIndex->value[0]=IN_VNUM(atoi(buf)); } break; case ITEM_LEVER: case ITEM_SWITCH: case ITEM_BUTTON: if(!strcmp(command,"@objtriggerflags")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subtrigger,word))) { strcpy(word,s); } if((i=get_trigflag(word)) > -1) { SET_BIT(pObjIndex->value[0],1 << i); } else { fprintf(axlog,"Unknown triggerflag: %s\n",word); } buf=One_Argument(buf,word); } continue; } if ( IS_SET( pObjIndex->value[0], TRIG_TELEPORT ) || IS_SET( pObjIndex->value[0], TRIG_TELEPORTALL ) || IS_SET( pObjIndex->value[0], TRIG_TELEPORTPLUS ) ) { if(!strcmp(command,"@objtrigtoroom")) { pObjIndex->value[1]=IN_VNUM(atoi(buf)); } break; } if ( IS_SET( pObjIndex->value[0], TRIG_RAND4 ) || IS_SET( pObjIndex->value[0], TRIG_RAND6 ) ) { if(!strcmp(command,"@objrandomizeroom")) { pObjIndex->value[1]=IN_VNUM(atoi(buf)); } break; } if ( IS_SET( pObjIndex->value[0], TRIG_DOOR ) ) { if(!strcmp(command,"@objtrigfromroom")) { pObjIndex->value[1]=IN_VNUM(atoi(buf)); } if(!strcmp(command,"@objtrigtoroom")) { pObjIndex->value[2]=IN_VNUM(atoi(buf)); } } break; case ITEM_LIGHT: if(!strcmp(command,"@objlighthrsleft")) { pObjIndex->value[2]=IN_VNUM(atoi(buf)); } break; case ITEM_GOLD: if(!strcmp(command,"@objnumbercoins")) { pObjIndex->value[1]=GOLDADJ(atoi(buf)); } if(!strcmp(command,"@objcointype")) { pObjIndex->value[2]=atoi(buf); } break; case ITEM_PILL: case ITEM_POTION: case ITEM_SCROLL: if(!strcmp(command,"@objspelllevel")) { pObjIndex->value[0]=IN_LEVEL(atof(buf)); } if(!strcmp(command,"@objspell1")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subspell,word))) { strcpy(word,s); } while(i < top_sn) { if(!strcmp(word,skill_table[i]->name)) { pObjIndex->value[1]=i; break; } i++; } if(i == top_sn) { fprintf(axlog,"Unknown spell %s\n",buf); } } if(!strcmp(command,"@objspell2")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subspell,word))) { strcpy(word,s); } while(i < top_sn) { if(!strcmp(word,skill_table[i]->name)) { pObjIndex->value[2]=i; break; } i++; } if(i == top_sn) { fprintf(axlog,"Unknown spell %s\n",buf); } } if(!strcmp(command,"@objspell3")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subspell,word))) { strcpy(word,s); } while(i < top_sn) { if(!strcmp(word,skill_table[i]->name)) { pObjIndex->value[3]=i; break; } i++; } if(i == top_sn) { fprintf(axlog,"Unknown spell %s\n",buf); } } break; case ITEM_STAFF: case ITEM_WAND: if(!strcmp(command,"@objspelllevel")) { pObjIndex->value[0]=IN_LEVEL(atof(buf)); } if(!strcmp(command,"@objmaxcharge")) { pObjIndex->value[1]=atoi(buf); } if(!strcmp(command,"@objnumcharge")) { pObjIndex->value[2]=atoi(buf); } if(!strcmp(command,"@objspell1")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subspell,word))) { strcpy(word,s); } while(i < top_sn) { if(!strcmp(word,skill_table[i]->name)) { pObjIndex->value[3]=i; break; } i++; } if(i == top_sn) { fprintf(axlog,"Unknown spell %s\n",buf); } } break; case ITEM_SALVE: if(!strcmp(command,"@objspelllevel")) { pObjIndex->value[0]=IN_LEVEL(atof(buf)); } if(!strcmp(command,"@objmaxcharge")) { pObjIndex->value[1]=atoi(buf); } if(!strcmp(command,"@objnumcharge")) { pObjIndex->value[2]=atoi(buf); } if(!strcmp(command,"@objchargedelay")) { pObjIndex->value[3]=atoi(buf); } if(!strcmp(command,"@objspell1")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subspell,word))) { strcpy(word,s); } while(i < top_sn) { if(!strcmp(word,skill_table[i]->name)) { pObjIndex->value[4]=i; break; } i++; } if(i == top_sn) { fprintf(axlog,"Unknown spell %s\n",buf); } } if(!strcmp(command,"@objspell2")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subspell,word))) { strcpy(word,s); } while(i < top_sn) { if(!strcmp(word,skill_table[i]->name)) { pObjIndex->value[5]=i; break; } i++; } if(i == top_sn) { fprintf(axlog,"Unknown spell %s\n",buf); } } break; case ITEM_TRAP: if(!strcmp(command,"@objtrapcharges")) { pObjIndex->value[0]=atoi(buf); } if(!strcmp(command,"@objtraptype")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subtraptype,word))) { strcpy(word,s); } while(ax_traps[i]) { if(!strcmp(word,ax_traps[i])) { pObjIndex->value[1]=i; break; } i++; } if(!ax_traps[i]) { fprintf(axlog,"Unknown traptype %s\n",buf); } } if(!strcmp(command,"@objtraplevel")) { pObjIndex->value[2]=IN_LEVEL(atof(buf)); } if(!strcmp(command,"@objtrapflag")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subtrapflag,word))) { strcpy(word,s); } if((i=get_trapflag(word)) > -1) { SET_BIT(pObjIndex->value[3],1 << i); } else { fprintf(axlog,"Unknown trapflag: %s\n",word); } buf=One_Argument(buf,word); } continue; } break; case ITEM_TREASURE: if(!strcmp(command,"@objtreasuretype")) { pObjIndex->value[0]=atoi(buf); } if(!strcmp(command,"@objtreasurecond")) { pObjIndex->value[1]=atoi(buf); } break; case ITEM_WEAPON: if(!strcmp(command,"@objweaponcond")) { pObjIndex->value[0]=atoi(buf); } if(!strcmp(command,"@objweaponnumdice")) { pObjIndex->value[1]=IN_DICE(atof(buf)); } if(!strcmp(command,"@objweaponsizedice")) { pObjIndex->value[2]=IN_DICE(atof(buf)); } if(!strcmp(command,"@objweapontype")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subweapontype,word))) { strcpy(word,s); } while(i < MAX_WEAPONTYPE) { if(!strcmp(word,attack_table[i])) { pObjIndex->value[3]=i; break; } i++; } if(i == MAX_WEAPONTYPE) { fprintf(axlog,"Unknown weapontype %s\n",word); } } break; case ITEM_PEN: if(!strcmp(command,"@objpenusesleft")) { pObjIndex->value[0]=atoi(buf); } break; case ITEM_FURNITURE: case ITEM_TRASH: case ITEM_PAPER: case ITEM_BOAT: case ITEM_FIRE: case ITEM_WORN: case ITEM_BOOK: break; default: display(o_types[pObjIndex->item_type]); display("-Unknown itemtype for values\n\r"); fprintf(axlog,"Unknown itemtype in switch\n"); break; } continue; } if(!strcmp(command,"@objweight")) { pObjIndex->weight=atoi(buf); continue; } if(!strcmp(command,"@objcost")) { pObjIndex->gold_cost=GOLDADJ(atoi(buf)); continue; } if(!strcmp(command,"@objrent")) { pObjIndex->rent=GOLDADJ(atoi(buf)); continue; } if(!strcmp(command,"@objextradesc")) { EXTRA_DESCR_DATA *ed; CREATE( ed, EXTRA_DESCR_DATA, 1 ); ed->keyword = STRALLOC(buf); ed->description = fread_string( fp ); LINK( ed, pObjIndex->first_extradesc, pObjIndex->last_extradesc, next, prev ); top_ed++; continue; } if(!strcmp(command,"@objaffects")) { AFFECT_DATA *paf; buf=One_Argument(buf,word); if((s=find_sub(subobjaffects,word))) { strcpy(word,s); } CREATE( paf, AFFECT_DATA, 1 ); paf->type = -1; paf->duration = -1; i=0; while(i < MAX_APPLY_TYPE) { if(!strcmp(word,a_types[i])) { paf->location=i; break; } i++; } if(i == MAX_APPLY_TYPE) { fprintf(axlog,"Unknown objaffects %s\n",word); DISPOSE(paf); continue; } #ifdef SMAUG102 paf->bitvector = 0; #endif #ifdef SMAUG14 xCLEAR_BITS(paf->bitvector); #endif paf->modifier = atoi(buf); LINK( paf, pObjIndex->first_affect, pObjIndex->last_affect, next, prev ); top_affect++; continue; } if(!strcmp(command,"@objaffectris")) { AFFECT_DATA *paf; buf=One_Argument(buf,word); if((s=find_sub(subobjaffects,word))) { strcpy(word,s); } CREATE( paf, AFFECT_DATA, 1 ); paf->type = -1; paf->duration = -1; i=0; while(i < MAX_APPLY_TYPE) { if(!strcmp(word,a_types[i])) { paf->location=i; break; } i++; } if(i == MAX_APPLY_TYPE) { fprintf(axlog,"Unknown objapplytype %s\n",word); DISPOSE(paf); continue; } #ifdef SMAUG102 paf->bitvector = 0; #endif #ifdef SMAUG14 xCLEAR_BITS(paf->bitvector); #endif buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subrisflag,word))) { strcpy(word,s); } if((i=get_risflag(word)) < 0) { fprintf(axlog,"Unknown objapplyris %s\n",word); DISPOSE(paf); buf=One_Argument(buf,word); continue; } SET_BIT(paf->modifier,1 << i); LINK( paf, pObjIndex->first_affect, pObjIndex->last_affect, next, prev ); top_affect++; buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@objapplyaffect")) { AFFECT_DATA *paf; buf=One_Argument(buf,word); if((s=find_sub(subobjaffects,word))) { strcpy(word,s); } CREATE( paf, AFFECT_DATA, 1 ); paf->type = -1; paf->duration = -1; i=0; while(i < MAX_APPLY_TYPE) { if(!strcmp(word,a_types[i])) { paf->location=i; break; } i++; } if(i == MAX_APPLY_TYPE) { fprintf(axlog,"Unknown objapplytype %s\n",word); DISPOSE(paf); continue; } #ifdef SMAUG102 paf->bitvector = 0; #endif #ifdef SMAUG14 xCLEAR_BITS(paf->bitvector); #endif if((s=find_sub(subaffected,buf))) { strcpy(buf,s); } if((i=get_aflag(buf)) < 0) { fprintf(axlog,"Unknown objapplyaffect %s\n",buf); DISPOSE(paf); continue; } SET_BIT(paf->modifier,1 << i); LINK( paf, pObjIndex->first_affect, pObjIndex->last_affect, next, prev ); top_affect++; continue; } if(!strcmp(command,"@objcastspell")) { AFFECT_DATA *paf; buf=One_Argument(buf,word); if((s=find_sub(subobjaffects,word))) { strcpy(word,s); } CREATE( paf, AFFECT_DATA, 1 ); paf->type = -1; paf->duration = -1; i=0; while(i < MAX_APPLY_TYPE) { if(!strcmp(word,a_types[i])) { paf->location=i; break; } i++; } if(i == MAX_APPLY_TYPE) { fprintf(axlog,"Unknown objapplytype %s\n",word); DISPOSE(paf); continue; } #ifdef SMAUG102 paf->bitvector = 0; #endif #ifdef SMAUG14 xCLEAR_BITS(paf->bitvector); #endif buf=One_Argument(buf,word); if((s=find_sub(subspell,word))) { strcpy(word,s); } i=0; while(i < top_sn) { if(!strcmp(word,skill_table[i]->name)) { break; } i++; } if(i==top_sn) { fprintf(axlog,"Unknown objcastspell %s\n",word); DISPOSE(paf); continue; } paf->modifier=i; LINK( paf, pObjIndex->first_affect, pObjIndex->last_affect, next, prev ); top_affect++; continue; } if(!strcmp(command,"@objprograms")) { MPROG_DATA *mprog = NULL; char *prog; int err=0; char progbuf[MAX_STRING_LENGTH]; while(fgets(buff,1000,fp)) { if(strrchr(buff,'\n')) *(strrchr(buff,'\n'))=0; if(strrchr(buff,'~')) *(strrchr(buff,'~'))=' '; buf=strip_cr(buff); buf=One_Argument(buf,word); if(!strcmp(word,">")) { err=0; buf=One_Argument(buf,word); if((s=find_sub(subprogtrig,word))) { strcpy(word,s); } i = mprog_name_to_type(word); if(i==ERROR_PROG) { err=1; fprintf(axlog,"Unknown obj prog trigger %s\n",word); continue; } if(pObjIndex->mudprogs) { mprog->comlist=STRALLOC(progbuf); CREATE( mprog->next, MPROG_DATA, 1 ); mprog = mprog->next; } else { CREATE( mprog, MPROG_DATA, 1 ); pObjIndex->mudprogs=mprog; } progbuf[0]=0; mprog->type=i; #ifdef SMAUG14 xSET_BIT(pObjIndex->progtypes,mprog->type); #else pObjIndex->progtypes = pObjIndex->progtypes | mprog->type; #endif mprog->arglist=STRALLOC(buf); } else if(!strcmp(word,"|")) { mprog->comlist=STRALLOC(progbuf); mprog->next = NULL; break; } else { if(err) { continue; } sprintf(progbuf + strlen(progbuf),"%s\n",buff); } } for ( mprog = pObjIndex->mudprogs; mprog; mprog = mprog->next ) { prog=make_in_prog(mprog->comlist, pObjIndex->name, pObjIndex->vnum, area->low_o_vnum, area->hi_o_vnum, axlog); STRFREE(mprog->comlist); mprog->comlist=STRALLOC(prog); } continue; } if(!strcmp(command,"#ROOMS")) { continue; } if(!strcmp(command,"!roomvnum")) { CREATE(pRoomIndex,ROOM_INDEX_DATA,1); pRoomIndex->vnum=IN_VNUM(atoi(buf)); pRoomIndex->area=area; iHash = pRoomIndex->vnum % MAX_KEY_HASH; pRoomIndex->next = room_index_hash[iHash]; room_index_hash[iHash] = pRoomIndex; top_room++; continue; } if(!strcmp(command,"@roomname")) { pRoomIndex->name = STRALLOC(buf); continue; } if(!strcmp(command,"@roomdescription")) { pRoomIndex->description=fread_string(fp); continue; } if(!strcmp(command,"@roomflags")) { buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subroomflag,word))) { strcpy(word,s); } if((i=get_rflag(word)) > -1) { SET_BIT(pRoomIndex->room_flags,1 << i); } #ifdef DRAGONBANE else if((i=get_rflag2(word)) > -1) { SET_BIT(pRoomIndex->room_flag2,1 << i); } #endif else { fprintf(axlog,"Unknown room flag: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@roomsectortype")) { i=0; if((s=find_sub(subsector,buf))) { strcpy(buf,s); } while(ax_sector_names[i]) { if(!strcmp(ax_sector_names[i],buf)) { pRoomIndex->sector_type=i; break; } i++; } if(!ax_sector_names[i]) { fprintf(axlog,"Unknown roomsectortype %s\n",buf); } continue; } if(!strcmp(command,"@roomteleportdelay")) { pRoomIndex->tele_delay = atoi(buf); continue; } if(!strcmp(command,"@roomteleportvnum")) { pRoomIndex->tele_vnum = IN_VNUM(atoi(buf)); continue; } if(!strcmp(command,"@roomtunnelcapacity")) { pRoomIndex->tunnel = atoi(buf); continue; } #ifdef USED if(!strcmp(command,"@roommanatype")) { continue; } if(!strcmp(command,"@roommanaamount")) { continue; } #endif if(!strcmp(command,"^roomexit")) { if((s=find_sub(subexitdir,buf))) { strcpy(buf,s); } if((door=get_dir(buf)) < 0 ) { fprintf(axlog,"Unknown roomexit direction %s\n",buf); continue; } pExit = make_exit( pRoomIndex, NULL, door ); pExit->vdir = door; pExit->key = -1; pExit->description = STRALLOC(""); pExit->keyword = STRALLOC(""); } if(!strcmp(command,"@roomexitdesc")) { if(door < 0) { continue; } STRFREE(pExit->description); pExit->description = fread_string(fp); continue; } if(!strcmp(command,"@roomexitkeyword")) { if(door < 0) { continue; } STRFREE(pExit->keyword); pExit->keyword = STRALLOC(buf); continue; } if(!strcmp(command,"@roomexitexitinfo")) { if(door < 0) { continue; } buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subexitflag,word))) { strcpy(word,s); } if((i=get_exflag(word)) > -1) { SET_BIT(pExit->exit_info,1 << i); } else { fprintf(axlog,"Unknown room exitinfo flag: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@roomexitkey")) { if(door < 0) { continue; } if(!strncmp(buf,"none",4)) { pExit->key = -1; continue; } pExit->key=IN_VNUM(atoi(buf)); if(pExit->key < area->low_o_vnum || pExit->key > area->hi_o_vnum) { if(pExit->key > 0) fprintf(axlog,"Key from outside the area in room %d - exit %s", pRoomIndex->vnum,dir_name[door]); } continue; } if(!strcmp(command,"@roomexittovnum")) { if(door < 0) { continue; } pExit->vnum=IN_VNUM(atoi(buf)); continue; } if(!strcmp(command,"@roomexitdistance")) { if(door < 0) { continue; } pExit->distance = atoi(buf); continue; } if(!strcmp(command,"@roomislinktoexternalarea")) { buf=One_Argument(buf,word); fprintf(axlog,"%s ",word); buf=One_Argument(buf,word); fprintf(axlog,"%d ",IN_VNUM(atoi(word))); fprintf(axlog,"%s\n",buf); if(noextlink) { extract_exit(pRoomIndex,pExit); } continue; } if(!strcmp(command,"@roomhaslinkfromexternalarea")) { buf=One_Argument(buf,word); fprintf(axlog,"%s ",word); buf=One_Argument(buf,word); fprintf(axlog,"%d ",IN_VNUM(atoi(word))); fprintf(axlog,"%s\n",buf); continue; } if(!strcmp(command,"@roomextradesckeywords")) { EXTRA_DESCR_DATA *ed; CREATE( ed, EXTRA_DESCR_DATA, 1 ); ed->keyword = STRALLOC(buf); ed->description = fread_string( fp ); LINK( ed, pRoomIndex->first_extradesc, pRoomIndex->last_extradesc, next, prev ); top_ed++; continue; } if(!strcmp(command,"@roomprograms")) { MPROG_DATA *mprog = NULL; char *prog; int err=0; char progbuf[MAX_STRING_LENGTH]; while(fgets(buff,1000,fp)) { if(strrchr(buff,'\n')) *(strrchr(buff,'\n'))=0; if(strrchr(buff,'~')) *(strrchr(buff,'~'))=' '; buf=strip_cr(buff); buf=One_Argument(buf,word); if(!strcmp(word,">")) { err=0; buf=One_Argument(buf,word); if((s=find_sub(subprogtrig,word))) { strcpy(word,s); } i = mprog_name_to_type(word); if(i==ERROR_PROG) { err=1; fprintf(axlog,"Unknown room prog trigger %s\n",word); continue; } if(pRoomIndex->mudprogs) { mprog->comlist=STRALLOC(progbuf); CREATE( mprog->next, MPROG_DATA, 1 ); mprog = mprog->next; } else { CREATE( mprog, MPROG_DATA, 1 ); pRoomIndex->mudprogs=mprog; } progbuf[0]=0; mprog->type=i; #ifdef SMAUG14 xSET_BIT(pRoomIndex->progtypes,mprog->type); #else pRoomIndex->progtypes = pRoomIndex->progtypes | mprog->type; #endif mprog->arglist=STRALLOC(buf); } else if(!strcmp(word,"|")) { mprog->comlist=STRALLOC(progbuf); mprog->next = NULL; break; } else { if(err) { continue; } sprintf(progbuf + strlen(progbuf),"%s\n",buff); } } for ( mprog = pRoomIndex->mudprogs; mprog; mprog = mprog->next ) { prog=make_in_prog(mprog->comlist, pRoomIndex->name, pRoomIndex->vnum, area->low_r_vnum, area->hi_r_vnum, axlog); STRFREE(mprog->comlist); mprog->comlist=STRALLOC(prog); } continue; } if(!strcmp(command,"@roomexitwordcheck")) { char *d; int dir,found; EXIT_DATA *xit; d=pRoomIndex->description; d=one_argument(d,word); /* yeppers, the native one */ while(*word) { if(!str_cmp(word,"n") || !str_cmp(word,"e") || !str_cmp(word,"w") || !str_cmp(word,"s") || !str_cmp(word,"u") || !str_cmp(word,"d") || !str_cmp(word,"ne") || !str_cmp(word,"nw") || !str_cmp(word,"se") || !str_cmp(word,"sw") || !str_cmp(word,"north") || !str_cmp(word,"east") || !str_cmp(word,"west") || !str_cmp(word,"south") || !str_cmp(word,"up") || !str_cmp(word,"down") || !str_cmp(word,"northeast") || !str_cmp(word,"northwest") || !str_cmp(word,"southeast") || !str_cmp(word,"southwest")) { if(!str_cmp(word,"n")) strcpy(word,"north"); if(!str_cmp(word,"e")) strcpy(word,"east"); if(!str_cmp(word,"w")) strcpy(word,"west"); if(!str_cmp(word,"s")) strcpy(word,"south"); if(!str_cmp(word,"u")) strcpy(word,"up"); if(!str_cmp(word,"d")) strcpy(word,"down"); if(!str_cmp(word,"ne")) strcpy(word,"northeast"); if(!str_cmp(word,"nw")) strcpy(word,"northwest"); if(!str_cmp(word,"se")) strcpy(word,"southeast"); if(!str_cmp(word,"sw")) strcpy(word,"southwest"); dir=get_dir(word); found=0; for ( xit = pRoomIndex->first_exit; xit; xit = xit->next ) { if(xit->vdir == dir) { found=1; break; } } if(!found) { fprintf(axlog,"******** Warning room %d has a reference to %s but has no exit that way\n", pRoomIndex->vnum,word); fprintf(axlog,"%s\n",strip_cr(pRoomIndex->description)); } } d=one_argument(d,word); } continue; } if(!strcmp(command,"#RESETS")) { continue; } if(!strcmp(command,"!mobresetvnum")) { letter='M'; extra=0; arg1=IN_VNUM(atoi(buf)); arg2=0; arg3=0; pMobIndex=get_mob_index(arg1); continue; } if(!strcmp(command,"@mobresetinroom")) { arg3=IN_VNUM(atoi(buf)); continue; } if(!strcmp(command,"@mobresetlimit")) { arg2=atoi(buf); add_reset(area,letter,extra,arg1,arg2,arg3); continue; } if(!strcmp(command,"!objresetvnum")) { letter='O'; extra=0; arg1=IN_VNUM(atoi(buf)); arg2=0; arg3=0; pObjIndex=get_obj_index(arg1); continue; } if(!strcmp(command,"@objresetinroom")) { arg3=IN_VNUM(atoi(buf)); continue; } if(!strcmp(command,"@objresetlimit")) { arg2=atoi(buf); add_reset(area,letter,extra,arg1,arg2,arg3); continue; } if(!strcmp(command,"!putobjvnum")) { letter='P'; extra=0; arg1=IN_VNUM(atoi(buf)); arg2=0; arg3=0; pObjIndex=get_obj_index(arg1); continue; } if(!strcmp(command,"@putobjinobjvnum")) { arg3=IN_VNUM(atoi(buf)); continue; } if(!strcmp(command,"@putobjunderobjvnum")) { arg3=0; continue; } if(!strcmp(command,"@putobjresetlimit")) { arg2=atoi(buf); add_reset(area,letter,extra,arg1,arg2,arg3); continue; } if(!strcmp(command,"!equipobjvnum")) { letter='E'; extra=0; arg1=IN_VNUM(atoi(buf)); arg2=0; arg3=0; continue; } if(!strcmp(command,"@equipwearlocation")) { if((s=find_sub(subwearloc,buf))) { strcpy(buf,s); } if((i=get_wearloc(buf)) > -1) { arg3=i; add_reset(area,letter,extra,arg1,arg2,arg3); } else { fprintf(axlog,"Unknown equipwearlocation %s\n",buf); } continue; } if(!strcmp(command,"!doorinroomvnum")) { letter='D'; extra=0; arg1=IN_VNUM(atoi(buf)); arg2=0; arg3=0; continue; } if(!strcmp(command,"@doordirection")) { if((s=find_sub(subexitdir,buf))) { strcpy(buf,s); } if((i=get_dir(buf)) > -1 ) { arg2=i; } else { fprintf(axlog,"Unknown reset doordirection %s\n",buf); } continue; } if(!strcmp(command,"@doorstate")) { if(i < 0) /* check if doordirection failed */ { continue; } buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subexitflag,word))) { strcpy(word,s); } if((i=get_exflag(word)) > -1) { SET_BIT(arg3,1 << i); } else { fprintf(axlog,"Unknown room exitinfo flag: %s\n",word); } buf=One_Argument(buf,word); } add_reset(area,letter,extra,arg1,arg2,arg3); continue; } if(!strcmp(command,"!trapflag")) { letter='T'; extra=0; arg2=0; arg3=0; buf=One_Argument(buf,word); while(*word) { if((s=find_sub(subtrapflag,word))) { strcpy(word,s); } if((i=get_trapflag(word)) > -1) { SET_BIT(extra,1 << i); } else { fprintf(axlog,"Unknown reset trapflag: %s\n",word); } buf=One_Argument(buf,word); } continue; } if(!strcmp(command,"@traptype")) { i=0; buf=One_Argument(buf,word); if((s=find_sub(subtraptype,word))) { strcpy(word,s); } while(ax_traps[i]) { if(!strcmp(word,ax_traps[i])) { arg1=i; break; } i++; } if(!ax_traps[i]) { fprintf(axlog,"Unknown reset traptype %s\n",buf); } continue; } if(!strcmp(command,"@trapcharges")) { arg2=atoi(buf); continue; } if(!strcmp(command,"@trapvnum")) { arg3=IN_VNUM(atoi(buf)); add_reset(area,letter,extra,arg1,arg2,arg3); continue; } if(!strcmp(command,"!giveobj")) { letter='G'; extra=0; arg1=IN_VNUM(atoi(buf)); arg2=0; arg3=0; continue; } if(!strcmp(command,"@giveobjresetlimit")) { arg2=atoi(buf); add_reset(area,letter,extra,arg1,arg2,arg3); continue; } if(!strcmp(command,"!randomexitsforroom")) { letter='R'; extra=0; arg1=IN_VNUM(atoi(buf)); arg2=0; arg3=0; continue; } if(!strcmp(command,"@randomexitlastdoor")) { arg2=atoi(buf); add_reset(area,letter,extra,arg1,arg2,arg3); continue; } if(!strcmp(command,"#SHOPS")) { continue; } if(!strcmp(command,"!shopkeepervnum")) { CREATE(pShop,SHOP_DATA,1); pShop->keeper=IN_VNUM(atoi(buf)); if ( (pMobIndex = get_mob_index(pShop->keeper)) != NULL ) { pMobIndex->pShop=pShop; } else { DISPOSE(pShop); } buyslot=0; continue; } if(!strcmp(command,"@shoptradewith")) { continue; } if(!strcmp(command,"@shopbuys")) { if ( (pShop = pMobIndex->pShop) == NULL ) { continue; } if(buyslot >= MAX_SHOP_BUY_SLOT) { continue; } buf=One_Argument(buf,word); if((s=find_sub(subobjtype,word))) { strcpy(word,s); } if((i=get_otype(word)) > -1) { pShop->buy_type[buyslot++]=i; } else { fprintf(axlog,"Unknown shop objtype: %s\n",word); } continue; } if(!strcmp(command,"@shoptype")) { /* this is purely documentary for the .aex */ continue; } if(!strcmp(command,"@shopprofitbuy")) { if ( (pShop = pMobIndex->pShop) == NULL ) { continue; } pShop->profit_buy=atoi(buf); continue; } if(!strcmp(command,"@shopprofitsell")) { if ( (pShop = pMobIndex->pShop) == NULL ) { continue; } pShop->profit_sell=atoi(buf); continue; } if(!strcmp(command,"@shopopenhour")) { if ( (pShop = pMobIndex->pShop) == NULL ) { continue; } pShop->open_hour=atoi(buf); continue; } if(!strcmp(command,"@shopclosehour")) { if ( (pShop = pMobIndex->pShop) == NULL ) { continue; } pShop->close_hour=atoi(buf); if ( !first_shop ) { first_shop = pShop; } else { last_shop->next = pShop; } pShop->next = NULL; pShop->prev = last_shop; last_shop = pShop; top_shop++; continue; } if(!strcmp(command,"#REPAIRS")) { continue; } if(!strcmp(command,"!shoprepairvnum")) { CREATE(rShop,REPAIR_DATA,1); rShop->keeper=IN_VNUM(atoi(buf)); if ( (pMobIndex = get_mob_index(rShop->keeper)) != NULL ) { pMobIndex->rShop=rShop; } else { DISPOSE(rShop); } buyslot=0; continue; } if(!strcmp(command,"@shoprepairs")) { if ( (rShop = pMobIndex->rShop) == NULL ) { continue; } if(buyslot >= MAX_SHOP_FIX_SLOT) { continue; } buf=One_Argument(buf,word); if((s=find_sub(subobjtype,word))) { strcpy(word,s); } if((i=get_otype(word)) > -1) { rShop->fix_type[buyslot++]=i; } else { fprintf(axlog,"Unknown repair objtype: %s\n",word); } continue; } if(!strcmp(command,"@shopprofitfix")) { if ( (rShop = pMobIndex->rShop) == NULL ) { continue; } rShop->profit_fix=atoi(buf); continue; } if(!strcmp(command,"@shoprepairtype")) { if ( (rShop = pMobIndex->rShop) == NULL ) { continue; } i=0; while(ax_shoptypes[i]) { if(!strcmp(buf,ax_shoptypes[i])) { break; } i++; } if(ax_shoptypes[i]) { rShop->shop_type=atoi(buf); } else { fprintf(axlog,"Unknown shoprepairtype %s\n",buf); } continue; } if(!strcmp(command,"@shoprepairopenhour")) { if ( (rShop = pMobIndex->rShop) == NULL ) { continue; } rShop->open_hour=atoi(buf); continue; } if(!strcmp(command,"@shoprepairclosehour")) { if ( (rShop = pMobIndex->rShop) == NULL ) { continue; } rShop->close_hour=atoi(buf); if ( !first_repair ) { first_repair = rShop; } else { last_repair->next = rShop; } rShop->next = NULL; rShop->prev = last_repair; last_repair = rShop; top_repair++; continue; } if(!strcmp(command,"#END")) { continue; } if(command[0]=='#' || command[0]=='!' || command[0]=='@') { display("Unknown field "); display(command); display("\n\r"); fprintf(axlog,"Unknown field: %s\n",command); } } #ifdef SMAUG14 /* initialize weather data - FB */ CREATE(area->weather, WEATHER_DATA, 1); area->weather->temp = 0; area->weather->precip = 0; area->weather->wind = 0; area->weather->temp_vector = 0; area->weather->precip_vector = 0; area->weather->wind_vector = 0; area->weather->climate_temp = 2; area->weather->climate_precip = 2; area->weather->climate_wind = 2; area->weather->first_neighbor = NULL; area->weather->last_neighbor = NULL; area->weather->echo = NULL; area->weather->echo_color = AT_GREY; #endif sort_area(area,TRUE); reset_area(area); SET_BIT(area->status,AREA_LOADED); fix_exits(); area_update(); fBootDb=FALSE; fclose(axlog); fclose(fp); clean_subs(); display("done\n\r"); } void do_ax_export(CHAR_DATA *ch, char *argument) { RESET_DATA *treset; ROOM_INDEX_DATA *room; MOB_INDEX_DATA *pMobIndex; OBJ_INDEX_DATA *pObjIndex; MPROG_DATA *mprog; OBJ_DATA *obj; EXIT_DATA *xit; EXTRA_DESCR_DATA *ed; AFFECT_DATA *paf; SHOP_DATA *pShop; REPAIR_DATA *pRepair; AREA_DATA *tarea; char buf[MAX_STRING_LENGTH]; FILE *fpout; int vnum,i,currext; int val0, val1, val2, val3, val4, val5; int lastobj=0; char filename[80]; if(! *argument) { display(version); display("axexport <filename.aex>\n\r"); return; } argument=one_argument(argument,filename); sprintf(buf,"../exchange/%s",filename); if((fpout=fopen(buf,"w"))==NULL) { display("Can't open "); display(buf); display("\n\r"); return; } tarea=ch->in_room->area; sprintf( buf, "exporting %s...", tarea->filename ); find_externals(tarea); log_string_plus( buf, LOG_NORMAL, LEVEL_GREATER ); startvnum=tarea->low_r_vnum; fprintf( fpout, "#EXPORTEDBY %s\n",strip_cr(version)); fprintf( fpout, "#AREANAME %s\n", tarea->name ); fprintf( fpout, "#STARTVNUM %d\n", startvnum ); fprintf( fpout, "#AUTHOR %s\n", tarea->author ); fprintf( fpout, "#SOFTRANGE %f %f\n", OUT_LEVEL(tarea->low_soft_range), OUT_LEVEL(tarea->hi_soft_range)); fprintf( fpout, "#HARDRANGE %f %f\n", OUT_LEVEL(tarea->low_hard_range), OUT_LEVEL(tarea->hi_hard_range)); fprintf(fpout, "#ROOMRANGE %d %d\n", OUT_VNUM(tarea->low_r_vnum),OUT_VNUM(tarea->hi_r_vnum)); fprintf(fpout, "#MOBRANGE %d %d\n", OUT_VNUM(tarea->low_m_vnum),OUT_VNUM(tarea->hi_m_vnum)+addmobrange); fprintf(fpout, "#OBJRANGE %d %d\n", OUT_VNUM(tarea->low_o_vnum),OUT_VNUM(tarea->hi_o_vnum)+addobjrange); if ( tarea->resetmsg ) /* Rennard */ fprintf( fpout, "#RESETMSG %s\n", tarea->resetmsg ); if ( tarea->reset_frequency ) fprintf( fpout, "#RESETFREQUENCY %d\n", tarea->reset_frequency ); #ifdef USED fprintf(fpout, "#RECALL %d\n",OUT_VNUM(tarea->recall)); #endif fprintf( fpout, "#AREAFLAGS %s\n", flag_string(tarea->flags,area_flags) ); fprintf( fpout, "#ECONOMY %d %d\n\n", tarea->high_economy, tarea->low_economy ); /* save mobiles */ fprintf( fpout, "#MOBILES\n" ); newrange=tarea->hi_m_vnum+1; currext=0; for (vnum=extmob[currext];currext < top_extmob; vnum=extmob[currext]) // for ( vnum = tarea->low_m_vnum; vnum <= tarea->hi_m_vnum; vnum++ ) { currext++; if ( (pMobIndex = get_mob_index( vnum )) == NULL ) continue; #ifdef DRAGONBANE if (IS_SET(pMobIndex->act,ACT_DELETED)) continue; #endif vnum=getmobext(tarea,vnum); fprintf( fpout, "!mobvnum %d\n",OUT_VNUM(vnum)); fprintf( fpout, "@mobkeywordname %s\n",pMobIndex->player_name ); fprintf( fpout, "@mobactionname %s\n", pMobIndex->short_descr ); fprintf( fpout, "@mobinroomname %s\n", strip_cr(pMobIndex->long_descr) ); fprintf( fpout, "@moblookdescription\n"); fprintf( fpout, "%s\n", strip_cr(pMobIndex->description)); fprintf( fpout,"~\n"); #ifdef DRAGONBANE if(pMobIndex->talk) { fprintf( fpout, "@mobtalkreply\n"); fprintf(fpout,"%s\n",strip_cr(pMobIndex->talk)); fprintf( fpout,"~\n"); } #endif #ifdef SMAUG102 fprintf( fpout, "@mobactflags %s\n",flag_string(pMobIndex->act,act_flags)); #endif #ifdef SMAUG14 fprintf( fpout, "@mobactflags %s\n",ext_flag_string(&pMobIndex->act,act_flags)); #endif #ifdef SMAUG102 fprintf( fpout, "@mobaffectedby %s\n",flag_string(pMobIndex->affected_by,a_flags)); #endif #ifdef SMAUG14 fprintf( fpout, "@mobaffectedby %s\n",ext_flag_string(&pMobIndex->affected_by,a_flags)); #endif fprintf( fpout, "@mobalignment %f\n",(float) pMobIndex->alignment/MAX_ALIGNMENT); fprintf( fpout, "@moblevel %f\n",OUT_LEVEL(pMobIndex->level)); fprintf( fpout, "@mobthac0 %d\n",pMobIndex->mobthac0); fprintf( fpout, "@mobarmorclass %f\n",(float)pMobIndex->ac/MAX_MOBARMORCLASS); fprintf( fpout, "@mobnumberofhitdice %f\n",OUT_DICE(pMobIndex->hitnodice)); fprintf( fpout, "@mobsizeofhitdice %f\n",OUT_DICE(pMobIndex->hitsizedice)); fprintf( fpout, "@mobplustohitdice %f\n",OUT_DICE(pMobIndex->hitplus)); fprintf( fpout, "@mobnumberofdamagedice %f\n",OUT_DICE(pMobIndex->damnodice)); fprintf( fpout, "@mobsizeofdamagedice %f\n",OUT_DICE(pMobIndex->damsizedice)); fprintf( fpout, "@mobplustodamagedice %f\n",OUT_DICE(pMobIndex->damplus)); fprintf( fpout, "@mobgold %d\n",pMobIndex->gold); fprintf( fpout, "@mobexperience %d\n",pMobIndex->exp); fprintf( fpout, "@mobposition %s\n",ax_position[pMobIndex->position]); fprintf( fpout, "@mobdefaultposition %s\n",ax_position[pMobIndex->defposition]); fprintf( fpout, "@mobsex %s\n",ax_sex[pMobIndex->sex]); fprintf( fpout, "@mobstrength %f\n",(float)pMobIndex->perm_str/MAX_PRIME_ATTRIB); fprintf( fpout, "@mobintelligence %f\n",(float) pMobIndex->perm_int/MAX_PRIME_ATTRIB); fprintf( fpout, "@mobwisdom %f\n",(float) pMobIndex->perm_wis/MAX_PRIME_ATTRIB); fprintf( fpout, "@mobdexterity %f\n",(float) pMobIndex->perm_dex/MAX_PRIME_ATTRIB); fprintf( fpout, "@mobconstitution %f\n",(float) pMobIndex->perm_con/MAX_PRIME_ATTRIB); fprintf( fpout, "@mobcharisma %f\n",(float) pMobIndex->perm_cha/MAX_PRIME_ATTRIB); fprintf( fpout, "@mobluck %f\n",(float) pMobIndex->perm_lck/MAX_PRIME_ATTRIB); fprintf( fpout, "@mobsavevspoisondeath %d\n", pMobIndex->saving_poison_death); fprintf( fpout, "@mobsavevswand %d\n", pMobIndex->saving_wand); fprintf( fpout, "@mobsavevsparapetri %d\n", pMobIndex->saving_para_petri); fprintf( fpout, "@mobsavevsbreath %d\n", pMobIndex->saving_breath); fprintf( fpout, "@mobsavevsspellstaff %d\n", pMobIndex->saving_spell_staff); #ifdef DRAGONBANE fprintf( fpout, "@mobsavevspsionic %d\n", pMobIndex->saving_psionics); #endif fprintf( fpout, "@mobrace %s\n", npc_race[pMobIndex->race]); fprintf( fpout, "@mobclass %s\n", npc_class[pMobIndex->class]); if(pMobIndex->height) fprintf( fpout, "@mobheight %d\n", pMobIndex->height); if(pMobIndex->weight) fprintf( fpout, "@mobweight %d\n", pMobIndex->weight); fprintf( fpout, "@mobspeaks"); for ( i = 0; lang_array[i] != LANG_UNKNOWN; i++ ) { if (IS_SET(pMobIndex->speaks, lang_array[i]) ) { fprintf(fpout, " %s", lang_names[i]); } } fprintf( fpout,"\n"); fprintf( fpout, "@mobspeaking"); for ( i = 0; lang_array[i] != LANG_UNKNOWN; i++ ) { if (IS_SET(pMobIndex->speaking, lang_array[i]) ) { fprintf(fpout, " %s", lang_names[i]); } } fprintf( fpout,"\n"); fprintf( fpout, "@mobnumberofattacks %d\n", pMobIndex->numattacks); #ifdef DRAGONBANE if(pMobIndex->hoard) fprintf( fpout, "@mobhoardroom %d\n", OUT_VNUM(pMobIndex->hoard)); if(IS_SET(pMobIndex->act,ACT_STAYTERRAIN)) { fprintf( fpout, "@mobstayterraintype %s\n", ax_sector_names[pMobIndex->terrain]); } #endif fprintf( fpout, "@mobhitroll %d\n", pMobIndex->hitroll); fprintf( fpout, "@mobdamageroll %d\n", pMobIndex->damroll); fprintf( fpout, "@mobbodyparts %s\n", flag_string(pMobIndex->xflags,part_flags) ); fprintf( fpout, "@mobisresistant %s\n", flag_string(pMobIndex->resistant,ris_flags) ); fprintf( fpout, "@mobisimmune %s\n", flag_string(pMobIndex->immune,ris_flags) ); fprintf( fpout, "@mobissusceptible %s\n", flag_string(pMobIndex->susceptible,ris_flags) ); #ifdef SMAUG102 fprintf( fpout, "@mobattacks %s\n", flag_string(pMobIndex->attacks,attack_flags) ); #endif #ifdef SMAUG14 fprintf( fpout, "@mobattacks %s\n", ext_flag_string(&pMobIndex->attacks,attack_flags) ); #endif #ifdef DRAGONBANE fprintf( fpout, "@mobattacks %s\n", flag_string(pMobIndex->attack2,attack2_flags) ); #endif #ifdef SMAUG102 fprintf( fpout, "@mobdefenses %s\n", flag_string(pMobIndex->defenses,defense_flags) ); #endif #ifdef SMAUG14 fprintf( fpout, "@mobdefenses %s\n", ext_flag_string(&pMobIndex->defenses,defense_flags) ); #endif if(pMobIndex->spec_fun) fprintf( fpout, "@mobspecial %s\n",lookup_spec(pMobIndex->spec_fun)); if ( pMobIndex->mudprogs ) { fprintf( fpout, "@mobprograms\n"); for ( mprog = pMobIndex->mudprogs; mprog; mprog = mprog->next ) fprintf( fpout, "> %s %s~\n%s~\n", mprog_type_to_name( mprog->type ), mprog->arglist, strip_cr(make_out_prog(mprog->comlist)) ); fprintf( fpout, "|\n" ); } } /* save objects */ fprintf( fpout, "#OBJECTS\n" ); newrange=tarea->hi_o_vnum + 1; currext=0; for (vnum=extobj[currext];currext < top_extobj; vnum=extobj[currext]) // for ( vnum = tarea->low_o_vnum; vnum <= tarea->hi_o_vnum; vnum++ ) { currext++; if ( (pObjIndex = get_obj_index( vnum )) == NULL ) continue; #ifdef DRAGONBANE if (pObjIndex->item_type == ITEM_DELETED) continue; #endif vnum=getobjext(tarea,vnum); if (!pObjIndex->item_type) /* no support for boards/mail at this time */ continue; fprintf( fpout, "!objvnum %d\n",OUT_VNUM(vnum)); for ( obj = first_object; obj; obj = obj->next ) { if(obj->pIndexData->vnum == pObjIndex->vnum) { pObjIndex->level=obj->level; break; } } fprintf( fpout, "@objlevel %f\n",OUT_LEVEL(pObjIndex->level)); fprintf( fpout, "@objkeywordname %s\n", pObjIndex->name); fprintf( fpout, "@objinventoryname %s\n",pObjIndex->short_descr); fprintf( fpout, "@objinroomname %s\n",pObjIndex->description); fprintf( fpout, "@objactiondescription %s\n",pObjIndex->action_desc); fprintf( fpout, "@objitemtype %s\n",o_types[pObjIndex->item_type]); #ifdef SMAUG102 fprintf( fpout, "@objflags %s\n", flag_string(pObjIndex->extra_flags,o_flags) ); #endif #ifdef SMAUG14 fprintf( fpout, "@objflags %s\n", ext_flag_string(&pObjIndex->extra_flags,o_flags) ); #endif fprintf( fpout, "@objflags %s\n", flag_string(pObjIndex->magic_flags,mag_flags) ); fprintf( fpout, "@objwearflags %s\n", flag_string(pObjIndex->wear_flags,w_flags) ); fprintf( fpout, "@objwearlayers %s\n",flag_string(pObjIndex->layers,ax_layers)); val0=pObjIndex->value[0]; val1=pObjIndex->value[1]; val2=pObjIndex->value[2]; val3=pObjIndex->value[3]; val4=pObjIndex->value[4]; val5=pObjIndex->value[5]; switch ( pObjIndex->item_type ) { case ITEM_ARMOR: fprintf( fpout, "@objcurrac %d\n",val0); fprintf( fpout, "@objorgac %d\n",val1); break; case ITEM_CONTAINER: fprintf( fpout, "@objcapacity %d\n",val0); if(val1 > 0) fprintf( fpout, "@objcontainerflags %s\n",flag_string(val1,axcontainer_flags)); if(val2 > 0) fprintf( fpout, "@objkeyvnum %d\n",OUT_VNUM(val2)); else fprintf( fpout, "@objkeyvnum none\n"); fprintf( fpout, "@objcontainercondtn %d\n",val3); break; case ITEM_DRINK_CON: case ITEM_FOUNTAIN: fprintf( fpout, "@objdrinkcapacity %d\n",val0); fprintf( fpout, "@objdrinkquantity %d\n",val1); fprintf( fpout, "@objliquidtype '%s'\n",liq_table[val2].liq_name); fprintf( fpout, "@objliquidpoisonflag %d\n",val3); case ITEM_BLOOD: fprintf( fpout, "@objdrinkcapacity %d\n",val0); fprintf( fpout, "@objdrinkquantity %d\n",val1); fprintf( fpout, "@objliquidpoisonflag %d\n",val3); break; case ITEM_FOOD: fprintf( fpout, "@objfoodvalue %d\n",val0); fprintf( fpout, "@objfoodcondition %d\n",val1); fprintf( fpout, "@objfoodpoisonflag %d\n",val3); break; case ITEM_HERB: fprintf( fpout, "@objherbdoses %d\n",val1); fprintf( fpout, "@objherbname %s\n",herb_table[val2]->name); break; case ITEM_KEY: fprintf( fpout, "@objkeylockvnum %d\n",OUT_VNUM(val0)); break; case ITEM_LEVER: case ITEM_SWITCH: case ITEM_BUTTON: fprintf( fpout, "@objtriggerflags %s\n", flag_string(val0,trig_flags) ); if ( IS_SET( val0, TRIG_TELEPORT ) || IS_SET( val0, TRIG_TELEPORTALL ) || IS_SET( val0, TRIG_TELEPORTPLUS ) ) { fprintf( fpout, "@objtrigtoroom %d\n", OUT_VNUM(val1)); break; } if ( IS_SET( val0, TRIG_RAND4 ) || IS_SET( val0, TRIG_RAND6 ) ) { fprintf( fpout, "@objrandomizeroom %d\n", OUT_VNUM(val1)); break; } if ( IS_SET( val0, TRIG_DOOR ) ) { fprintf( fpout, "@objtrigfromroom %d\n", OUT_VNUM(val1)); fprintf( fpout, "@objtrigtoroom %d\n", OUT_VNUM(val2)); } break; case ITEM_LIGHT: fprintf( fpout, "@objlighthrsleft %d\n",val2); break; case ITEM_GOLD: fprintf( fpout, "@objnumbercoins %d\n",val1); fprintf( fpout, "@objcointype %d\n",val2); break; case ITEM_PILL: case ITEM_POTION: case ITEM_SCROLL: fprintf( fpout, "@objspelllevel %f\n",OUT_LEVEL(pObjIndex->value[0])); if ( IS_VALID_SN(val1) ) fprintf( fpout, "@objspell1 '%s'\n",skill_table[val1]->name); if ( IS_VALID_SN(val2) ) fprintf( fpout, "@objspell2 '%s'\n",skill_table[val2]->name); if ( IS_VALID_SN(val3) ) fprintf( fpout, "@objspell3 '%s'\n",skill_table[val3]->name); break; case ITEM_STAFF: case ITEM_WAND: fprintf( fpout, "@objspelllevel %f\n",OUT_LEVEL(pObjIndex->value[0])); fprintf( fpout, "@objmaxcharge %d\n",val1); fprintf( fpout, "@objnumcharge %d\n",val2); if ( IS_VALID_SN(val3) ) fprintf( fpout, "@objspell1 '%s'\n",skill_table[val3]->name); break; case ITEM_SALVE: fprintf( fpout, "@objspelllevel %f\n",OUT_LEVEL(pObjIndex->value[0])); fprintf( fpout, "@objmaxcharge %d\n",val1); fprintf( fpout, "@objnumcharge %d\n",val2); fprintf( fpout, "@objchargedelay %d\n",val3); if ( IS_VALID_SN(val4) ) fprintf( fpout, "@objspell1 '%s'\n",skill_table[val4]->name); if ( IS_VALID_SN(val5) ) fprintf( fpout, "@objspell2 '%s'\n",skill_table[val5]->name); break; case ITEM_TRAP: fprintf( fpout, "@objtrapcharges %d\n",val0); fprintf( fpout, "@objtraptype %s\n",ax_traps[val1]); fprintf( fpout, "@objtraplevel %f\n",OUT_LEVEL(val2)); fprintf( fpout, "@objtrapflag %s\n",flag_string(val3,trap_flags)); break; case ITEM_TREASURE: fprintf( fpout, "@objtreasuretype %d\n",val0); fprintf( fpout, "@objtreasurecond %d\n",val1); break; case ITEM_WEAPON: fprintf( fpout, "@objweaponcond %d\n",val0); fprintf( fpout, "@objweaponnumdice %f\n",OUT_DICE(val1)); fprintf( fpout, "@objweaponsizedice %f\n",OUT_DICE(val2)); fprintf( fpout, "@objweapontype %s\n",attack_table[val3]); break; case ITEM_PEN: fprintf( fpout, "@objpenusesleft %d\n",val0); break; case ITEM_FURNITURE: case ITEM_TRASH: case ITEM_PAPER: case ITEM_BOAT: case ITEM_FIRE: case ITEM_WORN: case ITEM_BOOK: break; default: display(o_types[pObjIndex->item_type]); display("-Unknown itemtype for values\n\r"); fprintf( fpout, "@objvalue0 %d\n",pObjIndex->value[0]); fprintf( fpout, "@objvalue1 %d\n",pObjIndex->value[1]); fprintf( fpout, "@objvalue2 %d\n",pObjIndex->value[2]); fprintf( fpout, "@objvalue3 %d\n",pObjIndex->value[3]); fprintf( fpout, "@objvalue4 %d\n",pObjIndex->value[4]); fprintf( fpout, "@objvalue5 %d\n",pObjIndex->value[5]); break; } fprintf( fpout, "@objweight %d\n",pObjIndex->weight); fprintf( fpout, "@objcost %d\n",pObjIndex->gold_cost); fprintf( fpout, "@objrent %d\n",pObjIndex->rent); for ( ed = pObjIndex->first_extradesc; ed; ed = ed->next ) { fprintf( fpout, "@objextradesc %s\n", ed->keyword); fprintf( fpout, "%s\n", strip_cr( ed->description )); fprintf( fpout, "~\n"); } for ( paf = pObjIndex->first_affect; paf; paf = paf->next ) { if ( paf->location != APPLY_NONE && paf->modifier != 0 ) { switch(paf->location) { default: fprintf( fpout, "@objaffects %s %d \n", a_types[paf->location], paf->modifier); break; break; case APPLY_RESISTANT: case APPLY_SUSCEPTIBLE: case APPLY_IMMUNE: fprintf( fpout, "@objaffectris %s %s\n", a_types[paf->location], flag_string(paf->modifier, ris_flags) ); break; case APPLY_AFFECT: #ifdef SMAUG102 fprintf( fpout, "@objapplyaffect %s %s\n", a_types[paf->location], affect_bit_name(paf->modifier) ); #endif #ifdef SMAUG14 fprintf( fpout, "@objapplyaffect %s", a_types[paf->location]); for ( i = 0; i < 32 ; i++ ) if ( IS_SET( paf->modifier, 1 << i ) ) { fprintf(fpout, " %s",a_flags[i]); } fprintf(fpout, "\n" ); #endif break; case APPLY_WEAPONSPELL: case APPLY_WEARSPELL: case APPLY_REMOVESPELL: fprintf( fpout, "@objcastspell %s '%s'\n", a_types[paf->location], IS_VALID_SN(paf->modifier) ? skill_table[paf->modifier]->name : "'unknown'"); if(!IS_VALID_SN(paf->modifier)) pager_printf(ch," &R unknown sn %d&w\n\r", paf->modifier); break; } } } if ( pObjIndex->mudprogs ) { fprintf( fpout, "@objprograms\n"); for ( mprog = pObjIndex->mudprogs; mprog; mprog = mprog->next ) fprintf( fpout, "> %s %s~\n%s~\n", mprog_type_to_name( mprog->type ), mprog->arglist, strip_cr(make_out_prog(mprog->comlist)) ); fprintf( fpout, "|\n" ); } } /* save rooms */ fprintf( fpout, "#ROOMS\n" ); ax_exit(fpout,tarea,tarea->low_r_vnum,tarea->hi_r_vnum); ax_entrance(fpout,tarea,tarea->low_r_vnum,tarea->hi_r_vnum); for ( vnum = tarea->low_r_vnum; vnum <= tarea->hi_r_vnum; vnum++ ) { if ( (room = get_room_index( vnum )) == NULL ) continue; #ifdef DRAGONBANE if (room->sector_type == SECT_DELETED) { continue; } #endif fprintf( fpout, "!roomvnum %d\n",OUT_VNUM(vnum)); fprintf( fpout, "@roomname %s\n",room->name); fprintf( fpout, "@roomdescription\n%s\n",strip_cr(room->description) ); fprintf( fpout,"~\n"); fprintf( fpout, "@roomflags %s\n",flag_string(room->room_flags,r_flags)); #ifdef DRAGONBANE fprintf( fpout, "@roomflags %s\n",flag_string(room->room_flag2,r_flag2)); #endif fprintf( fpout, "@roomsectortype %s\n",ax_sector_names[room->sector_type]); fprintf( fpout, "@roomteleportdelay %d\n",room->tele_delay); if(room->tele_vnum) fprintf( fpout, "@roomteleportvnum %d\n",OUT_VNUM(room->tele_vnum)); fprintf( fpout, "@roomtunnelcapacity %d\n",room->tunnel); for ( xit = room->first_exit; xit; xit = xit->next ) { if ( IS_SET(xit->exit_info, EX_PORTAL) ) /* don't fold portals */ continue; fprintf( fpout, "^roomexit %s\n",dir_name[xit->vdir] ); fprintf( fpout, "@roomexitdesc \n%s\n",strip_cr( xit->description ) ); fprintf( fpout,"~\n"); fprintf( fpout, "@roomexitkeyword %s\n",strip_cr( xit->keyword ) ); fprintf( fpout, "@roomexitexitinfo %s\n",flag_string(xit->exit_info & ~EX_BASHED,ex_flags)); if(xit->key > 0) fprintf( fpout, "@roomexitkey %d\n",OUT_VNUM(xit->key)); else fprintf( fpout, "@roomexitkey none\n"); fprintf( fpout, "@roomexittovnum %d\n",OUT_VNUM(xit->vnum)); fprintf( fpout, "@roomexitdistance %d\n",xit->distance); /* if(xit->vnum < tarea->low_r_vnum || xit->vnum > tarea->hi_r_vnum) fprintf(fpout, "@roomislinktoexternalarea\n"); */ } for ( ed = room->first_extradesc; ed; ed = ed->next ) { fprintf( fpout, "@roomextradesckeywords %s\n", ed->keyword); fprintf( fpout, "%s\n",strip_cr( ed->description )); fprintf( fpout, "~\n"); } #ifdef SAVEMAPS if ( room->map ) /* maps */ { #ifdef OLDMAPS fprintf( fpout, "M\n" ); fprintf( fpout, "%s~\n", strip_cr( room->map ) ); #endif fprintf( fpout, "M %d %d %d %c\n", room->map->vnum , room->map->x , room->map->y , room->map->entry ); } #endif if ( room->mudprogs ) { fprintf( fpout, "@roomprograms\n"); for ( mprog = room->mudprogs; mprog; mprog = mprog->next ) fprintf( fpout, "> %s %s~\n%s~\n", mprog_type_to_name( mprog->type ), mprog->arglist, strip_cr(make_out_prog(mprog->comlist)) ); fprintf( fpout, "|\n" ); } fprintf( fpout, "@roomexitwordcheck\n"); } /* save resets */ fprintf( fpout, "#RESETS\n" ); for ( treset = tarea->first_reset; treset; treset = treset->next ) { switch( treset->command ) /* extra arg1 arg2 arg3 */ { default: case '*': break; case 'm': case 'M': fprintf(fpout, "!mobresetvnum %d\n",OUT_VNUM(getmobext(tarea,treset->arg1))); fprintf(fpout, "@mobresetinroom %d\n",OUT_VNUM(treset->arg3)); fprintf(fpout, "@mobresetlimit %d\n",treset->arg2); break; case 'o': case 'O': fprintf(fpout, "!objresetvnum %d\n",OUT_VNUM(getobjext(tarea,treset->arg1))); lastobj=getobjext(tarea,treset->arg1); fprintf(fpout, "@objresetinroom %d\n",OUT_VNUM(treset->arg3)); fprintf(fpout, "@objresetlimit %d\n",treset->arg2); break; case 'p': case 'P': fprintf(fpout, "!putobjvnum %d\n",OUT_VNUM(getobjext(tarea,treset->arg1))); if(treset->arg3) fprintf(fpout, "@putobjinobjvnum %d\n",OUT_VNUM(getobjext(tarea,treset->arg3))); else fprintf(fpout, "@putobjunderobjvnum %d\n",OUT_VNUM(lastobj)); fprintf(fpout, "@putobjresetlimit %d\n",treset->arg2); break; case 'e': case 'E': fprintf( fpout, "!equipobjvnum %d\n",OUT_VNUM(getobjext(tarea,treset->arg1))); fprintf( fpout,"@equipwearlocation %s\n",wear_locs[treset->arg3]); break; case 'd': case 'D': fprintf( fpout, "!doorinroomvnum %d\n",OUT_VNUM(treset->arg1)); fprintf( fpout, "@doordirection %s\n",dir_name[treset->arg2]); fprintf( fpout, "@doorstate %s\n",flag_string(treset->arg3,ex_flags)); break; case 't': case 'T': fprintf( fpout, "!trapflag %s\n",flag_string(treset->extra,trap_flags)); fprintf( fpout, "@traptype %s\n",ax_traps[treset->arg1]); fprintf( fpout, "@trapcharges %d\n",treset->arg2); fprintf( fpout, "@trapvnum %d\n",OUT_VNUM(treset->arg3)); break; case 'g': case 'G': fprintf(fpout ,"!giveobj %d\n",OUT_VNUM(getobjext(tarea,treset->arg1))); fprintf(fpout, "@giveobjresetlimit %d\n",treset->arg2); break; case 'r': case 'R': fprintf(fpout, "!randomexitsforroom %d\n",OUT_VNUM(treset->arg1)); fprintf(fpout, "@randomexitlastdoor %d\n",treset->arg2); break; } } /* save shops */ fprintf( fpout, "#SHOPS\n" ); for ( vnum = tarea->low_m_vnum; vnum <= tarea->hi_m_vnum; vnum++ ) { int keeper; if ( (pMobIndex = get_mob_index( vnum )) == NULL ) continue; if ( (pShop = pMobIndex->pShop) == NULL ) continue; keeper=getmobext(tarea,pShop->keeper); fprintf( fpout, "!shopkeepervnum %d\n",OUT_VNUM(keeper)); fprintf( fpout, "@shoptradewith all\n"); if(pShop->buy_type[0]) fprintf( fpout, "@shopbuys %s\n",o_types[pShop->buy_type[0]]); if(pShop->buy_type[1]) fprintf( fpout, "@shopbuys %s\n",o_types[pShop->buy_type[1]]); if(pShop->buy_type[2]) fprintf( fpout, "@shopbuys %s\n",o_types[pShop->buy_type[2]]); if(pShop->buy_type[3]) fprintf( fpout, "@shopbuys %s\n",o_types[pShop->buy_type[3]]); if(pShop->buy_type[4]) fprintf( fpout, "@shopbuys %s\n",o_types[pShop->buy_type[4]]); fprintf( fpout, "@shoptype %s\n",ax_shoptypes[0]); fprintf( fpout, "@shopprofitbuy %d\n",pShop->profit_buy); fprintf( fpout, "@shopprofitsell %d\n",pShop->profit_sell); fprintf( fpout, "@shopopenhour %d\n",pShop->open_hour); fprintf( fpout, "@shopclosehour %d\n",pShop->close_hour); } /* save repair shops */ fprintf( fpout, "#REPAIRS\n" ); for ( vnum = tarea->low_m_vnum; vnum <= tarea->hi_m_vnum; vnum++ ) { int keeper; if ( (pMobIndex = get_mob_index( vnum )) == NULL ) continue; if ( (pRepair = pMobIndex->rShop) == NULL ) continue; keeper=getmobext(tarea,pRepair->keeper); fprintf( fpout, "!shoprepairvnum %d\n",OUT_VNUM(keeper)); if(pRepair->fix_type[0]) fprintf( fpout, "@shoprepairs %s\n",o_types[pRepair->fix_type[0]]); if(pRepair->fix_type[1]) fprintf( fpout, "@shoprepairs %s\n",o_types[pRepair->fix_type[1]]); if(pRepair->fix_type[2]) fprintf( fpout, "@shoprepairs %s\n",o_types[pRepair->fix_type[2]]); fprintf( fpout, "@shopprofitfix %d\n",pRepair->profit_fix); fprintf( fpout, "@shoprepairtype %s\n",ax_shoptypes[pRepair->shop_type]); fprintf( fpout, "@shoprepairopenhour %d\n",pRepair->open_hour); fprintf( fpout, "@shoprepairclosehour %d\n",pRepair->close_hour); } #ifdef DONT_THINK_THIS_IS_NEEDED /* save specials */ fprintf( fpout, "#SPECIALS\n" ); for ( vnum = tarea->low_m_vnum; vnum <= tarea->hi_m_vnum; vnum++ ) { if ( (pMobIndex = get_mob_index( vnum )) == NULL ) continue; if ( !pMobIndex->spec_fun ) continue; fprintf( fpout, "!mobhasspecvnum %d\n",OUT_VNUM(vnum)); fprintf( fpout, "@mobspecial %s\n",lookup_spec(pMobIndex->spec_fun)); } #endif /* END */ fprintf( fpout, "#END\n" ); fclose(fpout); display("done\n\r"); return; }