New news selector duration

Backed by new struct nwsstr member nws_duration.  Time between first
and last occurence of the news recorded in this item, in seconds.
This commit is contained in:
Markus Armbruster 2009-12-31 09:17:54 +01:00
parent 39114987a9
commit b719f39c0f
3 changed files with 9 additions and 4 deletions

View file

@ -55,6 +55,7 @@ struct nwsstr {
unsigned char nws_vrb; /* action (verb) */
natid nws_vno; /* "victim" country # */
signed char nws_ntm; /* number of times */
short nws_duration; /* last time at nws_when + nws_duration */
time_t nws_when; /* time of action */
};

View file

@ -475,6 +475,7 @@ struct castr news_ca[] = {
{"action", fldoff(nws_vrb), NSC_UCHAR, 0, NULL, EF_NEWS_CHR, 0},
{"victim", fldoff(nws_vno), NSC_NATID, 0, NULL, EF_NATION, 0},
{"times", fldoff(nws_ntm), NSC_CHAR, 0, NULL, EF_BAD, 0},
{"duration", fldoff(nws_duration), NSC_SHORT, 0, NULL, EF_BAD, 0},
{"time", fldoff(nws_when), NSC_TIME, 0, NULL, EF_BAD, 0},
{NULL, 0, NSC_NOTYPE, 0, NULL, EF_BAD, 0}
#undef CURSTR

View file

@ -161,7 +161,7 @@ ncache(int actor, int event, int victim, int times)
struct newscache *np;
int i;
int oldslot;
time_t oldtime;
time_t oldtime, dur;
time_t now = time(NULL);
oldslot = -1;
@ -174,11 +174,13 @@ ncache(int actor, int event, int victim, int times)
}
if (np->news.nws_vrb == 0)
continue;
if ((now - np->news.nws_when) > minutes(5))
dur = now - np->news.nws_when;
if (dur > minutes(5))
continue;
if (np->news.nws_vrb == event && np->news.nws_vno == victim &&
np->news.nws_ntm + times <= 127) {
np->news.nws_ntm += times;
np->news.nws_duration = dur;
return np;
}
}
@ -189,10 +191,11 @@ ncache(int actor, int event, int victim, int times)
np = &cache[actor][oldslot];
ef_blank(EF_NEWS, news_tail, &np->news);
np->news.nws_ano = actor;
np->news.nws_vno = victim;
np->news.nws_when = now;
np->news.nws_vrb = event;
np->news.nws_vno = victim;
np->news.nws_ntm = times;
np->news.nws_duration = 0;
np->news.nws_when = now;
np->id = news_tail++;
return np;
}