Site hosted by Angelfire.com: Build your free website today!
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 = $name; } if ($name=='GUILD'){ $current_tag= $name; if (sizeof($attrs)) { while (list($k, $v) = each($attrs)) { if ($k=='GUILDRP'){$this->guildrp=$v;}; if ($k=='TIMESTAMP'){$this->timestamp=$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']=$v;}; if ($k=='LASTON') { $this->chars_array[$i]['laston']=$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 .= '
'.$current_tag.' = '.$data.'
'; if (($in_char==1) && ($current_tag=='RACE')){ $this->chars_array[$i]['race'].=$data; } if (($in_char==1) && ($current_tag=='CLASS')){ $this->chars_array[$i]['class'].=$data; } if (($in_char==1) && ($current_tag=='LEVEL')){ $this->chars_array[$i]['level'].=$data; } if (($in_char==1) && ($current_tag=='TOTALRP')){ $this->chars_array[$i]['rp'].=$data; if ($this->chars_array[$i]['laston']=='Inactive'){ $inactiverp += $data; } else { $guildrp += $data; } } if (($in_char==1) && ($current_tag=='GUILDRANK')){ $this->chars_array[$i]['guildrank'].=$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'; return $title; } // Main content $guild = new guildXML(); //instantiate class $guild->xml_file = "http://www.camelotherald.com/guilds/Merlin/47.xml"; // the xml_file property referes to you guild XML data file. // Example given is the Merlin/Albion guild Purple Dragons $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 $param = $_GET['param']; // retrieve sort parameter from URL querystring uksort($gu, "sortItems"); // call upon sortItems() to sort the guild information array reset($gu); /* * * Bases stats on active vs. inactive characters and indicates differentials * */ if ($_GET['active']=='no'){ $content_output.= 'Statistics for '.$num_inactivechars.' inactive characters out of '. $totalchars .' [see active]
'; } else { $content_output.='Statistics for '.$num_activechars.' active characters out of '.$totalchars.' [see inactive]
'; } /* * Creates the output table */ $content_output .= 'Total Realm Points: '. $guildrp .''; $content_output .= '
Data last updated: '.$guildtimestamp.' :: View raw XML data
'; $i=1; foreach ($gu as $key=>$value){ if ($_GET['active']!='no'){ if ($value['laston']!='Inactive') { if ($i%2==0){$color='#CCCCCC';}else{$color='#DDDDFF';} $content_output .= ' '; $guildrank = guildrank($value['guildrank']); $content_output .= ' '; $i++; } } else { if ($value['laston']=='Inactive') { if ($i%2==0){$color='#CCCCCC';}else{$color='#DDDDFF';} $content_output .= ' '; $guildrank = guildrank($value['guildrank']); $content_output .= ' '; $i++; } } } $content_output .= '
# Name Level Class Race RPs Rank level Guild
#'.$i.' '.$value['name'].' '.$value['level'].' '.$value['class'].' '.$value['race'].' '; if ($value['level']>=20){ $content_output .= $value['rp']; } else { $content_output .= ' '; } $content_output .= ' '; if ($value['level']>=20){ $content_output .= realmtitle($value['rp']); } else { $content_output .= ' '; } $content_output .= ' '; if ($value['level']>=20){ $content_output .= realmlevel($value['rp']); } else { $content_output .= ' '; } $content_output .= ' '.$guildrank[0].'
#'.$i.' '.$value['name'].' '.$value['level'].' '.$value['class'].' '.$value['race'].' '; if ($value['level']>=20){ $content_output .= $value['rp']; } else { $content_output .= ' '; } $content_output .= ' '; if ($value['level']>=20){ $content_output .= realmtitle($value['rp']); } else { $content_output .= ' '; } $content_output .= ' '; if ($value['level']>=20){ $content_output .= realmlevel($value['rp']); } else { $content_output .= ' '; } $content_output .= ' '.$guildrank[0].'
'; /* 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; ?>