Go Back   EQEmulator Home > EQEmulator Forums > Quests > Quests::Custom

Quests::Custom Custom Quests here

Reply
 
Thread Tools Display Modes
  #1  
Old 02-13-2025, 05:44 AM
eyenseq's Avatar
eyenseq
Fire Beetle
 
Join Date: Jan 2014
Location: United States
Posts: 4
Default Custom buff bot with saved spell sets

Thought this was pretty cool and wanted to share it. NPC will provide a list of spells available to you at X level. If you are grouped it will use the lowest level group member preventing a high level and low level grouping to get buffs. you can "add spell #" to your buff list and it will be saved until you manually clear it with "remove spell #" or "clear buffs".

Code:
use JSON;
use Data::Dumper;

sub EVENT_SAY {
    my $client_level = $client->GetLevel();
    my $lowest_group_level = GetLowestGroupLevel($client);
    my $buff_level = $lowest_group_level ? $lowest_group_level : $client_level;

    if ($text=~/hail/i) {
        plugin::Whisper("Greetings, $name. I can provide buffs based on your level. Say 'list buffs' to see your available buffs or 'yes' to receive them. You can also 'add spell <id>' or 'remove spell <id>' from your buff list. Say 'clear buffs' to remove all buffs from your list.");
    }
    elsif ($text=~/list buffs/i) {
        ListAvailableBuffs($client, $buff_level);
    }
    elsif ($text=~/yes/i) {
        CastBuffs($client, $buff_level);
    }
    elsif ($text=~/add spell (\d+)/i) {
        AddBuff($client, $1, $buff_level);
    }
    elsif ($text=~/remove spell (\d+)/i) {
        RemoveBuff($client, $1);
    }
	elsif ($text=~/clear buffs/i) {
        ClearBuffList($client);
    }
}


sub GetLowestGroupLevel {
    my $client = shift;
    if ($client->IsGrouped()) {
        my $group = $client->GetGroup();
        if ($group) {
            my $lowest_level = 100;
            my $member_count = $group->GroupCount();
            for (my $i = 0; $i < $member_count; $i++) {
                my $member = $group->GetMember($i);
                next if (!$member);
                my $level = $member->GetLevel();
                $lowest_level = $level if ($level < $lowest_level);
            }
            return $lowest_level;
        }
    }
    return 0;
}


