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");
}
}
}