header = """<Profile>
<Name>Favor - __CITEM__ - __ZONE__</Name>
<Order>
<If Condition="not IsOnMap(__MAPID__)">
<TeleportTo AetheryteId="__AETHERYTE__" />
</If>
<FlyTo XYZ="__SPOT1__" Altitude="__ALTITUDEARRIVAL__" MountId="45" Radius="1.0" />
<While Condition="True">
<If Condition="not IsOnMap(__MAPID__)">
<TeleportTo AetheryteId="__AETHERYTE__" />
</If>"""
ender = """ </While>
</Order>
</Profile>"""
gather =""" <Gather loops="2">
<GatherObject>__SPOTNAME__</GatherObject>
<HotSpots>
<HotSpot Radius="150" XYZ="__SPOT__" name="__SPOTNAME__" />
</HotSpots>
__ITEMS__
</Gather>"""
flyto = """ <FlyTo XYZ="__SPOT__" Altitude="__ALTITUDE__" MountId="45" Radius="1.0" />"""
itemtotal = """<ItemNames>
__ITEMLST__ </ItemNames>"""
singleitem = """ <ItemName>__NITEM__</ItemName>
"""
def generateProfile(spots, altitude, altForArrival, normalItems, concealedItems, spotNameNormal, spotNameConcealed, zoneID, AetheryteId):
h = header
h=h.replace("__CITEM__", concealedItems[0])
h=h.replace("__MAPID__", zoneID)
h=h.replace("__ALTITUDEARRIVAL__", altForArrival)
h=h.replace("__SPOT1__", spots[0])
h=h.replace("__AETHERYTE__", AetheryteId)
spotstr = ""
for spot in spots:
spotstr+=getGatherSpot(spot, altitude, normalItems, concealedItems, spotNameNormal, spotNameConcealed)
spotstr+="\n"
return h+spotstr+ender
def getGatherSpot(spot, altitude, normalItems, concealedItems, spotNameNormal, spotNameConcealed):
ft = flyto
ft = ft.replace("__SPOT__", spot)
ft = ft.replace("__ALTITUDE__", altitude)
ngather = getSingleGather(spot, normalItems, spotNameNormal)
cgather = getSingleGather(spot, concealedItems, spotNameConcealed)
return ft+"\n\n"+ngather+"\n\n"+cgather
def getSingleGather(spot, items, spotName):
s = gather
s = s.replace("__SPOT__", spot)
s = s.replace("__SPOTNAME__", spotName)
itemstr = itemtotal
itemlist = ""
for item in items:
sitem = singleitem
sitem = sitem.replace("__NITEM__", item)
itemlist=itemlist+sitem
itemstr = itemstr.replace("__ITEMLST__", itemlist)
s = s.replace("__ITEMS__", itemstr)
return s
print generateProfile(spots=["518.2427, -111.9493, 429.0835", "723.8118, -97.36623, 453.2475", "667.0069, -124.9072, 325.6782"],
altitude="-92",
altForArrival="-85",
normalItems=["Aurum Regis Sand"],
concealedItems=["Violet Roundstone", "Violet Ooid"],
spotNameNormal="Mineral Deposit",
spotNameConcealed="Concealed Mineral Deposit",
zoneID="401",
AetheryteId="72")
aGVhZGVyID0gIiIiPFByb2ZpbGU+Cgk8TmFtZT5GYXZvciAtIF9fQ0lURU1fXyAtIF9fWk9ORV9fPC9OYW1lPgoJPE9yZGVyPgoJCTxJZiBDb25kaXRpb249Im5vdCBJc09uTWFwKF9fTUFQSURfXykiPgoJCQk8VGVsZXBvcnRUbyBBZXRoZXJ5dGVJZD0iX19BRVRIRVJZVEVfXyIgLz4KCQk8L0lmPgoJCQk8Rmx5VG8gWFlaPSJfX1NQT1QxX18iIEFsdGl0dWRlPSJfX0FMVElUVURFQVJSSVZBTF9fIiBNb3VudElkPSI0NSIgUmFkaXVzPSIxLjAiIC8+CgkJCTxXaGlsZSBDb25kaXRpb249IlRydWUiPgoJCQk8SWYgQ29uZGl0aW9uPSJub3QgSXNPbk1hcChfX01BUElEX18pIj4KCQkJCTxUZWxlcG9ydFRvIEFldGhlcnl0ZUlkPSJfX0FFVEhFUllURV9fIiAvPgoJCQk8L0lmPiIiIgplbmRlciA9ICIiIgkJPC9XaGlsZT4KCTwvT3JkZXI+CjwvUHJvZmlsZT4iIiIKZ2F0aGVyID0iIiIJCQk8R2F0aGVyIGxvb3BzPSIyIj4KCQkJCTxHYXRoZXJPYmplY3Q+X19TUE9UTkFNRV9fPC9HYXRoZXJPYmplY3Q+CgkJCQk8SG90U3BvdHM+CgkJCQkJPEhvdFNwb3QgUmFkaXVzPSIxNTAiIFhZWj0iX19TUE9UX18iIG5hbWU9Il9fU1BPVE5BTUVfXyIgLz4KCQkJCTwvSG90U3BvdHM+CgkJCQlfX0lURU1TX18KCQkJPC9HYXRoZXI+IiIiCmZseXRvID0gIiIiCQkJPEZseVRvIFhZWj0iX19TUE9UX18iIEFsdGl0dWRlPSJfX0FMVElUVURFX18iIE1vdW50SWQ9IjQ1IiBSYWRpdXM9IjEuMCIgLz4iIiIKaXRlbXRvdGFsID0gIiIiPEl0ZW1OYW1lcz4KX19JVEVNTFNUX18JCQkJPC9JdGVtTmFtZXM+IiIiCnNpbmdsZWl0ZW0gPSAiIiIJCQkJCTxJdGVtTmFtZT5fX05JVEVNX188L0l0ZW1OYW1lPgoiIiIKCmRlZiBnZW5lcmF0ZVByb2ZpbGUoc3BvdHMsIGFsdGl0dWRlLCBhbHRGb3JBcnJpdmFsLCBub3JtYWxJdGVtcywgY29uY2VhbGVkSXRlbXMsIHNwb3ROYW1lTm9ybWFsLCBzcG90TmFtZUNvbmNlYWxlZCwgem9uZUlELCBBZXRoZXJ5dGVJZCk6CgloID0gaGVhZGVyCgloPWgucmVwbGFjZSgiX19DSVRFTV9fIiwgY29uY2VhbGVkSXRlbXNbMF0pCgloPWgucmVwbGFjZSgiX19NQVBJRF9fIiwgem9uZUlEKQoJaD1oLnJlcGxhY2UoIl9fQUxUSVRVREVBUlJJVkFMX18iLCBhbHRGb3JBcnJpdmFsKQoJaD1oLnJlcGxhY2UoIl9fU1BPVDFfXyIsIHNwb3RzWzBdKQoJaD1oLnJlcGxhY2UoIl9fQUVUSEVSWVRFX18iLCBBZXRoZXJ5dGVJZCkKCXNwb3RzdHIgPSAiIgoJZm9yIHNwb3QgaW4gc3BvdHM6CgkJc3BvdHN0cis9Z2V0R2F0aGVyU3BvdChzcG90LCBhbHRpdHVkZSwgbm9ybWFsSXRlbXMsIGNvbmNlYWxlZEl0ZW1zLCBzcG90TmFtZU5vcm1hbCwgc3BvdE5hbWVDb25jZWFsZWQpCgkJc3BvdHN0cis9IlxuIgoKCXJldHVybiBoK3Nwb3RzdHIrZW5kZXIKCmRlZiBnZXRHYXRoZXJTcG90KHNwb3QsIGFsdGl0dWRlLCBub3JtYWxJdGVtcywgY29uY2VhbGVkSXRlbXMsIHNwb3ROYW1lTm9ybWFsLCBzcG90TmFtZUNvbmNlYWxlZCk6CglmdCA9IGZseXRvCglmdCA9IGZ0LnJlcGxhY2UoIl9fU1BPVF9fIiwgc3BvdCkKCWZ0ID0gZnQucmVwbGFjZSgiX19BTFRJVFVERV9fIiwgYWx0aXR1ZGUpCgluZ2F0aGVyID0gZ2V0U2luZ2xlR2F0aGVyKHNwb3QsIG5vcm1hbEl0ZW1zLCBzcG90TmFtZU5vcm1hbCkKCWNnYXRoZXIgPSBnZXRTaW5nbGVHYXRoZXIoc3BvdCwgY29uY2VhbGVkSXRlbXMsIHNwb3ROYW1lQ29uY2VhbGVkKQoJcmV0dXJuIGZ0KyJcblxuIituZ2F0aGVyKyJcblxuIitjZ2F0aGVyCgpkZWYgZ2V0U2luZ2xlR2F0aGVyKHNwb3QsIGl0ZW1zLCBzcG90TmFtZSk6CglzID0gZ2F0aGVyCglzID0gcy5yZXBsYWNlKCJfX1NQT1RfXyIsIHNwb3QpCglzID0gcy5yZXBsYWNlKCJfX1NQT1ROQU1FX18iLCBzcG90TmFtZSkKCWl0ZW1zdHIgPSBpdGVtdG90YWwKCWl0ZW1saXN0ID0gIiIKCWZvciBpdGVtIGluIGl0ZW1zOgoJCXNpdGVtID0gc2luZ2xlaXRlbQoJCXNpdGVtID0gc2l0ZW0ucmVwbGFjZSgiX19OSVRFTV9fIiwgaXRlbSkKCQlpdGVtbGlzdD1pdGVtbGlzdCtzaXRlbQoJaXRlbXN0ciA9IGl0ZW1zdHIucmVwbGFjZSgiX19JVEVNTFNUX18iLCBpdGVtbGlzdCkKCXMgPSBzLnJlcGxhY2UoIl9fSVRFTVNfXyIsIGl0ZW1zdHIpCglyZXR1cm4gcwoJCgkKcHJpbnQgZ2VuZXJhdGVQcm9maWxlKHNwb3RzPVsiNTE4LjI0MjcsIC0xMTEuOTQ5MywgNDI5LjA4MzUiLCAiNzIzLjgxMTgsIC05Ny4zNjYyMywgNDUzLjI0NzUiLCAiNjY3LjAwNjksIC0xMjQuOTA3MiwgMzI1LjY3ODIiXSwgCglhbHRpdHVkZT0iLTkyIiwgCglhbHRGb3JBcnJpdmFsPSItODUiLAoJbm9ybWFsSXRlbXM9WyJBdXJ1bSBSZWdpcyBTYW5kIl0sIAoJY29uY2VhbGVkSXRlbXM9WyJWaW9sZXQgUm91bmRzdG9uZSIsICJWaW9sZXQgT29pZCJdLCAKCXNwb3ROYW1lTm9ybWFsPSJNaW5lcmFsIERlcG9zaXQiLCAKCXNwb3ROYW1lQ29uY2VhbGVkPSJDb25jZWFsZWQgTWluZXJhbCBEZXBvc2l0IiwKCXpvbmVJRD0iNDAxIiwKCUFldGhlcnl0ZUlkPSI3MiIp