#include <sys/types.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "tables.h"
#include "olc.h"
Include dependency graph for olc_save.c:

Go to the source code of this file.
Defines | |
| #define | DIF(a, b) (~((~a)|(b))) |
Functions | |
| void | do_asave (CHAR_DATA *ch, char *argument) |
| char * | fix_string (const char *str) |
| char * | fwrite_flag (long flags, char buf[]) |
| void | save_area (AREA_DATA *pArea) |
| void | save_area_list () |
| void | save_door_resets (FILE *fp, AREA_DATA *pArea) |
| void | save_helps () |
| void | save_mobile (FILE *fp, MOB_INDEX_DATA *pMobIndex) |
| void | save_mobiles (FILE *fp, AREA_DATA *pArea) |
| void | save_mobprogs (FILE *fp, AREA_DATA *pArea) |
| void | save_object (FILE *fp, OBJ_INDEX_DATA *pObjIndex) |
| void | save_objects (FILE *fp, AREA_DATA *pArea) |
| void | save_resets (FILE *fp, AREA_DATA *pArea) |
| void | save_rooms (FILE *fp, AREA_DATA *pArea) |
| void | save_shops (FILE *fp, AREA_DATA *pArea) |
| void | save_specials (FILE *fp, AREA_DATA *pArea) |
|
|
Definition at line 36 of file olc_save.c. Referenced by save_mobile(). |
|
||||||||||||
|
Definition at line 996 of file olc_save.c. References AREA_CHANGED, area_first, area_data::area_flags, ED_AREA, ED_HELP, ED_MOBILE, ED_NONE, ED_OBJECT, ED_ROOM, area_data::file_name, get_area_data(), IS_BUILDER, IS_NPC, is_number(), IS_SET, log_string(), MAX_INPUT_LENGTH, area_data::name, area_data::next, REMOVE_BIT, save_area(), save_area_list(), save_helps(), send_to_char(), smash_tilde(), and str_cmp(). 00997 {
00998 char arg1[MAX_INPUT_LENGTH];
00999 AREA_DATA *pArea;
01000 FILE *fp;
01001 int value, sec;
01002
01003 fp = NULL;
01004
01005 if (!ch) /* Do an autosave */
01006 sec = 9;
01007 else if (!IS_NPC (ch))
01008 sec = ch->pcdata->security;
01009 else
01010 sec = 0;
01011
01012 /* {
01013 save_area_list();
01014 for( pArea = area_first; pArea; pArea = pArea->next )
01015 {
01016 save_area( pArea );
01017 REMOVE_BIT( pArea->area_flags, AREA_CHANGED );
01018 }
01019 return;
01020 } */
01021
01022 smash_tilde (argument);
01023 strcpy (arg1, argument);
01024
01025 if (arg1[0] == '\0')
01026 {
01027 if (ch)
01028 {
01029 send_to_char ("Syntax:\n\r", ch);
01030 send_to_char (" asave <vnum> - saves a particular area\n\r",
01031 ch);
01032 send_to_char (" asave list - saves the area.lst file\n\r",
01033 ch);
01034 send_to_char
01035 (" asave area - saves the area being edited\n\r", ch);
01036 send_to_char (" asave changed - saves all changed zones\n\r",
01037 ch);
01038 send_to_char (" asave world - saves the world! (db dump)\n\r",
01039 ch);
01040 send_to_char( " asave helps - saves the help files\n\r", ch );
01041 send_to_char ("\n\r", ch);
01042 }
01043
01044 return;
01045 }
01046
01047 /* Snarf the value (which need not be numeric). */
01048 value = atoi (arg1);
01049 if (!(pArea = get_area_data (value)) && is_number (arg1))
01050 {
01051 if (ch)
01052 send_to_char ("That area does not exist.\n\r", ch);
01053 return;
01054 }
01055
01056 /* Save area of given vnum. */
01057 /* ------------------------ */
01058 if (is_number (arg1))
01059 {
01060 if (ch && !IS_BUILDER (ch, pArea))
01061 {
01062 send_to_char ("You are not a builder for this area.\n\r", ch);
01063 return;
01064 }
01065
01066 save_area_list ();
01067 save_area (pArea);
01068
01069 return;
01070 }
01071
01072 /* Save the world, only authorized areas. */
01073 /* -------------------------------------- */
01074 if (!str_cmp ("world", arg1))
01075 {
01076 save_area_list ();
01077 for (pArea = area_first; pArea; pArea = pArea->next)
01078 {
01079 /* Builder must be assigned this area. */
01080 if (ch && !IS_BUILDER (ch, pArea))
01081 continue;
01082
01083 save_area (pArea);
01084 REMOVE_BIT (pArea->area_flags, AREA_CHANGED);
01085 }
01086
01087 if (ch)
01088 send_to_char ("You saved the world.\n\r", ch);
01089
01090 //save_other_helps (NULL);
01091
01092 return;
01093 }
01094
01095 /* Save changed areas, only authorized areas. */
01096 /* ------------------------------------------ */
01097 if (!str_cmp ("changed", arg1))
01098 {
01099 char buf[MAX_INPUT_LENGTH];
01100
01101 save_area_list ();
01102
01103 if (ch)
01104 send_to_char ("Saved zones:\n\r", ch);
01105 else
01106 log_string ("Saved zones:");
01107
01108 sprintf (buf, "None.\n\r");
01109
01110 for (pArea = area_first; pArea; pArea = pArea->next)
01111 {
01112 /* Builder must be assigned this area. */
01113 if (ch && !IS_BUILDER (ch, pArea))
01114 continue;
01115
01116 /* Save changed areas. */
01117 if (IS_SET (pArea->area_flags, AREA_CHANGED))
01118 {
01119 save_area (pArea);
01120 sprintf (buf, "%24s - '%s'", pArea->name, pArea->file_name);
01121 if (ch)
01122 {
01123 send_to_char (buf, ch);
01124 send_to_char ("\n\r", ch);
01125 }
01126 else
01127 log_string (buf);
01128 REMOVE_BIT (pArea->area_flags, AREA_CHANGED);
01129 }
01130 }
01131
01132 //save_other_helps (ch);
01133
01134 if (!str_cmp (buf, "None.\n\r"))
01135 {
01136 if (ch)
01137 send_to_char (buf, ch);
01138 else
01139 log_string ("None.");
01140 }
01141
01142 return;
01143 }
01144
01145 /* Save the area.lst file. */
01146 /* ----------------------- */
01147 if (!str_cmp (arg1, "list"))
01148 {
01149 save_area_list ();
01150 return;
01151 }
01152
01153 /* Save area being edited, if authorized. */
01154 /* -------------------------------------- */
01155 if (!str_cmp (arg1, "area"))
01156 {
01157 if (!ch || !ch->desc)
01158 return;
01159
01160 /* Is character currently editing. */
01161 if (ch->desc->editor == ED_NONE)
01162 {
01163 send_to_char ("You are not editing an area, "
01164 "therefore an area vnum is required.\n\r", ch);
01165 return;
01166 }
01167
01168 /* Find the area to save. */
01169 switch (ch->desc->editor)
01170 {
01171 case ED_AREA:
01172 pArea = (AREA_DATA *) ch->desc->pEdit;
01173 break;
01174 case ED_ROOM:
01175 pArea = ch->in_room->area;
01176 break;
01177 case ED_OBJECT:
01178 pArea = ((OBJ_INDEX_DATA *) ch->desc->pEdit)->area;
01179 break;
01180 case ED_MOBILE:
01181 pArea = ((MOB_INDEX_DATA *) ch->desc->pEdit)->area;
01182 break;
01183 case ED_HELP:
01184 send_to_char ("Grabando area : ", ch);
01185 //save_other_helps (ch);
01186 return;
01187 default:
01188 pArea = ch->in_room->area;
01189 break;
01190 }
01191
01192 if (!IS_BUILDER (ch, pArea))
01193 {
01194 send_to_char ("You are not a builder for this area.\n\r", ch);
01195 return;
01196 }
01197
01198 save_area_list ();
01199 save_area (pArea);
01200 REMOVE_BIT (pArea->area_flags, AREA_CHANGED);
01201 send_to_char ("Area saved.\n\r", ch);
01202 return;
01203 }
01204 /* Save Help File */
01205 if(!str_cmp(arg1, "helps"))
01206 {
01207 save_helps();
01208 send_to_char( "Helps Saved.\n\r", ch);
01209 return;
01210 }
01211
01212 /* Show correct syntax. */
01213 /* -------------------- */
01214 if (ch)
01215 do_asave (ch, "");
01216
01217 return;
01218 }
|
Here is the call graph for this function:

