/************************************************************************** * Circle Area Export - Will save Dawn/DOT Area Files to Circle Format * * Copyright (c) 2006 by Brad Wilson (Ixliam) * * To use this code, you must follow all relavent licences below and leave * * this credit intact. If you find this useful, please let me know. * *************************************************************************** * >> DikuMUD (GAMMA 0.0) copyright (c)1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik Staerfeldt, Tom Madsen, & Katja Nyboe. * * >> CircleMUD 3.1 Created by Jeremy Elson, copyright (C) 1993, 94 by * * the Trustees of the Johns Hopkins University * ***************************************************************************/ /************************************************************************** This small piece of code is usefull to drop into the end of obdb.cpp. Just add the command do_circleexport to your interp.h and interp.cpp files, and you can export your areas out to circle. You will need to fix up once they export, as item resets and shops do not seem to come in quite right, but this beats having to do it manually. If you like this code or improve it, please drop me a line at ixliam wotl org. ***************************************************************************/ void save_circle_zone ( FILE * fp, AREA_DATA * pArea ) { RESET_DATA *pReset; MOB_INDEX_DATA *pLastMob = NULL; OBJ_INDEX_DATA *pLastObj; ROOM_INDEX_DATA *pRoom; EXIT_DATA *pExit; int door; char buf[MSL]; int iHash; fprintf ( fp, "#%d\n", pArea->min_vnum/100 ); // Assign Zone Number fprintf ( fp, "None.~\n"); // no clue fprintf ( fp, "%s~\n", pArea->name); // area name fprintf ( fp, "%d %d 30 2\n", pArea->min_vnum, pArea->max_vnum ); // vnums and reset time for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ ) { for ( pRoom = room_index_hash[iHash]; pRoom; pRoom = pRoom->next ) { if ( pRoom->area == pArea ) { for ( pReset = pRoom->reset_first; pReset; pReset = pReset->next ) { switch ( pReset->command ) { default: bug ( "Save_resets: bad command." ); break; case 'M': pLastMob = get_mob_index ( pReset->arg1 ); fprintf ( fp, "M 0 %d %d %d %d\n", pReset->arg1, pReset->arg2, pReset->arg3, pReset->arg4 ); break; case 'O': pLastObj = get_obj_index ( pReset->arg1 ); pRoom = get_room_index ( pReset->arg3 ); fprintf ( fp, "O 0 %d 0 %d\n", pReset->arg1, pReset->arg3 ); break; case 'P': pLastObj = get_obj_index ( pReset->arg1 ); fprintf ( fp, "P 0 %d %d %d %d\n", pReset->arg1, pReset->arg2, pReset->arg3, pReset->arg4 ); break; case 'G': fprintf ( fp, "G 1 %d 100 -1\n", pReset->arg1 ); if ( !pLastMob ) { sprintf ( buf, "Save_resets: !NO_MOB! in [%s]", pArea->file_name ); bug ( buf ); } break; case 'E': fprintf ( fp, "E 0 %d 0 %d\n", pReset->arg1, pReset->arg3 ); if ( !pLastMob ) { sprintf ( buf, "Save_resets: !NO_MOB! in [%s]", pArea->file_name ); bug ( buf ); } break; case 'D': break; case 'R': pRoom = get_room_index ( pReset->arg1 ); fprintf ( fp, "R 0 %d %d\n", pReset->arg1, pReset->arg2 ); break; } } } /* End if correct area */ } /* End for pRoom */ } /* End for iHash */ for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ ) { for ( pRoom = room_index_hash[iHash]; pRoom; pRoom = pRoom->next ) { if ( pRoom->area == pArea ) { for ( door = 0; door < MAX_DIR; door++ ) { if ( ( pExit = pRoom->exit[door] ) && pExit->u1.to_room ) { int locks = 0; if ( IS_SET ( pExit->rs_flags, EX_ISDOOR ) && ( IS_SET ( pExit->rs_flags, EX_CLOSED ) ) && ( !IS_SET ( pExit->rs_flags, EX_LOCKED ) ) ) locks = 1; if ( IS_SET ( pExit->rs_flags, EX_ISDOOR ) && ( IS_SET ( pExit->rs_flags, EX_CLOSED ) ) && ( IS_SET ( pExit->rs_flags, EX_LOCKED ) ) ) locks = 2; if(locks != 0) fprintf ( fp, "D 0 %d %d %d\n", pRoom->vnum, door, locks); } } } /* End if correct area */ } /* End for pRoom */ } /* End for iHash */ fprintf ( fp, "S\n" ); return; } /**************************************************************************/ void save_circle_rooms ( FILE * fp, AREA_DATA * pArea ) { ROOM_INDEX_DATA *pRoomIndex; EXTRA_DESCR_DATA *pEd; EXIT_DATA *pExit; int iHash; int door, sector; char flags[MSL]; flags[0] = '\0'; for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ ) { for ( pRoomIndex = room_index_hash[iHash]; pRoomIndex; pRoomIndex = pRoomIndex->next ) { if ( pRoomIndex->area == pArea ) { fprintf ( fp, "#%d\n", pRoomIndex->vnum ); fprintf ( fp, "%s~\n", pRoomIndex->name ); fprintf ( fp, "%s\n~\n", fix_string (pRoomIndex->description ) ); fprintf ( fp, "%d ", pArea->min_vnum/100); if(IS_SET(pRoomIndex->room_flags, ROOM_DARK)) fprintf(fp, "a"); if(IS_SET(pRoomIndex->room_flags, ROOM_NO_MOB)) fprintf(fp, "c"); if(IS_SET(pRoomIndex->room_flags, ROOM_INDOORS)) fprintf(fp, "d"); if(IS_SET(pRoomIndex->room_flags, ROOM_SAFE)) fprintf(fp, "e"); if(IS_SET(pRoomIndex->room_flags, ROOM_ANTIMAGIC)) fprintf(fp, "h"); if (pRoomIndex->sector_type == 11) // cave to mountain { fprintf(fp, "i"); // tunnel sector = 5; } if(IS_SET(pRoomIndex->room_flags, ROOM_PRIVATE)) fprintf(fp, "j"); if(IS_SET(pRoomIndex->room_flags, ROOM_GODS_ONLY)) fprintf(fp, "k"); if(IS_SET(pRoomIndex->room_flags, ROOM_OOC)) fprintf(fp, "o"); // OOC to OLC if (pRoomIndex->sector_type == 11) // cave to mountain { fprintf(fp, "r"); // underground sector = 5; } if(!pRoomIndex->room_flags) fprintf(fp, "0"); int sector = pRoomIndex->sector_type; if (pRoomIndex->sector_type == 12) // underwater sector = 9; if (pRoomIndex->sector_type == 8) // swamp to hills sector = 12; if (pRoomIndex->sector_type == 10) // desert to field sector = 2; if (pRoomIndex->sector_type == 9) // air to flying sector = 8; if (pRoomIndex->sector_type == 11) // cave to mountain { sector = 5; } if (pRoomIndex->sector_type == 13) // snow to field sector = 2; if (pRoomIndex->sector_type == 14) // ice to field sector = 2; if (pRoomIndex->sector_type == 15) // trail to field sector = 2; if (pRoomIndex->sector_type == 16) // lava to field sector = 2; if (pRoomIndex->sector_type == 17) // gateway to field sector = 2; fprintf ( fp, " %d\n", sector); for ( pEd = pRoomIndex->extra_descr; pEd; pEd = pEd->next ) { fprintf ( fp, "E\n%s~\n%s~\n", pEd->keyword, fix_string ( pEd->description ) ); } for ( door = 0; door < MAX_DIR; door++ ) /* I hate this! */ { if ( ( pExit = pRoomIndex->exit[door] ) && pExit->u1.to_room ) { int locks = 0; if ( IS_SET ( pExit->rs_flags, EX_ISDOOR ) && ( !IS_SET ( pExit->rs_flags, EX_PICKPROOF ) ) && ( !IS_SET ( pExit->rs_flags, EX_NOPASS ) ) ) locks = 1; if ( IS_SET ( pExit->rs_flags, EX_ISDOOR ) && ( IS_SET ( pExit->rs_flags, EX_PICKPROOF ) ) && ( !IS_SET ( pExit->rs_flags, EX_NOPASS ) ) ) locks = 2; if ( IS_SET ( pExit->rs_flags, EX_ISDOOR ) && ( !IS_SET ( pExit->rs_flags, EX_PICKPROOF ) ) && ( IS_SET ( pExit->rs_flags, EX_NOPASS ) ) ) locks = 2; if ( IS_SET ( pExit->rs_flags, EX_ISDOOR ) && ( IS_SET ( pExit->rs_flags, EX_PICKPROOF ) ) && ( IS_SET ( pExit->rs_flags, EX_NOPASS ) ) ) locks = 2; fprintf ( fp, "D%d\n", door ); fprintf ( fp, "%s~\n", fix_string ( pExit->description ) ); fprintf ( fp, "%s~\n", pExit->keyword ); fprintf ( fp, "%d %d %d\n", locks, pExit->key, pExit->u1.to_room->vnum ); } } fprintf ( fp, "S\n" ); } } } return; } /**************************************************************************/ void savecircle_mobile(FILE *fp, MOB_INDEX_DATA *pMobIndex) { int align = 0; char flags1[MSL]; char flags2[MSL]; bool flag = false; flags1[0] = '\0'; flags2[0] = '\0'; fprintf(fp, "#%d\n", pMobIndex->vnum); fprintf(fp, "%s~\n", pMobIndex->player_name); fprintf(fp, "%s~\n", pMobIndex->short_descr); fprintf(fp, "%s\n~\n", fix_string(pMobIndex->long_descr)); fprintf(fp, "%s\n~\n", fix_string(pMobIndex->description)); if(IS_SET(pMobIndex->act, ACT_DONT_WANDER) || IS_SET(pMobIndex->act, ACT_SENTINEL) ) fprintf(fp, "b"); if(IS_SET(pMobIndex->act, ACT_SCAVENGER)) fprintf(fp, "c"); fprintf(fp, "d"); if(IS_SET(pMobIndex->act, ACT_AGGRESSIVE)) fprintf(fp, "f"); if(IS_SET(pMobIndex->act, ACT_STAY_AREA)) fprintf(fp, "g"); if(IS_SET(pMobIndex->act, ACT_WIMPY)) fprintf(fp, "h"); if(IS_SET(pMobIndex->act, ACT_AGGRESSIVE)) fprintf(fp, "f"); if(IS_SET(pMobIndex->act, ACT_AGGRESSIVE)) fprintf(fp, "f"); fprintf(fp, " 0 0 0 "); if(IS_SET(pMobIndex->affected_by, AFF_BLIND)){ fprintf(fp, "a"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_INVISIBLE)){ fprintf(fp, "b"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_DETECT_EVIL)){ fprintf(fp, "c"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_DETECT_GOOD)){ fprintf(fp, "c"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_DETECT_INVIS)){ fprintf(fp, "d"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_DETECT_MAGIC)){ fprintf(fp, "e"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_DETECT_HIDDEN)){ fprintf(fp, "f"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_OTTERLUNGS)){ fprintf(fp, "g"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_SANCTUARY)){ fprintf(fp, "h"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_CURSE)){ fprintf(fp, "j"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_INFRARED) || IS_SET(pMobIndex->affected_by, AFF_DARK_VISION)){ fprintf(fp, "k"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_POISON)){ fprintf(fp, "l"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_PROTECT_EVIL)){ fprintf(fp, "m"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_PROTECT_GOOD)){ fprintf(fp, "n"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_SLEEP)){ fprintf(fp, "o"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_SNEAK)){ fprintf(fp, "s"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_HIDE)){ fprintf(fp, "t"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_CHARM)){ fprintf(fp, "v"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_FLYING)){ fprintf(fp, "w"); flag = true; } if(IS_SET(pMobIndex->affected_by, AFF_OTTERLUNGS)){ fprintf(fp, "x"); flag = true; } if(flag == false) fprintf ( fp, "0"); switch(pMobIndex->alliance) { case 3: align = 1000; break; case 2: align = 700; break; case 1: align = 325; break; case 0: align = 0; break; case -1: align = -325; break; case -2: align = -700; break; case -3: align = -1000; break; } fprintf(fp, " 0 0 0 %d E\n", align); int thac0_00 = 20; int thac0_32 = -4; /* as good as a thief */ if (IS_SET(pMobIndex->act,ACT_WARRIOR)) thac0_32 = -10; else if (IS_SET(pMobIndex->act,ACT_THIEF)) thac0_32 = -4; else if (IS_SET(pMobIndex->act,ACT_CLERIC)) thac0_32 = 2; else if (IS_SET(pMobIndex->act,ACT_MAGE)) thac0_32 = 6; int thac0 = interpolate( pMobIndex->level, thac0_00, thac0_32 ); if (thac0 < 0) thac0 = thac0/2; if (thac0 < -5) thac0 = -5 + (thac0 + 5) / 2; fprintf(fp, "%d %d %d ", pMobIndex->level, thac0, pMobIndex->ac[AC_PIERCE]/100); fprintf(fp, "%dd%d+%d ", pMobIndex->hit[DICE_NUMBER], pMobIndex->hit[DICE_TYPE], pMobIndex->hit[DICE_BONUS]); fprintf(fp, "%dd%d+%d\n", pMobIndex->damage[DICE_NUMBER], pMobIndex->damage[DICE_TYPE], pMobIndex->damage[DICE_BONUS]); fprintf(fp, "%ld 100 1 ", pMobIndex->wealth/100); if (IS_SET(pMobIndex->act,ACT_WARRIOR)) fprintf( fp, "3\n"); else if (IS_SET(pMobIndex->act,ACT_THIEF)) fprintf( fp, "2\n"); else if (IS_SET(pMobIndex->act,ACT_CLERIC)) fprintf( fp, "1\n"); else if (IS_SET(pMobIndex->act,ACT_MAGE)) fprintf( fp, "0\n"); else fprintf( fp, "3\n"); fprintf( fp, "%d %d %d\nE\n", pMobIndex->start_pos - 1, pMobIndex->default_pos - 1, pMobIndex->sex); return; } /**************************************************************************/ void save_circle_mobiles(FILE * fp, AREA_DATA * pArea) { int i; MOB_INDEX_DATA *pMob; for (i = pArea->min_vnum; i <= pArea->max_vnum; i++) { if ((pMob = get_mob_index(i))) savecircle_mobile(fp, pMob); } return; } /**************************************************************************/ void save_circle_object ( FILE * fp, OBJ_INDEX_DATA * pObjIndex ) { EXTRA_DESCR_DATA *pEd; bool flag = false; fprintf ( fp, "#%d\n", pObjIndex->vnum ); fprintf ( fp, "%s~\n", pObjIndex->name ); fprintf ( fp, "%s~\n", pObjIndex->short_descr ); fprintf ( fp, "%s~\n~\n", fix_string ( pObjIndex->description ) ); switch ( pObjIndex->item_type ) { case ITEM_ROOM_KEY: fprintf ( fp, "18 " ); // key break; case ITEM_COMPONENT: fprintf ( fp, "13 " ); // trash break; case ITEM_RP: case ITEM_RESOURCE: case ITEM_ORE: case ITEM_STARGATE: case ITEM_FIREARM: case ITEM_AMMO: case ITEM_RUNE: case ITEM_HIDE: case ITEM_PARCHMENT: case ITEM_HERB: case ITEM_CORPSE_NPC: case ITEM_CORPSE_PC: case ITEM_PILL: case ITEM_PROTECT: case ITEM_MAP: case ITEM_PORTAL: case ITEM_WARP_STONE: case ITEM_GEM: case ITEM_JEWELRY: case ITEM_JUKEBOX: case ITEM_TOKEN: case ITEM_POULTICE: case ITEM_MORTAR: case ITEM_CAULDRON: case ITEM_FLASK: case ITEM_MATERIAL: case ITEM_SLOTMACHINE: case ITEM_TABAC_PIPE: case ITEM_POLE: case ITEM_PROJECTILE: case ITEM_QUIVER: fprintf ( fp, "12 " ); // other break; case ITEM_VEHICLE_CONTROLS: fprintf ( fp, "27 " ); // vehicle control break; case ITEM_VEHICLE: fprintf ( fp, "24 " ); // vehicle break; case ITEM_VEHICLE_WINDOW: fprintf ( fp, "26 " ); // vehicle window break; case ITEM_VEHICLE_EXIT: fprintf ( fp, "25 " ); // vehicle exit break; default: fprintf ( fp, "%d ", pObjIndex->item_type ); break; } if(IS_SET(pObjIndex->extra_flags, OBJEXTRA_GLOW)){ fprintf ( fp, "a"); flag = true; } if(IS_SET(pObjIndex->extra_flags, OBJEXTRA_HUM)){ fprintf ( fp, "b"); flag = true; } if(IS_SET(pObjIndex->extra_flags, OBJEXTRA_INVIS)){ fprintf ( fp, "e"); flag = true; } if(IS_SET(pObjIndex->extra_flags, OBJEXTRA_MAGIC)){ fprintf ( fp, "g"); flag = true; } if(IS_SET(pObjIndex->extra_flags, OBJEXTRA_NODROP)){ fprintf ( fp, "h"); flag = true; } if(IS_SET(pObjIndex->extra_flags, OBJEXTRA_BLESS)){ fprintf ( fp, "i"); flag = true; } if(IS_SET(pObjIndex->extra_flags, OBJEXTRA_ANTI_GOOD)){ fprintf ( fp, "j"); flag = true; } if(IS_SET(pObjIndex->extra_flags, OBJEXTRA_ANTI_EVIL)){ fprintf ( fp, "k"); flag = true; } if(IS_SET(pObjIndex->extra_flags, OBJEXTRA_ANTI_NEUTRAL)){ fprintf ( fp, "l"); flag = true; } if(flag == false) fprintf ( fp, "0"); fprintf ( fp, " "); flag = false; if(IS_SET(pObjIndex->wear_flags, OBJWEAR_TAKE)){ fprintf ( fp, "a"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_FINGER)){ fprintf ( fp, "b"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_NECK)){ fprintf ( fp, "c"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_TORSO)){ fprintf ( fp, "d"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_HEAD)){ fprintf ( fp, "e"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_LEGS)){ fprintf ( fp, "f"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_FEET)){ fprintf ( fp, "g"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_HANDS)){ fprintf ( fp, "h"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_ARMS)){ fprintf ( fp, "i"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_SHIELD)){ fprintf ( fp, "j"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_ABOUT)){ fprintf ( fp, "k"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_WAIST)){ fprintf ( fp, "l"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_WRIST)){ fprintf ( fp, "m"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_WIELD)){ fprintf ( fp, "n"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_HOLD)){ fprintf ( fp, "o"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_BACK)){ fprintf ( fp, "p"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_EAR)){ fprintf ( fp, "q"); flag = true; } if(IS_SET(pObjIndex->wear_flags, OBJWEAR_FACE)){ fprintf ( fp, "s"); flag = true; } if(flag == false) fprintf ( fp, "0"); fprintf ( fp, "\n"); switch ( pObjIndex->item_type ) { default: fprintf ( fp, "%d ", pObjIndex->value[0]); fprintf ( fp, "%d ", pObjIndex->value[1]); fprintf ( fp, "%d ", pObjIndex->value[2]); fprintf ( fp, "%d\n", pObjIndex->value[3]); break; case ITEM_WEAPON: fprintf ( fp, "0 %d %d %d\n", pObjIndex->value[1], pObjIndex->value[2], pObjIndex->value[3] ); break; } fprintf ( fp, "%d ", pObjIndex->weight ); fprintf ( fp, "%d 0\n", pObjIndex->cost ); for( pEd = pObjIndex->extra_descr; pEd; pEd = pEd->next ) { if (is_space(pEd->description[0])) { fprintf( fp, "E\n%s~\n.%s\n~\n", pEd->keyword, fix_string( pEd->description ) ); } else { fprintf( fp, "E\n%s~\n%s\n~\n", pEd->keyword, fix_string( pEd->description ) ); } } return; } /**************************************************************************/ void save_circle_objects ( FILE * fp, AREA_DATA * pArea ) { int i; OBJ_INDEX_DATA *pObj; for ( i = pArea->min_vnum; i <= pArea->max_vnum; i++ ) { if ( ( pObj = get_obj_index ( i ) ) ) save_circle_object ( fp, pObj ); } return; } /**************************************************************************/ void save_circle_shops ( FILE * fp, AREA_DATA * pArea ) { SHOP_DATA *pShopIndex; MOB_INDEX_DATA *pMobIndex; int iTrade; int iHash; fprintf( fp, "CircleMUD v3.0 Shop File~\n"); for ( iHash = 0; iHash < MAX_KEY_HASH; iHash++ ) { for ( pMobIndex = mob_index_hash[iHash]; pMobIndex; pMobIndex = pMobIndex->next ) { if ( pMobIndex && pMobIndex->area == pArea && pMobIndex->pShop ) { pShopIndex = pMobIndex->pShop; fprintf ( fp, "#%d~\n", pShopIndex->keeper ); fprintf ( fp, "3031\n"); fprintf ( fp, "3108\n"); fprintf ( fp, "3107\n"); fprintf ( fp, "-1\n"); fprintf ( fp, "1.1\n"); fprintf ( fp, "0.%d\n", pShopIndex->profit_sell); for ( iTrade = 0; iTrade < MAX_TRADE; iTrade++ ) { if ( pShopIndex->buy_type[iTrade] != 0 ) { fprintf ( fp, "%d\n", pShopIndex->buy_type[iTrade] ); } } fprintf ( fp, "-1\n"); fprintf ( fp, "%s Sorry, just what I've got. No special orders.~\n", "%s"); fprintf ( fp, "%s But ya haven't that item!~\n", "%s"); fprintf ( fp, "%s Nope, don't have much use for them.~\n", "%s"); fprintf ( fp, "%s I'm sorry, but I cannot afford such a treasure.~\n", "%s"); fprintf ( fp, "%s Come back when you've got the coins. I'll wait.~\n", "%s"); fprintf ( fp, "%s That'll be %s coins, and what a bargin too!~\n", "%s", "%d"); fprintf ( fp, "%s I can give ya %s coins, that's the best offer you'll get around here.~\n", "%s", "%d"); fprintf ( fp, "-1\n"); fprintf ( fp, "0\n"); fprintf ( fp, "%d\n", pShopIndex->keeper); fprintf ( fp, "0\n"); fprintf ( fp, "%d\n", pShopIndex->keeper); // Hope the keeper & rooms vnums are the same fprintf ( fp, "-1\n"); fprintf ( fp, "0\n"); fprintf ( fp, "28\n"); fprintf ( fp, "0\n"); fprintf ( fp, "0\n"); } } } return; } /**************************************************************************/ void savecircle ( AREA_DATA * pArea ) { FILE *fp=NULL; char write_filename[MIL]; sprintf(write_filename, "/home/yourmudhere/world/zon/%d.zon", pArea->min_vnum/100); if ( !( fp = fopen ( write_filename, "w" ) ) ) { bug ( "Open_area: fopen" ); perror ( pArea->file_name ); } save_circle_zone ( fp, pArea ); fprintf ( fp, "$\n" ); fclose ( fp ); sprintf(write_filename, "/home/yourmudhere/world/wld/%d.wld", pArea->min_vnum/100); if ( !( fp = fopen ( write_filename, "w" ) ) ) { bug ( "Open_area: fopen" ); perror ( pArea->file_name ); } save_circle_rooms ( fp, pArea ); fprintf ( fp, "$\n" ); fclose ( fp ); sprintf(write_filename, "/home/yourmudhere/world/mob/%d.mob", pArea->min_vnum/100); if ( !( fp = fopen ( write_filename, "w" ) ) ) { bug ( "Open_area: fopen" ); perror ( pArea->file_name ); } save_circle_mobiles ( fp, pArea ); fprintf ( fp, "$\n" ); fclose ( fp ); sprintf(write_filename, "/home/yourmudhere/world/obj/%d.obj", pArea->min_vnum/100); if ( !( fp = fopen ( write_filename, "w" ) ) ) { bug ( "Open_area: fopen" ); perror ( pArea->file_name ); } save_circle_objects ( fp, pArea ); fprintf ( fp, "$\n" ); fclose ( fp ); sprintf(write_filename, "/home/yourmudhere/world/shp/%d.shp", pArea->min_vnum/100); if ( !( fp = fopen ( write_filename, "w" ) ) ) { bug ( "Open_area: fopen" ); perror ( pArea->file_name ); } save_circle_shops ( fp, pArea ); fprintf ( fp, "$\n" ); fclose ( fp ); return; } /**************************************************************************/ void do_circleexport( char_data *ch, char *argument ) { AREA_DATA *pArea; ch->printlnf("Saving the world into CIRCLE format...."); for( pArea = area_first; pArea; pArea = pArea->next ) { ch->printlnf("Saving %s into zone %d.", pArea->file_name, pArea->min_vnum/10); savecircle( pArea ); } ch->printlnf("CIRCLE EXPORT COMPLETE."); return; } /**************************************************************************/ /**************************************************************************/