Travian » Straipsniai » Žemėlapių kūrimas home mail

Žemėlapių kūrimas

Egzistuoja nemažai tinklapių, renkančių informaciją iš Traviano serverių ir pateikiančių ją įvairiais būdais. Paprastai tai yra žemėlapiai ir statistika.

Šis vadovas skirtas tiems, kas nori sukurti tokį puslapį. Čia pateikiamas PHP / MySQL (dažniausiai taikomas metodas) kodavimo pavyzdys, todėl, norėdami juo pasinaudoti, turite žinoti šias kalbas..

Turinys

  1. Reikiami įgūdžiai
  2. Tinklapio prieglobos reikalavimai
  3. Kur galima rasti duomenis?
  4. Duomenų formatas
  5. Kokia informacija pateikiama?
  6. Informacijos įkėlimas į savo serverį
  7. Pavyzdys: aljanso žemėlapis

Reikiami įgūdžiai

Turite žinote vieną iš tinklapių programavimo kalbų ir turėti darbo su SQL sistemomis įgūdžius.

Tinklapio prieglobos reikalavimai

Labiausiai paplitusi kombinacija yra PHP ir MySQL. Tačiau reikia turėti omenyje, jog dažnai serverių savininkai leidžia naudoti PHP kalbą tik saugiu režimu (safemode). Tai nulemia žymius apribojimus.

Saugiajame režime galios šie apribojimai:
  • Neveikia tiesioginės sistemos komandos system()
  • Nepasiekiami nutolę failai (removed files)

Plačiau apie tai rašoma skiltyje "Informacijos įkėlimas į savo serverį ".

Kur galima rasti duomenis?

Kadangi botų ir skriptų naudojimas žaidime draudžiamas, duomenys turi būti renkami kitokiu būdu. Travian Games GmbH pateikia nuolat atnaujinamus visų serverių duomenų bazių SQL-Dump'us, turinčius pagrindinę informaciją apie visas gyvenvietes tam tikrame serveryje.

Dump‘ai atnaujinami kasryt apie 08:00 Lietuvos laiku ir pateikiami dviem formatais: nesuglaustas (.sql) ir suglaustas gzip būdu (.sql.gz).

Vokiečių serverių dump‘ai pavadinti „karte.sql[.gz]“; lietuvių ir visų kitų - „map.sql[.gz]“.

Failai yra atitinkamų serverių šakniniuose kataloguose.

Pavyzdžiui:

Duomenų formatas

Kadangi failai yra SQL-Dumps, jie turi tik SQL-Insert komandas. Todėl reikia turėti omenyje, kad negalima naudoti advanced inserts metodo. Galima naudoti tik insert per record (kitaip keli elementai būtų suglaudžiami į vieną)..

Ankstesnėje Travian 2 versijoje failai buvo koduojami ANSI formatu, tačiau dabar visi dump‘ai pateikiami UTF-8 koduote.

Norėdami sukurti duomenų bazės lentelę, galite pasinaudoti šiuo SQL kodu:

CREATE TABLE `x_world` (
  `id` int(9) unsigned NOT NULL default '0',
  `x` smallint(3) NOT NULL default '0',
  `y` smallint(3) NOT NULL default '0',
  `tid` tinyint(1) unsigned NOT NULL default '0',
  `vid` int(9) unsigned NOT NULL default '0',
  `village` varchar(20) NOT NULL default '',
  `uid` int(9) NOT NULL default '0',
  `player` varchar(20) NOT NULL default '',
  `aid` int(9) unsigned NOT NULL default '0',
  `alliance` varchar(8) NOT NULL default '',
  `population` smallint(5) unsigned NOT NULL default '0',
  UNIQUE KEY `id` (`id`)
);

Kokia informacija pateikiama?

Lentelės stulpelių reikšmė:

Stulpelis Reikšmė
id Žemėlapio langelio numeris, nuo (-400|400) viršutiniame kairiame kampe iki (400|-400) žemutiniame dešiniame kampe.
x x-koordinatė
y y-koordinatė
tid Genties kodas. 1 = romėnas, 2 = germanas, 3 = galas, 4 = gamta, 5 = natarai
vid Gyvenvietės ID numeris
village Gyvenvietės pavadinimas
uid Žaidėjo ID numeris
player Žaidėjo vardas
aid Aljanso ID numeris
alliance Aljanso pavadinimas
population Gyvenvietės gyventojų skaičius

Svarbu: Informacija apie karius (off ir def duomenys) nepateikiama.

Informacijos įkėlimas į savo serverį

