I would have enjoyed making some profit off my work, but the last 100 yard dash always feels impossible with my projects. It will eat away with me to have invested so much effort to just step away and let it rot, so I'm releasing my sources. I'm sorry if you think this is a poor decision to make it available to everyone, but in the cat and mouse game of game cheats if the mouse never ups the ante then the program will stay primitive.
WARNING: This is experimental software and may result in bans or might not work in your environment
ofdreams . GitHub
Sources:
Gleam - Unlock
Gem - Addon (Place 'Gemini' folder in WoW AddOns directory)
Cig - Signature Scanner
*Compile both Nydus and GG (from Gleam project) under x64 Release and Open Nydus to inject. After in the game world + 5 seconds it will register a minimap icon which you can left click to open the required lua addon (see README). Right click to free the module (uninject).
Over the next few days I will be keeping tabs on this thread as well as adding some documentation to the repository. I'm not interested in your vision for this software - go ahead and fork it. I want to have a slow crawl approach to adding new things, so it doesn't pull a World of Warcraft and morph into something that betrays its roots or chase features.
This is more of a developer tool to build your bot logic on top of and not the bot itself. For now, just compile and send through a Jump() command (Jump() is the alias see 'core.lua'). Tomorrow I will add a bunch more examples with some better documentation but these below should get you started.
WriteFile
Code:
local fileName = "Hello.lua"
local appDir = GetDirApp()
local modulePath = appDir .. "scripts\\" .. fileName
print(modulePath)
print(FileExists(modulePath))
WriteFile(modulePath, "print('Your file content here')")
LoadFile
Code:
local fileName = "Hello.lua"
local appDir = GetDirApp()
local modulePath = appDir .. "scripts\\" .. fileName
print(modulePath)
print(FileExists(modulePath))
LoadFile(modulePath)
ClickTerrain
Code:
local x,y,z = GetPosition()
CastSpell("Cooking Fire")
ClickTerrain(x,y,z, false) -- true == right click
Navigation (requires Trinity Core mesh files in App folder named 'Mesh')
Code:
local x,y,z = -829, 4284, 746 -- destination point
function nav()
if Gem:ContinuePath() then
Gem:Move()
else
Gem:UpdatePath(Gem:GetInstanceID(), x, y, z)
end
C_Timer.After(0, nav)
end
nav()
GetPosition
Code:
local x, y, z = GetObjectPosition(UnitGUID('target'))
print(x,y,z)
C_Timer.After(3.0, function()
local xx, yy, zz = GetObjectPosition(UnitGUID('mouseover'))
print(xx,yy,zz)
end)
Interact
Code:
local herb = GetObjectGuid("Silverleaf")
Interact(herb)
Fishing
Code:
-- Go fish...
RUN = true -- global RUN defaults to true to allow uninjecting during execution (core.lua)
function fish()
if RUN then
if not UnitChannelInfo("player") then CastSpell("Fishing") end
local bobber = FindPlayerBobber()
local bobbing = IsBobbing(bobber)
if bobbing then Interact(bobber) end
C_Timer.After(0.5, fish)
end
end
fish()
Raycast
Code:
-- Raycasts from player position to target (true if collision with hit point)
local tx,ty,tz = GetObjectPosition(UnitGUID("target"))
local px,py,pz = GetHeadPosition()
print(TraceLine(px, py, pz, tx, ty, tz, 273))
Waypoint Recorder
Code:
RUN = true
local filename = "Elwyn Forest.lua"
local init = false
local points = {}
local minDist = 15
function addPoint(p)
print("Adding waypoint: " .. p.x .. " " .. p.y .. " " .. p.z)
table.insert(points, p)
end
function recordPath()
if RUN then
local px, py, pz = GetPosition()
if IsShiftKeyDown() then
if #points > 0 then
local p = points[#points ]
if Gem:DistanceTo(p.x, p.y, p.z, px, py, pz) >= minDist then
addPoint({ x = px, y = py, z = pz})
end
else
addPoint({ x = px, y = py, z = pz})
end
end
C_Timer.After(0, recordPath)
end
end
function loop()
if IsControlKeyDown() and IsShiftKeyDown() then
print("Stopping Recording!")
writeFile(filename)
RUN = false
end
if RUN then
if init == false and IsControlKeyDown() then
print("Initializing Path Recording...")
init = true
recordPath()
end
C_Timer.After(0, loop)
end
end
function writeFile(name)
local appDir = GetDirApp()
local modulePath = appDir .. "scripts\" .. name
print(modulePath)
print(FileExists(modulePath))
WriteFile(modulePath, "Points = {\n" .. getPointsStr() .. "\n}")
end
function getPointsStr()
local s = ""
for i = 1, #points do
s = s .. "{ x = " .. points[i].x .. ", y = " .. points[i].y .. ", z = " .. points[i].z .. " },\n"
end
return s
end
loop()