EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Support::Windows Servers (https://www.eqemulator.org/forums/forumdisplay.php?f=587)
-   -   Creating a Buff Bot (https://www.eqemulator.org/forums/showthread.php?t=40898)

DanCanDo 09-14-2016 02:06 AM

Creating a Buff Bot
 
This is a little simple instruction to create a buff bot for those wanting to do so. It includes a quest script for the NPC you use, which is what I am using now on my own server.

You can create an NPC ingame easily with a GM toon. Just stand in the spot where you want him and type #spawn npcname (or whatever you name it).
Then target the NPC and type #npcspawn create. After that I type #repop Then, target the NPC again and type #npcedit level 65 (or higher) I use 70 myself.
The reason for this, is because if a level 1 npc buffs you it will only be a 3 minute buff. At level 65-70, (for example), Temp will be full duration.(1 hr 40 min)
#npcedit is a great GM tool ingame. I use it all the time, developing zones. I get to see instantly what I have done (chuckle)
Just remember to #repop after you're done for changes to take effect.
If you want to move your buffbot, just target it, go stand where you want it and type #spawnfix (then do a #repop for changes)

The buff script (below), contains my own preferences for buffs and dialog.
It checks for levels and whether you're grouped or not, then will cast the appropriate spells for single shot or group cast. (Excluding clarity, it's only single).
In this script, the "[SPEED]" option will dish out SoW for single or Spirit of Bih'Li if you're grouped.

This is the buffing script I use on my buff bot.
Code:

sub EVENT_SPAWN {
  $x = $npc->GetX();
  $y = $npc->GetY();
  quest::set_proximity($x - 500, $x + 500, $y - 500, $y + 500);
}

sub EVENT_SAY {
  if (($text=~/hail/i) && ($ulevel<46)) {
    quest::say("Hello $name, If you or your group need [Temp] or [Speed] , please gather close. I can also give you [Clarity] to help you on your journeys as well. When you reach 46 I can give you KEI");
  }
  if (($text=~/hail/i) && ($ulevel>46)) {
    quest::say("Hello $name, If you or your group need [Virtue] or [KEI] or [Speed] , please gather close.");
  }
  if (($text=~/hail/i) && ($ulevel==46)) {
    quest::say("Hello $name, If you or your group need [Temp] or [KEI] or [Speed] , please gather close. Let me know when you reach 47.");
  }
  elsif (($text=~/temp/i) && ($ulevel<47)) {
    my $Group = $client->GetGroup();
    if ($Group) {
      my $Valid = 1;
      for ($count = 0; $count < $Group->GroupCount(); $count++) {
        if ($Group->GetMember($count)->GetLevel() < 1) {
          $Valid = 0;
        }
      }
      if ($Valid == 1) {
        quest::say("Incoming Group Temp for $name.");
        $Group->CastGroupSpell($npc, 4053);
      }
      else {
        quest::say("Sorry $name. Someone is not at the appropriate level for that.");
      }
    }
    else {
      quest::say("Incoming Temp for $name");
          my $GetPlayerID = $client->GetID();
          $npc->CastSpell(3692, $GetPlayerID );
    }
  }
  elsif (($text=~/virtue/i) && ($ulevel>46)) {
    my $Group = $client->GetGroup();
    if ($Group) {
      my $Valid = 1;
      for ($count = 0; $count < $Group->GroupCount(); $count++) {
        if ($Group->GetMember($count)->GetLevel() > 75) {
          $Valid = 0;
        }
      }
      if ($Valid == 1) {
        quest::say("Incoming Group Virtue for $name.");
        $Group->CastGroupSpell($npc, 3479);
      }
      else {
        quest::say("Sorry $name. Someone not at the appropriate level for that.");
      }
    }
    else {
      quest::say("Incoming Virtue for $name");
          my $GetPlayerID = $client->GetID();
          $npc->CastSpell(3467, $GetPlayerID );
    }
  }
  elsif (($text=~/clarity/i) && ($ulevel<76)) {
    quest::say("Incoming Clarity for $name");
          my $GetPlayerID = $client->GetID();
          $npc->CastSpell(174, $GetPlayerID );
  }
  elsif (($text=~/kei/i) && ($ulevel>45)) {
    quest::say("Incoming KEI for $name");
          my $GetPlayerID = $client->GetID();
          quest::selfcast(2570);
  }
  elsif (($text=~/speed/i) && ($ulevel<76)) {
    my $Group = $client->GetGroup();
    if ($Group) {
      my $Valid = 1;
      for ($count = 0; $count < $Group->GroupCount(); $count++) {
        if ($Group->GetMember($count)->GetLevel() > 75) {
          $Valid = 0;
        }
      }
      if ($Valid == 1) {
        quest::say("Incoming Spirit of Bih'Li for $name.");
        $Group->CastGroupSpell($npc, 2524);
      }
      else {
        quest::say("Sorry $name. You are not at the appropriate level for that.");
      }
    }
    else {
      quest::say("Incoming SoW for $name");
          my $GetPlayerID = $client->GetID();
          $npc->CastSpell(278, $GetPlayerID );
    }
  }
}


Maze_EQ 09-14-2016 10:30 AM

Code:

$maxlevelbuffs = 70;
%buffshash = (
    1 =>
        # Warrior
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    2 =>
        # Cleric
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    3 =>
        # Paladin
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    4 =>
        # Ranger
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    5 =>
        # Shadow Knight
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    6 =>
        # Druid
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    7 =>
        # Monk
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    8 =>
        # Bard
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    9 =>
        # Rogue
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    10 =>
        # Shaman
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    11 =>
        # Necromancer
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    12 =>
        # Wizard
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },       
    13 =>
        # Magician
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    14 =>
        # Enchanter
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    15 =>
        # Beastlord
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        },
    16 =>
        # Berserker
        {
                level10generic                =>        [276,278,219,368,146,148,279,129],
                level10costgeneric        =>        0,
                level10advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level10costadvanced        =>        100,
                level20generic                =>        [276,278,219,368,146,148,279,129],
                level20costgeneric        =>        0,
                level20advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level20costadvanced        =>        100,
                level30generic                =>        [276,278,219,368,146,148,279,129],
                level30costgeneric        =>        0,
                level30advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level30costadvanced        =>        100,
                level40generic                =>        [276,278,219,368,146,148,279,129],
                level40costgeneric        =>        0,
                level40advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level40costadvanced        =>        100,
                level50generic                =>        [276,278,219,368,146,148,279,129],
                level50costgeneric        =>        0,
                level50advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level50costadvanced        =>        100,
                level60generic                =>        [276,278,219,368,146,148,279,129],
                level60costgeneric        =>        0,
                level60advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level60costadvanced        =>        100,
                level70generic                =>        [276,278,219,368,146,148,279,129],
                level70costgeneric        =>        0,
                level70advanced                =>        [3692,2505,423,356,172,64,145,1693,15,60,61,46,2524],
                level70costadvanced        =>        100,
        }
);

