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