forked from github/server
61 lines
1.3 KiB
C
61 lines
1.3 KiB
C
#include <kernel/types.h>
|
|
#include "donations.h"
|
|
|
|
#include <kernel/faction.h>
|
|
#include <kernel/region.h>
|
|
#include <kernel/messages.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
void add_donation(faction * f1, faction * f2, int amount, region * r)
|
|
{
|
|
donation *sp;
|
|
|
|
sp = r->donations_;
|
|
|
|
while (sp) {
|
|
if (sp->f1 == f1 && sp->f2 == f2) {
|
|
sp->amount += amount;
|
|
return;
|
|
}
|
|
sp = sp->next;
|
|
}
|
|
|
|
sp = calloc(1, sizeof(donation));
|
|
sp->f1 = f1;
|
|
sp->f2 = f2;
|
|
sp->amount = amount;
|
|
sp->next = r->donations_;
|
|
r->donations_ = sp;
|
|
}
|
|
|
|
void free_donations(void) {
|
|
region *r;
|
|
for (r = regions; r; r = r->next) {
|
|
while (r->donations_) {
|
|
donation *don = r->donations_;
|
|
r->donations_ = don->next;
|
|
free(don);
|
|
}
|
|
}
|
|
}
|
|
|
|
void report_donations(void)
|
|
{
|
|
region *r;
|
|
for (r = regions; r; r = r->next) {
|
|
while (r->donations_) {
|
|
donation *sp = r->donations_;
|
|
if (sp->amount > 0) {
|
|
struct message *msg = msg_message("donation",
|
|
"from to amount", sp->f1, sp->f2, sp->amount);
|
|
r_addmessage(r, sp->f1, msg);
|
|
r_addmessage(r, sp->f2, msg);
|
|
msg_release(msg);
|
|
}
|
|
r->donations_ = sp->next;
|
|
free(sp);
|
|
}
|
|
}
|
|
}
|