############################################################################################
###############################  EDIT SHIT ABOVE ONLY ######################################
############################################################################################


sub EVENT_SAY {
        #### HAIL ####
        my $groupbuffmaxcost = 0;
        if ($text =~/Hail/i) {
                plugin::Whisper("Greetings $name. I have been sent to aid you on your journey! Would you like: ");
                plugin::Whisper("Some [".quest::saylink("lesser buffs",1)."] for ".$buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costgeneric"}."pp");
                plugin::Whisper("Better [".quest::saylink("greater blessings",1)."] for ".$buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costadvanced"}."pp");
                if ($client->IsGrouped()) {
                        $buffgroup = $entity_list->GetGroupByClient($client);
                        for ($count = 0; $count < $buffgroup->GroupCount(); $count++) {
                                my $groupmember = $buffgroup->GetMember($count);
                                if ($groupmember->GetZoneID() == $zoneid) {
                                        $groupbuffmaxcost += ($buffshash{$groupmember->GetClass()}->{"level".round_up($groupmember->GetLevel())."costadvanced"});
                                }
                        }
                        plugin::Whisper("Best [".quest::saylink("group blessings",1)."] for ".$groupbuffmaxcost."pp");
                }
                plugin::Whisper("To [".quest::saylink ("cure", 1)."] you and/or your pet for free.");
                plugin::Whisper("A [".quest::saylink ("bind", 1)."] to this location at no cost.");
        }
        #### LESSER BUFFS ####
        elsif ($text=~/lesser/i) {
                if ($client->GetCarriedMoney() >= (($buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costgeneric"}) * 1000)) {
                        my @buffstocast = @{$buffshash{$client->GetClass()}->{"level".round_up($ulevel)."generic"}};
                        foreach my $buff (@buffstocast) {
                                if ($client->GetPetID()) {
                                        my $pcpet = $entity_list->GetMobByID($client->GetPetID());
                                        $client->SpellFinished ($buff, $pcpet);
                                }
                                quest::selfcast ($buff);
                        }
                        $client->TakeMoneyFromPP((($buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costgeneric"}) * 1000), 1) unless ($buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costgeneric"}) == 0;
                }
                else {
                        plugin::Whisper ("I charge ".($buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costgeneric"})."pp for lesser buffs, you don't appear to have enough on you.");
                }
        }
        #### ADVANCED BUFFS ####
        elsif ($text =~/greater/i) {
                if ($client->GetCarriedMoney() >= (($buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costadvanced"}) * 1000)) {
                        my @buffstocast = @{$buffshash{$client->GetClass()}->{"level".round_up($ulevel)."advanced"}};
                        foreach my $buff (@buffstocast) {
                                if ($client->GetPetID()) {
                                        my $pcpet = $entity_list->GetMobByID($client->GetPetID());
                                        $client->SpellFinished ($buff, $pcpet);
                                }
                                quest::selfcast ($buff);
                        }
                        $client->TakeMoneyFromPP((($buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costadvanced"}) * 1000), 1) unless ($buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costadvanced"}) == 0;
                }
                else {
                        plugin::Whisper ("I charge ".($buffshash{$client->GetClass()}->{"level".round_up($ulevel)."costadvanced"})."pp for advanced blessings, you don't appear to have enough on you.");
                }
        }
        #### GROUP BUFFS ####
        elsif ($text =~ /group/i && $client->IsGrouped()) {
                if ($client->GetCarriedMoney() >= (($buffshash{$client->GetClass()}->{"level".$maxlevelbuffs."costadvanced"}) * 1000 * $buffgroup->GroupCount())) {
                        for ($count = 0; $count < $buffgroup->GroupCount(); $count++) {
                                my $groupmember = $buffgroup->GetMember($count);
                                if ($groupmember->GetZoneID() == $zoneid) {
                                        $client->TakeMoneyFromPP((($buffshash{$groupmember->GetClass()}->{"level".round_up($groupmember->GetLevel())."costadvanced"}) * 1000), 1) unless ($buffshash{$groupmember->GetClass()}->{"level".round_up($groupmember->GetLevel())."costadvanced"}) == 0;
                                        my @buffstocast = @{$buffshash{$groupmember->GetClass()}->{"level".round_up($groupmember->GetLevel())."advanced"}};
                                        foreach my $buff (@buffstocast) {
                                                if ($groupmember->GetPetID()) {
                                                        my $groupmemberpet = $entity_list->GetMobByID($groupmember->GetPetID());
                                                        $groupmember->SpellFinished ($buff, $groupmemberpet);
                                                }
                                                $groupmember->SpellFinished ($buff, $groupmember);
                                        }
                                $groupmember->SendMarqueeMessage(15, 510, 1, 1, 3000, "You've been buffed compliments of ".$client->GetCleanName()."!");
                                }                       
                        }
                }
                else {
                        plugin::Whisper("I charge a maximum of ".(($buffshash{$client->GetClass()}->{"level".$maxlevelbuffs."costadvanced"}) * $buffgroup->GroupCount())."pp to cast buffs on your entire group.  You don't appear to have enough!");
                }       
        }
        #### CURE ####
        elsif ($text=~/cure/i) {
                if ($client->GetPetID()) {
                        my $pppet = $entity_list->GetMobByID($client->GetPetID());
                        $client->SpellFinished (6594, $pppet);
                }
                $client->SpellFinished(6594);
        }
        #### BIND ####
        elsif ($text=~/bind/i) {
                quest::selfcast(35);
        }
}

sub round_up {
        my $n = shift;
        my $scale = 10**int(log($n)/log(10));
        $n = 9 if $scale == 1;
        if ($n > $scale) {
                $n = int($n/$scale+1)*$scale;
        }
        $n;

Because buffs by class is important.

Let's make elf sims great again!

DanCanDo 09-14-2016 10:57 AM

Quote:

Originally Posted by Maze_EQ (Post 251125)

Because buffs by class is important.

Let's make elf sims great again!

Yes, buffs by class is important, but you get what you pay for.

Let's make free buffs great again! :P

N0ctrnl 09-14-2016 10:57 AM

In the future you might wanna drop this in the custom quests section. More likely to be found when looked for thataway.

DanCanDo 09-14-2016 12:01 PM

Quote:

Originally Posted by N0ctrnl (Post 251127)
In the future you might wanna drop this in the custom quests section. More likely to be found when looked for thataway.

I actually thought about that, but I figured since the post was more directed at
the whole creation of a buff bot, it would be better off here, otherwise, if it was
just the script, yes, definately could of been put in a quest forum.

Kingly_Krab 09-14-2016 04:19 PM

plugin:
Code:

sub BuffsHash {
    my %hash = (1 => [1, 10, [219, 279, 269, 266, 40, 39, 697, 278, 46, 129, 13], 0],
    2 => [11, 20, [89, 283, 148, 2512, 147, 170, 174, 278, 46, 432, 13], 5],
    3 => [21, 30, [244, 149, 148, 349, 151, 10, 1693, 4054, 356, 13], 10],
    4 => [31, 40, [312, 161, 160, 152, 153, 171, 1694, 169, 1727, 13], 25],
    5 => [41, 50, [4053, 158, 154, 157, 159, 172, 1695, 2517, 1560, 13], 50],
    6 => [51, 60, [1447, 1580, 1579, 1596, 1581, 1729, 2570, 2517, 1561, 13], 125],
    7 => [61, 65, [3467, 3397, 4883, 3234, 1710, 3350, 2519, 2517, 3448, 13], 250],
    8 => [66, 70, [27032, 14284, 3472, 3479, 5415, 5355, 5352, 3178, 5513, 3444, 3185, 27032, 25230, 26317, 25443, 25470, 13, 432], 500]);
    return %hash;
}

sub ListBuffPrices {
    my %h = plugin::BuffsHash();
    my @a;
    foreach my $key (sort {$a <=> $b} keys %h) {
        push @a, "$h{$key}[0] to $h{$key}[1]: $h{$key}[3] Platinum";
    }
    quest::popup("Buff Prices", join("<br>", @a));
}

sub GetBuffCost {
    my $ulevel = plugin::val('ulevel');
    my %h = plugin::BuffsHash();
    foreach my $key (sort {$a <=> $b} keys %h) {
        if ($ulevel >= $h{$key}[0] && $ulevel <= $h{$key}[1]) {
            return $h{$key}[3];
        }
    }
}

sub HandleBuffBot {
    my $ulevel = plugin::val('ulevel');
    my $npc = plugin::val('npc');
    my $client = plugin::val('client');
    my %buffsHash = plugin::BuffsHash();
    if (!$client->GetGroup()) {
        foreach my $k (keys %buffsHash) {
            if ($ulevel >= $buffsHash{$k}[0] && $ulevel <= $buffsHash{$k}[1]) {
                if ($client->TakeMoneyFromPP($buffsHash{$k}[3] * 1000, 1)) {
                    quest::selfcast($_) for @{$buffsHash{$k}[2]};
                } else {
                    plugin::Whisper("You cannot afford buffs, they cost $buffsHash{$k}[3] Platinum for your level!");
                    return;
                }
            }
        }
    } else {
        foreach my $k (keys %buffsHash) {
            if ($ulevel >= $buffsHash{$k}[0] && $ulevel <= $buffsHash{$k}[1]) {
                if ($client->TakeMoneyFromPP($buffsHash{$k}[3] * 1000, 1)) {
                    for ($i = 0; $i < 6; $i++) {
                        if ($client->GetGroup()->GetMember($i) && $client->GetGroup()->GetMember($i)->IsClient()) {
                            $client->GetGroup()->GetMember($i)->SpellFinished($_, $client, 0) for @{$buffsHash{$k}[2]};
                        }
                    }
                } else {
                    plugin::Whisper("You cannot afford buffs, they cost $buffsHash{$k}[3] Platinum for your level!");
                    return;
                }
            }
        }
    }
    plugin::Whisper("Enjoy your buffs!");
}

NPC:
Code:

sub EVENT_SAY {   
    if ($text=~/Hail/i) {
        plugin::Whisper("Hello $name, would you like some " . quest::saylink("buffs", 1) . "? Keep in mind, the " . quest::saylink("price", 1) . " of these buffs increases as you level.");
    } elsif ($text=~/Buffs/i) {
        quest::popup("Confirmation Window", "Are you sure you would like to purchase buffs?<br><font color ='#00FFFF'>Level $ulevel buffs cost " . plugin::GetBuffCost() . " Platinum.</font>", 998, 1);
    } elsif ($text=~/Price/i) {
        plugin::ListBuffPrices();
    }
}

sub EVENT_POPUPRESPONSE {
    plugin::HandleBuffBot();
}


Maze_EQ 09-14-2016 04:32 PM

fu kingly.

DanCanDo 09-14-2016 07:44 PM

I just tried that out, it's a nice little "plat for buffs" script. Not once on EQ Live did I ever
find 14 buffs, no matter how much coin I had (chuckle). Looks like Maze and Kingly want to
spoil players (grin)

ionhsmith 09-18-2016 10:07 PM

Where do I add the script

DanCanDo 09-18-2016 11:20 PM

Quote:

Originally Posted by ionhsmith (Post 251223)
Where do I add the script

Put it in to a text-style file (I use notepad++), and save it (as a .pl file) with
the same name as you gave the NPC buff bot in the quests/(zonename) folder
where you put the NPC. For example John_Doe_Buffbot.pl
If that John_Doe NPC is in poknowledge, then save it in quests/poknowledge
folder.
POST EDIT : Sorry forgot to add a reminder. If you make any quest file changes
while your server is running, from your GM client you can type #reloadquest
There's shorter forms of that but I'm an energetic guy with a keyboard :)

ionhsmith 09-19-2016 08:43 PM

sweet I got that too work. so how do I add what kingly and maze added so it will charge for buffs instead of it being free

DanCanDo 09-19-2016 08:54 PM

Quote:

Originally Posted by ionhsmith (Post 251236)
sweet I got that too work. so how do I add what kingly and maze added so it will charge for buffs instead of it being free

Using Kingly's for example, there is two seperate blocks of code there.
The one called "plugin", put that script into a file and save it as whisper.pl but
put that one in the quests/plugins folder.
The other part, put on NPC script, like I described with mine.

ionhsmith 09-22-2016 06:08 PM

Dan, thanks for the info. I did what you said with Kingly's ... now I have a bot in guild lobby that whispers and ask if I want buffs and says keep in mind the price goes up as I lvl. But he does not cast buffs.... do I have to use this with yours or something?

DanCanDo 09-22-2016 06:11 PM

No, you do not need mine. I am not sure why it's not casting for you, I tried that script out
myself and it worked fine.

ionhsmith 09-22-2016 06:23 PM

it does work on mages either...


All times are GMT -4. The time now is 04:07 AM.

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