<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:include schemaLocation="../global_types.xsd" />
<xs:include schemaLocation="../import.xsd" />
<xs:element name="spawns" type="SpawnsData" />
<xs:complexType name="SpawnsData">
<xs:sequence>
<xs:element ref="import" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="spawn_map" type="SpawnMap" minOccurs="0" maxOccurs="unbounded">
<xs:unique name="unique-npc-id"><!-- a spawn entry must be unique per npc_id (see SpawnData#afterUnmarshal) -->
<!-- entry with same npc_id may appear twice if one has custom="true" -->
<xs:selector xpath="spawn" />
<xs:field xpath="@npc_id" />
<xs:field xpath="@custom" />
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="SpawnMap">
<xs:sequence>
<xs:element name="spawn" type="Spawn" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="base_spawn" type="BaseSpawn" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="rift_spawn" type="RiftSpawn" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="siege_spawn" type="SiegeSpawn" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="vortex_spawn" type="VortexSpawn" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="mercenary_spawn" type="MercenarySpawn" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="ahserion_spawn" type="AhserionsFlightSpawn" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="map_id" type="xs:int"/>
</xs:complexType>
<xs:complexType name="BaseSpawn">
<xs:sequence>
<xs:element name="occupier_template" type="BaseOccupierTemplate" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:int"/>
<xs:attribute name="world" type="xs:int"/>
</xs:complexType>
<xs:complexType name="BaseOccupierTemplate">
<xs:sequence>
<xs:element name="spawn" type="Spawn" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="occupier" type="BaseOccupier" use="required" />
</xs:complexType>
<xs:complexType name="RiftSpawn">
<xs:sequence>
<xs:element name="spawn" type="Spawn" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:int"/>
<xs:attribute name="world" type="xs:int"/>
</xs:complexType>
<xs:complexType name="VortexSpawn">
<xs:sequence>
<xs:element name="state_type" type="VortexStateTemplate" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:int"/>
</xs:complexType>
<xs:complexType name="VortexStateTemplate">
<xs:sequence>
<xs:element name="spawn" type="Spawn" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="state" type="StateType"/>
</xs:complexType>
<xs:complexType name="AhserionsFlightSpawn">
<xs:sequence>
<xs:element name="ahserion_stage_spawn" type="AhserionStageSpawnTemplate" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="faction" type="PanesterraFaction"/>
</xs:complexType>
<xs:complexType name="AhserionStageSpawnTemplate">
<xs:sequence>
<xs:element name="spawn" type="Spawn" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="stage" type="xs:int"/>
</xs:complexType>
<xs:simpleType name="PanesterraFaction">
<xs:restriction base="xs:string">
<xs:enumeration value="BELUS"/>
<xs:enumeration value="ASPIDA"/>
<xs:enumeration value="ATANATOS"/>
<xs:enumeration value="DISILLON"/>
<xs:enumeration value="BALAUR"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="StateType">
<xs:restriction base="xs:string">
<xs:enumeration value="INVASION"/>
<xs:enumeration value="PEACE"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="SiegeSpawn">
<xs:sequence>
<xs:element name="siege_race" type="SiegeRaceTemplate" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="siege_id" type="xs:int"/>
</xs:complexType>
<xs:complexType name="SiegeRaceTemplate">
<xs:sequence>
<xs:element name="siege_mod" type="SiegeModTemplate" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="race" type="SiegeRaceType"/>
</xs:complexType>
<xs:complexType name="SiegeModTemplate">
<xs:sequence>
<xs:element name="spawn" type="Spawn" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="mod" type="SiegeModType"/>
</xs:complexType>
<xs:complexType name="MercenarySpawn">
<xs:sequence>
<xs:element name="mercenary_race" type="MercenaryRace" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="siege_id" type="xs:int"/>
</xs:complexType>
<xs:complexType name="MercenaryRace">
<xs:sequence>
<xs:element name="mercenary_zone" type="MercenaryZone" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="race" type="Race"/>
</xs:complexType>
<xs:complexType name="MercenaryZone">
<xs:sequence>
<xs:element name="spawn" type="Spawn" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="zone" type="xs:int"/>
</xs:complexType>
<xs:complexType name="Spawn">
<xs:sequence>
<xs:element name="temporary_spawn" type="TemporarySpawn" minOccurs="0" maxOccurs="1"/>
<xs:element name="spot" type="SpawnSpotTemplate" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="npc_id" type="xs:int" use="required"/>
<xs:attribute name="pool" type="xs:int" use="optional"/>
<xs:attribute name="respawn_time" type="xs:int"/>
<xs:attribute name="handler" type="SpawnHandlerType"/>
<xs:attribute name="custom" type="xs:boolean" use="optional" default="false"/>
<xs:attribute name="difficult_id" type="xs:byte"/>
</xs:complexType>
<xs:complexType name="SpawnSpotTemplate">
<xs:sequence>
<xs:element name="temporary_spawn" type="TemporarySpawn" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="x" type="xs:float"/>
<xs:attribute name="y" type="xs:float"/>
<xs:attribute name="z" type="xs:float"/>
<xs:attribute name="h" type="HeadingType" use="optional" default="0"/>
<xs:attribute name="static_id" type="xs:int" use="optional" default="0"/>
<xs:attribute name="random_walk" type="xs:int" use="optional" default="0"/>
<xs:attribute name="walker_id" type="xs:string"/>
<xs:attribute name="walker_index" type="xs:int" use="optional" default="0"/>
<xs:attribute name="fly" type="xs:int" use="optional" default="0"/>
<xs:attribute name="anchor" type="xs:string"/>
<xs:attribute name="state" type="xs:int" use="optional" default="0"/>
<xs:attribute name="ai" type="xs:string"/>
</xs:complexType>
<xs:complexType name="TemporarySpawn">
<xs:attribute name="weekdays" type="WeekdayList"/>
<xs:attribute name="spawn_time" type="xs:string"/>
<xs:attribute name="despawn_time" type="xs:string"/>
</xs:complexType>
<xs:simpleType name="WeekdayList">
<xs:list itemType="Weekday" />
</xs:simpleType>
<xs:simpleType name="Weekday">
<xs:restriction base="xs:string">
<xs:enumeration value="MONDAY"/>
<xs:enumeration value="TUESDAY"/>
<xs:enumeration value="WEDNESDAY"/>
<xs:enumeration value="THURSDAY"/>
<xs:enumeration value="FRIDAY"/>
<xs:enumeration value="SATURDAY"/>
<xs:enumeration value="SUNDAY"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SiegeModType">
<xs:restriction base="xs:string">
<xs:enumeration value="PEACE"/>
<xs:enumeration value="SIEGE"/>
<xs:enumeration value="LANDING"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="HeadingType">
<xs:restriction base="xs:byte">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SiegeRaceType">
<xs:restriction base="xs:string">
<xs:enumeration value="ELYOS"/>
<xs:enumeration value="ASMODIANS"/>
<xs:enumeration value="BALAUR"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="SpawnHandlerType">
<xs:restriction base="xs:string">
<xs:enumeration value="ATTACKER"/>
<xs:enumeration value="BOSS"/>
<xs:enumeration value="FLAG"/>
<xs:enumeration value="GUARDIAN"/>
<xs:enumeration value="MERCHANT"/>
<xs:enumeration value="OUTRIDER"/>
<xs:enumeration value="OUTRIDER_ENHANCED"/>
<xs:enumeration value="RIFT"/>
<xs:enumeration value="SENTINEL"/>
<xs:enumeration value="STATIC"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>