diff --git a/scripts/tests/laws.lua b/scripts/tests/laws.lua index f52592107..c82a5f67a 100644 --- a/scripts/tests/laws.lua +++ b/scripts/tests/laws.lua @@ -10,11 +10,17 @@ function setup() eressea.free_game() conf = [[{ "races": { - "human" : { "flags" : [ "player" ] } + "human" : { "flags" : [ "player", "giveperson" ] } }, "terrains" : { "plain": { "flags" : [ "land", "walk", "sail" ] } }, + "parameters" : { + "de" : { + "EINHEIT": "EINHEIT", + "PERSONEN": "PERSONEN" + } + }, "keywords" : { "de": { "attack" : "ATTACKIERE", @@ -22,12 +28,21 @@ function setup() "maketemp" : "MACHETEMP", "end" : "ENDE", "use" : "BENUTZEN", + "forget" : "VERGISS", + "give" : "GIB", "recruit" : "REKRUTIERE" } }, "buildings" : { "castle" : {} }, + "skills" : { + "de": { + "tactics" : "Taktik", + "alchemy" : "Alchemie", + "crossbow" : "Armbrust" + } + }, "items" : { "sword" : { "weapon" : { @@ -149,3 +164,19 @@ function test_force_leave_postcombat() assert_equal(1, u3.number) end +function test_give_and_forget() + local r = region.create(0, 0, "plain") + local f = faction.create("human") + local u1 = unit.create(f, r, 1) + local u2 = unit.create(f, r, 1) + u1.name = 'Xolgrim' + u1:set_skill('alchemy', 1) + u1:set_skill('crossbow', 1) + u2:set_skill('alchemy', 1) + u1:set_orders("GIB " .. itoa36(u2.id) .. " 1 PERSON\nVERGISS Armbrust") + process_orders() + assert_equal(0, u1.number) + assert_equal(2, u2.number) + assert_equal(0, u2:get_skill('crossbow')) + assert_equal(1, u2:get_skill('alchemy')) +end diff --git a/src/economy.c b/src/economy.c index 9011eb435..0ca418be7 100644 --- a/src/economy.c +++ b/src/economy.c @@ -377,7 +377,7 @@ void maintain_buildings(region * r) } } -void economics(region * r) +void do_give(region * r) { unit *u; @@ -401,9 +401,6 @@ void economics(region * r) transfer = ord; } } - else if (kwd == K_FORGET) { - forget_cmd(u, ord); - } if (u->orders == NULL) { break; } diff --git a/src/economy.h b/src/economy.h index 4b29acf14..a6e89db59 100644 --- a/src/economy.h +++ b/src/economy.h @@ -63,7 +63,7 @@ extern "C" { int income(const struct unit *u); int entertainmoney(const struct region *r); - void economics(struct region *r); + void do_give(struct region *r); void destroy(struct region *r); void produce(struct region *r); void auto_work(struct region *r); diff --git a/src/give.c b/src/give.c index 462f4a15e..2ead3600c 100644 --- a/src/give.c +++ b/src/give.c @@ -906,7 +906,7 @@ param_t give_cmd(unit * u, order * ord) return p; } else if (p == NOPARAM) { - /* the most likely case: giving items to someone. + /* the most likely case: giving items, ships, or persons. * let's catch this and save ourselves the rest of the param_t checks. */ } diff --git a/src/laws.c b/src/laws.c index 70ff0f186..1ba499236 100644 --- a/src/laws.c +++ b/src/laws.c @@ -3704,12 +3704,13 @@ void init_processor(void) p += 10; /* in case it has any effects on alliance victories */ add_proc_order(p, K_GIVE, give_control_cmd, 0, "GIB KOMMANDO"); + add_proc_order(p, K_FORGET, forget_cmd, 0, "Vergessen"); p += 10; /* reset rng again before economics */ if (rule_force_leave(FORCE_LEAVE_ALL)) { add_proc_region(p, do_force_leave, "kick non-allies out of buildings/ships"); } - add_proc_region(p, economics, "Geben, Vergessen"); + add_proc_region(p, do_give, "Geben"); add_proc_region(p+1, recruit, "Rekrutieren"); add_proc_region(p+2, destroy, "Zerstoeren"); add_proc_unit(p, follow_cmds, "Folge auf Einheiten setzen");