server/src/economy.h
2019-09-13 21:35:44 +02:00

94 lines
2.8 KiB
C

#ifndef H_GC_ECONOMY
#define H_GC_ECONOMY
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
/* Welchen Teil des Silbers die Bauern fuer Unterhaltung ausgeben (1/20), und
* wiviel Silber ein Unterhalter pro Talentpunkt bekommt. */
/* Wieviele Silbermuenzen jeweils auf einmal "getaxed" werden. */
#define TAXFRACTION 10
/* Wieviel Silber pro Talentpunkt geklaut wird. */
#define STEALINCOME 50
/* Teil der Bauern, welche Luxusgueter kaufen und verkaufen (1/100). */
#define TRADE_FRACTION 100
/* Wieviel Fremde eine Partei pro Woche aufnehmen kann */
#define MAXNEWBIES 5
struct unit;
struct race;
struct region;
struct faction;
struct order;
struct message;
struct terrain_type;
struct item_type;
typedef struct econ_request {
struct econ_request *next;
struct unit *unit;
int qty;
enum econ_type {
ECON_LIST,
ECON_ENTERTAIN,
ECON_WORK,
ECON_TAX,
ECON_LOOT,
ECON_BUY,
ECON_SELL,
ECON_STEAL,
} type;
union {
struct {
int no;
bool goblin; /* stealing */
} steal;
struct {
const struct luxury_type *ltype; /* trading */
} trade;
} data;
} econ_request;
int expand_production(struct region * r, struct econ_request * requests, struct econ_request ***results);
int income(const struct unit *u);
int entertainmoney(const struct region *r);
void economics(struct region *r);
void destroy(struct region *r);
void produce(struct region *r);
void auto_work(struct region *r);
bool trade_needs_castle(const struct terrain_type *terrain, const struct race *rc);
typedef enum income_t { IC_WORK, IC_ENTERTAIN, IC_TAX, IC_TRADE, IC_TRADETAX, IC_STEAL, IC_MAGIC, IC_LOOT } income_t;
void add_income(struct unit * u, income_t type, int want, int qty);
void maintain_buildings(struct region *r);
void make_item(struct unit * u, const struct item_type * itype, int want);
int make_cmd(struct unit *u, struct order *ord);
void split_allocations(struct region *r);
int give_control_cmd(struct unit *u, struct order *ord);
void give_control(struct unit * u, struct unit * u2);
void tax_cmd(struct unit * u, struct order *ord, struct econ_request ** taxorders);
void expandtax(struct region * r, struct econ_request * taxorders);
struct message * steal_message(const struct unit * u, struct order *ord);
void steal_cmd(struct unit * u, struct order *ord, struct econ_request ** stealorders);
void expandstealing(struct region * r, struct econ_request * stealorders);
#ifdef __cplusplus
}
#endif
#endif