From 19718d2ff261626360e884e9578f031ad01ce1ff Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sat, 5 Jan 2002 16:14:38 +0000 Subject: [PATCH] =?UTF-8?q?Erster=20Code=20f=C3=BCr=20die=20Dungeons=20Neu?= =?UTF-8?q?er=20XML=20Parser=20Reparatur=20einiger=20fehlerhafter=20XML-Da?= =?UTF-8?q?teien?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/gamecode/creport.c | 27 +- src/common/kernel/eressea.c | 33 +- src/common/kernel/item.c | 244 ++--- src/common/kernel/message.c | 241 ++--- src/common/kernel/message.h | 1 + src/common/kernel/names.c | 67 +- src/common/kernel/plane.h | 2 +- src/common/kernel/race.c | 307 +++--- src/common/kernel/race.h | 2 - src/common/modules/arena.c | 4 +- src/common/modules/dungeon.c | 134 +++ src/common/modules/dungeon.h | 18 + src/common/util/event.c | 1 - src/common/util/xml.c | 184 +++- src/common/util/xml.h | 16 +- src/eressea/korrektur.c | 2 +- src/eressea/main.c | 2 + src/res/de/messages.xml | 324 +++--- src/res/de/strings.txt | 676 ------------ src/res/de/strings.xml | 1928 +++++++++++++++++++++++++++++++++ src/res/en/messages.xml | 2 +- src/res/en/strings.txt | 671 ------------ src/res/en/strings.xml | 1925 +++++++++++++++++++++++++++++++- src/res/eressea.xml | 6 +- src/res/vinyambar-classic.xml | 4 +- src/res/vinyambar.xml | 4 +- 26 files changed, 4786 insertions(+), 2039 deletions(-) create mode 100644 src/common/modules/dungeon.c create mode 100644 src/common/modules/dungeon.h diff --git a/src/common/gamecode/creport.c b/src/common/gamecode/creport.c index a33504753..9c4611087 100644 --- a/src/common/gamecode/creport.c +++ b/src/common/gamecode/creport.c @@ -76,7 +76,7 @@ extern const char *spelldata[]; extern int quiet; /* globals */ -#define C_REPORT_VERSION 61 +#define C_REPORT_VERSION 62 #define TAG_LOCALE "de" #ifdef TAG_LOCALE @@ -1191,20 +1191,25 @@ report_computer(FILE * F, faction * f, const seen_region * seen, /* describe both passed and inhabited regions */ show_active_spells(r); { - boolean see = false; + boolean seeunits = false, seeships = false; const attrib * ru; - /* show units pulled throuth region */ + /* show units pulled through region */ for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) { unit * u = (unit*)ru->data.v; if (cansee_durchgezogen(f, r, u, 0) && r!=u->region) { - if (u->ship && !fval(u, FL_OWNER)) - continue; - if (!see) fprintf(F, "DURCHREISE\n"); - see = true; - if (u->ship) - fprintf(F, "\"%s\"\n", shipname(u->ship)); - else - fprintf(F, "\"%s\"\n", unitname(u)); + if (!u->ship || !fval(u, FL_OWNER)) continue; + if (!seeships) fprintf(F, "DURCHSCHIFFUNG\n"); + seeships = true; + fprintf(F, "\"%s\"\n", shipname(u->ship)); + } + } + for (ru = a_find(r->attribs, &at_travelunit); ru; ru = ru->nexttype) { + unit * u = (unit*)ru->data.v; + if (cansee_durchgezogen(f, r, u, 0) && r!=u->region) { + if (u->ship) continue; + if (!seeunits) fprintf(F, "DURCHREISE\n"); + seeunits = true; + fprintf(F, "\"%s\"\n", unitname(u)); } } } diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c index 59a592a40..ea3de2fe7 100644 --- a/src/common/kernel/eressea.c +++ b/src/common/kernel/eressea.c @@ -2085,16 +2085,16 @@ const char * locales[] = { NULL }; -static int read_xml(const char * filename); +static int read_xml(const char * filename, struct xml_stack *stack); static int -parse_tagbegin(struct xml_stack *stack, void *data) +parse_tagbegin(struct xml_stack *stack) { const xml_tag * tag = stack->tag; if (strcmp(tag->name, "include")==0) { const char * filename = xml_value(tag, "file"); if (filename) { - return read_xml(filename); + return read_xml(filename, stack); } else { log_printf("required tag 'file' missing from include"); return XML_USERERROR; @@ -2112,7 +2112,6 @@ parse_tagbegin(struct xml_stack *stack, void *data) if (maxunits!=0) { global.maxunits = maxunits; } - } else if (strcmp(tag->name, "game")==0) { } else if (strcmp(tag->name, "order")==0) { const char * name = xml_value(tag, "name"); if (xml_bvalue(tag, "disable")) { @@ -2124,27 +2123,16 @@ parse_tagbegin(struct xml_stack *stack, void *data) } } } - } else if (strcmp(tag->name, "resource")==0) { - xml_readresource(stack->stream, stack); - } else if (strcmp(tag->name, "races")==0) { - read_races(stack->stream, stack); - } else if (strcmp(tag->name, "strings")==0) { - return read_messages(stack->stream, stack); - } else if (strcmp(tag->name, "messages")==0) { - return read_messages(stack->stream, stack); } return XML_OK; } -static xml_callbacks msgcallback = { - NULL, - parse_tagbegin, - NULL, - NULL +static xml_callbacks xml_eressea = { + parse_tagbegin, NULL, NULL }; static int -read_xml(const char * filename) +read_xml(const char * filename, xml_stack * stack) { char zText[80]; FILE * F; @@ -2156,7 +2144,7 @@ read_xml(const char * filename) return XML_USERERROR; } - i = xml_parse(F, &msgcallback, NULL, NULL); + i = xml_read(F, stack); fclose(F); return i; } @@ -2164,8 +2152,12 @@ read_xml(const char * filename) int init_data(const char * filename) { - int l = read_xml(filename); + int l; + + xml_register(&xml_eressea, "eressea", 0); + xml_register(&xml_eressea, "eressea include", XML_CB_IGNORE); + l = read_xml(filename, NULL); if (l) return l; /* old stuff, for removal: */ @@ -2336,6 +2328,7 @@ kernel_init(void) skill_init(); attrib_init(); translation_init(); + init_messages(); if (!turn) turn = lastturn(); if (turn == 0) diff --git a/src/common/kernel/item.c b/src/common/kernel/item.c index e5c9f4e83..e08eac00f 100644 --- a/src/common/kernel/item.c +++ b/src/common/kernel/item.c @@ -2035,6 +2035,126 @@ static const char * names[] = { "unit", "unit_p" }; +#include + +typedef struct xml_state { + struct item_type * itype; + struct resource_type * rtype; + struct weapon_type * wtype; + int wmods; +} xml_state; + +static int +tagend(struct xml_stack * stack) +{ + const xml_tag * tag = stack->tag; + if (strcmp(tag->name, "resource")==0) { + free(stack->state); + } + return XML_OK; +} + +static int +tagbegin(struct xml_stack * stack) +{ + const xml_tag * tag = stack->tag; + if (strcmp(tag->name, "resource")==0) { + xml_state * state = stack->state = calloc(sizeof(xml_state), 1); + + char *names[2], *appearance[2]; + const char *tmp; + unsigned int flags = RTF_NONE; + if (xml_bvalue(tag, "pooled")) flags |= RTF_POOLED; + tmp = xml_value(tag, "name"); + assert(tmp || "resource needs a name"); + names[0] = strdup(tmp); + names[1] = strcat(strcpy((char*)malloc(strlen(tmp)+3), tmp), "_p"); + tmp = xml_value(tag, "appearance"); + if (tmp!=NULL) { + appearance[0] = strdup(tmp); + appearance[1] = strcat(strcpy((char*)malloc(strlen(tmp)+3), tmp), "_p"); + state->rtype = new_resourcetype((const char**)names, (const char**)appearance, flags); + free(appearance[0]); + free(appearance[1]); + } else { + state->rtype = new_resourcetype((const char**)names, NULL, flags); + } + free(names[0]); + free(names[1]); + } else { + xml_state * state = stack->state = stack->next->state; + if (strcmp(tag->name, "item")==0) { + unsigned int flags = ITF_NONE; + int weight = xml_ivalue(tag, "weight"); + int capacity = xml_ivalue(tag, "capacity"); + + assert(state->itype==NULL); + if (xml_bvalue(tag, "cursed")) flags |= ITF_CURSED; + if (xml_bvalue(tag, "notlost")) flags |= ITF_NOTLOST; + if (xml_bvalue(tag, "big")) flags |= ITF_BIG; + if (xml_bvalue(tag, "animal")) flags |= ITF_ANIMAL; + state->rtype->flags |= RTF_ITEM; + state->itype = new_itemtype(state->rtype, flags, weight, capacity); + } else if (strcmp(tag->name, "weapon")==0) { + skill_t skill = sk_find(xml_value(tag, "skill")); + int minskill = xml_ivalue(tag, "minskill"); + int offmod = xml_ivalue(tag, "offmod"); + int defmod = xml_ivalue(tag, "defmod"); + int reload = xml_ivalue(tag, "reload"); + double magres = xml_fvalue(tag, "magres"); + unsigned int flags = WTF_NONE; + + assert(strcmp(stack->next->tag->name, "item")==0); + assert(state->itype!=NULL); + state->itype->flags |= ITF_WEAPON; + state->wtype = new_weapontype(state->itype, + flags, magres, NULL, offmod, defmod, reload, skill, minskill); + } else if (strcmp(tag->name, "damage")==0) { + /* damage of a weapon */ + int pos = 0; + const char * type = xml_value(tag, "type"); + + assert(strcmp(stack->next->tag->name, "weapon")==0); + if (strcmp(type, "default")!=0) pos = 1; + if (state->wtype->damage[pos]) free(state->wtype->damage[pos]); + state->wtype->damage[pos] = strdup(xml_value(tag, "value")); + } else if (strcmp(tag->name, "modifier")==0) { + int value = xml_ivalue(tag, "value"); + assert(strcmp(stack->next->tag->name, "weapon")==0); + if (value!=0) { + int flags = 0; + weapon_mod * mods = calloc(sizeof(weapon_mod), state->wmods+2); + + assert(state->wtype); + if (xml_bvalue(tag, "walking")) flags|=WMF_WALKING; + if (xml_bvalue(tag, "riding")) flags|=WMF_RIDING; + if (xml_bvalue(tag, "against_walking")) flags|=WMF_AGAINST_WALKING; + if (xml_bvalue(tag, "against_riding")) flags|=WMF_AGAINST_RIDING; + if (xml_bvalue(tag, "offensive")) flags|=WMF_OFFENSIVE; + if (xml_bvalue(tag, "defensive")) flags|=WMF_DEFENSIVE; + if (xml_bvalue(tag, "damage")) flags|=WMF_DAMAGE; + if (xml_bvalue(tag, "skill")) flags|=WMF_SKILL; + if (xml_bvalue(tag, "missile_target")) flags|=WMF_MISSILE_TARGET; + if (state->wmods) { + memcpy(mods, state->wtype->modifiers, sizeof(weapon_mod)*state->wmods); + free(state->wtype->modifiers); + } + mods[state->wmods].value = value; + mods[state->wmods].flags = flags; + state->wtype->modifiers = mods; + ++state->wmods; + } + } else { + return XML_USERERROR; + } + } + return XML_OK; +} + +static xml_callbacks xml_resource = { + tagbegin, tagend, NULL +}; + void init_resources(void) { @@ -2416,6 +2536,9 @@ init_items(void) register_function((pf_generic)use_mistletoe, "usemistletoe"); register_function((pf_generic)give_horses, "givehorses"); + + /* xml reader */ + xml_register(&xml_resource, "eressea resource", 0); } int @@ -2593,124 +2716,3 @@ xml_writeitems(const char * file) fclose(stream); return 0; } - -#include - -typedef struct xml_state { - struct item_type * itype; - struct resource_type * rtype; - struct weapon_type * wtype; - int wmods; -} xml_state; - -static int -tagend(struct xml_stack * stack, void * data) -{ - unused(stack); - unused(data); - return XML_OK; -} - -static int -tagbegin(struct xml_stack * stack, void * data) -{ - xml_state * state = (xml_state*)data; - const xml_tag * tag = stack->tag; - if (strcmp(tag->name, "resource")==0) { - char *names[2], *appearance[2]; - const char *tmp; - unsigned int flags = RTF_NONE; - if (xml_bvalue(tag, "pooled")) flags |= RTF_POOLED; - memset(state, 0, sizeof(xml_state)); - tmp = xml_value(tag, "name"); - assert(tmp || "resource needs a name"); - names[0] = strdup(tmp); - names[1] = strcat(strcpy((char*)malloc(strlen(tmp)+3), tmp), "_p"); - tmp = xml_value(tag, "appearance"); - if (tmp!=NULL) { - appearance[0] = strdup(tmp); - appearance[1] = strcat(strcpy((char*)malloc(strlen(tmp)+3), tmp), "_p"); - state->rtype = new_resourcetype((const char**)names, (const char**)appearance, flags); - free(appearance[0]); - free(appearance[1]); - } else { - state->rtype = new_resourcetype((const char**)names, NULL, flags); - } - free(names[0]); - free(names[1]); - } else if (strcmp(tag->name, "item")==0) { - unsigned int flags = ITF_NONE; - int weight = xml_ivalue(tag, "weight"); - int capacity = xml_ivalue(tag, "capacity"); - assert(state->itype==NULL); - if (xml_bvalue(tag, "cursed")) flags |= ITF_CURSED; - if (xml_bvalue(tag, "notlost")) flags |= ITF_NOTLOST; - if (xml_bvalue(tag, "big")) flags |= ITF_BIG; - if (xml_bvalue(tag, "animal")) flags |= ITF_ANIMAL; - state->rtype->flags |= RTF_ITEM; - state->itype = new_itemtype(state->rtype, flags, weight, capacity); - } else if (strcmp(tag->name, "weapon")==0) { - skill_t skill = sk_find(xml_value(tag, "skill")); - int minskill = xml_ivalue(tag, "minskill"); - int offmod = xml_ivalue(tag, "offmod"); - int defmod = xml_ivalue(tag, "defmod"); - int reload = xml_ivalue(tag, "reload"); - double magres = xml_fvalue(tag, "magres"); - unsigned int flags = WTF_NONE; - - assert(strcmp(stack->next->tag->name, "item")==0); - assert(state->itype!=NULL); - state->itype->flags |= ITF_WEAPON; - state->wtype = new_weapontype(state->itype, - flags, magres, NULL, offmod, defmod, reload, skill, minskill); - } else if (strcmp(tag->name, "damage")==0) { - /* damage of a weapon */ - int pos = 0; - const char * type = xml_value(tag, "type"); - - assert(strcmp(stack->next->tag->name, "weapon")==0); - if (strcmp(type, "default")!=0) pos = 1; - if (state->wtype->damage[pos]) free(state->wtype->damage[pos]); - state->wtype->damage[pos] = strdup(xml_value(tag, "value")); - } else if (strcmp(tag->name, "modifier")==0) { - int value = xml_ivalue(tag, "value"); - assert(strcmp(stack->next->tag->name, "weapon")==0); - if (value!=0) { - int flags = 0; - weapon_mod * mods = calloc(sizeof(weapon_mod), state->wmods+2); - - assert(state->wtype); - if (xml_bvalue(tag, "walking")) flags|=WMF_WALKING; - if (xml_bvalue(tag, "riding")) flags|=WMF_RIDING; - if (xml_bvalue(tag, "against_walking")) flags|=WMF_AGAINST_WALKING; - if (xml_bvalue(tag, "against_riding")) flags|=WMF_AGAINST_RIDING; - if (xml_bvalue(tag, "offensive")) flags|=WMF_OFFENSIVE; - if (xml_bvalue(tag, "defensive")) flags|=WMF_DEFENSIVE; - if (xml_bvalue(tag, "damage")) flags|=WMF_DAMAGE; - if (xml_bvalue(tag, "skill")) flags|=WMF_SKILL; - if (xml_bvalue(tag, "missile_target")) flags|=WMF_MISSILE_TARGET; - if (state->wmods) { - memcpy(mods, state->wtype->modifiers, sizeof(weapon_mod)*state->wmods); - free(state->wtype->modifiers); - } - mods[state->wmods].value = value; - mods[state->wmods].flags = flags; - state->wtype->modifiers = mods; - ++state->wmods; - } - } else { - return XML_USERERROR; - } - return XML_OK; -} - -static xml_callbacks xml_resource = { - NULL, tagbegin, tagend, NULL -}; - -int -xml_readresource(FILE * F, struct xml_stack * stack) -{ - xml_state state; - return xml_parse(F, &xml_resource, &state, stack); -} diff --git a/src/common/kernel/message.c b/src/common/kernel/message.c index bbc5cad10..55c5bef3f 100644 --- a/src/common/kernel/message.c +++ b/src/common/kernel/message.c @@ -138,10 +138,10 @@ typedef struct xml_state { } xml_state; static int -parse_plaintext(struct xml_stack *stack, const char *str, void *data) +parse_plaintext(struct xml_stack *stack, const char *str) { - xml_state * state = (xml_state*)data; if (stack) { + xml_state * state = (xml_state*)stack->state; const xml_tag * tag = stack->tag; if (strcmp(tag->name, "text")==0) { const xml_tag * tagparent = stack->next->tag; @@ -156,160 +156,140 @@ parse_plaintext(struct xml_stack *stack, const char *str, void *data) } static int -parse_tagbegin(struct xml_stack *stack, void *data) +parse_tagbegin(struct xml_stack *stack) { - xml_state * state = (xml_state*)data; const xml_tag * tag = stack->tag; - if (strcmp(tag->name, "messages")==0) { - memset(state, 0, sizeof(xml_state)); + if (strcmp(tag->name, "messages")==0 || strcmp(tag->name, "strings")==0) { + stack->state = calloc(sizeof(xml_state), 1); return XML_OK; - } else if (strcmp(tag->name, "string")==0) { - const char * tname = xml_value(tag, "name"); - if (tname) state->mtname = tname; - else { - state->mtname = NULL; - return XML_USERERROR; - } - } else if (strcasecmp(tag->name, "locale")==0) { - if (state->mtname!=NULL) { - const char * zName = xml_value(tag, "name"); - if (zName) { - state->lang = find_locale(zName); - if (state->lang==NULL) state->lang = make_locale(zName); + } else { + xml_state * state = (xml_state*)stack->state; + if (strcasecmp(tag->name, "locale")==0) { + if (state->mtname!=NULL) { + const char * zName = xml_value(tag, "name"); + if (zName) { + state->lang = find_locale(zName); + if (state->lang==NULL) state->lang = make_locale(zName); + } + } + } else if (strcmp(tag->name, "namespace")==0) { + const char * tname = xml_value(tag, "name"); + if (tname) state->nspc = tname; + else state->nspc = NULL; + } else if (strcmp(tag->name, "string")==0) { + const char * tname = xml_value(tag, "name"); + if (tname) state->mtname = tname; + else { + state->mtname = NULL; + return XML_USERERROR; } - } - } else if (strcmp(tag->name, "namespace")==0) { - const char * tname = xml_value(tag, "name"); - if (tname) state->nspc = tname; - else state->nspc = NULL; - } else if (strcmp(tag->name, "string")==0) { - const char * tname = xml_value(tag, "name"); - if (tname) state->nspc = tname; - else state->nspc = NULL; - } else if (strcmp(tag->name, "message")==0) { - const char * tname = xml_value(tag, "name"); - const char * tsection = xml_value(tag, "section"); - const char * tlevel = xml_value(tag, "level"); - state->argc = 0; - if (tname) state->mtname = tname; - else { - state->mtname = NULL; - return XML_USERERROR; - } - if (!tsection) { - /* by default, put into events */ - tsection = "events"; - } - state->nrsection = tsection; - mc_add(tsection); - if (tlevel) state->nrlevel = atoi(tlevel); - } else if (strcasecmp(tag->name, "text")==0) { - const char * zLocale = xml_value(tag, "locale"); - if (zLocale) { - state->lang = find_locale(zLocale); - if (state->lang==NULL) { - state->lang = make_locale(zLocale); + } else if (strcmp(tag->name, "message")==0) { + const char * tname = xml_value(tag, "name"); + const char * tsection = xml_value(tag, "section"); + const char * tlevel = xml_value(tag, "level"); + state->argc = 0; + if (tname) state->mtname = tname; + else { + state->mtname = NULL; + return XML_USERERROR; } - } - } else if (strcasecmp(tag->name, "arg")==0) { - if (state->mtname!=NULL) { - const char * zName = xml_value(tag, "name"); - const char * zType = xml_value(tag, "type"); - if (zName && zType) { - char zBuffer[128]; - sprintf(zBuffer, "%s:%s", zName, zType); - state->argv[state->argc++] = strdup(zBuffer); + if (!tsection) { + /* by default, put into events */ + tsection = "events"; + } + state->nrsection = tsection; + mc_add(tsection); + if (tlevel) state->nrlevel = atoi(tlevel); + } else if (strcasecmp(tag->name, "text")==0) { + const char * zLocale = xml_value(tag, "locale"); + if (zLocale) { + state->lang = find_locale(zLocale); + if (state->lang==NULL) { + state->lang = make_locale(zLocale); + } + } + } else if (strcasecmp(tag->name, "arg")==0) { + if (state->mtname!=NULL) { + const char * zName = xml_value(tag, "name"); + const char * zType = xml_value(tag, "type"); + if (zName && zType) { + char zBuffer[128]; + sprintf(zBuffer, "%s:%s", zName, zType); + state->argv[state->argc++] = strdup(zBuffer); + } + } else { + return XML_USERERROR; + } + } else if (strcasecmp(tag->name, "nr")==0) { + if (state->mtname!=NULL) { + const char * zSection = xml_value(tag, "section"); + const char * zLevel = xml_value(tag, "level"); + if (zSection) { + state->nrsection = zSection; + mc_add(zSection); + } + if (zLevel) state->nrlevel = atoi(zLevel); } } else { return XML_USERERROR; } - } else if (strcasecmp(tag->name, "nr")==0) { - if (state->mtname!=NULL) { - const char * zSection = xml_value(tag, "section"); - const char * zLevel = xml_value(tag, "level"); - if (zSection) { - state->nrsection = zSection; - mc_add(zSection); - } - if (zLevel) state->nrlevel = atoi(zLevel); - } - } else { - return XML_USERERROR; } return XML_OK; } static int -parse_tagend(struct xml_stack *stack, void *data) +parse_tagend(struct xml_stack *stack) { - xml_state * state = (xml_state*)data; const xml_tag * tag = stack->tag; - if (strcasecmp(tag->name, "type")==0) { - const struct message_type * mtype; + if (strcmp(tag->name, "messages")==0 || strcmp(tag->name, "strings")==0) { + free(stack->state); + } else { + xml_state * state = (xml_state*)stack->state; + if (strcasecmp(tag->name, "type")==0) { + const struct message_type * mtype; - state->argv[state->argc]=0; + state->argv[state->argc]=0; - /* add the messagetype */ - mtype = mt_find(state->mtname); - if (!mtype) mtype = mt_register(mt_new(state->mtname, (const char**)state->argv)); - - while (state->argc--) { - free(state->argv[state->argc]); - } - if (state->nrtext) { - free(state->nrtext); - state->nrtext = 0; - } - state->mtype = mtype; - } else if (strcasecmp(tag->name, "locale")==0) { - state->lang = NULL; - } else if (strcasecmp(tag->name, "namespace")==0) { - state->nspc = NULL; - } else if (strcasecmp(tag->name, "text")==0) { - const xml_tag * tagparent = stack->next->tag; - if (strcmp(tagparent->name, "string")!=0) { - /* todo: bad test */ - if (state->argc) { - nrt_register(state->mtype, state->lang, state->nrtext, state->nrlevel, state->nrsection); - crt_register(state->mtype); + /* add the messagetype */ + mtype = mt_find(state->mtname); + if (!mtype) mtype = mt_register(mt_new(state->mtname, (const char**)state->argv)); + + while (state->argc--) { + free(state->argv[state->argc]); } - else locale_setstring(state->lang, state->mtname, state->nrtext); + if (state->nrtext) { + free(state->nrtext); + state->nrtext = 0; + } + state->mtype = mtype; + } else if (strcasecmp(tag->name, "locale")==0) { + state->lang = NULL; + } else if (strcasecmp(tag->name, "namespace")==0) { + state->nspc = NULL; + } else if (strcasecmp(tag->name, "text")==0) { + const xml_tag * tagparent = stack->next->tag; + if (strcmp(tagparent->name, "string")!=0) { + /* todo: bad test */ + if (state->argc) { + nrt_register(state->mtype, state->lang, state->nrtext, state->nrlevel, state->nrsection); + crt_register(state->mtype); + } + else locale_setstring(state->lang, state->mtname, state->nrtext); + } + } else if (strcasecmp(tag->name, "message")==0) { + state->nrsection = NULL; } - } else if (strcasecmp(tag->name, "message")==0) { - state->nrsection = NULL; } return XML_OK; } -static xml_callbacks msgcallback = { - parse_plaintext, +static xml_callbacks xml_messages = { parse_tagbegin, parse_tagend, - NULL + parse_plaintext }; -int -read_messages(FILE * F, struct xml_stack * stack) -{ - xml_state state; - memset(&state, 0, sizeof(state)); - return xml_parse(F, &msgcallback, &state, stack); -} - -int -load_messages(const char * filename) -{ - FILE * F = fopen(filename, "rt+"); - if (F) { - int i = read_messages(F, NULL); - fclose(F); - return i; - } - return -1; -} - - static void arg_set(void * args[], const message_type * mtype, const char * buffer, void * v) { @@ -693,3 +673,10 @@ read_msglevels(struct warning ** w, FILE * F) fscanf(F, "%s", buf); } } + +void +init_messages(void) +{ + xml_register(&xml_messages, "eressea messages", 0); + xml_register(&xml_messages, "eressea strings", 0); +} diff --git a/src/common/kernel/message.h b/src/common/kernel/message.h index 03c8d5656..26cc28ae1 100644 --- a/src/common/kernel/message.h +++ b/src/common/kernel/message.h @@ -56,6 +56,7 @@ extern struct message * add_message(struct message_list** pm, struct message * m extern void free_messages(struct message_list * m); extern int load_messages(const char *); extern int read_messages(FILE * F, struct xml_stack * stack); +extern void init_messages(void); /* message sections */ extern struct messageclass * msgclasses; diff --git a/src/common/kernel/names.c b/src/common/kernel/names.c index d4c2fc816..7a24f8223 100644 --- a/src/common/kernel/names.c +++ b/src/common/kernel/names.c @@ -517,37 +517,34 @@ const char * drachen_name(const unit *u) { static char name[NAMESIZE + 1]; - region *r = u->region; - int anzahl = u->number; - char *t; + int rnd = rand() % DTITEL; + const char *t = dtitel[0][rnd]; + int anzahl = 1; - switch (rterrain(r)) { - case T_PLAIN: - t = strdup(dtitel[1][rand() % DTITEL]); - break; - case T_MOUNTAIN: - t = strdup(dtitel[2][rand() % DTITEL]); - break; - case T_DESERT: - t = strdup(dtitel[3][rand() % DTITEL]); - break; - case T_SWAMP: - t = strdup(dtitel[4][rand() % DTITEL]); - break; - case T_GLACIER: - t = strdup(dtitel[5][rand() % DTITEL]); - break; - default: - t = strdup(dtitel[0][rand() % DTITEL]); + if (u) { + region *r = u->region; + anzahl = u->number; + switch (rterrain(r)) { + case T_PLAIN: + t = dtitel[1][rnd]; + break; + case T_MOUNTAIN: + t = dtitel[2][rnd]; + break; + case T_DESERT: + t = dtitel[3][rnd]; + break; + case T_SWAMP: + t = dtitel[4][rnd]; + break; + case T_GLACIER: + t = dtitel[5][rnd]; + break; + } } if (anzahl > 1) { - t[0] = (char) toupper(t[0]); - t[1] = 'i'; /* in jedem Fall "Die" */ - t[2] = 'e'; - strcpy(name, t); - strcat(name, "n von "); - strcat(name, rname(r, NULL)); + sprintf(name, "Die %sn von %s", t+4, rname(u->region, NULL)); } else { char *n = malloc(32*sizeof(char)); @@ -555,24 +552,20 @@ drachen_name(const unit *u) strcat(n, silbe2[rand() % SIL2]); strcat(n, silbe3[rand() % SIL3]); if (rand() % 5 > 2) { - strcpy(name, n); /* "Name, der Titel" */ - strcat(name, ", "); - strcat(name, t); + sprintf(name, "%s, %s", n, t); /* "Name, der Titel" */ } else { - t[0] = (char) toupper(t[0]); strcpy(name, t); /* "Der Titel Name" */ + name[0] = (char) toupper(name[0]); strcat(name, " "); strcat(name, n); } - if (rand() % 6 > 3) { + if (u && (rand() % 3 == 0)) { strcat(name, " von "); - strcat(name, rname(r, NULL)); + strcat(name, rname(u->region, NULL)); } } - free(t); - - return (name); + return name; } /* Dracoide */ @@ -716,7 +709,7 @@ name_unit(unit *u) { char name[16]; - if(u->race->generate_name){ + if (u->race->generate_name) { set_string(&u->name, (u->race->generate_name(u))); } else { sprintf(name, "Nummer %s", itoa36(u->no)); diff --git a/src/common/kernel/plane.h b/src/common/kernel/plane.h index 9eaa7dada..3b568e82d 100644 --- a/src/common/kernel/plane.h +++ b/src/common/kernel/plane.h @@ -31,7 +31,7 @@ #define PFL_NOMAGIC 128 /* Zaubern ist unmöglich */ #define PFL_NOSTEALTH 256 /* Tarnung außer Betrieb */ #define PFL_NOTEACH 512 /* Lehre außer Betrieb */ -#define PFL_NOBUILD 1024 /* Lehre außer Betrieb */ +#define PFL_NOBUILD 1024 /* Bauen außer Betrieb */ #define PFL_NOFEED 2048 /* Kein Unterhalt nötig TODO */ #define PFL_FRIENDLY 4096 /* everyone is your ally */ #define PFL_NOORCGROWTH 8192 /* orcs don't grow */ diff --git a/src/common/kernel/race.c b/src/common/kernel/race.c index 31891efb6..63e86f367 100644 --- a/src/common/kernel/race.c +++ b/src/common/kernel/race.c @@ -606,168 +606,181 @@ typedef struct xml_state { } xml_state; static int -tagbegin(struct xml_stack * stack, void * data) +tagbegin(struct xml_stack * stack) { - xml_state * state = (xml_state*)data; const xml_tag * tag = stack->tag; if (strcmp(tag->name, "races")==0) { - memset(state, 0, sizeof(xml_state)); - } else if (strcmp(tag->name, "race")==0) { - const char * zName = xml_value(tag, "name"); - race * rc; - - state->nextattack = 0; - state->nextfamiliar = 0; + stack->state = calloc(sizeof(xml_state), 1); + } else { + xml_state * state = (xml_state*)stack->state; + if (strcmp(tag->name, "race")==0) { + const char * zName = xml_value(tag, "name"); + race * rc; + + state->nextattack = 0; + state->nextfamiliar = 0; - if (zName) { - rc = rc_find(zName); - if (rc==NULL) { - rc = rc_add(rc_new(zName)); + if (zName) { + rc = rc_find(zName); + if (rc==NULL) { + rc = rc_add(rc_new(zName)); + } + } else { + log_error(("missing required tag 'name'\n")); + return XML_USERERROR; } - } else { - log_error(("missing required tag 'name'\n")); - return XML_USERERROR; - } - rc->magres = xml_fvalue(tag, "magres"); - rc->maxaura = xml_fvalue(tag, "maxaura"); - rc->regaura = xml_fvalue(tag, "regaura"); - rc->recruitcost = xml_ivalue(tag, "recruitcost"); - rc->maintenance = xml_ivalue(tag, "maintenance"); - rc->weight = xml_ivalue(tag, "weight"); - rc->speed = xml_fvalue(tag, "speed"); - rc->hitpoints = xml_ivalue(tag, "hp"); - rc->def_damage = strdup(xml_value(tag, "damage")); - rc->armor = (char)xml_ivalue(tag, "ac"); + rc->magres = xml_fvalue(tag, "magres"); + rc->maxaura = xml_fvalue(tag, "maxaura"); + rc->regaura = xml_fvalue(tag, "regaura"); + rc->recruitcost = xml_ivalue(tag, "recruitcost"); + rc->maintenance = xml_ivalue(tag, "maintenance"); + rc->weight = xml_ivalue(tag, "weight"); + rc->speed = xml_fvalue(tag, "speed"); + rc->hitpoints = xml_ivalue(tag, "hp"); + rc->def_damage = strdup(xml_value(tag, "damage")); + rc->armor = (char)xml_ivalue(tag, "ac"); - rc->at_default = (char)xml_ivalue(tag, "unarmedattack"); - rc->df_default = (char)xml_ivalue(tag, "unarmeddefense"); - rc->at_bonus = (char)xml_ivalue(tag, "attackmodifier"); - rc->df_bonus = (char)xml_ivalue(tag, "defensemodifier"); + rc->at_default = (char)xml_ivalue(tag, "unarmedattack"); + rc->df_default = (char)xml_ivalue(tag, "unarmeddefense"); + rc->at_bonus = (char)xml_ivalue(tag, "attackmodifier"); + rc->df_bonus = (char)xml_ivalue(tag, "defensemodifier"); - if (xml_bvalue(tag, "playerrace")) rc->flags |= RCF_PLAYERRACE; - if (xml_bvalue(tag, "scarepeasants")) rc->flags |= RCF_SCAREPEASANTS; - if (xml_bvalue(tag, "cannotmove")) rc->flags |= RCF_CANNOTMOVE; - if (xml_bvalue(tag, "fly")) rc->flags |= RCF_FLY; - if (xml_bvalue(tag, "swim")) rc->flags |= RCF_SWIM; - if (xml_bvalue(tag, "walk")) rc->flags |= RCF_WALK; - if (xml_bvalue(tag, "nolearn")) rc->flags |= RCF_NOLEARN; - if (xml_bvalue(tag, "noteach")) rc->flags |= RCF_NOTEACH; - if (xml_bvalue(tag, "horse")) rc->flags |= RCF_HORSE; - if (xml_bvalue(tag, "desert")) rc->flags |= RCF_DESERT; - if (xml_bvalue(tag, "absorbpeasants")) rc->flags |= RCF_ABSORBPEASANTS; - if (xml_bvalue(tag, "noheal")) rc->flags |= RCF_NOHEAL; - if (xml_bvalue(tag, "noweapons")) rc->flags |= RCF_NOWEAPONS; - if (xml_bvalue(tag, "shapeshift")) rc->flags |= RCF_SHAPESHIFT; - if (xml_bvalue(tag, "shapeshiftany")) rc->flags |= RCF_SHAPESHIFTANY; - if (xml_bvalue(tag, "illusionary")) rc->flags |= RCF_ILLUSIONARY; - if (xml_bvalue(tag, "undead")) rc->flags |= RCF_UNDEAD; + if (xml_bvalue(tag, "playerrace")) rc->flags |= RCF_PLAYERRACE; + if (xml_bvalue(tag, "scarepeasants")) rc->flags |= RCF_SCAREPEASANTS; + if (xml_bvalue(tag, "cannotmove")) rc->flags |= RCF_CANNOTMOVE; + if (xml_bvalue(tag, "fly")) rc->flags |= RCF_FLY; + if (xml_bvalue(tag, "swim")) rc->flags |= RCF_SWIM; + if (xml_bvalue(tag, "walk")) rc->flags |= RCF_WALK; + if (xml_bvalue(tag, "nolearn")) rc->flags |= RCF_NOLEARN; + if (xml_bvalue(tag, "noteach")) rc->flags |= RCF_NOTEACH; + if (xml_bvalue(tag, "horse")) rc->flags |= RCF_HORSE; + if (xml_bvalue(tag, "desert")) rc->flags |= RCF_DESERT; + if (xml_bvalue(tag, "absorbpeasants")) rc->flags |= RCF_ABSORBPEASANTS; + if (xml_bvalue(tag, "noheal")) rc->flags |= RCF_NOHEAL; + if (xml_bvalue(tag, "noweapons")) rc->flags |= RCF_NOWEAPONS; + if (xml_bvalue(tag, "shapeshift")) rc->flags |= RCF_SHAPESHIFT; + if (xml_bvalue(tag, "shapeshiftany")) rc->flags |= RCF_SHAPESHIFTANY; + if (xml_bvalue(tag, "illusionary")) rc->flags |= RCF_ILLUSIONARY; + if (xml_bvalue(tag, "undead")) rc->flags |= RCF_UNDEAD; - if (xml_bvalue(tag, "nogive")) rc->ec_flags |= NOGIVE; - if (xml_bvalue(tag, "giveitem")) rc->ec_flags |= GIVEITEM; - if (xml_bvalue(tag, "giveperson")) rc->ec_flags |= GIVEPERSON; - if (xml_bvalue(tag, "giveunit")) rc->ec_flags |= GIVEUNIT; - if (xml_bvalue(tag, "getitem")) rc->ec_flags |= GETITEM; - if (xml_bvalue(tag, "canguard")) rc->ec_flags |= CANGUARD; - if (xml_bvalue(tag, "recruithorses")) rc->ec_flags |= ECF_REC_HORSES; - if (xml_bvalue(tag, "recruitethereal")) rc->ec_flags |= ECF_REC_ETHEREAL; - if (xml_bvalue(tag, "recruitunlimited")) rc->ec_flags |= ECF_REC_UNLIMITED; + if (xml_bvalue(tag, "nogive")) rc->ec_flags |= NOGIVE; + if (xml_bvalue(tag, "giveitem")) rc->ec_flags |= GIVEITEM; + if (xml_bvalue(tag, "giveperson")) rc->ec_flags |= GIVEPERSON; + if (xml_bvalue(tag, "giveunit")) rc->ec_flags |= GIVEUNIT; + if (xml_bvalue(tag, "getitem")) rc->ec_flags |= GETITEM; + if (xml_bvalue(tag, "canguard")) rc->ec_flags |= CANGUARD; + if (xml_bvalue(tag, "recruithorses")) rc->ec_flags |= ECF_REC_HORSES; + if (xml_bvalue(tag, "recruitethereal")) rc->ec_flags |= ECF_REC_ETHEREAL; + if (xml_bvalue(tag, "recruitunlimited")) rc->ec_flags |= ECF_REC_UNLIMITED; - if (xml_bvalue(tag, "equipment")) rc->battle_flags |= BF_EQUIPMENT; - if (xml_bvalue(tag, "noblock")) rc->battle_flags |= BF_NOBLOCK; - if (xml_bvalue(tag, "invinciblenonmagic")) rc->battle_flags |= BF_INV_NONMAGIC; - if (xml_bvalue(tag, "resistbash")) rc->battle_flags |= BF_RES_BASH; - if (xml_bvalue(tag, "resistcut")) rc->battle_flags |= BF_RES_CUT; - if (xml_bvalue(tag, "resistpierce")) rc->battle_flags |= BF_RES_PIERCE; + if (xml_bvalue(tag, "equipment")) rc->battle_flags |= BF_EQUIPMENT; + if (xml_bvalue(tag, "noblock")) rc->battle_flags |= BF_NOBLOCK; + if (xml_bvalue(tag, "invinciblenonmagic")) rc->battle_flags |= BF_INV_NONMAGIC; + if (xml_bvalue(tag, "resistbash")) rc->battle_flags |= BF_RES_BASH; + if (xml_bvalue(tag, "resistcut")) rc->battle_flags |= BF_RES_CUT; + if (xml_bvalue(tag, "resistpierce")) rc->battle_flags |= BF_RES_PIERCE; - state->race = rc; - } else if (strcmp(tag->name, "ai")==0) { - race * rc = state->race; - rc->splitsize = xml_ivalue(tag, "splitsize"); + state->race = rc; + } else if (strcmp(tag->name, "ai")==0) { + race * rc = state->race; + rc->splitsize = xml_ivalue(tag, "splitsize"); - if (xml_bvalue(tag, "killpeasants")) rc->flags |= RCF_KILLPEASANTS; - if (xml_bvalue(tag, "attackrandom")) rc->flags |= RCF_ATTACKRANDOM; - if (xml_bvalue(tag, "moverandom")) rc->flags |= RCF_MOVERANDOM; - if (xml_bvalue(tag, "learn")) rc->flags |= RCF_LEARN; + if (xml_bvalue(tag, "killpeasants")) rc->flags |= RCF_KILLPEASANTS; + if (xml_bvalue(tag, "attackrandom")) rc->flags |= RCF_ATTACKRANDOM; + if (xml_bvalue(tag, "moverandom")) rc->flags |= RCF_MOVERANDOM; + if (xml_bvalue(tag, "learn")) rc->flags |= RCF_LEARN; - } else if (strcmp(tag->name, "skill")==0) { - race * rc = state->race; - const char * name = xml_value(tag, "name"); - if (name) { - int mod = xml_ivalue(tag, "modifier"); - if (mod!=0) { - skill_t sk = sk_find(name); - if (sk!=NOSKILL) { - rc->bonus[sk] = (char)mod; + } else if (strcmp(tag->name, "skill")==0) { + race * rc = state->race; + const char * name = xml_value(tag, "name"); + if (name) { + int mod = xml_ivalue(tag, "modifier"); + if (mod!=0) { + skill_t sk = sk_find(name); + if (sk!=NOSKILL) { + rc->bonus[sk] = (char)mod; + } else { + log_error(("unknown skill '%s'\n", name)); + } + } + } else { + log_error(("missing required tag 'name'\n")); + return XML_USERERROR; + } + } else if (strcmp(tag->name, "attack")==0) { + race * rc = state->race; + const char * damage = xml_value(tag, "damage"); + struct att * a = &rc->attack[state->nextattack++]; + if (damage) { + a->data.dice = strdup(damage); + } else { + a->data.iparam = xml_ivalue(tag, "spell"); + } + a->type = xml_ivalue(tag, "type"); + a->flags = xml_ivalue(tag, "flags"); + } else if (strcmp(tag->name, "function")==0) { + race * rc = state->race; + const char * name = xml_value(tag, "name"); + const char * value = xml_value(tag, "value"); + if (name && value) { + pf_generic fun = get_function(value); + if (fun==NULL) { + log_error(("unknown function value '%s=%s' for race %s\n", name, value, rc->_name[0])); } else { - log_error(("unknown skill '%s'\n", name)); + if (strcmp(name, "name")==0) { + rc->generate_name = (const char* (*)(const struct unit*))fun; + } else if (strcmp(name, "age")==0) { + rc->age = (void(*)(struct unit*))fun; + } else if (strcmp(name, "move")==0) { + rc->move_allowed = (boolean(*)(const struct region *, const struct region *))fun; + } else if (strcmp(name, "itemdrop")==0) { + rc->itemdrop = (struct item *(*)(const struct race *, int))fun; + } else if (strcmp(name, "initfamiliar")==0) { + rc->init_familiar = (void(*)(struct unit *))fun; + } else { + log_error(("unknown function type '%s=%s' for race %s\n", name, value, rc->_name[0])); + } } } - } else { - log_error(("missing required tag 'name'\n")); - return XML_USERERROR; - } - } else if (strcmp(tag->name, "attack")==0) { - race * rc = state->race; - const char * damage = xml_value(tag, "damage"); - struct att * a = &rc->attack[state->nextattack++]; - if (damage) { - a->data.dice = strdup(damage); - } else { - a->data.iparam = xml_ivalue(tag, "spell"); - } - a->type = xml_ivalue(tag, "type"); - a->flags = xml_ivalue(tag, "flags"); - } else if (strcmp(tag->name, "function")==0) { - race * rc = state->race; - const char * name = xml_value(tag, "name"); - const char * value = xml_value(tag, "value"); - if (name && value) { - pf_generic fun = get_function(value); - if (fun==NULL) { - log_error(("unknown function value '%s=%s' for race %s\n", name, value, rc->_name[0])); - } else { - if (strcmp(name, "name")==0) { - rc->generate_name = (const char* (*)(const struct unit*))fun; - } else if (strcmp(name, "age")==0) { - rc->age = (void(*)(struct unit*))fun; - } else if (strcmp(name, "move")==0) { - rc->move_allowed = (boolean(*)(const struct region *, const struct region *))fun; - } else if (strcmp(name, "itemdrop")==0) { - rc->itemdrop = (struct item *(*)(const struct race *, int))fun; - } else if (strcmp(name, "initfamiliar")==0) { - rc->init_familiar = (void(*)(struct unit *))fun; - } else { - log_error(("unknown function type '%s=%s' for race %s\n", name, value, rc->_name[0])); + } else if (strcmp(tag->name, "familiar")==0) { + race * rc = state->race; + const char * zRace = xml_value(tag, "race"); + if (zRace && rc) { + race * frc = rc_find(zRace); + if (frc == NULL) { + frc = rc_add(rc_new(zRace)); + } + if (xml_bvalue(tag, "default")) { + rc->familiars[0] = frc; + } else { + rc->familiars[++state->nextfamiliar] = frc; } - } - } - } else if (strcmp(tag->name, "familiar")==0) { - race * rc = state->race; - const char * zRace = xml_value(tag, "race"); - if (zRace && rc) { - race * frc = rc_find(zRace); - if (frc == NULL) { - frc = rc_add(rc_new(zRace)); - } - if (xml_bvalue(tag, "default")) { - rc->familiars[0] = frc; } else { - rc->familiars[++state->nextfamiliar] = frc; + log_error(("missing required tag 'race'\n")); + return XML_USERERROR; } - } else { - log_error(("missing required tag 'race'\n")); - return XML_USERERROR; } } return XML_OK; } static int -tagend(struct xml_stack * stack, void * data) +tagend(struct xml_stack * stack) { - xml_state * state = (xml_state*)data; const xml_tag * tag = stack->tag; - if (strcmp(tag->name, "race")==0) { + if (strcmp(tag->name, "races")==0) { + int i; + for (i=0;i!=MAXRACES;++i) { + race * rc = rc_find(oldracenames[i]); + if (rc) { + new_race[i] = rc; + if (rc == new_race[RC_TROLL]) { + a_add(&rc->attribs, make_skillmod(NOSKILL, SMF_RIDING, NULL, 0.0, -1)); + } + } + } + } else if (strcmp(tag->name, "race")==0) { + xml_state * state = (xml_state*)stack->state; state->race = NULL; state->nextfamiliar = 0; state->nextattack = 0; @@ -776,27 +789,9 @@ tagend(struct xml_stack * stack, void * data) } static xml_callbacks xml_races = { - NULL, tagbegin, tagend, NULL + tagbegin, tagend, NULL }; -int -read_races(FILE * F, struct xml_stack * stack) -{ - xml_state state; - int i, err = xml_parse(F, &xml_races, &state, stack); - - for (i=0;i!=MAXRACES;++i) { - race * rc = rc_find(oldracenames[i]); - if (rc) { - new_race[i] = rc; - if (rc == new_race[RC_TROLL]) { - a_add(&rc->attribs, make_skillmod(NOSKILL, SMF_RIDING, NULL, 0.0, -1)); - } - } - } - return err; -} - void init_races(void) { @@ -831,4 +826,6 @@ init_races(void) /* itemdrop functions */ register_function((pf_generic)dragon_drops, "dragondrops"); sprintf(zBuffer, "%s/races.xml", resourcepath()); + + xml_register(&xml_races, "eressea races", 0); } diff --git a/src/common/kernel/race.h b/src/common/kernel/race.h index 0fad8f136..89a8362c8 100644 --- a/src/common/kernel/race.h +++ b/src/common/kernel/race.h @@ -158,6 +158,4 @@ extern const struct race_syn race_synonyms[]; extern void write_race_reference(const struct race * rc, FILE * F); extern void read_race_reference(const struct race ** rp, FILE * F); -extern int read_races(FILE * F, struct xml_stack * stack); - #endif diff --git a/src/common/modules/arena.c b/src/common/modules/arena.c index 670e16ddb..47e758fbc 100644 --- a/src/common/modules/arena.c +++ b/src/common/modules/arena.c @@ -199,8 +199,8 @@ use_wand_of_tears(unit * user, const struct item_type * itype, const char * cmd) static void init_wand_of_tears(void) { - const char * names[2] = {"wand_of_tears", "wands_of_tears"}; - const char * appearances[2] = {"wand", "wands"}; + const char * names[2] = {"wand_of_tears", "wand_of_tears_p"}; + const char * appearances[2] = {"wand", "wand_p"}; item_type * itype = it_find(names[0]); int i; diff --git a/src/common/modules/dungeon.c b/src/common/modules/dungeon.c new file mode 100644 index 000000000..5249aa5dc --- /dev/null +++ b/src/common/modules/dungeon.c @@ -0,0 +1,134 @@ +/* vi: set ts=2: + +-------------------+ Christian Schlittchen + | | Enno Rehling + | Eressea PBEM host | Katja Zedel + | (c) 1998 - 2001 | Henning Peters + | | Ingo Wilken + +-------------------+ Stefan Reich + + This program may not be used, modified or distributed + without prior permission by the authors of Eressea. +*/ + +#include +#include +#include "dungeon.h" +#include "gmcmd.h" + +#include +#include + +/* kernel includes */ +#include +#include +#include +#include + +/* util includes */ +#include + +typedef struct treasure { + const struct item_type * itype; + int amount; + struct treasure * next; +} treasure; + +typedef struct monster { + const struct race * race; + double chance; + int maxunits; + int avgsize; + struct treasure * treasures; + struct monster * next; + struct itemtype_list * weapons; +} monster; + +typedef struct dungeon { + int level; + int radius; + int size; + double connect; + struct monster * boss; + struct monster * monsters; +} dungeon; + +static dungeon * dungeonstyles; + +void +make_dungeon(int radius, int level, plane **pp, region **rp) +{ + int nb[2][3][2] = { + { { -1, 0 }, { 0, 1 }, { 1, -1 } }, + { { 1, 0 }, { -1, 1 }, { 0, -1 } } + }; + const struct race * bossrace = rc_find("wyrm"); + char name[128]; + int size = level*level; + double connect = 0.50; + unsigned int flags = PFL_NORECRUITS; + int n = 0; + plane * p; + region *r, *center; + region * rnext; + + sprintf(name, "Die Höhlen von %s", bossrace->generate_name(NULL)); + p = gm_addplane(radius, flags, name); + + center = findregion(p->minx+(p->maxx-p->minx)/2, p->miny+(p->maxy-p->miny)/2); + assert(center); + terraform(center, T_HELL); + rnext = r = center; + while (size>0) { + int d, o = rand() % 3; + for (d=0;d!=3;++d) { + int index = (d+o) % 3; + region * rn = findregion(r->x+nb[n][index][0], r->y+nb[n][index][1]); + assert(r->terrain==T_HELL); + if (rn) { + switch (rn->terrain) { + case T_OCEAN: + if (rand() % 100 < connect*100) { + terraform(rn, T_HELL); + --size; + rnext = rn; + } + else terraform(rn, T_FIREWALL); + break; + case T_HELL: + rnext = rn; + break; + } + if (size == 0) break; + } + rn = findregion(r->x+nb[(n+1)%2][index][0], r->y+nb[(n+1)%2][index][1]); + if (rn && rn->terrain==T_OCEAN) terraform(rn, T_FIREWALL); + } + if (size==0) break; + assert(r!=rnext); + r = rnext; + n = (n+1) % 2; + } + + if (pp) *pp=p; + if (rp) *rp=center; +} + +void +make_dungeongate(region * source, region * target, int level) +{ + building *bsource, *btarget; + + bsource = new_building(bt_find("castle"), source, default_locale); + set_string(&bsource->name, "Pforte zur Hölle"); + bsource->size = 50; + add_trigger(&bsource->attribs, "timer", trigger_gate(bsource, target)); + add_trigger(&bsource->attribs, "create", trigger_unguard(bsource)); + fset(bsource, BLD_UNGUARDED); + + btarget = new_building(bt_find("castle"), target, default_locale); + set_string(&btarget->name, "Pforte zur Außenwelt"); + btarget->size = 50; + add_trigger(&btarget->attribs, "timer", trigger_gate(btarget, source)); + add_trigger(&btarget->attribs, "create", trigger_unguard(btarget)); + fset(btarget, BLD_UNGUARDED); +} diff --git a/src/common/modules/dungeon.h b/src/common/modules/dungeon.h new file mode 100644 index 000000000..178b5acf2 --- /dev/null +++ b/src/common/modules/dungeon.h @@ -0,0 +1,18 @@ +/* vi: set ts=2: + +-------------------+ Christian Schlittchen + | | Enno Rehling + | Eressea PBEM host | Katja Zedel + | (c) 1998 - 2001 | Henning Peters + | | Ingo Wilken + +-------------------+ Stefan Reich + + This program may not be used, modified or distributed + without prior permission by the authors of Eressea. +*/ + +struct region; +struct plane; +struct building; + +extern void make_dungeon(int radius, int level, struct plane **, struct region **); +extern void make_dungeongate(struct region * source, struct region * target, int level); diff --git a/src/common/util/event.c b/src/common/util/event.c index df02628b6..fc2d5abcf 100644 --- a/src/common/util/event.c +++ b/src/common/util/event.c @@ -17,7 +17,6 @@ /* util includes */ #include "attrib.h" -#include "resolve.h" /* libc includes */ #include diff --git a/src/common/util/xml.c b/src/common/util/xml.c index 2379b694d..4d8fcc19a 100644 --- a/src/common/util/xml.c +++ b/src/common/util/xml.c @@ -22,15 +22,25 @@ #include #include +typedef struct xml_hierarchy { + const char * name; + unsigned int flags; + struct xml_callbacks * functions; + struct xml_hierarchy * next; + struct xml_hierarchy * children; + struct xml_hierarchy * parent; +} xml_hierarchy; + static int -__cberror(struct xml_stack * stack, const char* parsed, unsigned int line, int error, void *data) +__cberror(struct xml_stack * stack, const char* parsed, unsigned int line, int error) { struct xml_stack * s = stack; - unused(data); - log_printf("Error #%d in line %u while parsing \"%s\"\nXML stacktrace:\n", error, line, parsed); + log_error(("Error #%d in line %u while parsing \"%s\"\n", error, line, parsed)); + log_printf("XML stacktrace:\n"); while (s) { - log_printf("\t%s\n", s->tag->name); + if (s->tag && s->tag->name) log_printf("\t%s\n", s->tag->name); + else log_printf("\t\n"); s = s->next; } return error; @@ -45,12 +55,16 @@ make_tag(const char * name) } static void -push_tag(xml_stack ** ostack, xml_tag * tag, FILE * stream) +push_tag(xml_stack ** ostack, xml_tag * tag) { xml_stack * stack = calloc(sizeof(xml_stack), 1); stack->next = *ostack; - stack->stream = stream; stack->tag = tag; + if (*ostack) { + stack->stream = (*ostack)->stream; + stack->callbacks = (*ostack)->callbacks; + stack->state = (*ostack)->state; + } *ostack = stack; } @@ -93,9 +107,60 @@ pop_tag(xml_stack ** ostack) return tag; } -int -xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * stack) +static xml_hierarchy * callbacks; + +void +xml_register(struct xml_callbacks * cb, const char * path, unsigned int flags) { + xml_hierarchy ** node=&callbacks; + xml_hierarchy * parent = NULL; + size_t len = strlen(path); + + for (;;) { + const char * nextspace = path; + while (*nextspace && !isspace(*nextspace)) ++nextspace; + if (*nextspace == '\0') { + /* advance to the last child: */ + while (*node && strcmp((*node)->name, path)!=0) node=&(*node)->next; + if (*node == NULL) { + *node = calloc(sizeof(xml_hierarchy), 1); + (*node)->name = strdup(path); + (*node)->parent = parent; + } + (*node)->flags = flags; + (*node)->functions = cb; + break; + } else { + size_t lpath = nextspace-path; + if (*node == NULL) { + /* adding path into graph */ + *node = calloc(sizeof(xml_hierarchy), 1); + (*node)->name = strncpy(calloc(sizeof(char), 1+lpath), path, lpath); + (*node)->parent = parent; + (*node)->functions = NULL; + path = nextspace+1; + while (isspace(*path)) ++path; + assert(*path || !"trailing blanks in path"); + parent = *node; + node=&parent->children; + } else if (strlen((*node)->name)==lpath && strncmp((*node)->name, path, lpath)==0) { + path = nextspace+1; + while (isspace(*path)) ++path; + assert(*path || !"trailing blanks in path"); + parent = *node; + node=&parent->children; + } else { + node=&(*node)->next; + break; + } + } + } +} + +static int +xml_parse(xml_stack * stack) +{ + FILE * stream = stack->stream; xml_stack * start = stack; enum { TAG, ENDTAG, ATNAME, ATVALUE, PLAIN } state = PLAIN; boolean startline = true; @@ -105,12 +170,7 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta unsigned int line = 0; xml_tag * tag = NULL; xml_attrib * attrib = NULL; - int (*cb_error)(struct xml_stack*, const char*, unsigned int, int, void*) = __cberror; - if (cb && cb->error) cb_error = cb->error; - - if (stack && cb->tagbegin) { - cb->tagbegin(stack, data); - } + int (*cb_error)(struct xml_stack*, const char*, unsigned int, int) = __cberror; for (;;) { int reparse; @@ -119,12 +179,15 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta ++line; } else if (c==EOF) { if (state==PLAIN) { + const xml_hierarchy * cb = stack->callbacks; *pos='\0'; - if (cb && cb->plaintext && pos!=tokbuffer) cb->plaintext(stack, tokbuffer, data); + if (cb && cb->functions->plaintext && pos!=tokbuffer) { + cb->functions->plaintext(stack, tokbuffer); + } break; } else { *pos='\0'; - return cb_error(stack, tokbuffer, line, XML_BROKENSTREAM, data); + return cb_error(stack, tokbuffer, line, XML_BROKENSTREAM); } } do { @@ -134,14 +197,14 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta switch (c) { case '<': *pos='\0'; - return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR, data); + return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR); case '"': quoted = !quoted; break; case '>': if (quoted) { *pos='\0'; - return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR, data); + return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR); } state = TAG; /* intentional fallthrough */ @@ -172,7 +235,7 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta case '"': case '/': *pos='\0'; - return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR, data); + return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR); default: if (isspace(c) || c == '>') { *pos++='\0'; @@ -189,9 +252,12 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta case PLAIN: switch (c) { case '<': - if (cb && cb->plaintext && pos!=tokbuffer) { - *pos = '\0'; - cb->plaintext(stack, tokbuffer, data); + if (pos!=tokbuffer) { + const xml_hierarchy * cb = stack->callbacks; + if (cb && cb->functions->plaintext) { + *pos = '\0'; + cb->functions->plaintext(stack, tokbuffer); + } } state = TAG; tag = NULL; @@ -199,7 +265,7 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta break; case '>': *pos='\0'; - return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR, data); + return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR); case '\n': /* ignore */ if (!startline) *pos++ = ' '; @@ -222,15 +288,27 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta if (pos==tokbuffer) state = ENDTAG; else { *pos='\0'; - return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR, data); + return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR); } break; case '>': if (tag==NULL) { *pos='\0'; - push_tag(&stack, make_tag(tokbuffer), stream); + push_tag(&stack, tag = make_tag(tokbuffer)); + } + { + const xml_hierarchy * cnext = stack->callbacks?stack->callbacks->children:callbacks; + while (cnext && strcmp(cnext->name, tag->name)!=0) cnext=cnext->next; + if (cnext==NULL) { + /* unknown tag. assume same handler again: */ + cnext = stack->callbacks; + } else if ((cnext->flags & XML_CB_IGNORE) == 0) { + stack->callbacks = cnext; + } + if (cnext->functions->tagbegin) { + cnext->functions->tagbegin(stack); + } } - if (cb && cb->tagbegin) cb->tagbegin(stack, data); state = PLAIN; startline = true; pos = tokbuffer; @@ -239,7 +317,7 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta if (isspace(c)) { if (tag==NULL) { *pos='\0'; - push_tag(&stack, tag = make_tag(tokbuffer), stream); + push_tag(&stack, tag = make_tag(tokbuffer)); state = ATNAME; pos = tokbuffer; } @@ -257,13 +335,34 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta switch (c) { case '>': *pos = '\0'; - while (stack && strcmp(stack->tag->name, tokbuffer)!=0) free_tag(pop_tag(&stack)); - if (stack==NULL) return cb_error(stack, tokbuffer, line, XML_NESTINGERROR, data); - if (cb && cb->tagend) cb->tagend(stack, data); + /* might be an unknown tag: */ + if (stack->callbacks) { + /* && strcmp(stack->callbacks->name, stack->tag->name)==0 */ + const xml_hierarchy * cb = stack->callbacks; + if (strcmp(stack->tag->name, tokbuffer)!=0) { + xml_stack * top = stack; + cb_error(stack, tokbuffer, line, XML_NESTINGERROR); + while (top && strcmp(top->tag->name, tokbuffer)!=0) top = top->next; + if (top==NULL) return XML_NESTINGERROR; + while (stack && stack!=top) { + if (cb->functions->tagend) { + cb->functions->tagend(stack); + } + free_tag(pop_tag(&stack)); + cb = stack->callbacks; + } + } + if (cb->functions->tagend) { + cb->functions->tagend(stack); + } + cb = cb->parent; + } + if (strcmp(stack->tag->name, tokbuffer)!=0) { + return XML_NESTINGERROR; + } + free_tag(pop_tag(&stack)); if (stack==start) { return XML_OK; - } else { - free_tag(pop_tag(&stack)); } state = PLAIN; pos = tokbuffer; @@ -273,7 +372,7 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta case '=': case '/': *pos='\0'; - return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR, data); + return cb_error(stack, tokbuffer, line, XML_INVALIDCHAR); default: *pos++ = (char)c; } @@ -284,6 +383,25 @@ xml_parse(FILE * stream, struct xml_callbacks * cb, void * data, xml_stack * sta return XML_OK; /* SUCCESS */ } +int +xml_read(FILE * stream, xml_stack * stack) +{ + xml_stack root; + FILE * save; + if (!stack) { + stack = &root; + memset(stack, 0, sizeof(xml_stack)); + } + save = stack->stream; + stack->stream = stream; + while (!feof(stream)) { + int i = xml_parse(stack); + if (i!=0) return i; + } + stack->stream = save; + return XML_OK; +} + const char * xml_value(const xml_tag * tag, const char * name) { diff --git a/src/common/util/xml.h b/src/common/util/xml.h index ee3df71c3..84907b9b1 100644 --- a/src/common/util/xml.h +++ b/src/common/util/xml.h @@ -12,10 +12,16 @@ #include +struct xml_hierarchy; + +#define XML_CB_IGNORE 1<<0 + typedef struct xml_stack { FILE * stream; + const struct xml_hierarchy * callbacks; struct xml_stack * next; struct xml_tag * tag; + void * state; } xml_stack; typedef struct xml_tag { @@ -37,15 +43,15 @@ typedef struct xml_attrib { /* callbacks */ typedef struct xml_callbacks { - int (*plaintext)(struct xml_stack *, const char*, void *); - int (*tagbegin)(struct xml_stack *, void *); - int (*tagend)(struct xml_stack *, void *); - int (*error)(struct xml_stack *, const char*, unsigned int, int, void *); + int (*tagbegin)(struct xml_stack *); + int (*tagend)(struct xml_stack *); + int (*plaintext)(struct xml_stack *, const char*); } xml_callbacks; /* parser */ #include -extern int xml_parse(FILE * stream, struct xml_callbacks *, void *, struct xml_stack *); +extern void xml_register(struct xml_callbacks * cb, const char * parent, unsigned int flags); +extern int xml_read(FILE *, struct xml_stack * stack); extern const char * xml_value(const struct xml_tag * tag, const char * name); extern double xml_fvalue(const xml_tag * tag, const char * name); extern int xml_ivalue(const xml_tag * tag, const char * name); diff --git a/src/eressea/korrektur.c b/src/eressea/korrektur.c index 6c8c80b68..8115548bb 100644 --- a/src/eressea/korrektur.c +++ b/src/eressea/korrektur.c @@ -701,7 +701,7 @@ fix_migrants(void) { for (u=r->units;u;u=u->next) { if (u->race == new_race[RC_HUMAN]) u->irace = u->race; if (u->irace!=u->race && (u->race->flags & RCF_SHAPESHIFT)==0) { - log_warning(("[fix_migrants] %s ist ein %s, als %s getarnt\n", unitname(u), rc_name(u->race, 0), rc_name(u->irace, 0))); + log_warning(("[fix_migrants] %s ist ein %s, als %s getarnt\n", unitname(u), LOC(default_locale, rc_name(u->race, 0)), LOC(default_locale, rc_name(u->irace, 0)))); } } } diff --git a/src/eressea/main.c b/src/eressea/main.c index b3fcc44f4..17b63dced 100644 --- a/src/eressea/main.c +++ b/src/eressea/main.c @@ -596,6 +596,7 @@ main(int argc, char *argv[]) region **rp = ®ions; if ((i=readgame(false))!=0) return i; + lostf = findfaction(insertfaction); lostf->lastorders = turn; lostf->allies = NULL; @@ -707,6 +708,7 @@ main(int argc, char *argv[]) return 0; } if ((i=readgame(false))!=0) return i; + make_dungeon(5, 5, NULL, NULL); writepasswd(); if (g_killeiswald) { region * r = findregion(0, 25); diff --git a/src/res/de/messages.xml b/src/res/de/messages.xml index 3f21f046c..1d841bab1 100644 --- a/src/res/de/messages.xml +++ b/src/res/de/messages.xml @@ -1,4 +1,158 @@ + + + + + + + "Deine Partei ist noch $int($turns) Wochen immun gegen Angriffe." + + + + + + + + + + + + + "$unit($unit) in $region($region): '$command' - Syntax: MAGIEGEBIET [1-5]." + + + + + + + + + + + + + "$unit($unit) in $region($region): '$command' - Um in Gletschern Straßen bauen zu können, muß zuerst ein Tunnel errichtet werden." + + + + + + + + + + + "Hier wütete die Pest, und $int($dead) Bauern starben." + + + + + + + + + + + + "$unit($unit) benutzt einen $resource($potion,1)." + + + + + + + + + + + + + "$unit($unit) verdient am Handel in $region($region) Steuern in Höhe von $int($amount) Silber." + + + + + + + + + "Der Unterhalt von $building($building) konnte nur verspätet gezahlt werden, das Gebäude war diese Woche nicht funktionstüchtig." + "The upkeep for $building($building) was paid late, the building was not operational this week." + + + + + + + + + + "$unit($unit) kann den Unterhalt von $building($building) nicht bezahlen." + + + + + + + + + + + + + "$unit($unit) fehlen $resource($item,0) für den Betrieb von $building($building)." + + + + + + + + + + + + "$unit($unit) bezahlt den Unterhalt von $building($building)." + + + + + + + + + + + + + + "$unit($unit) übergibt $int($amount) $resource($resource,$amount) an $unit($target)." + + + + + + + + + + + "$string" + + + + + + + + + + + "$string" + + + + Steine stones @@ -1948,32 +2102,6 @@ - - - - - - - - - "$unit($unit) in $region($region): '$command' - Syntax: MAGIEGEBIET <1-5>." - - - - - - - - - - - - - "$unit($unit) in $region($region): '$command' - Um in Gletschern Straßen bauen zu können, muß zuerst ein Tunnel errichtet werden." - - - - @@ -4269,33 +4397,14 @@ - + - - - "$unit($unit) in $region($region): '$command' - Einheiten einer Partei, die noch immun gegen Angriffe ist, dürfen nicht bewachen." - - - - - "$unit($unit) in $region($region): '$command' - units of a faction that can't be attacked may not guard." - - - - - - - - - - - "$string" - - + "$unit($unit) in $region($region): '$command' - Einheiten einer Partei, die noch immun gegen Angriffe ist, dürfen nicht bewachen." + "$unit($unit) in $region($region): '$command' - units of a faction that can't be attacked may not guard." @@ -4516,29 +4625,6 @@ - - - - - - - "Hier wütete die Pest, und $int($dead) Bauern starben." - - - - - - - - - - - - "$unit($unit) benutzt einen $resource($potion,1)." - - - - @@ -4622,17 +4708,6 @@ - - - - - - - "Deine Partei ist noch $int($turns) Wochen immun gegen Angriffe." - - - - @@ -5546,31 +5621,6 @@ - - - - - - - "$string" - - - - - - - - - - - - - - "$unit($unit) übergibt $int($amount) $resource($resource,$amount) an $unit($target)." - - - - @@ -5739,64 +5789,6 @@ - - - - - - - - - "$unit($unit) verdient am Handel in $region($region) Steuern in Höhe von $int($amount) Silber." - - - - - - - - - - - - "$unit($unit) bezahlt den Unterhalt von $building($building)." - - - - - - - - - "Der Unterhalt von $building($building) konnte nur verspätet gezahlt werden, das Gebäude war diese Woche nicht funktionstüchtig." - "The upkeep for $building($building) was paid late, the building was not operational this week." - - - - - - - - - - "$unit($unit) kann den Unterhalt von $building($building) nicht bezahlen." - - - - - - - - - - - - - "$unit($unit) fehlen $resource($item,0) für den Betrieb von $building($building)." - - - - @@ -7351,7 +7343,7 @@ "Zur Feier des Geburtstags von ${name} wird in $region($region) ein großes Feuerwerk abgebrannt, welches noch hier zu bewundern ist. Kaskaden bunter Sterne, leuchtende Wasserfälle aus Licht und strahlende Feuerdrachen erhellen den Himmel." - "A large firework in honor of ${name}, visible all over the sky, has been started in $region($region)." + "A large firework in honor of ${name}, visible all over the sky, has been started in $region($region)." diff --git a/src/res/de/strings.txt b/src/res/de/strings.txt index eec3b5a67..e69de29bb 100644 --- a/src/res/de/strings.txt +++ b/src/res/de/strings.txt @@ -1,676 +0,0 @@ -## OPTION -AUSWERTUNG;de;AUSWERTUNG -COMPUTER;de;COMPUTER -ZUGVORLAGE;de;ZUGVORLAGE -SILBERPOOL;de;SILBERPOOL -STATISTIK;de;STATISTIK -DEBUG;de;DEBUG -ZIPPED;de;ZIPPED -ZEITUNG;de;ZEITUNG -MATERIALPOOL;de;MATERIALPOOL -ADRESSEN;de;ADRESSEN -BZIP2;de;BZIP2 -PUNKTE;de;PUNKTE - -## Schiffstypen -Karavelle;de;Karavelle -Boot;de;Boot -Langboot;de;Langboot -Drachenschiff;de;Drachenschiff -Trireme;de;Trireme - -## Terraintypen -maelstrom;de;Mahlstrom -ocean;de;Ozean -plain;de;Ebene -forest;de;Wald -swamp;de;Sumpf -desert;de;Wüste -highland;de;Hochland -mountain;de;Berge -glacier;de;Gletscher -firewall;de;Feuerwand -grassland;de;Steppe -volcano;de;Vulkan -fog;de;Nebel -iceberg;de;Eisberg -thickfog;de;Dichter Nebel -hell;de;Ebene aus Feuer und Dunkelheit -activevolcano;de;Aktiver Vulkan -hall1;de;Halle -corridor1;de;Gang -magicstorm;de;Magischer Sturm - -maelstrom_trail;de;ein %s -ocean_trail;de;%s -plain_trail;de;die Ebene von %s -forest_trail;de;der Wald von %s -swamp_trail;de;der Sumpf von %s -desert_trail;de;die Wüste von %s -highland_trail;de;das Hochland von %s -mountain_trail;de;das Bergland von %s -glacier_trail;de;der Gletscher von %s -firewall_trail;de;eine %s -grassland_trail;de;die Steppe von %s -volcano_trail;de;der Vulkan von %s -fog_trail;de;ein %s -iceberg_trail;de;der Eisberg von %s -thickfog_trail;de;%s -hell_trail;de;eine %s -activevolcano_trail;de;ein %s -hall1_trail;de;die %s -corridor1_trail;de;die %s -magicstorm_trail;de;ein %s - -caldera;de;Krater -xmas_exit;de;Pforte -coal;de;Kohlenstück -coal_p;de;Kohlenstücke - -## Himmelsrichtungen -west;de;Westen -northwest;de;Nordwesten -northeast;de;Nordosten -east;de;Osten -southwest;de;Südwesten -southeast;de;Südosten - -dir_nw;de;NW -dir_ne;de;NO -dir_east;de;Ost -dir_se;de;SO -dir_sw;de;SW -dir_west;de;West - -## Verschiedenes -unknownunit;de;eine unbekannte Einheit - -## Meldungssektionen -section_events;de;Meldungen und Ereignisse -section_errors;de;Warnungen und Fehler -section_economy;de;Wirtschaft und Handel -section_production;de;Rohstoffe und Produktion -section_magic;de;Magie und Artefakte -section_movement;de;Reisen und Bewegung -section_study;de;Lehren und Lernen -section_battle;de;Kämpfe -section_none;de;Verschiedenes -section_newspells;de;Neue Zauber -section_newpotions;de;Neue Tränke - -## Gebäudetypen -fortress_generic;de;Burg -lighthouse;de;Leuchtturm -mine;de;Bergwerk -quarry;de;Steinbruch -harbour;de;Hafen -academy;de;Akademie -magictower;de;Magierturm -smithy;de;Schmiede -sawmill;de;Sägewerk -stables;de;Pferdezucht -monument;de;Monument -dam;de;Damm -caravan;de;Karawanserei -tunnel;de;Tunnel -inn;de;Taverne -stonecircle;de;Steinkreis -blessedstonecircle;de;Gesegneter Steinkreis -illusioncastle;de;Traumschlößchen -genericbuilding;de;Struktur - -## Testgebäude -temple;de;Tempel - -## Testitem -wand;de;Zauberstab -wand_p;de;Zauberstäbe -wand_of_tears;de;Szepter der Tränen -wand_of_tears_p;de;Szepter der Tränen - -## Burgausbaustufen -site;de;Grundmauern -tradepost;de;Handelsposten -fortification;de;Befestigung -tower;de;Turm -castle;de;Burg -fortress;de;Festung -citadel;de;Zitadelle - -## Items -herb;de;Kraut -herbbag;de;Kräuterbeutel -vial;de;Phiole -vial_p;de;Phiolen - -## Resourcen -money;de;Silber -money_p;de;Silber -hp;de;Trefferpunkt -hp_p;de;Trefferpunkte -aura;de;Aura -aura_p;de;Aura -permaura;de;permanente Aura -permaura_p;de;permanente Aura -peasant;de;Bauer -peasant_p;de;Bauern -unit;de;Einheit -unit_p;de;Einheiten -person;de;Person -person_p;de;Personen - -## items -runesword;de;Runenschwert -runesword_p;de;Runenschwerter -iron;de;Eisen -iron_p;de;Eisen -log;de;Holz -log_p;de;Holz -stone;de;Stein -stone_p;de;Steine -cart;de;Wagen -cart_p;de;Wagen -catapult;de;Katapult -catapult_p;de;Katapulte -sword;de;Schwert -sword_p;de;Schwerter -spear;de;Speer -spear_p;de;Speere -mallornspear;de;Mallornspeer -mallornspear_p;de;Mallornspeere -crossbow;de;Armbrust -crossbow_p;de;Armbrüste -mallorncrossbow;de;Mallornarmbrust -mallorncrossbow_p;de;Mallornarmbrüste -bow;de;Bogen -bow_p;de;Bögen -mallornbow;de;Mallornbogen -mallornbow_p;de;Mallornbögen -## more items -chainmail;de;Kettenhemd -chainmail_p;de;Kettenhemden -plate;de;Plattenpanzer -plate_p;de;Plattenpanzer -balm;de;Balsam -balm_p;de;Balsam -spice;de;Gewürz -spice_p;de;Gewürze -jewel;de;Juwel -jewel_p;de;Juwelen -myrrh;de;Myrrhe -myrrh_p;de;Myrrhe -oil;de;Öl -oil_p;de;Öl -silk;de;Seide -silk_p;de;Seide -incense;de;Weihrauch -incense_p;de;Weihrauch -firesword;de;Flammenschwert -firesword_p;de;Flammenschwerter -shieldstone;de;Schildstein -shieldstone_p;de;Schildsteine -greatsword;de;Bihänder -greatsword_p;de;Bihänder -axe;de;Kriegsaxt -axe_p;de;Kriegsäxte -greatbow;de;Elfenbogen -greatbow_p;de;Elfenbögen -laensword;de;Laenschwert -laensword_p;de;Laenschwerter -laenshield;de;Laenschild -laenshield_p;de;Laenschilde -laenmail;de;Laenkettenhemd -laenmail_p;de;Laenkettenhemden -laen;de;Laen -laen_p;de;Laen -shield;de;Schild -shield_p;de;Schilde -halberd;de;Hellebarde -halberd_p;de;Hellebarden -lance;de;Lanze -lance_p;de;Lanzen -mallornlance;de;Mallornlanze -mallornlance_p;de;Mallornlanzen -mallorn;de;Mallorn -mallorn_p;de;Mallorn -cookie;de;Keks -cookie_p;de;Kekse -apple;de;Apfel -apple_p;de;Äpfel -nut;de;Nuß -nut_p;de;Nüsse -almond;de;Mandelkern -almond_p;de;Mandelkerne -dragonblood;de;Drachenblut -dragonblood_p;de;Drachenblut -fairyboot;de;Feenstiefel -fairyboot_p;de;Feenstiefel -healingpotion;de;Heiltrank -healingpotion_p;de;Heiltränke -antimagic;de;Antimagiekristall -antimagic_p;de;Antimagiekristalle -toadslime;de;Tiegel mit Krötenschleim -toadslime_p;de;Tiegel mit Krötenschleim -amulet;de;Amulett -amulet_p;de;Amulette -ao_daemon;de;Auge des Dämon -ao_daemon_p;de;Augen des Dämon -griphonwing;de;Schwinge des Greifen -griphonwing_p;de;Schwingen des Greifen -ao_chastity;de;Amulett der Keuschheit -ao_chastity_p;de;Amulette der Keuschheit -aoh;de;Amulett der Heilung -aoh_p;de;Amulette der Heilung -aog;de;Amulett des Treffens -aog_p;de;Amulette des Treffens -aots;de;Amulett des wahren Sehens -aots_p;de;Amulette des wahren Sehens -aoc;de;Katzenamulett -aoc_p;de;Katzenamulette -roi;de;Ring der Unsichtbarkeit -roi_p;de;Ringe der Unsichtbarkeit -rop;de;Ring der Macht -rop_p;de;Ringe der Macht -roqf;de;Ring der flinken Finger -roqf_p;de;Ringe der flinken Finger -horse;de;Pferd -horse_p;de;Pferde -magicherbbag;de;Magischer Kräuterbeutel -magicherbbag_p;de;Magische Kräuterbeutel -moneybag;de;Silberbeutel -moneychest;de;Silberkassette -dragonhoard;de;Drachenhort -dragonhead;de;Drachenkopf -dragonhead_p;de;Drachenköpfe -eyeofdragon;de;Auge des Drachen -eyeofdragon_p;de;Augen des Drachen -rustysword;de;Schartiges Schwert -rustysword_p;de;Schartige Schwerter -rustyshield;de;Rostiges Schild -rustyshield_p;de;Rostige Schilde -rustychainmail;de;Rostiges Kettenhemd -rustychainmail_p;de;Rostige Kettenhemden -soc;de;Magischer Kräuterbeutel -soc_p;de;Magische Kräuterbeutel -ror;de;Ring der Regeneration -ror_p;de;Ringe der Regeneration -aod;de;Amulett der Dunkelheit -aod_p;de;Amulette der Dunkelheit -magicbag;de;Zauberbeutel -magicbag_p;de;Zauberbeutel -dreameye;de;Traumauge -dreameye_p;de;Traumaugen -seaserpenthead;de;Seeschlangenkopf -seaserpenthead_p;de;Seeschlangenköpfe -aurafocus;de;Aurafocus -aurafocus_p;de;Aurafocuse -presspass;de;Akkredition des Xontormia-Expreß -presspass_p;de;Akkreditionen des Xontormia-Expreß -trollbelt;de;Gürtel der Trollstärke -trollbelt_p;de;Gürtel der Trollstärke -elvenhorse;de;Elfenpferd -elvenhorse_p;de;Elfenpferde -pegasus;de;Pegasus -pegasus_p;de;Pegasi -dolphin;de;Delphin -dolphin_p;de;Delphine -museumticket;de;Eintrittskarte des Großen Museum -museumticket_p;de;Eintrittskarten des Großen Museum -museumexitticket;de;Rückkehrticket des Großen Museum -museumexitticket_p;de;Rückkehrtickets des Großen Museum -manacrystal;de;Astralkristall -manacrystal_p;de;Astralkristalle -skillpotion;de;Talenttrunk -skillpotion_p;de;Talenttrünke -seed;de;Same -seed_p;de;Samen -mallornseed;de;Mallornsame -mallornseed_p;de;Mallornsamen -birthday_firework;de;Feuerwerk -birthday_firework_p;de;Feuerwerke -lebkuchenherz;de;Lebkuchenherz mit der Aufschrift 'Erz und Stein, das ist fein' -lebkuchenherz_p;de;Lebkuchenherzen mit der Aufschrift 'Erz und Stein, das ist fein' - -## herb singular -h0;de;Flachwurz -h1;de;Würziger Wagemut -h2;de;Eulenauge -h3;de;Grüner Spinnerich -h4;de;Blauer Baumringel -h5;de;Elfenlieb -h6;de;Gurgelkraut -h7;de;Knotiger Saugwurz -h8;de;Blasenmorchel -h9;de;Wasserfinder -h10;de;Kakteenschwitz -h11;de;Sandfäule -h12;de;Windbeutel -h13;de;Fjordwuchs -h14;de;Alraune -h15;de;Steinbeißer -h16;de;Spaltwachs -h17;de;Höhlenglimm -h18;de;Eisblume -h19;de;Weißer Wüterich -h20;de;Schneekristall - -## herb plural -h0_p;de;Flachwurz -h1_p;de;Würzige Wagemut -h2_p;de;Eulenaugen -h3_p;de;Grüne Spinneriche -h4_p;de;Blaue Baumringel -h5_p;de;Elfenlieb -h6_p;de;Gurgelkräuter -h7_p;de;Knotige Saugwurze -h8_p;de;Blasenmorcheln -h9_p;de;Wasserfinder -h10_p;de;Kakteenschwitze -h11_p;de;Sandfäulen -h12_p;de;Windbeutel -h13_p;de;Fjordwuchse -h14_p;de;Alraunen -h15_p;de;Steinbeißer -h16_p;de;Spaltwachse -h17_p;de;Höhlenglimme -h18_p;de;Eisblumen -h19_p;de;Weiße Wüteriche -h20_p;de;Schneekristalle - -p0;de;Siebenmeilentee -p1;de;Goliathwasser -p2;de;Wasser des Lebens -p3;de;Schaffenstrunk -p4;de;Wundsalbe -p5;de;Bauernblut -p6;de;Gehirnschmalz -p7;de;Dumpfbackenbrot -p8;de;Nestwärme -p9;de;Pferdeglück -p10;de;Berserkerblut -p11;de;Bauernlieb -p12;de;Trank der Wahrheit -p13;de;Elixier der Macht -p14;de;Heiltrank - -p0_p;de;Siebenmeilentees -p1_p;de;Goliathwasser -p2_p;de;Wasser des Lebens -p3_p;de;Schaffenstrünke -p4_p;de;Wundsalben -p5_p;de;Bauernblut -p6_p;de;Gehirnschmalz -p7_p;de;Dumpfbackenbrote -p8_p;de;Nestwärme -p9_p;de;Pferdeglück -p10_p;de;Berserkerblut -p11_p;de;Bauernlieb -p12_p;de;Tränke der Wahrheit -p13_p;de;Elixiere der Macht -p14_p;de;Heiltränke - -## Spezialitems -lmsreward;de;Gürtel der Heldentaten -lmsreward_p;de;Gürtel der Heldentaten - -## Parameter -AGGRESSIV;de;AGGRESSIV -ALLES;de;ALLES -ANZAHL;de;ANZAHL -AURA;de;AURA -BAUERN;de;BAUERN -BEISTAND;de;BEISTAND -BEWACHE;de;BEWACHEN -BURG;de;BURG -DEFENSIV;de;DEFENSIV -EINHEIT;de;EINHEIT -ERESSEA;de;ERESSEA -FLIEHE;de;FLIEHE -FREMDES;de;FREMDES -GEBÄUDE;de;GEBÄUDE -GEGENSTÄNDE;de;GEGENSTÄNDE -GIB;de;GIB -GNADE;de;GNADE -HELFE;de;HELFE -HINTEN;de;HINTEN -HINTER;de;HINTER -KOMMANDO;de;KOMMANDO -KRÄUTER;de;KRÄUTER -KÄMPFE;de;KÄMPFE -NICHT;de;NICHT -NÄCHSTER;de;NÄCHSTER -PARTEI;de;PARTEI -PARTEITARNUNG;de;PARTEITARNUNG -PAUSE;de;PAUSE -PERSONEN;de;PERSONEN -PRIVAT;de;PRIVAT -REGION;de;REGION -SCHIFF;de;SCHIFF -SILBER;de;SILBER -STRAßEN;de;STRAßEN -STUFE;de;STUFE -TEMPORÄRE;de;TEMPORÄRE -TRÄNKE;de;TRÄNKE -UM;de;UM -VOR;de;VOR -VORNE;de;VORNE -ZAUBER;de;ZAUBER - -## ;Talente: -sk_alchemy;de;Alchemie -sk_crossbow;de;Armbrustschießen -sk_stamina;de;Ausdauer -sk_mining;de;Bergbau -sk_bow;de;Bogenschießen -sk_building;de;Burgenbau -sk_trade;de;Handeln -sk_melee;de;Hiebwaffen -sk_forestry;de;Holzfällen -sk_catapult;de;Katapultbedienung -sk_herbalism;de;Kräuterkunde -sk_magic;de;Magie -sk_training;de;Pferdedressur -sk_riding;de;Reiten -sk_armorer;de;Rüstungsbau -sk_shipcraft;de;Schiffbau -sk_sailing;de;Segeln -sk_espionage;de;Spionage -sk_polearm;de;Stangenwaffen -sk_quarrying;de;Steinbau -sk_taxation;de;Steuereintreiben -sk_roadwork;de;Straßenbau -sk_tactics;de;Taktik -sk_stealth;de;Tarnung -sk_entertainment;de;Unterhaltung -sk_weaponsmithing;de;Waffenbau -sk_unarmed;de;Waffenloser Kampf -sk_cartmaking;de;Wagenbau -sk_perception;de;Wahrnehmung - -## Befehle -//;de;// -BANNER;de;BANNER -ARBEITEN;de;ARBEITEN -ATTACKIEREN;de;ATTACKIEREN -BIETEN;de;BIETEN -BEKLAUEN;de;BEKLAUEN -BELAGERE;de;BELAGERE -BENENNEN;de;BENENNEN -BENUTZEN;de;BENUTZEN -BESCHREIBE;de;BESCHREIBE -BETRETEN;de;BETRETEN -BEWACHEN;de;BEWACHEN -BOTSCHAFT;de;BOTSCHAFT -ENDE;de;ENDE -FAHREN;de;FAHREN -NUMMER;de;NUMMER -FOLGEN;de;FOLGEN -FORSCHEN;de;FORSCHEN -HELFEN;de;HELFEN -KÄMPFEN;de;KÄMPFEN -KAMPFZAUBER;de;KAMPFZAUBER -KAUFEN;de;KAUFEN -KONTAKTIEREN;de;KONTAKTIEREN -LEHREN;de;LEHREN -LERNEN;de;LERNEN -LIEFERE;de;LIEFERE -MACHEN;de;MACHEN -NACH;de;NACH -INFO;de;INFO -PASSWORT;de;PASSWORT -REKRUTIEREN;de;REKRUTIEREN -RESERVIEREN;de;RESERVIEREN -ROUTE;de;ROUTE -SABOTIEREN;de;SABOTIEREN -OPTION;de;OPTION -SPIONIEREN;de;SPIONIEREN -STIRB;de;STIRB -TARNEN;de;TARNEN -TRANSPORTIEREN;de;TRANSPORTIEREN -TREIBEN;de;TREIBEN -UNTERHALTEN;de;UNTERHALTEN -VERKAUFEN;de;VERKAUFEN -VERLASSEN;de;VERLASSEN -VERGESSEN;de;VERGESSEN -ZAUBERE;de;ZAUBERE -ZEIGEN;de;ZEIGEN -ZERSTÖREN;de;ZERSTÖREN -ZÜCHTEN;de;ZÜCHTEN -DEFAULT;de;DEFAULT -REPORT;de;REPORT -URSPRUNG;de;URSPRUNG -EMAIL;de;EMAIL -MEINUNG;de;MEINUNG -MAGIEGEBIET;de;MAGIEGEBIET -PIRATERIE;de;PIRATERIE -LOCALE;de;LOCALE -NEUSTART;de;NEUSTART -GRUPPE;de;GRUPPE -OPFERE;de;OPFERE -BETEN;de;BETEN -SORTIEREN;de;SORTIEREN -JIHAD;de;JIHAD -GM;de;GM - - -Adler;de;Adler -Drache;de;Drache -Drachen;de;Drachen -Dämon;de;Dämon -Dämonen;de;Dämonen -Einhorn;de;Einhorn -Einhörner;de;Einhörner -Elf;de;Elf -# Elfen;de;Elfen -Eule;de;Eule -Eulen;de;Eulen -Geist;de;Geist -Geister;de;Geister -Goblin;de;Goblin -Goblins;de;Goblins -Halbling;de;Halbling -Halblinge;de;Halblinge -Hirntöter;de;Hirntöter -Insekt;de;Insekt -Insekten;de;Insekten -Jungdrache;de;Jungdrache -Jungdrachen;de;Jungdrachen -Katze;de;Katze -Katzen;de;Katzen -Luchs;de;Luchs -Luchse;de;Luchse -Meermensch;de;Meermensch -Meermenschen;de;Meermenschen -Mensch;de;Mensch -Menschen;de;Menschen -Ork;de;Ork -Orks;de;Orks -Riesenschildkröte;de;Riesenschildkröte -Riesenschildkröten;de;Riesenschildkröten -Schablone;de;Schablone -Schablonen;de;Schablonen -Schattenritter;de;Schattenritter -Seeschlange;de;Seeschlange -Troll;de;Troll -Trolle;de;Trolle -Untote;de;Untote -Untoter;de;Untoter -Warg;de;Warg -Warge;de;Warge -Zombie;de;Zombie -Zombies;de;Zombies -Zwerg;de;Zwerg -Zwerge;de;Zwerge - -## races, future use: -rc_lynx;de;Luchse -rc_unicorn_p;de;Einhörner -rc_wolve_p;de;Warge -rc_dragon_p;de;Drachen -rc_catdragon_p;de;Katzendrachen -rc_ghost_p;de;Geister -rc_cat_p;de;Katzen -rc_human_p;de;Menschen -rc_cat;de;Katze -rc_elf;de;Elf -rc_human;de;Mensch -rc_elve_p;de;Elfen -rc_aquarian;de;Meermensch -rc_dwarve_p;de;Zwerge -rc_lynx_p;de;Luchs -rc_unicorn;de;Einhorn -rc_wolf;de;Warg -rc_dragon;de;Drache -rc_catdragon;de;Katzendrache -rc_dwarf;de;Zwerg -rc_aquarian_p;de;Meermenschen -rc_insect_p;de;Insekten -rc_insect;de;Insekt -rc_ghost;de;Geist -rc_halfling;de;Halbling -rc_halfling_p;de;Halblinge -rc_troll_p;de;Trolle -rc_troll;de;Troll -rc_undead;de;Untote -rc_undead_p;de;Untoter -rc_owl;de;Eule -rc_giantturtle;de;Riesenschildkröte -rc_orc_p;de;Orks -rc_orc;de;Ork -rc_zombie;de;Zombie -rc_zombie_p;de;Zombies -rc_shadowknight;de;Schattenritter - - -## NR generieren -nr_options;de;Optionen -nr_level;de;Stufe -nr_alliances;de;Aktueller Status -nr_herbsrequired;de;Benötigte Kräuter -nr_undercons;de;im Bau -nr_damaged;de;beschädigt -nr_youaredead;de;Unglücklicherweise wurde deine Partei ausgelöscht. Du kannst gerne an einer anderen Stelle wieder einsteigen. Melde Dich einfach wieder an. -nr_skills;de;Talente -nr_inventory;de;hat -nr_size;de;Größe -nr_spells;de;Zauber -nr_combatspells;de;Kampfzauber -nr_nospells;de;keiner -nr_addresses;de;Liste aller Adressen -anonymous;de;anonym -b_attacke;de;Angriff -b_defense;de;Verteidigung -b_armor;de;Rüstung -b_damage;de;Schaden - - -## Küsten -Nordwestküste;de;Nordwestküste -Nordostküste;de;Nordostküste -Ostküste;de;Ostküste -Südostküste;de;Südostküste -Südwestküste;de;Südwestküste -Westküste;de;Westküste - -## report newbie info -nr_nmr;de;Deine Partei hat letzte Runde keinen Zug abgegeben! diff --git a/src/res/de/strings.xml b/src/res/de/strings.xml index 4b60dc3b5..13e3e74e5 100644 --- a/src/res/de/strings.xml +++ b/src/res/de/strings.xml @@ -5,6 +5,1934 @@ + Küsten + + Nordwestküste + + + Nordostküste + + + Ostküste + + + Südostküste + + + Südwestküste + + + Westküste + + + OPTION [x] + + AUSWERTUNG + + + COMPUTER + + + ZUGVORLAGE + + + SILBERPOOL + + + STATISTIK + + + DEBUG + + + ZIPPED + + + ZEITUNG + + + MATERIALPOOL + + + ADRESSEN + + + BZIP2 + + + PUNKTE + + + Schiffstypen + + Karavelle + + + Boot + + + Langboot + + + Drachenschiff + + + Trireme + + + Terraintypen + + Mahlstrom + + + Ozean + + + Ebene + + + Wald + + + Sumpf + + + Wüste + + + Hochland + + + Berge + + + Gletscher + + + Feuerwand + + + Steppe + + + Vulkan + + + Nebel + + + Eisberg + + + Dichter Nebel + + + Ebene aus Feuer und Dunkelheit + + + Aktiver Vulkan + + + Halle + + + Gang + + + Magischer Sturm + + + + ein %s + + + %s + + + die Ebene von %s + + + der Wald von %s + + + der Sumpf von %s + + + die Wüste von %s + + + das Hochland von %s + + + das Bergland von %s + + + der Gletscher von %s + + + eine %s + + + die Steppe von %s + + + der Vulkan von %s + + + ein %s + + + der Eisberg von %s + + + %s + + + eine %s + + + ein %s + + + die %s + + + die %s + + + ein %s + + + + Krater + + + Pforte + + + Kohlenstück + + + Kohlenstücke + + + Himmelsrichtungen + + Westen + + + Nordwesten + + + Nordosten + + + Osten + + + Südwesten + + + Südosten + + + + NW + + + NO + + + Ost + + + SO + + + SW + + + West + + + Verschiedenes + + eine unbekannte Einheit + + + Meldungssektionen + + Meldungen und Ereignisse + + + Warnungen und Fehler + + + Wirtschaft und Handel + + + Rohstoffe und Produktion + + + Magie und Artefakte + + + Reisen und Bewegung + + + Lehren und Lernen + + + Kämpfe + + + Verschiedenes + + + Neue Zauber + + + Neue Tränke + + + Gebäudetypen + + Burg + + + Leuchtturm + + + Bergwerk + + + Steinbruch + + + Hafen + + + Akademie + + + Magierturm + + + Schmiede + + + Sägewerk + + + Pferdezucht + + + Monument + + + Damm + + + Karawanserei + + + Tunnel + + + Taverne + + + Steinkreis + + + Gesegneter Steinkreis + + + Traumschlößchen + + + Struktur + + + Testgebäude + + Tempel + + + Testitem + + Zauberstab + + + Zauberstäbe + + + Szepter der Tränen + + + Szepter der Tränen + + + Burgausbaustufen + + Grundmauern + + + Handelsposten + + + Befestigung + + + Turm + + + Burg + + + Festung + + + Zitadelle + + + Items + + Kraut + + + Kräuterbeutel + + + Phiole + + + Phiolen + + + Resourcen + + Silber + + + Silber + + + Trefferpunkt + + + Trefferpunkte + + + Aura + + + Aura + + + permanente Aura + + + permanente Aura + + + Bauer + + + Bauern + + + Einheit + + + Einheiten + + + Person + + + Personen + + + items + + Runenschwert + + + Runenschwerter + + + Eisen + + + Eisen + + + Holz + + + Holz + + + Stein + + + Steine + + + Wagen + + + Wagen + + + Katapult + + + Katapulte + + + Schwert + + + Schwerter + + + Speer + + + Speere + + + Mallornspeer + + + Mallornspeere + + + Armbrust + + + Armbrüste + + + Mallornarmbrust + + + Mallornarmbrüste + + + Bogen + + + Bögen + + + Mallornbogen + + + Mallornbögen + + more items + + Kettenhemd + + + Kettenhemden + + + Plattenpanzer + + + Plattenpanzer + + + Balsam + + + Balsam + + + Gewürz + + + Gewürze + + + Juwel + + + Juwelen + + + Myrrhe + + + Myrrhe + + + Öl + + + Öl + + + Seide + + + Seide + + + Weihrauch + + + Weihrauch + + + Flammenschwert + + + Flammenschwerter + + + Schildstein + + + Schildsteine + + + Bihänder + + + Bihänder + + + Kriegsaxt + + + Kriegsäxte + + + Elfenbogen + + + Elfenbögen + + + Laenschwert + + + Laenschwerter + + + Laenschild + + + Laenschilde + + + Laenkettenhemd + + + Laenkettenhemden + + + Laen + + + Laen + + + Schild + + + Schilde + + + Hellebarde + + + Hellebarden + + + Lanze + + + Lanzen + + + Mallornlanze + + + Mallornlanzen + + + Mallorn + + + Mallorn + + + Keks + + + Kekse + + + Apfel + + + Äpfel + + + Nuß + + + Nüsse + + + Mandelkern + + + Mandelkerne + + + Drachenblut + + + Drachenblut + + + Feenstiefel + + + Feenstiefel + + + Heiltrank + + + Heiltränke + + + Antimagiekristall + + + Antimagiekristalle + + + Tiegel mit Krötenschleim + + + Tiegel mit Krötenschleim + + + Amulett + + + Amulette + + + Auge des Dämon + + + Augen des Dämon + + + Schwinge des Greifen + + + Schwingen des Greifen + + + Amulett der Keuschheit + + + Amulette der Keuschheit + + + Amulett der Heilung + + + Amulette der Heilung + + + Amulett des Treffens + + + Amulette des Treffens + + + Amulett des wahren Sehens + + + Amulette des wahren Sehens + + + Katzenamulett + + + Katzenamulette + + + Ring der Unsichtbarkeit + + + Ringe der Unsichtbarkeit + + + Ring der Macht + + + Ringe der Macht + + + Ring der flinken Finger + + + Ringe der flinken Finger + + + Pferd + + + Pferde + + + Magischer Kräuterbeutel + + + Magische Kräuterbeutel + + + Silberbeutel + + + Silberkassette + + + Drachenhort + + + Drachenkopf + + + Drachenköpfe + + + Auge des Drachen + + + Augen des Drachen + + + Schartiges Schwert + + + Schartige Schwerter + + + Rostiges Schild + + + Rostige Schilde + + + Rostiges Kettenhemd + + + Rostige Kettenhemden + + + Magischer Kräuterbeutel + + + Magische Kräuterbeutel + + + Ring der Regeneration + + + Ringe der Regeneration + + + Amulett der Dunkelheit + + + Amulette der Dunkelheit + + + Zauberbeutel + + + Zauberbeutel + + + Traumauge + + + Traumaugen + + + Seeschlangenkopf + + + Seeschlangenköpfe + + + Aurafocus + + + Aurafocuse + + + Akkredition des Xontormia-Expreß + + + Akkreditionen des Xontormia-Expreß + + + Gürtel der Trollstärke + + + Gürtel der Trollstärke + + + Elfenpferd + + + Elfenpferde + + + Pegasus + + + Pegasi + + + Delphin + + + Delphine + + + Eintrittskarte des Großen Museum + + + Eintrittskarten des Großen Museum + + + Rückkehrticket des Großen Museum + + + Rückkehrtickets des Großen Museum + + + Astralkristall + + + Astralkristalle + + + Talenttrunk + + + Talenttrünke + + + Same + + + Samen + + + Mallornsame + + + Mallornsamen + + + Feuerwerk + + + Feuerwerke + + + Lebkuchenherz mit der Aufschrift 'Erz und Stein, das ist fein' + + + Lebkuchenherzen mit der Aufschrift 'Erz und Stein, das ist fein' + + + herb singular + + Flachwurz + + + Würziger Wagemut + + + Eulenauge + + + Grüner Spinnerich + + + Blauer Baumringel + + + Elfenlieb + + + Gurgelkraut + + + Knotiger Saugwurz + + + Blasenmorchel + + + Wasserfinder + + + Kakteenschwitz + + + Sandfäule + + + Windbeutel + + + Fjordwuchs + + + Alraune + + + Steinbeißer + + + Spaltwachs + + + Höhlenglimm + + + Eisblume + + + Weißer Wüterich + + + Schneekristall + + + herb plural + + Flachwurz + + + Würzige Wagemut + + + Eulenaugen + + + Grüne Spinneriche + + + Blaue Baumringel + + + Elfenlieb + + + Gurgelkräuter + + + Knotige Saugwurze + + + Blasenmorcheln + + + Wasserfinder + + + Kakteenschwitze + + + Sandfäulen + + + Windbeutel + + + Fjordwuchse + + + Alraunen + + + Steinbeißer + + + Spaltwachse + + + Höhlenglimme + + + Eisblumen + + + Weiße Wüteriche + + + Schneekristalle + + + + Siebenmeilentee + + + Goliathwasser + + + Wasser des Lebens + + + Schaffenstrunk + + + Wundsalbe + + + Bauernblut + + + Gehirnschmalz + + + Dumpfbackenbrot + + + Nestwärme + + + Pferdeglück + + + Berserkerblut + + + Bauernlieb + + + Trank der Wahrheit + + + Elixier der Macht + + + Heiltrank + + + + Siebenmeilentees + + + Goliathwasser + + + Wasser des Lebens + + + Schaffenstrünke + + + Wundsalben + + + Bauernblut + + + Gehirnschmalz + + + Dumpfbackenbrote + + + Nestwärme + + + Pferdeglück + + + Berserkerblut + + + Bauernlieb + + + Tränke der Wahrheit + + + Elixiere der Macht + + + Heiltränke + + + Spezialitems + + Gürtel der Heldentaten + + + Gürtel der Heldentaten + + + Parameter + + AGGRESSIV + + + ALLES + + + ANZAHL + + + AURA + + + BAUERN + + + BEISTAND + + + BEWACHEN + + + BURG + + + DEFENSIV + + + EINHEIT + + + ERESSEA + + + FLIEHE + + + FREMDES + + + GEBÄUDE + + + GEGENSTÄNDE + + + GIB + + + GNADE + + + HELFE + + + HINTEN + + + HINTER + + + KOMMANDO + + + KRÄUTER + + + KÄMPFE + + + NICHT + + + NÄCHSTER + + + PARTEI + + + PARTEITARNUNG + + + PAUSE + + + PERSONEN + + + PRIVAT + + + REGION + + + SCHIFF + + + SILBER + + + STRAßEN + + + STUFE + + + TEMPORÄRE + + + TRÄNKE + + + UM + + + VOR + + + VORNE + + + ZAUBER + + + Talente: + + Alchemie + + + Armbrustschießen + + + Ausdauer + + + Bergbau + + + Bogenschießen + + + Burgenbau + + + Handeln + + + Hiebwaffen + + + Holzfällen + + + Katapultbedienung + + + Kräuterkunde + + + Magie + + + Pferdedressur + + + Reiten + + + Rüstungsbau + + + Schiffbau + + + Segeln + + + Spionage + + + Stangenwaffen + + + Steinbau + + + Steuereintreiben + + + Straßenbau + + + Taktik + + + Tarnung + + + Unterhaltung + + + Waffenbau + + + Waffenloser Kampf + + + Wagenbau + + + Wahrnehmung + + + Befehle + + // + + + BANNER + + + ARBEITEN + + + ATTACKIEREN + + + BIETEN + + + BEKLAUEN + + + BELAGERE + + + BENENNEN + + + BENUTZEN + + + BESCHREIBE + + + BETRETEN + + + BEWACHEN + + + BOTSCHAFT + + + ENDE + + + FAHREN + + + NUMMER + + + FOLGEN + + + FORSCHEN + + + HELFEN + + + KÄMPFEN + + + KAMPFZAUBER + + + KAUFEN + + + KONTAKTIEREN + + + LEHREN + + + LERNEN + + + LIEFERE + + + MACHEN + + + NACH + + + PFLANZEN + + + PRÄFIX + + + SYNONYM + + + INFO + + + PASSWORT + + + REKRUTIEREN + + + RESERVIEREN + + + ROUTE + + + SABOTIEREN + + + OPTION + + + SPIONIEREN + + + STIRB + + + TARNEN + + + TRANSPORTIEREN + + + TREIBEN + + + UNTERHALTEN + + + VERKAUFEN + + + VERLASSEN + + + VERGESSEN + + + ZAUBERE + + + ZEIGEN + + + ZERSTÖREN + + + ZÜCHTEN + + + DEFAULT + + + REPORT + + + URSPRUNG + + + EMAIL + + + MEINUNG + + + MAGIEGEBIET + + + PIRATERIE + + + LOCALE + + + NEUSTART + + + GRUPPE + + + OPFERE + + + BETEN + + + SORTIEREN + + + JIHAD + + + GM + + + + + Adler + + + Drache + + + Drachen + + + Dämon + + + Dämonen + + + Einhorn + + + Einhörner + + + Elf + + + Elfen + + + Eule + + + Eulen + + + Geist + + + Geister + + + Goblin + + + Goblins + + + Halbling + + + Halblinge + + + Hirntöter + + + Insekt + + + Insekten + + + Jungdrache + + + Jungdrachen + + + Katze + + + Katzen + + + Luchs + + + Luchse + + + Meermensch + + + Meermenschen + + + Mensch + + + Menschen + + + Ork + + + Orks + + + Riesenschildkröte + + + Riesenschildkröten + + + Schablone + + + Schablonen + + + Schattenritter + + + Seeschlange + + + Troll + + + Trolle + + + Untote + + + Untoter + + + Warg + + + Warge + + + Zombie + + + Zombies + + + Zwerg + + + Zwerge + + + races, future use: + + Luchse + + + Einhörner + + + Warge + + + Drachen + + + Katzendrachen + + + Geister + + + Katzen + + + Menschen + + + Katze + + + Elf + + + Mensch + + + Elfen + + + Meermensch + + + Zwerge + + + Luchs + + + Einhorn + + + Warg + + + Drache + + + Katzendrache + + + Zwerg + + + Meermenschen + + + Insekten + + + Insekt + + + Geist + + + Halbling + + + Halblinge + + + Trolle + + + Troll + + + Untote + + + Untoter + + + Eule + + + Riesenschildkröte + + + Orks + + + Ork + + + Zombie + + + Zombies + + + Schattenritter + + + + NR generieren + + Optionen + + + Stufe + + + Aktueller Status + + + Benötigte Kräuter + + + im Bau + + + beschädigt + + + Unglücklicherweise wurde deine Partei ausgelöscht. Du kannst gerne an einer anderen Stelle wieder einsteigen. Melde Dich einfach wieder an. + + + Talente + + + hat + + + Größe + + + Zauber + + + Kampfzauber + + + keiner + + + Liste aller Adressen + + + anonym + + + Angriff + + + Verteidigung + + + Rüstung + + + Schaden + + + + report newbie info + + Deine Partei hat letzte Runde keinen Zug abgegeben! + + Im Mistelzweig ruht eine magische Kraft diff --git a/src/res/en/messages.xml b/src/res/en/messages.xml index e8a91e07f..fa42d6561 100644 --- a/src/res/en/messages.xml +++ b/src/res/en/messages.xml @@ -1580,7 +1580,7 @@ - "$unit($unit) in $region($region): '$command' - Syntax: MAGIC SPHERE <1-5>." + "$unit($unit) in $region($region): '$command' - Syntax: MAGIC SPHERE [1-5]." diff --git a/src/res/en/strings.txt b/src/res/en/strings.txt index dcce7dba8..e69de29bb 100644 --- a/src/res/en/strings.txt +++ b/src/res/en/strings.txt @@ -1,671 +0,0 @@ -## OPTION -ADRESSEN;en;ADDRESSES -AUSWERTUNG;en;REPORT -BZIP2;en;BZIP2 -COMPUTER;en;COMPUTER -DEBUG;en;DEBUG -MATERIALPOOL;en;ITEMPOOL -PUNKTE;en;SCORE -SILBERPOOL;en;SILVERPOOL -STATISTIK;en;STATISTICS -ZEITUNG;en;EXPRESS -ZIPPED;en;ZIPPED -ZUGVORLAGE;en;TEMPLATE - -INFO;en;INFO - -## ship types -Karavelle;en;caravel -Boot;en;boat -Langboot;en;longboat -Drachenschiff;en;dragonship -Trireme;en;trireme - -## Terraintypen -activevolcano;en;active volcano -corridor1;en;corridor -desert;en;desert -firewall;en;firewall -fog;en;fog -forest;en;forest -glacier;en;glacier -grassland;en;steppe -hall1;en;hallway -hell;en;hell -highland;en;highland -iceberg;en;iceberg -maelstrom;en;maelstrom -mountain;en;mountain -ocean;en;ocean -plain;en;plain -swamp;en;swamp -thickfog;en;thick fog -volcano;en;volcano -magicstorm;en;magical storm - -activevolcano_trail;en;an %s -corridor1_trail;en;a %s -desert_trail;en;the deserts of %s -firewall_trail;en;a %s -fog_trail;en;fog_trail %s -forest_trail;en;the forests of %s -glacier_trail;en;the glacier of %s -grassland_trail;en;the steppe of %s -hall1_trail;en;the %s -hell_trail;en;%s -highland_trail;en;the highlands of %s -iceberg_trail;en;an %s -maelstrom_trail;en;a %s -mountain_trail;en;the mountains of %s -ocean_trail;en;the %s -plain_trail;en;the plain of %s -swamp_trail;en;the swamps of %s -thickfog_trail;en;%s -volcano_trail;en;a %s -magicstorm_trail;en;a %s - -caldera;en;caldera -xmas_exit;en;portal -temple;en;temple - -## directions -dir_nw;en;NW -dir_ne;en;NE -dir_east;en;East -dir_se;en;SE -dir_sw;en;SW -dir_west;en;West - -west;en;west -northwest;en;northwest -northeast;en;northeast -east;en;east -southwest;en;southwest -southeast;en;southeast - -unknownunit;en;an unknown unit - -section_events;en;Messages and Events -section_errors;en;Warnings and Errors -section_economy;en;Economy and Trade -section_production;en;Resources and Production -section_magic;en;Magic and Artefacts -section_movement;en;Movement and Travel -section_study;en;Learning and Teaching -section_battle;en;Battles -section_none;en;Miscellaneous -section_newspells;en;New Spells - -## Building Types -academy;en;academy -blessedstonecircle;en;blessed stonecircle -caravan;en;caravanserei -dam;en;dam -genericbuilding;en;structure -harbour;en;harbour -illusioncastle;en;fairy castle -inn;en;inn -lighthouse;en;lighthouse -magictower;en;mage tower -mine;en;mine -monument;en;monument -quarry;en;quarry -sawmill;en;sawmill -smithy;en;smithy -stables;en;stable -stonecircle;en;stonecircle -tunnel;en;tunnel - -## Burgausbaustufen -site;en;foundation -tradepost;en;tradepost -fortification;en;fortification -tower;en;tower -castle;en;castle -fortress;en;fortress -citadel;en;citadel - -## Items -herb;en;herb -vial;en;vial -vial_p;en;vials - -## Resourcen -money;en;silver -money_p;en;silver -hp;en;hp -hp_p;en;hps -aura;en;aura -aura_p;en;auras -permaura;en;permaura -permaura_p;en;permauras -peasant;en;peasant -peasant_p;en;peasants - -## items -almond;en;almond -almond_p;en;almonds -amulet;en;amulet -amulet_p;en;amulets -antimagic;en;antimagic cristal -antimagic_p;en;antimagic cristals -ao_chastity;en;amulet of chastity -ao_chastity_p;en;amulets of chastity -ao_daemon;en;eye of the demon -ao_daemon_p;en;eye of the demon -aoc;en;amulet of the kitten -aoc_p;en;amulets of the kitten -aod;en;amulet of darkness -aod_p;en;amulets of darkness -aog;en;amulet of gathering -aog_p;en;amulets of gathering -aoh;en;amulet of healing -aoh_p;en;amulets of healing -aots;en;amulet of true seeing -aots_p;en;amulets of true seeing -apple;en;apple -apple_p;en;apples -aurafocus;en;aurafocus -aurafocus_p;en;aurafocuses -axe;en;axe -axe_p;en;axes -bow;en;bow -bow_p;en;bows -cart;en;cart -cart_p;en;carts -catapult;en;catapult -catapult_p;en;catapults -chainmail;en;chainmail -chainmail_p;en;chainmails -cookie;en;cookie -cookie_p;en;cookies -crossbow;en;crossbow -crossbow_p;en;crossbows -dolphin;en;dolphin -dolphin_p;en;dolphins -dragonblood;en;dragonblood -dragonblood_p;en;dragonblood -dragonhead;en;dragonhead -dragonhead_p;en;dragonheads -dragonhoard;en;dragonhoard -dreameye;en;dreameye -dreameye_p;en;dreameyes -elvenhorse;en;elven horse -elvenhorse_p;en;elven horses -eyeofdragon;en;eye of dragon -eyeofdragon_p;en;eye of dragons -fairyboot;en;fairyboot -fairyboot_p;en;fairyboot -firesword;en;flaming sword -firesword_p;en;flaming swords -greatbow;en;great bow -greatbow_p;en;great bows -greatsword;en;claymore -greatsword_p;en;claymores -griphonwing;en;wing of the gryphon -griphonwing_p;en;wings of the gryphon -halberd;en;halberd -halberd_p;en;halberds -healingpotion;en;healingpotion -healingpotion_p;en;healingpotions -herbbag;en;herbbag -herbbag_p;en;herbbags -horse;en;horse -horse_p;en;horses -iron;en;iron -iron_p;en;irons -laen;en;laen -laen_p;en;laen -laenmail;en;laen chainmail -laenmail_p;en;laen chainmails -laenshield;en;laen shield -laenshield_p;en;laen shields -laensword;en;laen sword -laensword_p;en;laen swords -lance;en;lance -lance_p;en;lances -log;en;wood -log_p;en;wood -magicbag;en;magic bag -magicbag_p;en;magic bags -magicherbbag;en;bag of conservation -magicherbbag_p;en;bags of conservation -mallorn;en;mallorn -mallorn_p;en;mallorn -mallornbow;en;mallorn bow -mallornbow_p;en;mallorn bows -mallorncrossbow;en;mallorn crossbow -mallorncrossbow_p;en;mallorn crossbows -mallornlance;en;mallorn lance -mallornlance_p;en;mallorn lances -mallornspear;en;mallorn spear -mallornspear_p;en;mallorn spear -moneybag;en;silverbag -moneychest;en;silverchest -museumexitticket;en;returnticket for the grand museum -museumexitticket_p;en;returntickets for the grand museum -museumticket;en;ticket to the grand museum -museumticket_p;en;tickets to the grand museum -nut;en;nut -nut_p;en;nuts -pegasus;en;pegasus -pegasus_p;en;pegasi -person;en;man -person_p;en;men -plate;en;plate -plate_p;en;plates -presspass;en;presspass -presspass_p;en;presspasses -roi;en;ring of invisibility -roi_p;en;rings of invisibility -rop;en;ring of power -rop_p;en;rings of power -roqf;en;ring of quick fingers -roqf_p;en;rings of quick fingers -ror;en;ring of regeneration -ror_p;en;rings of regeneration -runesword;en;runesword -runesword_p;en;runeswords -rustychainmail;en;rustychainmail -rustychainmail_p;en;rustychainmails -rustyshield;en;rusty shield -rustyshield_p;en;rusty shields -rustysword;en;rusty sword -rustysword_p;en;rusty swords -seaserpenthead;en;seaserpenthead -seaserpenthead_p;en;seaserpentheads -shield;en;shield -shield_p;en;shields -shieldstone;en;shieldstone -shieldstone_p;en;shieldstones -soc;en;sack of holding -soc_p;en;sacks of holding -spear;en;spear -spear_p;en;spears -stone;en;stone -stone_p;en;stones -sword;en;sword -sword_p;en;swords -toadslime;en;pot of toadslime -toadslime_p;en;pots of toadslime -trollbelt;en;trollbelt -trollbelt_p;en;trollbelts -unit;en;unit -unit_p;en;units -skillpotion;en;potion of skills -skillpotion_p;en;potions of skills -manacrystal;en;astralcrystal -manacrystal_p;en;astralcrystals -seed;en;seed -seed_p;en;seeds -mallornseed;en;mallorn seed -mallornseed_p;en;mallorn seeds -birthday_firework;en;firework -birthday_firework_p;en;fireworks -lebkuchenherz;en;gingerbread heart -lebkuchenherz_p;en;gingerbread hearts - -## luxury goods -balm;en;balm -spice;en;spice -jewel;en;gem -jewel_p;en;gems -myrrh;en;myrrh -oil;en;oil -silk;en;silk -incense;en;incense -balm_p;en;balm -spice_p;en;spice -myrrh_p;en;myrrh -oil_p;en;oil -silk_p;en;silk -incense_p;en;incense - -## Spezialitems -lmsreward;en;Belt of Heroic Legends -lmsreward_p;en;Belts of Heroic Legends - -viele;en;many -sehr viele;en;a great many - -## intranslatables: -h0;en;Flachwurz -h0_p;en;Flachwurz -h1;en;Würziger Wagemut -h1_p;en;Würzige Wagemut -h2;en;Eulenauge -h2_p;en;Eulenaugen -h3;en;Grüner Spinnerich -h3_p;en;Grüne Spinneriche -h4;en;Blauer Baumringel -h4_p;en;Blaue Baumringel -h5;en;Elfenlieb -h5_p;en;Elfenlieb -h6;en;Gurgelkraut -h6_p;en;Gurgelkräuter -h7;en;Knotiger Saugwurz -h7_p;en;Knotige Saugwurze -h8;en;Blasenmorchel -h8_p;en;Blasenmorcheln -h9;en;Wasserfinder -h9_p;en;Wasserfinder -h10;en;Kakteenschwitz -h10_p;en;Kakteenschwitze -h11;en;Sandfäule -h11_p;en;Sandfäulen -h12;en;Windbeutel -h12_p;en;Windbeutel -h13;en;Fjordwuchs -h13_p;en;Fjordwuchse -h14;en;Alraune -h14_p;en;Alraunen -h15;en;Steinbeißer -h15_p;en;Steinbeißer -h16;en;Spaltwachs -h16_p;en;Spaltwachse -h17;en;Höhlenglimm -h17_p;en;Höhlenglimme -h18;en;Eisblume -h18_p;en;Eisblumen -h19;en;Weißer Wüterich -h19_p;en;Weiße Wüteriche -h20;en;Snowcrystal petal -h20_p;en;Snowcrystal petals -p0;en;seven mile tea -p0_p;en;seven mile teas -p1;en;goliath water -p1_p;en;goliath waters -p2;en;water of life -p2_p;en;waters of life -p3;en;Schaffenstrunk -p3_p;en;Schaffenstrünke -p4;en;ointment -p4_p;en;ointments -p5;en;peasant bood -p5_p;en;peasant bloods -p6;en;brain wax -p6_p;en;brain waxes -p7;en;Dumpfbackenbrot -p7_p;en;Dumpfbackenbrote -p8;en;potion of nest warmth -p8_p;en;potions of nest warmth -p9;en;horsepower potion -p9_p;en;horsepower potions -p10;en;berserkers blood potion -p10_p;en;berserkers blood potions -p11;en;peasant love potion -p11_p;en;peasant love potion -p12;en;potion of truth -p12_p;en;potions of truth -p13;en;elixir of power -p13_p;en;elixirs of power -p14;en;healing potion -p14_p;en;healing potions - -## Parameters -AGGRESSIV;en;AGGRESSIVE -ALLES;en;ALL -ANZAHL;en;NUMBER -AURA;en;AURA -BÄUME;en;TREES -BAUERN;en;PEASANTS -BEISTAND;en;AID -BEWACHE;en;GUARD -BURG;en;CASTLE -DEFENSIV;en;DEFENSIVE -EINHEIT;en;UNIT -ERESSEA;en;ERESSEA -FLIEHE;en;FLEE -FREMDES;en;FOREIGN -GEBÄUDE;en;BUILDING -GEGENSTÄNDE;en;ITEMS -GIB;en;GIVE -GNADE;en;MERCY -HELFE;en;HELP -HINTEN;en;REAR -HINTER;en;AFTER -KOMMANDO;en;CONTROL -KRÄUTER;en;HERBS -KÄMPFE;en;COMBAT -NICHT;en;NOT -NÄCHSTER;en;NEXT -PARTEI;en;PARTEI -PARTEITARNUNG;en;FACTIONSTEALTH -PAUSE;en;PAUSE -PERSONEN;en;MEN -PRIVAT;en;PRIVATE -REGION;en;REGION -SCHIFF;en;SHIP -SILBER;en;SILVER -STRAßEN;en;ROADS -STUFE;en;LEVEL -TEMPORÄRE;en;TEMPORARY -TRÄNKE;en;POTIONS -UM;en;FOR -VOR;en;BEFORE -VORNE;en;FRONT -ZAUBER;en;SPELLS - -## Skills -sk_alchemy;en;alchemy -sk_armorer;en;armoursmithing -sk_bow;en;bow -sk_building;en;masonry -sk_cartmaking;en;cartmaking -sk_catapult;en;catapult -sk_crossbow;en;crossbow -sk_entertainment;en;entertainment -sk_espionage;en;espionage -sk_forestry;en;forestry -sk_herbalism;en;herbalism -sk_magic;en;magic -sk_melee;en;melee -sk_mining;en;mining -sk_perception;en;perception -sk_polearm;en;polearm -sk_quarrying;en;quarrying -sk_riding;en;riding -sk_roadwork;en;roadwork -sk_sailing;en;sailing -sk_shipcraft;en;shipcraft -sk_stamina;en;endurance -sk_stealth;en;stealth -sk_tactics;en;tactics -sk_taxation;en;taxation -sk_trade;en;trade -sk_training;en;taming -sk_unarmed;en;unarmed combat -sk_weaponsmithing;en;weaponsmithing - -## Keywords -//;en;// -ARBEITEN;en;WORK -ATTACKIEREN;en;ATTACK -BANNER;en;BANNER -BEKLAUEN;en;STEAL -BELAGERE;en;BESIEGE -BENENNEN;en;NAME -BENUTZEN;en;USE -BESCHREIBE;en;DESCRIBE -BETEN;en;PRAY -BETRETEN;en;ENTER -BEWACHEN;en;GUARD -BIETEN;en;BID -BOTSCHAFT;en;MESSAGE -DEFAULT;en;DEFAULT -EMAIL;en;EMAIL -ENDE;en;END -FAHREN;en;RIDE -FOLGEN;en;FOLLOW -FORSCHEN;en;RESEARCH -GM;en;GM -GRUPPE;en;GROUP -HELFEN;en;HELP -JIHAD;en;JIHAD -KAMPFZAUBER;en;COMBATSPELL -KAUFEN;en;BUY -KONTAKTIEREN;en;CONTACT -KÄMPFEN;en;COMBAT -LEHREN;en;TEACH -LERNEN;en;LEARN -LIEFERE;en;SUPPLY -LOCALE;en;LOCALE -MACHEN;en;MAKE -MAGIEGEBIET;en;SCHOOL -MEINUNG;en;OPINION -NACH;en;MOVE -NEUSTART;en;RESTART -NUMMER;en;NUMBER -OPFERE;en;SACRIFICE -OPTION;en;OPTION -PASSWORT;en;PASSWORD -PFLANZEN;en;PLANT -PIRATERIE;en;PIRACY -PRÄFIX;en;PREFIX -REKRUTIEREN;en;RECRUIT -REPORT;en;REPORT -RESERVIEREN;en;RESERVE -ROUTE;en;ROUTE -SABOTIEREN;en;SABOTAGE -SORTIEREN;en;SORT -SPIONIEREN;en;SPY -STIRB;en;QUIT -SYNONYM;en;SYNONYM -TARNEN;en;HIDE -TRANSPORTIEREN;en;CARRY -TREIBEN;en;TAX -UNTERHALTEN;en;ENTERTAIN -URSPRUNG;en;ORIGIN -VERGESSEN;en;FORGET -VERKAUFEN;en;SELL -VERLASSEN;en;LEAVE -ZAUBERE;en;CAST -ZEIGEN;en;SHOW -ZERSTÖREN;en;DESTROY -ZÜCHTEN;en;GROW - -Adler;en;eagle -Drache;en;dragon -Drachen;en;dragons -Dämon;en;demon -Dämonen;en;demons -Einhorn;en;unicorn -Einhörner;en;unicorns -Elf;en;elf -# Elfen;en;elves -Eule;en;owl -Eulen;en;owls -Geist;en;ghost -Geister;en;ghosts -Goblin;en;goblin -Goblins;en;goblins -Halbling;en;halfling -Halblinge;en;halflings -Hirntöter;en;braineater -Insekt;en;insect -Insekten;en;insects -Jungdrache;en;young dragon -Jungdrachen;en;young dragons -Katze;en;cat -Katzen;en;cats -Katzendrache;en;catdragon -Katzendrachen;en;catdragons -Luchs;en;lynx -Luchse;en;lynx -Meermensch;en;aquarian -Meermenschen;en;aquarians -Mensch;en;human -Menschen;en;humans -Ork;en;orc -Orks;en;orc -Riesenschildkröte;en;giant turtle -Riesenschildkröten;en;giant turtles -Schablone;en;template -Schablonen;en;templates -Schattenritter;en;shadow knight -Seeschlange;en;sea serpent -Troll;en;troll -Trolle;en;trolls -Untote;en;undead -Untoter;en;undead -Warg;en;wolf -Warge;en;wolves -Zombie;en;zombie -Zombie_p;en;zombies -Zwerg;en;dwarf -Zwerge;en;dwarves -Kröte;en;toad -Kröten;en;toads -Klon;en;clone -Gnom;en;gnome -Museumsgeist;en;museumghost -Ghast;en;ghast -Ghoul;en;ghoul -Juju-Zombie;en;juju-zombie -Skelettherr;en;skeleton lord -Zentaur;en;centaur -Krake;en;kraken -Delphin;en;dolphin -Tiger;en;tiger -Höllenkatze;en;hellcat -Traumkatze;en;dreamcat -Teufelchen;en;imp -Nymphe;en;nymph -Singdrache;en;songdragon -Ratte;en;rat -Tunnelwurm;en;tunnelworm -Wolf;en;wolf -Bauer;en;peasant -Alp;en;alp -Bergwächter;en;mountainguard -Schattenmeister;en;shadowmaster -Schattendämon;en;shadowdemon -Eisengolem;en;irongolem -Zauber;en;spell -Spezial;en;special -Dracoid;en;dracoid -Ent;en;ent -Wyrm;en;wyrm -Illusion;en;illusion - -## NR generieren -nr_options;en;Options -nr_level;en;Level -nr_alliances;en;Political Status -nr_herbsrequired;en;Herbs required -nr_undercons;en;under construction -nr_damaged;en;damage -nr_youaredead;en;Your faction has been eliminated. We hope you had a good time anyways, and encourage you to sign up you for another game. -# TODO: calendar ist noch komplexer -nr_skills;en;skills -nr_inventory;en;has -nr_size;en;size -nr_spells;en;spells -nr_combatspells;en;combat spells -nr_nospells;en;none -nr_addresses;en;Addresses -anonymous;en;anonymous -b_attacke;en;attack -b_defense;en;defense -b_armor;en;armour -b_damage;en;damage - -## Testitem -wand;en;wand -wand_p;en;wands -wand_of_tears;en;wand of tears -wand_of_tears_p;en;wands of tears - -## Küsten -Nordwestküste;en;northwest coast -Nordostküste;en;northeast coast -Ostküste;en;east coast -Südostküste;en;southeast coast -Südwestküste;en;southwest coast -Westküste;en;west coast - -## report newbie info -newbie_info_1;en;Remember to send your orders to eressea@eressea.amber.kn-bremen.de with the subject ERESSEA BEFEHLE. -newbie_info_2;en;If you fail to send in orders for one of the first two turns, your faction will be erased from the game to reduce the number of zombie players in Eressea. -newbie_info_3;en;With the first two turns, you will get a computer report (CR). It can be used with many of the tools on http://eressea-pbem.de/download.html. If you want to continue getting it after the second turn, please make one of your units give the order OPTION COMPUTER. -nr_nmr;en;No orders were received for your faction! diff --git a/src/res/en/strings.xml b/src/res/en/strings.xml index 292022a61..354db82cb 100644 --- a/src/res/en/strings.xml +++ b/src/res/en/strings.xml @@ -1,7 +1,1928 @@ - Due to extreme lazyness on Enno's part, this file doesn't contain anything. - All that it should contain is currently in de/strings.xml. + Due to extreme lazyness on Enno's part, this file doesn't contain everything. + A lot of what it should contain is currently in de/strings.xml. + OPTION [x] + + ADDRESSES + + + REPORT + + + BZIP2 + + + COMPUTER + + + DEBUG + + + ITEMPOOL + + + SCORE + + + SILVERPOOL + + + STATISTICS + + + EXPRESS + + + ZIPPED + + + TEMPLATE + + + + INFO + + + ship types + + caravel + + + boat + + + longboat + + + dragonship + + + trireme + + + Terraintypen + + active volcano + + + corridor + + + desert + + + firewall + + + fog + + + forest + + + glacier + + + steppe + + + hallway + + + hell + + + highland + + + iceberg + + + maelstrom + + + mountain + + + ocean + + + plain + + + swamp + + + thick fog + + + volcano + + + magical storm + + + + an %s + + + a %s + + + the deserts of %s + + + a %s + + + fog_trail %s + + + the forests of %s + + + the glacier of %s + + + the steppe of %s + + + the %s + + + %s + + + the highlands of %s + + + an %s + + + a %s + + + the mountains of %s + + + the %s + + + the plain of %s + + + the swamps of %s + + + %s + + + a %s + + + a %s + + + + caldera + + + portal + + + temple + + + directions + + NW + + + NE + + + East + + + SE + + + SW + + + West + + + + west + + + northwest + + + northeast + + + east + + + southwest + + + southeast + + + + an unknown unit + + + + Messages and Events + + + Warnings and Errors + + + Economy and Trade + + + Resources and Production + + + Magic and Artefacts + + + Movement and Travel + + + Learning and Teaching + + + Battles + + + Miscellaneous + + + New Spells + + + Building Types + + academy + + + blessed stonecircle + + + caravanserei + + + dam + + + structure + + + harbour + + + fairy castle + + + inn + + + lighthouse + + + mage tower + + + mine + + + monument + + + quarry + + + sawmill + + + smithy + + + stable + + + stonecircle + + + tunnel + + + Burgausbaustufen + + foundation + + + tradepost + + + fortification + + + tower + + + castle + + + fortress + + + citadel + + + Items + + herb + + + vial + + + vials + + + Resourcen + + silver + + + silver + + + hp + + + hps + + + aura + + + auras + + + permaura + + + permauras + + + peasant + + + peasants + + + items + + almond + + + almonds + + + amulet + + + amulets + + + antimagic cristal + + + antimagic cristals + + + amulet of chastity + + + amulets of chastity + + + eye of the demon + + + eye of the demon + + + amulet of the kitten + + + amulets of the kitten + + + amulet of darkness + + + amulets of darkness + + + amulet of gathering + + + amulets of gathering + + + amulet of healing + + + amulets of healing + + + amulet of true seeing + + + amulets of true seeing + + + apple + + + apples + + + aurafocus + + + aurafocuses + + + axe + + + axes + + + bow + + + bows + + + cart + + + carts + + + catapult + + + catapults + + + chainmail + + + chainmails + + + cookie + + + cookies + + + crossbow + + + crossbows + + + dolphin + + + dolphins + + + dragonblood + + + dragonblood + + + dragonhead + + + dragonheads + + + dragonhoard + + + dreameye + + + dreameyes + + + elven horse + + + elven horses + + + eye of dragon + + + eye of dragons + + + fairyboot + + + fairyboot + + + flaming sword + + + flaming swords + + + great bow + + + great bows + + + claymore + + + claymores + + + wing of the gryphon + + + wings of the gryphon + + + halberd + + + halberds + + + healingpotion + + + healingpotions + + + herbbag + + + herbbags + + + horse + + + horses + + + iron + + + irons + + + laen + + + laen + + + laen chainmail + + + laen chainmails + + + laen shield + + + laen shields + + + laen sword + + + laen swords + + + lance + + + lances + + + wood + + + wood + + + magic bag + + + magic bags + + + bag of conservation + + + bags of conservation + + + mallorn + + + mallorn + + + mallorn bow + + + mallorn bows + + + mallorn crossbow + + + mallorn crossbows + + + mallorn lance + + + mallorn lances + + + mallorn spear + + + mallorn spear + + + silverbag + + + silverchest + + + returnticket for the grand museum + + + returntickets for the grand museum + + + ticket to the grand museum + + + tickets to the grand museum + + + nut + + + nuts + + + pegasus + + + pegasi + + + man + + + men + + + plate + + + plates + + + presspass + + + presspasses + + + ring of invisibility + + + rings of invisibility + + + ring of power + + + rings of power + + + ring of quick fingers + + + rings of quick fingers + + + ring of regeneration + + + rings of regeneration + + + runesword + + + runeswords + + + rustychainmail + + + rustychainmails + + + rusty shield + + + rusty shields + + + rusty sword + + + rusty swords + + + seaserpenthead + + + seaserpentheads + + + shield + + + shields + + + shieldstone + + + shieldstones + + + sack of holding + + + sacks of holding + + + spear + + + spears + + + stone + + + stones + + + sword + + + swords + + + pot of toadslime + + + pots of toadslime + + + trollbelt + + + trollbelts + + + unit + + + units + + + potion of skills + + + potions of skills + + + astralcrystal + + + astralcrystals + + + seed + + + seeds + + + mallorn seed + + + mallorn seeds + + + firework + + + fireworks + + + gingerbread heart + + + gingerbread hearts + + + luxury goods + + balm + + + spice + + + gem + + + gems + + + myrrh + + + oil + + + silk + + + incense + + + balm + + + spice + + + myrrh + + + oil + + + silk + + + incense + + + Spezialitems + + Belt of Heroic Legends + + + Belts of Heroic Legends + + + + many + + + a great many + + + intranslatables: + + Flachwurz + + + Flachwurz + + + Würziger Wagemut + + + Würzige Wagemut + + + Eulenauge + + + Eulenaugen + + + Grüner Spinnerich + + + Grüne Spinneriche + + + Blauer Baumringel + + + Blaue Baumringel + + + Elfenlieb + + + Elfenlieb + + + Gurgelkraut + + + Gurgelkräuter + + + Knotiger Saugwurz + + + Knotige Saugwurze + + + Blasenmorchel + + + Blasenmorcheln + + + Wasserfinder + + + Wasserfinder + + + Kakteenschwitz + + + Kakteenschwitze + + + Sandfäule + + + Sandfäulen + + + Windbeutel + + + Windbeutel + + + Fjordwuchs + + + Fjordwuchse + + + Alraune + + + Alraunen + + + Steinbeißer + + + Steinbeißer + + + Spaltwachs + + + Spaltwachse + + + Höhlenglimm + + + Höhlenglimme + + + Eisblume + + + Eisblumen + + + Weißer Wüterich + + + Weiße Wüteriche + + + Snowcrystal petal + + + Snowcrystal petals + + + seven mile tea + + + seven mile teas + + + goliath water + + + goliath waters + + + water of life + + + waters of life + + + Schaffenstrunk + + + Schaffenstrünke + + + ointment + + + ointments + + + peasant bood + + + peasant bloods + + + brain wax + + + brain waxes + + + Dumpfbackenbrot + + + Dumpfbackenbrote + + + potion of nest warmth + + + potions of nest warmth + + + horsepower potion + + + horsepower potions + + + berserkers blood potion + + + berserkers blood potions + + + peasant love potion + + + peasant love potion + + + potion of truth + + + potions of truth + + + elixir of power + + + elixirs of power + + + healing potion + + + healing potions + + + Parameters + + AGGRESSIVE + + + ALL + + + NUMBER + + + AURA + + + TREES + + + PEASANTS + + + AID + + + GUARD + + + CASTLE + + + DEFENSIVE + + + UNIT + + + ERESSEA + + + FLEE + + + FOREIGN + + + BUILDING + + + ITEMS + + + GIVE + + + MERCY + + + HELP + + + REAR + + + AFTER + + + CONTROL + + + HERBS + + + COMBAT + + + NOT + + + NEXT + + + PARTEI + + + FACTIONSTEALTH + + + PAUSE + + + MEN + + + PRIVATE + + + REGION + + + SHIP + + + SILVER + + + ROADS + + + LEVEL + + + TEMPORARY + + + POTIONS + + + FOR + + + BEFORE + + + FRONT + + + SPELLS + + + Skills + + alchemy + + + armoursmithing + + + bow + + + masonry + + + cartmaking + + + catapult + + + crossbow + + + entertainment + + + espionage + + + forestry + + + herbalism + + + magic + + + melee + + + mining + + + perception + + + polearm + + + quarrying + + + riding + + + roadwork + + + sailing + + + shipcraft + + + endurance + + + stealth + + + tactics + + + taxation + + + trade + + + taming + + + unarmed combat + + + weaponsmithing + + + Keywords + + // + + + WORK + + + ATTACK + + + BANNER + + + STEAL + + + BESIEGE + + + NAME + + + USE + + + DESCRIBE + + + PRAY + + + ENTER + + + GUARD + + + BID + + + MESSAGE + + + DEFAULT + + + EMAIL + + + END + + + RIDE + + + FOLLOW + + + RESEARCH + + + GM + + + GROUP + + + HELP + + + JIHAD + + + COMBATSPELL + + + BUY + + + CONTACT + + + COMBAT + + + TEACH + + + LEARN + + + SUPPLY + + + LOCALE + + + MAKE + + + SCHOOL + + + OPINION + + + MOVE + + + RESTART + + + NUMBER + + + SACRIFICE + + + OPTION + + + PASSWORD + + + PLANT + + + PIRACY + + + PREFIX + + + RECRUIT + + + REPORT + + + RESERVE + + + ROUTE + + + SABOTAGE + + + SORT + + + SPY + + + QUIT + + + SYNONYM + + + HIDE + + + CARRY + + + TAX + + + ENTERTAIN + + + ORIGIN + + + FORGET + + + SELL + + + LEAVE + + + CAST + + + SHOW + + + DESTROY + + + GROW + + + + eagle + + + dragon + + + dragons + + + demon + + + demons + + + unicorn + + + unicorns + + + elf + + + elves + + + owl + + + owls + + + ghost + + + ghosts + + + goblin + + + goblins + + + halfling + + + halflings + + + braineater + + + insect + + + insects + + + young dragon + + + young dragons + + + cat + + + cats + + + catdragon + + + catdragons + + + lynx + + + lynx + + + aquarian + + + aquarians + + + human + + + humans + + + orc + + + orc + + + giant turtle + + + giant turtles + + + template + + + templates + + + shadow knight + + + sea serpent + + + troll + + + trolls + + + undead + + + undead + + + wolf + + + wolves + + + zombie + + + zombies + + + dwarf + + + dwarves + + + toad + + + toads + + + clone + + + gnome + + + museumghost + + + ghast + + + ghoul + + + juju-zombie + + + skeleton lord + + + centaur + + + kraken + + + dolphin + + + tiger + + + hellcat + + + dreamcat + + + imp + + + nymph + + + songdragon + + + rat + + + tunnelworm + + + wolf + + + peasant + + + alp + + + mountainguard + + + shadowmaster + + + shadowdemon + + + irongolem + + + spell + + + special + + + dracoid + + + ent + + + wyrm + + + illusion + + + NR generieren + + Options + + + Level + + + Political Status + + + Herbs required + + + under construction + + + damage + + + Your faction has been eliminated. We hope you had a good time anyways, and encourage you to sign up you for another game. + + TODO: calendar ist noch komplexer + + skills + + + has + + + size + + + spells + + + combat spells + + + none + + + Addresses + + + anonymous + + + attack + + + defense + + + armour + + + damage + + + Testitem + + wand + + + wands + + + wand of tears + + + wands of tears + + + Küsten + + northwest coast + + + northeast coast + + + east coast + + + southeast coast + + + southwest coast + + + west coast + + + report newbie info + + Remember to send your orders to eressea@eressea.amber.kn-bremen.de with the subject ERESSEA BEFEHLE. + + + If you fail to send in orders for one of the first two turns, your faction will be erased from the game to reduce the number of zombie players in Eressea. + + + With the first two turns, you will get a computer report (CR). It can be used with many of the tools on http://eressea-pbem.de/download.html. If you want to continue getting it after the second turn, please make one of your units give the order OPTION COMPUTER. + + + No orders were received for your faction! + diff --git a/src/res/eressea.xml b/src/res/eressea.xml index 7b4c46c0e..70e112665 100644 --- a/src/res/eressea.xml +++ b/src/res/eressea.xml @@ -14,8 +14,8 @@ Game specific - - - + + + diff --git a/src/res/vinyambar-classic.xml b/src/res/vinyambar-classic.xml index 29beb2f55..5e187356d 100644 --- a/src/res/vinyambar-classic.xml +++ b/src/res/vinyambar-classic.xml @@ -14,7 +14,7 @@ Game specific - - + + diff --git a/src/res/vinyambar.xml b/src/res/vinyambar.xml index 15e720eae..6f83202c8 100644 --- a/src/res/vinyambar.xml +++ b/src/res/vinyambar.xml @@ -15,7 +15,7 @@ - - + +