Created: 5 days ago on 06/02/2025, 01:36:45 PMUpdated: 5 days ago on 06/02/2025, 02:30:08 PM
FileType: No file type provided
Size: 8144
Category: No category provided
Skills: No skills provided
Hotkey: No hotkey provided
Tags: No tags provided
Description: Spams Evaluate Intelligence on blue players in the area. Perfect for the newbie dungeon (to skill 70) or around the bank where there are lots of players.
--[[
__ __
___ ________ ___ _ ___ ___ ____ / / ___ ___ / /____
\\\\---- / _ `/ __/ _ `/ ' \/ _ \/ _ `(_-</ _ \/ _ \/ _ \/ __(_-< ----\
////---- \_, /_/ \_,_/_/_/_/ .__/\_,_/___/_//_/\___/\___/\__/___/ ----/
/___/ /_/
Eval Spammer v1.3
Requirements:
-------------
• Evaluating Intelligence skill trained (train at npc first to ~30)
• A group of blue (Innocent/Ally) players within range
• A safe area where you can spam “Evaluating Intelligence”
Usage:
------
Continuously loops through all blue players in SEARCH_RANGE:
1. Finds all blue players (Notoriety = Innocent or Ally) sorted by proximity.
2. For each player:
• Re-checks that the mobile still exists and is in range.
• Displays “Targeting: <Name>” overhead on the target.
• Uses “Evaluating Intelligence” on them.
• If the journal logs “That is too far away.”, it skips that target.
• Pauses 1 second between each attempt.
3. If no blue players found, displays “No blue players within X tiles.” overhead on yourself
and waits 1 second before retrying.
4. Repeats indefinitely until manually stopped.
Configuration:
--------------
• SEARCH_RANGE (tiles)
• COLOR_INFO (overhead text color)
• PAUSE_BETWEEN (ms between each skill attempt)
]]--
-- Maximum tile radius to search for blue (Innocent/Ally) players
local SEARCH_RANGE = 8
-- Color for overhead text (93 = Blue)
local COLOR_INFO = 93
-- Pause between each skill attempt (ms)
local PAUSE_BETWEEN = 1000
--------------------------------------------------------------------------------
-- Function: GetAllBluePlayers
-- Description:
-- Scans all human mobiles within SEARCH_RANGE whose NotorietyFlag is Innocent (1) or Ally (2),
-- and returns a list of those mobiles (excluding the player), sorted by Distance ascending.
-- Returns:
-- A table of Mobile objects representing all blue players within range, sorted by distance.
--------------------------------------------------------------------------------
local function GetAllBluePlayers(range)
-- Find all human mobiles in range with notoriety Innocent (1) or Ally (2)
local candidates = Mobiles.FindByFilter({
range = { max = range },
human = true,
notorieties = { 1, 2 }
})
-- Filter out the player’s own serial
local filtered = {}
for _, mob in ipairs(candidates) do
if mob.Serial ~= Player.Serial then
table.insert(filtered, mob)
end
end
-- Sort by Distance ascending
table.sort(filtered, function(a, b)
return a.Distance < b.Distance
end)
return filtered
end
--------------------------------------------------------------------------------
-- Function: CanUseEvaluateIntelligence
-- Description:
-- Returns true if the player can use the “Evaluating Intelligence” skill now.
--------------------------------------------------------------------------------
local function CanUseEvaluateIntelligence()
if Skills.CanCast then
return Skills.CanCast("Evaluating Intelligence")
else
return Skills.GetValue("Evaluating Intelligence") > 0
end
end
--------------------------------------------------------------------------------
-- Main Loop: Continuously loop through all blue players and use Evaluating Intelligence
--------------------------------------------------------------------------------
while true do
local blueList = GetAllBluePlayers(SEARCH_RANGE)
if #blueList == 0 then
Messages.Overhead(
"No blue players within " .. SEARCH_RANGE .. " tiles.",
COLOR_INFO,
Player.Serial
)
Pause(PAUSE_BETWEEN)
else
for _, targetPlayer in ipairs(blueList) do
-- Verify that targetPlayer and its Serial are valid
if targetPlayer and type(targetPlayer.Serial) == "number" then
-- Re-fetch the mobile by serial to ensure it still exists
local fresh = Mobiles.FindBySerial(targetPlayer.Serial)
-- Check existence, not destroyed, not dead, and still within range
if fresh
and not fresh.IsDestroyed
and not fresh.IsDead
and fresh.Distance <= SEARCH_RANGE then
-- Display the target’s name overhead on that mobile
Messages.Overhead(
"Targeting: " .. (fresh.Name or "<unknown>"),
COLOR_INFO,
fresh.Serial
)
-- Clear journal before attempting
Journal.Clear()
-- Attempt to use Evaluating Intelligence if available
if CanUseEvaluateIntelligence() then
Skills.Use("Evaluating Intelligence")
-- Wait for target cursor
if Targeting.WaitForTarget(2000) then
Targeting.Target(fresh.Serial)
-- Pause briefly to allow journal to populate
Pause(200)
-- If “That is too far away.”, show a skip message
if Journal.Contains("That is too far away.") then
Messages.Overhead("Too far away, skipping.", COLOR_INFO, Player.Serial)
end
else
Messages.Overhead("Failed to acquire target cursor.", COLOR_INFO, Player.Serial)
end
else
Messages.Overhead("Cannot use Evaluating Intelligence.", COLOR_INFO, Player.Serial)
end
end
end
-- Pause before next attempt
Pause(PAUSE_BETWEEN)
end
end
end