Quest Trees

All quests ★ Collector only
Required for Collector Marked done ← Trader Cross-trader dependency
{% macro render_node(qid, quest_by_id, children, visible, collector_prereqs) %} {% set q = quest_by_id[qid] %} {% set visible_kids = [] %} {% for cid in children.get(qid, []) %} {% if cid in visible %}{% set _ = visible_kids.append(cid) %}{% endif %} {% endfor %}
{% if qid in collector_prereqs %}{% endif %} {{ q.name }} {% if q.wiki_link %}wiki{% endif %}
{% if visible_kids %}
{% for cid in visible_kids %} {% set child = quest_by_id[cid] %} {% if child.trader != q.trader %}
{% if cid in collector_prereqs %}{% endif %} {{ child.name }} {% if child.wiki_link %}wiki{% endif %} ← {{ child.trader }}
{% else %} {{ render_node(cid, quest_by_id, children, visible, collector_prereqs) }} {% endif %} {% endfor %}
{% endif %}
{% endmacro %} {% for trader in traders %} {% set roots = trader_roots[trader] %} {% set total_trader = namespace(n=0) %} {% set done_trader = namespace(n=0) %} {# count visible quests for this trader #} {% for qid in visible %} {% if quest_by_id[qid].trader == trader %} {% set total_trader.n = total_trader.n + 1 %} {% if quest_by_id[qid].done %}{% set done_trader.n = done_trader.n + 1 %}{% endif %} {% endif %} {% endfor %}
{{ trader }} {{ done_trader.n }} / {{ total_trader.n }}
{% for root_id in roots %} {{ render_node(root_id, quest_by_id, children, visible, collector_prereqs) }} {% endfor %}
{% endfor %}