ну мало ли, я вот играю лет 12 в ультиму, только сейчас меня кольнуло, вдруг понадобилось...
в общем в функцию передаётся строка формата "98°42'S,64°32'W"
возвращает строку "xxxx:yyyy"
использую для расшифровки координат в записках из бутылок...
может где то можно и координаты кладов так расшифровать, у нас на сервере не катит...
это если хотите автоматизировать процесс копания кладов)
иногда ошибается на один тайл, причину пока не понял, но для ловли по мессагам и для копки кладов это не существенно...
Code:
sub ReadMessage(gradus)
var GradX, GradY, MinX, MinY, znakX, znakY, NSWE='', i
var X=0,Y=0, xy
for i=0 to Len(gradus)
if mid(gradus,i,1) == 'N' then
NSWE=NSWE+'N'
end if
if mid(gradus,i,1) == 'S' then
NSWE=NSWE+'S'
end if
if mid(gradus,i,1) == 'W' then
NSWE=NSWE+'W'
end if
if mid(gradus,i,1) == 'E' then
NSWE=NSWE+'E'
end if
next
if NSWE == 'NW' then
znakX=-1
znakY=-1
end if
if NSWE == 'SW' then
znakX=-1
znakY=1
end if
if NSWE == 'NE' then
znakX=1
znakY=-1
end if
if NSWE == 'SE' then
znakX=1
znakY=1
end if
for i=0 to Len(gradus)
if mid(gradus,i,1) == '°' then
GradY=val(mid(gradus,0,i))
MinY=val(mid(gradus,i+1,i+3))
end if
if mid(gradus,i,1) == ',' then
gradus=mid(gradus,i+1,Len(gradus))
end if
next
for i=0 to Len(gradus)
if mid(gradus,i,1) == '°' then
GradX=val(mid(gradus,0,i))
MinX=val(mid(gradus,i+1,i+3))
end if
next
GradX=MinX/60+GradX
GradY=MinY/60+GradY
if ((NSWE=='NW') || (NSWE=='SW')) && GradX > 93.016666 then
X = str((1237-(GradX-93.016666)*1280/90+3884), 0)
end if
if ((NSWE=='NW') || (NSWE=='NE')) && GradY > 142.733333 then
Y = str((424-(GradY-142.733333)*1024/90+3673), 0)
end if
if X==0 then
X = str(((GradX*5120)/360*znakX+1323), 0)
end if
if Y==0 then
Y = str(((GradY*4095)/360*znakY+1624), 0)
end if
xy=X+':'+Y
return xy
end sub