forked from github/server
store calendar configuration nin JSON, not XML.
This commit is contained in:
parent
ad465f1028
commit
7806f4991f
|
@ -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,
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
<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,
|
||||
|
|
|
@ -21,8 +21,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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 = 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,7 +42,7 @@ const gamedate *get_gamedate(int turn, gamedate * gd)
|
|||
int t = turn - first_turn();
|
||||
|
||||
assert(gd);
|
||||
assert(t >= 0);
|
||||
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 */
|
||||
|
@ -40,34 +55,17 @@ 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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue