EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Quests::Completed (https://www.eqemulator.org/forums/forumdisplay.php?f=633)
-   -   Class-Specific Armor Upgrader (https://www.eqemulator.org/forums/showthread.php?t=41756)

Kingly_Krab 02-09-2018 07:22 PM

Class-Specific Armor Upgrader
 
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:
Code:

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:
Code:

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



All times are GMT -4. The time now is 09:42 AM.

Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.