runebook_and_runic_atlas_copier
#Runebook and Runic Atlas Copier by Frank Castle
#
#What you need:
# 1) 100% LRC Suit
# 2) Plenty of mana
# 3) Enough blank runes to copy the entire book
# DO NOT HAVE ANY RUNES IN YOUR BACKPACK THAT YOU DO NOT WANT MARKED OVER!!!!!!!!!!!!!!
#
# THIS SCRIPT WILL NOT AUTODEFEND. COPY DANGEROUS RUNES AT YOUR OWN RISK
# THIS SCRIPT WILL STOP AFTER THE LAST RUNE IN THE BOOK IS COPIED. IF IT IS NOT A SAFE
# RUNE YOU WILL NEED TO WATCH IT
#
#
# This will copy runebook to runebook or runic atlas to runic atlas so have an empty book
# of the same type
#
# You will need to set the runeTotal below to the number of runes in the book you are copying
runeTotal = 16 #set to the total number of runes you are copying from the runebook/runic atlas
from System.Collections.Generic import List
global oldBook
global newBook
global oldRune
global bookType
runeCounter = 0
contents =[]
blanks = Items.BackpackCount(0x1F14,-1)
sufficientRunes = True
if blanks < runeTotal:
Misc.SendMessage('I DO NOT HAVE ENOUGH BLANK RUNES FOR THIS',33)
Misc.SendMessage('BUY MORE RUNES AND RESTART SCRIPT',58)
sufficientRunes = False
if not Player.BuffsExist('Protection'):
Spells.CastMagery("Protection")
Misc.Pause(2000)
def setBagContents():
for items in Items.FindBySerial(Player.Backpack.Serial).Contains:
if items.Serial not in contents:
contents.append(items.Serial)
def findRune():
global oldRune
for rune in Items.FindBySerial(Player.Backpack.Serial).Contains:
if rune.Serial not in contents:
oldRune = Items.FindBySerial(rune.Serial)
Misc.Pause(500)
props = Items.GetPropStringList(rune)
Misc.Pause(500)
prop = props[2].split(' ')
name = ''
n = 3
for x in prop:
n = n + 1
if n == len(prop)-1:
break
name = '{}'.format(name)+ '{}'.format(prop[n] +' ')
def Recall():
while Player.Mana < 40:
Misc.Pause(2000)
Journal.Clear()
Spells.CastMagery("Recall")
Target.WaitForTarget(10000, False)
Target.TargetExecute(rune)
Misc.Pause(4000)
Recall()
if Journal.Search('Something is blocking'):
Misc.Pause(30000)
Recall()
Items.Move(oldRune,oldBook,0)
Misc.Pause(1100)
newRune = Items.FindByID(0x1F14,-1,Player.Backpack.Serial)
Spells.CastMagery("Mark")
Target.WaitForTarget(10000, False)
Target.TargetExecute(newRune)
Items.UseItem(newRune)
Misc.Pause(1100)
Misc.ResponsePrompt('{}'.format(name))
Misc.Pause(1100)
Items.Move(newRune,newBook,0)
Misc.Pause(1100)
break
def ChooseBook():
global oldBook
global bookType
OldBook = Target.PromptTarget('Target your Runebook or Runic Atlas')
Misc.Pause(1100)
oldBook = Items.FindBySerial(OldBook)
if oldBook.ItemID == 0x22C5:
bookType = 1
DefineRunebook()
elif oldBook.ItemID == 0x9C16:
bookType = 2
DefineRunicAtlas()
else:
Misc.SendMessage('THAT IS NEITHER A RUNEBOOK NOR A RUNIC ATLAS')
ChooseBook()
def DefineRunebook():
global newBook
NewBook = Target.PromptTarget('Target your new Runebook')
Misc.Pause(1100)
newBook = Items.FindBySerial(NewBook)
if newBook.ItemID != 0x22C5 and newBook.ItemID != 0x9C16:
Misc.SendMessage('THAT IS NEITHER A RUNEBOOK NOR A RUNIC ATLAS')
DefineRunebook()
def DefineRunicAtlas():
global newBook
NewBook = Target.PromptTarget('Target your new Runic Atlas')
Misc.Pause(1100)
newBook = Items.FindBySerial(NewBook)
if newBook.ItemID != 0x9C16:
Misc.SendMessage('THAT IS NOT A RUNIC ATLAS')
DefineRunicAtlas()
def dropRune():
global runeCounter
global bookType
runeCounter = runeCounter + 1
setBagContents()
if bookType == 1:
Items.UseItem(oldBook)
Gumps.WaitForGump(89, 10000)
Gumps.SendAction(89, 200)
if bookType == 2:
Items.UseItem(oldBook)
Gumps.WaitForGump(498, 10000)
Gumps.SendAction(498, 50000)
Gumps.WaitForGump(498, 10000)
Gumps.SendAction(498, 2)
Misc.Pause(1100)
findRune()
def Main():
if sufficientRunes == True:
ChooseBook()
global runeCounter
while runeCounter < runeTotal:
dropRune()
runeCounter
Main()
runebook_and_runic_atlas_copier.txt · Last modified: 2025/02/25 22:20 by 127.0.0.1