Térkép Koordináták.

Indította NevemSenki, 2013 március 09, 10:58:51 DÉLELŐTT

Előző téma - Következő téma

NevemSenki

Hali.

Térkép koordináták lebontása, kiszámítása...
TrinityCore creature tábla. http://collab.kpsn.org/display/tc/creature
Adottak a koordináták [ x ] [ y ] és adott a mapId a Map.dbc-ből. Ez eddig szép és jó, mindaddig amíg csak a 4 kontinenst nézzük teljes valójában. Vagyis teljes Kalimdor-t, vagy éppen a teljes Northrend-et.
Ilyenkor simán kiszámolható a koordinátához tartozó pont a térképen. De mint tudjuk, ez így elég nagy. Gondoljunk csak egy Quest-re ahol meg akarjuk jelölni a leölendő NPC-ket.
Ezeket a koordinátákat fel kéne osztani kisebb részekre.

Példaként vegyük mondjuk Elvynn Forest-et! ( For the Horde!!  ;) )



Mint láthatjuk, ez Eastern Kingdom egy bizonyos része. behatárolni ezt a részt egyszerű. [ X ] jobb és ball határ, [ Y ] felső és alsó határ. Ez eddig jó, mert ha az NPC ezen koordináták között van, akkor ezen a térképrészen található.

De nézzük meg egy kicsit jobban. Itt nem csak Elwinn Forest van, hanem magában foglalja Stormwind City-t is.
Itt kezdődnek a problémák. Mert ugye Stromwind City-hez tartozik egy külön térkép. Mondjuk azt, hogy ezen területet is behatárolom [ X ] jobb ball határ és [ Y ] felső alsó határ. De itt már csúszik a dolog. Mert SW kicsit ferdén áll, én pedig csak függőlegesen és vízszintesen tudom határolni.
Itt van például ez a pont, ami éppen egy kivétel. Példa 1
Mondjuk azt, hogy nem adok a kivételekre, de ennek ellenére is 2 hiba lép fel. Az egyik az, hogy Elwynn koordinátáin belül van SW koordinátái ( vagyis a határ koordináták ). Így hát az SW-ben lévő NPC nem csak SW-ben létezik majd, hanem Elwynn-ben is, és ha tovább megyek, akkor Eastern Kingdom-on is. Ez már nagyon nagy probléma a visszakeresésnél.
A másik probléma, hogy bizonyos részek kiesnek. Elwynn felett található Burning Steppes. Ha én megadtam az Elwynn-i térkép határoló koordinátáit, akkor a Burning Steppes-en lévő NPC-k egy része is bele fog tartozni, vagy épp a Westfall-i, vagy épp a Duskwood-i NPC-k. Pedig azok már nem ezen a térképrészen vannak.
Például:
Példa 2

Valakinek lenne valami ötlete ezen problémák megoldására?

Üdv.: Senki
Csak a Puffin ad neked erőt, és mindent lebíró akaratot!

Armin

Nem igazán értem, hogy ezzel pontosan mi is a gond. Ha pl. SW bejáratához teszek egy npc-t, ami ugye épp a kérdéses részen van, akkor nem elwyn-be fogja írni a koordinátákat, hanem SW-be.

IrOn

szerintem azt akarja, ugye hogy mindegyikhez van egy mapid, ha az a mapid nem elwynn forest, hanem westfall, akkor az elwynn forest-es részen nem fogja megjeleníteni azokat amik westfall azon szélén vannak ami átnyúlik elwynn térképre(, ha nem ezt akarod, akkor nem tudom)

NevemSenki

#3
Igazatok van, elnézést kérek, igazából pont azt nem írtam le hogy mit is szeretnék.

A creature táblában a koordináták teljes Kalimdor-ra vonatkoznak. Léteznek ezek az érdekes Online Player mappok. Régebben voltak. Na most, ott ugye egy koordináta rendszerbe van vonva egész Kalimdor, másikba Northrend.. stb..
De az eredeti térképek kis térképekből állnak. Ott a példa Elwinn. Ha egy NPC Elwynn-ben van, akkor nekem a lentebb látható térképet kéne a megadnom az NPC adatlapján. Ha SW-ben van az NPC, akkor az SW-s térképet.
Majd ott jelölni egy ponttal a pontos helyét, miután vízszintesen és függőlegesen is 100 - 100 részre osztottam.
Mert ezek a mapper addonok ezeket a koordinátákat használják. ( PL.: 52,4 76,9 )
Egy teljes térképen, egy teljes Kalimdor térképen meg tudom határozni az NPC koordinátái által hogy a kép melyik pontján van. De egy olyan részletes Kalimdor térkép legalább 3000 x 3000 px és nem 10kb....
Így hát maradnak a kis térképrészek. Mint a lentebb linkeltek.
De honnan tudom azt, hogy a creature táblában meghatározott X és Y koordinátákhoz, melyik kis térképet rendeljem, és ott hogy mutassam a pontos helyét?
Itt következnek a buktatók amiket lentebb fejtettem ki.