Duomenų įkėlimas rankiniu būdu dažniausiai nesulekia problemų. Parsisiųskite reikiamą dump'ą ir įkraukite jį į reikiamą duomenų bazė PHPmyAdmin arba atitinkamos priemonės pagalba.

  1. Automatas (Cronjob) pradeda skripto atnaujinimą
  2. Įsikrovimo įrankis parsisiunčia dump‘ą
  3. Duomenų bazių apdorojanti programa įkelia dump‘ą į duomenų bazę.

Atnaujinimo skriptas nėra PHP arba kitoks skriptas, kurio pagalba generuojamas puslapis. Tai yra serverio konsolėje paleistas apvalkalo skriptas. Deja, dažniausiai vartotojai neturi priėjimo prie serverio, kuriame yra patalpintas jų tinklapis..

Tai nesukeltų didelių problemų, nes šiuos veiksmus galima būtų atlikti system() komandos pagalba. Tačiau, kadangi dauguma tiekėjų nustato saugos režimą (safemode) saugumo sumetimais, šis būdas negalioja. Tuomet vienintelė išeitis yra naudoti PHP kiekvienam atskiram elementui.

Daugelis tiekėjų riboja skriptų veikimo trukmę nuo 10 iki 30 sekundžių, tai gali neužtekti stambaus serverio SQL-dump‘ui atsisiųsti. Be to, gali būti apribotas priėjimas prie išorinių failų ir veiksmai su duomenimis esančiais kitame serveryje. Gali būti uždraustas netgi šių failų siuntimasis..

Todėl iškart perspėjame: norėdami kurti žemėlapius savo svetainėje pamirškite apie nemokamus tinklapio prieglobos tiekėjus..

Atsikratėte saugaus režimo arba gavote priėjimą prie savo serverio apvalkalo? Puiku, tuomet galime tęsti.

Toliau pateikiamas veikiantis pavyzdys, sukurtas PHP ir MySQL pagalba (reikalingas serveris ir klientinė programa su komandinę eilutę „mysql“). Taip pat bus reikalingas wget (komandinės eilutės krovimosi įrankis).

Aiškumo dėlei pateiktame pavyzdyje buvo beveik visiškai praleistas klaidų apdorojimas.

Norėdami paleisti skriptą, sukurkite aplankalą „data“ skripto direktorijoje. Serverio vartotojui turi būti suteikta įrašymo teisė „write“. Be to, turite sukurti lentelės "x_world" duomenų bazę, kaip nurodyta prieš tai. Po to įveskite skripto viršuje nurodomą prieigos informaciją.

Atnaujinimo skripto kodas

<?php

// Nustatymai
$mysqlhost = 'localhost';
$mysqluser = 'user';
$mysqlpass = 'password';
$mysqldb = 'database';

// Susisiekti su duomenų baze ir pasirinkti duomenų bazę
$db = @mysql_connect($mysqlhost, $mysqluser, $mysqlpass) OR die('Can not connect to DB-Server!');
$db_select = @mysql_select_db($mysqldb) OR die('Can not select DB!');

// įkrauti map.sql į data/ aplanką sistemos komandos būdu,"wget" pagalba/
// SVARBU: būtina nustatyti per PHP įrašymo teisę (write) šiam aplankui. Esant reikalui nustatykite tai!
system('wget http://s1.travian.com/map.sql -O data/tmp.sql');

// Parikrinkite, ar failas buvo įkrautas ir jo apimtis viršija 0 bitų
if (file_exists('data/tmp.sql') AND filesize('data/tmp.sql')) {

// Ištuštinti lentelę
$query = 'TRUNCATE TABLE x_world';
$result = @mysql_query($query) OR die('Can not clear table x_world!');

// Vykdyti map.sql programos "mysql" pagalba
// SVARBU: T2 serveriams (jei tokių liko) turi būti naudajama “latin1” koduotė
system('mysql --host='.$mysqlhost.' --user='.$mysqluser.' --password='.$mysqlpass.' --default-character-set=utf8 '.$mysqldb.' < data/tmp.sql');

echo
'Update finished!';

} else {

echo
'Failed downloading map.sql or file is empty!';

}

// Jei egzistuoja laikinasis failas, jis bus pašalintas.
if (file_exists('data/tmp.sql')) {
unlink('data/tmp.sql');
}

// Susisiekimo su duomenų baze uždarymas
@mysql_close($db);

?>

Pavyzdys: aljanso žemėlapis

Toliau pateikiamas skriptas yra aljanso žemėlapio kūrimo pavyzdys. Viršuje nurodykite prisijungimo duomenis ir reikiamo aljanso ID numerį. Šios informacijos pagalba skriptas sugeneruos žemėlapį su visomis serverio gyvenvietėmis, paryškindamas nurodyto aljanso miestus..

