*********> Room Save Snipit
By The Dark One -> Reza Nejad
make a "save" directory in lib
----->in structs.h
add #define ROOM_SAVE (1 << 21) (or whatever the next number is)
if you use OasicOLC change num_room_flags one higher
------>Stick This in house.c
/*****************************************************************
******************ROOM SAVE STUFF*********************************
******************************************************************/
int save_get_filename(int i, char *filename)
{
if (i < 0)
return 0;
sprintf(filename, "save/%d.save", i);
return 1;
}
int save_load(int i)
{
FILE *fll;
char fname[MAX_STRING_LENGTH];
struct obj_file_elem object;
if (!save_get_filename(i, fname))
return 0;
if (!(fll = fopen(fname, "r+b"))) {
return 0;
}
while (!feof(fll)) {
fread(&object, sizeof(struct obj_file_elem), 1, fll);
if (ferror(fll)) {
perror("Reading save file: save_load.");
fclose(fll);
return 0;
}
if (!feof(fll))
obj_to_room(Obj_from_store(object), i);
}
fclose(fll);
return 1;
}
void save_boot(void)
{
extern int top_of_world;
int i;
for (i=0; i <= top_of_world; i++)
{
if (IS_SET(ROOM_FLAGS(i), ROOM_SAVE))
{
save_load(i);
}
}
}
int save_save(struct obj_data * obj, FILE * fll)
{
struct obj_data *tmp;
int result;
if (obj) {
save_save(obj->contains, fll);
save_save(obj->next_content, fll);
result = Obj_to_store(obj, fll);
if (!result)
return 0;
for (tmp = obj->in_obj; tmp; tmp = tmp->in_obj)
GET_OBJ_WEIGHT(tmp) -= GET_OBJ_WEIGHT(obj);
}
return 1;
}
void save_restore_weight(struct obj_data * obj)
{
if (obj) {
save_restore_weight(obj->contains);
save_restore_weight(obj->next_content);
if (obj->in_obj)
GET_OBJ_WEIGHT(obj->in_obj) += GET_OBJ_WEIGHT(obj);
}
}
void save_saved(int i)
{
char buf[MAX_STRING_LENGTH];
FILE *fll;
if (i == -1)
return;
sprintf(buf, "save/%d.save", i);
fopen(buf, "wb");
fclose(fll);
fll = fopen(buf, "wb");
save_save(world[i].contents, fll);
fclose(fll);
save_restore_weight(world[i].contents);
}
/****************************************************************
*****************************************************************
*****************************************************************/
------>Add this to house.h
void save_boot(void);
void save_saved(int vnum);
-----> In db.c
in void_boot_db
add
log("Loading Saved Rooms.");
save_boot();
anywhere you like inside of the boot routines (I sugjest affter the house
loading)
------> In heartbeat() or do_save() or do_reboot() anywhere you find nice
for(i=0;i <= top_of_world; i++) {
if(IS_SET(ROOM_FLAGS(i), ROOM_SAVE))
save_saved(i);
}
*Note be sure to define "int i" and "extern int top_of_world" at the
top of the function
---------->End
Well I think thats it....
-Dark
+-----------------------------------------------------------+
| Ensure that you have read the CircleMUD Mailing List FAQ: |
| http://cspo.queensu.ca/~fletcher/Circle/list_faq.html |
+-----------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/18/00 PST