// The donation daemon for guild halls.
#include <std.h>
inherit DAEMON;
private mapping __Accounts;
private string __Current_Leader;
void create()
{
::create();
__Accounts = ([]);
__Current_Leader = "";
}
void adjust_leader();
int add_to_account(string name, int val)
{
if(!__Accounts || (val < 0))
return 0;
if(!__Accounts[name])
__Accounts[name] = 0;
__Accounts[name] += val;
adjust_leader();
return 1;
}
int sub_from_account(string name, int val)
{
if(!__Accounts || (val < 0))
return 0;
if(!__Accounts[name])
__Accounts[name] = 0;
__Accounts[name] -= val;
adjust_leader();
return 1;
}
void adjust_leader()
{
string *accs;
string new_lead;
int max, i, asz;
max = 0;
accs = keys(__Accounts);
for(i = 0, asz = sizeof(accs); i < asz; i++)
{
if(((int)__Accounts[accs[i]]) > max)
{
max = (int)__Accounts[accs[i]];
new_lead = accs[i];
}
}
if(new_lead != __Current_Leader)
{
// announce
__Current_Leader = new_lead;
message("shout", "The " + __Current_Leader +
" now have the most donations.\n", users());
}
}