Du bist nicht angemeldet.

WoW-Castle auf Facebook WoW-Castle auf YouTube WoW-Castle auf Twitter WoW-Castle als RSS-Feed
  • »darkmaster2k7« ist der Autor dieses Themas

Beiträge: 126

Danksagungen: 11

  • Private Nachricht senden

1

Samstag, 16. März 2013, 13:18

Castle xml Schnittstellen

Hier eine kleine Info fuer alle die schon immer ma Skripte schreiben wollten die mit Daten von Castle arbeiten.

Castle bietet derweil zwei gute moeglichkeiten Daten auszulesen:
  • Die Armory
    Hier finden sich alle Infos zu Gilden und Charakteren
  • /xmlchars.html
    Beinhaltet alle Charaktere die momentan auf Castle online sind

Beides sind Xml Datein.

Hier ein paar PhP Beispiele:

Auslesen wer online ist

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
echo "<pre>";
print_r(getOnlinePlayers(0));
echo "</pre>";

function getOnlinePlayers($limit) 
{
    $ch curl_init();
    curl_setopt($chCURLOPT_URL'http://www.wow-castle.de/bboard/xmlchars.html');
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_HTTPHEADER, array("Accept-Language: de-de, de;"));
    curl_setopt($chCURLOPT_CONNECTTIMEOUT10 );
    $content curl_exec ($ch);
    curl_close ($ch);
    $xml = new SimpleXMLElement($content);    

    $online = (string) $xml->realm->chars['online'];     
    if($limit == OR $limit $online$limit $online;    
    for($i=0$i<$limit$i++)
    {
        $data[$i]['name'] = (string) $xml->realm->chars->char[$i]['name'];
        $data[$i]['level'] = (string) $xml->realm->chars->char[$i]['level'];
        $data[$i]['class'] = (string) $xml->realm->chars->char[$i]['class'];
        $data[$i]['guild'] = (string) $xml->realm->chars->char[$i]['guild'];
        $data[$i]['zone'] = (string) $xml->realm->chars->char[$i]['zone'];
        $data[$i]['map'] = (string) $xml->realm->chars->char[$i]['map'];
    }
    return $data;
}
?>
Die function getOnlinePlayers() hier gibt ein Array mit allen chars zurueck die online sind.

Infos ueber einen char bekommen

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
echo "<pre>";
print_r(getSomeInfos('Doomsta'));
echo "</pre>";

function getSomeInfos($name) 
{
    $ch curl_init();
    curl_setopt($chCURLOPT_URL'http://armory.wow-castle.de/character-sheet.xml?r=WoW-Castle+PvE&cn='.$name);
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
    curl_setopt($chCURLOPT_HTTPHEADER, array("Accept-Language: de-de, de;"));
    curl_setopt($chCURLOPT_CONNECTTIMEOUT10 );
    $content curl_exec ($ch);
    curl_close ($ch);
    $xml = new SimpleXMLElement($content);    

    $data['name'] = (string) $xml->characterInfo->character['name']; 
    $data['realm'] = (string) $xml->characterInfo->character['realm'];
    $data['battleGroup'] = (string) $xml->characterInfo->character['battleGroup'];
    $data['class'] = (string) $xml->characterInfo->character['classId'];
    $data['race'] = (string) $xml->characterInfo->character['raceId'];
    $data['level'] = (string) $xml->characterInfo->character['level'];
    $data['achievementPoints'] = (string) $xml->characterInfo->character['points'];
    $data['title'] = (string) $xml->characterInfo->character['prefix'];
    
    $data['stats']['health'] = (string) $xml->characterInfo->characterTab->characterBars->health['effective'];  
    //powerType
    $var = (string) $xml->characterInfo->characterTab->characterBars->secondBar['type']; 
    switch ($var) {
        case 'm'//mana
            $data['stats']['powerType'] = 'mana';
            break;
        case 'r'//wut
            $data['stats']['powerType'] = 'rage';
            break;
        case 'e'//energie
            $data['stats']['powerType'] = 'energy';
            break;    
        case 'p'//runenmacht
            $data['stats']['powerType'] = 'runic-power';
            break;
    }
    $data['stats']['power'] = (string) $xml->characterInfo->characterTab->characterBars->secondBar['effective'];
    //base stats
    $data['stats']['str'] = (string) $xml->characterInfo->characterTab->baseStats->strength['effective'];  
    $data['stats']['agi'] = (string) $xml->characterInfo->characterTab->baseStats->agility['effective']; 
    $data['stats']['sta'] = (string) $xml->characterInfo->characterTab->baseStats->stamina['effective']; 
    $data['stats']['int'] = (string) $xml->characterInfo->characterTab->baseStats->intellect['effective']; 
    $data['stats']['spr'] = (string) $xml->characterInfo->characterTab->baseStats->spirit['effective'];      
    return $data;
}
?>
Hier gibt die function getSomeInfos() einige Infos ueber den Character in einen Array zurueck.
Basis lassen sich so alles Daten auslesen die im Arsenal vorkommen.

