diff --git a/app.py b/app.py index 3fb0120..73d61e4 100644 --- a/app.py +++ b/app.py @@ -326,6 +326,8 @@ class Handler(BaseHTTPRequestHandler): if path == "/api/order": return game.post_order(world, player, body.get("kind"), str(item), qty, body.get("provide"), body.get("reward"), now) + if path == "/api/order/provide": + return game.provide_reagent(world, player, body.get("id"), str(item)) if path == "/api/order/cancel": return game.cancel_order(world, player, body.get("id"), now) if path == "/api/order/work": diff --git a/game.py b/game.py index 5a2ddad..3b6d093 100644 --- a/game.py +++ b/game.py @@ -2125,6 +2125,22 @@ def post_order(world: dict, player: dict, kind: str, item: str, qty, provide, re return None +def provide_reagent(world: dict, player: dict, order_id, item: str) -> str | None: + """Put a reagent into your own order after posting it, enough for what's still to be made.""" + order = order_by_id(world, order_id) + if not order or order["by"] != player["id"] or order["status"] != "open" or order["kind"] != "craft": + return "No such order" + action = ACTION_BY_ID[order["action"]] + if item not in action["inputs"] or item in order["provided"]: + return "Already provided" if item in order["provided"] else "That isn't in the recipe" + need = action["inputs"][item] * _batches(action, order["item"], order["qty"] - order["delivered"]) + if player["bank"].get(item, 0) < need: + return f"{ITEMS[item]['name']}: {player['bank'].get(item, 0)} / {need}" + bank_take(player, item, need) + order["provided"][item] = need + return None + + def _refund(world: dict, order: dict, now: float) -> None: owner = world["players"].get(order["by"]) if not owner: diff --git a/static/app.js b/static/app.js index dabf582..b96874b 100644 --- a/static/app.js +++ b/static/app.js @@ -90,7 +90,7 @@ async function refresh() { function accept(state) { version ??= state.version; - if (state.version !== version && !document.querySelector("[data-keep]:focus") && $("#modal").hidden) { + if (state.version !== version && !document.querySelector("[data-keep]:focus") && $("#modal").hidden && !draft) { location.reload(); // a new build was deployed return; } @@ -1197,8 +1197,12 @@ function orderSlots(o) { ${fmt(per * all)}✓`; } const need = per * (o.status === "open" ? left : all), have = S.me.bank[id] || 0; - return `