listBot = {
{ name = "PEVQDEPSRT3K", pass = "$UVGPGC$7!", proxy = ""},
{ name = "PFO7KMWJVTFM", pass = "3.!N@AQL!H", proxy = ""},
{ name = "CHD6ODGFVPPK", pass = "9.SN.@MR!$", proxy = ""}
}
function cekbot(x)
for _, b in pairs(getBots()) do
if b.name:upper() == x:upper() then
return false
end
end
return true
end
if Scripts == 1 then
for _, bot in pairs(listBot) do
if cekbot(bot.name) then
addBot(bot.name,bot.pass,bot.proxy)
sleep(2000)
end
end
end
if Scripts ~= 1 then
Bot = {}
Bot["PEVQDEPSRT3K"] = {
slot = "RDP1/1",
password = "$UVGPGC$7!",
proxy = false,
proxyIp = "proxy",
--[ Webhook ]--
webhookLink = "https://discord.com/api/webhooks/1058080530589036704/oj3tAsvjNVLlflC2qJsGdrp5VIOPyTiSU-bFD4bmR3d_tnOtoxSW8mEbD4V504lYrygJ",
messageId = "1060023921975500810",
--[ Farm ]--
detectFarmable = false,
root = false,
itmId = 4584,
worldList = {"4NZM9JY6","8J5X96QU","D43VQNV8","B9A9QY5K","N4UA8UO3","3MVCY7Z7","2WZ5VBA9","3IAV4TZ7","WY4JK4O6","1RF4OY5Z","4YE9NU3Y","5B6GSW3X"},
doorFarm = "BJKM743",
startFrom = 1,
looping = true,
modeRotation = "PLANTHV1",
-- "PLANTHV1", (Harvest dan Plant terpisah)
-- "PLANTHV2", (Harvest dan Plant bersamaan)
-- "HARVEST", (Harvest dan PnB saja)
-- "COLLECT1", (Collect Droped dan PnB saja)
-- "COLLECT2", (Collect Droped, PnB dan Plant)
--[ Pos ]--
customTile = false,
customX = 0,
customY = 0,
--[ Storage ]--
storagePack = "BDUGA5297", -- Storage world
doorPack = "DFGH888", -- Storage world door
storageSeed = "ANBDI38AN", -- Storage world
doorSeed = "SBDJX74A" -- Storage world door
}
Bot["PFO7KMWJVTFM"] = {
slot = "RDP1/2",
password = "3.!N@AQL!H",
proxy = false,
proxyIp = "proxy",
--[ Webhook ]--
webhookLink = "https://discord.com/api/webhooks/1058080530589036704/oj3tAsvjNVLlflC2qJsGdrp5VIOPyTiSU-bFD4bmR3d_tnOtoxSW8mEbD4V504lYrygJ",
messageId = "1060023951843151903",
--[ Farm ]--
detectFarmable = false,
root = false,
itmId = 4584,
worldList = {"7DE6FYS9","JE84ERE5","6F6FVUE3","Y2CX6R2X","B93ONPK9","T5UA87ZH","E4F9WGS4","X86C4QFI","9G6WSFS2","KLXWURJGTJ","HOXXRFIAFT","LXIXGHBIAU"},
doorFarm = "BJKM743",
startFrom = 1,
looping = true,
modeRotation = "PLANTHV1",
-- "PLANTHV1", (Harvest dan Plant terpisah)
-- "PLANTHV2", (Harvest dan Plant bersamaan)
-- "HARVEST", (Harvest dan PnB saja)
-- "COLLECT1", (Collect Droped dan PnB saja)
-- "COLLECT2", (Collect Droped, PnB dan Plant)
--[ Pos ]--
customTile = false,
customX = 0,
customY = 0,
--[ Storage ]--
storagePack = "BDUGA5297", -- Storage world
doorPack = "DFGH888", -- Storage world door
storageSeed = "ANBDI38AN", -- Storage world
doorSeed = "SBDJX74A" -- Storage world door
}
Bot["CHD6ODGFVPPK"] = {
slot = "RDP1/3",
password = "9.SN.@MR!$",
proxy = false,
proxyIp = "proxy",
--[ Webhook ]--
webhookLink = "https://discord.com/api/webhooks/1058080530589036704/oj3tAsvjNVLlflC2qJsGdrp5VIOPyTiSU-bFD4bmR3d_tnOtoxSW8mEbD4V504lYrygJ",
messageId = "1060023963809493013",
--[ Farm ]--
detectFarmable = false,
root = false,
itmId = 4584,
worldList = {"P5DQ46DM","4PY3CT7N","T4HQ2KO5","DT3XD6A9","OR6RG3V6","JNEP7O68","I4KRQY93","K2S5KS8P","Z6ZMZ49C","5FXO67EJ","RB32HN5E","D2S5RTV5"},
doorFarm = "BJKM743",
startFrom = 1,
looping = true,
modeRotation = "PLANTHV1",
-- Type
-- "PLANTHV1", (Harvest dan Plant terpisah)
-- "PLANTHV2", (Harvest dan Plant bersamaan)
-- "HARVEST", (Harvest dan PnB saja)
-- "COLLECT1", (Collect Droped dan PnB saja)
-- "COLLECT2", (Collect Droped, PnB dan Plant)
--[ Pos ]--
customTile = false,
customX = 0,
customY = 0,
--[ Storage ]--
storagePack = "BDUGA5297", -- Storage world
doorPack = "DFGH888", -- Storage world door
storageSeed = "ANBDI38AN", -- Storage world
doorSeed = "SBDJX74A" -- Storage world door
}
webhookOffline = "https://discord.com/api/webhooks/1058079610945937528/cDAKrfWzeQjBFriWbjS0ggRSINPwI7HlxXmWxFQjkbKdqzv288Ta7ijb9hkCum_NSpdY" -- Bot On/Off with tag webhook link
webhookLinkPack = "https://discord.com/api/webhooks/1058079885278584842/ePhX_RUUbHeanQtca-DTTtvmEK3FaCMBu9maw8b8nKlcHCmjELxc5k5zNygos2hmPanF" -- Pack info webhook link
messageIdPack = "1059620235377905714" -- Pack info message id
webhookLinkSeed = "https://discord.com/api/webhooks/1058080085757931695/YbZvSZZAUQsrTm9IuE88UpZrtwyPj8gKWFAfxQW43yn5wpPevmhkuE4CuWkoyVh60hOp" -- Seed info webhook link
messageIdSeed = "1059620602706657331"-- Seed info message id
takePick = true -- Auto take pickaxe from storage
worldPick, doorPick = "WIDBE8279", "DFGH888"
patokanSeed, patokanPack = 20, 20 -- Patokan Seed and Pack
blacklistTile = false
blacklist = {
{x = -1, y = -1},
{x = 0, y = -1},
{x = 1, y = -1}
}
delayHarvest = 100 -- Harvesting delay
delayPlant = 100 -- Planting delay
delayPunch = 160 -- Punching delay
delayPlace = 100 -- Placing delay
tileNumber = 5 -- Customable from 1 to 5
buyAfterPNB = true -- Set true if buying and storing pack after each pnb
pack = "World Lock" -- Pack name to display on webhook
packList = {226} -- List of pack id
packName = "signal_jammer" -- Pack name in store
minimumGem = 10000 -- Minimum gems to buy pack
packPrice = 2000 -- Pack price
packLimit = 200 -- Limit of buying pack before bp full
joinWorldAfterStore = false -- Set true if join random world after each rotation
worldToJoin = {"world1","world2","world3","world4","world5","world6","world7","world8","world9"} -- List of world to join after finishing 1 world
joinDelay = 5000 -- World join delay
restartTimer = false -- Set true if restart time of farm after looping
customShow = false -- Set true if showing only custom amount of world
showList = 3 -- Number of custom worlds to be shown
items = {
{name = "World Lock", id = 242, emote = "<:world_lock:1011929928519925820>"},
{name = "Vending Machine", id = 2978, emote = "<:vending:1120138887424135260>"},
{name = "Diamond Lock", id = 1796, emote = "<:DL:943220205054734356>"},
{name = "Pepper Tree", id = 4584, emote = "<:pepper_tree:1011930020836544522>"},
{name = "Pepper Tree Seed", id = 4585, emote = "<:pepper_tree_seed:1011930051744374805>"},
{name = "Lgrid Tree", id = 5666, emote = "<:LaserGrid:1012377603434352780>"},
{name = "Lgrid Tree Seed", id = 5667, emote = ""},
{name = "Coin Door", id = 5748, emote = ""},
{name = "Paper Diving Wall", id = 5742, emote = ""},
{name = "Chinese Arch", id = 5746, emote = ""}
} -- List of item info | {name = "name", id = 0, emote = ""},
------------------ Dont Touch ------------------
setBool("Select All", false)
setBool("Auto Reconnect", false)
setBool("Auto Leave", true)
list = {}
tree = {}
waktu = {}
worlds = {}
fossil = {}
tileBreak = {}
loop = 0
profit = 0
listNow = 1
strWaktu = ""
MaxReconnect = 300
t = os.time()
slot = Bot[getBot().name:upper()].slot
password = Bot[getBot().name:upper()].password
proxy = Bot[getBot().name:upper()].proxy
proxyIp = Bot[getBot().name:upper()].proxyIp
webhookLink = Bot[getBot().name:upper()].webhookLink
messageId = Bot[getBot().name:upper()].messageId
detectFarmable = Bot[getBot().name:upper()].detectFarmable
root = Bot[getBot().name:upper()].root
itmId = Bot[getBot().name:upper()].itmId
start = Bot[getBot().name:upper()].startFrom
stop = #Bot[getBot().name:upper()].worldList
doorFarm = Bot[getBot().name:upper()].doorFarm
worldList = Bot[getBot().name:upper()].worldList
totalList = #Bot[getBot().name:upper()].worldList
looping = Bot[getBot().name:upper()].looping
modeRotation = Bot[getBot().name:upper()].modeRotation
customTile = Bot[getBot().name:upper()].customTile
customX = Bot[getBot().name:upper()].customX
customY = Bot[getBot().name:upper()].customY
storagePack = Bot[getBot().name:upper()].storagePack
doorPack = Bot[getBot().name:upper()].doorPack
storageSeed = Bot[getBot().name:upper()].storageSeed
doorSeed = Bot[getBot().name:upper()].doorSeed
itmSeed = itmId + 1 -- Item seed / Dont edit
goods = {98, 18, 32, 6336, 9640} -- Item whitelist (don't edit)
for i = start,#worldList do
table.insert(worlds,worldList[i])
end
if looping then
for i = 0,start - 1 do
table.insert(worlds,worldList[i])
end
end
for _,pack in pairs(packList) do
table.insert(goods,pack)
end
for i = math.floor(tileNumber/2),1,-1 do
i = i * -1
table.insert(tileBreak,i)
end
for i = 0, math.ceil(tileNumber/2) - 1 do
table.insert(tileBreak,i)
end
if (showList - 1) >= #worldList then
customShow = false
end
if not detectFarmable then
table.insert(goods,itmId)
table.insert(goods,itmSeed)
end
function includesNumber(table, number)
for _,num in pairs(table) do
if num == number then
return true
end
end
return false
end
function detect()
local store = {}
local count = 0
for ,tile in pairs(getTiles()) do
if tile.flags == 0 and tile.fg ~= 0 then
if store[tile.fg] then
store[tile.fg].count = store[tile.fg].count + 1
else
store[tile.fg] = {fg = tile.fg, count = 1}
end
end
end
for ,tile in pairs(store) do
if tile.count > count then
count = tile.count
itmSeed = tile.fg
itmId = itmSeed - 1
end
end
if not includesNumber(goods,itmId) then
table.insert(goods,itmId)
end
if not includesNumber(goods,itmSeed) then
table.insert(goods,itmSeed)
end
end
function bl(world)
blist = {}
fossil[world] = 0
for ,tile in pairs(getTiles()) do
if tile.fg == 6 then
doorX = tile.x
doorY = tile.y
elseif tile.fg == 3918 then
fossil[world] = fossil[world] + 1
end
end
if blacklistTile then
for ,tile in pairs(blacklist) do
table.insert(blist,{x = doorX + tile.x, y = doorY + tile.y})
end
end
end
function tilePunch(x,y)
for _,num in pairs(tileBreak) do
if getTile(x - 1,y + num).fg ~= 0 or getTile(x - 1,y + num).bg ~= 0 then
return true
end
end
return false
end
function tilePlace(x,y)
for _,num in pairs(tileBreak) do
if getTile(x - 1,y + num).fg == 0 and getTile(x - 1,y + num).bg == 0 then
return true
end
end
return false
end
function check(x,y)
for _,tile in pairs(blist) do
if x == tile.x and y == tile.y then
return false
end
end
return true
end
function logText(text)
file = io.open("Rotasi Information.txt", "a")
file:write(text.."\n")
file:close()
end
function waktuWorld()
strWaktu = ""
if customShow then
for i = showList,1,-1 do
newList = listNow - i
if newList <= 0 then
newList = newList + totalList
end
strWaktu = strWaktu.."\n"..worldList[newList]:upper().." ( "..(waktu[worldList[newList]] or "?").." | "..(tree[worldList[newList]] or "?").." )"
end
else
for _,world in pairs(worldList) do
strWaktu = strWaktu.."\n"..world:upper().." ( "..(waktu[world] or "?").." | "..(tree[world] or "?").." )"
end
end
end
function botInfo(info)
te = os.time() - t
fossill = fossil[getBot().world] or 0
local text = [[
$webHookUrl = "]]..webhookLink..[[/messages/]]..messageId..[["
$thumbnailObject = @{
url = "https://komikkamvret.com/wp-content/uploads/2021/04/Pus-Nyangami-Roger-1024x978.png"
}
$footerObject = @{
text = "]]..(os.date("!%a %b %d, %Y at %I:%M %p", os.time() + 7 * 60 * 60))..[["
}
$fieldArray = @(
@{
name = "<:pickaxe:1011931845065183313> Bot Info ( BOT ]]..slot..[[ )"
value = "]]..info..[["
inline = "false"
}
@{
name = "<:birth_certificate:1011929949076193291> Bot Name"
value = "]]..getBot().name..[[ ( Lvl ]]..getBot().level..[[ )"
inline = "false"
}
@{
name = "<:heart_monitor:1012587208902987776> Bot Status"
value = "]]..getBot().status..[[ | ]]..getBot().captcha..[["
inline = "true"
}
@{
name = "<:gems:1011931178510602240> Bot Gems & Backpack"
value = "]]..findItem(112)..[[ | ]]..getBot().slots..[[slot"
inline = "true"
}
@{
name = "<:globe:1011929997679796254> World Name & Fossil"
value = "]]..getBot().world..[[ | ]]..fossill..[[ Fossil"
inline = "true"
}
@{
name = "<:growtopia_scroll:1011972982261944444> World Order (]]..loop..[[)"
value = "]]..start..[[ / ]]..stop..[["
inline = "true"
}
@{
name = "<:guest_book:1012588503466528869> Bot Profit"
value = "]]..profit..[[ ]]..pack..[["
inline = "true"
}
@{
name = "<:change_of_address:1012566655995490354> World List"
value = "]]..strWaktu..[["
inline = "false"
}
@{
name = "<:growtopia_clock:1011929976628596746> Bot Uptime"
value = "]]..math.floor(te/86400)..[[ Days ]]..math.floor(te%86400/3600)..[[ Hours ]]..math.floor(te%86400%3600/60)..[[ Minutes"
inline = "false"
}
)
$embedObject = @{
title = "<:exclamation_sign:1011934940096630794> BOT INFORMATION"
color = "]]..math.random(1111111,9999999)..[["
thumbnail = $thumbnailObject
footer = $footerObject
fields = $fieldArray
}
$embedArray = @($embedObject)
$payload = @{
embeds = $embedArray
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-RestMethod -Uri $webHookUrl -Body ($payload | ConvertTo-Json -Depth 4) -Method Patch -ContentType 'application/json'
]]
local file = io.popen("powershell -command -", "w")
file:write(text)
file:close()
end
function packInfo(link,id,desc)
local text = [[
$webHookUrl = "]]..link..[[/messages/]]..id..[["
$thumbnailObject = @{
url = "https://komikkamvret.com/wp-content/uploads/2021/04/Pus-Nyangami-Roger-1024x978.png"
}
$footerObject = @{
text = "]]..(os.date("!%a %b %d, %Y at %I:%M %p", os.time() + 7 * 60 * 60))..[["
}
$fieldArray = @(
@{
name = "Dropped Items"
value = "]]..desc..[["
inline = "false"
}
)
$embedObject = @{
title = "<:exclamation_sign:1011934940096630794> PACK/SEED INFORMATION"
color = "]]..math.random(111111,999999)..[["
thumbnail = $thumbnailObject
footer = $footerObject
fields = $fieldArray
}
$embedArray = @($embedObject)
$payload = @{
embeds = $embedArray
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-RestMethod -Uri $webHookUrl -Body ($payload | ConvertTo-Json -Depth 4) -Method Patch -ContentType 'application/json'
]]
local file = io.popen("powershell -command -", "w")
file:write(text)
file:close()
end
function reconInfo(status)
if status then
text = [[
$webHookUrl = "]]..webhookOffline..[["
$payload = @{
content = "]]..getBot().name..[[ (bot-]]..slot..[[) status is ]]..getBot().status..[[ @everyone"
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-RestMethod -Uri $webHookUrl -Body ($payload | ConvertTo-Json -Depth 4) -Method Post -ContentType 'application/json'
]]
else
text = [[
$webHookUrl = "]]..webhookOffline..[["
$payload = @{
content = "]]..getBot().name..[[ (bot-]]..slot..[[) captcha is ]]..getBot().captcha..[[ @everyone"
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-RestMethod -Uri $webHookUrl -Body ($payload | ConvertTo-Json -Depth 4) -Method Post -ContentType 'application/json'
]]
end
local file = io.popen("powershell -command -", "w")
file:write(text)
file:close()
end
function reconnect(world,id,x,y)
while getBot().captcha:find("Wrong") or getBot().captcha:find("Couldn't") do
disconnect()
sleep(10000)
connect()
sleep(2000)
while getBot().status ~= "online" do
connect()
sleep(5000)
if getBot().status == "suspended" or getBot().status == "banned" then
botInfo(getBot().status)
sleep(100)
reconInfo(true)
sleep(100)
removeBot(getBot().name)
end
end
sendPacket("action|quit_to_exit",3)
sleep(1000)
while getBot().world ~= world:upper() do
sendPacket("action|join_request\nname|"..world:upper().."\ninvitedWorld|0",3)
sleep(5000)
end
if id ~= "" then
while getTile(math.floor(getBot().x / 32),math.floor(getBot().y / 32)).fg == 6 do
sendPacket("action|join_request\nname|"..world:upper().."|"..id:upper().."\ninvitedWorld|0",3)
sleep(1000)
end
end
if x and y then
while math.floor(getBot().x / 32) ~= x or math.floor(getBot().y / 32) ~= y do
findPath(x,y)
sleep(100)
end
end
reconInfo(false)
sleep(100)
end
if getBot().status ~= "online" then
botInfo("Disconnected")
sleep(100)
reconInfo(true)
sleep(100)
konek = 0
while getBot().status ~= "online" do
if getBot().status ~= "online" then
if konek < MaxReconnect then
konek = konek + 1
botInfo("Reconnecting.. ( "..konek.."/"..MaxReconnect.." )")
sleep(100)
else
botInfo("Max Reconnect! ( "..konek.."/"..MaxReconnect.." )")
sleep(100)
removeBot(getBot().name)
end
end
connect()
sleep(5000)
if getBot().status:find("mod joined") or getBot().status == "suspended" or getBot().status == "banned" or getBot().status == "temporary banned" then
botInfo(getBot().status)
sleep(100)
reconInfo(true)
sleep(100)
removeBot(getBot().name)
end
end
while getBot().world ~= world:upper() do
sendPacket("action|join_request\nname|"..world:upper().."\ninvitedWorld|0",3)
sleep(5000)
end
if id ~= "" then
while getTile(math.floor(getBot().x / 32),math.floor(getBot().y / 32)).fg == 6 do
sendPacket("action|join_request\nname|"..world:upper().."|"..id:upper().."\ninvitedWorld|0",3)
sleep(1000)
end
end
if x and y then
while math.floor(getBot().x / 32) ~= x or math.floor(getBot().y / 32) ~= y do
findPath(x,y)
sleep(100)
end
end
reconInfo(true)
sleep(100)
botInfo("Farming")
sleep(100)
end
end
function counterwarp()
if getBot().status ~= "online" then
botInfo("Disconnected")
sleep(100)
reconInfo(true)
sleep(100)
konek = 0
while getBot().status ~= "online" do
if getBot().status ~= "online" then
if konek < MaxReconnect then
konek = konek + 1
botInfo("Reconnecting.. ( "..konek.."/"..MaxReconnect.." )")
sleep(100)
else
botInfo("Max Reconnect! ( "..konek.."/"..MaxReconnect.." )")
sleep(100)
removeBot(getBot().name)
end
end
connect()
sleep(5000)
if getBot().status == "suspended" or getBot().status == "banned" then
botInfo(getBot().status)
sleep(100)
reconInfo(true)
sleep(100)
removeBot(getBot().name)
end
end
reconInfo(true)
sleep(100)
botInfo("Farming")
sleep(100)
end
end
function warp(world,id)
cok = 0
while getBot().world ~= world:upper() and not nuked do
counterwarp()
sendPacket("action|join_request\nname|"..world:upper().."\ninvitedWorld|0",3)
sleep(5000)
if cok == 10 then
nuked = true
else
cok = cok + 1
end
end
if id ~= "" and not nuked then
while getTile(math.floor(getBot().x / 32),math.floor(getBot().y / 32)).fg == 6 and not nuked do
counterwarp()
sendPacket("action|join_request\nname|"..world:upper().."|"..id:upper().."\ninvitedWorld|0",3)
sleep(1000)
end
end
end
MaxMasuk = 6
function strgWarp(world,id)
cok = 0
while getBot().world ~= world:upper() and not nuked do
counterwarp()
sendPacket("action|join_request\nname|"..world:upper().."\ninvitedWorld|0",3)
sleep(5000)
if cok == 15 then
botInfo("STORAGE SUS ("..world..")")
sleep(100)
removeBot(getBot().name)
else
cok = cok + 1
end
end
masuk = 0
if id ~= "" and not nuked then
while getTile(math.floor(getBot().x / 32),math.floor(getBot().y / 32)).fg == 6 do
masuk = masuk + 1
if masuk < MaxMasuk then
counterwarp()
sendPacket("action|join_request\nname|"..world:upper().."|"..id:upper().."\ninvitedWorld|0",3)
sleep(1000)
else
botInfo("Cant Enter!")
sleep(100)
logText(getBot().world.." = Wrong DoorID!")
sleep(100)
removeBot(getBot().name)
end
end
end
end
function enterDoor(world,id)
botInfo("Entering "..world)
sleep(100)
cok = 0
while getBot().world ~= world:upper() do
counterwarp()
sendPacket("action|join_request\nname|"..world:upper().."\ninvitedWorld|0",3)
sleep(5000)
if cok == 15 then
nuked = true
else
cok = cok + 1
end
end
masuk = 0
if id ~= "" and not nuked then
while getTile(math.floor(getBot().x / 32),math.floor(getBot().y / 32)).fg == 6 do
masuk = masuk + 1
if masuk < MaxMasuk then
counterwarp()
sendPacket("action|join_request\nname|"..world:upper().."|"..id:upper().."\ninvitedWorld|0",3)
sleep(1000)
else
botInfo("Cant Enter!")
sleep(100)
logText(getBot().world.." = Wrong DoorID!")
sleep(100)
removeBot(getBot().name)
end
end
end
end
function round(n)
return n % 1 > 0.5 and math.ceil(n) or math.floor(n)
end
function tileDrop1(x,y,num)
local count = 0
local stack = 0
for _,obj in pairs(getObjects()) do
if round(obj.x / 32) == x and math.floor(obj.y / 32) == y then
count = count + obj.count
stack = stack + 1
end
end
if stack < 20 and count <= (4000 - num) then
return true
end
return false
end
function tileDrop2(x,y,num)
local count = 0
local stack = 0
for _,obj in pairs(getObjects()) do
if round(obj.x / 32) == x and math.floor(obj.y / 32) == y then
count = count + obj.count
stack = stack + 1
end
end
if count <= (4000 - num) then
return true
end
return false
end
function storePack()
for ,pack in pairs(packList) do
for ,tile in pairs(getTiles()) do
if tile.fg == patokanPack or tile.bg == patokanPack then
if tileDrop1(tile.x,tile.y,findItem(pack)) then
while math.floor(getBot().x / 32) ~= (tile.x - 1) or math.floor(getBot().y / 32) ~= tile.y do
findPath(tile.x - 1,tile.y)
sleep(1000)
reconnect(storagePack,doorPack,tile.x - 1,tile.y)
end
while findItem(pack) > 0 and tileDrop1(tile.x,tile.y,findItem(pack)) do
sendPacket("action|drop\n|itemID|"..pack,2)
sleep(1000)
sendPacket("action|dialog_return\ndialog_name|drop_item\nitemID|"..pack.."|\ncount|"..findItem(pack),2)
sleep(1000)
reconnect(storagePack,doorPack,tile.x - 1,tile.y)
end
end
end
if findItem(pack) == 0 then
break
end
end
end
end
function itemInfo(ids)
local result = {name = "null", id = ids, emote = "null"}
for _,item in pairs(items) do
if item.id == ids then
result.name = item.name
result.emote = item.emote
return result
end
end
return result
end
function infoPack()
local store = {}
for ,obj in pairs(getObjects()) do
if store[obj.id] then
store[obj.id].count = store[obj.id].count + obj.count
else
store[obj.id] = {id = obj.id, count = obj.count}
end
end
local str = ""
for ,object in pairs(store) do
str = str.."\n"..itemInfo(object.id).emote.." "..itemInfo(object.id).name.." : x"..object.count
end
return str
end
function join()
botInfo("Clearing World Logs")
sleep(100)
for _,wurld in pairs(worldToJoin) do
warp(wurld,"")
sleep(joinDelay)
reconnect(wurld,"")
end
end
function storeSeed(world)
botInfo("Storing Seed")
sleep(100)
strgWarp(storageSeed,doorSeed)
sleep(100)
for _,tile in pairs(getTiles()) do
if tile.fg == patokanSeed or tile.bg == patokanSeed then
if tileDrop2(tile.x,tile.y,100) then
while math.floor(getBot().x / 32) ~= (tile.x - 1) or math.floor(getBot().y / 32) ~= tile.y do
findPath(tile.x - 1,tile.y)
sleep(1000)
reconnect(storageSeed,doorSeed,tile.x - 1,tile.y)
end
while findItem(itmSeed) > 100 and tileDrop2(tile.x,tile.y,100) do
sendPacket("action|drop\n|itemID|"..itmSeed,2)
sleep(1000)
sendPacket("action|dialog_return\ndialog_name|drop_item\nitemID|"..itmSeed.."|\ncount|100",2)
sleep(1000)
reconnect(storageSeed,doorSeed,tile.x - 1,tile.y)
end
end
if findItem(itmSeed) <= 100 then
break
end
end
end
packInfo(webhookLinkSeed,messageIdSeed,infoPack())
sleep(100)
if joinWorldAfterStore then
join()
sleep(100)
end
warp(world,doorFarm)
sleep(100)
botInfo("Farming")
sleep(100)
end
function buy()
botInfo("Buying and Storing Pack")
sleep(100)
strgWarp(storagePack,doorPack)
sleep(100)
while findItem(112) >= packPrice do
for i = 1, packLimit do
if findItem(112) > packPrice then
sendPacket("action|buy\nitem|"..packName,2)
sleep(500)
profit = profit + 1
else
break
end
end
storePack()
sleep(100)
reconnect(storagePack,doorPack)
end
packInfo(webhookLinkPack,messageIdPack,infoPack())
sleep(100)
if joinWorldAfterStore then
join()
sleep(100)
end
end
function clear()
for _,item in pairs(getInventory()) do
if not includesNumber(goods, item.id) then
sendPacket("action|trash\n|itemID|"..item.id,2)
sendPacket("action|dialog_return\ndialog_name|trash_item\nitemID|"..item.id.."|\ncount|"..item.count,2)
sleep(200)
end
end
end
function take(world)
botInfo("Taking Seed")
sleep(100)
while findItem(itmSeed) == 0 do
strgWarp(storageSeed,doorSeed)
sleep(100)
for _,obj in pairs(getObjects()) do
if obj.id == itmSeed then
findPath(round(obj.x / 32),math.floor(obj.y / 32))
sleep(1000)
collect(2)
sleep(1000)
end
if findItem(itmSeed) > 100 then
sendPacket("action|drop\n|itemID|".. itmSeed,2)
sleep(1000)
sendPacket("action|dialog_return\ndialog_name|drop_item\nitemID|"..itmSeed.."|\ncount|"..(findItem(itmSeed) - 100),2)
sleep(1000)
break
end
end
packInfo(webhookLinkSeed,messageIdSeed,infoPack())
sleep(100)
if joinWorldAfterStore then
join()
sleep(100)
end
warp(world,doorFarm)
sleep(100)
end
end
function plant(world)
for _,tile in pairs(getTiles()) do
if findItem(itmSeed) == 0 then
if modeRotation == "COLLECT2" then
break
elseif modeRotation == "PLANTHV1" then
take(world)
sleep(100)
botInfo("Planting")
sleep(100)
end
end
if tile.flags ~= 0 and tile.y ~= 0 and getTile(tile.x,tile.y - 1).fg == 0 then
if not blacklistTile or check(tile.x,tile.y) then
findPath(tile.x,tile.y - 1)
sleep(delayPlant)
while getTile(tile.x,tile.y - 1).fg == 0 and getTile(tile.x,tile.y).flags ~= 0 do
place(itmSeed,0,0)
sleep(delayPlant)
reconnect(world,doorFarm,tile.x,tile.y - 1)
end
end
end
end
if findItem(itmSeed) >= 100 then
storeSeed(world)
sleep(100)
end
end
function pnb(world)
if findItem(itmId) >= tileNumber then
if not customTile then
ex = 1
ye = math.floor(getBot().y / 32)
if ye > 40 then
ye = ye - 10
elseif ye < 11 then
ye = ye + 10
end
if getTile(ex,ye).fg ~= 0 and getTile(ex,ye).fg ~= itmSeed then
ye = ye - 1
end
else
ex = customX - 1
ye = customY - 1
end
while math.floor(getBot().x / 32) ~= ex or math.floor(getBot().y / 32) ~= ye do
findPath(ex,ye)
sleep(100)
end
if tileNumber > 1 then
while findItem(itmId) >= tileNumber and findItem(itmSeed) < 190 do
while tilePlace(ex,ye) do
for ,i in pairs(tileBreak) do
if getTile(ex - 1,ye + i).fg == 0 and getTile(ex - 1,ye + i).bg == 0 then
place(itmId,-1,i)
sleep(delayPlace)
reconnect(world,doorFarm,ex,ye)
end
end
end
while tilePunch(ex,ye) do
for ,i in pairs(tileBreak) do
if getTile(ex - 1,ye + i).fg ~= 0 or getTile(ex - 1,ye + i).bg ~= 0 then
punch(-1,i)
sleep(delayPunch)
reconnect(world,doorFarm,ex,ye)
end
end
end
collect(3)
sleep(30)
end
else
while findItem(itmId) > 0 and findItem(itmSeed) < 190 do
while getTile(ex - 1,ye).fg == 0 and getTile(ex - 1,ye).bg == 0 do
place(itmId,-1,0)
sleep(delayPlace)
reconnect(world,doorFarm,ex,ye)
end
while getTile(ex - 1,ye).fg ~= 0 or getTile(ex - 1,ye).bg ~= 0 do
punch(-1,0)
sleep(delayPunch)
reconnect(world,doorFarm,ex,ye)
end
collect(2)
sleep(30)
end
end
clear()
sleep(100)
if modeRotation == "COLLECT2" then
botInfo("Planting")
sleep(100)
plant(world)
sleep(100)
elseif modeRotation == "COLLECT1" and findItem(itmSeed) >= 190 then
storeSeed(world)
sleep(100)
end
if buyAfterPNB and findItem(112) >= minimumGem then
buy()
sleep(100)
warp(world,doorFarm)
sleep(100)
botInfo("Farming")
sleep(100)
end
end
end
function harvest(world)
botInfo("Farming")
sleep(100)
tree[world] = 0
if modeRotation == "HARVEST" then
for ,tile in pairs(getTiles()) do
if getTile(tile.x,tile.y - 1).ready then
if not blacklistTile or check(tile.x,tile.y) then
tree[world] = tree[world] + 1
findPath(tile.x,tile.y - 1)
sleep(delayHarvest)
while getTile(tile.x,tile.y - 1).fg == itmSeed do
punch(0,0)
sleep(delayHarvest)
reconnect(world,doorFarm,tile.x,tile.y - 1)
end
if root then
while getTile(tile.x, tile.y).fg == (itmId + 4) and getTile(tile.x, tile.y).flags ~= 0 do
punch(0, 1)
sleep(delayHarvest)
reconnect(world,doorFarm,tile.x,tile.y - 1)
end
clear()
sleep(100)
end
collect(2)
sleep(30)
end
end
if findItem(itmId) >= 190 then
pnb(world)
sleep(100)
if findItem(itmSeed) >= 190 then
storeSeed(world)
sleep(100)
end
end
end
elseif modeRotation == "PLANTHV2" then
for ,tile in pairs(getTiles()) do
if findItem(itmSeed) == 0 then
take(world)
sleep(100)
botInfo("Farming")
sleep(100)
end
if getTile(tile.x,tile.y - 1).ready or (tile.flags ~= 0 and tile.y ~= 0 and getTile(tile.x,tile.y - 1).fg == 0) then
if not blacklistTile or check(tile.x,tile.y) then
tree[world] = tree[world] + 1
findPath(tile.x,tile.y - 1)
sleep(delayHarvest)
while getTile(tile.x,tile.y - 1).fg == itmSeed do
punch(0,0)
sleep(delayHarvest)
reconnect(world,doorFarm,tile.x,tile.y - 1)
end
if root then
while getTile(tile.x, tile.y).fg == (itmId + 4) and getTile(tile.x, tile.y).flags ~= 0 do
punch(0, 1)
sleep(delayHarvest)
reconnect(world,doorFarm,tile.x,tile.y - 1)
end
clear()
sleep(100)
end
collect(2)
sleep(30)
while getTile(tile.x,tile.y - 1).fg == 0 and getTile(tile.x,tile.y).flags ~= 0 do
place(itmSeed,0,0)
sleep(delayPlant)
reconnect(world,doorFarm,tile.x,tile.y - 1)
end
end
end
if findItem(itmId) >= 190 then
pnb(world)
sleep(100)
if findItem(itmSeed) >= 190 then
storeSeed(world)
sleep(100)
end
end
end
else
for _,tile in pairs(getTiles()) do
if getTile(tile.x,tile.y - 1).ready then
if not blacklistTile or check(tile.x,tile.y) then
tree[world] = tree[world] + 1
findPath(tile.x,tile.y - 1)
sleep(delayHarvest)
while getTile(tile.x,tile.y - 1).fg == itmSeed do
punch(0,0)
sleep(delayHarvest)
reconnect(world,doorFarm,tile.x,tile.y - 1)
end
if root then
while getTile(tile.x, tile.y).fg == (itmId + 4) and getTile(tile.x, tile.y).flags ~= 0 do
punch(0, 1)
sleep(delayHarvest)
reconnect(world,doorFarm,tile.x,tile.y - 1)
end
clear()
sleep(100)
end
collect(2)
sleep(30)
end
end
if findItem(itmId) >= 190 then
pnb(world)
sleep(100)
plant(world)
sleep(100)
end
end
end
pnb(world)
sleep(100)
if modeRotation == "PLANTHV1" then
if findItem(itmSeed) < 100 then
take(world)
sleep(100)
botInfo("Farming")
sleep(100)
end
plant(world)
sleep(100)
end
if findItem(112) >= minimumGem then
buy()
sleep(100)
end
end
function typeRotation(world)
if modeRotation == "COLLECT1" or modeRotation == "COLLECT2" then
for _,obj in pairs(getObjects()) do
if obj.id == itmId then
findPath(round(obj.x / 32),math.floor(obj.y / 32))
sleep(100)
collect(2)
sleep(100)
reconnect(world,doorFarm)
end
if findItem(itmId) >= 190 then
botInfo("Farming")
sleep(100)
pnb(world)
sleep(100)
botInfo("Collecting")
sleep(100)
end
end
botInfo("Farming")
sleep(100)
pnb(world)
sleep(100)
else
harvest(world)
sleep(100)
end
end
if getBot().status ~= "online" then
botInfo("Disconnected")
sleep(100)
reconInfo(true)
sleep(100)
koxek = 0
while getBot().status ~= "online" do
if getBot().status ~= "online" then
if koxek < MaxReconnect then
koxek = koxek + 1
botInfo("Reconnecting.. ( "..koxek.."/"..MaxReconnect.." )")
sleep(100)
else
botInfo("Max Reconnect! ( "..konek.."/"..MaxReconnect.." )")
sleep(100)
removeBot(getBot().name)
end
end
connect()
sleep(5000)
if getBot().status == "suspended" or getBot().status == "banned" then
botInfo(getBot().status)
sleep(100)
reconInfo(true)
sleep(100)
removeBot(getBot().name)
end
end
reconInfo(true)
sleep(100)
botInfo("Reconnected")
sleep(100)
end
if takePick and findItem(98) == 0 then
botInfo("Taking Pickaxe")
sleep(100)
strgWarp(worldPick,doorPick)
sleep(100)
while findItem(98) == 0 do
for _,obj in pairs(getObjects()) do
if obj.id == 98 then
findPath(round(obj.x / 32),math.floor(obj.y / 32))
sleep(1000)
collect(2)
sleep(1000)
end
if findItem(98) > 0 then
break
end
end
end
move(-1,0)
sleep(100)
while findItem(98) > 1 do
sendPacket("action|drop\n|itemID|98",2)
sleep(1000)
sendPacket("action|dialog_return\ndialog_name|drop_item\nitemID|98|\ncount|"..(findItem(98) - 1),2)
sleep(1000)
end
wear(98)
sleep(500)
end
if getBot().slots == 16 and findItem(112) >= 100 then
sendPacket("action|buy\nitem|upgrade_backpack",2)
sleep(1000)
end
while true do
for index,world in pairs(worlds) do
waktuWorld()
sleep(100)
enterDoor(world,doorFarm)
sleep(100)
if not nuked then
botInfo("Starting "..world)
sleep(100)
if detectFarmable then
detect()
sleep(100)
end
if findItem(itmSeed) == 0 and modeRotation == "PLANTHV2" then
take(world)
sleep(100)
end
bl(world)
sleep(100)
tt = os.time()
typeRotation(world)
sleep(100)
tt = os.time() - tt
botInfo("Finished "..world)
sleep(100)
waktu[world] = math.floor(tt/3600).." Hours "..math.floor(tt%3600/60).." Minutes"
sleep(100)
if joinWorldAfterStore then
join()
sleep(100)
end
else
waktu[world] = "NUKED"
tree[world] = "NUKED"
nuked = false
sleep(5000)
end
if start < stop then
start = start + 1
else
if restartTimer then
waktu = {}
tree = {}
end
start = 1
loop = loop + 1
end
end
if not looping then
waktuWorld()
sleep(100)
botInfo("Finished All World!")
sleep(100)
removeBot(getBot().name)
break
end
end
end