forked from github/server
Merge pull request #886 from ennorehling/develop
Baumwachstum und Flotten-Meldungen
This commit is contained in:
commit
32d2970965
|
@ -2690,6 +2690,70 @@
|
||||||
</type>
|
</type>
|
||||||
</message>
|
</message>
|
||||||
|
|
||||||
|
<message name="error321" section="errors">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
<arg name="command" type="order"/>
|
||||||
|
</type>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="error322" section="errors">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
<arg name="command" type="order"/>
|
||||||
|
</type>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="error323" section="errors">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
<arg name="command" type="order"/>
|
||||||
|
</type>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="error324" section="errors">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
<arg name="command" type="order"/>
|
||||||
|
</type>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="error325" section="errors">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
<arg name="command" type="order"/>
|
||||||
|
</type>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="error326" section="errors">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
<arg name="command" type="order"/>
|
||||||
|
</type>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="error327" section="errors">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
<arg name="command" type="order"/>
|
||||||
|
</type>
|
||||||
|
</message>
|
||||||
|
|
||||||
|
<message name="error328" section="errors">
|
||||||
|
<type>
|
||||||
|
<arg name="unit" type="unit"/>
|
||||||
|
<arg name="region" type="region"/>
|
||||||
|
<arg name="command" type="order"/>
|
||||||
|
</type>
|
||||||
|
</message>
|
||||||
|
|
||||||
<message name="error319" section="errors">
|
<message name="error319" section="errors">
|
||||||
<type>
|
<type>
|
||||||
<arg name="unit" type="unit"/>
|
<arg name="unit" type="unit"/>
|
||||||
|
|
|
@ -2775,7 +2775,10 @@ msgid "error324"
|
||||||
msgstr "\"$unit($unit) in $region($region): '$order($command)' - Die Einheit gehört nicht zu unserer Partei.\""
|
msgstr "\"$unit($unit) in $region($region): '$order($command)' - Die Einheit gehört nicht zu unserer Partei.\""
|
||||||
|
|
||||||
msgid "error322"
|
msgid "error322"
|
||||||
msgstr "\"$unit($unit) in $region($region): '$order($command)' - Die Einheit ist bereits auf einem Schiff.\""
|
msgstr "\"$unit($unit) in $region($region): '$order($command)' - Nur Schiffe gleicher Bauart können einen Konvoi bilden.\""
|
||||||
|
|
||||||
|
msgid "error328"
|
||||||
|
msgstr "\"$unit($unit) in $region($region): '$order($command)' - Nur Schiffe an der selben Küste können einen Konvoi bilden.\""
|
||||||
|
|
||||||
msgid "error323"
|
msgid "error323"
|
||||||
msgstr "\"$unit($unit) in $region($region): '$order($command)' - Das Schiff ist verzaubert.\""
|
msgstr "\"$unit($unit) in $region($region): '$order($command)' - Das Schiff ist verzaubert.\""
|
||||||
|
|
|
@ -2781,11 +2781,14 @@ msgid "error324"
|
||||||
msgstr "\"$unit($unit) in $region($region): '$order($command)' - The unit is not one of ours.\""
|
msgstr "\"$unit($unit) in $region($region): '$order($command)' - The unit is not one of ours.\""
|
||||||
|
|
||||||
msgid "error322"
|
msgid "error322"
|
||||||
msgstr "\"$unit($unit) in $region($region): '$order($command)' - The unit is already on a ship.\""
|
msgstr "\"$unit($unit) in $region($region): '$order($command)' - Only ships of the same type can form a convoy.\""
|
||||||
|
|
||||||
msgid "error323"
|
msgid "error323"
|
||||||
msgstr "\"$unit($unit) in $region($region): '$order($command)' - The ship is under a spell.\""
|
msgstr "\"$unit($unit) in $region($region): '$order($command)' - The ship is under a spell.\""
|
||||||
|
|
||||||
|
msgid "error328"
|
||||||
|
msgstr "\"$unit($unit) in $region($region): '$order($command)' - All ships of a convoy must be on the same coast.\""
|
||||||
|
|
||||||
msgid "dissolve_units_2"
|
msgid "dissolve_units_2"
|
||||||
msgstr "\"$unit($unit) in $region($region): $int($number) $race($race,$number) turned into $if($eq($number,1),\"a tree\", \"trees\").\""
|
msgstr "\"$unit($unit) in $region($region): $int($number) $race($race,$number) turned into $if($eq($number,1),\"a tree\", \"trees\").\""
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,29 @@ function setup()
|
||||||
eressea.settings.set("magic.regeneration.enable", "0")
|
eressea.settings.set("magic.regeneration.enable", "0")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_undead_cannot_enter_holyground()
|
||||||
|
local r1 = region.create(0, 0, 'plain')
|
||||||
|
local r2 = region.create(1, 0, 'plain')
|
||||||
|
local f = faction.create('human')
|
||||||
|
local u1 = unit.create(f, r1, 1)
|
||||||
|
local u2 = unit.create(f, r2, 1)
|
||||||
|
|
||||||
|
u2.name = "Xolgrim's Magier"
|
||||||
|
u1.name = "Xolgrim's Opfer"
|
||||||
|
|
||||||
|
u2.magic = 'gwyrrd'
|
||||||
|
u2:set_skill('magic', 100)
|
||||||
|
u2.aura = 200
|
||||||
|
u2:add_spell('holyground')
|
||||||
|
u2:add_order('ZAUBERE STUFE 10 "Heiliger Boden"')
|
||||||
|
|
||||||
|
u1.race = "skeleton"
|
||||||
|
u1:add_order("NACH Osten")
|
||||||
|
process_orders()
|
||||||
|
assert_not_nil(r2:get_curse('holyground'))
|
||||||
|
assert_equal(r1, u1.region)
|
||||||
|
end
|
||||||
|
|
||||||
function test_shapeshift()
|
function test_shapeshift()
|
||||||
local r = region.create(42, 0, "plain")
|
local r = region.create(42, 0, "plain")
|
||||||
local f = faction.create("demon", "noreply@eressea.de", "de")
|
local f = faction.create("demon", "noreply@eressea.de", "de")
|
||||||
|
|
|
@ -28,9 +28,6 @@ static int tolua_levitate_ship(lua_State * L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void spawn_undead(void);
|
|
||||||
extern void plan_monsters(struct faction *f);
|
|
||||||
|
|
||||||
static int tolua_planmonsters(lua_State * L)
|
static int tolua_planmonsters(lua_State * L)
|
||||||
{
|
{
|
||||||
faction *f = (faction *)tolua_tousertype(L, 1, get_monsters());
|
faction *f = (faction *)tolua_tousertype(L, 1, get_monsters());
|
||||||
|
|
|
@ -14,7 +14,8 @@
|
||||||
|
|
||||||
#include <lua.h>
|
#include <lua.h>
|
||||||
|
|
||||||
void tolua_bind_open(lua_State * L) {
|
void tolua_bind_open(lua_State * L)
|
||||||
|
{
|
||||||
tolua_eressea_open(L);
|
tolua_eressea_open(L);
|
||||||
tolua_process_open(L);
|
tolua_process_open(L);
|
||||||
tolua_settings_open(L);
|
tolua_settings_open(L);
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "bindings.h"
|
#include "bindings.h"
|
||||||
|
#include "bind_tolua.h"
|
||||||
|
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
#include "gamedb.h"
|
#include "gamedb.h"
|
||||||
|
@ -865,8 +866,6 @@ static int lua_rng_default(lua_State *L) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void tolua_bind_open(lua_State * L);
|
|
||||||
|
|
||||||
int tolua_bindings_open(lua_State * L, const dictionary *inifile)
|
int tolua_bindings_open(lua_State * L, const dictionary *inifile)
|
||||||
{
|
{
|
||||||
tolua_open(L);
|
tolua_open(L);
|
||||||
|
|
|
@ -12,6 +12,8 @@ extern "C" {
|
||||||
int tolua_selist_push(struct lua_State *L, const char *list_type,
|
int tolua_selist_push(struct lua_State *L, const char *list_type,
|
||||||
const char *elem_type, struct selist *list);
|
const char *elem_type, struct selist *list);
|
||||||
|
|
||||||
|
void bind_monsters(struct lua_State *L);
|
||||||
|
|
||||||
int log_lua_error(struct lua_State *L);
|
int log_lua_error(struct lua_State *L);
|
||||||
|
|
||||||
void lua_done(struct lua_State *L);
|
void lua_done(struct lua_State *L);
|
||||||
|
|
|
@ -371,7 +371,7 @@ message * give_ship(unit *u1, unit *u2, int n, order *ord)
|
||||||
u2->ship->coast = u1->ship->coast;
|
u2->ship->coast = u1->ship->coast;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return msg_error(u1, ord, 182);
|
return msg_error(u1, ord, 328);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,6 +62,7 @@ static message *missing_feedback(const char *name, const struct unit *u,
|
||||||
log_error("trying to create undefined feedback of type \"%s\"\n", name);
|
log_error("trying to create undefined feedback of type \"%s\"\n", name);
|
||||||
}
|
}
|
||||||
else if (missing_message_mode == MESSAGE_MISSING_REPLACE) {
|
else if (missing_message_mode == MESSAGE_MISSING_REPLACE) {
|
||||||
|
log_warning("trying to create undefined message of type \"%s\"\n", name);
|
||||||
if (strcmp(name, "missing_feedback") != 0) {
|
if (strcmp(name, "missing_feedback") != 0) {
|
||||||
if (!mt_find("missing_feedback")) {
|
if (!mt_find("missing_feedback")) {
|
||||||
mt_create_va(mt_new("missing_feedback", NULL), "unit:unit",
|
mt_create_va(mt_new("missing_feedback", NULL), "unit:unit",
|
||||||
|
|
33
src/laws.c
33
src/laws.c
|
@ -594,6 +594,13 @@ growing_trees_e3(region * r, const int current_season,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static short cap_short(int i) {
|
||||||
|
if (i > SHRT_MIN) {
|
||||||
|
return ((i < SHRT_MAX) ? (short)i : SHRT_MAX);
|
||||||
|
}
|
||||||
|
return SHRT_MIN;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
growing_trees(region * r, const season_t current_season, const season_t last_weeks_season)
|
growing_trees(region * r, const season_t current_season, const season_t last_weeks_season)
|
||||||
{
|
{
|
||||||
|
@ -687,8 +694,8 @@ growing_trees(region * r, const season_t current_season, const season_t last_wee
|
||||||
a = a_find(r->attribs, &at_germs);
|
a = a_find(r->attribs, &at_germs);
|
||||||
if (!a) {
|
if (!a) {
|
||||||
a = a_add(&r->attribs, a_new(&at_germs));
|
a = a_add(&r->attribs, a_new(&at_germs));
|
||||||
a->data.sa[0] = (short)rtrees(r, 0);
|
a->data.sa[0] = cap_short(rtrees(r, 0));
|
||||||
a->data.sa[1] = (short)rtrees(r, 1);
|
a->data.sa[1] = cap_short(rtrees(r, 1));
|
||||||
}
|
}
|
||||||
/* wir haben 6 Wochen zum wachsen, jeder Same/Spross hat 18% Chance
|
/* wir haben 6 Wochen zum wachsen, jeder Same/Spross hat 18% Chance
|
||||||
* zu wachsen, damit sollten nach 5-6 Wochen alle gewachsen sein */
|
* zu wachsen, damit sollten nach 5-6 Wochen alle gewachsen sein */
|
||||||
|
@ -3712,8 +3719,9 @@ void process(void)
|
||||||
|
|
||||||
log_debug("- Step %u", prio);
|
log_debug("- Step %u", prio);
|
||||||
while (proc && proc->priority == prio) {
|
while (proc && proc->priority == prio) {
|
||||||
if (proc->name)
|
if (proc->name) {
|
||||||
log_debug(" - %s", proc->name);
|
log_debug(" - %s", proc->name);
|
||||||
|
}
|
||||||
proc = proc->next;
|
proc = proc->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3721,8 +3729,9 @@ void process(void)
|
||||||
pglobal->data.global.process();
|
pglobal->data.global.process();
|
||||||
pglobal = pglobal->next;
|
pglobal = pglobal->next;
|
||||||
}
|
}
|
||||||
if (pglobal == NULL || pglobal->priority != prio)
|
if (pglobal == NULL || pglobal->priority != prio) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
for (r = regions; r; r = r->next) {
|
for (r = regions; r; r = r->next) {
|
||||||
unit *u;
|
unit *u;
|
||||||
|
@ -3733,8 +3742,9 @@ void process(void)
|
||||||
pregion->data.per_region.process(r);
|
pregion->data.per_region.process(r);
|
||||||
pregion = pregion->next;
|
pregion = pregion->next;
|
||||||
}
|
}
|
||||||
if (pregion == NULL || pregion->priority != prio)
|
if (pregion == NULL || pregion->priority != prio) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (r->units) {
|
if (r->units) {
|
||||||
for (u = r->units; u; u = u->next) {
|
for (u = r->units; u; u = u->next) {
|
||||||
|
@ -3744,14 +3754,16 @@ void process(void)
|
||||||
punit->data.per_unit.process(u);
|
punit->data.per_unit.process(u);
|
||||||
punit = punit->next;
|
punit = punit->next;
|
||||||
}
|
}
|
||||||
if (punit == NULL || punit->priority != prio)
|
if (punit == NULL || punit->priority != prio) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
porder = punit;
|
porder = punit;
|
||||||
while (porder && porder->priority == prio && porder->type == PR_ORDER) {
|
while (porder && porder->priority == prio && porder->type == PR_ORDER) {
|
||||||
order **ordp = &u->orders;
|
order **ordp = &u->orders;
|
||||||
if (porder->flags & PROC_THISORDER)
|
if (porder->flags & PROC_THISORDER) {
|
||||||
ordp = &u->thisorder;
|
ordp = &u->thisorder;
|
||||||
|
}
|
||||||
while (*ordp) {
|
while (*ordp) {
|
||||||
order *ord = *ordp;
|
order *ord = *ordp;
|
||||||
if (getkeyword(ord) == porder->data.per_order.kword) {
|
if (getkeyword(ord) == porder->data.per_order.kword) {
|
||||||
|
@ -3780,9 +3792,10 @@ void process(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!ord || *ordp == ord)
|
if (!ord || *ordp == ord) {
|
||||||
ordp = &(*ordp)->next;
|
ordp = &(*ordp)->next;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
porder = porder->next;
|
porder = porder->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3798,9 +3811,9 @@ void process(void)
|
||||||
pregion->data.per_region.process(r);
|
pregion->data.per_region.process(r);
|
||||||
pregion = pregion->next;
|
pregion = pregion->next;
|
||||||
}
|
}
|
||||||
if (pregion == NULL || pregion->priority != prio)
|
if (pregion == NULL || pregion->priority != prio) {
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -290,8 +290,6 @@ void locale_init(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void bind_monsters(lua_State *L);
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
|
@ -21,6 +21,10 @@ extern "C" {
|
||||||
bool monster_is_waiting(const struct unit *u);
|
bool monster_is_waiting(const struct unit *u);
|
||||||
void make_zombie(struct unit * u);
|
void make_zombie(struct unit * u);
|
||||||
|
|
||||||
|
void spawn_undead(void);
|
||||||
|
void plan_monsters(struct faction *f);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
11
src/move.c
11
src/move.c
|
@ -974,10 +974,17 @@ bool move_blocked(const unit * u, const region * r, const region * r2)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (r->attribs) {
|
if (r->attribs) {
|
||||||
const curse_type *fogtrap_ct = &ct_fogtrap;
|
curse *c = get_curse(r->attribs, &ct_fogtrap);
|
||||||
curse *c = get_curse(r->attribs, fogtrap_ct);
|
if (curse_active(c)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (r2->attribs && fval(u_race(u), RCF_UNDEAD)) {
|
||||||
|
curse *c = get_curse(r2->attribs, &ct_holyground);
|
||||||
return curse_active(c);
|
return curse_active(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue