From 39e3001a5062ad9670e04fdbad28982f5d584300 Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Sun, 6 Oct 2019 20:42:47 +0200 Subject: [PATCH] start implementing give_ship --- scripts/tests/e2/ships.lua | 27 +++++++++++++++++++++++++++ src/give.c | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/scripts/tests/e2/ships.lua b/scripts/tests/e2/ships.lua index ad4e3656c..a50182c0d 100644 --- a/scripts/tests/e2/ships.lua +++ b/scripts/tests/e2/ships.lua @@ -163,3 +163,30 @@ function test_ship_convoy_skill() process_orders() assert_equal(r3, u.region) end + +function test_give_ship() + local r = region.create(1, 0, 'ocean') + local f = faction.create("human") + local u1 = unit.create(f, r, 1) + local u2 = unit.create(f, r, 1) + u1.ship = ship.create(r, 'boat') + u1.ship.number = 2 + u1:add_order("GIB " .. itoa36(u2.id) .. " 1 SCHIFF") + process_orders() + assert_equal(1, u1.ship.number) + assert_equal(1, u2.ship.number) +end + +function test_give_ship_merge() + local r = region.create(1, 0, 'ocean') + local f = faction.create("human") + local u1 = unit.create(f, r, 1) + local u2 = unit.create(f, r, 1) + u2.ship = ship.create(r, 'boat') + u1.ship = ship.create(r, 'boat') + u1.ship.number = 2 + u1:add_order("GIB " .. itoa36(u2.id) .. " 1 SCHIFF") + process_orders() + assert_equal(1, u1.ship.number) + assert_equal(2, u2.ship.number) +end diff --git a/src/give.c b/src/give.c index ba04e69a6..036a7ae04 100644 --- a/src/give.c +++ b/src/give.c @@ -293,6 +293,14 @@ bool rule_transfermen(void) return rule != 0; } +message * give_ship(unit *u, unit *u2, int n, order *ord) { + assert(u->ship); + if (u->ship->number < n) { + n = u->ship->number; + } + return NULL; +} + message * give_men(int n, unit * u, unit * u2, struct order *ord) { int error = 0; @@ -652,7 +660,19 @@ static void give_all_items(unit *u, unit *u2, order *ord) { } } else { - if (isparam(s, u->faction->locale, P_PERSON)) { + param_t p = findparam(s, u->faction->locale); + if (p == P_SHIP) { + if (u->ship) { + message * msg = give_ship(u, u2, u->ship->number, ord); + if (msg) { + ADDMSG(&u->faction->msgs, msg); + } + } + else { + cmistake(u, ord, 144, MSG_COMMERCE); + } + } + else if (p == P_PERSON) { if (!(u_race(u)->ec_flags & ECF_GIVEPERSON)) { ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "race_noregroup", "race", u_race(u))); @@ -815,7 +835,19 @@ void give_cmd(unit * u, order * ord) return; } - if (isparam(s, u->faction->locale, P_PERSON)) { + p = findparam(s, u->faction->locale); + if (p == P_SHIP) { + if (u->ship) { + message * msg = give_ship(u, u2, n, ord); + if (msg) { + ADDMSG(&u->faction->msgs, msg); + } + } + else { + cmistake(u, ord, 144, MSG_COMMERCE); + } + } + else if (p == P_PERSON) { if (!(u_race(u)->ec_flags & ECF_GIVEPERSON)) { ADDMSG(&u->faction->msgs, msg_feedback(u, ord, "race_noregroup", "race", u_race(u)));