sub GetBuffList {
    my ($client) = @_;
    my $buff_list = $client->GetBucket("buff_list");

    if (!$buff_list) {
        return {};
    }
    elsif (ref($buff_list) eq 'HASH') {
        return $buff_list;
    }
    elsif ($buff_list =~ /^\{/) {
        return decode_json($buff_list);
    }
    return {};
}

sub SetBuffList {
    my ($client, $buff_list) = @_;
    $client->SetBucket("buff_list", encode_json($buff_list));
}


sub ListAvailableBuffs {
    my ($client, $level) = @_;
    my %buffs = GetBuffsByLevel($level);

    plugin::Whisper("Available buffs for level $level:");
    foreach my $spell_name (keys %buffs) {
        my $spell_id = $buffs{$spell_name};
        plugin::Whisper("$spell_name (ID: $spell_id)");
    }
}

sub AddBuff {
    my ($client, $spell_id, $level) = @_;
    my %buffs = GetBuffsByLevel($level);
    my $buff_list = GetBuffList($client);

    

    if (grep { $_ == $spell_id } values %buffs) {
        $buff_list->{$spell_id} = 1;
        SetBuffList($client, $buff_list);
        plugin::Whisper("Spell ID $spell_id added to your buff list.");
    } else {
        plugin::Whisper("That spell is not available at your level.");
    }

    
}

sub RemoveBuff {
    my ($client, $spell_id) = @_;
    my $buff_list = GetBuffList($client);

    

    if (exists $buff_list->{$spell_id}) {
        delete $buff_list->{$spell_id};
        SetBuffList($client, $buff_list);
        plugin::Whisper("Spell ID $spell_id removed from your buff list.");
    } else {
        plugin::Whisper("That spell is not in your buff list.");
    }

   
}

sub CastBuffs {
    my ($client, $level) = @_;
    my $lowest_group_level = GetLowestGroupLevel($client);  # Get lowest-level group member
    my $buff_list = GetBuffList($client);
    my %buffs = GetBuffsByLevel($lowest_group_level);  # Get spells for lowest group member level

    plugin::Whisper("Debug: Retrieved buff list - " . Dumper($buff_list));

    if (!%$buff_list) {
        plugin::Whisper("Your buff list is empty! Use 'add spell <id>' to add buffs.");
        return;
    }

    # Ensure the lowest-level player in the group is eligible for buffs
    if ($lowest_group_level < 1) {
        plugin::Whisper("Error: Could not determine lowest-level group member.");
        return;
    }

    plugin::Whisper("Checking group level... Lowest-level member is level $lowest_group_level.");

    foreach my $spell_id (keys %$buff_list) {
        # Only cast the spell if it is allowed at the lowest group level
        my $spell_name = GetSpellNameById($spell_id, \%buffs);

        if ($spell_name ne "Unknown Spell") {
            plugin::Whisper("Casting $spell_name (ID: $spell_id) on " . $client->GetCleanName());
            $npc->SpellFinished($spell_id, $client);
        } else {
            plugin::Whisper("Skipping spell ID $spell_id - Level too low.");
        }
    }

    plugin::Whisper("Buffs applied where possible!");
}


sub ClearBuffList {
    my ($client) = @_;
    
    SetBuffList($client, {});
    
    plugin::Whisper("All buffs have been removed from your buff list.");
}

sub GetSpellNameById {
    my ($spell_id, $buffs_ref) = @_;

    foreach my $name (keys %$buffs_ref) {
        if ($buffs_ref->{$name} == $spell_id) {
            return $name;  # Return spell name if ID matches
        }
    }

    return "Unknown Spell";  # Default if not found
}


sub GetBuffsByLevel {
    my ($level) = @_;

    if ($level >= 1 && $level <= 44) {
        return (
            "Blessing of Temperance" => 4053,
            "Infusion of Spirit" => 3454,
            "Stamina" => 158,
            "Spirit of Bih'Li" => 2524,
            "Swift Like the Wind" => 172,
            "Boon of the Clear Mind" => 1694,
            "Brell's Steadfast Aegis" => 3578,
        );
    }
    elsif ($level >= 45 && $level <= 54) {
        return (
            "Ancient: Gift of Aegolism" => 2122,
            "Spirit of Bih'Li" => 2524,
            "Riotous Health" => 1595,
            "Deliriously Nimble" => 1594,
            "Talisman of Kragg" => 1585,
            "Gift of Insight" => 1409,
            "Aanya's Quickening" => 1708,
            "Clarity II" => 1693,
            "Brell's Steadfast Aegis" => 3578,
            "Strength of Nature" => 1397,
        );
    }
    elsif ($level >= 55 && $level <= 64) {
        return (
            "Hand of Virtue" => 3479,
            "Aura of Reverence" => 4108,
            "Kazad's Mark" => 3047,
            "Ward of Gallantry" => 3470,
            "Focus of the Seventh" => 3397,
            "Talisman of the Boar" => 3389,
            "Talisman of the Wrulan" => 3383,
            "Spirit of Bih'Li" => 2524,
            "Voice of Quellious" => 3360,
            "Vallon's Quickening" => 3178,
            "Brell's Stalwart Shield" => 3432,
            "Spirit of the Predator" => 3417,
            "Strength of Tunare" => 3487,
            "Ferocity" => 3463,
            "Spiritual Dominion" => 3460,
            "Spiritual Vigor" => 3456,
            "Blessing of the Nine" => 3451,
            "Blessing of Replenishment" => 3441,
        );
    }

    elsif ($level >= 65 && $level <= 74) {
        return (
            "Hand of Tenacity Rk. III" => 9811,
            "Elushar's Mark Rk. III" => 9808,
            "Aura of Purpose Rk. III" => 9781,
            "Ward of the Dauntless Rk. III" => 9714,
            "Specter of Renewal Rk. III" => 11781,
            "Talisman of the Dire Rk. III" => 10058,
            "Talisman of the Stoic One Rk. III" => 10031,
            "Talisman of Foresight Rk. III" => 10013,
            "Voice of Intuition Rk. III" => 10664,
            "Hastening of Ellowind Rk. III" => 10661,
            "Brell's Stony Guard Rk. III" => 10211,
            "Snarl of the Predator Rk. III" => 10115,
            "Strength of the Forest Stalker Rk. III" => 10100,
        );
    }
    elsif ($level >= 75) {
        return (
            "Unified Hand of Gezat Rk. III" => 34228,
            "Unified Hand of Certitude Rk. III" => 34246,
			"Talisman of the Courageous Rk. III" => 35459,
			"Talisman of the Steadfast Rk. III" => 34849,
			"Voice of Foresight Rk. III" => 36267,
			"Hastening of Sviir Rk. III" => 36223,
			"Brell's Steadfast Bulwark Rk. III" => 34415,
			"Granitebark Blessing Rk. III" => 34988,
			"Shout of the Predator Rk. III" => 34568,
			"Strength of the Bosquestalker Rk. III" => 34541,
			"Shared Merciless Ferocity Rk. III" => 36424,
			"Spiritual Unity Rk. III" => 40524,

        );
    }
    return ();
}
__________________
Eyenseq
Nowhere EQ
Reply With Quote
  #2  
Old 02-13-2025, 03:42 PM
eyenseq's Avatar
eyenseq
Fire Beetle
 
Join Date: Jan 2014
Location: United States
Posts: 4
Default

Did some editing was not allowing buffs to be cast on ungrouped player. Added a new command to list saved buffs. Added say links to add/remove spells. Will post it if anyone is interested.
__________________
Eyenseq
Nowhere EQ
Reply With Quote
  #3  
Old 02-16-2025, 01:22 AM
eyenseq's Avatar
eyenseq
Fire Beetle
 
Join Date: Jan 2014
Location: United States
Posts: 4
Default

  • Supports 3 saved buff sets
  • Buffs can be added / removed from sets with clickable links
  • Add all buffs and block traditional way for the lazy
  • Easy way to add utility buffs and let players build their own ideal buff sets

Code:
use JSON;
use Data::Dumper;
use DBI;

sub EVENT_SAY {
    my $client_level = $client->GetLevel();
    my $lowest_group_level = GetLowestGroupLevel($client);
    my $buff_level = $lowest_group_level ? $lowest_group_level : $client_level;

    if ($text=~/hail/i) {
        plugin::Whisper("Yo, $name! Need a power-up? I致e got buffs hotter than dragon breath and stronger than goblin coffee!");
		plugin::Whisper("Check the menu with " . quest::saylink("list buffs", 1, "[List Buffs]") . " or go all-in with " . quest::saylink("all buffs", 1, "[All Buffs]") . ".");
		plugin::Whisper("Ready to get juiced? Say " . quest::saylink("yes", 1, "[Yes]") . " and I'll make you OP.");
		plugin::Whisper("Wanna see your stash? Peek at " . quest::saylink("saved buffs", 1, "[Saved Buffs]") . ".");
		plugin::Whisper("Messed up? Say 'add spell <id>', 'remove spell <id>', or nuke 'em all with " . quest::saylink("clear buffs", 1, "[Clear Buffs]") . "!");
		plugin::Whisper("Buff sets? I got 'em! Choose your loadout: " . quest::saylink("set 1", 1, "[Set 1]") . ", " . quest::saylink("set 2", 1, "[Set 2]") . ", or " . quest::saylink("set 3", 1, "[Set 3]") . ". Pick your poison!");

    }
    elsif ($text=~/list buffs/i) {
    my $active_set = GetActiveBuffSet($client); # Ensure we get the correct active set
    ListAvailableBuffs($client, $buff_level, $active_set);
}

    elsif ($text=~/yes/i) {
        CastBuffs($client, $buff_level);
    }
    elsif ($text=~/add spell (\d+)/i) {
        AddBuff($client, $1, $buff_level);
    }
    elsif ($text=~/remove spell (\d+)/i) {
        RemoveBuff($client, $1);
    }
    elsif ($text=~/clear buffs/i) {
        ClearBuffList($client);
    }
    elsif ($text=~/saved buffs/i) {
        ListSavedBuffs($client);
    }
    elsif ($text=~/all buffs/i) {
        AddAllBuffs($client);
    }
    elsif ($text=~/set (\d)/i && $1 >= 1 && $1 <= 3) {
        UseBuffSet($client, $1);
    }
}


sub GetSpellType {
    my ($spell_id) = @_;

    # Database connection settings (UPDATE AS NEEDED)
    my $db_host = "127.0.0.1";  	# Change if needed	
    my $db_name = "yourdatabase";  	# Change to your actual database name
    my $db_user = "youuser";  		# Change to your actual user name
    my $db_pass = 'yourpassword';  	# Change to your actual password

    # Connect to MySQL
    my $dbh = DBI->connect("DBI:mysql:database=$db_name;host=$db_host",
                           $db_user, $db_pass, { RaiseError => 1, AutoCommit => 1 });

    # Run the query
    my $query = "SELECT targettype FROM spells_new WHERE id = ?";
    my $sth = $dbh->prepare($query);
    $sth->execute($spell_id);

    # Fetch result
    my ($target_type) = $sth->fetchrow_array();

    # Close DB connection
    $sth->finish();
    $dbh->disconnect();

    # Debug output
    if (!defined $target_type) {
        return "Unknown";
    }

    return ($target_type == 41 || $target_type == 14) ? "Group" : "Single";
}


sub SetBuffSet {
    my ($client, $set_number, $buff_list) = @_;
    my $bucket_name = "buff_set_" . $set_number;
    $client->SetBucket($bucket_name, encode_json($buff_list));
}

sub SetActiveBuffSet {
    my ($client, $set_number) = @_;
    $client->SetBucket("current_buff_set", $set_number);
}

sub GetActiveBuffSet {
    my ($client) = @_;
    my $set_number = $client->GetBucket("current_buff_set");

    # Ensure we return a valid set number (1, 2, or 3), default to 1 if not set
    return ($set_number && $set_number =~ /^[1-3]$/) ? $set_number : 1;
}


sub AddAllBuffs {
    my ($client) = @_;
    my $client_level = $client->GetLevel();
    my %buffs = GetBuffsByLevel($client_level);
    my $buff_list = GetBuffList($client);

    if (!%buffs) {
        plugin::Whisper("No buffs available for your level.");
        return;
    }

    foreach my $spell_name (keys %buffs) {
        my $spell_id = $buffs{$spell_name};
        $buff_list->{$spell_id} = 1;
    }

    SetBuffList($client, $buff_list);
    plugin::Whisper("All available buffs for level $client_level have been added to your buff list.");
}

sub GetLowestGroupLevel {
    my $client = shift;

    # If the player is not grouped, return their own level
    return $client->GetLevel() unless $client->IsGrouped();

    my $group = $client->GetGroup();
    if ($group) {
        my $lowest_level = 100;  # Assume max level is 100, adjust as needed
        my $member_count = $group->GroupCount();

        for (my $i = 0; $i < $member_count; $i++) {
            my $member = $group->GetMember($i);
            next unless ($member);
            my $level = $member->GetLevel();
            $lowest_level = $level if ($level < $lowest_level);
        }
        return $lowest_level;
    }

    return $client->GetLevel();  # Default to player's level if something goes wrong
}


sub UseBuffSet {
    my ($client, $set_number) = @_;

    # Set the active buff set
    SetActiveBuffSet($client, $set_number);

    my $buff_list = GetBuffSet($client, $set_number);
    if (!%$buff_list) {
        plugin::Whisper("Buff set $set_number is empty or does not exist.");
        return;
    }

    # Apply the selected buff set
    SetBuffList($client, $buff_list);
    plugin::Whisper("Buff set $set_number has been loaded and is now active.");
}



sub GetBuffSet {
    my ($client, $set_number) = @_;
    my $bucket_name = "buff_set_" . $set_number;
    my $buff_set = $client->GetBucket($bucket_name);

    if (!$buff_set || $buff_set eq "null") {  # Ensures valid JSON data
        return {};
    }

    return decode_json($buff_set);
}

sub SaveBuffSet {
    my ($client, $set_number) = @_;
    my $buff_list = GetBuffList($client);

    if (!%$buff_list) {
        plugin::Whisper("Your buff list is empty! Add buffs before saving.");
        return;
    }

    my $bucket_name = "buff_set_" . $set_number;
    $client->SetBucket($bucket_name, encode_json($buff_list));
    plugin::Whisper("Buff set $set_number has been saved.");
}

sub ListSavedBuffs {
    my ($client) = @_;

    my %all_buffs;
    foreach my $level (1..100) {
        my %level_buffs = GetBuffsByLevel($level);
        %all_buffs = (%all_buffs, %level_buffs);
    }

    plugin::Whisper(" ");
    plugin::Whisper("===== 🎒 Your Saved Buff Sets 🎒 =====");
    plugin::Whisper(" ");

    # Define simulated colors and spacing using prefixes
    my %set_prefixes = (
        1 => "★★ Buff Set 1 ★★ ",   # Simulated Yellow
        2 => "◆◆ Buff Set 2 ◆◆ ",   # Simulated Cyan
        3 => "▲▲ Buff Set 3 ▲▲ ",   # Simulated Green
    );

    for my $set_number (1..3) {
        my $buff_list = GetBuffSet($client, $set_number);
        my $prefix = $set_prefixes{$set_number};

        plugin::Whisper(" ");
        plugin::Whisper("末末末末末末末末末末末末末末末末末");
        plugin::Whisper("$prefix");

        if (!%$buff_list) {
            plugin::Whisper("   (empty)");
            next;
        }

        my @sorted_spells = sort { lc($a) cmp lc($b) } keys %$buff_list;

        foreach my $spell_id (@sorted_spells) {
            my $spell_name = GetSpellNameById($spell_id, \%all_buffs);
            my $remove_command = quest::saylink("remove spell $spell_id $set_number", 1, "[Remove from Set $set_number]");
            plugin::Whisper("   - $spell_name (ID: $spell_id) $remove_command");
        }
    }

    plugin::Whisper(" ");
    plugin::Whisper("=====================================");
    plugin::Whisper(" ");
}


sub ListAvailableBuffs {
    my ($client, $level, $active_set) = @_;

    # Ensure we are using the correct active buff set
    $active_set ||= GetActiveBuffSet($client);  

    # Get all available buffs for the player's level
    my %available_buffs = GetBuffsByLevel($level);

    # Get the buffs saved in the active set
    my $saved_buffs = GetBuffSet($client, $active_set);

    plugin::Whisper("Available buffs for level $level (Active Buff Set: $active_set):");

    if (!%available_buffs) {
        plugin::Whisper("No buffs available at this level.");
        return;
    }

    my @sorted_spells = sort { lc($a) cmp lc($b) } keys %available_buffs;

    foreach my $spell_name (@sorted_spells) {
        my $spell_id = $available_buffs{$spell_name};

        if (exists $saved_buffs->{$spell_id}) {
            # If the spell is already in the saved set, show [Remove] button
            my $remove_command = quest::saylink("remove spell $spell_id $active_set", 1, "[Remove from Set $active_set]");
            plugin::Whisper("$spell_name (ID: $spell_id) $remove_command");
        } else {
            # If the spell is not in the saved set, show [Add] button
            my $add_command = quest::saylink("add spell $spell_id $active_set", 1, "[Add to Set $active_set]");
            plugin::Whisper("$spell_name (ID: $spell_id) $add_command");
        }
    }
}


sub AddBuff {
    my ($client, $spell_id, $set_number) = @_;

    # Ensure the correct buff set number
    if (!$set_number || $set_number !~ /^[1-3]$/) {
        $set_number = GetActiveBuffSet($client);
    }

    # Get the current active buff list
    my $buff_list = GetBuffSet($client, $set_number);

    # Allow any spell to be added, even if it's not in GetBuffsByLevel
    $buff_list->{$spell_id} = 1;
    SetBuffSet($client, $set_number, $buff_list);

    plugin::Whisper("Spell ID $spell_id added to Buff Set $set_number.");
}

sub RemoveBuff {
    my ($client, $spell_id, $set_number) = @_;

    # Ensure the correct buff set number is used
    if (!$set_number || $set_number !~ /^[1-3]$/) {
        $set_number = GetActiveBuffSet($client);
    }

    my $buff_list = GetBuffSet($client, $set_number);  # Load the correct buff set

    if (exists $buff_list->{$spell_id}) {
        delete $buff_list->{$spell_id};  # Remove the spell from the set
        SetBuffSet($client, $set_number, $buff_list);  # Save the updated set
        plugin::Whisper("Spell ID $spell_id removed from Buff Set $set_number.");
    } else {
        plugin::Whisper("That spell is not in Buff Set $set_number.");
    }
}


sub CastBuffs {
    my ($client, $level) = @_;

    my $active_set = GetActiveBuffSet($client);
    my $buff_list = GetBuffSet($client, $active_set);

    if (!%$buff_list) {
        plugin::Whisper("Uh-oh, Buff Set $active_set is empty! Add some spells first.");
        return;
    }

    plugin::Whisper("Buffing you up with Buff Set $active_set!");

    my $group = $client->GetGroup();
    my %unique_targets;

    # Always add the initiator (player who requested buffs)
    $unique_targets{$client->GetID()} = $client;

    # Check if the player is in a group
    if ($group) {
        plugin::Whisper("You're in a group! Buffing all group members, including bots!");

        for (my $i = 0; $i < $group->GroupCount(); $i++) {
            my $member = $group->GetMember($i);
            
            # Ensure member is valid
            next unless defined $member;

            # Include both players (IsClient) and bots (IsBot)
            if ($member->IsClient() || $member->IsBot()) {
                my $member_id = $member->GetID();
                $unique_targets{$member_id} = $member;
            }
        }
    }

    # Convert the hash back into an array of unique targets
    my @targets = values %unique_targets;

    # Prevent duplicate group buffs
    my %cast_group_buffs;

    foreach my $spell_id (sort { $a <=> $b } keys %$buff_list) {
        my $spell_name = GetSpellNameById($spell_id);
        my $spell_type = GetSpellType($spell_id);

        if ($spell_type eq "Group") {
            if (!$cast_group_buffs{$spell_id}) {
                
                
                # Now casting on all members including bots
                foreach my $member (@targets) {
                    $client->SpellFinished($spell_id, $member);
                }

                $cast_group_buffs{$spell_id} = 1;
            }
        } else {
            foreach my $member (@targets) {
                
                $client->SpellFinished($spell_id, $member);
            }
        }
    }

    plugin::Whisper("Buffs applied successfully!");
}


sub GetBuffList {
    my ($client) = @_;
    my $buff_list = $client->GetBucket("buff_list");
    return {} unless $buff_list;
    return decode_json($buff_list);
}

sub SetBuffList {
    my ($client, $buff_list) = @_;
    my $active_set = GetActiveBuffSet($client);
    SetBuffSet($client, $active_set, $buff_list);
}


sub ClearBuffList {
    my ($client) = @_;
    SetBuffList($client, {});
    plugin::Whisper("All buffs successfully removed.");
}


sub GetSpellNameById {
    my ($spell_id) = @_;

    # Database connection settings (UPDATE AS NEEDED)
    my $db_host = "127.0.0.1";  	# Change if needed	
    my $db_name = "yourdatabase";  	# Change to your actual database name
    my $db_user = "youuser";  		# Change to your actual user name
    my $db_pass = 'yourpassword';  	# Change to your actual password

    # Connect to MySQL
    my $dbh = DBI->connect("DBI:mysql:database=$db_name;host=$db_host",
                           $db_user, $db_pass, { RaiseError => 1, PrintError => 1, AutoCommit => 1 });

    if (!$dbh) {
        return "Unknown Spell";
    }

    # Run the query
    my $query = "SELECT name FROM spells_new WHERE id = ?";
    my $sth = $dbh->prepare($query);
    $sth->execute($spell_id);

    # Fetch result
    my ($spell_name) = $sth->fetchrow_array();

    # Close DB connection
    $sth->finish();
    $dbh->disconnect();

    # Debug output
    if (!defined $spell_name) {
        return "Unknown Spell";
    }

    return $spell_name;
}


sub GetBuffsByLevel {
    my ($level) = @_;

    if ($level >= 1 && $level <= 44) {
        return (
            "Blessing of Temperance" => 4053,
            "Infusion of Spirit" => 3454,
            "Stamina" => 158,
            "Spirit of Bih'Li" => 2524,
            "Swift Like the Wind" => 172,
            "Boon of the Clear Mind" => 1694,
            "Brell's Steadfast Aegis" => 3578,
        );
    }
    elsif ($level >= 45 && $level <= 54) {
        return (
            "Ancient: Gift of Aegolism" => 2122,
            "Spirit of Bih'Li" => 2524,
            "Riotous Health" => 1595,
            "Deliriously Nimble" => 1594,
            "Talisman of Kragg" => 1585,
            "Gift of Insight" => 1409,
            "Aanya's Quickening" => 1708,
            "Clarity II" => 1693,
            "Brell's Steadfast Aegis" => 3578,
            "Strength of Nature" => 1397,
        );
    }
    elsif ($level >= 55 && $level <= 64) {
        return (
            "Hand of Virtue" => 3479,
            "Aura of Reverence" => 4108,
            "Kazad's Mark" => 3047,
            "Ward of Gallantry" => 3470,
            "Focus of the Seventh" => 3397,
            "Talisman of the Boar" => 3389,
            "Talisman of the Wrulan" => 3383,
            "Spirit of Bih'Li" => 2524,
            "Voice of Quellious" => 3360,
            "Vallon's Quickening" => 3178,
            "Brell's Stalwart Shield" => 3432,
            "Spirit of the Predator" => 3417,
            "Strength of Tunare" => 3487,
            "Ferocity" => 3463,
            "Spiritual Dominion" => 3460,
            "Spiritual Vigor" => 3456,
            "Blessing of the Nine" => 3451,
            "Blessing of Replenishment" => 3441,
        );
    }

    elsif ($level >= 65 && $level <= 74) {
        return (
            "Hand of Tenacity Rk. III" => 9811,
            "Elushar's Mark Rk. III" => 9808,
            "Aura of Purpose Rk. III" => 9781,
            "Ward of the Dauntless Rk. III" => 9714,
            "Specter of Renewal Rk. III" => 11781,
            "Talisman of the Dire Rk. III" => 10058,
            "Talisman of the Stoic One Rk. III" => 10031,
            "Talisman of Foresight Rk. III" => 10013,
            "Voice of Intuition Rk. III" => 10664,
            "Hastening of Ellowind Rk. III" => 10661,
            "Brell's Stony Guard Rk. III" => 10211,
            "Snarl of the Predator Rk. III" => 10115,
            "Strength of the Forest Stalker Rk. III" => 10100,
        );
    }
    elsif ($level >= 75) {
        return (
            "Unified Hand of Gezat Rk. III" => 34228,
            "Unified Hand of Certitude Rk. III" => 34246,
			"Talisman of the Courageous Rk. III" => 35459,
			"Talisman of the Steadfast Rk. III" => 34849,
			"Spirit of Dauntlessness Rk. III" => 35365,
			"Voice of Foresight Rk. III" => 36267,
			"Hastening of Sviir Rk. III" => 36223,
			"Brell's Steadfast Bulwark Rk. III" => 34415,
			"Granitebark Blessing Rk. III" => 34988,
			"Shout of the Predator Rk. III" => 34568,
			"Strength of the Bosquestalker Rk. III" => 34541,
			"Shared Merciless Ferocity Rk. III" => 36424,
			"Spiritual Unity Rk. III" => 40524,

        );
    }
    return ();
}
__________________
Eyenseq
Nowhere EQ
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 10:19 AM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3