Būtina turėti PHP priedus GD-Lib ir Image functions , teisingam skripto vykdymui ir vaizdo glodinimui užtikrinti.

Turėkite omenyje, jog šis skriptas reikalauja itin žymių serverio sąnaudų, todėl nepatartina vykdyti jo per dažnai. Neskelbkite jo viešai prieiname puslapyje, bet patalpinkite kurioje nors labiau tinkamoje vietoje ir leiskite jį kešuoti kartą per dieną. Tam reikia tiesiog nuskaityti kitus imagepng() funkcijos parametrus.

Aljanso žemėlapio generavimo kodas:

<?php

// pasirinkto aljanso ID numeris (aid)
$marked_aid = 2403;

// Nustatymai
$mysqlhost = 'localhost';
$mysqluser = 'user';
$mysqlpass = 'password';
$mysqldb = 'database';

// Susisiekti su duomenų baze ir pasirinkti duomenų bazę
$db = @mysql_connect($mysqlhost, $mysqluser, $mysqlpass) OR die('Can not connect to DB-Server!');
$db_select = @mysql_select_db($mysqldb) OR die('Can not select DB!');

// Vaizdo kūrimas: žemėlapio koordinatės nuo -400 to 400
// -> viso 2*400+1 (+1 nes dar yra centro koordinatė - 0)
$image = imagecreate(801, 801);

$color_background = imagecolorallocate($image, 255, 255, 255);
$color_normal = imagecolorallocate($image, 200, 200, 200);
$color_marked = imagecolorallocate($image, 255, 0, 0);

// Nudažome foną
imagefill($image, 0, 0, $color_background);

// Pasirenkame iš duomenų bazės VISAS serverio gyvenvietes ir rūšiuojame pagal ID didėjančia tvarka
// (langeliai numeruojami iš viršaus kairės į apačios dešinę)
$query = 'SELECT x, y, aid FROM x_world ORDER BY id ASC';
$result = @mysql_query($query) OR die('Can not select villages from table x_world!');

// Patikrinkite, ar yra bent viena gyvenvietė
if (mysql_num_rows($result)) {

// Pasirinkite pirmą gyvenvietę
$row = @mysql_fetch_assoc($result);

// Šie kintamieji fiksuoja šiuo momentu piešiamą poziciją
$x_pointer = 0;
$y_pointer = 0;

// Y koordinačių išorinis ciklas
for($y=400; $y >= -400; $y--) {

// X koordinačių vidinis ciklas
for ($x=-400; $x <= 400; $x++) {

// Pasiekėme koordinačių atitinkančių duomenų bazės šiuo momentu pasirinktą poziciją:
if ($row['x'] == $x AND $row['y'] == $y) {

// Gyvenvietės spalva, priklausanti nuo aljanso aid numerio
if ($row['aid'] == $marked_aid) {
$color = $color_marked;
} else {
$color = $color_normal;
}

// Gyvenvietė nupiešiama atitinkančia spalva
imagefilledrectangle($image, $x_pointer, $y_pointer, ($x_pointer + 1), ($y_pointer + 1), $color);

// Pasirinkti kitą įrašą
$row = @mysql_fetch_assoc($result);
}

// Padidinti X koordinatę
$x_pointer++;
}

// Padidinti Y koordinatę
$y_pointer++;

// Eilutės pabaiga. X vėl įgauna 0 reikšmę
$x_pointer = 0;
}
}

// generuojama failo HTTP-antraštė
header("Content-Type: image/png");

// generuojamas vaizdas
imagepng($image);

?>
 (balsų: 3)
paskelbė: Travian3 | 18 vasario 2009 | perskaitė: 11627
Gerbiamas lankytojau, šiuo metu esate mūsų svetainės neregistruotas svečias, arba nesate prisijungę. Jei norite papildyti straipsnį, ar turite įdomių minčių, susijusių su jo tema - kviečiame rašyti komentarus. Užsiregistravę turėsite galimybę tai daryti patogiau.
Kiti straipsniai:
#1 parašė: Forumist
 
Gal ir geras straipsnis, bet daug gramatinių klaudų :-D
 
 
Straipsnių 0 | Komentarų 10    
 
 
#2 parašė: Kaspe
 
Idomiai. idomiai :)
 
 
Straipsnių 0 | Komentarų 0    
 
 
#3 parašė: Astalavista
 
šaunu
 
 
Straipsnių 0 | Komentarų 0    
 
 
#4 parašė: tautvys92
 
Dabar privis kaip CS serverių ant php-f angry

Rimtesnis straipsnis.
 
 
Straipsnių 0 | Komentarų 0    
 
 
#5 parašė: WmiX
 
