forked from github/server
Merge branch 'develop' of github.com:ennorehling/eressea into develop
This commit is contained in:
commit
772bc427aa
|
@ -1278,7 +1278,7 @@ int make_cmd(unit * u, struct order *ord)
|
||||||
s = gettoken(token, sizeof(token));
|
s = gettoken(token, sizeof(token));
|
||||||
|
|
||||||
if (s) {
|
if (s) {
|
||||||
m = atoi((const char *)s);
|
m = atoip(s);
|
||||||
sprintf(ibuf, "%d", m);
|
sprintf(ibuf, "%d", m);
|
||||||
if (!strcmp(ibuf, (const char *)s)) {
|
if (!strcmp(ibuf, (const char *)s)) {
|
||||||
/* a quantity was given */
|
/* a quantity was given */
|
||||||
|
@ -1882,7 +1882,7 @@ static bool sell(unit * u, request ** sellorders, struct order *ord)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
n = s ? atoi(s) : 0;
|
n = s ? atoip(s) : 0;
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
cmistake(u, ord, 27, MSG_COMMERCE);
|
cmistake(u, ord, 27, MSG_COMMERCE);
|
||||||
return false;
|
return false;
|
||||||
|
@ -2274,7 +2274,7 @@ static void breed_cmd(unit * u, struct order *ord)
|
||||||
(void)init_order(ord);
|
(void)init_order(ord);
|
||||||
s = gettoken(token, sizeof(token));
|
s = gettoken(token, sizeof(token));
|
||||||
|
|
||||||
m = s ? atoi((const char *)s) : 0;
|
m = s ? atoip(s) : 0;
|
||||||
if (m != 0) {
|
if (m != 0) {
|
||||||
/* first came a want-paramter */
|
/* first came a want-paramter */
|
||||||
s = gettoken(token, sizeof(token));
|
s = gettoken(token, sizeof(token));
|
||||||
|
|
11
src/give.c
11
src/give.c
|
@ -600,16 +600,19 @@ void give_cmd(unit * u, order * ord)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (u2 && u_race(u2) == get_race(RC_SPELL)) {
|
if (u2 && u_race(u2) == get_race(RC_SPELL)) {
|
||||||
ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "feedback_unit_not_found",
|
ADDMSG(&u->faction->msgs, msg_feedback(u, ord,
|
||||||
""));
|
"feedback_unit_not_found", ""));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (u2 && !alliedunit(u2, u->faction, HELP_GIVE) && !ucontact(u2, u)) {
|
else if (u2 && !alliedunit(u2, u->faction, HELP_GIVE) && !ucontact(u2, u)) {
|
||||||
cmistake(u, ord, 40, MSG_COMMERCE);
|
cmistake(u, ord, 40, MSG_COMMERCE);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
else if (p == NOPARAM) {
|
||||||
|
/* the most likely case: giving items to someone.
|
||||||
|
* let's catch this and save ourselves the rest of the param_t checks.
|
||||||
|
*/
|
||||||
|
}
|
||||||
else if (p == P_HERBS) {
|
else if (p == P_HERBS) {
|
||||||
bool given = false;
|
bool given = false;
|
||||||
if ((u_race(u)->ec_flags & ECF_KEEP_ITEM) && u2 != NULL) {
|
if ((u_race(u)->ec_flags & ECF_KEEP_ITEM) && u2 != NULL) {
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
struct give {
|
struct give {
|
||||||
|
struct locale * lang;
|
||||||
struct unit *src, *dst;
|
struct unit *src, *dst;
|
||||||
struct region *r;
|
struct region *r;
|
||||||
struct faction *f1, *f2;
|
struct faction *f1, *f2;
|
||||||
|
@ -46,10 +47,15 @@ static void setup_give(struct give *env) {
|
||||||
ally * al = ally_add(&env->f2->allies, env->f1);
|
ally * al = ally_add(&env->f2->allies, env->f1);
|
||||||
al->status = HELP_GIVE;
|
al->status = HELP_GIVE;
|
||||||
}
|
}
|
||||||
|
if (env->lang) {
|
||||||
|
locale_setstring(env->lang, env->itype->rtype->_name, "SILBER");
|
||||||
|
init_locale(env->lang);
|
||||||
|
env->f1->locale = env->lang;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_unit_to_peasants(CuTest * tc) {
|
static void test_give_unit_to_peasants(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f1 = test_create_faction(0);
|
env.f1 = test_create_faction(0);
|
||||||
env.f2 = 0;
|
env.f2 = 0;
|
||||||
|
@ -62,7 +68,7 @@ static void test_give_unit_to_peasants(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_unit(CuTest * tc) {
|
static void test_give_unit(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f1 = test_create_faction(0);
|
env.f1 = test_create_faction(0);
|
||||||
env.f2 = test_create_faction(0);
|
env.f2 = test_create_faction(0);
|
||||||
|
@ -81,7 +87,7 @@ static void test_give_unit(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_unit_in_ocean(CuTest * tc) {
|
static void test_give_unit_in_ocean(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f1 = test_create_faction(0);
|
env.f1 = test_create_faction(0);
|
||||||
env.f2 = 0;
|
env.f2 = 0;
|
||||||
|
@ -93,7 +99,7 @@ static void test_give_unit_in_ocean(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_men(CuTest * tc) {
|
static void test_give_men(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f2 = env.f1 = test_create_faction(0);
|
env.f2 = env.f1 = test_create_faction(0);
|
||||||
setup_give(&env);
|
setup_give(&env);
|
||||||
|
@ -104,7 +110,7 @@ static void test_give_men(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_men_magicians(CuTest * tc) {
|
static void test_give_men_magicians(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
int p;
|
int p;
|
||||||
message * msg;
|
message * msg;
|
||||||
|
|
||||||
|
@ -135,7 +141,7 @@ static void test_give_men_magicians(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_men_limit(CuTest * tc) {
|
static void test_give_men_limit(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
message *msg;
|
message *msg;
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f2 = test_create_faction(0);
|
env.f2 = test_create_faction(0);
|
||||||
|
@ -165,7 +171,7 @@ static void test_give_men_limit(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_men_in_ocean(CuTest * tc) {
|
static void test_give_men_in_ocean(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
message * msg;
|
message * msg;
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
|
@ -181,7 +187,7 @@ static void test_give_men_in_ocean(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_men_too_many(CuTest * tc) {
|
static void test_give_men_too_many(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f2 = env.f1 = test_create_faction(0);
|
env.f2 = env.f1 = test_create_faction(0);
|
||||||
setup_give(&env);
|
setup_give(&env);
|
||||||
|
@ -192,7 +198,7 @@ static void test_give_men_too_many(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_men_none(CuTest * tc) {
|
static void test_give_men_none(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
message * msg;
|
message * msg;
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
|
@ -207,7 +213,7 @@ static void test_give_men_none(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_men_other_faction(CuTest * tc) {
|
static void test_give_men_other_faction(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
message * msg;
|
message * msg;
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
|
@ -224,7 +230,7 @@ static void test_give_men_other_faction(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_men_requires_contact(CuTest * tc) {
|
static void test_give_men_requires_contact(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
message * msg;
|
message * msg;
|
||||||
order *ord;
|
order *ord;
|
||||||
char cmd[32];
|
char cmd[32];
|
||||||
|
@ -251,7 +257,7 @@ static void test_give_men_requires_contact(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_men_not_to_self(CuTest * tc) {
|
static void test_give_men_not_to_self(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
message * msg;
|
message * msg;
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f2 = env.f1 = test_create_faction(0);
|
env.f2 = env.f1 = test_create_faction(0);
|
||||||
|
@ -264,7 +270,7 @@ static void test_give_men_not_to_self(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_peasants(CuTest * tc) {
|
static void test_give_peasants(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
message * msg;
|
message * msg;
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
|
@ -281,7 +287,7 @@ static void test_give_peasants(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give(CuTest * tc) {
|
static void test_give(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f2 = env.f1 = test_create_faction(0);
|
env.f2 = env.f1 = test_create_faction(0);
|
||||||
|
@ -298,8 +304,31 @@ static void test_give(CuTest * tc) {
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_give_cmd(CuTest * tc) {
|
||||||
|
struct give env = { 0 };
|
||||||
|
struct order *ord;
|
||||||
|
char cmd[32];
|
||||||
|
|
||||||
|
test_setup();
|
||||||
|
env.lang = test_create_locale();
|
||||||
|
env.f2 = env.f1 = test_create_faction(0);
|
||||||
|
setup_give(&env);
|
||||||
|
|
||||||
|
i_change(&env.src->items, env.itype, 10);
|
||||||
|
|
||||||
|
_snprintf(cmd, sizeof(cmd), "%s 5 %s", itoa36(env.dst->no), LOC(env.f1->locale, env.itype->rtype->_name));
|
||||||
|
ord = create_order(K_GIVE, env.f1->locale, cmd);
|
||||||
|
assert(ord);
|
||||||
|
give_cmd(env.src, ord);
|
||||||
|
CuAssertIntEquals(tc, 5, i_get(env.src->items, env.itype));
|
||||||
|
CuAssertIntEquals(tc, 5, i_get(env.dst->items, env.itype));
|
||||||
|
|
||||||
|
free_order(ord);
|
||||||
|
test_cleanup();
|
||||||
|
}
|
||||||
|
|
||||||
static void test_give_herbs(CuTest * tc) {
|
static void test_give_herbs(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
struct order *ord;
|
struct order *ord;
|
||||||
char cmd[32];
|
char cmd[32];
|
||||||
|
|
||||||
|
@ -321,7 +350,7 @@ static void test_give_herbs(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_okay(CuTest * tc) {
|
static void test_give_okay(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f2 = env.f1 = test_create_faction(0);
|
env.f2 = env.f1 = test_create_faction(0);
|
||||||
|
@ -333,7 +362,7 @@ static void test_give_okay(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_denied_by_rules(CuTest * tc) {
|
static void test_give_denied_by_rules(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
struct message *msg;
|
struct message *msg;
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
|
@ -348,7 +377,7 @@ static void test_give_denied_by_rules(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_dead_unit(CuTest * tc) {
|
static void test_give_dead_unit(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
struct message *msg;
|
struct message *msg;
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
|
@ -363,7 +392,7 @@ static void test_give_dead_unit(CuTest * tc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_give_new_unit(CuTest * tc) {
|
static void test_give_new_unit(CuTest * tc) {
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
env.f1 = test_create_faction(0);
|
env.f1 = test_create_faction(0);
|
||||||
|
@ -377,7 +406,7 @@ static void test_give_new_unit(CuTest * tc) {
|
||||||
|
|
||||||
static void test_give_invalid_target(CuTest *tc) {
|
static void test_give_invalid_target(CuTest *tc) {
|
||||||
// bug https://bugs.eressea.de/view.php?id=1685
|
// bug https://bugs.eressea.de/view.php?id=1685
|
||||||
struct give env;
|
struct give env = { 0 };
|
||||||
order *ord;
|
order *ord;
|
||||||
|
|
||||||
test_setup();
|
test_setup();
|
||||||
|
@ -400,6 +429,7 @@ CuSuite *get_give_suite(void)
|
||||||
{
|
{
|
||||||
CuSuite *suite = CuSuiteNew();
|
CuSuite *suite = CuSuiteNew();
|
||||||
SUITE_ADD_TEST(suite, test_give);
|
SUITE_ADD_TEST(suite, test_give);
|
||||||
|
SUITE_ADD_TEST(suite, test_give_cmd);
|
||||||
SUITE_ADD_TEST(suite, test_give_men);
|
SUITE_ADD_TEST(suite, test_give_men);
|
||||||
SUITE_ADD_TEST(suite, test_give_men_magicians);
|
SUITE_ADD_TEST(suite, test_give_men_magicians);
|
||||||
SUITE_ADD_TEST(suite, test_give_men_limit);
|
SUITE_ADD_TEST(suite, test_give_men_limit);
|
||||||
|
|
|
@ -136,7 +136,7 @@ typedef enum {
|
||||||
P_TREES,
|
P_TREES,
|
||||||
P_ALLIANCE,
|
P_ALLIANCE,
|
||||||
MAXPARAMS,
|
MAXPARAMS,
|
||||||
NOPARAM = -1
|
NOPARAM
|
||||||
} param_t;
|
} param_t;
|
||||||
|
|
||||||
typedef enum { /* Fehler und Meldungen im Report */
|
typedef enum { /* Fehler und Meldungen im Report */
|
||||||
|
|
|
@ -14,6 +14,9 @@
|
||||||
const char * keyword(keyword_t kwd)
|
const char * keyword(keyword_t kwd)
|
||||||
{
|
{
|
||||||
static char result[32]; // FIXME: static return value
|
static char result[32]; // FIXME: static return value
|
||||||
|
if (kwd==NOKEYWORD) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
if (!result[0]) {
|
if (!result[0]) {
|
||||||
strcpy(result, "keyword::");
|
strcpy(result, "keyword::");
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,11 +11,13 @@
|
||||||
static void test_init_keywords(CuTest *tc) {
|
static void test_init_keywords(CuTest *tc) {
|
||||||
struct locale *lang;
|
struct locale *lang;
|
||||||
|
|
||||||
test_cleanup();
|
test_setup();
|
||||||
lang = get_or_create_locale("en");
|
lang = get_or_create_locale("en");
|
||||||
locale_setstring(lang, "keyword::move", "MOVE");
|
locale_setstring(lang, "keyword::move", "MOVE");
|
||||||
init_keywords(lang);
|
init_keywords(lang);
|
||||||
CuAssertIntEquals(tc, K_MOVE, get_keyword("move", lang));
|
CuAssertIntEquals(tc, K_MOVE, get_keyword("move", lang));
|
||||||
|
CuAssertStrEquals(tc, "keyword::move", keyword(K_MOVE));
|
||||||
|
CuAssertPtrEquals(tc, NULL, (void *)keyword(NOKEYWORD));
|
||||||
test_cleanup();
|
test_cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3693,7 +3693,7 @@ int use_cmd(unit * u, struct order *ord)
|
||||||
cmistake(u, ord, 43, MSG_PRODUCE);
|
cmistake(u, ord, 43, MSG_PRODUCE);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
n = atoi((const char *)t);
|
n = atoip((const char *)t);
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
if (isparam(t, u->faction->locale, P_ANY)) {
|
if (isparam(t, u->faction->locale, P_ANY)) {
|
||||||
/* BENUTZE ALLES Yanxspirit */
|
/* BENUTZE ALLES Yanxspirit */
|
||||||
|
@ -3841,7 +3841,7 @@ int claim_cmd(unit * u, struct order *ord)
|
||||||
|
|
||||||
t = gettoken(token, sizeof(token));
|
t = gettoken(token, sizeof(token));
|
||||||
if (t) {
|
if (t) {
|
||||||
n = atoi((const char *)t);
|
n = atoip((const char *)t);
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
n = 1;
|
n = 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -376,7 +376,7 @@ static int read_seenspell(attrib * a, void *owner, struct gamedata *data)
|
||||||
char token[32];
|
char token[32];
|
||||||
|
|
||||||
READ_TOK(store, token, sizeof(token));
|
READ_TOK(store, token, sizeof(token));
|
||||||
i = atoi(token);
|
i = atoip(token);
|
||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
sp = find_spellbyid((unsigned int)i);
|
sp = find_spellbyid((unsigned int)i);
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <ctype.h>
|
||||||
#include <wctype.h>
|
#include <wctype.h>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
|
|
||||||
|
@ -250,7 +251,7 @@ unsigned int atoip(const char *s)
|
||||||
int n;
|
int n;
|
||||||
|
|
||||||
assert(s);
|
assert(s);
|
||||||
n = atoi(s);
|
n = isdigit(s[0]) ? atoi(s) : 0;
|
||||||
|
|
||||||
if (n < 0)
|
if (n < 0)
|
||||||
n = 0;
|
n = 0;
|
||||||
|
|
|
@ -2,8 +2,16 @@
|
||||||
#include "parser.h"
|
#include "parser.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
#include <CuTest.h>
|
#include <CuTest.h>
|
||||||
|
|
||||||
|
static void test_atoip(CuTest *tc) {
|
||||||
|
CuAssertIntEquals(tc, 0, atoip("ALLES"));
|
||||||
|
CuAssertIntEquals(tc, 0, errno);
|
||||||
|
CuAssertIntEquals(tc, 42, atoip("42"));
|
||||||
|
CuAssertIntEquals(tc, 0, atoip("-1"));
|
||||||
|
}
|
||||||
|
|
||||||
static void test_parse_token(CuTest *tc) {
|
static void test_parse_token(CuTest *tc) {
|
||||||
char lbuf[8];
|
char lbuf[8];
|
||||||
const char *tok;
|
const char *tok;
|
||||||
|
@ -103,12 +111,6 @@ static void test_getstrtoken(CuTest *tc) {
|
||||||
CuAssertPtrEquals(tc, NULL, (void *)getstrtoken());
|
CuAssertPtrEquals(tc, NULL, (void *)getstrtoken());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_atoip(CuTest *tc) {
|
|
||||||
CuAssertIntEquals(tc, 42, atoip("42"));
|
|
||||||
CuAssertIntEquals(tc, 0, atoip("-42"));
|
|
||||||
CuAssertIntEquals(tc, 0, atoip("NOPE"));
|
|
||||||
}
|
|
||||||
|
|
||||||
CuSuite *get_parser_suite(void)
|
CuSuite *get_parser_suite(void)
|
||||||
{
|
{
|
||||||
CuSuite *suite = CuSuiteNew();
|
CuSuite *suite = CuSuiteNew();
|
||||||
|
|
Loading…
Reference in New Issue