forked from github/server
fix give_unit test for E3
extract read_factions from read_game, now small and nice.
This commit is contained in:
parent
827532dd49
commit
8bed3f3329
4 changed files with 115 additions and 91 deletions
|
@ -37,23 +37,6 @@ function setup()
|
||||||
eressea.settings.set("study.random_progress", "0")
|
eressea.settings.set("study.random_progress", "0")
|
||||||
end
|
end
|
||||||
|
|
||||||
function test_give_unit()
|
|
||||||
local r = region.create(0, 0, "plain")
|
|
||||||
local f1 = create_faction('elf')
|
|
||||||
local f2 = create_faction('elf')
|
|
||||||
local u1, u2 = two_units(r, f1, f2)
|
|
||||||
assert_equal(f1, u1.faction)
|
|
||||||
assert_equal(f2, u2.faction)
|
|
||||||
u2.name = 'Xolgrim'
|
|
||||||
u2.group = 'Experten'
|
|
||||||
assert_equal('Experten', u2.group)
|
|
||||||
u1:add_order("HELFE " .. itoa36(f2.id) .. " GIB")
|
|
||||||
u2:add_order("GIB " .. itoa36(u1.id) .. " EINHEIT")
|
|
||||||
process_orders()
|
|
||||||
assert_equal(f1, u2.faction)
|
|
||||||
assert_nil(u2.group)
|
|
||||||
end
|
|
||||||
|
|
||||||
function test_set_faction()
|
function test_set_faction()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f1 = create_faction('elf')
|
local f1 = create_faction('elf')
|
||||||
|
|
|
@ -12,6 +12,23 @@ function setup()
|
||||||
eressea.settings.set("rules.peasants.growth.factor", "0")
|
eressea.settings.set("rules.peasants.growth.factor", "0")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_give_unit()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f1 = faction.create('elf')
|
||||||
|
local f2 = faction.create('elf')
|
||||||
|
local u1 = unit.create(f1, r)
|
||||||
|
local u2 = unit.create(f2, r)
|
||||||
|
assert_equal(f1, u1.faction)
|
||||||
|
assert_equal(f2, u2.faction)
|
||||||
|
u2.group = 'Experten'
|
||||||
|
assert_equal('Experten', u2.group)
|
||||||
|
u1:add_order("HELFE " .. itoa36(f2.id) .. " GIB")
|
||||||
|
u2:add_order("GIB " .. itoa36(u1.id) .. " EINHEIT")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(f1, u2.faction)
|
||||||
|
assert_nil(u2.group)
|
||||||
|
end
|
||||||
|
|
||||||
function test_study_auto()
|
function test_study_auto()
|
||||||
local r = region.create(0, 0, "plain")
|
local r = region.create(0, 0, "plain")
|
||||||
local f = faction.create("human")
|
local f = faction.create("human")
|
||||||
|
|
|
@ -36,6 +36,20 @@ function teardown()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function test_new_faction_cannot_give_unit()
|
||||||
|
local r = region.create(0, 0, "plain")
|
||||||
|
local f1 = faction.create('elf')
|
||||||
|
local f2 = faction.create('elf')
|
||||||
|
local u1 = unit.create(f1, r)
|
||||||
|
local u2 = unit.create(f2, r)
|
||||||
|
assert_equal(f1, u1.faction)
|
||||||
|
assert_equal(f2, u2.faction)
|
||||||
|
u1:add_order("HELFE " .. itoa36(f2.id) .. " GIB")
|
||||||
|
u2:add_order("GIB " .. itoa36(u1.id) .. " EINHEIT")
|
||||||
|
process_orders()
|
||||||
|
assert_equal(f2, u2.faction)
|
||||||
|
end
|
||||||
|
|
||||||
function test_calendar()
|
function test_calendar()
|
||||||
assert_equal("winter", get_season(396))
|
assert_equal("winter", get_season(396))
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
#include "save.h"
|
||||||
/*
|
/*
|
||||||
Copyright (c) 1998-2019, Enno Rehling <enno@eressea.de>
|
Copyright (c) 1998-2019, Enno Rehling <enno@eressea.de>
|
||||||
Katja Zedel <katze@felidae.kn-bremen.de
|
Katja Zedel <katze@felidae.kn-bremen.de
|
||||||
|
@ -1473,10 +1474,11 @@ static void fix_familiars(void (*callback)(unit *)) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void read_regions(gamedata *data) {
|
static void read_regions(gamedata *data) {
|
||||||
storage * store = data->store;
|
storage * store = data->store;
|
||||||
const struct building_type *bt_lighthouse = bt_find("lighthouse");
|
const struct building_type *bt_lighthouse = bt_find("lighthouse");
|
||||||
const struct race *rc_spell = rc_find("spell");
|
const struct race *rc_spell = rc_find("spell");
|
||||||
|
region *r;
|
||||||
int nread;
|
int nread;
|
||||||
|
|
||||||
READ_INT(store, &nread);
|
READ_INT(store, &nread);
|
||||||
|
@ -1488,7 +1490,6 @@ void read_regions(gamedata *data) {
|
||||||
unit **up;
|
unit **up;
|
||||||
building **bp;
|
building **bp;
|
||||||
ship **shp;
|
ship **shp;
|
||||||
region *r;
|
|
||||||
int p;
|
int p;
|
||||||
|
|
||||||
r = read_region(data);
|
r = read_region(data);
|
||||||
|
@ -1550,15 +1551,90 @@ void read_regions(gamedata *data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log_debug("updating area information for lighthouses.");
|
||||||
|
for (r = regions; r; r = r->next) {
|
||||||
|
if (r->flags & RF_LIGHTHOUSE) {
|
||||||
|
building *b;
|
||||||
|
for (b = r->buildings; b; b = b->next) {
|
||||||
|
if (is_lighthouse(b->type)) {
|
||||||
|
update_lighthouse(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void init_factions(int data_version)
|
||||||
|
{
|
||||||
|
log_debug("marking factions as alive.");
|
||||||
|
for (faction *f = factions; f; f = f->next) {
|
||||||
|
if (f->flags & FFL_NPC) {
|
||||||
|
f->_alive = true;
|
||||||
|
f->magiegebiet = M_GRAY;
|
||||||
|
if (f->no == 0) {
|
||||||
|
int no = 666;
|
||||||
|
while (findfaction(no))
|
||||||
|
++no;
|
||||||
|
log_warning("renum(monsters, %d)", no);
|
||||||
|
renumber_faction(f, no);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assert(f->units);
|
||||||
|
for (unit *u = f->units; u; u = u->nextF) {
|
||||||
|
if (data_version < SPELL_LEVEL_VERSION) {
|
||||||
|
struct sc_mage *mage = get_mage(u);
|
||||||
|
if (mage) {
|
||||||
|
faction *f = u->faction;
|
||||||
|
int skl = effskill(u, SK_MAGIC, NULL);
|
||||||
|
if (f->magiegebiet == M_GRAY) {
|
||||||
|
f->magiegebiet = mage_get_type(mage);
|
||||||
|
log_error("faction %s had magic=gray, fixing (%s)",
|
||||||
|
factionname(f), magic_school[f->magiegebiet]);
|
||||||
|
}
|
||||||
|
if (f->max_spelllevel < skl) {
|
||||||
|
f->max_spelllevel = skl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (u->number > 0) {
|
||||||
|
f->_alive = true;
|
||||||
|
if (data_version >= SPELL_LEVEL_VERSION) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (data_version < SPELL_LEVEL_VERSION && f->spellbook) {
|
||||||
|
spellbook_foreach(f->spellbook, cb_sb_maxlevel, f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void read_factions(gamedata * data)
|
||||||
|
{
|
||||||
|
storage * store = data->store;
|
||||||
|
int nread;
|
||||||
|
faction **fp;
|
||||||
|
READ_INT(store, &nread);
|
||||||
|
log_debug(" - Einzulesende Parteien: %d\n", nread);
|
||||||
|
fp = &factions;
|
||||||
|
while (*fp) {
|
||||||
|
fp = &(*fp)->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (--nread >= 0) {
|
||||||
|
faction *f = read_faction(data);
|
||||||
|
|
||||||
|
*fp = f;
|
||||||
|
fp = &f->next;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int read_game(gamedata *data)
|
int read_game(gamedata *data)
|
||||||
{
|
{
|
||||||
storage * store = data->store;
|
storage * store = data->store;
|
||||||
int nread;
|
|
||||||
faction *f, **fp;
|
|
||||||
region *r;
|
|
||||||
unit *u;
|
|
||||||
|
|
||||||
if (data->version >= SAVEGAMEID_VERSION) {
|
if (data->version >= SAVEGAMEID_VERSION) {
|
||||||
int gameid;
|
int gameid;
|
||||||
|
@ -1586,80 +1662,14 @@ int read_game(gamedata *data)
|
||||||
|
|
||||||
read_planes(data);
|
read_planes(data);
|
||||||
read_alliances(data);
|
read_alliances(data);
|
||||||
READ_INT(store, &nread);
|
|
||||||
log_debug(" - Einzulesende Parteien: %d\n", nread);
|
|
||||||
fp = &factions;
|
|
||||||
while (*fp) {
|
|
||||||
fp = &(*fp)->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (--nread >= 0) {
|
read_factions(data);
|
||||||
faction *f = read_faction(data);
|
|
||||||
|
|
||||||
*fp = f;
|
|
||||||
fp = &f->next;
|
|
||||||
}
|
|
||||||
*fp = 0;
|
|
||||||
|
|
||||||
/* Regionen */
|
/* Regionen */
|
||||||
|
|
||||||
read_regions(data);
|
read_regions(data);
|
||||||
read_borders(data);
|
read_borders(data);
|
||||||
|
init_factions(data->version);
|
||||||
log_debug("updating area information for lighthouses.");
|
|
||||||
for (r = regions; r; r = r->next) {
|
|
||||||
if (r->flags & RF_LIGHTHOUSE) {
|
|
||||||
building *b;
|
|
||||||
for (b = r->buildings; b; b = b->next) {
|
|
||||||
if (is_lighthouse(b->type)) {
|
|
||||||
update_lighthouse(b);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log_debug("marking factions as alive.");
|
|
||||||
for (f = factions; f; f = f->next) {
|
|
||||||
if (f->flags & FFL_NPC) {
|
|
||||||
f->_alive = true;
|
|
||||||
f->magiegebiet = M_GRAY;
|
|
||||||
if (f->no == 0) {
|
|
||||||
int no = 666;
|
|
||||||
while (findfaction(no))
|
|
||||||
++no;
|
|
||||||
log_warning("renum(monsters, %d)", no);
|
|
||||||
renumber_faction(f, no);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
assert(f->units);
|
|
||||||
for (u = f->units; u; u = u->nextF) {
|
|
||||||
if (data->version < SPELL_LEVEL_VERSION) {
|
|
||||||
struct sc_mage *mage = get_mage(u);
|
|
||||||
if (mage) {
|
|
||||||
faction *f = u->faction;
|
|
||||||
int skl = effskill(u, SK_MAGIC, NULL);
|
|
||||||
if (f->magiegebiet == M_GRAY) {
|
|
||||||
f->magiegebiet = mage_get_type(mage);
|
|
||||||
log_error("faction %s had magic=gray, fixing (%s)",
|
|
||||||
factionname(f), magic_school[f->magiegebiet]);
|
|
||||||
}
|
|
||||||
if (f->max_spelllevel < skl) {
|
|
||||||
f->max_spelllevel = skl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (u->number > 0) {
|
|
||||||
f->_alive = true;
|
|
||||||
if (data->version >= SPELL_LEVEL_VERSION) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (data->version < SPELL_LEVEL_VERSION && f->spellbook) {
|
|
||||||
spellbook_foreach(f->spellbook, cb_sb_maxlevel, f);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (data->version < FIX_CLONES_VERSION) {
|
if (data->version < FIX_CLONES_VERSION) {
|
||||||
fix_clones();
|
fix_clones();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue