/* /lib/user/autosave.c
* From the Dead Souls Object Library
* Object to save a player to file
* Created by Descartes of Borg 940216
* Version: @(#) autosave.c 1.3@(#)
* Last modified: 97/01/03
*/
#include <message_class.h>
#include <config.h>
#include <dirs.h>
#include <privs.h>
private mixed array Inventory = 0;
private static int LastSave = time();
// abstract methods
string GetKeyName();
varargs void eventPrint(string str, mixed args...);
// end abstract methods
nomask void restore_inventory();
nomask void save_player(string nom);
int Setup(){
master()->create_save();
call_out( (: save_player, GetKeyName() :), 2 );
restore_inventory();
return 1;
}
nomask void restore_inventory(){
if( Inventory ){
foreach(string obdata in Inventory){
object ob;
mixed tmp;
tmp = restore_variable(obdata);
if( arrayp(tmp) ){
ob = new(tmp[0]);
if( ob ) ob->eventConvertObject(tmp, 1);
}
else {
if( !catch(ob = new(tmp["#base_name#"])) ){
if( ob ){
ob->eventLoadObject(tmp, 1);
}
}
}
}
}
Inventory = 0;
}
nomask int restore_player(string nom){
string file;
if( previous_object(0) != master() ){
return 0;
}
file = save_file(nom);
return unguarded((: restore_object, file, 1 :));
}
nomask void save_player(string nom){
string file;
if( !nom || nom != GetKeyName() ){
return;
}
Inventory = filter(map(all_inventory(), (: $1->GetSaveString() :)),
(: $1 :));
file = save_file(GetKeyName());
unguarded((: save_object, file, 1 :));
Inventory = 0;
}
static void heart_beat(){
int x = time();
if( x - LastSave < AUTOSAVE_TIME ){
return;
}
LastSave = x;
save_player(GetKeyName());
if( !builderp(this_object()) && !present("visitor pass",this_object())
&& !testp(this_object()) ){
eventPrint("Autosaving...", MSG_SYSTEM);
}
}