|
|
Definition at line 50 of file olc_save.c. References MAX_STRING_LENGTH. Referenced by save_area(), save_helps(), save_mobile(), save_mobprogs(), save_object(), and save_rooms(). 00051 {
00052 static char strfix[MAX_STRING_LENGTH * 2];
00053 int i;
00054 int o;
00055
00056 if (str == NULL)
00057 return '\0';
00058
00059 for (o = i = 0; str[i + o] != '\0'; i++)
00060 {
00061 if (str[i + o] == '\r' || str[i + o] == '~')
00062 o++;
00063 strfix[i] = str[i + o];
00064 }
00065 strfix[i] = '\0';
00066 return strfix;
00067 }
|
|
||||||||||||
|
Definition at line 126 of file olc_save.c. Referenced by save_mobile(), and save_object(). 00127 {
00128 char offset;
00129 char *cp;
00130
00131 buf[0] = '\0';
00132
00133 if (flags == 0)
00134 {
00135 strcpy (buf, "0");
00136 return buf;
00137 }
00138
00139 /* 32 -- number of bits in a long */
00140
00141 for (offset = 0, cp = buf; offset < 32; offset++)
00142 if (flags & ((long) 1 << offset))
00143 {
00144 if (offset <= 'Z' - 'A')
00145 *(cp++) = 'A' + offset;
00146 else
00147 *(cp++) = 'a' + offset - ('Z' - 'A' + 1);
00148 }
00149
00150 *cp = '\0';
00151
00152 return buf;
00153 }
|
|
|
Definition at line 947 of file olc_save.c. References bug(), cont_lookup(), fix_string(), fpReserve, save_mobiles(), save_mobprogs(), save_objects(), save_resets(), save_rooms(), save_shops(), and save_specials(). Referenced by do_asave(). 00948 {
00949 FILE *fp;
00950 if (pArea->adelete)
00951 return;
00952
00953 fclose (fpReserve);
00954 if (!(fp = fopen (pArea->file_name, "w")))
00955 {
00956 bug ("Open_area: fopen", 0);
00957 perror (pArea->file_name);
00958 }
00959
00960 fprintf (fp, "#AREADATA\n");
00961 fprintf (fp, "Name %s~\n", pArea->name);
00962 fprintf (fp, "Builders %s~\n", fix_string (pArea->builders));
00963 fprintf (fp, "VNUMs %d %d\n", pArea->min_vnum, pArea->max_vnum);
00964 fprintf (fp, "Credits %s~\n", pArea->credits);
00965 fprintf (fp, "Security %d\n", pArea->security);
00966 if (pArea->cont == NULL || (cont_lookup(pArea->cont) == 0))
00967 fprintf(fp,"Cont None~\n");
00968 else
00969 fprintf (fp, "Cont %s~\n", pArea->cont);
00970 fprintf (fp, "End\n\n\n\n");
00971
00972 save_mobiles (fp, pArea);
00973 save_objects (fp, pArea);
00974 save_rooms (fp, pArea);
00975 save_specials (fp, pArea);
00976 save_resets (fp, pArea);
00977 save_shops (fp, pArea);
00978 save_mobprogs (fp, pArea);
00979
00980 //if (pArea->helps && pArea->helps->first)
00981 // save_helps (fp, pArea->helps);
00982
00983 fprintf (fp, "#$\n");
00984
00985 fclose (fp);
00986 fpReserve = fopen (NULL_FILE, "r");
00987 return;
00988 }
|
Here is the call graph for this function:

