All pastes #509546 Raw Edit

Mine

public text v1 · immutable
·published 2007-05-25 14:57 UTC
rendered paste body
##########################
# !armory <char> <realm> #
##########################
sub armory {
        my ($who, $char, $realm) = @_;
        if ($realm eq "undefined") {
                $realm = "Wildhammer";
        }
        my $url = "http://armory.worldofwarcraft.com/character-sheet.xml?r=$realm&n=$char";

        # setup objects
        # LWP::UserAgent for http gets
        my $ua = LWP::UserAgent->new();
        # set browser id
        $ua->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2");
        # Reqqqquest.
    my $req = HTTP::Request->new(GET => $url);
        # set referer
    $req->referer("http://armory.worldofwarcraft.com");

        # Diagnostic.
        print "Armory search: $char, $realm.\n";

    my $response = $ua->request($req);

        my $xml = XML::Simple->new(ForceArray=>[qw(spell arenaTeam)],KeyAttr=>[]);
        my $xmlshits = $response->content;
        my $data = $xml->XMLin("$xmlshits");

        if ($response->is_error()) {
                $main::self->privmsg($who, "$response->status_line");
        } else {
                my $html = $response->content;

                # Init result.
                my $result;

                # Populate vars for all characters.
                if (!$data->{characterInfo}->{character}) {
                        $result = "ERROR: Character not found.\n";
                } else {
                        my $name = "$data->{characterInfo}->{character}->{name}";
                        my $level = "$data->{characterInfo}->{character}->{level}";
                        my $race = "$data->{characterInfo}->{character}->{race}";
                        my $server = "$data->{characterInfo}->{character}->{realm}";
                        my $battlegroup = "$data->{characterInfo}->{character}->{battleGroup}";
                        my $class = "$data->{characterInfo}->{character}->{class}";
                        my $spec = "$data->{characterInfo}->{characterTab}->{talentSpec}->{treeOne}"."/"."$data->{characterInfo}->{characterTab}->{talentSpec}->{treeTwo}"."/"."$data->{characterInfo}->{characterTab}->{talentSpec}->{treeThree}";
                        my $guild;
                        if (!$data->{characterInfo}->{character}->{guildName}) {
                                $guild = "no guild";
                        } else {
                                $guild = "$data->{characterInfo}->{character}->{guildName}";
                        }
                        my $health = "$data->{characterInfo}->{characterTab}->{characterBars}->{health}->{effective}";
                        my $mana = "$data->{characterInfo}->{characterTab}->{characterBars}->{secondBar}->{effective}";
        #$data->{characterInfo}->{character}->{

                        my ($stat1,$stat2,$stat3,$stat4,$stat5,$stat6,$stat7,$stat8,$stat9,$stat10);

                        # Class-based stat retrieval and formatting.
                        ##########
                        # HUNTER #
                        ##########
                        if ("$class" eq "Hunter") {
                                $stat1 = $data->{characterInfo}->{characterTab}->{ranged}->{power}->{effective};
                                $stat2 = $data->{characterInfo}->{characterTab}->{ranged}->{critChance}->{percent};
                                $stat3 = $data->{characterInfo}->{characterTab}->{ranged}->{hitRating}->{increasedHitPercent};
                                $stat4 = $data->{characterInfo}->{characterTab}->{baseStats}->{agility}->{effective};
                                $stat5 = $data->{characterInfo}->{characterTab}->{defenses}->{resilience}->{value};

                                $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). Health $health | Mana $mana | RAP $stat1 | Crit% $stat2 | Hit% $stat3 | Agility $stat4 | Resilience $stat5 | ";
                        ###########
                        # WARRIOR #
                        ###########
                        } elsif ("$class" eq "Warrior") {
                                $stat1 = $data->{characterInfo}->{characterTab}->{melee}->{power}->{effective};
                                $stat2 = $data->{characterInfo}->{characterTab}->{melee}->{critChance}->{percent};
                                $stat3 = $data->{characterInfo}->{characterTab}->{melee}->{hitRating}->{increasedHitPercent};
                                $stat4 = $data->{characterInfo}->{characterTab}->{defenses}->{armor}->{effective};
                                $stat5 = $data->{characterInfo}->{characterTab}->{defenses}->{defense}->{value} + $data->{characterInfo}->{characterTab}->{defenses}->{defense}->{plusDefense};
                                $stat6 = $data->{characterInfo}->{characterTab}->{defenses}->{dodge}->{percent};
                                $stat7 = $data->{characterInfo}->{characterTab}->{defenses}->{parry}->{percent};
                                $stat8 = $data->{characterInfo}->{characterTab}->{defenses}->{block}->{percent};
                                $stat9 = $data->{characterInfo}->{characterTab}->{defenses}->{resilience}->{value};

                                $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). Health $health | AP $stat1 | Crit% $stat2 | Hit% $stat3 | Armor $stat4 | Defense $stat5 | Dodge $stat6 | Parry $stat7 | Block $stat8 | Resilience $stat9 | ";
                        #########
                        # ROGUE #
                        #########
                        } elsif ("$class" eq "Rogue") {
                                $stat1 = $data->{characterInfo}->{characterTab}->{melee}->{power}->{effective};
                                $stat2 = $data->{characterInfo}->{characterTab}->{melee}->{critChance}->{percent};
                                $stat3 = $data->{characterInfo}->{characterTab}->{melee}->{hitRating}->{increasedHitPercent};
                                $stat4 = $data->{characterInfo}->{characterTab}->{defenses}->{armor}->{effective};
                                $stat5 = $data->{characterInfo}->{characterTab}->{defenses}->{dodge}->{percent};
                                $stat6 = $data->{characterInfo}->{characterTab}->{defenses}->{parry}->{percent};
                                $stat7 = $data->{characterInfo}->{characterTab}->{defenses}->{resilience}->{value};

                                $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). Health $health | AP $stat1 | Crit% $stat2 | Hit% $stat3 | Armor $stat4 | Dodge $stat5 | Parry $stat6 | Resilience $stat7 | ";
                        ###########
                        # PALADIN #
                        ###########
                        } elsif ("$class" eq "Paladin") {
                                $stat1 = $data->{characterInfo}->{characterTab}->{melee}->{power}->{effective};
                                $stat2 = $data->{characterInfo}->{characterTab}->{melee}->{critChance}->{percent};
                                $stat3 = $data->{characterInfo}->{characterTab}->{melee}->{hitRating}->{increasedHitPercent};
                                $stat4 = $data->{characterInfo}->{characterTab}->{defenses}->{armor}->{effective};
                                $stat5 = $data->{characterInfo}->{characterTab}->{defenses}->{resilience}->{value};
                                # Unfortunately, we must things this way since they use the same name (spell) for misc buffs that get foreach'd later.
                                foreach (@{$data->{characterInfo}->{characterTab}->{spell}}) {
                                        $stat6 = "$_->{bonusHealing}->{value}";
                                        $stat7 = "$_->{critChance}->{holy}->{percent}";
                                        $stat8 = "$_->{manaRegen}->{casting}";
                                        $stat9 = "$_->{manaRegen}->{notCasting}";
                                }
#                               $stat6 = $data->{characterInfo}->{characterTab}->{spell}->{bonusHealing}->{value};
#                               $stat7 = $data->{characterInfo}->{characterTab}->{spell}->{critChance}->{holy}->{percent};
#                               $stat8 = $data->{characterInfo}->{characterTab}->{spell}->{manaRegen}->{casting};
#                               $stat9 = $data->{characterInfo}->{characterTab}->{spell}->{manaRegen}->{notCasting};

                                $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). Health $health | Mana $mana | AP $stat1 | Crit% $stat2 | Hit% $stat3 | Armor $stat4 | Resilience $stat5 | +Healing $stat6 | HolyCrit% $stat7 | MP5 $stat8/$stat9 | ";
                        ########
                        # MAGE #
                        ########
                        } elsif ("$class" eq "Mage") {
                                foreach (@{$data->{characterInfo}->{characterTab}->{spell}}) {
                                        $stat1 = "$_->{bonusDamage}->{fire}->{value}";
                                        $stat2 = "$_->{bonusDamage}->{frost}->{value}";
                                        $stat3 = "$_->{critChance}->{arcane}->{percent}";
                                        $stat4 = "$_->{hitRating}->{increasedHitPercent}";
                                        $stat5 = "$_->{manaRegen}->{casting}";
                                        $stat6 = "$_->{manaRegen}->{notCasting}";
                                }
                                $stat7 = $data->{characterInfo}->{characterTab}->{baseStats}->{intellect}->{effective};
                                $stat8 = $data->{characterInfo}->{characterTab}->{defenses}->{resilience}->{value};

                                $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). Health $health | Mana $mana | +FireDamage $stat1 | +FrostDamage $stat2 | SpellCrit% $stat3 | SpellHit% $stat4 | MP5 $stat5/$stat6 | Intellect $stat7 | Resilience $stat8 | ";
                        ##########
                        # SHAMAN #
                        ##########
                        } elsif ("$class" eq "Shaman") {
                                $stat1 = $data->{characterInfo}->{characterTab}->{melee}->{power}->{effective};
                                $stat2 = $data->{characterInfo}->{characterTab}->{melee}->{critChance}->{percent};
                                $stat3 = $data->{characterInfo}->{characterTab}->{melee}->{hitRating}->{increasedHitPercent};
                                $stat4 = $data->{characterInfo}->{characterTab}->{defenses}->{armor}->{effective};
                                $stat5 = $data->{characterInfo}->{characterTab}->{defenses}->{resilience}->{value};
                                # Unfortunately, we must do things this way since they use the same name (spell) for misc buffs that get foreach'd later.
                                foreach (@{$data->{characterInfo}->{characterTab}->{spell}}) {
                                        $stat6 = "$_->{bonusHealing}->{value}";
                                        $stat7 = "$_->{critChance}->{nature}->{percent}";
                                        $stat8 = "$_->{manaRegen}->{casting}";
                                        $stat9 = "$_->{manaRegen}->{notCasting}";
                                }

                                $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). Health $health | Mana $mana | AP $stat1 | Crit% $stat2 | Hit% $stat3 | Armor $stat4 | Resilience $stat5 | +Healing $stat6 | SpellCrit% $stat7 | MP5 $stat8/$stat9 | ";
                        ##########
                        # PRIEST #
                        ##########
                        # Unfortunately, we must do things this way since they use the same name (spell) for misc buffs that get foreach'd later.
                        } elsif ("$class" eq "Priest") {
                                foreach (@{$data->{characterInfo}->{characterTab}->{spell}}) {
                                        $stat1 = "$_->{bonusHealing}->{value}";
                                        $stat2 = "$_->{bonusDamage}->{shadow}->{value}";
                                        $stat3 = "$_->{critChance}->{holy}->{percent}";
                                        $stat4 = "$_->{manaRegen}->{casting}";
                                        $stat5 = "$_->{manaRegen}->{notCasting}";
                                }
                        $stat6 = $data->{characterInfo}->{characterTab}->{baseStats}->{spirit}->{effective};
                        $stat7 = $data->{characterInfo}->{characterTab}->{defenses}->{resilience}->{value};

                        $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). Health $health | Mana $mana | +Healing $stat1 | +ShadowDamage $stat2 | SpellCrit% $stat3 | MP5 $stat4/$stat5 | Spirit $stat6 | Resilience $stat7 | ";
                        ###########
                        # WARLOCK #
                        ###########
                        } elsif ("$class" eq "Warlock") {
                                foreach (@{$data->{characterInfo}->{characterTab}->{spell}}) {
                                        $stat1 = "$_->{bonusDamage}->{shadow}->{value}";
                                        $stat2 = "$_->{bonusDamage}->{fire}->{value}";
                                        $stat3 = "$_->{critChance}->{shadow}->{percent}";
                                        $stat4 = "$_->{hitRating}->{increasedHitPercent}";
                                        $stat5 = "$_->{manaRegen}->{casting}";
                                        $stat6 = "$_->{manaRegen}->{notCasting}";
                                }
                                $stat7 = $data->{characterInfo}->{characterTab}->{baseStats}->{intellect}->{effective};
                                $stat8 = $data->{characterInfo}->{characterTab}->{defenses}->{resilience}->{value};

                                $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). Health $health | Mana $mana | +ShadowDamage $stat1 | +FireDamage $stat2 | SpellCrit% $stat3 | SpellHit% $stat4 | MP5 $stat5/$stat6 | Intellect $stat7 | Resilience $stat8 | ";
                        #########
                        # DRUID #
                        #########
                        # Unfortunately, we must do things this way since they use the same name (spell) for misc buffs that get foreach'd later.
                        } elsif ("$class" eq "Druid") {
                                foreach (@{$data->{characterInfo}->{characterTab}->{spell}}) {
                                        $stat1 = "$_->{bonusHealing}->{value}";
                                        $stat2 = "$_->{bonusDamage}->{nature}->{value}";
                                        $stat3 = "$_->{critChance}->{nature}->{percent}";
                                        $stat4 = "$_->{manaRegen}->{casting}";
                                        $stat5 = "$_->{manaRegen}->{notCasting}";
                                }
                        $stat6 = $data->{characterInfo}->{characterTab}->{melee}->{power}->{effective};
                        $stat7 = $data->{characterInfo}->{characterTab}->{defenses}->{armor}->{effective};
                        $stat8 = $data->{characterInfo}->{characterTab}->{baseStats}->{agility}->{effective};
                        $stat9 = $data->{characterInfo}->{characterTab}->{baseStats}->{strength}->{effective};
                        $stat10 = $data->{characterInfo}->{characterTab}->{defenses}->{resilience}->{value};

                        $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). Health $health | Mana $mana | +Healing $stat1 | +SpellDamage $stat2 | SpellCrit% $stat3 | MP5 $stat4/$stat5 | AP $stat6 | Armor $stat7 | Agility $stat8 | Strength $stat9 | Resilience $stat10 | ";

                        } else {
                                $result = "$name, Level $level $race $class ($spec), \<$guild\>, $server ($battlegroup). ";
                        }
                        # Arena stats.
                        foreach (@{$data->{characterInfo}->{character}->{arenaTeams}->{arenaTeam}}) {
                                $result .= "$_->{size}v$_->{size} $_->{rating} ($_->{ranking}), ";
                        }
                        $result =~ s/, $/ | /;

                        # Fix the end of the buff list to make it pretty.
                        $result .= "(";
                        foreach my $e (@{$data->{characterInfo}->{characterTab}->{buffs}->{spell}}) {
                                $result .= "$e->{name}, ";
                        }
                        if ($result =~ m/\($/) {
                                $result .= "none)";
                        } else {
                                $result =~ s/, $/)/;
                        }

                # Return shit.
                $main::self->privmsg($who, "$result\n");
                }
        }
}