Példa:

Map: 0
X: -9132,70
Y: 384,88

Ebből kéne nekem kiszámolni, hogy ez az Elwinn mapp, és az image koordináták pedig [ 33 ; 51 ]

Példa 2:

http://old.wowhead.com/npc=69

Map: 0
X: -8872.65
Y: -57.9788

A linken látható map, és pöttyök kellenének.

Visszaszámolás, másként nem tudom elmagyarázni.
Az összes map DBC-t átnézegettem, van is egy megoldás, de az csak az esetek 80%-ára igaz.


Idézetet írta: IrOn Dátum 2013 március 09, 01:52:53 DÉLUTÁN
szerintem azt akarja, ugye hogy mindegyikhez van egy mapid, ha az a mapid nem elwynn forest, hanem westfall, akkor az elwynn forest-es részen nem fogja megjeleníteni azokat amik westfall azon szélén vannak ami átnyúlik elwynn térképre(, ha nem ezt akarod, akkor nem tudom)

A fentebb említett mindkét pont Elwinn-ben van, a mapId mégis 0, vagyis mapId szerint Eastern Kingdom.
Elwinn  mapID-je a 12, ha lenne ott mapId akkor nem lenne bonyolult. De mivel egy kalap alá vonja egész Eastern-t, így már kicsit nehéz. ( Valamenyire segít a WorldmapArea.dbc, de nem sokat. nem mindíg érvényesek az adatok, másik dolog hogy fel van cserélve az x és y koordináta, a 3 dolog pedig hogy egy X koordináta ha SW-ben van játék szerint, akkor ugye beleesik Easter-be, Elwynn-be és SW-be is. A bajok valahol itt vannak. )


Lehet rosszul közelítem meg a dolgot....

Üdv.: Senki
Csak a Puffin ad neked erőt, és mindent lebíró akaratot!

Armin

Őőőőő, na itt lenni kis kavarodás. Elwynnek nem a map id-je 12, hanem a zone id-je.

Tehát pl. a farkas, akit linkeltél, map id 0, és azon belül zone 12, ami elwynn.

Az mondjuk más kérdés, hogy a creature táblában nincs zone id  ;D ;D ;D
WoWHead-en ez javascript-el van valahogy megoldva.


<script type="text/javascript">//<![CDATA[
var g_mapperData = {
12: {
0: { count: 39, coords: [[45.2,35.2],[45.8,34.9],[45.9,37.6],[46.1,35.9],[46.1,40.2],[46.2,37.1],[46.2,40.5],[46.5,37],[46.7,39.7],[46.8,39.4],[47.5,39.4],[48.3,34.9],[48.3,37],[48.3,37.5],[48.4,46.5],[48.5,37.4],[48.8,35.2],[49.3,38.2],[49.4,46.7],[49.7,38.7],[49.8,46.9],[49.9,37.2],[49.9,37.5],[49.9,45.9],[50.1,44.1],[50.6,36],[50.6,44.2],[50.7,44.5],[51,42.1],[51.2,40.1],[51.2,40.7],[51.5,35.6],[51.5,40.4],[51.7,42.4],[51.8,41],[52.1,38.7],[52.1,43.4],[52.5,38.5],[52.6,35.4]] }
}
};
var myMapper = new Mapper({parent: 'k6b43j6b'});
$WH.gE($WH.ge('locations'), 'a')[0].onclick();
//]]></script>



Ha jól értem az lenne a cél, hogy mutassa az online playereket, mint pl. itt a farkas-t pöttyökkel?

NevemSenki

#5
Elírtam, ténylegesen nem a MapId hanem AreaId a 12 ( WorldMapArea.dbc ), de a lényeg látszik.

" Mint például a farkast pöttyökkel. "

Igen!

A baj ott van, hogy hogy számolom ki az AreaId-t a MapId-ből és a koordinátából? 
Valahogy biztosan megoldható!!