|
|
Definition at line 76 of file olc_save.c. References area_data::adelete, help_area_data::area, area_first, bug(), area_data::file_name, help_area_data::filename, had_list, area_data::next, and help_area_data::next. Referenced by do_asave(). 00077 {
00078 FILE *fp;
00079 AREA_DATA *pArea;
00080 extern HELP_AREA *had_list;
00081 HELP_AREA *ha;
00082
00083 if ((fp = fopen ("area.lst", "w")) == NULL)
00084 {
00085 bug ("Save_area_list: fopen", 0);
00086 perror ("area.lst");
00087 }
00088 else
00089 {
00090 /*
00091 * Add any help files that need to be loaded at
00092 * startup to this section.
00093 */
00094 fprintf (fp, "social.are\n"); /* ROM OLC */
00095
00096 for (ha = had_list; ha; ha = ha->next)
00097 if (ha->area == NULL)
00098 fprintf (fp, "%s\n", ha->filename);
00099
00100 for (pArea = area_first; pArea; pArea = pArea->next)
00101 {
00102 if (pArea->adelete)
00103
00104 continue;
00105
00106 fprintf (fp, "%s\n", pArea->file_name);
00107 }
00108
00109 fprintf (fp, "$\n");
00110 fclose (fp);
00111 }
00112
00113 return;
00114 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 664 of file olc_save.c. References area_data::adelete, room_index_data::area, dir_name, EX_CLOSED, EX_LOCKED, room_index_data::exit, IS_SET, MAX_DIR, MAX_KEY_HASH, room_index_data::name, room_index_data::next, exit_data::orig_door, room_index_hash, exit_data::rs_flags, exit_data::to_room, exit_data::u1, and room_index_data::vnum. Referenced by save_resets(). 00665 {
00666 int iHash;
00667 ROOM_INDEX_DATA *pRoomIndex;
00668 EXIT_DATA *pExit;
00669 int door;
00670
00671 for (iHash = 0; iHash < MAX_KEY_HASH; iHash++)
00672 {
00673 for (pRoomIndex = room_index_hash[iHash]; pRoomIndex;
00674 pRoomIndex = pRoomIndex->next)
00675 {
00676 if (pRoomIndex->area == pArea)
00677 {
00678 for (door = 0; door < MAX_DIR; door++)
00679 {
00680 if ((pExit = pRoomIndex->exit[door])
00681 && pExit->u1.to_room
00682 && (IS_SET (pExit->rs_flags, EX_CLOSED)
00683 || IS_SET (pExit->rs_flags, EX_LOCKED)))
00684 {
00685
00686 if (pExit->u1.to_room->area->adelete)
00687 continue;
00688 #if defined( VERBOSE )
00689 fprintf (fp, "D 0 %d %d %d The %s door of %s is %s\n",
00690 pRoomIndex->vnum,
00691 pExit->orig_door,
00692 IS_SET (pExit->rs_flags, EX_LOCKED) ? 2 : 1,
00693 dir_name[pExit->orig_door],
00694 pRoomIndex->name,
00695 IS_SET (pExit->rs_flags,
00696 EX_LOCKED) ? "closed and locked" :
00697 "closed");
00698 #endif
00699 #if !defined( VERBOSE )
00700 if (pExit->u1.to_room->area->adelete)
00701 continue;
00702
00703 fprintf (fp, "D 0 %d %d %d\n",
00704 pRoomIndex->vnum,
00705 pExit->orig_door,
00706 IS_SET (pExit->rs_flags, EX_LOCKED) ? 2 : 1);
00707 #endif
00708 }
00709 }
00710 }
00711 }
00712 }
00713 return;
00714 }
|
|
|
Definition at line 1220 of file olc_save.c. References bug(), help_data::delete, fix_string(), help_first, help_data::keyword, help_data::level, help_data::next, and help_data::text. Referenced by do_asave(). 01221 {
01222 HELP_DATA * pHelp;
01223 FILE * fp;
01224
01225 if (! (fp = fopen( "help.are", "w") ) )
01226 {
01227 bug( "Open_help: fopen", 0);
01228 perror( "help.are");
01229 }
01230
01231 fprintf(fp, "#HELPS\n");
01232
01233 for ( pHelp = help_first; pHelp != NULL; pHelp = pHelp->next )
01234 {
01235 if(pHelp->delete)
01236 continue;
01237
01238 fprintf(fp, "%d %s~\n\n%s~\n",
01239 pHelp->level, pHelp->keyword, fix_string(pHelp->text));
01240 }
01241
01242 fprintf(fp,"0 $~\n\n#$\n");
01243 fclose(fp);
01244 return;
01245 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 182 of file olc_save.c. References AC_BASH, AC_EXOTIC, AC_PIERCE, AC_SLASH, race_type::act, act, attack_table, DICE_BONUS, DICE_NUMBER, DICE_TYPE, DIF, fix_string(), race_type::form, fwrite_flag(), IS_NULLSTR, MAX_STRING_LENGTH, mprog_type_to_name(), size_type::name, sex_type::name, attack_type::name, mprog_list::next, race_type::parts, position_table, race_table, sex_table, position_type::short_name, size_table, mprog_list::trig_phrase, mprog_list::trig_type, and mprog_list::vnum. Referenced by save_mobiles(). 00183 {
00184 sh_int race = pMobIndex->race;
00185 MPROG_LIST *pMprog;
00186 char buf[MAX_STRING_LENGTH];
00187 long temp;
00188
00189 if (pMobIndex->area->adelete)
00190 return;
00191
00192 fprintf (fp, "#%d\n", pMobIndex->vnum);
00193 fprintf (fp, "%s~\n", pMobIndex->player_name);
00194 fprintf (fp, "%s~\n", pMobIndex->short_descr);
00195 fprintf (fp, "%s~\n", fix_string (pMobIndex->long_descr));
00196 fprintf (fp, "%s~\n", fix_string (pMobIndex->description));
00197 fprintf (fp, "%s~\n", race_table[race].name);
00198 fprintf (fp, "%s ", fwrite_flag (pMobIndex->act, buf));
00199 fprintf (fp, "%s ", fwrite_flag (pMobIndex->affected_by, buf));
00200 fprintf (fp, "%d %d\n", pMobIndex->alignment, pMobIndex->group);
00201 fprintf (fp, "%d ", pMobIndex->level);
00202 fprintf (fp, "%d ", pMobIndex->hitroll);
00203 fprintf (fp, "%dd%d+%d ", pMobIndex->hit[DICE_NUMBER],
00204 pMobIndex->hit[DICE_TYPE], pMobIndex->hit[DICE_BONUS]);
00205 fprintf (fp, "%dd%d+%d ", pMobIndex->mana[DICE_NUMBER],
00206 pMobIndex->mana[DICE_TYPE], pMobIndex->mana[DICE_BONUS]);
00207 fprintf (fp, "%dd%d+%d ", pMobIndex->damage[DICE_NUMBER],
00208 pMobIndex->damage[DICE_TYPE], pMobIndex->damage[DICE_BONUS]);
00209 fprintf (fp, "%s\n", attack_table[pMobIndex->dam_type].name);
00210 fprintf (fp, "%d %d %d %d\n",
00211 pMobIndex->ac[AC_PIERCE] / 10,
00212 pMobIndex->ac[AC_BASH] / 10,
00213 pMobIndex->ac[AC_SLASH] / 10, pMobIndex->ac[AC_EXOTIC] / 10);
00214 fprintf (fp, "%s ", fwrite_flag (pMobIndex->off_flags, buf));
00215 fprintf (fp, "%s ", fwrite_flag (pMobIndex->imm_flags, buf));
00216 fprintf (fp, "%s ", fwrite_flag (pMobIndex->res_flags, buf));
00217 fprintf (fp, "%s\n", fwrite_flag (pMobIndex->vuln_flags, buf));
00218 fprintf (fp, "%s %s %s %ld\n",
00219 position_table[pMobIndex->start_pos].short_name,
00220 position_table[pMobIndex->default_pos].short_name,
00221 sex_table[pMobIndex->sex].name, pMobIndex->wealth);
00222 fprintf (fp, "%s ", fwrite_flag (pMobIndex->form, buf));
00223 fprintf (fp, "%s ", fwrite_flag (pMobIndex->parts, buf));
00224
00225 fprintf (fp, "%s ", size_table[pMobIndex->size].name);
00226 fprintf (fp, "%s\n",
00227 IS_NULLSTR (pMobIndex->
00228 material) ? pMobIndex->material : "unknown");
00229
00230 if ((temp = DIF (race_table[race].act, pMobIndex->act)))
00231 fprintf (fp, "F act %s\n", fwrite_flag (temp, buf));
00232
00233 if ((temp = DIF (race_table[race].aff, pMobIndex->affected_by)))
00234 fprintf (fp, "F aff %s\n", fwrite_flag (temp, buf));
00235
00236 if ((temp = DIF (race_table[race].off, pMobIndex->off_flags)))
00237 fprintf (fp, "F off %s\n", fwrite_flag (temp, buf));
00238
00239 if ((temp = DIF (race_table[race].imm, pMobIndex->imm_flags)))
00240 fprintf (fp, "F imm %s\n", fwrite_flag (temp, buf));
00241
00242 if ((temp = DIF (race_table[race].res, pMobIndex->res_flags)))
00243 fprintf (fp, "F res %s\n", fwrite_flag (temp, buf));
00244
00245 if ((temp = DIF (race_table[race].vuln, pMobIndex->vuln_flags)))
00246 fprintf (fp, "F vul %s\n", fwrite_flag (temp, buf));
00247
00248 if ((temp = DIF (race_table[race].form, pMobIndex->form)))
00249 fprintf (fp, "F for %s\n", fwrite_flag (temp, buf));
00250
00251 if ((temp = DIF (race_table[race].parts, pMobIndex->parts)))
00252 fprintf (fp, "F par %s\n", fwrite_flag (temp, buf));
00253
00254 for (pMprog = pMobIndex->mprogs; pMprog; pMprog = pMprog->next)
00255 {
00256 fprintf (fp, "M %s %d %s~\n",
00257 mprog_type_to_name (pMprog->trig_type), pMprog->vnum,
00258 pMprog->trig_phrase);
00259 }
00260
00261 return;
00262 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 271 of file olc_save.c. References get_mob_index(), and save_mobile(). Referenced by save_area(). 00272 {
00273 int i;
00274 MOB_INDEX_DATA *pMob;
00275 if (pArea->adelete)
00276 return;
00277
00278 fprintf (fp, "#MOBILES\n");
00279
00280 for (i = pArea->min_vnum; i <= pArea->max_vnum; i++)
00281 {
00282 //f (pMob->area->adelete)
00283 // continue;
00284 if ((pMob = get_mob_index (i)))
00285 save_mobile (fp, pMob);
00286 }
00287
00288 fprintf (fp, "#0\n\n\n\n");
00289 return;
00290 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 155 of file olc_save.c. References mprog_code::code, fix_string(), and get_mprog_index(). Referenced by save_area(). 00156 {
00157 MPROG_CODE *pMprog;
00158 int i;
00159
00160
00161 fprintf (fp, "#MOBPROGS\n");
00162
00163 for (i = pArea->min_vnum; i <= pArea->max_vnum; i++)
00164 {
00165 if ((pMprog = get_mprog_index (i)) != NULL)
00166 {
00167
00168 fprintf (fp, "#%d\n", i);
00169 fprintf (fp, "%s~\n", fix_string (pMprog->code));
00170 }
00171 }
00172
00173 fprintf (fp, "#0\n\n");
00174 return;
00175 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 302 of file olc_save.c. References attack_table, affect_data::bitvector, bug(), extra_descr_data::description, fix_string(), fwrite_flag(), ITEM_CONTAINER, ITEM_DRINK_CON, ITEM_FOUNTAIN, item_name(), ITEM_PILL, ITEM_POTION, ITEM_SCROLL, ITEM_STAFF, ITEM_WAND, ITEM_WEAPON, extra_descr_data::keyword, liq_type::liq_name, liq_table, affect_data::location, MAX_STRING_LENGTH, affect_data::modifier, skill_type::name, attack_type::name, extra_descr_data::next, affect_data::next, skill_table, TO_AFFECTS, TO_IMMUNE, TO_OBJECT, TO_RESIST, TO_VULN, weapon_name(), and affect_data::where. Referenced by save_objects(). 00303 {
00304 char letter;
00305 AFFECT_DATA *pAf;
00306 EXTRA_DESCR_DATA *pEd;
00307 char buf[MAX_STRING_LENGTH];
00308
00309 if (pObjIndex->area->adelete)
00310 return;
00311 fprintf (fp, "#%d\n", pObjIndex->vnum);
00312 fprintf (fp, "%s~\n", pObjIndex->name);
00313 fprintf (fp, "%s~\n", pObjIndex->short_descr);
00314 fprintf (fp, "%s~\n", fix_string (pObjIndex->description));
00315 fprintf (fp, "%s~\n", pObjIndex->material);
00316 fprintf (fp, "%s ", item_name (pObjIndex->item_type));
00317 fprintf (fp, "%s ", fwrite_flag (pObjIndex->extra_flags, buf));
00318 fprintf (fp, "%s\n", fwrite_flag (pObjIndex->wear_flags, buf));
00319
00320 /*
00321 * Using fwrite_flag to write most values gives a strange
00322 * looking area file, consider making a case for each
00323 * item type later.
00324 */
00325
00326 switch (pObjIndex->item_type)
00327 {
00328 default:
00329 fprintf (fp, "%s ", fwrite_flag (pObjIndex->value[0], buf));
00330 fprintf (fp, "%s ", fwrite_flag (pObjIndex->value[1], buf));
00331 fprintf (fp, "%s ", fwrite_flag (pObjIndex->value[2], buf));
00332 fprintf (fp, "%s ", fwrite_flag (pObjIndex->value[3], buf));
00333 fprintf (fp, "%s\n", fwrite_flag (pObjIndex->value[4], buf));
00334 break;
00335
00336 case ITEM_DRINK_CON:
00337 case ITEM_FOUNTAIN:
00338 fprintf (fp, "%d %d '%s' %d %d\n",
00339 pObjIndex->value[0],
00340 pObjIndex->value[1],
00341 liq_table[pObjIndex->value[2]].liq_name,
00342 pObjIndex->value[3], pObjIndex->value[4]);
00343 break;
00344
00345 case ITEM_CONTAINER:
00346 fprintf (fp, "%d %s %d %d %d\n",
00347 pObjIndex->value[0],
00348 fwrite_flag (pObjIndex->value[1], buf),
00349 pObjIndex->value[2],
00350 pObjIndex->value[3], pObjIndex->value[4]);
00351 break;
00352
00353 case ITEM_WEAPON:
00354 fprintf (fp, "%s %d %d %s %s\n",
00355 weapon_name (pObjIndex->value[0]),
00356 pObjIndex->value[1],
00357 pObjIndex->value[2],
00358 attack_table[pObjIndex->value[3]].name,
00359 fwrite_flag (pObjIndex->value[4], buf));
00360 break;
00361
00362 case ITEM_PILL:
00363 case ITEM_POTION:
00364 case ITEM_SCROLL:
00365 fprintf (fp, "%d '%s' '%s' '%s' '%s'\n", pObjIndex->value[0] > 0 ? /* no negative numbers */
00366 pObjIndex->value[0]
00367 : 0,
00368 pObjIndex->value[1] != -1 ?
00369 skill_table[pObjIndex->value[1]].name
00370 : "",
00371 pObjIndex->value[2] != -1 ?
00372 skill_table[pObjIndex->value[2]].name
00373 : "",
00374 pObjIndex->value[3] != -1 ?
00375 skill_table[pObjIndex->value[3]].name
00376 : "",
00377 pObjIndex->value[4] != -1 ?
00378 skill_table[pObjIndex->value[4]].name : "");
00379 break;
00380
00381 case ITEM_STAFF:
00382 case ITEM_WAND:
00383 fprintf (fp, "%d %d %d '%s' %d\n",
00384 pObjIndex->value[0],
00385 pObjIndex->value[1],
00386 pObjIndex->value[2],
00387 pObjIndex->value[3] != -1 ?
00388 skill_table[pObjIndex->value[3]].name :
00389 "", pObjIndex->value[4]);
00390 break;
00391 }
00392
00393 fprintf (fp, "%d ", pObjIndex->level);
00394 fprintf (fp, "%d ", pObjIndex->weight);
00395 fprintf (fp, "%d ", pObjIndex->cost);
00396
00397 if (pObjIndex->condition > 90)
00398 letter = 'P';
00399 else if (pObjIndex->condition > 75)
00400 letter = 'G';
00401 else if (pObjIndex->condition > 50)
00402 letter = 'A';
00403 else if (pObjIndex->condition > 25)
00404 letter = 'W';
00405 else if (pObjIndex->condition > 10)
00406 letter = 'D';
00407 else if (pObjIndex->condition > 0)
00408 letter = 'B';
00409 else
00410 letter = 'R';
00411
00412 fprintf (fp, "%c\n", letter);
00413
00414 for (pAf = pObjIndex->affected; pAf; pAf = pAf->next)
00415 {
00416 if (pAf->where == TO_OBJECT || pAf->bitvector == 0)
00417 fprintf (fp, "A\n%d %d\n", pAf->location, pAf->modifier);
00418 else
00419 {
00420 fprintf (fp, "F\n");
00421
00422 switch (pAf->where)
00423 {
00424 case TO_AFFECTS:
00425 fprintf (fp, "A ");
00426 break;
00427 case TO_IMMUNE:
00428 fprintf (fp, "I ");
00429 break;
00430 case TO_RESIST:
00431 fprintf (fp, "R ");
00432 break;
00433 case TO_VULN:
00434 fprintf (fp, "V ");
00435 break;
00436 default:
00437 bug ("olc_save: Invalid Affect->where", 0);
00438 break;
00439 }
00440
00441 fprintf (fp, "%d %d %s\n", pAf->location, pAf->modifier,
00442 fwrite_flag (pAf->bitvector, buf));
00443 }
00444 }
00445
00446 for (pEd = pObjIndex->extra_descr; pEd; pEd = pEd->next)
00447 {
00448 fprintf (fp, "E\n%s~\n%s~\n", pEd->keyword,
00449 fix_string (pEd->description));
00450 }
00451
00452 return;
00453 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 464 of file olc_save.c. References get_obj_index(), and save_object(). Referenced by save_area(). 00465 {
00466 int i;
00467 OBJ_INDEX_DATA *pObj;
00468
00469 if (pArea->adelete)
00470 return;
00471
00472 fprintf (fp, "#OBJECTS\n");
00473
00474
00475 for (i = pArea->min_vnum; i <= pArea->max_vnum; i++)
00476 {
00477 if ((pObj = get_obj_index (i)))
00478 save_object (fp, pObj);
00479 }
00480
00481 fprintf (fp, "#0\n\n\n\n");
00482 return;
00483 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 724 of file olc_save.c. References area_data::adelete, obj_index_data::area, mob_index_data::area, room_index_data::area, reset_data::arg1, reset_data::arg2, reset_data::arg3, reset_data::arg4, bug(), capitalize(), reset_data::command, flag_string(), get_mob_index(), get_obj_index(), get_room_index(), MAX_KEY_HASH, MAX_STRING_LENGTH, room_index_data::name, reset_data::next, room_index_data::next, room_index_data::reset_first, room_index_hash, save_door_resets(), obj_index_data::short_descr, mob_index_data::short_descr, and wear_loc_strings. Referenced by save_area(). 00725 {
00726 RESET_DATA *pReset;
00727 MOB_INDEX_DATA *pLastMob = NULL;
00728 OBJ_INDEX_DATA *pLastObj;
00729 ROOM_INDEX_DATA *pRoom;
00730 char buf[MAX_STRING_LENGTH];
00731 int iHash;
00732
00733 fprintf (fp, "#RESETS\n");
00734
00735 save_door_resets (fp, pArea);
00736
00737 for (iHash = 0; iHash < MAX_KEY_HASH; iHash++)
00738 {
00739 for (pRoom = room_index_hash[iHash]; pRoom; pRoom = pRoom->next)
00740 {
00741 if (pRoom->area == pArea)
00742 {
00743 for (pReset = pRoom->reset_first; pReset;
00744 pReset = pReset->next)
00745 {
00746 switch (pReset->command)
00747 {
00748 default:
00749 bug ("Save_resets: bad command %c.",
00750 pReset->command);
00751 break;
00752
00753 case 'M':
00754 pLastMob = get_mob_index (pReset->arg1);
00755 if (pLastMob->area->adelete)
00756 break;
00757 fprintf (fp, "M 0 %d %d %d %d Load %s\n",
00758 pReset->arg1,
00759 pReset->arg2,
00760 pReset->arg3,
00761 pReset->arg4, pLastMob->short_descr);
00762 break;
00763
00764 case 'O':
00765 pLastObj = get_obj_index (pReset->arg1);
00766 if (pLastObj->area->adelete)
00767 break;
00768 pRoom = get_room_index (pReset->arg3);
00769 fprintf (fp, "O 0 %d 0 %d %s loaded to %s\n",
00770 pReset->arg1,
00771 pReset->arg3,
00772 capitalize (pLastObj->short_descr),
00773 pRoom->name);
00774 break;
00775
00776 case 'P':
00777 pLastObj = get_obj_index (pReset->arg1);
00778 if (pLastObj->area->adelete)
00779 break;
00780 fprintf (fp, "P 0 %d %d %d %d %s put inside %s\n",
00781 pReset->arg1,
00782 pReset->arg2,
00783 pReset->arg3,
00784 pReset->arg4,
00785 capitalize (get_obj_index
00786 (pReset->arg1)->short_descr),
00787 pLastObj->short_descr);
00788 break;
00789
00790 case 'G':
00791 if ((get_obj_index(pReset->arg1))->area->adelete)
00792 break;
00793 fprintf (fp, "G 0 %d 0 %s is given to %s\n",
00794 pReset->arg1,
00795 capitalize (get_obj_index
00796 (pReset->arg1)->short_descr),
00797 pLastMob ? pLastMob->short_descr :
00798 "!NO_MOB!");
00799 if (!pLastMob)
00800 {
00801 sprintf (buf, "Save_resets: !NO_MOB! in [%s]",
00802 pArea->file_name);
00803 bug (buf, 0);
00804 }
00805 break;
00806
00807 case 'E':
00808 if (get_obj_index(pReset->arg1)->area->adelete)
00809 break;
00810 fprintf (fp,
00811 "E 0 %d 0 %d %s is loaded %s of %s\n",
00812 pReset->arg1, pReset->arg3,
00813 capitalize (get_obj_index
00814 (pReset->arg1)->short_descr),
00815 flag_string (wear_loc_strings,
00816 pReset->arg3),
00817 pLastMob ? pLastMob->short_descr :
00818 "!NO_MOB!");
00819 if (!pLastMob)
00820 {
00821 sprintf (buf, "Save_resets: !NO_MOB! in [%s]",
00822 pArea->file_name);
00823 bug (buf, 0);
00824 }
00825 break;
00826
00827 case 'D':
00828 break;
00829
00830 case 'R':
00831 pRoom = get_room_index (pReset->arg1);
00832 if (pRoom->area->adelete)
00833 break;
00834 fprintf (fp, "R 0 %d %d Randomize %s\n",
00835 pReset->arg1, pReset->arg2, pRoom->name);
00836 break;
00837 }
00838 }
00839 } /* End if correct area */
00840 } /* End for pRoom */
00841 } /* End for iHash */
00842
00843 fprintf (fp, "S\n\n\n\n");
00844 return;
00845 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 494 of file olc_save.c. References area_data::adelete, room_index_data::area, room_index_data::clan, clan_table, exit_data::description, extra_descr_data::description, room_index_data::description, EX_CLOSED, EX_EASY, EX_HARD, EX_INFURIATING, EX_ISDOOR, EX_LOCKED, EX_NOCLOSE, EX_NOLOCK, EX_NOPASS, EX_PICKPROOF, room_index_data::exit, room_index_data::extra_descr, FALSE, fix_string(), room_index_data::heal_rate, IS_NULLSTR, IS_SET, exit_data::key, exit_data::keyword, extra_descr_data::keyword, room_index_data::mana_rate, MAX_DIR, MAX_KEY_HASH, room_index_data::name, extra_descr_data::next, room_index_data::next, room_index_data::night_description, exit_data::orig_door, room_index_data::owner, room_index_data::rdelete, REMOVE_BIT, room_index_data::room_flags, room_index_data::room_flags_extra, room_index_hash, exit_data::rs_flags, room_index_data::sector_type, SET_BIT, exit_data::to_room, room_index_data::travel_route, room_index_data::travel_state, room_index_data::travel_type, exit_data::u1, and room_index_data::vnum. Referenced by save_area(). 00495 {
00496 ROOM_INDEX_DATA *pRoomIndex;
00497 EXTRA_DESCR_DATA *pEd;
00498 EXIT_DATA *pExit;
00499 int iHash;
00500 int door;
00501
00502 fprintf (fp, "#ROOMS\n");
00503 for (iHash = 0; iHash < MAX_KEY_HASH; iHash++)
00504 {
00505 for (pRoomIndex = room_index_hash[iHash]; pRoomIndex;
00506 pRoomIndex = pRoomIndex->next)
00507 {
00508 if (pRoomIndex->area == pArea)
00509 {
00510
00511 if (pRoomIndex->rdelete)
00512 continue;
00513
00514 fprintf (fp, "#%d\n", pRoomIndex->vnum);
00515 fprintf (fp, "%s~\n", pRoomIndex->name);
00516 fprintf (fp, "%d\n", pRoomIndex->travel_route == FALSE ? 0 : 1);
00517 fprintf (fp, "%d\n", pRoomIndex->travel_type);
00518 fprintf (fp, "%d\n", pRoomIndex->travel_state);
00519 fprintf (fp, "%s~\n", fix_string (pRoomIndex->description));
00520 if (pRoomIndex->night_description == NULL)
00521 pRoomIndex->night_description = pRoomIndex->description;
00522 fprintf (fp, "%s~\n", fix_string (pRoomIndex->night_description));
00523
00524
00525
00526 fprintf (fp, "0 ");
00527 fprintf (fp, "%d ", pRoomIndex->room_flags);
00528 if (pRoomIndex->room_flags_extra <= 0)
00529 {
00530 fprintf(fp, "0 ");
00531 }
00532 else {
00533
00534 fprintf (fp, "%d ", pRoomIndex->room_flags_extra);
00535 }
00536 fprintf (fp, "%d\n", pRoomIndex->sector_type);
00537
00538
00539 for (pEd = pRoomIndex->extra_descr; pEd; pEd = pEd->next)
00540 {
00541 fprintf (fp, "E\n%s~\n%s~\n", pEd->keyword,
00542 fix_string (pEd->description));
00543 }
00544 for (door = 0; door < MAX_DIR; door++)
00545 { /* I hate this! */
00546 if ((pExit = pRoomIndex->exit[door]) && pExit->u1.to_room)
00547 {
00548
00549 int locks = 0;
00550 if (pExit->u1.to_room->rdelete)
00551 continue;
00552 if (pExit->u1.to_room->area->adelete)
00553 continue;
00554
00555 /* HACK : TO PREVENT EX_LOCKED etc without EX_ISDOOR
00556 to stop booting the mud */
00557 if (IS_SET (pExit->rs_flags, EX_CLOSED)
00558 || IS_SET (pExit->rs_flags, EX_LOCKED)
00559 || IS_SET (pExit->rs_flags, EX_PICKPROOF)
00560 || IS_SET (pExit->rs_flags, EX_NOPASS)
00561 || IS_SET (pExit->rs_flags, EX_EASY)
00562 || IS_SET (pExit->rs_flags, EX_HARD)
00563 || IS_SET (pExit->rs_flags, EX_INFURIATING)
00564 || IS_SET (pExit->rs_flags, EX_NOCLOSE)
00565 || IS_SET (pExit->rs_flags, EX_NOLOCK))
00566 SET_BIT (pExit->rs_flags, EX_ISDOOR);
00567 else
00568 REMOVE_BIT (pExit->rs_flags, EX_ISDOOR);
00569
00570 /* THIS SUCKS but it's backwards compatible */
00571 /* NOTE THAT EX_NOCLOSE NOLOCK etc aren't being saved */
00572 if (IS_SET (pExit->rs_flags, EX_ISDOOR)
00573 && (!IS_SET (pExit->rs_flags, EX_PICKPROOF))
00574 && (!IS_SET (pExit->rs_flags, EX_NOPASS)))
00575 locks = 1;
00576 if (IS_SET (pExit->rs_flags, EX_ISDOOR)
00577 && (IS_SET (pExit->rs_flags, EX_PICKPROOF))
00578 && (!IS_SET (pExit->rs_flags, EX_NOPASS)))
00579 locks = 2;
00580 if (IS_SET (pExit->rs_flags, EX_ISDOOR)
00581 && (!IS_SET (pExit->rs_flags, EX_PICKPROOF))
00582 && (IS_SET (pExit->rs_flags, EX_NOPASS)))
00583 locks = 3;
00584 if (IS_SET (pExit->rs_flags, EX_ISDOOR)
00585 && (IS_SET (pExit->rs_flags, EX_PICKPROOF))
00586 && (IS_SET (pExit->rs_flags, EX_NOPASS)))
00587 locks = 4;
00588
00589 fprintf (fp, "D%d\n", pExit->orig_door);
00590 fprintf (fp, "%s~\n", fix_string (pExit->description));
00591 fprintf (fp, "%s~\n", pExit->keyword);
00592 fprintf (fp, "%d %d %d\n", locks,
00593 pExit->key, pExit->u1.to_room->vnum);
00594 }
00595 }
00596 if (pRoomIndex->mana_rate != 100
00597 || pRoomIndex->heal_rate != 100) fprintf (fp,
00598 "M %d H %d\n",
00599 pRoomIndex->mana_rate,
00600 pRoomIndex->heal_rate);
00601 if (pRoomIndex->clan > 0)
00602 fprintf (fp, "C %s~\n",
00603 clan_table[pRoomIndex->clan].name);
00604
00605 if (!IS_NULLSTR (pRoomIndex->owner))
00606 fprintf (fp, "O %s~\n", pRoomIndex->owner);
00607
00608 fprintf (fp, "S\n");
00609 }
00610 }
00611 }
00612 fprintf (fp, "#0\n\n\n\n");
00613 return;
00614 }
|
Here is the call graph for this function:

|
||||||||||||
|
Definition at line 854 of file olc_save.c. References mob_index_data::area, shop_data::buy_type, shop_data::close_hour, shop_data::keeper, MAX_KEY_HASH, MAX_TRADE, mob_index_hash, mob_index_data::next, shop_data::open_hour, shop_data::profit_buy, shop_data::profit_sell, and mob_index_data::pShop. Referenced by save_area(). 00855 {
00856 SHOP_DATA *pShopIndex;
00857 MOB_INDEX_DATA *pMobIndex;
00858 int iTrade;
00859 int iHash;
00860
00861 fprintf (fp, "#SHOPS\n");
00862
00863 for (iHash = 0; iHash < MAX_KEY_HASH; iHash++)
00864 {
00865 for (pMobIndex = mob_index_hash[iHash]; pMobIndex;
00866 pMobIndex = pMobIndex->next)
00867 {
00868 if (pMobIndex && pMobIndex->area == pArea && pMobIndex->pShop)
00869 {
00870 pShopIndex = pMobIndex->pShop;
00871
00872 fprintf (fp, "%d ", pShopIndex->keeper);
00873 for (iTrade = 0; iTrade < MAX_TRADE; iTrade++)
00874 {
00875 if (pShopIndex->buy_type[iTrade] != 0)
00876 {
00877 fprintf (fp, "%d ", pShopIndex->buy_type[iTrade]);
00878 }
00879 else
00880 fprintf (fp, "0 ");
00881 }
00882 fprintf (fp, "%d %d ", pShopIndex->profit_buy,
00883 pShopIndex->profit_sell);
00884 fprintf (fp, "%d %d\n", pShopIndex->open_hour,
00885 pShopIndex->close_hour);
00886 }
00887 }
00888 }
00889
00890 fprintf (fp, "0\n\n\n\n");
00891 return;
00892 }
|
|
||||||||||||
|
Definition at line 623 of file olc_save.c. References area_data::adelete, mob_index_data::area, MAX_KEY_HASH, mob_index_hash, mob_index_data::next, mob_index_data::short_descr, mob_index_data::spec_fun, spec_name(), and mob_index_data::vnum. Referenced by save_area(). 00624 {
00625 int iHash;
00626 MOB_INDEX_DATA *pMobIndex;
00627
00628 fprintf (fp, "#SPECIALS\n");
00629
00630 for (iHash = 0; iHash < MAX_KEY_HASH; iHash++)
00631 {
00632 for (pMobIndex = mob_index_hash[iHash]; pMobIndex;
00633 pMobIndex = pMobIndex->next)
00634 {
00635
00636 if (pMobIndex->area->adelete)
00637 continue;
00638 if (pMobIndex && pMobIndex->area == pArea && pMobIndex->spec_fun)
00639 {
00640 #if defined( VERBOSE )
00641 fprintf (fp, "M %d %s Load to: %s\n", pMobIndex->vnum,
00642 spec_name (pMobIndex->spec_fun),
00643 pMobIndex->short_descr);
00644 #else
00645 fprintf (fp, "M %d %s\n", pMobIndex->vnum,
00646 spec_name (pMobIndex->spec_fun));
00647 #endif
00648 }
00649 }
00650 }
00651
00652 fprintf (fp, "S\n\n\n\n");
00653 return;
00654 }
|
Here is the call graph for this function:

1.4.0