Zu Beachten ist noch das meistens mit ids gearbeitet wird raceId, classID ...
Hier noch eben die Zuordnungen:

classId2class

Quellcode

1
2
3
4
5
6
7
8
9
10
1	=> 'Krieger'
2	=> 'Paladin',
3	=> 'Jaeger',
4	=> 'Schurke',
5	=> 'Priester',
6	=> 'Todesritter',
7	=> 'Schamane',
8	=> 'Magier',
9	=> 'Hexenmeister',
11	=> 'Druide',

raceID2race

Quellcode

1
2
3
4
5
6
7
8
9
10
1		=> 'human',
2		=> 'orc',
3		=> 'dwarf',
4		=> 'night elf',
5		=> 'undead',
6		=> 'tauren',
7		=> 'gnome',
8		=> 'troll',
10		=> 'blood elf'
11		=> 'draenei',

Die fuer map und zone folgen noch.

Nebenbei ich bastel hin und wieder an Eqdkp+ herrum (castle char import und so .. ) sollte da wer lust zu haben kann er sich gern bei mir mit einer PM melden. (Bitte mit Kenntnissen in PhP)
-----------------------------------------------------------------------------------------------------------------------------

Arcanez PvE Mutilate PvP Sub Doomsta PvE Fire PvP Frost
Yukilol PvE Diszi PvP Diszi Xtk PvE Heal/Ret PvP Heal

  • »darkmaster2k7« ist der Autor dieses Themas

Beiträge: 126

Danksagungen: 11

  • Private Nachricht senden

2

Montag, 13. Mai 2013, 13:02

seit gestern hat das XML eine cache time von 2h.
Grund dafuer ist folgende Website:


Um eine solche Ansicht zu erstellen wurde alle 5min das XMLDocument ausgelsen und alle PvP relevanten Daten und Infos ueber Klassenverteilung gepeichert.
Das Castle-Team ist damit jedoch garnicht einverstanden und hat das erstma das XML gesperrt um es dann halt auf die 2h zusetzen womit es nun fuer alles ziemlicht sinnlos ist.

Btw hab die ganzen scripte um in eqdkp anzuzeigen wer online ist usw hab ich noch alle liegen sofern bedarf besteht einfach ne pm hier im forum an mich.
Jenach skin kann das so ausehen:


oder halt http://envywow.en.ohost.de/showOnline.php fuer einen schnellen Ueberblick.
Laufen atm zum trollen auch wieder auf der envy hp.
-----------------------------------------------------------------------------------------------------------------------------

Arcanez PvE Mutilate PvP Sub Doomsta PvE Fire PvP Frost
Yukilol PvE Diszi PvP Diszi Xtk PvE Heal/Ret PvP Heal

Elron

Chef-Technik

Beiträge: 1 594

Danksagungen: 992

  • Private Nachricht senden

3

Montag, 13. Mai 2013, 14:06

Dass das alles von vornherein pures Entgegenkommen von uns war, die Daten bereitzustellen, ist dir aber hoffentlich noch bewusst. Ich glaube auf anderen Servern hättest du einen Vogel gezeigt bekommen, wenn die Frage kommt, ob eine XML Schnittstelle bereitgestellt wird.

Natürlich verstehen wir nun die Aufregung darüber, weil ihr euch da halt schicke Scripts zusammengebastelt habt, die nun weniger bringen als sie sollten. Das war uns auch klar, als wir das Intervall geändert haben.

Allerdings sollte euch auch klar sein, warum wir das Intervall geändert haben:

Es war logisch, dass sich damit Statistiken erstellen lassen. Allerdings war es nicht beabsichtigt, dass dies in so einem Ausmaße geschieht, dass man im Nachhinein zu Spieler X ingame gehen kann und sagen kann : "Na, heute schon deine durchschnittlichen 1:45 Stunden in Warsong gewesen?" - Oder ähnliche geartete, sensible Informationen. Schließlich lassen die Daten in gewissem Maße auch Rückschlüsse auf die Person zu.

Das wollen wir unseren Spielern in diesem Ausmaß nicht zumuten und von daher wurde als Kompromiss lediglich das Intervall erhöht.

Sicherlich kann man die Informationen auch Ingame beschaffen, klar. Allerdings ist es dort mit Online-Sein verbunden und geschieht nicht einfach so systematisch im 5 Minuten Takt, das ist der Unterschied an der Geschichte...

  • »darkmaster2k7« ist der Autor dieses Themas

Beiträge: 126

Danksagungen: 11

  • Private Nachricht senden

4

Montag, 13. Mai 2013, 15:38

Es ist mir natuerlich bewusst das es nur pures Entgegenkommen kommen war.

