PDA

View Full Version : Class-Specific Armor Upgrader


Kingly_Krab
02-09-2018, 07:22 PM
On my server I have a Tier progression that requires a mold, class shard, and the previous Tier item, the below scripts handle this and allow you to upgrade your items to the next tier. I've left my item IDs in for an example, if you have any questions, feel free to ask.

Popup, Color Plugin, etc:
sub Popup {
my $client = plugin::val('client');
my $title = shift;
my $text = shift;
my $button_type = shift;
if ($button_type == 2) {
my $button_one_id = shift;
my $button_two_id = shift;
my $button_one = shift;
my $button_two = shift;
$client->Popup2($title, plugin::PopupColor($text, "orange"), $button_one_id, $button_two_id, 1, 600, $button_one, $button_two);
} else {
my $popup_id = shift;
quest::popup($title, $text, $popup_id, $button_type);
}
}

sub PopupColor {
my $text = shift;
my $color = shift;
my $color_text = quest::gethexcolorcode($color);
return "<c \"$color_text\">$text</c>";
}

sub GetItemName {
my $item_id = shift;
return plugin::PopupColor(
quest::getitemname($item_id),
"royal_blue"
);
}

sub ProgressionItems {
my $class = shift;
my %items = (
"Warrior" => [
[103328..103334],
[104540..104546],
[104764..104770],
[104652..104658],
[104876..104882],
[129480..129486],
[104988..104994],
[105100..105106],
[105212..105218],
[105324..105330]
],
"Cleric" => [
[103335..103341],
[104547..104553],
[104771..104777],
[104659..104665],
[104883..104889],
[129487..129493],
[104995..105001],
[105107..105113],
[105219..105225],
[105331..105337]
],
"Paladin" => [
[103342..103348],
[104554..104560],
[104778..104784],
[104666..104672],
[104890..104896],
[129494..129500],
[105002..105008],
[105114..105120],
[105226..105232],
[105338..105344]
],
"Ranger" => [
[103349..103355],
[104561..104567],
[104785..104791],
[104673..104679],
[104897..104903],
[129501..129507],
[105009..105015],
[105121..105127],
[105233..105239],
[105345..105351]
],
"Shadowknight" => [
[103356..103362],
[104568..104574],
[104792..104798],
[104680..104686],
[104904..104910],
[129508..129514],
[105016..105022],
[105128..105134],
[105240..105246],
[105352..105358]
],
"Druid" => [
[103363..103369],
[104575..104581],
[104799..104805],
[104687..104693],
[104911..104917],
[129515..129521],
[105023..105029],
[105135..105141],
[105247..105253],
[105359..105365]
],
"Monk" => [
[103370..103376],
[104582..104588],
[104806..104812],
[104694..104700],
[104918..104924],
[129522..129528],
[105030..105036],
[105142..105148],
[105254..105260],
[105366..105372]
],
"Bard" => [
[103377..103383],
[104589..104595],
[104813..104819],
[104701..104707],
[104925..104931],
[129529..129535],
[105037..105043],
[105149..105155],
[105261..105267],
[105373..105379]
],
"Rogue" => [
[103384..103390],
[104596..104602],
[104820..104826],
[104708..104714],
[104932..104938],
[129536..129542],
[105044..105050],
[105156..105162],
[105268..105274],
[105380..105386]
],
"Shaman" => [
[103391..103397],
[104603..104609],
[104827..104833],
[104715..104721],
[104939..104945],
[129543..129549],
[105051..105057],
[105163..105169],
[105275..105281],
[105387..105393]
],
"Necromancer" => [
[103398..103404],
[104610..104616],
[104834..104840],
[104722..104728],
[104946..104952],
[129550..129556],
[105058..105064],
[105170..105176],
[105282..105288],
[105394..105400]
],
"Wizard" => [
[103405..103411],
[104617..104623],
[104841..104847],
[104729..104735],
[104953..104959],
[129557..129563],
[105065..105071],
[105177..105183],
[105289..105295],
[105401..105407]
],
"Magician" => [
[103412..103418],
[104624..104630],
[104848..104854],
[104736..104742],
[104960..104966],
[129564..129570],
[105072..105078],
[105184..105190],
[105296..105302],
[105408..105414]
],
"Enchanter" => [
[103419..103425],
[104631..104637],
[104855..104861],
[104743..104749],
[104967..104973],
[129571..129577],
[105079..105085],
[105191..105197],
[105303..105309],
[105415..105421]
],
"Beastlord" => [
[103426..103432],
[104638..104644],
[104862..104868],
[104750..104756],
[104974..104980],
[129578..129584],
[105086..105092],
[105198..105204],
[105310..105316],
[105422..105428]
],
"Berserker" => [
[103433..103439],
[104645..104651],
[104869..104875],
[104757..104763],
[104981..104987],
[129585..129591],
[105093..105099],
[105205..105211],
[105317..105323],
[105429..105435]
]
);
return @{$items{$class}};
}

