61 lines
1.5 KiB
C
61 lines
1.5 KiB
C
#include <lib.h>
|
|
#include <save.h>
|
|
#include <daemons.h>
|
|
#include <privs.h>
|
|
|
|
inherit LIB_DAEMON;
|
|
static string SaveFile;
|
|
mapping StatDeviation = ([]);
|
|
|
|
static void create() {
|
|
daemon::create();
|
|
SaveFile = save_file(SAVE_DEVIATION);
|
|
SetSaveFile(SaveFile);
|
|
if(!file_exists(SaveFile) && file_exists(old_savename(SaveFile))){
|
|
cp(old_savename(SaveFile), SaveFile);
|
|
}
|
|
RestoreObject(SaveFile);
|
|
if(sizeof(StatDeviation)){
|
|
SaveObject(SaveFile);
|
|
}
|
|
call_out("SetDeviations", 10);
|
|
}
|
|
|
|
float GetStatDeviation(int amount){
|
|
float ret;
|
|
switch(amount){
|
|
case 0 : ret = 0.0; break;
|
|
case 1 : ret = 0.22; break;
|
|
case 2 : ret = 0.44; break;
|
|
case 3 : ret = 0.66; break;
|
|
case 4 : ret = 0.88; break;
|
|
default : ret = 0.99; break;
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
varargs int GetDeviationCost(object who, int xp){
|
|
int dev;
|
|
float fxp, subt;
|
|
string race;
|
|
if(!who || !xp) return 0;
|
|
race = who->GetRace();
|
|
fxp = to_float(xp);
|
|
foreach(mixed key, mixed val in who->GetStatsMap()){
|
|
if(!StatDeviation || !StatDeviation[key] ||
|
|
StatDeviation[key][race]) continue;
|
|
dev = (StatDeviation[key][race] - val["class"]);
|
|
if(dev > 0){
|
|
subt += (fxp * GetStatDeviation(dev));
|
|
}
|
|
}
|
|
return to_int(subt);
|
|
}
|
|
|
|
void SetDeviations(){
|
|
mapping tmpmap = STATS_D->GetStats();
|
|
if(sizeof(tmpmap)) StatDeviation = tmpmap;
|
|
SaveObject(SaveFile);
|
|
}
|
|
|