Archives des forums MMO/MMORPG > Dark Age of Camelot > DAoC - Technique > XML sur serveur free
XML sur serveur free
Par Arkahn Crystal le 21/5/2002 à 17:33:28 (#1501108)
Par Arkahn Crystal le 22/5/2002 à 12:44:54 (#1505839)
Par Anduric le 23/5/2002 à 3:46:33 (#1511094)
En gros pour simplifier, la feuille xml c'est juste le contenu. Il te faut définir la façon dont les infos sont affichées. Il y a plusieurs méthodes pour cela, je te conseille les feuilles de styles xsl (pas xls, hein :))
En cherchant sur Internet, tu pourras trouver des sites de tutorial très bien fait sur xml/xsl (c'est ceux là que j'ai vu, mais j'ai oublié le nom, et j'ai perdu mes favori, recemment. Sans compter qu'il est tard).
Le gros problème pour les infos vient du fait que tu dois importer la feuille xml et fournir le xsl.
Pour simplifier, et parce que je devrais vraiment aller me coucher, voici comment j'ai fait pour tester.
La page que tu appelle avec ton navigateur (genre index.html, etc) :
// Load XML
var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("http://www.camelot-europe.com/herald/nb_connected.xml")
// Load the XSL
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("formatage.xsl")
// Transform
document.write(xml.transformNode(xsl))
Ce fichier va chercher le xml chez Mythic, le mixe avec le formatage.xsl et affiche le résultat.
Pour exemple, mon fichier formatage.xsl (qui affiche de façon grossière la population des serveurs)
Voilà... maintenant je te laisse te dépatouiller avec tout ça, sachant que les résultats s'affichent à priori dans la fenêtre complète (document.write du premier fichier), et que si tu veux afficher ça plus proprement, faut faire des efforts. Par exemple, tu peux faire comme sur le site officiel et utiliser des .
Bon amusement.
Par pmichy le 25/5/2002 à 16:30:22 (#1526030)
http://www.indemag.com/daoc/serveur.php
les fort en rouge sont les fort pris ressament
en cherchant un peu sur les site tu trouve facilement des info
Par Arkahn Crystal le 26/5/2002 à 5:05:11 (#1529462)
En tout cas thx pour les explication Anduric, idem pour pmichy
Par Arkahn Crystal le 26/5/2002 à 6:07:02 (#1529516)
Donc site quelqu'un avait la grandeur d'âme de me faire un modele de xsl dans laquelle il n'y aurait que l'info de Ys avec l'état ( on off ) et le nombre de personnes connectées. Toi ça en blanc et l'info l'une sur l'autre. Merci d'avance ( chui pas sur que tout ça se passe sur le xsl mais bon :/ )
Par pmichy le 26/5/2002 à 18:00:24 (#1531977)
http://www.unixtech.be/docs/php-fr/ref.xml.html
Par pmichy le 26/5/2002 à 18:16:31 (#1532094)
Dans startElement tu as les info a l'interieur d'une balise comme :
Dans characterData tu as ce qui est en gras :
Albion
Donc tu dois verifier dans le StartElement la variable $attrs en faisant :
while (list($k, $v) = each($attrs))
{
if ($k=="NAME")
{
.......................
}
}
Pour ton cas tu dois verifier :
1) que ce soit bien Ys avec les attrs de Startelement
2) Attendre que ce soit population toujours dans startelement
3)recuperer quand les 2 autre point son valide la valeur dans characterData
Bon c'est sans compter si j'ai bien tout compris, et cela est en php
Par Arkahn Crystal le 26/5/2002 à 18:53:59 (#1532332)
PS: kel monde injuste
Par pmichy le 26/5/2002 à 22:14:20 (#1533524)
Ce programme est aussi sur :
http://www.indemag.com/daoc/ys.php
Bon c'est peut etre pas super optimiser, mais c'est pas mon boulot :) d'ailleur si quelqu'un veut bien optimiser sa je suis preneur :)
<?
$file="http://www.camelot-europe.com/herald/nb_connected.xml";
$i=$j=0;
function startElement($parser, $name, $attribs)
{
global $i,$j;
if ((sizeof($attribs))&&($name=="SERVER"))
{
while (list($k, $v) = each($attribs))
{
if (($k=="NAME")&&($v=="Ys"))
{
$i=1;
}
}
}
if (($i==1)&&($name=="POPULATION")) $j=1;
if (($i==1)&&($name=="STATUS")) $j=2;
}
function endElement($parser, $name)
{
}
function characterData($parser, $data)
{
global $j,$i;
if ($j==1)
{
echo "Le serveur Ys a une population de : $data";
$j=0;
}
if ($j==2)
{
echo "Le status du serveur Ys est : $data";
$j=$i=0;
}
}
$xml_parser = xml_parser_create();
// use case-folding so we are sure to find the tag in $map_array
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, TRUE);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("could not open XML input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
?>
Par Axxis le 27/5/2002 à 9:12:59 (#1534969)
Voici mon script asp qui marche en local, mais efrance.fr n'accepte pas le load du fichier xlm :-(
Quelqu'un aurait-il une astuce ?
Merci d'avance :-)
<%
Response.Buffer = True
Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM")
xmlDoc.async = false
xmlDoc.load("http://www.camelot-europe.com/herald/nb_connected.xml")
Excalibur = xmlDoc.documentElement.childNodes.item(0).text
Broceliande = xmlDoc.documentElement.childNodes(1).text
Avalon = xmlDoc.documentElement.childNodes(2).text
Lyonesse = xmlDoc.documentElement.childNodes(3).text
Ys = xmlDoc.documentElement.childNodes(4).text
Prydwen = xmlDoc.documentElement.childNodes(5).text
Stonehenge = xmlDoc.documentElement.childNodes(6).text
Logres = xmlDoc.documentElement.childNodes(7).text
Orcanie = xmlDoc.documentElement.childNodes(8).text
set xmlDoc =Nothing
response.write ("Excalibur : " & Excalibur & ")
response.write ("Broceliande : " & Broceliande & ")
response.write ("Avalon : " & Avalon & ")
response.write ("Lyonesse : " & Lyonesse & ")
response.write ("Ys : " & Ys & ")
response.write ("Prydwen : " & Prydwen & ")
response.write ("Stonehenge : " & Stonehenge & ")
response.write ("Logres : " & Logres & ")
response.write ("Orcanie : " & Orcanie & ")
%>
Par Okam le 27/5/2002 à 12:19:53 (#1535731)
http://membres.lycos.fr/letrounoir/daoc/membres/etat_serveurs.php
pour obtenir les pages php, contactez-moi.
Par pmichy le 27/5/2002 à 13:49:42 (#1536222)
Par Okam le 27/5/2002 à 20:05:42 (#1538399)
======================
J'ai modifié le code disponible sur le Herald pour filtrer le serveur Ys et pour gérer également les forts/reliques. Toutes les données sont écrites dans des variables (voir 2e partie)
fichier xml.inc.php :
2° partie - mise en page
=================
page php qui appelle xml.inc.php et utilise les données extraites
Etat du Serveur Ys
body {
margin:0px; padding:0px; font-family:verdana, arial, helvetica, sans-serif;
color:#FFFFFF; background-color:gray;}
p {
font:11px verdana, arial, helvetica, sans-serif; padding:0px;}
td { font-size: 11px;color: #FFFFFF; }
a {color: #00AA9F;font-size:11px;text-decoration:none;
font-weight:600;font-family:verdana, arial, helvetica, sans-serif;}
a:link {color: #00AA9F;}
a:visited {color: #00AA9F;}
a:hover {color: #FFFFFF;}
.darktable { border: #A0A0A0 1px solid; background-color: #246E8C; font-size: 11px; font-color: #FFFFFF }
.lighttable { border: #A0A0A0 1px solid; background-color: #000000; font-size: 11px; font-color: #FFFFFF }
.cont { font-size: 11px; color: #FFFFFF; }
.wcont { font-size: 11px; color: #FFFFFF; }
.input { font-size: 11px; border: #A0A0A0 1px solid }
.inputbutton { font-size: 11px; border: #A0A0A0 1px solid; background-color: #CCCCDD }
<?
include("xml.inc.php");
function extrait3 ($chaine,&$value1,&$value2,&$value3){
$value=$chaine;
$pos=strpos($value,";");
$value1=substr($value,0,$pos);
$value=substr($value,$pos-strlen($value)+1);
$pos=strpos($value,";");
$value2=substr($value,0,$pos);
$value3=substr($value,$pos-strlen($value)+1);
}
function extrait4 ($chaine,&$value1,&$value2,&$value3,&$value4){
$value=$chaine;
$pos=strpos($value,";");
$value1=substr($value,0,$pos);
$value=substr($value,$pos-strlen($value)+1);
$pos=strpos($value,";");
$value2=substr($value,0,$pos);
$value=substr($value,$pos-strlen($value)+1);
$pos=strpos($value,";");
$value3=substr($value,0,$pos);
$value4=substr($value,$pos-strlen($value)+1);
}
print "\n";
print "Serveur $da_etat_serveur[1] : ";
$etat=$da_etat_serveur[2];
if ($etat[0]=='U') {print "$da_etat_serveur[3] connectés";}
else {print "Down";}
print "\n";
print ";
for($i=1;$i<8;$i++){
print";
extrait3($da_etat_fort[$i],$w1,$w2,$w3);
if (strpos($w3,"A") === FALSE) {$b1="; $b2=";} else {$b1="; $b2=";}
print "$w1$b1$w3$b2\n";
extrait3($da_etat_fort[$i+7],$w1,$w2,$w3);
if (strpos($w3,"M") === FALSE) {$b1="; $b2=";} else {$b1="; $b2=";}
print "$w1$b1$w3$b2\n";
extrait3($da_etat_fort[$i+14],$w1,$w2,$w3);
if (strpos($w3,"H") === FALSE) {$b1="; $b2=";} else {$b1="; $b2=";}
print "$w1$b1$w3$b2\n";
print";
}
print ";
print "\n";
print ";
for($i=1;$i<3;$i++){
print";
extrait4($da_etat_relique[$i],$w1,$w2,$w3,$w4);
if (strpos($w4,"A") === FALSE) {$b1="; $b2=";} else {$b1="; $b2=";}
print "$w2$w1$b1$w4$b2\n";
extrait4($da_etat_relique[$i+2],$w1,$w2,$w3,$w4);
if (strpos($w4,"M") === FALSE) {$b1="; $b2=";} else {$b1="; $b2=";}
print "$w1$b1$w4$b2\n";
extrait4($da_etat_relique[$i+4],$w1,$w2,$w3,$w4);
if (strpos($w4,"H") === FALSE) {$b1="; $b2=";} else {$b1="; $b2=";}
print "$w1$b1$w4$b2\n";
print";
}
print ";
?>
****************
Voilà c'est un peu long (et sûrement pas optimisé) , bonne lecture ;)
Par pmichy le 27/5/2002 à 21:32:46 (#1539009)
Par Anduric le 27/5/2002 à 21:36:15 (#1539036)
JOL Archives 1.0.1
@ JOL / JeuxOnLine