wklejamy.pl website for sale. You are interested in. Please contact. wklejamy@gmail.com
Click to buy coffe
Untitled
Guest 72 16th May, 2023
--[[
Script Name: Superhuman House Runemaker
Description: Advanced script to house runemaking (otclient compatible only)
1. If current mana level go house make rune and back on feet or alana sio.
2. Check for players on screen or multifloor and hide. Back for 5 min example.
3. When gets dmg hide to house too. Both 2 & 3 has use friends.txt safe list.
4. When appear fire on screen expand back time for WHEN_PLAYER_HIDE.back.delay.
5. Pickup full bp of balnk runes and throw out full bp of created runes (Main backpack opener).
6. Go to house for eating food at time to time.
Update: 2022-09-06 Added option: SPELL.only_outside to allow make runes outside house when some servers don't allow cast spells in protection zone.
Required: Rifbot 2.00 or higher.
Author: Ascer - example
]]
----------------------------------------------------------------------------------------------------------------------------------------------------------
--> CONFIG SECTION: start - read it carefully becaue it's important!
----------------------------------------------------------------------------------------------------------------------------------------------------------
local HOUSE_POS = {x = 32155, y = 31654, z = 6} -- Position inside house
local BACK_POS = {x = 32158, y = 31654, z = 6} -- Position outside house
local SPELL = {
name = "adori gran flam", -- spell name
mana = 305, -- min mana to cast spell
go_house = false, -- true/false step to house before making rune to avoid pz lock.
only_outside = true, -- true/false make rune only outside house (on some server you can't make it inside pz zone)
change_dir = {enabled = false, dir = 2} -- enabled - true/false, dir - direction 0-3. Change character look direction after back to pos near door.
}
local BACK_ON_FEET = {
enabled = false, -- true/false back on feet not using alana sio
}
local WHEN_PLAYER_HIDE = {
enabled = true, -- true/false hide to house when player appear (ignore safe list from friends.txt)
multifloor = false, -- true/false check player for above and below floors.
back = {enabled = true, delay = 5} -- back true/false, delay time in minutes to back after.
}
local WHEN_DMG_TAKEN_HIDE = {
enabled = true, -- true/false hide to house if character get dmg (ignore safe list from friends.txt)
keywords = {"You lose"}, -- keywords to catch from proxy message
back = {enabled = false, delay = 10} -- back true/false go out of house after attacked by player, separated delay for go out.
}
local WHEN_FIRE_NEAR_DOOR_WAIT = {
enabled = true, -- true/false don't go out if near door where stay your character are fields (checking for pos BACK_POS)
fields = {2118, 2119, 2120, 2121, 2122, 2123} -- fields id to check (ofc if someone trash field there is no way to check it)
}
local PICKUP_BLANK_DROP_BP_RUNES = {
enabled = true, -- enabled true/false
blank_backpack_id = 2854, -- id of backpack with blank runes
blank_rune_id = 3147, -- blank rune id
blank_pos = {x = 32154, y = 31654, z = 6}, -- position of backpacks with blank runes (should be 1sqm from you)
finish_pos = {x = 32154, y = 31655, z = 6} -- position to drop finished backpack.
}
local EAT_FOOD_FROM_GROUND = {
enabled = false, -- enabled true/false eat food from house ground
food = {3578, 3725}, -- food ids
delay = {7, 12}, -- delay time to eat food in minutes math.random(a, b)
pos = {x = 32367, y = 31765, z = 6} -- position where lay food on ground.
}
local ANTI_PUSH = {
enabled = false, -- enabled true/false if your character will stay on any position from pos table will go to safe pos.
pos = { -- positions table just add this around your house door (outside).
{x = 32367, y = 31767, z = 6},
{x = 32367, y = 31768, z = 6},
{x = 32368, y = 31768, z = 6},
{x = 32369, y = 31768, z = 6},
{x = 32369, y = 31767, z = 6}
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------
--> CONFIG SECTION: end
----------------------------------------------------------------------------------------------------------------------------------------------------------
-- DON'T EDIT BELOW THIS LINE
local spellTime, stepTime, friends, backTime, logTime, lastPlayer, isPlayer, pickupBlanks, foodTime, foodDelay, eatFood = 0, 0, Rifbot.FriendsList(true), 0, 0, "", false, false, 0, 0, false
----------------------------------------------------------------------------------------------------------------------------------------------------------
--> Function: delayedSay(text, delay)
--> Description: Say text with delay.
--> Params:
--> @text string message to say on default channel.
--> @delay number miliseconds between say.
--> Return: none
----------------------------------------------------------------------------------------------------------------------------------------------------------
function delayedSay(text, delay)
if os.clock() - spellTime > (delay / 1000) then
Self.Say(text)
spellTime = os.clock()
end
end
----------------------------------------------------------------------------------------------------------------------------------------------------------
--> Function: delayedLog(text, delay)
--> Description: Add log to bot panel.
--> Params:
--> @text string message to store in log.
--> @delay number miliseconds between logs.
--> Return: none
----------------------------------------------------------------------------------------------------------------------------------------------------------
function delayedLog(text, delay)
if os.clock() - logTime > (delay / 1000) then
printf(text)
logTime = os.clock()
end
end
----------------------------------------------------------------------------------------------------------------------------------------------------------
--> Function: getPlayer()
--> Description: Get player on screen.
-->
--> Return: table with creature or false when failed.
----------------------------------------------------------------------------------------------------------------------------------------------------------
function getPlayer()
-- inside loop for all found creatures on multiple floors do:
for i, player in pairs(Creature.iPlayers(7, WHEN_PLAYER_HIDE.multifloor)) do
-- when we can not find a friends and creature is player:
if not table.find(friends, string.lower(player.name)) then
-- return table with creature
return player
end
end
-- return false noone player found.
return false
end
----------------------------------------------------------------------------------------------------------------------------------------------------------
--> Function: eatFoodFromGround()
--> Description: Eat food from house ground position
-->
--> Return: nil - nothing
----------------------------------------------------------------------------------------------------------------------------------------------------------
function eatFoodFromGround()
-- when disabled return
if not EAT_FOOD_FROM_GROUND.enabled then return end
-- when time is wrong return
if os.clock() - foodTime < foodDelay * 60 then return end
-- set param eatFood = true
eatFood = true
-- when current position is far than 1 sqm from eating pos.
if Self.DistanceFromPosition(EAT_FOOD_FROM_GROUND.pos.x, EAT_FOOD_FROM_GROUND.pos.y, EAT_FOOD_FROM_GROUND.pos.z) > 1 then
-- go there
Self.WalkTo(EAT_FOOD_FROM_GROUND.pos.x, EAT_FOOD_FROM_GROUND.pos.y, EAT_FOOD_FROM_GROUND.pos.z)
else
-- set amount to use.
local tries = math.random(7, 10)
-- inside loop use food.
for i = 1, tries do
-- load map with food
local map = Map.GetTopMoveItem(EAT_FOOD_FROM_GROUND.pos.x, EAT_FOOD_FROM_GROUND.pos.y, EAT_FOOD_FROM_GROUND.pos.z)
-- if food id is different than our
if not table.find(EAT_FOOD_FROM_GROUND.food, map.id) then
-- load self pos
selfpos = Self.Position()
-- maybe trashed? move items to our feet
Map.MoveItem(EAT_FOOD_FROM_GROUND.pos.x, EAT_FOOD_FROM_GROUND.pos.y, EAT_FOOD_FROM_GROUND.pos.z, selfpos.x, selfpos.y, selfpos.z, map.id, map.count, 0)
-- wait some time
wait(400, 700)
else
-- use ground id (food eat)
Map.UseItem(EAT_FOOD_FROM_GROUND.pos.x, EAT_FOOD_FROM_GROUND.pos.y, EAT_FOOD_FROM_GROUND.pos.z, map.id, 1, 0)
-- wait some time
wait(800, 1200)
end
end
-- update food time
foodTime = os.clock()
-- set new random food delay.
foodDelay = math.random(EAT_FOOD_FROM_GROUND.delay[1], EAT_FOOD_FROM_GROUND.delay[2])
-- disable eat food
eatFood = false
end
end
----------------------------------------------------------------------------------------------------------------------------------------------------------
--> Function: pickupBlanksDropRunes()
--> Description: Drop finished backpacks to house and grab bps blanks.
-->
--> Return: nil - nothing
----------------------------------------------------------------------------------------------------------------------------------------------------------
function pickupBlanksDropRunes()
-- if no enabled return
if not PICKUP_BLANK_DROP_BP_RUNES.enabled then return end
-- when no main backpack open
if table.count(Container.getInfo(0)) < 2 then
-- when some other containers are opened
if Container.Amount() > 0 then
-- close all containers
Container.CloseAll()
-- wait some time
wait(700, 1000)
else
-- open main backpack
Self.OpenMainBackpack()
-- wait some time
wait(700, 1000)
end
else
-- when no second backpack opened
if table.count(Container.getInfo(1)) < 2 then
-- when amount of container is above 1
if Container.Amount() > 1 then
-- close all containers
Container.CloseAll()
-- wait some time
wait(700, 1000)
else
-- if we have blank backpack inside main
if table.count(Container.FindItem(PICKUP_BLANK_DROP_BP_RUNES.blank_backpack_id, 0)) > 2 then
-- disable pickup blanks
pickupBlanks = false
-- open backpack.
Container.Open(0, PICKUP_BLANK_DROP_BP_RUNES.blank_backpack_id, true, math.random(500, 700))
else
-- enable pickup blanks
pickupBlanks = true
-- when distance from take blanks pos is far than 1sqm walk to.
if Self.DistanceFromPosition(PICKUP_BLANK_DROP_BP_RUNES.blank_pos.x, PICKUP_BLANK_DROP_BP_RUNES.blank_pos.y, PICKUP_BLANK_DROP_BP_RUNES.blank_pos.z) > 1 then
-- go there
Self.WalkTo(PICKUP_BLANK_DROP_BP_RUNES.blank_pos.x, PICKUP_BLANK_DROP_BP_RUNES.blank_pos.y, PICKUP_BLANK_DROP_BP_RUNES.blank_pos.z)
else
-- pickup one backpack from ground.
Self.PickupItem(PICKUP_BLANK_DROP_BP_RUNES.blank_pos.x, PICKUP_BLANK_DROP_BP_RUNES.blank_pos.y, PICKUP_BLANK_DROP_BP_RUNES.blank_pos.z, PICKUP_BLANK_DROP_BP_RUNES.blank_backpack_id, 1)
-- wait some time
wait(700, 1000)
end
end
end
else
-- load count of blank runes inside backpacks
local count = Self.ItemCount(PICKUP_BLANK_DROP_BP_RUNES.blank_rune_id, 1)
-- load count self weapon slot.
local weapon = Self.Weapon()
-- when weapon is this same as blank id.
if weapon.id == PICKUP_BLANK_DROP_BP_RUNES.blank_rune_id then
-- add count
count = count + 1
end
-- when count jest below or equal 0
if count <= 0 then
-- drop backpack to position.
Self.DropItem(PICKUP_BLANK_DROP_BP_RUNES.finish_pos.x, PICKUP_BLANK_DROP_BP_RUNES.finish_pos.y, PICKUP_BLANK_DROP_BP_RUNES.finish_pos.z, PICKUP_BLANK_DROP_BP_RUNES.blank_backpack_id, 1, math.random(700, 1000))
end
end
end
end
----------------------------------------------------------------------------------------------------------------------------------------------------------
--> Function: antipush()
--> Description: When character reach any od ANTI_PUSH.pos then will go to safe place.
-->
--> Return: nil - nothing
----------------------------------------------------------------------------------------------------------------------------------------------------------
function antipush()
-- when no enabled then return
if not ANTI_PUSH.enabled then return end
-- load self position
local selfpos = Self.Position()
-- inside table check if we are on danger position
for i, danger in ipairs(ANTI_PUSH.pos) do
-- check for pos.
if selfpos.x == danger.x and selfpos.y == danger.y and selfpos.z == danger.z then
-- set param that is player and attacked as.
isPlayer = true
-- set param for info logs
lastPlayer = "<character was pushed>"
-- break loop
break
end
end
end
----------------------------------------------------------------------------------------------------------------------------------------------------------
--> Function: changeDir()
--> Description: When character stay near house door then will keep direction you set.
-->
--> Return: nil - nothing
----------------------------------------------------------------------------------------------------------------------------------------------------------
function changeDir()
-- when no enabled then return
if not SPELL.change_dir.enabled then return end
-- when distance from back pos is diff return
if Self.DistanceFromPosition(BACK_POS.x, BACK_POS.y, BACK_POS.z) ~= 0 then return end
-- check for dir
if Self.Direction() ~= SPELL.change_dir.dir then
-- change dir.
Self.Turn(SPELL.change_dir.dir)
end
end
-- proxy function to catch dmg taken signals
function proxy(messages)
-- when hide if dmg is disabled return
if not WHEN_DMG_TAKEN_HIDE.enabled then return false end
-- inside loop for all messages
for i, msg in ipairs(messages) do
-- when message mode is 16 (error message)
if msg.mode == 16 then
-- in loop for key words
for i = 1, #WHEN_DMG_TAKEN_HIDE.keywords do
-- load single key
local key = WHEN_DMG_TAKEN_HIDE.keywords[i]
-- check if string is inside proxy
if string.instr(msg.message, key) then
-- in loop check if string not contains our friends.
for j = 1, #friends do
-- load single friend.
local friend = friends[j]
-- check if attacking our friend destroy loop.
if string.instr(msg.message, "attack by " .. friend) then break end
end
-- set param that is player and attacked as.
isPlayer = true
-- set param for info logs
lastPlayer = "<dmg taken>"
-- update back time.
backTime = os.clock()
-- show log.
delayedLog(msg.message, 0)
end
end
end
end
end
-- register proxy function
Proxy.TextNew("proxy")
-- module to run function inside loop
Module.New("Go House Make Rune and Back", function ()
-- when connected
if Self.isConnected() then
-- set param player to false
local player = false
-- check for move position.
antipush()
-- control backpacks
pickupBlanksDropRunes()
-- eat food
eatFoodFromGround()
-- check for dir change
changeDir()
-- when player on screen
if WHEN_PLAYER_HIDE.enabled then
-- load player checking.
player = getPlayer()
end
-- when player detected
if player or isPlayer then
-- load distance
local dist = Self.DistanceFromPosition(HOUSE_POS.x, HOUSE_POS.y, HOUSE_POS.z)
-- check if we are in house.
if dist > 0 and not pickupBlanks and not eatFood then
-- go to house.
Self.WalkTo(HOUSE_POS.x, HOUSE_POS.y, HOUSE_POS.z)
-- show info in information box
printf("walking to house..")
-- set param for player
isPlayer = true
else
if lastPlayer ~= "<dmg taken>" then
-- update time we spent in house
backTime = os.clock()
-- when player
if player then
-- update logs
delayedLog("Go to safe place due player: " .. player.name, 2000)
-- store last name
lastPlayer = player.name
end
else
if WHEN_DMG_TAKEN_HIDE.enabled and WHEN_DMG_TAKEN_HIDE.back.enabled then
-- load difference time
local diff = (os.clock() - backTime)
-- set delay
local delayBack = WHEN_DMG_TAKEN_HIDE.back.delay * 60
-- when delay is near disable timer re-new if player enter.
if delayBack - diff <= 5 then
lastPlayer = ""
end
end
end
-- disable player
isPlayer = false
end
else
-- load mana
local mp = Self.Mana()
-- when mana is above.
if not SPELL.only_outside and mp >= SPELL.mana and not pickupBlanks and not eatFood then
-- when don't step into house
if not SPELL.go_house then
-- say spell every 2.5s
delayedSay(SPELL.name, 2500)
else
-- load distance
local dist = Self.DistanceFromPosition(HOUSE_POS.x, HOUSE_POS.y, HOUSE_POS.z)
-- check if we are in house.
if dist == 0 then
-- say spell every 2.5s
delayedSay(SPELL.name, 2500)
else
-- step to safe pos
Self.WalkTo(HOUSE_POS.x, HOUSE_POS.y, HOUSE_POS.z)
end
end
else
-- set able to back
local ableBack = true
-- when return is enabeld after time
if (WHEN_PLAYER_HIDE.enabled and WHEN_PLAYER_HIDE.back.enabled) or (WHEN_DMG_TAKEN_HIDE.enabled and WHEN_DMG_TAKEN_HIDE.back.enabled) then
-- load difference time
local diff = (os.clock() - backTime)
-- set delay
local delayBack = WHEN_PLAYER_HIDE.back.delay * 60
-- when dmg taken change delay.
if lastPlayer == "<dmg taken>" and WHEN_DMG_TAKEN_HIDE.enabled and WHEN_DMG_TAKEN_HIDE.back.enabled then
delayBack = WHEN_DMG_TAKEN_HIDE.back.delay * 60
end
-- when diff is not enough
if diff < delayBack then
-- set able back on false
ableBack = false
-- show info about back
delayedLog("Step due: " .. lastPlayer .. ", back for " .. math.floor(delayBack - diff) .. "s..", 1000)
-- load distance
local dist = Self.DistanceFromPosition(BACK_POS.x, BACK_POS.y, BACK_POS.z)
-- when we back manually to pos reset time.
if dist == 0 then
-- reset time
backTime = 0
-- enable back
ableBack = true
-- reset last player
lastPlayer = ""
-- set message
delayedLog("You back manually on BACK_POS reset time.", 0)
end
end
end
-- when checking for fields near house
if WHEN_FIRE_NEAR_DOOR_WAIT.enabled then
-- load map with items
local map = Map.GetItems(BACK_POS.x, BACK_POS.y, BACK_POS.z)
-- inside loop check for items
for i, item in ipairs(map) do
-- when item.id is in table disable back
if table.find(WHEN_FIRE_NEAR_DOOR_WAIT.fields, item.id) then
-- disable back
ableBack = false
-- reset time
backTime = os.clock()
-- set param to field
lastPlayer = "<field>"
-- show log.
delayedLog("deteced field near house: " .. item.id, 1000)
-- break loop
break
end
end
end
-- when able to back and don't pickup blanks and don't eat food
if ableBack and not pickupBlanks and not eatFood then
-- check dist between return pos.
local dist = Self.DistanceFromPosition(BACK_POS.x, BACK_POS.y, BACK_POS.z)
-- reset last palyer
lastPlayer = ""
-- when back on feet is enabled
if BACK_ON_FEET.enabled then
-- when dist is diff than 0
if dist ~= 0 then
-- step to safe pos
Self.WalkTo(BACK_POS.x, BACK_POS.y, BACK_POS.z)
end
else
-- when we have no more mana for cast spell and dist = 0 then back with alana sio.
if dist ~= 0 then
-- say alana sio every 3s
delayedSay("alana sio \"" .. Self.Name(), 1000)
end
end
end
end
if SPELL.only_outside and mp >= SPELL.mana and not pickupBlanks and not eatFood then
-- say spell every 2.5s
delayedSay(SPELL.name, 2500)
end
end
end
end)
To share this paste please copy this url and send to your friends
RAW Paste Data