Wowhead szar, végigbogarásztam a teljes global.js-t. Adatbázisból kapja meg az AreaID-t és a kordinátákat is. De nem ám a normál, hanem a mapper koordinátákat. (  [ 33.4 ] ; [ 21.9 ] )
Sajna ezzel semmire nem megyek. Össze vissza verve a sok merhasággal.. ami kiszámolja hogy ha Zoom-olva van hova tegye a pöttyöt, ha nincs. Hide pin funcio.... stb... hülyeség.....
Ami még bonyolult, az az offset értéke... ráadásul minden térképrésznél eltérő lesz.... De ez kiszámolható 2 pontosan meghatározott koordinátából.



Üdv.: Senki
Csak a Puffin ad neked erőt, és mindent lebíró akaratot!

IrOn

#6
játékban ezzel ki lehet számolni hol állsz(ilyenek a wowhead kordináták is)
/script SetMapToCurrentZone() local x,y=GetPlayerMapPosition("player") DEFAULT_CHAT_FRAME:AddMessage(format("%s, %s: %.1f,%.1f",GetZoneText(),GetSubZoneText(),x*100,y*100))

bár ez nem hiszem, hogy segít

és ugye ez kéne mivel számol http://www.wowwiki.com/API_GetPlayerMapPosition

NevemSenki

Köszönöm. Pont ezeket néztem át én is délelőtt.

A megoldás valahol az AreaPOI.dbc és a WorldMapArea.dbc körül lesz.... vagy nem tudom...

Üdv.: Senki
Csak a Puffin ad neked erőt, és mindent lebíró akaratot!

NevemSenki


Tökéletesen kiír mindent. Ha képes kiírni a szerver koordinátákat, képes kiírni a Zone és Area Id-ket, és képes 1milliomod pontossággal kiírni az image koordinátákat is... akkor valószínűleg ki tudja számolni.
És gondolom nem a hasára üt a Tc és odaír valamit.

Aki ért a C-hez, azon belül a TC-hez, az utána nézne nekem a dolognak? Mert én hiába bogarászom, C-vel nem foglalkoztam még, és így nem fog menni....

Ha ez meglesz, akkor összedobok egy mapprendszert TC-hez Web-re.

Üdv.: Senki
Csak a Puffin ad neked erőt, és mindent lebíró akaratot!

NevemSenki

#9
Oké, megoldottam a dolgot.


A képet a Képfeltöltés.hu tárolja. http://www.kepfeltoltes.hu

Minden egyes map határértékei. DBC-ből kikapva.. összeollózva. Ez egy sor a táblából:
Kód (mysql) Kijelölés
1 14 Durotar -1716.67 -7250 1808.33 -1962.5 0

És egy kis PHP a kiszámításhoz:

Kód (php) Kijelölés

$creature = mysql_query("SELECT * FROM creature WHERE id = '".mysql_real_escape_string($_GET['kreature'])."'");

while($creature_ = mysql_fetch_array($creature)){

mysql_select_db($zone);
$zone_k = mysql_query("SELECT * FROM zones WHERE mapID = '".$creature_['map']."' AND '".$creature_['position_x']."' > x_min AND '".$creature_['position_y']."' > y_min AND '".$creature_['position_x']."' < x_max AND '".$creature_['position_y']."' < y_max");

//$zone_t = mysql_fetch_array($zone_k);
while($z = mysql_fetch_array($zone_k)){

$p_zone_k = mysql_query("SELECT * FROM zones WHERE mapID = '".$creature_['map']."' AND areatableID = '".$z['areatableID']."' AND'".$creature_['position_x']."' > x_min AND '".$creature_['position_y']."' > y_min AND '".$creature_['position_x']."' < x_max AND '".$creature_['position_y']."' < y_max");
while($p_creature = mysql_fetch_array($p_zone_k)){

$XX = round(100 - ($creature_['position_y']-$p_creature['y_min']) / (($p_creature['y_max']-$p_creature['y_min']) / 100), 2);
$YY = round(100 - ($creature_['position_x']-$p_creature['x_min']) / (($p_creature['x_max']-$p_creature['x_min']) / 100), 2);

echo $z['name_loc0'].' - '.$XX.' '.$YY.'<br />';
}

//echo $z['name_loc0'];
}

}


Már csak az érdekes, hogy ezt hogy rendezem areaID szerint, mert ugye 1 oldalon, egy alkalommal csak 1 térkép jeleníthető meg ( és az azon térképhez tartozó koordináták ), de mivel egy bizonyos ID-jű NPC nem csak egy térképen van, így linkel kéne megoldani, hogy át lehessen váltani egyik mapp-ról a másikra. Miközben viszem az adatokat.

Nem keveset szívtam ezzel a dologgal...... nagyon nem keveset....

Aki tudja használni, az vigye.  ;)

Üdv.: Senki
Csak a Puffin ad neked erőt, és mindent lebíró akaratot!

Powered by EzPortal