So guys
You know I'm working on creating a new city rpg
I came up with this for database
But it won't save if the server crashes
How do I make it save all the KeyData when the server crashes?
//+--------------------------------------+
//| #title: Molodion |
//| #purpose: saves data and variables |
//| #author: Mold |
//+--------------------------------------+
function Molodion::onAdd(%this)
{
if(%this.name = "")
%this.name = %this.getName();
if(%this.savepath $= "")
{
echo(%this.name @ " needs a savepath.");
%this.schedule(0,delete);
return;
}
%this.keycount = 0;
%this.valuecount = 0;
//%this. = 0;
if(%this.autoloadkeys && isFile(%this.savepath @ "keyregister.cs"))
{
%file = new FileObject();
%file.openForRead(%this.savepath @ "keyregister.cs");
while(!%file.isEOF())
{
%line = %file.readline();
%this.loadKeyData(%line);
}
}
}
function Molodion::registerValue(%this, %valname, %standard)
{
if(%valname $= "")
return;
if(%standard $= "")
return;
if(%this.registeredValue[%valname])
return;
%this.valueName[%this.valuecount] = %valname;
%this.value[%this.valuecount] = %standard;
%this.valuecount++;
%this.registeredValue[%valname] = 1;
}
function Molodion::loadKeyData(%this, %keyID)
{
if(isObject(%this.KeyData[%keyID]))
return;
if(isFile(%this.savepath @ "key_" @ %keyID @ ".dat"))
{
%this.KeyData[%keyID] = new scriptObject(){class = "Molodata";};
%file = new fileObject();
%file.openForRead(%this.savepath @ "key_" @ %keyID @ ".dat");
while(!%file.isEOF())
{
%line = %file.readline();
%ValueName = getWord(%line, 0);
%Value = removeWord(%line, 0);
%this.KeyData[%keyID].Value[%ValueName] = %Value;
}
for(%i=0;%i<%this.valuecount;%i++)
{
if(%this.KeyData[%keyID].Value[%this.Valuename[%i]] $= "")
%this.KeyData[%keyID].Value[%this.Valuename[%i]] = %this.Value[%i];
}
echo("key " @ %keyID @ " loaded.");
}
}
function Molodion::createKeyData(%this, %keyID)
{
if(isObject(%this.KeyData[%keyID]))
return;
if(isFile(%this.savepath @ "key_" @ %keyID @ ".dat"))
{
%this.loadKeyData(%keyID);
return;
}
%this.KeyData[%keyID] = new scriptObject(){class = "Molodata";};
for(%i=0;%i<%this.valuecount;%i++)
{
%this.KeyData[%keyID].Value[%this.Valuename[%i]] = %this.Value[%i];
}
echo("key " @ %keyID @ " created.");
%this.saveKeyData(%keyID);
%this.registeredKeysCount = 0;
if(isFile(%this.savepath @ "keyregister.cs"))
{
%file = new fileObject();
%file.openForRead(%this.savepath @ "keyregister.cs");
while(!%file.isEOF())
{
%registeredKey[%this.registeredKeysCount] = %file.readLine();
%this.registeredKeysCount++;
}
%file.close();
%file.delete();
fileDelete(%this.savepath @ "keyregister.cs");
}
%registeredKey[%this.registeredKeysCount] = %keyID;
%this.registeredKeysCount++;
%file = new fileObject();
%file.openForWrite(%this.savepath @ "keyregister.cs");
for(%i=0;%i<%this.registeredKeysCount;%i++)
{
%file.writeLine(%registeredKey[%i]);
}
%file.close();
%file.delete();
}
function Molodion::saveKeyData(%this, %keyID)
{
if(!isObject(%this.KeyData[%keyID]))
return;
if(isFile(%this.savepath @ "key_" @ %keyID @ ".dat"))
fileDelete(%this.savepath @ "key_" @ %keyID @ ".dat");
%file = new fileObject();
%file.openForWrite(%this.savepath @ "key_" @ %keyID @ ".dat");
for(%i=0;%i<%this.valuecount;%i++)
{
%line = %this.ValueName[%i];
%line = %line SPC %this.KeyData[%keyID].Value[%this.ValueName[%i]];
%file.writeLine(%line);
}
%file.close();
%file.delete();
echo("key " @ %keyID @ " saved.");
}
function Molodion::deleteKeyData(%this, %keyID)
{
if(!isObject(%this.KeyData[%keyID]))
return;
%this.KeyData[%keyID].delete();
if(isFile(%this.savepath @ "key_" @ %keyID @ ".dat"))
fileDelete(%this.savepath @ "key_" @ %keyID @ ".dat");
echo("key " @ %keyID @ " deleted.");
}
function Molodion::resetKeyData(%this, %keyID)
{
if(!isObject(%this.KeyData[%keyID]))
return;
for(%i=0;%i<%this.valuecount;%i++)
{
%this.KeyData[%keyID].Value[%this.Valuename[%i]] = %this.Value[%i];
}
echo("key " @ %keyID @ " reset.");
%this.saveKeyData(%keyID);
}