X-Git-Url: http://git.pond.sub.org/?p=empserver;a=blobdiff_plain;f=include%2Fnat.h;h=58a8b1b6e1c25cf8b7c25e8a51563edb5012ca12;hp=e4f70a5ecd1f253ecf85c90a873699b04531b97e;hb=HEAD;hpb=9d153f547c827cc05fc9ce2ff91deba428760e1b diff --git a/include/nat.h b/include/nat.h index e4f70a5ec..58a8b1b6e 100644 --- a/include/nat.h +++ b/include/nat.h @@ -1,6 +1,6 @@ /* * Empire - A multi-player, client/server Internet based war game. - * Copyright (C) 1986-2016, Dave Pare, Jeff Bailey, Thomas Ruschak, + * Copyright (C) 1986-2021, Dave Pare, Jeff Bailey, Thomas Ruschak, * Ken Stevens, Steve McClure, Markus Armbruster * * Empire is free software: you can redistribute it and/or modify @@ -111,27 +111,37 @@ struct natstr { time_t nat_newstim; /* date news last read */ time_t nat_annotim; /* date annos last read */ float nat_level[4]; /* technology, etc */ - unsigned char nat_relate[MAXNOC]; - unsigned char nat_rejects[MAXNOC]; }; - /* nation relation codes */ -#define AT_WAR 0 -#define HOSTILE 1 -#define NEUTRAL 2 -#define FRIENDLY 3 -#define ALLIED 4 - - /* nation reject codes */ -#define REJ_TELE bit(0) /* dont allow telegrams to be sent */ -#define REJ_ANNO bit(1) /* don't receive announcements */ -#define REJ_LOAN bit(2) /* don't allow loans to be offered */ - #define NAT_TLEV 0 #define NAT_RLEV 1 #define NAT_ELEV 2 #define NAT_HLEV 3 +/* Diplomatic relations */ +enum relations { + /* + * Don't change order without checking inequality comparisons and + * array initializers! + */ + AT_WAR, + HOSTILE, + NEUTRAL, + FRIENDLY, + ALLIED +}; + +struct relatstr { + /* initial part must match struct empobj */ + signed ef_type: 8; + unsigned rel_seqno: 12; + unsigned rel_generation: 12; + int rel_uid; + time_t rel_timestamp; + /* end of part matching struct empobj */ + unsigned char rel_relate[MAXNOC]; /* enum relations */ +}; + /* * Number of updates contact lasts for various ways of making contact. * These are only useful with option LOSE_CONTACT, which implies @@ -159,42 +169,72 @@ struct contactstr { unsigned char con_contact[MAXNOC]; }; -extern char *relates[]; +/* Kinds of communication players can reject */ +enum rej_comm { + REJ_TELE, /* dont allow telegrams to be sent */ + REJ_ANNO, /* don't receive announcements */ + REJ_LOAN /* don't allow loans to be offered */ +}; + +struct rejectstr { + /* initial part must match struct empobj */ + signed ef_type: 8; + unsigned rej_seqno: 12; + unsigned rej_generation: 12; + int rej_uid; + time_t rej_timestamp; + /* end of part matching struct empobj */ + unsigned char rej_rejects[MAXNOC]; +}; /* procedures relating to nation stuff */ #define putnat(p) ef_write(EF_NATION, (p)->nat_cnum, (p)) #define getnatp(n) ((struct natstr *)ef_ptr(EF_NATION, (n))) +#define getrelat(n, p) ef_read(EF_RELAT, (n), (p)) +#define putrelat(p) ef_write(EF_RELAT, (p)->rel_uid, (p)) +#define getrelatp(n) ((struct relatstr *)ef_ptr(EF_RELAT, (n))) + #define getcontact(n, p) ef_read(EF_CONTACT, (n), (p)) #define putcontact(p) ef_write(EF_CONTACT, (p)->con_uid, (p)) #define getcontactp(n) ((struct contactstr *)ef_ptr(EF_CONTACT, (n))) +#define getreject(n, p) ef_read(EF_REJECT, (n), (p)) +#define putreject(p) ef_write(EF_REJECT, (p)->rej_uid, (p)) +#define getrejectp(n) ((struct rejectstr *)ef_ptr(EF_REJECT, (n))) + #define getrealm(r, n, p) ef_read(EF_REALM, ((r) + ((n) * MAXNOR)), (p)) #define putrealm(p) ef_write(EF_REALM, (p)->r_uid, (p)) +/* src/lib/common/tfact.c */ extern double tfact(natid cn, double mult); extern double techfact(int level, double mult); +/* src/lib/common/nat.c */ extern char *cname(natid n); -extern char *relatename(struct natstr *np, natid other); extern char *natstate(struct natstr *np); -extern int getrel(struct natstr *np, natid them); -extern int relations_with(natid, natid); -extern int nat_accepts(struct natstr *, natid, int); +extern enum relations relations_with(natid, natid); +extern char *relations_string(enum relations); +extern int nat_accepts(natid, natid, enum rej_comm); extern int in_contact(natid, natid); -extern void putrel(struct natstr *np, natid them, int relate); extern void agecontact(struct natstr *np); extern int influx(struct natstr *np); -extern struct natstr *nat_reset(struct natstr *, natid, char *, char *, - enum nat_status); +extern void nat_reset(natid, char *, char *, enum nat_status); +/* src/lib/subs/natsub.c */ extern int check_nat_name(char *, natid); extern char *prnat(struct natstr *); extern char *prnatid(natid); +/* src/lib/common/btu.c */ extern int grant_btus(struct natstr *, int); +/* src/lib/subs/rej.c */ +extern void setrel(natid, natid, enum relations); +extern void setcont(natid, natid, int); +extern void setrej(natid, natid, int, enum rej_comm); + /* nation flags */ #define NF_INFORM bit(0) /* Inform me of telegrams right away */ #define NF_FLASH bit(1) /* Allow other players to flash me (sicko :) */