Purple Dragons
An online gaming guild

::Sections
  • Home
  • Forum
  • Lineage II
       
    :: soon!
  • DAoC
        :: screenshots
        :: roster
  • Dragon's Blood
  • Online Store
  • PHP XML modules
        :: Scripts home
        :: What is XML?
        :: PHP/XML forum
        :: Guild roster
        :: Guild hierarchy
        :: Character search
        :: Alliance status
        :: Class listing
        :: Crafter listing
        :: Top 10 RP holders
        :: Italy special!
  •  

    ::Logo
    The Dragon logo is inspired by artwork property of Mythic Entertainment.
    ::PHP/XML Italian Guild roster - DAoC

    For Italian guilds only!
    Why? Italian characters lastnames are encoded using Base64!!!
    This script will generate an alliance listing from your guild XML feed.
    Example guild is XxX from Vortigern/Hibernia

    ::Source code
    <?php 

        
    /* 
        *    it_guildxml.php 
        *    a Dark Age of Camelot Guild XML data parser that returns a guild roster 
        *     sortable with some parameters like name, Realm Points, Level, etc... 
        *    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 September of 2002 under the GNU GPL License. 
        *    For more information, visit http://www.gnu.org/licenses/gpl.html 
        * 
        *    Enjoy and please link to our site 
        *    http://www.purpledragons.net 
        * 
        *      Changelog
        *      Nov. 15th : added support for Herald Character Display page
        */ 


    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'],0strpos($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]['name'];
                                
    $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_parserXML_OPTION_CASE_FOLDINGtrue); 

            
    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($fp4096)) { 
                if (!
    xml_parse($this->xml_parser$datafeof($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://www.purpledragons.net/camelot/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://herald.daoc.it/xml/Vortigern/guilds/72.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 Vortigern/Hibernia guild XxX

        
    $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); 

        
    /* 
        * 
        *    Bases stats on active vs. inactive characters and indicates differentials 
        * 
        */ 


        
    if ($_GET['active']=='no'){ 
            
    $content_output.= 'Statistics for <b>'.$num_inactivechars.'</b> inactive characters  out of <b>'$totalchars .'</b> [<a href=" '.$PHP_SELF'">see active</a>]<br>'

        } else { 
            
    $content_output.='Statistics for <b>'.$num_activechars.'</b> active characters out of <b>'.$totalchars.'</b> [<a href="'.$PHP_SELF.'?active=no">see inactive</a>]<br>'
        } 

        
    /* 
        *    Creates the output table 
        */ 

        
    $content_output .= 'Total Realm Points: <b>'$guildrp .'</b>'
        
    $content_output .= '<br><span style="font-size:9pt;">Data last updated: <b>'.$guildtimestamp.'</b>&nbsp;::&nbsp;<a href="'.$xml_file.'" target="xml">View raw XML data</a></span><hr noshade="true"> 
    <table cellspacing="0" cellpadding="0" style="border: solid 1px #3F5471;"> 
    <tr> 
        <td> 
            <table width="100%" cellspacing="0" cellpadding="2"> 
                <tr bgcolor="#E5E5E5"> 
                    <form action="'
    $PHP_SELF .'" method="get"> 
                    <td> 
                        <SELECT name="param"> 
                            <option value="name">Name</option> 
                            <option value="level">Level</option> 
                            <option value="class">Class</option> 
                            <option value="race">Race</option> 
                            <option value="rp">RP</option> 
                            <option value="guildrank">Guild Rank</option> 
                        </select> 
                        <SELECT name="dir"> 
                            <option value="up">Ascending</option> 
                            <option value="down">Descending</option> 
                        </select> 
                        <input type="submit" value="search"><input type="hidden" name="active" value="'
    .$_GET['active'].'"> 
                    </td> 
                    </form> 
                </tr> 
            </table> 
        </td> 
    </tr> 
    <tr> 
        <td> 
            <table cellspacing="0" cellpadding="5"> 
                <tr style="font-weight: bold;" bgcolor="#CCCCCC"> 
                    <td>#</td> 
                    <td>Name</td> 
                    <td>Level</td> 
                    <td>Class</td> 
                    <td>Race</td> 
                    <td>RPs</td> 
                    <td>Rank</td> 
                    <td>level</td> 
                    <td>Guild</td> 
                </tr> 
        '


        
    $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 .= 
                <tr bgcolor="'
    .$color.'" style="font-size:9pt;"> 
                    <td>#'
    .$i.'</td> 
                    <td><b><a href="'
    .$herald_char_url.'?s='.$server.'&amp;c='.$value['id'].'" target="blank" title="view '.$value['firstname'].'\'s Herald page">'.$value['firstname'].' '.base64_decode($value['lastname']).'</a></b></td> 
                    <td>'
    .$value['level'].'</td> 
                    <td>'
    .$value['class'].'</td> 
                    <td>'
    .$value['race'].'</td> 
                    <td>'

                    if (
    $value['level']>=20){ 
                        
    $content_output .= $value['rp']; 
                    } else { 
                        
    $content_output .= '&nbsp;'
                    } 
                    
    $content_output .= 
                    </td> 
                    <td>'

                    if (
    $value['level']>=20){ 
                        
    $content_output .= realmtitle($value['rp']); 
                    } else { 
                        
    $content_output .= '&nbsp;'
                    } 
                    
    $content_output .= 
                    </td> 
                    <td>'

                    if (
    $value['level']>=20){ 
                        
    $content_output .= realmlevel($value['rp']); 
                    } else { 
                        
    $content_output .= '&nbsp;'
                    } 
                    
    $content_output .= 
                    </td>'

                    
    $guildrank guildrank($value['guildrank']); 
                    
    $content_output .= 
                    <td>'
    .$guildrank[0].'</td> 
                </tr>'

                    
    $i++; 
                } 
            } else { 
                if (
    $value['laston']=='Inactive') { 
                    if (
    $i%2==0){$color='#CCCCCC';}else{$color='#DDDDFF';} 
                    
    $content_output .= 
                <tr bgcolor="'
    .$color.'" style="font-size:9pt;"> 
                    <td>#'
    .$i.'</td> 
                    <td><b>'
    .$value['firstname'].' '.base64_decode($value['lastname']).'</b></td> 
                    <td>'
    .$value['level'].'</td> 
                    <td>'
    .$value['class'].'</td> 
                    <td>'
    .$value['race'].'</td> 
                    <td>'

                    if (
    $value['level']>=20){ 
                        
    $content_output .= $value['rp']; 
                    } else { 
                        
    $content_output .= '&nbsp;'
                    } 
                    
    $content_output .= 
                    </td> 
                    <td>'

                    if (
    $value['level']>=20){ 
                        
    $content_output .= realmtitle($value['rp']); 
                    } else { 
                        
    $content_output .= '&nbsp;'
                    } 
                    
    $content_output .= 
                    </td> 
                    <td>'

                    if (
    $value['level']>=20){ 
                        
    $content_output .= realmlevel($value['rp']); 
                    } else { 
                        
    $content_output .= '&nbsp;'
                    } 
                    
    $content_output .= 
                    </td>'

                    
    $guildrank guildrank($value['guildrank']); 
                    
    $content_output .= 
                    <td>'
    .$guildrank[0].'</td> 
                </tr>'

                    
    $i++; 
                } 

            } 

        } 
        
    $content_output .= 
            </table> 
        </td> 
    </tr> 
    </table>'


        
    /* 
        *    Outputs table; end of script 
        */ 

        
    print $content_output;
    ?>
    ::Contacts
  • Guildmaster: Sir William
  • Webmaster: Glenfiddich
  • ::Good Karma!
    I accept payment through PayPal!, the #1 online payment service!
    feed the webmaster!
    The money will be used for web hosting, raffles, RL events, etc...
    ::Promo
    Support This Site
     
    PHP - PHP Hypertext Processor