diff --git a/conf/e4/config.xml b/conf/e4/config.xml index 95bcde300..a6439db21 100644 --- a/conf/e4/config.xml +++ b/conf/e4/config.xml @@ -58,6 +58,7 @@ + diff --git a/game-e2/catalog.xml b/game-e2/catalog.xml deleted file mode 100644 index a6c2882c8..000000000 --- a/game-e2/catalog.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - diff --git a/game-e2/config.xml b/game-e2/config.xml deleted file mode 100644 index ec8a8855e..000000000 --- a/game-e2/config.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - eressea-server@eressea.de - eressea-server@eressea.de - - - Bitte denke daran, deine Befehle mit dem Betreff - ERESSEA BEFEHLE an eressea-server@eressea.de zu senden. - Remember to send your orders to - eressea-server@eressea.de with the subject ERESSEA ORDERS. - - - ERESSEA BEFEHLE - ERESSEA ORDERS - - - diff --git a/game-e2/eressea.ini b/game-e2/eressea.ini deleted file mode 100644 index 1abf1be35..000000000 --- a/game-e2/eressea.ini +++ /dev/null @@ -1,16 +0,0 @@ -[eressea] -base = . -report = reports -verbose = 0 -lomem = 0 -debug = 0 -memcheck = 0 -locales = de,en - -[config] -rules = eressea -source_dir = .. -maxnmrs = 10 - -[editor] -color = 1 diff --git a/game-e2/runtests.lua b/game-e2/runtests.lua deleted file mode 100644 index 423094391..000000000 --- a/game-e2/runtests.lua +++ /dev/null @@ -1,2 +0,0 @@ -require "setup" -run_tests() diff --git a/game-e2/setup.lua b/game-e2/setup.lua deleted file mode 100644 index ccd43719d..000000000 --- a/game-e2/setup.lua +++ /dev/null @@ -1,14 +0,0 @@ -local srcpath = config.source_dir -local respath = srcpath .. '/res' -local paths = { - 'scripts/?.lua', - 'core/scripts/?.lua', - 'lunit/?.lua' -} - -for idx, path in pairs(paths) do - package.path = srcpath .. '/' .. path .. ';' .. package.path -end - -assert(read_xml()) -require "init" diff --git a/game-e3/catalog.xml b/game-e3/catalog.xml deleted file mode 100644 index 3d82919cd..000000000 --- a/game-e3/catalog.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - diff --git a/game-e3/config.xml b/game-e3/config.xml deleted file mode 100644 index a66b20393..000000000 --- a/game-e3/config.xml +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - eressea-server@eressea.de - eressea-server@eressea.de - - - Bitte denke daran, deine Befehle mit dem Betreff - ERESSEA 4 BEFEHLE an eressea-server@eressea.de zu senden. - Remember to send your orders to - eressea-server@eressea.de with the subject ERESSEA 4 ORDERS. - - - ERESSEA 4 BEFEHLE - ERESSEA 4 ORDERS - - - diff --git a/game-e3/eressea.ini b/game-e3/eressea.ini deleted file mode 100644 index fdfe6277c..000000000 --- a/game-e3/eressea.ini +++ /dev/null @@ -1,16 +0,0 @@ -[eressea] -base = . -report = reports -verbose = 0 -lomem = 0 -debug = 0 -memcheck = 0 -locales = de,en - -[config] -rules = e3a -source_dir = .. -maxnmrs = 20 - -[editor] -color = 1 diff --git a/game-e3/runtests.lua b/game-e3/runtests.lua deleted file mode 100644 index 423094391..000000000 --- a/game-e3/runtests.lua +++ /dev/null @@ -1,2 +0,0 @@ -require "setup" -run_tests() diff --git a/game-e3/setup.lua b/game-e3/setup.lua deleted file mode 100644 index ccd43719d..000000000 --- a/game-e3/setup.lua +++ /dev/null @@ -1,14 +0,0 @@ -local srcpath = config.source_dir -local respath = srcpath .. '/res' -local paths = { - 'scripts/?.lua', - 'core/scripts/?.lua', - 'lunit/?.lua' -} - -for idx, path in pairs(paths) do - package.path = srcpath .. '/' .. path .. ';' .. package.path -end - -assert(read_xml()) -require "init" diff --git a/res/core/common/items.xml b/res/core/common/items.xml index d867a3126..9508653e7 100644 --- a/res/core/common/items.xml +++ b/res/core/common/items.xml @@ -1,6 +1,10 @@ + + + + diff --git a/scripts/tests/e3/rules.lua b/scripts/tests/e3/rules.lua index 07fbb1a60..193551ea9 100644 --- a/scripts/tests/e3/rules.lua +++ b/scripts/tests/e3/rules.lua @@ -712,6 +712,42 @@ function test_golem_use_four_iron() assert_equal(4, u1:get_item("towershield")) end +function skip_test_silver_weight_stops_movement() + local r1 = region.create(1, 1, "plain") + local r2 = region.create(2, 1, "plain") + region.create(3, 1, "plain") + local f1 = faction.create("noreply@eressea.de", "human", "de") + local u1 = unit.create(f1, r1, 1) + u1:clear_orders() + u1:add_order("NACH OST") + u1:add_item("money", 540) + assert_equal(1540, u1.weight) + process_orders() + assert_equal(r2, u1.region) + u1:add_item("money", 1) + process_orders() + assert_equal(r2, u1.region) +end + +function skip_test_silver_weight_stops_ship() + local r1 = region.create(1, 1, "ocean") + local r2 = region.create(2, 1, "ocean") + region.create(3, 1, "ocean") + local f1 = faction.create("noreply@eressea.de", "human", "de") + local u1 = unit.create(f1, r1, 1) + u1:set_skill("sailing", 3) + local s1 = ship.create(r1, "canoe") + u1.ship = s1 + u1:clear_orders() + u1:add_order("NACH OST") + u1:add_item("money", 2000) + process_orders() + assert_equal(r2, u1.region) + u1:add_item("money", 1) + process_orders() + assert_equal(r2, u1.region) +end + function test_building_owner_can_enter_ship() local r1 = region.create(1, 2, "plain") local f1 = faction.create("noreply@eressea.de", "human", "de") @@ -734,3 +770,12 @@ function test_building_owner_can_enter_ship() assert_equal(s1, u1.ship) assert_equal(null, u1.building, "owner of the building can not go into a ship") end + +function test_weightless_silver() + local r1 = region.create(1, 2, "plain") + local f1 = faction.create("noreply@eressea.de", "human", "de") + local u1 = unit.create(f1, r1, 1) + assert_equal(1000, u1.weight) + u1:add_item("money", 540) + assert_equal(1000, u1.weight) +end diff --git a/src/kernel/CMakeLists.txt b/src/kernel/CMakeLists.txt index 9dbb73b49..bc2c20418 100644 --- a/src/kernel/CMakeLists.txt +++ b/src/kernel/CMakeLists.txt @@ -21,6 +21,7 @@ race.test.c spellbook.test.c curse.test.c jsonconf.test.c +messages.test.c ) SET(_FILES diff --git a/src/kernel/item.test.c b/src/kernel/item.test.c index dcb7ca878..981edf641 100644 --- a/src/kernel/item.test.c +++ b/src/kernel/item.test.c @@ -143,6 +143,27 @@ static void test_fix_demand(CuTest *tc) { test_cleanup(); } +static void test_core_resources(CuTest *tc) { + resource_type * rtype; + test_cleanup(); + init_resources(); + CuAssertPtrNotNull(tc, rtype = rt_find("money")); + CuAssertPtrNotNull(tc, rtype->itype); + CuAssertPtrNotNull(tc, rtype->uchange); + CuAssertPtrNotNull(tc, rtype->itype->give); + CuAssertPtrNotNull(tc, rtype = rt_find("peasant")); + CuAssertPtrEquals(tc, 0, rtype->itype); + CuAssertPtrNotNull(tc, rtype = rt_find("person")); + CuAssertPtrEquals(tc, 0, rtype->itype); + CuAssertPtrNotNull(tc, rtype = rt_find("permaura")); + CuAssertPtrEquals(tc, 0, rtype->itype); + CuAssertPtrNotNull(tc, rtype = rt_find("hp")); + CuAssertPtrEquals(tc, 0, rtype->itype); + CuAssertPtrNotNull(tc, rtype = rt_find("aura")); + CuAssertPtrEquals(tc, 0, rtype->itype); + test_cleanup(); +} + CuSuite *get_item_suite(void) { CuSuite *suite = CuSuiteNew(); @@ -153,5 +174,6 @@ CuSuite *get_item_suite(void) SUITE_ADD_TEST(suite, test_finditemtype); SUITE_ADD_TEST(suite, test_findresourcetype); SUITE_ADD_TEST(suite, test_fix_demand); + SUITE_ADD_TEST(suite, test_core_resources); return suite; } diff --git a/src/kernel/messages.c b/src/kernel/messages.c index f7297f832..46329d66b 100644 --- a/src/kernel/messages.c +++ b/src/kernel/messages.c @@ -17,7 +17,6 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. **/ #include -#include #include "messages.h" /* kernel includes */ @@ -140,7 +139,7 @@ struct message *msg_feedback(const struct unit *u, struct order *ord, message *msg_message(const char *name, const char *sig, ...) /* msg_message("oops_error", "unit region command", u, r, cmd) */ { - va_list marker; + va_list vargs; const message_type *mtype = mt_find(name); char paramname[64]; const char *ic = sig; @@ -155,7 +154,7 @@ message *msg_message(const char *name, const char *sig, ...) return NULL; } - va_start(marker, sig); + va_start(vargs, sig); while (*ic && !isalnum(*ic)) ic++; while (*ic) { @@ -172,9 +171,9 @@ message *msg_message(const char *name, const char *sig, ...) } if (i != mtype->nparameters) { if (mtype->types[i]->vtype == VAR_VOIDPTR) { - args[i].v = va_arg(marker, void *); + args[i].v = va_arg(vargs, void *); } else if (mtype->types[i]->vtype == VAR_INT) { - args[i].i = va_arg(marker, int); + args[i].i = va_arg(vargs, int); } else { assert(!"unknown variant type"); } @@ -185,7 +184,7 @@ message *msg_message(const char *name, const char *sig, ...) while (*ic && !isalnum(*ic)) ic++; } - va_end(marker); + va_end(vargs); return msg_create(mtype, args); } diff --git a/src/kernel/messages.h b/src/kernel/messages.h index 83c0f2613..b9c07b0c9 100644 --- a/src/kernel/messages.h +++ b/src/kernel/messages.h @@ -22,6 +22,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. extern "C" { #endif +#include #include struct faction; diff --git a/src/kernel/messages.test.c b/src/kernel/messages.test.c new file mode 100644 index 000000000..e237ab8de --- /dev/null +++ b/src/kernel/messages.test.c @@ -0,0 +1,44 @@ +#include +#include "messages.h" + +#include +#include + +void test_missing_message(CuTest *tc) { + message *msg; + msg = msg_message("unknown", "unit", NULL); + CuAssertPtrNotNull(tc, msg); + CuAssertPtrNotNull(tc, msg->type); + CuAssertStrEquals(tc, msg->type->name, "missing_message"); + msg_release(msg); +} + +void test_message(CuTest *tc) { + message *msg; +// const char * args[] = { } + message_type *mtype = mt_new("custom", NULL); + mt_register(mtype); + CuAssertPtrEquals(tc, mtype, (void *)mt_find("custom")); + CuAssertIntEquals(tc, 0, mtype->nparameters); + CuAssertPtrEquals(tc, NULL, (void *)mtype->pnames); + CuAssertPtrEquals(tc, NULL, (void *)mtype->types); + msg = msg_message("custom", ""); + CuAssertPtrNotNull(tc, msg); + CuAssertIntEquals(tc, 1, msg->refcount); + CuAssertPtrEquals(tc, NULL, msg->parameters); + CuAssertPtrEquals(tc, mtype, (void *)msg->type); + + CuAssertPtrEquals(tc, msg, msg_addref(msg)); + CuAssertIntEquals(tc, 2, msg->refcount); + msg_release(msg); + CuAssertIntEquals(tc, 1, msg->refcount); + msg_release(msg); + test_cleanup(); +} + +CuSuite *get_messages_suite(void) { + CuSuite *suite = CuSuiteNew(); + SUITE_ADD_TEST(suite, test_missing_message); + SUITE_ADD_TEST(suite, test_message); + return suite; +} \ No newline at end of file diff --git a/src/kernel/race.c b/src/kernel/race.c index 14541346e..2919fdb8b 100644 --- a/src/kernel/race.c +++ b/src/kernel/race.c @@ -177,7 +177,11 @@ race *rc_get_or_create(const char *zName) rc = (race *)calloc(sizeof(race), 1); rc->hitpoints = 1; + rc->weight = PERSON_WEIGHT; + rc->capacity = 540; rc->recruit_multi = 1.0F; + rc->regaura = 1.0F; + rc->speed = 1.0F; if (strchr(zName, ' ') != NULL) { log_error("race '%s' has an invalid name. remove spaces\n", zName); assert(strchr(zName, ' ') == NULL); diff --git a/src/kernel/race.test.c b/src/kernel/race.test.c index 31c058bea..ef4fc640e 100644 --- a/src/kernel/race.test.c +++ b/src/kernel/race.test.c @@ -8,17 +8,43 @@ #include static void test_rc_name(CuTest *tc) { - struct race *rc = test_create_race("human"); + struct race *rc; + test_cleanup(); + rc = test_create_race("human"); CuAssertStrEquals(tc, "race::human", rc_name_s(rc, NAME_SINGULAR)); CuAssertStrEquals(tc, "race::human_p", rc_name_s(rc, NAME_PLURAL)); CuAssertStrEquals(tc, "race::human_d", rc_name_s(rc, NAME_DEFINITIVE)); CuAssertStrEquals(tc, "race::human_x", rc_name_s(rc, NAME_CATEGORY)); + test_cleanup(); +} + +static void test_rc_defaults(CuTest *tc) { + struct race *rc; + test_cleanup(); + rc = rc_get_or_create("human"); + CuAssertStrEquals(tc, "human", rc->_name); + CuAssertDblEquals(tc, 0.0, rc->magres, 0.0); + CuAssertDblEquals(tc, 0.0, rc->maxaura, 0.0); + CuAssertDblEquals(tc, 1.0, rc->recruit_multi, 0.0); + CuAssertDblEquals(tc, 1.0, rc->regaura, 0.0); + CuAssertDblEquals(tc, 1.0, rc->speed, 0.0); + CuAssertIntEquals(tc, 0, rc->flags); + CuAssertIntEquals(tc, 0, rc->recruitcost); + CuAssertIntEquals(tc, 0, rc->maintenance); + CuAssertIntEquals(tc, 540, rc->capacity); + CuAssertIntEquals(tc, 1, rc->hitpoints); + CuAssertIntEquals(tc, 0, rc->armor); + CuAssertIntEquals(tc, 0, rc->at_bonus); + CuAssertIntEquals(tc, 0, rc->df_bonus); + CuAssertIntEquals(tc, PERSON_WEIGHT, rc->weight); + test_cleanup(); } CuSuite *get_race_suite(void) { CuSuite *suite = CuSuiteNew(); SUITE_ADD_TEST(suite, test_rc_name); + SUITE_ADD_TEST(suite, test_rc_defaults); return suite; } diff --git a/src/kernel/xmlreader.c b/src/kernel/xmlreader.c index 1b1c6b356..5061abb07 100644 --- a/src/kernel/xmlreader.c +++ b/src/kernel/xmlreader.c @@ -1626,22 +1626,22 @@ static int parse_races(xmlDocPtr doc) rc->def_damage = _strdup((const char *)propValue); xmlFree(propValue); - rc->magres = (float)xml_fvalue(node, "magres", 0.0); - rc->maxaura = (float)xml_fvalue(node, "maxaura", 0.0); - rc->regaura = (float)xml_fvalue(node, "regaura", 1.0); - rc->recruitcost = xml_ivalue(node, "recruitcost", 0); - rc->maintenance = xml_ivalue(node, "maintenance", 0); - rc->weight = xml_ivalue(node, "weight", PERSON_WEIGHT); - rc->capacity = xml_ivalue(node, "capacity", 540); - rc->speed = (float)xml_fvalue(node, "speed", 1.0F); - rc->hitpoints = xml_ivalue(node, "hp", 0); - rc->armor = (char)xml_ivalue(node, "ac", 0); + rc->magres = (float)xml_fvalue(node, "magres", rc->magres); + rc->maxaura = (float)xml_fvalue(node, "maxaura", rc->maxaura); + rc->regaura = (float)xml_fvalue(node, "regaura", rc->regaura); + rc->recruitcost = xml_ivalue(node, "recruitcost", rc->recruitcost); + rc->maintenance = xml_ivalue(node, "maintenance", rc->maintenance); + rc->weight = xml_ivalue(node, "weight", rc->weight); + rc->capacity = xml_ivalue(node, "capacity", rc->capacity); + rc->speed = (float)xml_fvalue(node, "speed", rc->speed); + rc->hitpoints = xml_ivalue(node, "hp", rc->hitpoints); + rc->armor = (char)xml_ivalue(node, "ac", rc->armor); study_speed_base = xml_ivalue(node, "studyspeed", 0); rc->at_default = (char)xml_ivalue(node, "unarmedattack", -2); rc->df_default = (char)xml_ivalue(node, "unarmeddefense", -2); - rc->at_bonus = (char)xml_ivalue(node, "attackmodifier", 0); - rc->df_bonus = (char)xml_ivalue(node, "defensemodifier", 0); + rc->at_bonus = (char)xml_ivalue(node, "attackmodifier", rc->at_bonus); + rc->df_bonus = (char)xml_ivalue(node, "defensemodifier", rc->df_bonus); if (!xml_bvalue(node, "playerrace", false)) rc->flags |= RCF_NPC; diff --git a/src/laws.c b/src/laws.c index 761ddab00..693df8f5c 100755 --- a/src/laws.c +++ b/src/laws.c @@ -4347,17 +4347,17 @@ void init_processor(void) add_proc_order(p, K_GROUP, group_cmd, 0, NULL); p += 10; - add_proc_order(p, K_QUIT, quit_cmd, 0, NULL); - add_proc_order(p, K_URSPRUNG, origin_cmd, 0, NULL); - add_proc_order(p, K_ALLY, ally_cmd, 0, NULL); - add_proc_order(p, K_PREFIX, prefix_cmd, 0, NULL); - add_proc_order(p, K_SETSTEALTH, setstealth_cmd, 0, NULL); - add_proc_order(p, K_STATUS, status_cmd, 0, NULL); - add_proc_order(p, K_COMBATSPELL, combatspell_cmd, 0, NULL); - add_proc_order(p, K_DISPLAY, display_cmd, 0, NULL); - add_proc_order(p, K_NAME, name_cmd, 0, NULL); - add_proc_order(p, K_GUARD, guard_off_cmd, 0, NULL); - add_proc_order(p, K_RESHOW, reshow_cmd, 0, NULL); + add_proc_order(p, K_QUIT, &quit_cmd, 0, NULL); + add_proc_order(p, K_URSPRUNG, &origin_cmd, 0, NULL); + add_proc_order(p, K_ALLY, &ally_cmd, 0, NULL); + add_proc_order(p, K_PREFIX, &prefix_cmd, 0, NULL); + add_proc_order(p, K_SETSTEALTH, &setstealth_cmd, 0, NULL); + add_proc_order(p, K_STATUS, &status_cmd, 0, NULL); + add_proc_order(p, K_COMBATSPELL, &combatspell_cmd, 0, NULL); + add_proc_order(p, K_DISPLAY, &display_cmd, 0, NULL); + add_proc_order(p, K_NAME, &name_cmd, 0, NULL); + add_proc_order(p, K_GUARD, &guard_off_cmd, 0, NULL); + add_proc_order(p, K_RESHOW, &reshow_cmd, 0, NULL); if (get_param_int(global.parameters, "rules.alliances", 0) == 1) { p += 10; diff --git a/src/test_eressea.c b/src/test_eressea.c index b8ff259b6..ca6ebf604 100644 --- a/src/test_eressea.c +++ b/src/test_eressea.c @@ -71,6 +71,7 @@ int RunAllTests(void) RUN_TESTS(suite, building); RUN_TESTS(suite, spell); RUN_TESTS(suite, ally); + RUN_TESTS(suite, messages); /* gamecode */ RUN_TESTS(suite, battle); RUN_TESTS(suite, economy); diff --git a/src/util/message.c b/src/util/message.c index 7e9c1a9f0..79c1949f5 100644 --- a/src/util/message.c +++ b/src/util/message.c @@ -146,7 +146,7 @@ message *msg_create(const struct message_type *mtype, variant args[]) return NULL; } msg->type = mtype; - msg->parameters = (variant *) calloc(mtype->nparameters, sizeof(variant)); + msg->parameters = (variant *)(mtype->nparameters ? calloc(mtype->nparameters, sizeof(variant)) : NULL); msg->refcount = 1; for (i = 0; i != mtype->nparameters; ++i) { msg->parameters[i] = copy_arg(mtype->types[i], args[i]);