=> /villages Overview # {{ village.name }} - {{ village.x }} x {{ village.y }} => /map/{{ village.x }}/{{ village.y }} Map - {{ village.x }} x {{ village.y }} Satisfaction: {{ village.satisfaction }} # Resources Wood: {{ village.wood }} / {{ village.getStorage(village.id).getResourceCapacity('wood') }} - Increment: {{ village.getBuilding(village.id, 'WoodCutter').getResourceIncrementor() }} Clay: {{ village.clay }} / {{ village.getStorage(village.id).getResourceCapacity('clay') }} - Increment: {{ village.getBuilding(village.id, 'ClayPit').getResourceIncrementor() }} Iron: {{ village.iron }} / {{ village.getStorage(village.id).getResourceCapacity('iron') }} - Increment: {{ village.getBuilding(village.id, 'IronMine').getResourceIncrementor() }} Food: {{ village.food }} / {{ village.getStorage(village.id).getResourceCapacity('food') }} - Increment: {{ village.getBuilding(village.id, 'Farm').getResourceIncrementor() }} Storage Capacity: {{ village.getStorage(village.id).getCapacity() }} => /village/{{ village.x }}/{{ village.y }}/storage/config Configure Storage # Events {% if events['UpgradeBuilding'] %} ## Upgrade Building {% for typeEvents in events['UpgradeBuilding'] %} {% for event in typeEvents %} ### {{ event.type }} Finished: {{ event.event.time | date('c') }} => /village/{{ village.x }}/{{ village.y }}/building/UpgradeBuilding/build/cancel Cancel {% endfor %} {% endfor %} {% endif %} {% if events['TrainUnits'] %} ## Train Units {% for event in events['TrainUnits'] %} ### {{ event.type }} Amount: {{ event.amount }} Finished: {{ event.event.time | date('c') }} => /village/{{ village.x }}/{{ village.y }}/unit/train/cancel Cancel {% endfor %} {% endif %} {% if events['SendUnits'] %} ## Send Units {% for event in events['SendUnits'] %} ### {{ event.unit }} - {{ event.type }} Amount: {{ event.amount }} Source: {{ village.get(event.source).name }} Destination: {{ village.get(event.destination).name }} Finished: {{ event.event.time | date('c') }} {% if event.isCanceled %} Canceled {% else %} {% if event.event.villageId == village.id %} => /event/{{ event.event.id }}/cancel Cancel {% endif %} {% endif %} {% endfor %} {% endif %} # Buildings {% for building in buildings %} ## {{ building.type }} Level: {{ building.level | default(0) }} Build Time: {{ building.getBuildTimeForLevel(building.getEffectiveLevel() + 1) | buildTime }} Resources: * Wood: {{ building.getResourceRequirementsForLevel(building.getEffectiveLevel() + 1)['wood'] }} * Clay: {{ building.getResourceRequirementsForLevel(building.getEffectiveLevel() + 1)['clay'] }} * Iron: {{ building.getResourceRequirementsForLevel(building.getEffectiveLevel() + 1)['iron'] }} => /village/{{ village.x }}/{{ village.y }}/building/{{ building.type }}/manage Manage {% if village.canBuild(village, building) %} => /village/{{ village.x }}/{{ village.y }}/building/{{ building.type }}/level-up Level up {% endif %} {% endfor %} # Units At Home {% for unit in village.getUnits(village.id, 1, 3) %} ## {{ unit.type }} Amount: {{ unit.amount }} {% if not unit.isTraveling %} Build Time: {{ unit.getBuildTime(1) | buildTime }} Resources: * Wood: {{ unit.getResourceRequirements(unit, 1)['wood'] }} * Clay: {{ unit.getResourceRequirements(unit, 1)['clay'] }} * Iron: {{ unit.getResourceRequirements(unit, 1)['iron'] }} * Food: {{ unit.getResourceRequirements(unit, 1)['food'] ?? 0 }} {% if village.canTrain(village, unit, 1) %} => /village/{{ village.x }}/{{ village.y }}/unit/{{ unit.type }}/create Train {% endif %} => /village/{{ village.x }}/{{ village.y }}/send-units/type/{{ unit.type }} Send {% else %} ~traveling~ {% endif %} {% endfor %} # Units Supporting {% for unit in village.getUnits(village.id, 2) | merge(village.getUnits(village.id, 3)) %} ## {{ unit.type }} Amount: {{ unit.amount }} Origin: {{ village.get(unit.homeVillageId).name }} Location: {{ not unit.isTraveling ? village.get(unit.residenceVillageId).name : '~traveling~' }} Travel Time: {{ unit.getTravelTime(unit, village.getDistance(unit.getHomeVillage().x, unit.getHomeVillage().x, unit.getResidenceVillage().x, unit.getResidenceVillage().y)) | buildTime }} {% if not unit.isTraveling %} {% if unit.homeVillageId == village.id %} => /village/{{ village.x }}/{{ village.y }}/unit/{{ unit.type }}/location/{{ unit.getResidenceVillage().x }}/{{ unit.getResidenceVillage().y }}/recall Recall Home {% else %} => /village/{{ village.x }}/{{ village.y }}/unit/{{ unit.type }}/location/{{ unit.getHomeVillage().x }}/{{ unit.getHomeVillage().y }}/send-back Send Back {% endif %} {% endif %} {% endfor %} # Send Units {% include 'send-units/01-units.twig' %} # Send Resources TODO * list possible resource types => /village/{{ village.x }}/{{ village.y }}/send-resources/type/wood Wood => /village/{{ village.x }}/{{ village.y }}/send-resources/type/clay Clay => /village/{{ village.x }}/{{ village.y }}/send-resources/type/iron Iron => /village/{{ village.x }}/{{ village.y }}/send-resources/type/food Food * list possible villages * send INPUT request for amount {% include 'footer.twig' %}