sub ProgressionEmblems {
my $class = shift;
my %emblems = (
"Warrior" => 167000,
"Cleric" => 167001,
"Paladin" => 167002,
"Ranger" => 167003,
"Shadowknight" => 167004,
"Druid" => 167005,
"Monk" => 167006,
"Bard" => 167007,
"Rogue" => 167008,
"Shaman" => 167009,
"Necromancer" => 167010,
"Wizard" => 167011,
"Magician" => 167012,
"Enchanter" => 167013,
"Beastlord" => 167014,
"Berserker" => 167015
);
return $emblems{$class};
}

sub ProgressionMolds {
my $tier = shift;
my $index = shift;
my %molds = (
0 => [166000..166006],
1 => [166007..166013],
2 => [166014..166020],
3 => [166021..166027],
4 => [166028..166034],
5 => [166035..166041],
6 => [166042..166048],
7 => [166049..166055],
8 => [166056..166062],
9 => [166063..166069]
);
return $molds{$tier}[$index];
}

sub GetProgressionTier {
my $class = plugin::val('class');
my $itemcount = plugin::var('itemcount');
my @items = plugin::ProgressionItems($class);
my $type = shift;
for ($tier = 0; $tier < 10; $tier++) {
for ($index = 0; $index < 7; $index++) {
my $item_id = $items[$tier][$index];
my $mold_item_id = plugin::ProgressionMolds($tier, $index);
if (defined $itemcount->{$item_id}) {
return ($tier + 1, $index);
}

if (defined $itemcount->{$mold_item_id}) {
return ($tier, $index);
}
}
}

return (0, 0);
}

sub UpgradeProgressionItem {
my $class = plugin::val('class');
my $itemcount = plugin::var('itemcount');
my @items = plugin::ProgressionItems($class);
my $emblem_item_id = plugin::ProgressionEmblems($class);
my @data = plugin::GetProgressionTier();
my ($tier, $index) = ($data[0], $data[1]);
my $item_id = $items[$tier][$index];
my $previous_item_id = $items[$tier - 1][$index];
my $mold_item_id = plugin::ProgressionMolds($tier, $index);
my $mold_check = (defined $itemcount->{$mold_item_id} ? 1 : 0);
my $emblem_check = (defined $itemcount->{$emblem_item_id} ? 1 : 0);
my $previous_check = (defined $itemcount->{$previous_item_id} ? 1 : 0);
if ($tier == 0) {
if ($mold_check && $emblem_check) {
my $item_name = plugin::GetItemName($item_id);
delete $itemcount->{$_} for ($emblem_item_id, $mold_item_id);
quest::summonitem($item_id);
plugin::Popup("Forgemaster Ezekiel says,", "You have upgraded your item to a $item_name.", 0, 999);
return 1;
} else {
my $mold_item_name = plugin::GetItemName($mold_item_id);
my $emblem_item_name = plugin::GetItemName($emblem_item_id);
my $error_status = "You need to give me the following:<br>";
if (!$mold_check) { $error_status .= "1 $mold_item_name"; }
if (!$emblem_check) { $error_status .= "1 $emblem_item_name" ; }
plugin::Popup("Forgemaster Ezekiel says,", $error_status, 0, 999);
return 0;
}
} else {
if ($mold_check && $emblem_check && $previous_check) {
my $item_name = plugin::GetItemName($item_id);
delete $itemcount->{$_} for ($emblem_item_id, $mold_item_id, $previous_check);
quest::summonitem($item_id);
plugin::Popup("Forgemaster Ezekiel says,", "Here is your $item_name.", 0, 999);
return 1;
} else {
my $mold_item_name = plugin::GetItemName($mold_item_id);
my $emblem_item_name = plugin::GetItemName($emblem_item_id);
my $previous_item_name = plugin::GetItemName($previous_item_id);
my $error_status = "You need to give me the following:<br>";
if (!$mold_check) { $error_status .= "1 $mold_item_name<br>"; }
if (!$emblem_check) { $error_status .= "1 $emblem_item_name<br>"; }
if (!$previous_check) { $error_status .= "1 $previous_item_name"; }
plugin::Popup("Forgemaster Ezekiel says,", $error_status, 0, 999);
return 0;
}
}
}

return 1;


NPC: sub EVENT_SAY {
if ($ulevel == 70) {
my $yes = plugin::PopupColor("Yes", "green");
my $no = plugin::PopupColor("No", "red_1");
my $message = "<table>
<tr>
<td></td>
<td>Tier Mold</td>
<td>Class Shard</td>
<td>Previous Tier Item</td>
<tr>";
foreach my $tier (1..10) {
my $requires_previous = $tier != 1 ? $yes : $no ;
$message .= "<tr>
<td>Tier $tier</td>
<td>$yes</td>
<td>$yes</td>
<td>$requires_previous</td>
</tr>";
}
$message .= "</table>";
plugin::Popup("Forgemaster Ezekiel says,", $message, 0, 999);
} else {
plugin::Popup("Forgemaster Ezekiel says,", "I only speak to the most elite of soldiers.", 0, 999);
}
}

sub EVENT_ITEM {
if (!plugin::UpgradeProgressionItem()) {
plugin::return_items(\%itemcount);
}
}