no
Kaip reikia perkelti gyvenviete i kita vieta?[hide]
 
 
Straipsnių 0 | Komentarų 0    
 
 
#6 parašė: s6_sw
 
WmiX,
tu loxas, ir tau reikia nauju veizolu ;) ne vietoj klausi.

Tai [color=#FF0000] TU pasakyk kur reik klaust angry
 
 
Straipsnių 0 | Komentarų 0    
 
 
#7 parašė: RKO
 
Forumist,

nedaryk granatiniu klaidu nes nerimtai atrodo
 
 
Straipsnių 0 | Komentarų 0    
 
 
#8 parašė: Gudrocius
 
RKO,
Granatiniu? wink
 
 
Straipsnių 0 | Komentarų 14    
 
 
#9 parašė: neziniukas
 
lol tj travianas pasaulis apvalus? lol lol
 
 
Straipsnių 0 | Komentarų 0    
 
 
#10 parašė: Nostradamas
 
Pranasyste:
T4.0 versijoje zemelapis bus rutulio formos
Atsiras naujas artefaktas "Atomine Bomba", kuri galės visiškai sunaikinti 1 gyvenvietę ir iki 70% apgriauti gyvenvietes 5 langeliu atstumu nuo sprogimo centro. (nuo artefakto apsaugoti zaidejai, turintys tik 1 kaimą)
 
 
Straipsnių 0 | Komentarų 0    
 
 
#11 parašė: big mine4
 
travianas geras game jeigu moki lost nesuzpuole mane nekarta bully

krv geras tas travianas bully bully bully
 
 
Straipsnių 0 | Komentarų 0    
 
 
#12 parašė: Nostradamas2
 
Nostradamai- prajuokinai :DDDD. Nuo kada gilioje senoveje atomines bombos? :DDDD Gal dar artefaktas ateiviai bus? lol
 
 
Straipsnių 0 | Komentarų 0    
 
 
#13 parašė: saumen
 
ar imanoma sukueti asmenini travian noriu paklaust.
 
 
Straipsnių 0 | Komentarų 0    
 
 
#14 parašė: Paslaptukas
 
ar imanoma sukurti asmenini travian ? Jei imanoma tai kaip? what
 
 
Straipsnių 0 | Komentarų 0    
 
 
#15 parašė: paslaptukas
 
ei, zmones nu ar galima susikurt savo traviana? jei taip, tai kaip?
 
 
Straipsnių 0 | Komentarų 0    
 
 
#16 parašė: dffdfd
 
ajsku kad NE.
 
 
Straipsnių 0 | Komentarų 0    
 
 
#17 parašė: hell
 
Kazkaip tai imanoma asmenini traviana susikuriti.... Tik idomu kaip????
 
 
Straipsnių 0 | Komentarų 0    
 
 
#18 parašė: Vydas
 
O gal kas žino kaip sukurti savo travian serveri asmeninėm reikmėm?
 
 
Straipsnių 0 | Komentarų 0    
 
 
#19 parašė: sakaliniaipadai
 
savo traviana imanoma sukurt, mokek programuot:) ir sukursi wink
 
 
Straipsnių 0 | Komentarų 0    
 
 
#20 parašė: Komūūtėrastas
 
imanoma: Žiūrėkit: http://www.manotravian.lt :DDDDDdd
 
 
Straipsnių 0 | Komentarų 0    
 
 
#21 parašė: Donno1982
 
Im ieško atnaujinti savo telefoną . Šiuo metu Morotola RZR , bet mąstymo vienas nori geriau kamera ir muzikos sistemos . ty Groti MP3 ir tt Ar , pavyzdžiui ,"Motorola" , kaip jas naudojo 10 metų naudojami klavišai ir tt , bet cant atrodo rasti padorų . Any advice būtų dėkingi , prašome ... esu Top Up , bet nori eiti į sutartį , jei padeda
 
Dabar aš iš tikrųjų atsiprašyti ne puiki kalba , esu tik komponavimo , vis dėlto noras viskas yra gana paprasta suprasti, * aš negaliu kalbėti kur kas geriau , vis dėlto reaaly norite padėti !
Jei galbūt aš visiškai negerai su visų diskusijų lenta komponentas aš ieškokite kitų darbuotojų , siekiant perkelti savo virvės teisingą 1
 
 
Straipsnių 0 | Komentarų 0    
 
 
#22 parašė: Emmy
 
Good point. I hadn't tohught about it quite that way. :)
 
 
Straipsnių 0 | Komentarų 0    
 
 

 

 
 
  © 2007 Travianas.lt - Traviano pagalbos svetainė
E-mail | RSS | Registruotis | Paskutiniai komentarai | Reklama