forked from github/server
bind more processing functions to Lua (almost done)
This commit is contained in:
parent
a08cb98fd2
commit
ea618453f7
|
@ -45,6 +45,14 @@ function test_process()
|
||||||
assert_equal("function", _G.type(eressea.process.regeneration))
|
assert_equal("function", _G.type(eressea.process.regeneration))
|
||||||
assert_equal("function", _G.type(eressea.process.guard_on))
|
assert_equal("function", _G.type(eressea.process.guard_on))
|
||||||
assert_equal("function", _G.type(eressea.process.guard_off))
|
assert_equal("function", _G.type(eressea.process.guard_off))
|
||||||
|
assert_equal("function", _G.type(eressea.process.explain))
|
||||||
|
assert_equal("function", _G.type(eressea.process.messages))
|
||||||
|
assert_equal("function", _G.type(eressea.process.reserve))
|
||||||
|
assert_equal("function", _G.type(eressea.process.claim))
|
||||||
|
assert_equal("function", _G.type(eressea.process.follow))
|
||||||
|
assert_equal("function", _G.type(eressea.process.alliance))
|
||||||
|
assert_equal("function", _G.type(eressea.process.idle))
|
||||||
|
assert_equal("function", _G.type(eressea.process.set_default))
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_settings()
|
function test_settings()
|
||||||
|
|
|
@ -236,3 +236,31 @@ end
|
||||||
function test_process_guard_off()
|
function test_process_guard_off()
|
||||||
eressea.process.guard_off()
|
eressea.process.guard_off()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_process_explain()
|
||||||
|
eressea.process.explain()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_process_messages()
|
||||||
|
eressea.process.messages()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_process_reserve()
|
||||||
|
eressea.process.reserve()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_process_claim()
|
||||||
|
eressea.process.claim()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_process_follow()
|
||||||
|
eressea.process.follow()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_process_idle()
|
||||||
|
eressea.process.idle()
|
||||||
|
end
|
||||||
|
|
||||||
|
function test_process_set_default()
|
||||||
|
eressea.process.set_default()
|
||||||
|
end
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
#include <platform.h>
|
#include <platform.h>
|
||||||
#include <kernel/types.h>
|
#include <kernel/types.h>
|
||||||
|
#include <kernel/alliance.h>
|
||||||
|
#include <kernel/config.h>
|
||||||
#include <kernel/magic.h>
|
#include <kernel/magic.h>
|
||||||
#include <kernel/order.h>
|
#include <kernel/order.h>
|
||||||
#include <kernel/battle.h>
|
#include <kernel/battle.h>
|
||||||
|
@ -215,6 +217,32 @@ void process_guard_on(void) {
|
||||||
process_cmd(K_GUARD, guard_on_cmd, PROC_LAND_REGION);
|
process_cmd(K_GUARD, guard_on_cmd, PROC_LAND_REGION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void process_explain(void) {
|
||||||
|
process_cmd(K_RESHOW, reshow_cmd, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void process_reserve(void) {
|
||||||
|
process_cmd(K_RESERVE, reserve_cmd, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void process_claim(void) {
|
||||||
|
process_cmd(K_CLAIM, claim_cmd, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void process_follow(void) {
|
||||||
|
struct region *r;
|
||||||
|
for (r = regions; r; r = r->next) {
|
||||||
|
unit * u;
|
||||||
|
for (u=r->units; u; u=u->next) {
|
||||||
|
follow_unit(u);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void process_messages(void) {
|
||||||
|
process_cmd(K_MAIL, mail_cmd, 0);
|
||||||
|
}
|
||||||
|
|
||||||
void process_guard_off(void) {
|
void process_guard_off(void) {
|
||||||
process_cmd(K_GUARD, guard_off_cmd, PROC_LAND_REGION);
|
process_cmd(K_GUARD, guard_off_cmd, PROC_LAND_REGION);
|
||||||
}
|
}
|
||||||
|
@ -247,3 +275,20 @@ void process_maintenance(void) {
|
||||||
maintain_buildings(r, 0);
|
maintain_buildings(r, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void process_alliance(void) {
|
||||||
|
alliance_cmd();
|
||||||
|
}
|
||||||
|
|
||||||
|
void process_idle(void) {
|
||||||
|
region * r;
|
||||||
|
for (r=regions; r; r=r->next) {
|
||||||
|
auto_work(r);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void process_set_default(void) {
|
||||||
|
if (!global.disabled[K_DEFAULT]) {
|
||||||
|
defaultorders();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -37,6 +37,14 @@ void process_give_control(void);
|
||||||
void process_regeneration(void);
|
void process_regeneration(void);
|
||||||
void process_guard_on(void);
|
void process_guard_on(void);
|
||||||
void process_guard_off(void);
|
void process_guard_off(void);
|
||||||
|
void process_explain(void);
|
||||||
|
void process_messages(void);
|
||||||
|
void process_reserve(void);
|
||||||
|
void process_claim(void);
|
||||||
|
void process_follow(void);
|
||||||
|
void process_alliance(void);
|
||||||
|
void process_idle(void);
|
||||||
|
void process_set_default(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,5 +34,13 @@ module eressea {
|
||||||
void process_regeneration @ regeneration(void); /* regen health & aura */
|
void process_regeneration @ regeneration(void); /* regen health & aura */
|
||||||
void process_guard_on @ guard_on(void); /* GUARD */
|
void process_guard_on @ guard_on(void); /* GUARD */
|
||||||
void process_guard_off @ guard_off(void); /* GUARD NOT */
|
void process_guard_off @ guard_off(void); /* GUARD NOT */
|
||||||
|
void process_explain @ explain(void); /* SHOW */
|
||||||
|
void process_messages @ messages(void); /* MESSAGE */
|
||||||
|
void process_reserve @ reserve(void); /* RESERVE */
|
||||||
|
void process_claim @ claim(void); /* CLAIM */
|
||||||
|
void process_follow @ follow(void); /* FOLLOW */
|
||||||
|
void process_alliance @ alliance(void); /* FOLLOW */
|
||||||
|
void process_idle @ idle(void); /* work.auto */
|
||||||
|
void process_set_default @ set_default(void); /* work.auto */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2166,7 +2166,7 @@ static void mailfaction(unit * u, int n, struct order *ord, const char *s)
|
||||||
cmistake(u, ord, 66, MSG_MESSAGE);
|
cmistake(u, ord, 66, MSG_MESSAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mail_cmd(unit * u, struct order *ord)
|
int mail_cmd(unit * u, struct order *ord)
|
||||||
{
|
{
|
||||||
region *r = u->region;
|
region *r = u->region;
|
||||||
unit *u2;
|
unit *u2;
|
||||||
|
@ -2781,7 +2781,7 @@ int guard_off_cmd(unit * u, struct order *ord)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int reshow_cmd(unit * u, struct order *ord)
|
int reshow_cmd(unit * u, struct order *ord)
|
||||||
{
|
{
|
||||||
const char *s;
|
const char *s;
|
||||||
param_t p = NOPARAM;
|
param_t p = NOPARAM;
|
||||||
|
@ -3867,9 +3867,11 @@ static void remove_exclusive(order ** ordp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void defaultorders(void)
|
void defaultorders(void)
|
||||||
{
|
{
|
||||||
region *r;
|
region *r;
|
||||||
|
|
||||||
|
assert(!global.disabled[K_DEFAULT]);
|
||||||
for (r = regions; r; r = r->next) {
|
for (r = regions; r; r = r->next) {
|
||||||
unit *u;
|
unit *u;
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
|
@ -4054,7 +4056,39 @@ int pay_cmd(unit * u, struct order *ord)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int claim_cmd(unit * u, struct order *ord)
|
|
||||||
|
int reserve_cmd(unit * u, struct order *ord)
|
||||||
|
{
|
||||||
|
if (u->number > 0 && (urace(u)->ec_flags & GETITEM)) {
|
||||||
|
int use, count;
|
||||||
|
const resource_type *rtype;
|
||||||
|
const char *s;
|
||||||
|
|
||||||
|
init_tokens(ord);
|
||||||
|
skip_token();
|
||||||
|
s = getstrtoken();
|
||||||
|
count = atoip((const char *)s);
|
||||||
|
|
||||||
|
if (count == 0 && findparam(s, u->faction->locale) == P_EACH) {
|
||||||
|
count = getint() * u->number;
|
||||||
|
}
|
||||||
|
|
||||||
|
rtype = findresourcetype(getstrtoken(), u->faction->locale);
|
||||||
|
if (rtype == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
set_resvalue(u, rtype, 0); /* make sure the pool is empty */
|
||||||
|
use = use_pooled(u, rtype, GET_DEFAULT, count);
|
||||||
|
if (use) {
|
||||||
|
set_resvalue(u, rtype, use);
|
||||||
|
change_resource(u, rtype, use);
|
||||||
|
return use;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int claim_cmd(unit * u, struct order *ord)
|
||||||
{
|
{
|
||||||
const char *t;
|
const char *t;
|
||||||
int n;
|
int n;
|
||||||
|
|
|
@ -50,6 +50,7 @@ extern "C" {
|
||||||
extern int enter_ship(struct unit *u, struct order *ord, int id, int report);
|
extern int enter_ship(struct unit *u, struct order *ord, int id, int report);
|
||||||
|
|
||||||
extern void new_units(void);
|
extern void new_units(void);
|
||||||
|
extern void defaultorders(void);
|
||||||
extern void quit(void);
|
extern void quit(void);
|
||||||
extern void monthly_healing(void);
|
extern void monthly_healing(void);
|
||||||
extern void renumber_factions(void);
|
extern void renumber_factions(void);
|
||||||
|
@ -81,6 +82,11 @@ extern "C" {
|
||||||
extern int contact_cmd(struct unit *u, struct order *ord);
|
extern int contact_cmd(struct unit *u, struct order *ord);
|
||||||
extern int guard_on_cmd(struct unit *u, struct order *ord);
|
extern int guard_on_cmd(struct unit *u, struct order *ord);
|
||||||
extern int guard_off_cmd(struct unit *u, struct order *ord);
|
extern int guard_off_cmd(struct unit *u, struct order *ord);
|
||||||
|
extern int reshow_cmd(struct unit *u, struct order *ord);
|
||||||
|
extern int mail_cmd(struct unit *u, struct order *ord);
|
||||||
|
extern int reserve_cmd(struct unit *u, struct order *ord);
|
||||||
|
extern int claim_cmd(struct unit *u, struct order *ord);
|
||||||
|
extern int follow_cmd(struct unit *u, struct order *ord);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,7 @@ int change_resource(unit * u, const resource_type * rtype, int change)
|
||||||
|
|
||||||
int get_reservation(const unit * u, const resource_type * rtype)
|
int get_reservation(const unit * u, const resource_type * rtype)
|
||||||
{
|
{
|
||||||
struct reservation *res = u->reservations;
|
reservation *res = u->reservations;
|
||||||
|
|
||||||
if (rtype == oldresourcetype[R_STONE] && (u->race->flags & RCF_STONEGOLEM))
|
if (rtype == oldresourcetype[R_STONE] && (u->race->flags & RCF_STONEGOLEM))
|
||||||
return (u->number * GOLEM_STONE);
|
return (u->number * GOLEM_STONE);
|
||||||
|
@ -111,7 +111,7 @@ int get_reservation(const unit * u, const resource_type * rtype)
|
||||||
|
|
||||||
int change_reservation(unit * u, const resource_type * rtype, int value)
|
int change_reservation(unit * u, const resource_type * rtype, int value)
|
||||||
{
|
{
|
||||||
struct reservation *res, **rp = &u->reservations;
|
reservation *res, **rp = &u->reservations;
|
||||||
|
|
||||||
if (!value)
|
if (!value)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -120,7 +120,7 @@ int change_reservation(unit * u, const resource_type * rtype, int value)
|
||||||
rp = &(*rp)->next;
|
rp = &(*rp)->next;
|
||||||
res = *rp;
|
res = *rp;
|
||||||
if (!res) {
|
if (!res) {
|
||||||
*rp = res = calloc(sizeof(struct reservation), 1);
|
*rp = res = calloc(sizeof(reservation), 1);
|
||||||
res->type = rtype;
|
res->type = rtype;
|
||||||
res->value = value;
|
res->value = value;
|
||||||
} else if (res && res->value + value <= 0) {
|
} else if (res && res->value + value <= 0) {
|
||||||
|
@ -133,9 +133,9 @@ int change_reservation(unit * u, const resource_type * rtype, int value)
|
||||||
return res->value;
|
return res->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int new_set_resvalue(unit * u, const resource_type * rtype, int value)
|
int set_resvalue(unit * u, const resource_type * rtype, int value)
|
||||||
{
|
{
|
||||||
struct reservation *res, **rp = &u->reservations;
|
reservation *res, **rp = &u->reservations;
|
||||||
|
|
||||||
while (*rp && (*rp)->type != rtype)
|
while (*rp && (*rp)->type != rtype)
|
||||||
rp = &(*rp)->next;
|
rp = &(*rp)->next;
|
||||||
|
@ -143,7 +143,7 @@ static int new_set_resvalue(unit * u, const resource_type * rtype, int value)
|
||||||
if (!res) {
|
if (!res) {
|
||||||
if (!value)
|
if (!value)
|
||||||
return 0;
|
return 0;
|
||||||
*rp = res = calloc(sizeof(struct reservation), 1);
|
*rp = res = calloc(sizeof(reservation), 1);
|
||||||
res->type = rtype;
|
res->type = rtype;
|
||||||
res->value = value;
|
res->value = value;
|
||||||
} else if (res && value <= 0) {
|
} else if (res && value <= 0) {
|
||||||
|
@ -253,34 +253,3 @@ use_pooled(unit * u, const resource_type * rtype, unsigned int mode, int count)
|
||||||
}
|
}
|
||||||
return count - use;
|
return count - use;
|
||||||
}
|
}
|
||||||
|
|
||||||
int reserve_cmd(unit * u, struct order *ord)
|
|
||||||
{
|
|
||||||
if (u->number > 0 && (urace(u)->ec_flags & GETITEM)) {
|
|
||||||
int use, count;
|
|
||||||
const resource_type *rtype;
|
|
||||||
const char *s;
|
|
||||||
|
|
||||||
init_tokens(ord);
|
|
||||||
skip_token();
|
|
||||||
s = getstrtoken();
|
|
||||||
count = atoip((const char *)s);
|
|
||||||
|
|
||||||
if (count == 0 && findparam(s, u->faction->locale) == P_EACH) {
|
|
||||||
count = getint() * u->number;
|
|
||||||
}
|
|
||||||
|
|
||||||
rtype = findresourcetype(getstrtoken(), u->faction->locale);
|
|
||||||
if (rtype == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
new_set_resvalue(u, rtype, 0); /* make sure the pool is empty */
|
|
||||||
use = use_pooled(u, rtype, GET_DEFAULT, count);
|
|
||||||
if (use) {
|
|
||||||
new_set_resvalue(u, rtype, use);
|
|
||||||
change_resource(u, rtype, use);
|
|
||||||
return use;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
|
@ -54,11 +54,7 @@ extern "C" {
|
||||||
int change_reservation(struct unit *u, const struct resource_type *res,
|
int change_reservation(struct unit *u, const struct resource_type *res,
|
||||||
int value);
|
int value);
|
||||||
|
|
||||||
int reserve_cmd(struct unit *u, struct order *ord);
|
int set_resvalue(struct unit * u, const struct resource_type * rtype, int value);
|
||||||
|
|
||||||
/** init_pool
|
|
||||||
* initialisiert den regionalen Pool.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,12 @@ extern "C" {
|
||||||
extern int maxheroes(const struct faction *f);
|
extern int maxheroes(const struct faction *f);
|
||||||
extern int countheroes(const struct faction *f);
|
extern int countheroes(const struct faction *f);
|
||||||
|
|
||||||
|
typedef struct reservation {
|
||||||
|
struct reservation *next;
|
||||||
|
const struct resource_type *type;
|
||||||
|
int value;
|
||||||
|
} reservation;
|
||||||
|
|
||||||
typedef struct unit {
|
typedef struct unit {
|
||||||
struct unit *next; /* needs to be first entry, for region's unitlist */
|
struct unit *next; /* needs to be first entry, for region's unitlist */
|
||||||
struct unit *nextF; /* nächste Einheit der Partei */
|
struct unit *nextF; /* nächste Einheit der Partei */
|
||||||
|
@ -90,11 +96,7 @@ extern "C" {
|
||||||
short skill_size;
|
short skill_size;
|
||||||
struct skill *skills;
|
struct skill *skills;
|
||||||
struct item *items;
|
struct item *items;
|
||||||
struct reservation {
|
reservation *reservations;
|
||||||
struct reservation *next;
|
|
||||||
const struct resource_type *type;
|
|
||||||
int value;
|
|
||||||
} *reservations;
|
|
||||||
|
|
||||||
/* orders */
|
/* orders */
|
||||||
struct order *orders;
|
struct order *orders;
|
||||||
|
|
Loading…
Reference in New Issue