forked from github/server
Merge branch 'develop' of github.com:ennorehling/eressea into develop
This commit is contained in:
commit
a2c963beb0
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"calendar" : {
|
||||
"months" : [
|
||||
{ "storm" : 60, "season" : 2 },
|
||||
{ "storm" : 10, "season" : 2 },
|
||||
|
||||
{ "storm" : 60, "season" : 3 },
|
||||
{ "storm" : 10, "season" : 3 },
|
||||
|
||||
{ "storm" : 60, "season" : 0 },
|
||||
{ "storm" : 80, "season" : 0 },
|
||||
|
||||
{ "storm" : 50, "season" : 1 },
|
||||
{ "storm" : 30, "season" : 1 },
|
||||
{ "storm" : 60, "season" : 1 }
|
||||
],
|
||||
"weeks" : [
|
||||
"firstweek", "secondweek", "thirdweek"
|
||||
]
|
||||
}
|
||||
}
|
|
@ -1,9 +1,10 @@
|
|||
{
|
||||
"include": [
|
||||
"keywords.json",
|
||||
"prefixes.json",
|
||||
"include": [
|
||||
"keywords.json",
|
||||
"calendar.json",
|
||||
"prefixes.json",
|
||||
"e2/terrains.json"
|
||||
],
|
||||
],
|
||||
"disabled": [
|
||||
"jsreport"
|
||||
],
|
||||
|
@ -22,6 +23,7 @@
|
|||
"hunger.long": true,
|
||||
"init_spells": 0,
|
||||
"game.era": 2,
|
||||
"game.start": 184,
|
||||
"rules.reserve.twophase": true,
|
||||
"rules.give.max_men": -1,
|
||||
"rules.check_overload": false,
|
||||
|
|
|
@ -15,8 +15,6 @@
|
|||
<xi:include href="config://game/familiars.xml"/>
|
||||
<xi:include href="config://game/artrewards.xml"/>
|
||||
<xi:include href="config://game/buildings.xml"/>
|
||||
<xi:include href="config://core/calendar.xml"/>
|
||||
<calendar name="secondage" newyear="month_1" start="184"/>
|
||||
<xi:include href="config://game/equipment.xml"/>
|
||||
<xi:include href="config://game/items.xml"/>
|
||||
<xi:include href="config://game/spells.xml"/>
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"include": [
|
||||
"keywords.json",
|
||||
"calendar.json",
|
||||
"prefixes.json",
|
||||
"e3/terrains.json"
|
||||
],
|
||||
|
@ -52,6 +53,7 @@
|
|||
"study.expensivemigrants": true,
|
||||
"study.speedup": 2,
|
||||
"game.era": 3,
|
||||
"game.start": 1,
|
||||
"rules.reserve.twophase": true,
|
||||
"rules.owners.force_leave": false,
|
||||
"rules.wage.function": 2,
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
<xi:include href="config://game/ships.xml"/>
|
||||
<xi:include href="config://game/shipnames.xml"/>
|
||||
<xi:include href="config://core/calendar.xml"/>
|
||||
<xi:include href="config://game/items.xml" />
|
||||
<xi:include href="config://game/races.xml"/>
|
||||
<xi:include href="config://game/buildings.xml"/>
|
||||
|
@ -21,8 +20,6 @@
|
|||
<xi:include href="config://game/armor.xml" />
|
||||
<xi:include href="config://game/resources.xml" />
|
||||
|
||||
<calendar name="thirdage" newyear="month_1" start="1"/>
|
||||
|
||||
<xi:include href="config://default/names-undead.xml"/>
|
||||
<xi:include href="config://default/names-skeletons.xml"/>
|
||||
<xi:include href="config://default/names-zombies.xml"/>
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<calendar name="secondage" newyear="month_1">
|
||||
<season name="winter">
|
||||
<month name="month_4" storm="50" />
|
||||
<month name="month_5" storm="30" />
|
||||
<month name="month_6" storm="60" />
|
||||
</season>
|
||||
<season name="spring">
|
||||
<month name="month_7" storm="60" />
|
||||
<month name="month_8" storm="10" />
|
||||
</season>
|
||||
<season name="summer">
|
||||
<month name="month_9" storm="60" />
|
||||
<month name="month_1" storm="10" />
|
||||
</season>
|
||||
<season name="fall">
|
||||
<month name="month_2" storm="60" />
|
||||
<month name="month_3" storm="80" />
|
||||
</season>
|
||||
<week name="firstweek" />
|
||||
<week name="secondweek" />
|
||||
<week name="thirdweek" />
|
||||
</calendar>
|
|
@ -6523,13 +6523,17 @@
|
|||
<text locale="de">Sonnenfeuer</text>
|
||||
<text locale="en">sunfire</text>
|
||||
</string>
|
||||
<string name="secondage">
|
||||
<string name="age_1">
|
||||
<text locale="de">neuer Zeitrechnung</text>
|
||||
<text locale="en">of the new age</text>
|
||||
</string>
|
||||
<string name="age_2">
|
||||
<text locale="de">des zweiten Zeitalters</text>
|
||||
<text locale="en">the second age</text>
|
||||
</string>
|
||||
<string name="newage">
|
||||
<text locale="de">neuer Zeitrechnung</text>
|
||||
<text locale="en">of the new age</text>
|
||||
<string name="age_3">
|
||||
<text locale="de">des dritten Zeitalters</text>
|
||||
<text locale="en">the third age</text>
|
||||
</string>
|
||||
</namespace>
|
||||
|
||||
|
|
|
@ -38,12 +38,6 @@
|
|||
<text locale="en">adamantium plates</text>
|
||||
</string>
|
||||
|
||||
<!--Fort-Ausbaustufen -->
|
||||
<string name="calendar::thirdage">
|
||||
<text locale="de">des dritten Zeitalters</text>
|
||||
<text locale="en">the third age</text>
|
||||
</string>
|
||||
|
||||
<string name="packice">
|
||||
<text locale="de">Packeis</text>
|
||||
<text locale="en">fast ice</text>
|
||||
|
@ -87,6 +81,7 @@
|
|||
<text locale="en">repeating crossbows</text>
|
||||
</string>
|
||||
|
||||
<!--Fort-Ausbaustufen -->
|
||||
<string name="scaffolding">
|
||||
<text locale="de">Gerüst</text>
|
||||
<text locale="en">scaffolding</text>
|
||||
|
@ -103,6 +98,7 @@
|
|||
<text locale="de">Wache</text>
|
||||
<text locale="en">watch</text>
|
||||
</string>
|
||||
|
||||
<string name="market">
|
||||
<text locale="de">Marktplatz</text>
|
||||
<text locale="en">marketplace</text>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
local function is_winter(turn)
|
||||
local season = get_season(turn)
|
||||
return season == "calendar::winter"
|
||||
return season == "winter"
|
||||
end
|
||||
|
||||
local function is_spring(turn)
|
||||
local season = get_season(turn)
|
||||
return season == "calendar::spring"
|
||||
return season == "spring"
|
||||
end
|
||||
|
||||
local function freeze(r, chance)
|
||||
|
|
|
@ -38,6 +38,7 @@ function ponnuki.init()
|
|||
u.name = "Ponnuki"
|
||||
u.info = "Go, Ponnuki, Go!"
|
||||
u.race_name = "Ritter von Go"
|
||||
u.status = 5 -- FLIEHE
|
||||
print(u:show())
|
||||
end
|
||||
else
|
||||
|
|
|
@ -87,7 +87,7 @@ local self = {}
|
|||
function self.update()
|
||||
local turn = get_turn()
|
||||
local season = get_season(turn)
|
||||
if season == "calendar::winter" then
|
||||
if season == "winter" then
|
||||
eressea.log.debug("it is " .. season .. ", the christmas trees do their magic")
|
||||
local msg = message.create("xmastree_effect")
|
||||
for r in regions() do
|
||||
|
@ -103,7 +103,7 @@ function self.update()
|
|||
end
|
||||
else
|
||||
local prevseason = get_season(turn-1)
|
||||
if prevseason == "calendar::winter" then
|
||||
if prevseason == "winter" then
|
||||
-- we celebrate knut and kick out the trees.
|
||||
for r in regions() do
|
||||
if r:get_key("xm06") then
|
||||
|
|
|
@ -11,8 +11,8 @@ function setup()
|
|||
end
|
||||
|
||||
function test_calendar()
|
||||
assert_equal(get_season(1011), "calendar::winter")
|
||||
assert_equal(get_season(1012), "calendar::spring")
|
||||
assert_equal("winter", get_season(1011))
|
||||
assert_equal("spring", get_season(1012))
|
||||
end
|
||||
|
||||
function test_herbalism()
|
||||
|
|
|
@ -38,7 +38,7 @@ function teardown()
|
|||
end
|
||||
|
||||
function test_calendar()
|
||||
assert_equal(get_season(396), "calendar::winter")
|
||||
assert_equal("winter", get_season(396))
|
||||
end
|
||||
|
||||
function disable_test_bug_1738_build_castle_e3()
|
||||
|
|
|
@ -197,42 +197,42 @@ target_link_libraries(convert
|
|||
)
|
||||
|
||||
set(TESTS_SRC
|
||||
monsters.test.c
|
||||
names.test.c
|
||||
donations.test.c
|
||||
wormhole.test.c
|
||||
alchemy.test.c
|
||||
guard.test.c
|
||||
test_eressea.c
|
||||
tests.c
|
||||
alchemy.test.c
|
||||
battle.test.c
|
||||
vortex.test.c
|
||||
tests.test.c
|
||||
volcano.test.c
|
||||
reports.test.c
|
||||
calendar.test.c
|
||||
creport.test.c
|
||||
report.test.c
|
||||
summary.test.c
|
||||
travelthru.test.c
|
||||
direction.test.c
|
||||
donations.test.c
|
||||
economy.test.c
|
||||
give.test.c
|
||||
guard.test.c
|
||||
json.test.c
|
||||
keyword.test.c
|
||||
give.test.c
|
||||
laws.test.c
|
||||
lighthouse.test.c
|
||||
magic.test.c
|
||||
market.test.c
|
||||
monsters.test.c
|
||||
move.test.c
|
||||
names.test.c
|
||||
piracy.test.c
|
||||
prefix.test.c
|
||||
renumber.test.c
|
||||
reports.test.c
|
||||
report.test.c
|
||||
summary.test.c
|
||||
skill.test.c
|
||||
spells.test.c
|
||||
spy.test.c
|
||||
study.test.c
|
||||
tests.test.c
|
||||
travelthru.test.c
|
||||
upkeep.test.c
|
||||
volcano.test.c
|
||||
vortex.test.c
|
||||
wormhole.test.c
|
||||
spells/flyingship.test.c
|
||||
spells/magicresistance.test.c
|
||||
triggers/shock.test.c
|
||||
|
|
|
@ -921,7 +921,7 @@ static int init_data(const char *filename, const char *catalog)
|
|||
if (l) {
|
||||
return l;
|
||||
}
|
||||
if (turn < 0) {
|
||||
if (turn <= 0) {
|
||||
turn = first_turn();
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -1,20 +1,35 @@
|
|||
#include <platform.h>
|
||||
#include "calendar.h"
|
||||
#include "move.h" /* storms */
|
||||
|
||||
#include <kernel/config.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
int first_month = 0;
|
||||
int weeks_per_month = 4;
|
||||
int weeks_per_month = 3;
|
||||
int months_per_year = 12;
|
||||
char **seasonnames = NULL;
|
||||
const char *seasonnames[CALENDAR_SEASONS] = { "winter", "spring", "summer", "fall" };
|
||||
char **weeknames = NULL;
|
||||
char **weeknames2 = NULL;
|
||||
char **monthnames = NULL;
|
||||
int *month_season = NULL;
|
||||
char *agename = NULL;
|
||||
int seasons = 0;
|
||||
|
||||
const char *calendar_month(int index)
|
||||
{
|
||||
static char result[20];
|
||||
snprintf(result, sizeof(result), "month_%d", index + 1);
|
||||
return result;
|
||||
}
|
||||
|
||||
const char *calendar_era(void)
|
||||
{
|
||||
static char result[20];
|
||||
int era = config_get_int("game.era", 1);
|
||||
snprintf(result, sizeof(result), "age_%d", era);
|
||||
return result;
|
||||
}
|
||||
|
||||
int first_turn(void)
|
||||
{
|
||||
|
@ -27,8 +42,7 @@ const gamedate *get_gamedate(int turn, gamedate * gd)
|
|||
int t = turn - first_turn();
|
||||
|
||||
assert(gd);
|
||||
if (t < 0)
|
||||
t = turn;
|
||||
assert(t>=0);
|
||||
|
||||
gd->week = t % weeks_per_month; /* 0 - weeks_per_month-1 */
|
||||
gd->month = (t / weeks_per_month + first_month) % months_per_year; /* 0 - months_per_year-1 */
|
||||
|
@ -41,36 +55,23 @@ void calendar_cleanup(void)
|
|||
{
|
||||
int i;
|
||||
|
||||
free(agename);
|
||||
|
||||
if (seasonnames) {
|
||||
for (i = 0; i != seasons; ++i) {
|
||||
free(seasonnames[i]);
|
||||
}
|
||||
free(seasonnames);
|
||||
seasonnames = 0;
|
||||
}
|
||||
|
||||
if (monthnames) {
|
||||
for (i = 0; i != months_per_year; ++i) {
|
||||
free(monthnames[i]);
|
||||
}
|
||||
free(storms);
|
||||
storms = 0;
|
||||
free(month_season);
|
||||
month_season = 0;
|
||||
free(monthnames);
|
||||
monthnames = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i != weeks_per_month; ++i) {
|
||||
if (weeknames)
|
||||
free(weeknames[i]);
|
||||
if (weeknames2)
|
||||
free(weeknames2[i]);
|
||||
}
|
||||
|
||||
free(storms);
|
||||
storms = 0;
|
||||
free(month_season);
|
||||
month_season = 0;
|
||||
free(weeknames);
|
||||
weeknames = 0;
|
||||
free(weeknames2);
|
||||
weeknames2 = 0;
|
||||
|
||||
first_month = 0;
|
||||
weeks_per_month = 3;
|
||||
months_per_year = 12;
|
||||
}
|
||||
|
|
|
@ -11,17 +11,12 @@ extern "C" {
|
|||
SEASON_SUMMER,
|
||||
SEASON_AUTUMN
|
||||
};
|
||||
|
||||
extern char *agename;
|
||||
extern int first_month;
|
||||
|
||||
extern int seasons;
|
||||
extern char **seasonnames;
|
||||
#define CALENDAR_SEASONS 4
|
||||
extern const char *seasonnames[CALENDAR_SEASONS];
|
||||
|
||||
extern int months_per_year;
|
||||
extern char **monthnames;
|
||||
extern int *month_season;
|
||||
extern int *storms; /* in movement.c */
|
||||
extern int first_month;
|
||||
|
||||
extern char **weeknames;
|
||||
extern char **weeknames2;
|
||||
|
@ -36,6 +31,8 @@ extern "C" {
|
|||
|
||||
const gamedate *get_gamedate(int turn, gamedate * gd);
|
||||
void calendar_cleanup(void);
|
||||
const char *calendar_month(int index);
|
||||
const char *calendar_era(void);
|
||||
int first_turn(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -0,0 +1,98 @@
|
|||
#include <platform.h>
|
||||
|
||||
#include "calendar.h"
|
||||
|
||||
#include <kernel/config.h>
|
||||
|
||||
#include <CuTest.h>
|
||||
#include "tests.h"
|
||||
|
||||
static void test_calendar_config(CuTest * tc)
|
||||
{
|
||||
gamedate gd;
|
||||
|
||||
test_setup();
|
||||
get_gamedate(0, &gd);
|
||||
CuAssertIntEquals(tc, 0, first_turn());
|
||||
config_set_int("game.start", 42);
|
||||
CuAssertIntEquals(tc, 42, first_turn());
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
static void test_calendar(CuTest * tc)
|
||||
{
|
||||
gamedate gd;
|
||||
|
||||
test_setup();
|
||||
get_gamedate(0, &gd);
|
||||
CuAssertIntEquals(tc, 1, gd.year);
|
||||
CuAssertIntEquals(tc, 0, gd.season);
|
||||
CuAssertIntEquals(tc, 0, gd.month);
|
||||
CuAssertIntEquals(tc, 0, gd.week);
|
||||
|
||||
get_gamedate(1, &gd);
|
||||
CuAssertIntEquals(tc, 1, gd.year);
|
||||
CuAssertIntEquals(tc, 0, gd.season);
|
||||
CuAssertIntEquals(tc, 0, gd.month);
|
||||
CuAssertIntEquals(tc, 1, gd.week);
|
||||
|
||||
get_gamedate(weeks_per_month, &gd);
|
||||
CuAssertIntEquals(tc, 1, gd.year);
|
||||
CuAssertIntEquals(tc, 0, gd.season);
|
||||
CuAssertIntEquals(tc, 1, gd.month);
|
||||
CuAssertIntEquals(tc, 0, gd.week);
|
||||
|
||||
get_gamedate(weeks_per_month*months_per_year, &gd);
|
||||
CuAssertIntEquals(tc, 2, gd.year);
|
||||
CuAssertIntEquals(tc, 0, gd.season);
|
||||
CuAssertIntEquals(tc, 0, gd.month);
|
||||
CuAssertIntEquals(tc, 0, gd.week);
|
||||
|
||||
config_set_int("game.start", 42);
|
||||
get_gamedate(42, &gd);
|
||||
CuAssertIntEquals(tc, 1, gd.year);
|
||||
CuAssertIntEquals(tc, 0, gd.season);
|
||||
CuAssertIntEquals(tc, 0, gd.month);
|
||||
CuAssertIntEquals(tc, 0, gd.week);
|
||||
|
||||
first_month = 2;
|
||||
get_gamedate(42, &gd);
|
||||
CuAssertIntEquals(tc, 1, gd.year);
|
||||
CuAssertIntEquals(tc, 0, gd.season);
|
||||
CuAssertIntEquals(tc, 2, gd.month);
|
||||
CuAssertIntEquals(tc, 0, gd.week);
|
||||
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
static void test_calendar_season(CuTest * tc)
|
||||
{
|
||||
gamedate gd;
|
||||
|
||||
test_setup();
|
||||
month_season = calloc(months_per_year, sizeof(int));
|
||||
|
||||
get_gamedate(0, &gd);
|
||||
CuAssertIntEquals(tc, 1, gd.year);
|
||||
CuAssertIntEquals(tc, 0, gd.season);
|
||||
CuAssertIntEquals(tc, 0, gd.month);
|
||||
CuAssertIntEquals(tc, 0, gd.week);
|
||||
|
||||
month_season[1] = 1;
|
||||
get_gamedate(weeks_per_month + 1, &gd);
|
||||
CuAssertIntEquals(tc, 1, gd.year);
|
||||
CuAssertIntEquals(tc, 1, gd.season);
|
||||
CuAssertIntEquals(tc, 1, gd.month);
|
||||
CuAssertIntEquals(tc, 1, gd.week);
|
||||
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
CuSuite *get_calendar_suite(void)
|
||||
{
|
||||
CuSuite *suite = CuSuiteNew();
|
||||
SUITE_ADD_TEST(suite, test_calendar_config);
|
||||
SUITE_ADD_TEST(suite, test_calendar);
|
||||
SUITE_ADD_TEST(suite, test_calendar_season);
|
||||
return suite;
|
||||
}
|
|
@ -96,7 +96,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|||
struct settings global;
|
||||
|
||||
bool lomem = false;
|
||||
int turn = -1;
|
||||
int turn = 0;
|
||||
|
||||
const char *parameters[MAXPARAMS] = {
|
||||
"LOCALE",
|
||||
|
@ -782,11 +782,18 @@ void config_set_from(const dictionary *d, const char *valid_keys[])
|
|||
}
|
||||
}
|
||||
|
||||
void config_set(const char *key, const char *value) {
|
||||
void config_set(const char *key, const char *value)
|
||||
{
|
||||
++config_cache_key;
|
||||
set_param(&configuration, key, value);
|
||||
}
|
||||
|
||||
void config_set_int(const char *key, int value)
|
||||
{
|
||||
++config_cache_key;
|
||||
set_param(&configuration, key, itoa10(value));
|
||||
}
|
||||
|
||||
const char *config_get(const char *key) {
|
||||
return get_param(configuration, key);
|
||||
}
|
||||
|
|
|
@ -121,6 +121,7 @@ extern "C" {
|
|||
void free_params(struct param **pp);
|
||||
|
||||
void config_set(const char *key, const char *value);
|
||||
void config_set_int(const char *key, int value);
|
||||
void config_set_from(const struct _dictionary_ *d, const char *keys[]);
|
||||
const char *config_get(const char *key);
|
||||
int config_get_int(const char *key, int def);
|
||||
|
|
|
@ -33,6 +33,8 @@ without prior permission by the authors of Eressea.
|
|||
|
||||
/* game modules */
|
||||
#include "prefix.h"
|
||||
#include "move.h"
|
||||
#include "calendar.h"
|
||||
|
||||
/* util includes */
|
||||
#include <util/attrib.h>
|
||||
|
@ -684,6 +686,74 @@ static void json_direction(cJSON *json, struct locale *lang) {
|
|||
}
|
||||
}
|
||||
|
||||
static void json_calendar(cJSON *json) {
|
||||
cJSON *child;
|
||||
if (json->type != cJSON_Object) {
|
||||
log_error("calendar is not an object: %d", json->type);
|
||||
return;
|
||||
}
|
||||
for (child = json->child; child; child = child->next) {
|
||||
if (strcmp(child->string, "start") == 0) {
|
||||
config_set_int("game.start", child->valueint);
|
||||
}
|
||||
else if (strcmp(child->string, "weeks") == 0) {
|
||||
cJSON *entry;
|
||||
int i;
|
||||
if (child->type != cJSON_Array) {
|
||||
log_error("calendar.weeks is not an array: %d", json->type);
|
||||
return;
|
||||
}
|
||||
weeks_per_month = cJSON_GetArraySize(child);
|
||||
free(weeknames);
|
||||
weeknames = malloc(sizeof(char *) * weeks_per_month);
|
||||
for (i = 0, entry = child->child; entry; entry = entry->next, ++i) {
|
||||
if (entry->type == cJSON_String) {
|
||||
weeknames[i] = strdup(entry->valuestring);
|
||||
}
|
||||
else {
|
||||
log_error("calendar.weeks[%d] is not a string: %d", i, json->type);
|
||||
free(weeknames);
|
||||
weeknames = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
assert(i == weeks_per_month);
|
||||
free(weeknames2);
|
||||
weeknames2 = malloc(sizeof(char *) * weeks_per_month);
|
||||
for (i = 0; i != weeks_per_month; ++i) {
|
||||
weeknames2[i] = malloc(strlen(weeknames[i]) + 3);
|
||||
sprintf(weeknames2[i], "%s_d", weeknames[i]);
|
||||
}
|
||||
}
|
||||
else if (strcmp(child->string, "months") == 0) {
|
||||
cJSON *jmonth;
|
||||
int i;
|
||||
if (child->type != cJSON_Array) {
|
||||
log_error("calendar.seasons is not an array: %d", json->type);
|
||||
return;
|
||||
}
|
||||
free(month_season);
|
||||
month_season = NULL;
|
||||
free(storms);
|
||||
months_per_year = cJSON_GetArraySize(child);
|
||||
storms = malloc(sizeof(int) * months_per_year);
|
||||
month_season = malloc(sizeof(int) * months_per_year);
|
||||
for (i = 0, jmonth = child->child; jmonth; jmonth = jmonth->next, ++i) {
|
||||
if (jmonth->type == cJSON_Object) {
|
||||
storms[i] = cJSON_GetObjectItem(jmonth, "storm")->valueint;
|
||||
month_season[i] = cJSON_GetObjectItem(jmonth, "season")->valueint;
|
||||
}
|
||||
else {
|
||||
log_error("calendar.months[%d] is not an object: %d", i, json->type);
|
||||
free(storms);
|
||||
storms = NULL;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void json_directions(cJSON *json) {
|
||||
cJSON *child;
|
||||
if (json->type != cJSON_Object) {
|
||||
|
@ -890,6 +960,9 @@ void json_config(cJSON *json) {
|
|||
else if (strcmp(child->string, "strings") == 0) {
|
||||
json_strings(child);
|
||||
}
|
||||
else if (strcmp(child->string, "calendar") == 0) {
|
||||
json_calendar(child);
|
||||
}
|
||||
else if (strcmp(child->string, "directions") == 0) {
|
||||
json_directions(child);
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@
|
|||
#include "order.h"
|
||||
#include "terrain.h"
|
||||
|
||||
#include "move.h"
|
||||
#include "calendar.h"
|
||||
#include "prefix.h"
|
||||
|
||||
#include "util/language.h"
|
||||
|
@ -75,7 +77,7 @@ static void test_settings(CuTest * tc)
|
|||
"\"float\" : 1.5 }}";
|
||||
cJSON *json = cJSON_Parse(data);
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
config_set("game.id", "42"); /* should not be replaced */
|
||||
config_set("game.name", "Eressea"); /* should not be replaced */
|
||||
json_config(json);
|
||||
|
@ -99,7 +101,7 @@ static void test_prefixes(CuTest * tc)
|
|||
"]}";
|
||||
cJSON *json = cJSON_Parse(data);
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
json_config(json);
|
||||
CuAssertPtrNotNull(tc, race_prefixes);
|
||||
CuAssertStrEquals(tc, "snow", race_prefixes[0]);
|
||||
|
@ -119,7 +121,7 @@ static void test_disable(CuTest * tc)
|
|||
"]}";
|
||||
cJSON *json = cJSON_Parse(data);
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
CuAssertTrue(tc, skill_enabled(SK_ALCHEMY));
|
||||
CuAssertTrue(tc, !keyword_disabled(K_BANNER));
|
||||
CuAssertTrue(tc, !keyword_disabled(K_PAY));
|
||||
|
@ -135,6 +137,31 @@ static void test_disable(CuTest * tc)
|
|||
test_cleanup();
|
||||
}
|
||||
|
||||
static void test_calendar(CuTest * tc)
|
||||
{
|
||||
const char * data = "{\"calendar\": { "
|
||||
"\"weeks\" : [ \"one\", \"two\", \"three\" ],"
|
||||
"\"months\" : ["
|
||||
"{ \"storm\" : 99, \"season\" : 1 },"
|
||||
"{ \"storm\" : 22, \"season\" : 2 }"
|
||||
"]"
|
||||
"}}";
|
||||
cJSON *json = cJSON_Parse(data);
|
||||
|
||||
test_setup();
|
||||
json_config(json);
|
||||
CuAssertPtrNotNull(tc, storms);
|
||||
CuAssertIntEquals(tc, 2, months_per_year);
|
||||
CuAssertIntEquals(tc, 3, weeks_per_month);
|
||||
CuAssertIntEquals(tc, 99, storms[0]);
|
||||
CuAssertIntEquals(tc, 22, storms[1]);
|
||||
CuAssertPtrNotNull(tc, month_season);
|
||||
CuAssertIntEquals(tc, 1, month_season[0]);
|
||||
CuAssertIntEquals(tc, 2, month_season[1]);
|
||||
cJSON_Delete(json);
|
||||
test_cleanup();
|
||||
}
|
||||
|
||||
static void test_races(CuTest * tc)
|
||||
{
|
||||
const char * data = "{\"races\": { \"orc\" : { "
|
||||
|
@ -155,7 +182,7 @@ static void test_races(CuTest * tc)
|
|||
cJSON *json = cJSON_Parse(data);
|
||||
const struct race *rc;
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertPtrEquals(tc, 0, races);
|
||||
|
@ -189,7 +216,7 @@ static void test_findrace(CuTest *tc) {
|
|||
const race *rc;
|
||||
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
lang = get_or_create_locale("de");
|
||||
CuAssertPtrEquals(tc, 0, (void *)findrace("Zwerg", lang));
|
||||
|
||||
|
@ -211,7 +238,7 @@ static void test_items(CuTest * tc)
|
|||
cJSON *json = cJSON_Parse(data);
|
||||
const item_type * itype;
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertPtrEquals(tc, 0, it_find("axe"));
|
||||
|
@ -249,7 +276,7 @@ static void test_ships(CuTest * tc)
|
|||
const ship_type *st;
|
||||
const terrain_type *ter;
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertPtrEquals(tc, 0, shiptypes);
|
||||
|
@ -286,7 +313,7 @@ static void test_castles(CuTest *tc) {
|
|||
cJSON *json = cJSON_Parse(data);
|
||||
const building_type *bt;
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertPtrEquals(tc, 0, buildingtypes);
|
||||
|
@ -311,7 +338,7 @@ static void test_spells(CuTest * tc)
|
|||
cJSON *json = cJSON_Parse(data);
|
||||
const spell *sp;
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertPtrEquals(tc, 0, find_spell("fireball"));
|
||||
|
||||
|
@ -350,7 +377,7 @@ static void test_buildings(CuTest * tc)
|
|||
cJSON *json = cJSON_Parse(building_data);
|
||||
const building_type *bt;
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertPtrEquals(tc, 0, buildingtypes);
|
||||
|
@ -400,7 +427,7 @@ static void test_buildings_default(CuTest * tc)
|
|||
const building_type *bt;
|
||||
building_type clone;
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
|
||||
bt = bt_get_or_create("house");
|
||||
clone = *bt;
|
||||
|
@ -425,7 +452,7 @@ static void test_ships_default(CuTest * tc)
|
|||
const ship_type *st;
|
||||
ship_type clone;
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
|
||||
st = st_get_or_create("hodor");
|
||||
clone = *st;
|
||||
|
@ -446,7 +473,7 @@ static void test_configs(CuTest * tc)
|
|||
FILE *F;
|
||||
cJSON *json = cJSON_Parse(data);
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
|
||||
F = fopen("test.json", "w");
|
||||
fwrite(building_data, 1, strlen(building_data), F);
|
||||
|
@ -475,7 +502,7 @@ static void test_terrains(CuTest * tc)
|
|||
|
||||
cJSON *json = cJSON_Parse(data);
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertPtrEquals(tc, 0, (void *)get_terrain("plain"));
|
||||
|
||||
|
@ -511,7 +538,7 @@ static void test_directions(CuTest * tc)
|
|||
|
||||
cJSON *json = cJSON_Parse(data);
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
lang = get_or_create_locale("de");
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertIntEquals(tc, NODIRECTION, get_direction("ost", lang));
|
||||
|
@ -533,7 +560,7 @@ static void test_skills(CuTest * tc)
|
|||
|
||||
cJSON *json = cJSON_Parse(data);
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
lang = get_or_create_locale("de");
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertIntEquals(tc, NOSKILL, get_skill("potato", lang));
|
||||
|
@ -558,7 +585,7 @@ static void test_keywords(CuTest * tc)
|
|||
|
||||
cJSON *json = cJSON_Parse(data);
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
lang = get_or_create_locale("de");
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
CuAssertIntEquals(tc, NOKEYWORD, get_keyword("potato", lang));
|
||||
|
@ -583,7 +610,7 @@ static void test_strings(CuTest * tc)
|
|||
cJSON *json = cJSON_Parse(data);
|
||||
CuAssertPtrNotNull(tc, json);
|
||||
|
||||
test_cleanup();
|
||||
test_setup();
|
||||
lang = get_or_create_locale("de");
|
||||
CuAssertPtrNotNull(tc, lang);
|
||||
CuAssertPtrEquals(tc, NULL, (void *)LOC(lang, "move"));
|
||||
|
@ -640,6 +667,7 @@ CuSuite *get_jsonconf_suite(void)
|
|||
SUITE_ADD_TEST(suite, test_prefixes);
|
||||
SUITE_ADD_TEST(suite, test_disable);
|
||||
SUITE_ADD_TEST(suite, test_infinitive_from_config);
|
||||
SUITE_ADD_TEST(suite, test_calendar);
|
||||
return suite;
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ without prior permission by the authors of Eressea.
|
|||
#include "spellbook.h"
|
||||
#include "calendar.h"
|
||||
#include "prefix.h"
|
||||
#include "move.h"
|
||||
|
||||
#include "vortex.h"
|
||||
|
||||
|
@ -398,6 +399,7 @@ static int parse_buildings(xmlDocPtr doc)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
static int parse_calendar(xmlDocPtr doc)
|
||||
{
|
||||
xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
|
||||
|
@ -523,7 +525,7 @@ static int parse_calendar(xmlDocPtr doc)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
static int parse_ships(xmlDocPtr doc)
|
||||
{
|
||||
xmlXPathContextPtr xpath = xmlXPathNewContext(doc);
|
||||
|
@ -1869,7 +1871,6 @@ static int parse_strings(xmlDocPtr doc)
|
|||
void register_xmlreader(void)
|
||||
{
|
||||
xml_register_callback(parse_races);
|
||||
xml_register_callback(parse_calendar);
|
||||
xml_register_callback(parse_resources);
|
||||
|
||||
xml_register_callback(parse_buildings); /* requires resources */
|
||||
|
|
|
@ -4183,6 +4183,7 @@ static void reset_game(void)
|
|||
|
||||
void turn_begin(void)
|
||||
{
|
||||
assert(turn >= 0);
|
||||
++turn;
|
||||
reset_game();
|
||||
}
|
||||
|
|
|
@ -748,10 +748,6 @@ void plan_monsters(faction * f)
|
|||
produceexp(u, SK_PERCEPTION, u->number);
|
||||
}
|
||||
|
||||
if (u->status > ST_BEHIND) {
|
||||
setstatus(u, ST_FIGHT);
|
||||
/* all monsters fight */
|
||||
}
|
||||
if (attacking && (!r->land || is_guard(u))) {
|
||||
monster_attacks(u, true, false);
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ extern "C" {
|
|||
struct order;
|
||||
|
||||
extern struct attrib_type at_shiptrail;
|
||||
extern int *storms;
|
||||
|
||||
/* die Zahlen sind genau äquivalent zu den race Flags */
|
||||
#define MV_CANNOTMOVE (1<<5)
|
||||
|
|
|
@ -123,13 +123,15 @@ static char *gamedate_season(const struct locale *lang)
|
|||
static char buf[256]; /* FIXME: static return value */
|
||||
gamedate gd;
|
||||
|
||||
assert(weeknames);
|
||||
|
||||
get_gamedate(turn, &gd);
|
||||
|
||||
sprintf(buf, (const char *)LOC(lang, "nr_calendar_season"),
|
||||
LOC(lang, weeknames[gd.week]),
|
||||
LOC(lang, monthnames[gd.month]),
|
||||
LOC(lang, mkname("calendar", weeknames[gd.week])),
|
||||
LOC(lang, mkname("calendar", calendar_month(gd.month))),
|
||||
gd.year,
|
||||
agename ? LOC(lang, agename) : "", LOC(lang, seasonnames[gd.season]));
|
||||
LOC(lang, mkname("calendar", calendar_era())), LOC(lang, mkname("calendar", seasonnames[gd.season])));
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
|
|
@ -151,13 +151,12 @@ static char *gamedate2(const struct locale *lang)
|
|||
if (weeknames2) {
|
||||
week = weeknames2[gd.week];
|
||||
}
|
||||
if (monthnames) {
|
||||
month = monthnames[gd.month];
|
||||
}
|
||||
month = calendar_month(gd.month);
|
||||
sprintf(buf, "in %s des Monats %s im Jahre %d %s.",
|
||||
LOC(lang, week),
|
||||
LOC(lang, month),
|
||||
gd.year, agename ? LOC(lang, agename) : "");
|
||||
LOC(lang, mkname("calendar", week)),
|
||||
LOC(lang, mkname("calendar", month)),
|
||||
gd.year,
|
||||
LOC(lang, mkname("calendar", calendar_era())));
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
|
|
@ -116,35 +116,36 @@ int RunAllTests(int argc, char *argv[])
|
|||
ADD_SUITE(ally);
|
||||
ADD_SUITE(messages);
|
||||
/* gamecode */
|
||||
ADD_SUITE(guard);
|
||||
ADD_SUITE(report);
|
||||
ADD_SUITE(creport);
|
||||
ADD_SUITE(summary);
|
||||
ADD_SUITE(names);
|
||||
ADD_SUITE(battle);
|
||||
ADD_SUITE(volcano);
|
||||
ADD_SUITE(calendar);
|
||||
ADD_SUITE(creport);
|
||||
ADD_SUITE(donations);
|
||||
ADD_SUITE(travelthru);
|
||||
ADD_SUITE(economy);
|
||||
ADD_SUITE(flyingship);
|
||||
ADD_SUITE(give);
|
||||
ADD_SUITE(guard);
|
||||
ADD_SUITE(key);
|
||||
ADD_SUITE(laws);
|
||||
ADD_SUITE(lighthouse);
|
||||
ADD_SUITE(market);
|
||||
ADD_SUITE(monsters);
|
||||
ADD_SUITE(move);
|
||||
ADD_SUITE(names);
|
||||
ADD_SUITE(otherfaction);
|
||||
ADD_SUITE(piracy);
|
||||
ADD_SUITE(prefix);
|
||||
ADD_SUITE(renumber);
|
||||
ADD_SUITE(key);
|
||||
ADD_SUITE(report);
|
||||
ADD_SUITE(shock);
|
||||
ADD_SUITE(spy);
|
||||
ADD_SUITE(stealth);
|
||||
ADD_SUITE(otherfaction);
|
||||
ADD_SUITE(study);
|
||||
ADD_SUITE(summary);
|
||||
ADD_SUITE(travelthru);
|
||||
ADD_SUITE(upkeep);
|
||||
ADD_SUITE(volcano);
|
||||
ADD_SUITE(vortex);
|
||||
ADD_SUITE(wormhole);
|
||||
ADD_SUITE(spy);
|
||||
ADD_SUITE(study);
|
||||
ADD_SUITE(shock);
|
||||
|
||||
if (suites) {
|
||||
CuSuite *summary = CuSuiteNew();
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include "keyword.h"
|
||||
#include "prefix.h"
|
||||
#include "reports.h"
|
||||
#include "calendar.h"
|
||||
|
||||
#include <kernel/config.h>
|
||||
#include <kernel/alliance.h>
|
||||
|
@ -192,7 +193,7 @@ void test_log_stderr(int flags) {
|
|||
|
||||
static void test_reset(void) {
|
||||
int i;
|
||||
turn = 0;
|
||||
turn = 1;
|
||||
default_locale = 0;
|
||||
|
||||
if (errno) {
|
||||
|
@ -206,6 +207,7 @@ static void test_reset(void) {
|
|||
free_resources();
|
||||
free_config();
|
||||
default_locale = 0;
|
||||
calendar_cleanup();
|
||||
close_orders();
|
||||
free_locales();
|
||||
free_spells();
|
||||
|
|
Loading…
Reference in New Issue