Log in

View Full Version : Help with Script



Nussaky
03-30-2016, 02:52 PM
I want you to follow to continue even attacking a monster or player


FollowThisPerson = "Abdul Sheikh" -- Character name to follow.

FloorChangers = {
Ladders = {Up = {1948,},
Down = {432, 412, 469, 369, 7478, 7182, 482, 8658}},

Holes = {Up = {},
Down = {293, 294, 595, 385, 594}},

RopeSpots = {Up = {386},
Down = {}},

Stairs = {Up = {1958, 7548, 7544, 1952, 1950, 1947, 7542, 1978, 8657, 1977, 1956, 1957, 1954},
Down = {414, 413, 437, 7731, 469, 413, 434, 469, 438, 600, 4826, 8932, 6129}},
Sewers = {Up = {},
Down = {435, }},
}

---------------------------------------------
-------------- END OF CONFIG ----------------
---------------------------------------------

local target = FollowThisPerson
local lastKnownPosition

local function goLastKnown()
while Self.DistanceFromPosition(lastKnownPosition.x, lastKnownPosition.y, lastKnownPosition.z) > 1 do
Self.UseItemFromGround(lastKnownPosition.x, lastKnownPosition.y, lastKnownPosition.z)
wait(200, 700)
end
end

local function handleUse(pos)
goLastKnown()
local lastZ = Self.Position().z
while Self.Position().z == lastZ do
Self.UseItemFromGround(pos.x, pos.y, pos.z)
wait(400, 800)
end
end

local function handleStep(pos)
goLastKnown()
local lastZ = Self.Position().z
while Self.Position().z == lastZ do
Self.Step(Map.GetDirectionTo(Self.Position(), pos))
wait(400, 800)
end
end

local function getRope()
local ropes = {"rope", "elvenhair rope"}
for _, rope in ipairs(ropes) do
if Self.ItemCount(rope) > 0 then return Item.GetID(rope) end
end
end

local function handleRope(pos)
goLastKnown()
local lastZ = Self.Position().z
while Self.Position().z == lastZ do
Self.UseItemWithGround(getRope(), pos.x, pos.y, pos.z)
wait(400, 800)
end
end

local floorChangeSelector = {
Ladders = {Up=handleUse, Down=handleStep},
Holes = {Up=handleStep, Down=handleStep},
RopeSpots = {Up=handleRope, Down=handleRope},
Stairs = {Up=handleStep, Down=handleStep},
Sewers = {Up=handleUse, Down=handleUse},
}


Module("Follow-Renew", function(f)
local c = Creature(target)
if c and not c:isFollowed() then
c:Follow()
end
end)

local function checkTargetPos()
local c = Creature(target)
if c:Position().z == Self.Position().z then
lastKnownPosition = c:Position()
end
end

local function distance(pos1, pos2)
local pos2 = pos2 or lastKnownPosition or Self.Position()
return math.abs(pos1.x-pos2.x) + math.abs(pos1.y-pos2.y)
end

local function executeClosest(possibilities)
local closest
local closestDistance = 99999
for _, data in ipairs(possibilities) do
local dist = distance(data.pos)
if dist < closestDistance then
closest = data
closestDistance = dist
end
end
if closest then closest.changer(closest.pos) end
end

local function handleFloorChange()
local c = Creature(target)
local range = 2
local p = Self.Position()
local possibleChangers = {}
for _, dir in ipairs({"Down", "Up"}) do
for changer, data in pairs(FloorChangers) do
for x = -range, range do
for y = -range, range do
if table.find(data[dir], Map.GetTopUseItem(p.x+x, p.y+y, p.z).id) then
table.insert(possibleChangers, {changer=floorChangeSelector[changer][dir], pos={x=p.x+x, y=p.y+y, z=p.z}})
end
end
end
end
end
executeClosest(possibleChangers)
end

local function targetMissing()
for name, c in Creature.iPlayers() do
if name == target then
return c:Position().z ~= Self.Position().z
end
end
return true
end

Module("Handle floor change", function(f)
checkTargetPos()
if targetMissing() and lastKnownPosition then
handleFloorChange()
end
end)

Jontor
03-30-2016, 03:31 PM
Use [CODE] and proper indentation in the code, please

Nussaky
03-30-2016, 03:42 PM
Use [CODE] and proper indentation in the code, please

I do not understand very well about xenobot , I found this script in a Forum , bought the bot is just two days ... :(

Sheradial
03-30-2016, 05:37 PM
I do not understand very well about xenobot , I found this script in a Forum , bought the bot is just two days ... :(

Ask the guy who made it or you are better off looking for a new script.

shadowart
03-30-2016, 06:17 PM
I made that script before Self.WalkTo was introduced. It should do what you want as long as your targeting settings are 'Do Nothing'.

Nussaky
03-31-2016, 01:39 PM
Using this script together managed to solve the problem , thanks to everyone who helped me xD

Module.New("follow", function(module)
Creature.Follow("Name Of Player")
module:Delay(1000)
end)