forked from github/server
Merge remote-tracking branch 'upstream/develop' into develop
This commit is contained in:
commit
e014485f3c
|
@ -70,9 +70,12 @@ static void test_remove_dead_factions(CuTest *tc) {
|
||||||
|
|
||||||
static void test_addfaction(CuTest *tc) {
|
static void test_addfaction(CuTest *tc) {
|
||||||
faction *f = 0;
|
faction *f = 0;
|
||||||
const struct race *rc = rc_get_or_create("human");
|
const struct race *rc;
|
||||||
const struct locale *lang = get_or_create_locale("en");
|
const struct locale *lang;
|
||||||
|
|
||||||
|
test_cleanup();
|
||||||
|
rc = rc_get_or_create("human");
|
||||||
|
lang = get_or_create_locale("en");
|
||||||
f = addfaction("test@eressea.de", "hurrdurr", rc, lang, 1234);
|
f = addfaction("test@eressea.de", "hurrdurr", rc, lang, 1234);
|
||||||
CuAssertPtrNotNull(tc, f);
|
CuAssertPtrNotNull(tc, f);
|
||||||
CuAssertPtrNotNull(tc, f->name);
|
CuAssertPtrNotNull(tc, f->name);
|
||||||
|
|
|
@ -1461,6 +1461,28 @@ static void createunitid(unit * u, int id)
|
||||||
uhash(u);
|
uhash(u);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void default_name(const unit *u, char name[], int len) {
|
||||||
|
const char * result;
|
||||||
|
const struct locale * lang = u->faction ? u->faction->locale : default_locale;
|
||||||
|
if (lang) {
|
||||||
|
static const char * prefix[MAXLOCALES];
|
||||||
|
int i = locale_index(lang);
|
||||||
|
/*if (!prefix[i]) {*/
|
||||||
|
prefix[i] = LOC(lang, "unitdefault");
|
||||||
|
if (!prefix[i]) {
|
||||||
|
prefix[i] = parameters[P_UNIT];
|
||||||
|
}
|
||||||
|
/*}*/
|
||||||
|
result = prefix[i];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result = parameters[P_UNIT];
|
||||||
|
}
|
||||||
|
strlcpy(name, result, len);
|
||||||
|
strlcat(name, " ", len);
|
||||||
|
strlcat(name, itoa36(u->no), len);
|
||||||
|
}
|
||||||
|
|
||||||
void name_unit(unit * u)
|
void name_unit(unit * u)
|
||||||
{
|
{
|
||||||
if (u_race(u)->generate_name) {
|
if (u_race(u)->generate_name) {
|
||||||
|
@ -1474,25 +1496,7 @@ void name_unit(unit * u)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char name[32];
|
char name[32];
|
||||||
const char * result;
|
default_name(u, name, sizeof(name));
|
||||||
const struct locale * lang = u->faction ? u->faction->locale : default_locale;
|
|
||||||
if (lang) {
|
|
||||||
static const char * prefix[MAXLOCALES];
|
|
||||||
int i = locale_index(lang);
|
|
||||||
if (!prefix[i]) {
|
|
||||||
prefix[i] = LOC(lang, "unitdefault");
|
|
||||||
if (!prefix[i]) {
|
|
||||||
prefix[i] = parameters[P_UNIT];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result = prefix[i];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result = parameters[P_UNIT];
|
|
||||||
}
|
|
||||||
strlcpy(name, result, sizeof(name));
|
|
||||||
strlcat(name, " ", sizeof(name));
|
|
||||||
strlcat(name, itoa36(u->no), sizeof(name));
|
|
||||||
unit_setname(u, name);
|
unit_setname(u, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1631,6 +1635,7 @@ int countheroes(const struct faction *f)
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns the raw unit name, like "Frodo", or "Seeschlange" */
|
||||||
const char *unit_getname(const unit * u)
|
const char *unit_getname(const unit * u)
|
||||||
{
|
{
|
||||||
if (!u->_name) {
|
if (!u->_name) {
|
||||||
|
@ -1883,6 +1888,7 @@ typedef char name[OBJECTIDSIZE + 1];
|
||||||
static name idbuf[8];
|
static name idbuf[8];
|
||||||
static int nextbuf = 0;
|
static int nextbuf = 0;
|
||||||
|
|
||||||
|
/** Puts human-readable unit name, with number, like "Frodo (hobb)" into buffer */
|
||||||
char *write_unitname(const unit * u, char *buffer, size_t size)
|
char *write_unitname(const unit * u, char *buffer, size_t size)
|
||||||
{
|
{
|
||||||
const char * name = unit_getname(u);
|
const char * name = unit_getname(u);
|
||||||
|
@ -1891,6 +1897,7 @@ char *write_unitname(const unit * u, char *buffer, size_t size)
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns human-readable unit name, with number, like "Frodo (hobb)" */
|
||||||
const char *unitname(const unit * u)
|
const char *unitname(const unit * u)
|
||||||
{
|
{
|
||||||
char *ubuf = idbuf[(++nextbuf) % 8];
|
char *ubuf = idbuf[(++nextbuf) % 8];
|
||||||
|
@ -1914,4 +1921,4 @@ bool unit_name_equals_race(const unit *u) {
|
||||||
|
|
||||||
bool unit_can_study(const unit *u) {
|
bool unit_can_study(const unit *u) {
|
||||||
return !((u_race(u)->flags & RCF_NOLEARN) || fval(u, UFL_WERE));
|
return !((u_race(u)->flags & RCF_NOLEARN) || fval(u, UFL_WERE));
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,14 +82,14 @@ extern "C" {
|
||||||
struct unit *nextF; /* nächste Einheit der Partei */
|
struct unit *nextF; /* nächste Einheit der Partei */
|
||||||
struct unit *prevF; /* vorherige Einheit der Partei */
|
struct unit *prevF; /* vorherige Einheit der Partei */
|
||||||
struct region *region;
|
struct region *region;
|
||||||
int no;
|
int no; /* id */
|
||||||
int hp;
|
int hp;
|
||||||
char *_name;
|
char *_name;
|
||||||
char *display;
|
char *display;
|
||||||
struct faction *faction;
|
struct faction *faction;
|
||||||
struct building *building;
|
struct building *building;
|
||||||
struct ship *ship;
|
struct ship *ship;
|
||||||
unsigned short number;
|
unsigned short number; /* persons */
|
||||||
short age;
|
short age;
|
||||||
|
|
||||||
/* skill data */
|
/* skill data */
|
||||||
|
@ -110,7 +110,7 @@ extern "C" {
|
||||||
int flags;
|
int flags;
|
||||||
struct attrib *attribs;
|
struct attrib *attribs;
|
||||||
status_t status;
|
status_t status;
|
||||||
int n; /* enno: attribut? */
|
int n; /* helper temporariy variable, used in econmy, enno: attribut? */
|
||||||
int wants; /* enno: attribut? */
|
int wants; /* enno: attribut? */
|
||||||
} unit;
|
} unit;
|
||||||
|
|
||||||
|
@ -248,6 +248,7 @@ extern "C" {
|
||||||
|
|
||||||
struct unit *findunitr(const struct region *r, int n);
|
struct unit *findunitr(const struct region *r, int n);
|
||||||
|
|
||||||
|
void default_name(const unit *u, char name[], int len);
|
||||||
const char *unitname(const struct unit *u);
|
const char *unitname(const struct unit *u);
|
||||||
char *write_unitname(const struct unit *u, char *buffer, size_t size);
|
char *write_unitname(const struct unit *u, char *buffer, size_t size);
|
||||||
bool unit_name_equals_race(const struct unit *u);
|
bool unit_name_equals_race(const struct unit *u);
|
||||||
|
|
|
@ -197,6 +197,41 @@ static void test_update_monster_name(CuTest *tc) {
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_names(CuTest *tc) {
|
||||||
|
unit *u;
|
||||||
|
|
||||||
|
test_cleanup();
|
||||||
|
test_create_world();
|
||||||
|
u = test_create_unit(test_create_faction(test_create_race("human")), findregion(0, 0));
|
||||||
|
|
||||||
|
unit_setname(u, "Hodor");
|
||||||
|
unit_setid(u, 5);
|
||||||
|
CuAssertStrEquals(tc, "Hodor", unit_getname(u));
|
||||||
|
CuAssertStrEquals(tc, "Hodor (5)", unitname(u));
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_default_name(CuTest *tc) {
|
||||||
|
unit *u;
|
||||||
|
struct locale* lang;
|
||||||
|
char buf[32], compare[32];
|
||||||
|
|
||||||
|
test_cleanup();
|
||||||
|
test_create_world();
|
||||||
|
lang = get_or_create_locale("de");
|
||||||
|
/* FIXME this has no real effect: default_name uses a static buffer that is initialized in some other test. This sucks. */
|
||||||
|
locale_setstring(lang, "unitdefault", "Einheit");
|
||||||
|
|
||||||
|
u = test_create_unit(test_create_faction(test_create_race("human")), findregion(0, 0));
|
||||||
|
|
||||||
|
default_name(u, buf, sizeof(buf));
|
||||||
|
|
||||||
|
sprintf(compare, "Einheit %s", itoa36(u->no));
|
||||||
|
CuAssertStrEquals(tc, compare, buf);
|
||||||
|
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
CuSuite *get_unit_suite(void)
|
CuSuite *get_unit_suite(void)
|
||||||
{
|
{
|
||||||
CuSuite *suite = CuSuiteNew();
|
CuSuite *suite = CuSuiteNew();
|
||||||
|
@ -209,5 +244,7 @@ CuSuite *get_unit_suite(void)
|
||||||
SUITE_ADD_TEST(suite, test_remove_units_without_faction);
|
SUITE_ADD_TEST(suite, test_remove_units_without_faction);
|
||||||
SUITE_ADD_TEST(suite, test_remove_units_with_dead_faction);
|
SUITE_ADD_TEST(suite, test_remove_units_with_dead_faction);
|
||||||
SUITE_ADD_TEST(suite, test_remove_empty_units_in_region);
|
SUITE_ADD_TEST(suite, test_remove_empty_units_in_region);
|
||||||
|
SUITE_ADD_TEST(suite, test_names);
|
||||||
|
SUITE_ADD_TEST(suite, test_default_name);
|
||||||
return suite;
|
return suite;
|
||||||
}
|
}
|
||||||
|
|
10
src/laws.c
10
src/laws.c
|
@ -1834,12 +1834,10 @@ int name_cmd(struct unit *u, struct order *ord)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
const char *udefault = LOC(u2->faction->locale, "unitdefault");
|
char udefault[32];
|
||||||
const char *uname = unit_getname(u2);
|
default_name(u2, udefault, sizeof(udefault));
|
||||||
size_t udlen = strlen(udefault);
|
if (strcmp(unit_getname(u2), udefault) != 0) {
|
||||||
size_t unlen = strlen(uname);
|
cmistake(u, ord, 244, MSG_EVENT);
|
||||||
if (unlen >= udlen && strncmp(uname, udefault, udlen) != 0) {
|
|
||||||
cmistake(u2, ord, 244, MSG_EVENT);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
src/move.c
12
src/move.c
|
@ -919,17 +919,17 @@ static unit *bewegung_blockiert_von(unit * reisender, region * r)
|
||||||
}
|
}
|
||||||
if (guard) {
|
if (guard) {
|
||||||
prob += base_prob; /* 30% base chance */
|
prob += base_prob; /* 30% base chance */
|
||||||
prob = +guard_count*guard_number_prob;
|
prob += guard_count*guard_number_prob;
|
||||||
if (r->terrain == newterrain(T_GLACIER))
|
if (r->terrain == newterrain(T_GLACIER))
|
||||||
prob = +region_type_prob * 2;
|
prob += region_type_prob * 2;
|
||||||
if (r->terrain == newterrain(T_SWAMP))
|
if (r->terrain == newterrain(T_SWAMP))
|
||||||
prob = +region_type_prob * 2;
|
prob += region_type_prob * 2;
|
||||||
if (r->terrain == newterrain(T_MOUNTAIN))
|
if (r->terrain == newterrain(T_MOUNTAIN))
|
||||||
prob = +region_type_prob;
|
prob += region_type_prob;
|
||||||
if (r->terrain == newterrain(T_VOLCANO))
|
if (r->terrain == newterrain(T_VOLCANO))
|
||||||
prob = +region_type_prob;
|
prob += region_type_prob;
|
||||||
if (r->terrain == newterrain(T_VOLCANO_SMOKING))
|
if (r->terrain == newterrain(T_VOLCANO_SMOKING))
|
||||||
prob = +region_type_prob;
|
prob += region_type_prob;
|
||||||
|
|
||||||
if (prob > 0 && chance(prob)) {
|
if (prob > 0 && chance(prob)) {
|
||||||
return guard;
|
return guard;
|
||||||
|
|
|
@ -215,7 +215,7 @@ const char *silbe3[SIL3] = {
|
||||||
|
|
||||||
static const char *generic_name(const unit * u)
|
static const char *generic_name(const unit * u)
|
||||||
{
|
{
|
||||||
const char * name = rc_name_s(u_race(u), (u->no == 1) ? NAME_SINGULAR : NAME_PLURAL);
|
const char * name = rc_name_s(u_race(u), (u->number == 1) ? NAME_SINGULAR : NAME_PLURAL);
|
||||||
return LOC(u->faction->locale, name);
|
return LOC(u->faction->locale, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1748,7 +1748,7 @@ int sp_undeadhero(struct castorder * co)
|
||||||
if (j > 0) {
|
if (j > 0) {
|
||||||
item **ilist;
|
item **ilist;
|
||||||
unit *u =
|
unit *u =
|
||||||
create_unit(r, mage->faction, 0, get_race(RC_UNDEAD), 0, du->_name,
|
create_unit(r, mage->faction, 0, get_race(RC_UNDEAD), 0, unit_getname(du),
|
||||||
du);
|
du);
|
||||||
|
|
||||||
/* new units gets some stats from old unit */
|
/* new units gets some stats from old unit */
|
||||||
|
|
Loading…
Reference in New Issue