Quest Trees
{% 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 %}
{% for root_id in roots %}
{{ render_node(root_id, quest_by_id, children, visible, collector_prereqs) }}
{% endfor %}
{% endfor %}