forked from github/server
Erster Code für die Dungeons
Neuer XML Parser Reparatur einiger fehlerhafter XML-Dateien
This commit is contained in:
parent
e21220aba6
commit
19718d2ff2
26 changed files with 4786 additions and 2039 deletions
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -2035,6 +2035,126 @@ static const char * names[] = {
|
|||
"unit", "unit_p"
|
||||
};
|
||||
|
||||
#include <xml.h>
|
||||
|
||||
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 <xml.h>
|
||||
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
134
src/common/modules/dungeon.c
Normal file
134
src/common/modules/dungeon.c
Normal file
|
@ -0,0 +1,134 @@
|
|||
/* vi: set ts=2:
|
||||
+-------------------+ Christian Schlittchen <corwin@amber.kn-bremen.de>
|
||||
| | Enno Rehling <enno@eressea-pbem.de>
|
||||
| Eressea PBEM host | Katja Zedel <katze@felidae.kn-bremen.de>
|
||||
| (c) 1998 - 2001 | Henning Peters <faroul@beyond.kn-bremen.de>
|
||||
| | Ingo Wilken <Ingo.Wilken@informatik.uni-oldenburg.de>
|
||||
+-------------------+ Stefan Reich <reich@halbling.de>
|
||||
|
||||
This program may not be used, modified or distributed
|
||||
without prior permission by the authors of Eressea.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
#include <eressea.h>
|
||||
#include "dungeon.h"
|
||||
#include "gmcmd.h"
|
||||
|
||||
#include <triggers/gate.h>
|
||||
#include <triggers/unguard.h>
|
||||
|
||||
/* kernel includes */
|
||||
#include <plane.h>
|
||||
#include <race.h>
|
||||
#include <region.h>
|
||||
#include <building.h>
|
||||
|
||||
/* util includes */
|
||||
#include <event.h>
|
||||
|
||||
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);
|
||||
}
|
18
src/common/modules/dungeon.h
Normal file
18
src/common/modules/dungeon.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* vi: set ts=2:
|
||||
+-------------------+ Christian Schlittchen <corwin@amber.kn-bremen.de>
|
||||
| | Enno Rehling <enno@eressea-pbem.de>
|
||||
| Eressea PBEM host | Katja Zedel <katze@felidae.kn-bremen.de>
|
||||
| (c) 1998 - 2001 | Henning Peters <faroul@beyond.kn-bremen.de>
|
||||
| | Ingo Wilken <Ingo.Wilken@informatik.uni-oldenburg.de>
|
||||
+-------------------+ Stefan Reich <reich@halbling.de>
|
||||
|
||||
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);
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
/* util includes */
|
||||
#include "attrib.h"
|
||||
#include "resolve.h"
|
||||
|
||||
/* libc includes */
|
||||
#include <assert.h>
|
||||
|
|
|
@ -22,15 +22,25 @@
|
|||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
|
||||
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<unknown>\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)
|
||||
{
|
||||
|
|
|
@ -12,10 +12,16 @@
|
|||
|
||||
#include <stdio.h>
|
||||
|
||||
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 <stdio.h>
|
||||
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);
|
||||
|
|
|
@ -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))));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1,4 +1,158 @@
|
|||
<messages>
|
||||
<message name="newbieimmunity">
|
||||
<type>
|
||||
<arg name="turns" type="int"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"Deine Partei ist noch $int($turns) Wochen immun gegen Angriffe."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="error130">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="command" type="string"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="errors">
|
||||
<text>"$unit($unit) in $region($region): '$command' - Syntax: MAGIEGEBIET [1-5]."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="error131">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="command" type="string"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="errors">
|
||||
<text>"$unit($unit) in $region($region): '$command' - Um in Gletschern Straßen bauen zu können, muß zuerst ein Tunnel errichtet werden."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="pest">
|
||||
<type>
|
||||
<arg name="dead" type="int"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"Hier wütete die Pest, und $int($dead) Bauern starben."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="usepotion">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="potion" type="resource"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"$unit($unit) benutzt einen $resource($potion,1)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="income_tradetax">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="amount" type="int"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) verdient am Handel in $region($region) Steuern in Höhe von $int($amount) Silber."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="maintenance_late" section="economy">
|
||||
<type>
|
||||
<arg name="building" type="building"></arg>
|
||||
</type>
|
||||
<text locale="de">"Der Unterhalt von $building($building) konnte nur verspätet gezahlt werden, das Gebäude war diese Woche nicht funktionstüchtig."</text>
|
||||
<text locale="en">"The upkeep for $building($building) was paid late, the building was not operational this week."</text>
|
||||
</message>
|
||||
|
||||
<message name="maintenancefail">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="building" type="building"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) kann den Unterhalt von $building($building) nicht bezahlen."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="maintenancespecialfail">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="item" type="resource"></arg>
|
||||
<arg name="building" type="building"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) fehlen $resource($item,0) für den Betrieb von $building($building)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="maintenance">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="building" type="building"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) bezahlt den Unterhalt von $building($building)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="give">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="amount" type="int"></arg>
|
||||
<arg name="resource" type="resource"></arg>
|
||||
<arg name="target" type="unit"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) übergibt $int($amount) $resource($resource,$amount) an $unit($target)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="msg_economy">
|
||||
<type>
|
||||
<arg name="string" type="string"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$string"</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="msg_event">
|
||||
<type>
|
||||
<arg name="string" type="string"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"$string"</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="rm_stone">
|
||||
<text locale="de">Steine</text>
|
||||
<text locale="en">stones</text>
|
||||
|
@ -1948,32 +2102,6 @@
|
|||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="error130">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="command" type="string"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="errors">
|
||||
<text>"$unit($unit) in $region($region): '$command' - Syntax: MAGIEGEBIET <1-5>."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="error131">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="command" type="string"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="errors">
|
||||
<text>"$unit($unit) in $region($region): '$command' - Um in Gletschern Straßen bauen zu können, muß zuerst ein Tunnel errichtet werden."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="error132">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
|
@ -4269,33 +4397,14 @@
|
|||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="error304">
|
||||
<message name="error304" section="errors">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="command" type="string"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="errors">
|
||||
<text>"$unit($unit) in $region($region): '$command' - Einheiten einer Partei, die noch immun gegen Angriffe ist, dürfen nicht bewachen."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
<locale name="en">
|
||||
<nr section="errors">
|
||||
<text>"$unit($unit) in $region($region): '$command' - units of a faction that can't be attacked may not guard."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="msg_event">
|
||||
<type>
|
||||
<arg name="string" type="string"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"$string"</text>
|
||||
</nr>
|
||||
</locale>
|
||||
<text locale="de">"$unit($unit) in $region($region): '$command' - Einheiten einer Partei, die noch immun gegen Angriffe ist, dürfen nicht bewachen."</text>
|
||||
<text locale="en">"$unit($unit) in $region($region): '$command' - units of a faction that can't be attacked may not guard."</text>
|
||||
</message>
|
||||
|
||||
<message name="drown_on_ship">
|
||||
|
@ -4516,29 +4625,6 @@
|
|||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="pest">
|
||||
<type>
|
||||
<arg name="dead" type="int"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"Hier wütete die Pest, und $int($dead) Bauern starben."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="usepotion">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="potion" type="resource"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"$unit($unit) benutzt einen $resource($potion,1)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="spydetect">
|
||||
<type>
|
||||
<arg name="target" type="unit"></arg>
|
||||
|
@ -4622,17 +4708,6 @@
|
|||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="newbieimmunity">
|
||||
<type>
|
||||
<arg name="turns" type="int"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="events">
|
||||
<text>"Deine Partei ist noch $int($turns) Wochen immun gegen Angriffe."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="newbie_immunity_error">
|
||||
<type>
|
||||
<arg name="turns" type="int"></arg>
|
||||
|
@ -5546,31 +5621,6 @@
|
|||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="msg_economy">
|
||||
<type>
|
||||
<arg name="string" type="string"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$string"</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="give">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="amount" type="int"></arg>
|
||||
<arg name="resource" type="resource"></arg>
|
||||
<arg name="target" type="unit"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) übergibt $int($amount) $resource($resource,$amount) an $unit($target)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="income">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
|
@ -5739,64 +5789,6 @@
|
|||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="income_tradetax">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="region" type="region"></arg>
|
||||
<arg name="amount" type="int"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) verdient am Handel in $region($region) Steuern in Höhe von $int($amount) Silber."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="maintenance">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="building" type="building"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) bezahlt den Unterhalt von $building($building)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="maintenance_late" section="economy">
|
||||
<type>
|
||||
<arg name="building" type="building"></arg>
|
||||
</type>
|
||||
<text locale="de">"Der Unterhalt von $building($building) konnte nur verspätet gezahlt werden, das Gebäude war diese Woche nicht funktionstüchtig."</text>
|
||||
<text locale="en">"The upkeep for $building($building) was paid late, the building was not operational this week."</text>
|
||||
</message>
|
||||
|
||||
<message name="maintenancefail">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="building" type="building"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) kann den Unterhalt von $building($building) nicht bezahlen."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="maintenancespecialfail">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
<arg name="item" type="resource"></arg>
|
||||
<arg name="building" type="building"></arg>
|
||||
</type>
|
||||
<locale name="de">
|
||||
<nr section="economy">
|
||||
<text>"$unit($unit) fehlen $resource($item,0) für den Betrieb von $building($building)."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
||||
<message name="buy">
|
||||
<type>
|
||||
<arg name="unit" type="unit"></arg>
|
||||
|
@ -7351,7 +7343,7 @@
|
|||
<arg name="name" type="string"></arg>
|
||||
</type>
|
||||
<text locale="de">"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."</text>
|
||||
<text locale="en">"A large firework in honor of ${name}, visible all over the sky, has been started in $region($region)."
|
||||
<text locale="en">"A large firework in honor of ${name}, visible all over the sky, has been started in $region($region)."</text>
|
||||
</message>
|
||||
|
||||
<message name="birthday_firework_local">
|
||||
|
|
|
@ -1,676 +0,0 @@
|
|||
## OPTION <x>
|
||||
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!
|
File diff suppressed because it is too large
Load diff
|
@ -1580,7 +1580,7 @@
|
|||
</type>
|
||||
<locale name="en">
|
||||
<nr section="errors">
|
||||
<text>"$unit($unit) in $region($region): '$command' - Syntax: MAGIC SPHERE <1-5>."</text>
|
||||
<text>"$unit($unit) in $region($region): '$command' - Syntax: MAGIC SPHERE [1-5]."</text>
|
||||
</nr>
|
||||
</locale>
|
||||
</message>
|
||||
|
|
|
@ -1,671 +0,0 @@
|
|||
## OPTION <x>
|
||||
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!
|
File diff suppressed because it is too large
Load diff
|
@ -14,8 +14,8 @@
|
|||
<comment>Game specific</comment>
|
||||
<order name="MEINUNG" disable></order>
|
||||
<order name="MAGIEGEBIET" disable></order>
|
||||
<include file="eressea/races.xml"></include>
|
||||
<include file="eressea/items.xml"></include>
|
||||
<include file="eressea/de/strings.xml"></include>
|
||||
</game>
|
||||
<include file="eressea/races.xml"></include>
|
||||
<include file="eressea/items.xml"></include>
|
||||
<include file="eressea/de/strings.xml"></include>
|
||||
</eressea>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<comment>Game specific</comment>
|
||||
<order name="MEINUNG" disable></order>
|
||||
<order name="MAGIEGEBIET" disable></order>
|
||||
<include file="vinyambar/races.xml"></include>
|
||||
<include file="vinyambar/de/strings-classic.xml"></include>
|
||||
</game>
|
||||
<include file="vinyambar/races.xml"></include>
|
||||
<include file="vinyambar/de/strings-classic.xml"></include>
|
||||
</eressea>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<order name="ARBEITEN" disable></order>
|
||||
<order name="MEINUNG" disable></order>
|
||||
<order name="MAGIEGEBIET" disable></order>
|
||||
<include file="vinyambar/races.xml"></include>
|
||||
<include file="vinyambar/de/strings.xml"></include>
|
||||
</game>
|
||||
<include file="vinyambar/races.xml"></include>
|
||||
<include file="vinyambar/de/strings.xml"></include>
|
||||
</eressea>
|
||||
|
|
Loading…
Reference in a new issue