Copy the code below and paste it into a .php text file.
Save and upload to your web server.
Open script in browser.
*******************
<?php
/*
* charsearchxml.php
* a Dark Age of Camelot Guild XML data parser that looks for names in
* an XML guild listing
* for use on Dark Age of Camelot community websites.
*
* Dark Age of Camelot (or DAoC) is a MMORPG
* (massively multiplayer online rolepaying game)
* developed by Mythic Entertainment (http://www.mythicentertainment.com)
*
* Author: Julien COQUET
* a.k.a Glenfiddich Singlemalt on DAoC Merlin/Albion
* e-mail glenfiddich@purpledragons.net
* http://www.purpledragons.net
*
* Adapted from generic PHP code from http://www.php.net
*
* Developed in November of 2002 under the GNU GPL License.
* For more information, visit http://www.gnu.org/licenses/gpl.html
*
* Changelog:
* March 28, 2003 : added UTF8 support for GOA XML - Euro servers only
* Enjoy and please link to our site
* http://www.purpledragons.net
*/
class guildXML {
/*
* This class takes a Dark Age of Camelot Herald XML guild data file and parses it
*/
var $xml_parser;
var $xml_file;
var $html;
var $open_tag ;
var $close_tag ;
var $in_char;
var $in_alliance;
var $chars_array;
var $alliance_array;
var $current_tag ='';
/*
* Class Constructor
*/
function guildXML() {
$this->xml_parser = "";
$this->xml_file = "";
$this->html = "";
}
//Class Destructor (has to be invoked manually as PHP does not support destructors)
function destroy() {
xml_parser_free($this->xml_parser);
}
//Class Members
function concat($str) {
$this->html .= $str;
}
function startElement($parser, $name, $attrs) {
global $totalchars, $num_activechars,$num_inactivechars, $insideElement, $in_char, $current_tag, $i;
if (($in_char==1)||($in_alliance==1)){
$current_tag = trim($name);
}
if ($name=='GUILD'){
$current_tag= $name;
if (sizeof($attrs)) {
while (list($k, $v) = each($attrs)) {
if ($k=='GUILDRP'){$this->guildrp = trim($v);};
if ($k=='TIMESTAMP'){$this->timestamp = trim ($v);};
}
}
}
if ($name=='CHARACTER'){
$in_alliance = 1;
}
if ($name=='CHARACTER'){
$in_char=1;
$totalchars++;
if (sizeof($attrs)) {
while (list($k, $v) = each($attrs)) {
if ($k=='NAME'){
$this->chars_array[$i]['name']=trim($v);
$this->chars_array[$i]['firstname']= trim (substr($this->chars_array[$i]['name'],0, strpos($this->chars_array[$i]['name'],' ')));
$this->chars_array[$i]['lastname']= trim (substr($this->chars_array[$i]['name'], strpos($this->chars_array[$i]['name'],' ')));
if (!$this->chars_array[$i]['firstname'] && $this->chars_array[$i]['lastname']) {
$this->chars_array[$i]['firstname'] = $this->chars_array[$i]['lastname'];
$this->chars_array[$i]['lastname']='';
}
};
if ($k=='ID'){$this->chars_array[$i]['id']=$v;};
if ($k=='LASTON') {
$this->chars_array[$i]['laston']=trim($v);
if ($v!='Inactive') {
$num_activechars++;
} elseif($v=='Inactive'){
$num_inactivechars++;
}
}
}
}
}
}
function endElement($parser, $name) {
global $close_tag, $current_tag, $in_char, $i;
if ($name=='CHARACTER'){$i++; $in_char=0;}
if ($name=='ALLIANCE'){$i++; $in_alliance=0;}
}
function characterData($parser, $data) {
global $guildrp, $inactiverp, $current_tag, $in_char, $i;
//$content_output .= '<br>'.$current_tag.' = '.$data.'<br>';
if (($in_char==1) && ($current_tag=='RACE')){
$this->chars_array[$i]['race'].=trim($data);
}
if (($in_char==1) && ($current_tag=='CLASS')){
$this->chars_array[$i]['class'].=trim($data);
}
if (($in_char==1) && ($current_tag=='LEVEL')){
$this->chars_array[$i]['level'].=trim($data);
}
if (($in_char==1) && ($current_tag=='TOTALRP')){
$this->chars_array[$i]['rp'].=trim($data);
if ($this->chars_array[$i]['laston']=='Inactive'){
$inactiverp += trim($data);
} else {
$guildrp += trim($data);
}
}
if (($in_char==1) && ($current_tag=='GUILDRANK')){
$this->chars_array[$i]['guildrank'].=trim($data);
}
//$this->html .= $data;
}
function parse() {
$this->xml_parser = xml_parser_create();
xml_set_object($this->xml_parser, &$this);
// use case-folding so we are sure to find the tag in $map_array
xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, true);
xml_set_element_handler($this->xml_parser, "startElement", "endElement");
xml_set_character_data_handler($this->xml_parser, "characterData");
//xml_set_processing_instruction_handler($this->xml_parser, "PIHandler");
if (!($fp = fopen($this->xml_file, "r"))) {
die("could not open XML input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($this->xml_parser, $data, feof($fp))) {
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($this->xml_parser)),
xml_get_current_line_number($this->xml_parser)));
}
}
}
}
// End of class
// Support functions
/*
* The function sortItems() is used for sorting, called upon by uksort()
* It uses querystring parameter $param as the sorting parameter
* querystring parameter $dir indicates ascending or descending order
*/
function sortItems($a, $b) {
global $gu, $dir, $param;
$val_a = ($gu[$a][$param]);
$val_b = ($gu[$b][$param]);
if (!$param){$param='level';}
if (!$dir){$dir='down';}
switch ($param){
case 'rp':
$val_a = $val_a - 0;
$val_b = $val_b - 0;
break;
case 'level':
$val_a = $val_a - 0;
$val_b = $val_b - 0;
break;
}
if ($dir=='up'){
if ( $val_a > $val_b ){return 1;}
if ( $val_a < $val_b ){return -1;}
if ( $val_a = $val_b ){return 0;}
} else {
if ( $val_a < $val_b ){return 1;}
if ( $val_a > $val_b ){return -1;}
if ( $val_a = $val_b ){return 0;}
}
}
/*
* returns array with Guild Rank information
*/
function guildrank($rank){
switch ($rank){
case 0: $rankname = array('Guildmaster', 'Description for Guildmaster');
break;
case 1: $rankname = array('Rank 1 Title', 'Description for Guild Rank 1');
break;
case 2: $rankname = array('Rank 2 Title', 'Description for Guild Rank 2');
break;
case 3: $rankname = array('Rank 3 Title', 'Description for Guild Rank 3');
break;
case 4: $rankname = array('Rank 4 Title', 'Description for Guild Rank 4');
break;
case 5: $rankname = array('Rank 5 Title', 'Description for Guild Rank 5');
break;
case 6: $rankname = array('Rank 6 Title', 'Description for Guild Rank 6');
break;
case 7: $rankname = array('Rank 7 Title', 'Description for Guild Rank 7');
break;
case 8: $rankname = array('Rank 8 Title', 'Description for Guild Rank 8');
break;
case 9: $rankname = array('Rank 9 Title', 'Description for Guild Rank 9');
break;
}
return $rankname;
}
/*
* returns Realm Rank/Level
*/
function realmlevel ($rp){
$rap =1;
for ($i=1; $i<11; $i++){
if ($i!=1){
for ($j=0;$j<10;$j++){
$rp_needed = ((25/3)*(pow($rap,3))) - ((25/2)*(pow($rap,2))) + ((25/6)*$rap);
if ($rp_needed <10) {
$rp_needed =0;
}
if ($rp>=$rp_needed) {
$level = 'R'.$i.'L'.$j;
}
$rap++;
}
} else {
for ($j=1;$j<10;$j++){
$rp_needed = ((25/3)*(pow($rap,3))) - ((25/2)*(pow($rap,2))) + ((25/6)*$rap);
if ($rp_needed <10) {
$rp_needed =0;
}
if ($rp>=$rp_needed) {
$level = 'R'.$i.'L'.$j;
}
$rap++;
}
}
}
return $level;
}
/*
* returns Realm Title
*/
function realmtitle($rp){
/*
* You start at Rank 1. To rise to Rank 2, you need 7125 realm points.
* Rank 3 = 61750, Rank 4 = 213875, Rank 5 = 513500, Rank 6 = 1010625, Rank 7 = 1755250, Rank 8 = 2797375, Rank 9 = 4187000
* and finally Rank 10 = 5974125
*
* These ranks are for the Albion Realm. You need to add correct values for Hibernia or Midgard.
* The list of ranks per realm can be found at http://camelot.purpledragons.net/rp_chart.php
*/
if ($rp >=0) $title= 'Guardian';
if ($rp > 7125) $title = 'Warder';
if ($rp > 61750) $title = 'Myrmidon';
if ($rp > 213875) $title = 'Gryphon Knight';
if ($rp > 513500) $title = 'Eagle Knight';
if ($rp > 1010625) $title = 'Phoenix Knight';
if ($rp > 1755250) $title = 'Alerion Knight';
if ($rp > 2797375) $title = 'Unicorn Knight';
if ($rp > 4187000) $title = 'Lion Knight';
if ($rp > 5974125) $title = 'Dragon Knight';
if ($rp > 8208750) $title = 'Lord/Lady';
if ($rp > 23308097) $title = 'Baronet/Baronetess';
return $title;
}
// Main content
/* NOTE
* This file makes OPTIONAL calls to other scripts available on purpledragons.net.
* Class search calls onto classesxml.php
* Craft search calls onto craftxml.php
*
* while regular character search (by name) uses this very script
*/
$content_output ='
<h3>Character lookup</h3>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td><b>:: name</b></td>
<FORM ACTION="'.$PHP_SELF.'" METHOD="POST">
<td>
<input type="text" name="search"> <input type="submit" name="submit">
</td>
</FORM>
</tr>
</table>
';
if ($_POST['search']) {
$content_output .= 'Looking for: <b>'.$_POST['search'].'</b><hr>';
$guild = new guildXML(); //instantiate class
$guild->xml_file = "http://www.camelotherald.com/guilds/Merlin/804.xml";
$server = "Merlin";
$herald_char_url ="http://www.camelotherald.com/chardisplay.php";
// the xml_file property referes to you guild XML data file.
// Example given is the Merlin/Albion guild Dragon's Blood
$guild->parse();
// Copy some variables
$gu = $guild->chars_array;
$guildrp = $guild->guildrp;
$guildtimestamp = $guild->timestamp;
$xml_file = $guild->xml_file;
$guild->destroy(); // destroy the object
uksort($gu, "sortItems"); // call upon sortItems() to sort the guild information array
reset($gu);
/*
* Creates the output
*/
foreach ($gu as $key=>$value){
if (stristr($value['name'],$_POST['search'])) {
$content_output .= '
<li><b><a href="'.$herald_char_url.'?s='.$server.'&c='.$value['id'].'" target="blank" title="view '.$value['firstname'].'\'s Herald page">'.$value['name'].'</a></b> ('.$value['level'].' '.$value['class'].')';
} else {
unset ($gu[$key]);
}
}
/*
For Euro guilds: uncomment the following instructions
*/
// $content_output = utf8_decode($content_output); // handles UTF8 character encoding
/*
* Outputs table; end of script
*/
}
print $content_output; // outputs result
?>