Jedoch war es nie die Absicht Spieler mit der Website zu Kompromittieren .. die Grund idee war eigtl ohne Ingame zu sein sehen zu koennen ob Bg geht, da wann man halt schnell bei dem.

Und wenn das Problem dabei ist das man gegen den willen eines Spielers die Daten erhabt und darstellt .. koennt man eine moeglichkeit einbauen die Daten zu bestimmen Chars unkenntlich zu speichern.

Wie ich Jeff schon geschrieben hab .. eine Idee dazu ist/war auch in Arbeit.

Ist halt alles sau Schade da in die Seite relativ viel Zeit geflossen ist, und mit 2h cache time das ganze "leicht" sinnlos ist so wohl fuer die Anzeige im Eqdkp als auch die PvP-Anzeige.

Btw das es so große Probleme in der Richtung gibt war uns nicht klar, den frueher konnte man mit dem minimanager auch playedtime, gold etc auslesen und da hatte zu dem Zeitpunkt keiner was dagegen.
-----------------------------------------------------------------------------------------------------------------------------

Arcanez PvE Mutilate PvP Sub Doomsta PvE Fire PvP Frost
Yukilol PvE Diszi PvP Diszi Xtk PvE Heal/Ret PvP Heal

RammboNr5

(Technik)

Beiträge: 168

  • Private Nachricht senden

5

Dienstag, 14. Mai 2013, 19:17

wenn es nur darum ging zu sehen, ob ein bg aufgeht oder nicht sollte es doch relativ leicht sein über diese Schnittstelle die Spieleranzahl im BG oder in der Queue dafür rauszugeben. Da es nur Anzahlen sind wären keine Rückschlüsse auf Charaktere oder Spieler möglich, aber die eigentlich gewünschte Information ist trotzdem vorhanden
"Sir, we are surrounded."
"Excellent. Then we can attack in all directions!"

Allgemeiner TS: 87.230.27.25:58419

Jungbluth

Schüler

Beiträge: 88

  • Private Nachricht senden

6

Montag, 27. Mai 2013, 03:24

tolles scipts das zweite hat allerdings nen schönheitsfehler^^
du fragst nur dn prefix ab aber nicht den suffix so werden nur titel angezeigt die vor dem namen stehen aber keine die dahiner stehen^^



Welche Farbkombination bist du? Finde es heraus!

  • »darkmaster2k7« ist der Autor dieses Themas

Beiträge: 126

Danksagungen: 11

  • Private Nachricht senden

7

Montag, 27. Mai 2013, 18:50

Jo, ist halt nur ein Beispiel ^^

Hier noch den link zur castleImport.class.php vom "CastlePvP_WebFrontend"
https://github.com/Doomsta/CastlePvP_Web…mport.class.php
sind so sachen wie gear, ArenaTeams und so noch drin
-----------------------------------------------------------------------------------------------------------------------------

Arcanez PvE Mutilate PvP Sub Doomsta PvE Fire PvP Frost
Yukilol PvE Diszi PvP Diszi Xtk PvE Heal/Ret PvP Heal

Jungbluth

Schüler

Beiträge: 88

  • Private Nachricht senden

8

Montag, 10. Juni 2013, 15:39

ich hab jz mal nen bissel rumgebalstet mit deiner vorlage leider bisher erfolglos daher wollte ich aml fragen ob du auch noch nen idee hättst wie man bestimmte dir ausgelsen daten weiter verrbeiten kann um z.b bei

[Gesundheit] => 37803

nur die menge der gesundheit zu kriegen
(die anzeige kann manja so nit präsentieren^^)



Welche Farbkombination bist du? Finde es heraus!

  • »darkmaster2k7« ist der Autor dieses Themas

Beiträge: 126

Danksagungen: 11

  • Private Nachricht senden

9

Montag, 10. Juni 2013, 16:48

Quellcode

1
[Gesundheit] => 37803

ich geh ma davon das dir mit print_r() das array ausgeben laest.
Hast halt ein Assoziative Array vorliegen und kannst dir so

Quellcode

1
echo $array[Gesundheit];

einzelne Werte ausgben lassen.

so lassen sich auch Werte in Arrays schreiben:

Quellcode

1
$out['stats']['base']['str'] = (string) $xml->characterInfo->characterTab->baseStats->strength['effective'];
https://github.com/Doomsta/CastlePvP_Web…t.class.php#L66

-----------------------------------------------------------------------------------------------------------------------------

Arcanez PvE Mutilate PvP Sub Doomsta PvE Fire PvP Frost
Yukilol PvE Diszi PvP Diszi Xtk PvE Heal/Ret PvP Heal

Jungbluth

Schüler

Beiträge: 88

  • Private Nachricht senden

10

Montag, 10. Juni 2013, 17:17

ne is jz scheinbar falsch verstanden ich meine nit einzelne werte auslesen sondern "[Gesundheit] =>" weglassen und nur "37803" ausgeben



Welche Farbkombination bist du? Finde es heraus!

Social Bookmarks