EasyUo SpellBookMaker Sayfaya git: 1, 2, Sonraki |
Ultima Online Forum -> Yardımcı Programlar |
Yazar
Mesaj
Arkadaşlar SpellBook yapan bir scritp güzel ve kullanması kolay bir script =)
Kullanımı basit :
1. tüm reglerden fazlaca alıp bi "bag" içinde bankanıza bırakın.
2. vendordan boş spellbook alıp aynı bag içine atın, ins. tool'u da aynı bag içine atın.
3. 64 lük kitap çantanızda olsun.
Kolay Gelsin
;=============================================================
; Script Name: Mage/Necro books Filler
; Author: Aganor
; Version: 0.4
; Shard: OSI
; Client Tested w/: 5.0.9+
; EUO tested w/: 1.50 Build 109
; Public Release: April 12, 2007
; Purpose: Fills mage/necro books from a chest or with inscription or both.
;=============================================================
; 0.4
; - Modified the code from the MakeItem sub. Not tested yet.
display yesno Which type of spellbook do you want to fill?$YES = MAGE$NO = NECRO$(Easy, no?)
set %WorkType Mage
if #dispres = NO
set %WorkType Necro
display yesno Do you have an ML account?$For weight calculations.
set %MLAccount #false
if #dispres = YES
set %MLAccount #true
set %MageBookType MPF
set %NecroBookType XXM
set %ScribeToolType PBG
set %TinkerToolType JTL
set %BlankScrollType DPF
set %IngotType ENK
set %AdditionalWeight 0
set %CurrentScroll 1
set %CurrentBook N/A
set %BooksDone 0
set #LPC 100
gosub CreateVariableArray %WorkType
set %Tinkering #False
chooseskill tink real
if #skill > 70
{
set %Tinkering #true
}
set %Inscription #false
chooseskill insc real
if #skill > 70
{
set %Inscription #true
}
set %Meditation #false
chooseskill medi real
if #skill > 70
{
set %Meditation #true
}
gosub GetContainers
gosub SetupDesktop
set %MaxWeight #maxweight + %AdditionalWeight - 20 ; security we remove 20
finditem %BookType C_ , #backpackid
if #findkind <> -1
{
for #findindex 1 #findcnt
{
event property #findid
if 64 in #property && %BookType = %MageBookType
ignoreitem #findid 33
if 17 in #property && %BookType = %NecroBookType
ignoreitem #findid 33
}
}
if %Inscription = #TRUE
{
set %TriesLimit %Scroll / 2
}
else
{
set %TriesLimit %Scroll
}
while #true
{
if #LPC < 200
set #LPC 200
gosub LoadRessources
if #result <> #true
{
display ok #result
halt
}
set %Tries 1
repeat
{
set %Tries %Tries + 1
set %OldScroll %CurrentScroll
gosub FillBook
if %OldScroll = %CurrentScroll
{
set %Tries %Tries + 1
}
}
until %Tries > %TriesLimit || %CurrentScroll > %Scroll
; gosub CheckBookFull
wait 5
}
halt
;======================================================
; RESSOURCE CHECK
;======================================================
; no parameters
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub RessourceCheck
namespace push
namespace local SubRCK , #sCnt2 , #random
set !RCK_Result #FALSE
if %Inscription = #TRUE
{
set !RCK_Result #TRUE
for !RCK_Count 1 %reg
{
finditem %reg . !RCK_Count C_ , #backpackid
if #findkind = -1 && #findstack < 5
{
set !RCK_Result #FALSE
}
}
finditem %BlankScrollType C_ , #backpackid
if #findkind = -1 || #findstack < 5
{
set !RCK_Result #FALSE
}
}
else
{
set !RCK_Result #TRUE
}
set %Result !RCK_Result
namespace clear
namespace pop
return %Result
;======================================================
; MANA CHECK
;======================================================
; no parameters
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub ManaCheck
namespace push
namespace local SubMCK , #sCnt2 , #random
set !MCK_Result #FALSE
if %Inscription = #TRUE
{
if %scrollMana . %CurrentScroll <> N/A
{
set !MCK_ManaReq %scrollMana . %CurrentScroll + 10
}
else
{
set !MCK_ManaReq 30
}
if #mana < !MCK_ManaReq
{
set !MCK_Meditate #sCnt2 - 1
while #mana < #maxmana
{
if %Meditation = #TRUE && !MCK_Meditate < #sCnt2
{
set !MCK_Journal #jindex
event macro 13 46
set !MCK_TimeOut #sCnt2 + 50
while !MCK_TimeOut > #sCnt2
{
for !MCK_Line !MCK_Journal #jindex
{
scanjournal !MCK_Line
if !MCK_Line > !MCK_Journal
{
if Cannot_focus in #journal
{
set !MCK_TimeOut #sCnt2
set !MCK_Meditate #sCnt2 + 110
}
if meditative_trance in #journal
{
set !MCK_TimeOut #sCnt2
set !MCK_Meditate #sCnt2 + 3000
}
}
}
}
}
wait 10
}
}
}
set %Result !MCK_Result
namespace clear
namespace pop
return %Result
;======================================================
; FILL BOOK
;======================================================
; no parameters
;======================================================
; return nothin
;======================================================
; updates tons of vars
;======================================================
; requires no globals
;======================================================
sub FillBook
namespace push
namespace local SubFBK , #sCnt2 , #random
set !FBK_Result #FALSE
if %CurrentScroll > %Scroll
{
set %CurrentScroll 1
}
setUOTitle Books Done : , #spc , %BooksDone , #spc , | Current Scroll : , #spc , %ScrollName . %CurrentScroll , #spc , ( , %CurrentScroll , / , %Scroll , )
if %CurrentBook <> N/A
{
finditem %CurrentBook C_ , #backpackid
if #findkind = -1
{
set %CurrentBook N/A
}
else
{
event property #findid
if %scroll in #property
{
set %CurrentBook N/A
}
}
}
if %CurrentBook = N/A
{
finditem %BookType C_ , #backpackid
if #findkind <> -1
{
for #findindex 1 #findcnt
{
event property #findid
if %scroll notin #property && %CurrentBook = N/A
{
set %CurrentBook #findid
set %CurrentScroll 1
}
}
}
}
if %CurrentBook <> N/A
{
set !FBK_Done #false
while !FBK_Done = #FALSE
{
gosub ManaCheck
set !FBK_ScrollID #false
if %ScrollContainer <> N/A && %notinContainer . %CurrentScroll = N/A
{
finditem %scroll . %CurrentScroll C_ , %ScrollContainer
if #findkind = -1
{
set %notinContainer . %CurrentScroll #true
}
else
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID = #FALSE
{
finditem %scroll . %CurrentScroll C_ , #backpackid
if #findkind <> -1
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID = #FALSE && %Inscription <> #FALSE
{
finditem %ScribeToolType C_ , #backpackid
if #findkind <> -1
{
set !FBK_ToolID #findid
if %MultiPage = NO
{
set !FBK_ScrollPage %CurrentScroll - 1 ; We need scrolls from 0 to 63
set !FBK_Page ( !FBK_ScrollPage / %SpellPerPage ) ; Goes from 0 to 7
set !FBK_Section %StartMenu + !FBK_Page
set !FBK_Page 1
set !FBK_Item ( !FBK_ScrollPage % %SpellPerPage ) + 1 ; The scroll button from 1 to 8
set !FBK_ScrollType %scroll . %CurrentScroll
}
else
{
set !FBK_ScrollPage %CurrentScroll - 1 ; We need scrolls from 0 to 63
set !FBK_Section %StartMenu
set !FBK_Page ( !FBK_ScrollPage / 10 ) + 1
set !FBK_Item ( !FBK_ScrollPage % %SpellPerPage ) + 1 ; The scroll button from 1 to 8
set !FBK_ScrollType %scroll . %CurrentScroll
}
gosub MakeItem #findid N/A !FBK_Section !FBK_Page !FBK_Item !FBK_ScrollType
}
else
{
set !FBK_Done #true
}
}
if !FBK_ScrollID = #FALSE && %Inscription <> #FALSE
{
finditem %scroll . %CurrentScroll C_ , #backpackid
if #findkind <> -1
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID <> #FALSE
{
exevent drag #findid 1
wait 5
exevent dropc %CurrentBook
wait 25
set !FBK_Done #true
}
if !FBK_ScrollID <> #FALSE || %Inscription = #FALSE
{
set %CurrentScroll %CurrentScroll + 1
}
if %CurrentScroll > %Scroll
{
set !FBK_Done #true
}
} ; End of While Done
}
set %Result !FBK_Result
namespace clear
namespace pop
return %Result
;======================================================
; LOAD RESSOURCES
;======================================================
; no parameters
;======================================================
; return a message or true
;======================================================
; updates no globels
;======================================================
; requires %Regs array, tool types, scrolls types
;======================================================
sub LoadRessources
namespace push
namespace local SubLRS , #sCnt2 , #random
set !LRS_Result #TRUE
set !LRS_OldLPC #LPC
set #LPC 300
set !LRS_LoadPen #false
if %Inscription = #TRUE
{
finditem %ScribeToolType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadPen #true
}
else
{
if #findcnt < 2
{
set !LRS_Uses 0
set !LRS_Tools #findcnt
for #findindex 1 #findcnt
{
set !LRS_Tools . #findindex #findid
}
for !LRS_Count 1 !LRS_Tools
{
gosub ToolUses !LRS_Tools . !LRS_Count
set !LRS_Uses !LRS_Uses + #result
}
if !LRS_Uses < 100
{
set !LRS_LoadPen 1
}
}
}
}
set !LRS_LoadScrolls #false
if %Inscription = #TRUE
{
finditem %BlankScrollType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadScrolls #TRUE
}
else
{
if #findstack < 30
{
set !LRS_Count 0
for #findindex 1 #findcnt
{
set !LRS_Count !LRS_Count + #findstack
}
if !LRS_Count < 100
{
set !LRS_LoadScrolls !LRS_Count
}
}
}
}
set !LRS_LoadRegs #false
if %Inscription = #TRUE
{
finditem %regstype C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadRegs #true
set !LRS_RegList 0
set !LRS_Count 0
while !LRS_Count < %reg
{
set !LRS_Count !LRS_Count + 1
set !LRS_RegList !LRS_RegList + 1
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
}
else
{
set !LRS_RegsCount 0
set !LRS_RegsFound
for #findindex 1 #findcnt
{
if #findtype notin !LRS_RegsFound
{
set !LRS_RegsFound !LRS_RegsFound , _
if #findstack > 30
{
set !LRS_RegsCount !LRS_RegsCount + 1
}
}
}
if !LRS_RegsCount < %reg
{
set !LRS_RegList 0
set !LRS_Count 0
while !LRS_Count < %reg
{
set !LRS_Count !LRS_Count + 1
finditem %Reg . !LRS_Count C_ , #backpackid
if #findkind = -1
{
set !LRS_RegList !LRS_RegList + 1
set !LRS_LoadRegs #true
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
else
{
if #findstack < 30
{
set !LRS_RegList !LRS_RegList + 1
set !LRS_LoadRegs #true
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
}
}
}
}
}
if !LRS_LoadPen <> #FALSE
{
finditem %ScribeToolType C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoPenLeft
}
else
{
exevent drag #findid #findstack
wait 5
exevent dropc #backpackid
wait 25
}
}
if !LRS_LoadScrolls <> #FALSE
{
finditem %BlankScrollType C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoScrollLeft
}
else
{
set !LRS_Amount 120 - !LRS_LoadScrolls
set !LRS_CurrentWeight %MaxWeight - #WEIGHT
if !LRS_Amount > !LRS_CurrentWeight
set !LRS_Amount !LRS_CurrentWeight ; scrolls weighting 1 stone :-)
if !LRS_Amount > #findstack
set !LRS_Amount #findstack
exevent drag #findid !LRS_Amount
wait 5
exevent dropc #backpackid
wait 25
}
}
if !LRS_LoadRegs <> #FALSE
{
for !LRS_Count 1 !LRS_RegList
{
finditem !LRS_RegList . !LRS_Count C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoRegsLeft
}
else
{
set !LRS_Amount 100
if !LRS_Amount > #findstack
set !LRS_Amount #findstack
exevent drag #findid !LRS_Amount
wait 5
exevent dropc #backpackid
wait 25
}
}
}
set !LRS_LoadEmptyBook #false
finditem %BookType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadEmptyBook #true
}
else
{
set !LRS_LoadEmptyBook #TRUE
set !LRS_LoadFoundBook #FALSE
for #findindex 1 #findcnt
{
event property #findid
if %scroll in #property
{
set !LRS_LoadEmptyBook #findid
}
else
{
if %Inscription = #TRUE
{
set !LRS_LoadFoundBook #true
}
else
{
if %CurrentScroll >= %Scroll
{
set !LRS_LoadEmptyBook #findid
}
}
}
}
if !LRS_LoadFoundBook = #true
{
set !LRS_LoadEmptyBook #false
}
}
if !LRS_LoadEmptyBook <> #FALSE
{
if !LRS_LoadEmptyBook <> #TRUE
{
finditem !LRS_LoadEmptyBook C_ , #backpackid
if #findkind <> -1
{
exevent drag #findid #findstack
wait 5
exevent dropc %RessourceContainer 300 300
wait 25
set %BooksDone %BooksDone + 1
ignoreitem #findid 4
}
}
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
set !LRS_Found #false
set !LRS_Count 0
while !LRS_Count < #findcnt
{
set !LRS_Count !LRS_Count + 1
set #findindex !LRS_Count
event property #findid
if %Scroll notin #property
{
exevent drag #findid #findstack
wait 5
exevent dropc #backpackid
wait 25
set !LRS_Found #TRUE
set !LRS_Count #findcnt + 1
}
else
{
ignoreitem #findid 44
}
}
if !LRS_Found = #FALSE
{
set !LRS_Result NoBooksLeft
}
}
else
{
set !LRS_Result NoBooksLeft
}
}
set #LPC !LRS_OldLPC
set %Result !LRS_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET CONTAINERS
;======================================================
; no parameters
;======================================================
; return nothin
;======================================================
; updates %RessourceContainer %ScrollContainer
;======================================================
; requires no globals
;======================================================
sub GetContainers
namespace push
namespace local SubGCT , #sCnt2 , #random
set !GCT_Result #FALSE
set !GCT_Done #FALSE
set %RessourceContainer N/A
repeat
{
set %RessourceContainer N/A
repeat
{
display ok Please target your ressource container.$It must contain the following items :$- Blank Scrolls$- Reagents$- Books to fill$- Scribe pens
gosub GetObjectID
if #result <> #FALSE
{
set %RessourceContainer #result
}
}
until %RessourceContainer <> N/A
set #NEXTCPOSX 0
set #NEXTCPOSY 0
set #LOBJECTID %RessourceContainer
while #CONTID <> %RessourceContainer
{
event macro 17 0
wait 20
}
if %Inscription = #true
{
finditem %ScribeToolType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %BlankScrollType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %RegsType C_ , %RessourceContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No regs in this container.
}
}
else
{
display ok No blank scrolls in this container.
}
}
else
{
display ok No empty books in this container.
}
}
else
{
display ok No scribe tools in this container.
}
}
else
{
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No empty books in this container.
}
}
}
until !GCT_Done = #true
set !GCT_Done #FALSE
set %ScrollContainer N/A
repeat
{
set %ScrollContainer N/A
repeat
{
if %Inscription = #TRUE
{
display yesno If you want to use a scroll container, click YES and target.$If you don't want to use a scroll container, just press No
}
else
{
display ok You need to use a scroll container.$Please target it!
}
if #dispres = Yes || %Inscription <> #TRUE
{
gosub GetObjectID
if #result <> #FALSE
{
set %ScrollContainer #result
}
}
else
{
set !GCT_Done #true
}
}
until %ScrollContainer <> N/A || !GCT_Done = #true
if !GCT_Done <> #true
{
set #NEXTCPOSX 0
set #NEXTCPOSY 300
set #LOBJECTID %ScrollContainer
while #CONTID <> %ScrollContainer
{
event macro 17 0
wait 20
}
finditem %ScrollsType C_ , %ScrollContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No scrolls in this container.
}
}
}
until !GCT_Done = #true
set %Result !GCT_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET PACK INFO
;======================================================
; %1 Weight or Items or MaxItems or MaxWeight
; %2 ID of the Item
;======================================================
; return weight or items or max items or max weight
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub GetPackInfo
namespace push
namespace local SubGPI , #sCnt2 , #random
set !GPI_Result #FALSE
if %0 < 2
goto _GPI_End
set !GPI_Type %1
set !GPI_ID %2
finditem !GPI_ID
if #findkind <> -1
{
event property !GPI_ID
set !GPI_String #property
if !GPI_Type = Weight
{
str pos !GPI_string weight
if #strres > 0
{
set !GPI_Pos #strres + 7
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String Stones
if #strres > 0
{
set !GPI_Pos #strres - 2
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
goto _GPI_End
}
str pos !GPI_string items
if #strres > 0
{
set !GPI_Pos #strres + 6
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
goto _GPI_End
}
}
if !GPI_Type = Items
{
str pos !GPI_string contents
if #strres > 0
{
set !GPI_Pos #strres + 9
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
goto _GPI_End
}
if !GPI_Type = MaxItems
{
str pos !GPI_string contents
if #strres > 0
{
set !GPI_Pos #strres + 9
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres
str len !GPI_String
set !GPI_MaxPos #strres
set !GPI_MaxPos !GPI_MaxPos - !GPI_Pos
str right !GPI_String !GPI_MaxPos
set !GPI_String #strres
str pos !GPI_String #spc
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
}
goto _GPI_End
}
if !GPI_Type = MaxWeight
{
str pos !GPI_string items
if #strres > 0
{
set !GPI_Pos #strres + 6
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0 && #strres < 5
{
set !GPI_Pos #strres
str len !GPI_String
set !GPI_MaxPos #strres
set !GPI_MaxPos !GPI_MaxPos - !GPI_Pos
str right !GPI_String !GPI_MaxPos
set !GPI_String #strres
str pos !GPI_String #spc
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
}
goto _GPI_End
}
}
_GPI_End:
set %Result !GPI_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET OBJECT ID
;======================================================
; (%1) Expected object type
;======================================================
; return Object ID or #false if fails.
;======================================================
; updates no globels
;======================================================
; requires no globals
;======================================================
sub GetObjectID
namespace push
namespace local SubGOI , #sCnt2 , #random
set !GOI_Result #FALSE
set !GOI_Type #false
if %0 > 0
set !GOI_Type %1
set #TARGCURS 1
while #TARGCURS = 1
{
wait 1
}
finditem #LTARGETID
if #findkind <> -1
{
if !GOI_Type <> #FALSE
{
if !GOI_Type = #findtype
set !GOI_Result #findid
}
else
{
set !GOI_Result #findid
}
}
set %Result !GOI_Result
namespace clear
namespace pop
return %Result
;======================================================
; TOOL USES
;======================================================
; %1 Tool ID
;======================================================
; return number of uses
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub ToolUses
namespace push
namespace local SubTU , #sCnt2 , #random
set !TU_Result 0
set !TU_Tool %1
finditem !TU_Tool C_ , #backpackid
if #findkind = -1
goto _TU_End
set !TU_ToolFound #findid
event property !TU_ToolFound
set !TU_String #property
str pos !TU_string remaining
if #strres > 0
{
set !TU_Pos #strres + 10
str del !TU_String 1 !TU_Pos
set !TU_String #strres
str pos !TU_String $
if #strres > 0
{
set !TU_Pos #strres - 1
str left !TU_String !TU_Pos
set !TU_String #strres
set !TU_Result !TU_String
goto _TU_End
}
}
_TU_End:
set %Result !TU_Result
namespace clear
namespace pop
return %Result
;======================================================
; CREATE VARIABLE ARRAY
;======================================================
; (%1) Type : Necro or Mage (Default)
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub CreateVariableArray
namespace push
namespace local SubCSA , #sCnt2 , #random
set !CSA_Type Mage
if %0 > 0
{
set !CSA_Type %1
}
if !CSA_Type = Mage
{
set %BookType %MageBookType
set %MultiPage NO
set %StartMenu 1
set %SpellPerPage 8
set %reg 8
set %reg1 kuf ;Black Pearl
set %reg2 juf ;Blood Moss
set %reg3 mzf ;Mandrake Root
set %reg4 wzf ;Nightshade
set %reg5 rzf ;Spiders' Silk
set %reg6 kzf ;Garlic
set %reg7 jzf ;Ginseng
set %reg8 szf ;Sulfurous Ash
set %regstype
for !CSA_cntx 1 %reg
{
set %regstype %regstype , _ , %reg . !CSA_cntx
}
set %scroll 64
;*******************************************
; Scroll Item Types
; From Ma$$acre Spellbook Filler!
;*******************************************
; 1st Circle Spells
set %scroll1 NXL
set %scrollName1 Reactive , #spc , Armor
set %scrollMana1 4
set %scroll2 QXL
set %scrollName2 Clumsy
set %scrollMana2 4
set %scroll3 PXL
set %scrollName3 Create , #spc , Food
set %scrollMana3 4
set %scroll4 AYL
set %scrollName4 Feeblemind
set %scrollMana4 4
set %scroll5 ZXL
set %scrollName5 Heal
set %scrollMana5 4
set %scroll6 CYL
set %scrollName6 Magic , #spc , Arrow
set %scrollMana6 4
set %scroll7 BYL
set %scrollName7 Night , #spc , Sight
set %scrollMana7 4
set %scroll8 WXL
set %scrollName8 Weaken
set %scrollMana8 4
; 2nd Circle Spells
set %scroll9 VXL
set %scrollName9 Agility
set %scrollMana9 6
set %scroll10 YXL
set %scrollName10 Cunning
set %scrollMana10 6
set %scroll11 XXL
set %scrollName11 Cure
set %scrollMana11 6
set %scroll12 IYL
set %scrollName12 Harm
set %scrollMana12 6
set %scroll13 HYL
set %scrollName13 Magic , #spc , Trap
set %scrollMana13 6
set %scroll14 KYL
set %scrollName14 Magic , #spc , Untrap
set %scrollMana14 6
set %scroll15 JYL
set %scrollName15 Protection
set %scrollMana15 6
set %scroll16 EYL
set %scrollName16 Strength
set %scrollMana16 6
; 3rd Circle Spells
set %scroll17 DYL
set %scrollName17 Bless
set %scrollMana17 9
set %scroll18 GYL
set %scrollName18 Fireball
set %scrollMana18 9
set %scroll19 FYL
set %scrollName19 Magic , #spc , Lock
set %scrollMana19 9
set %scroll20 STL
set %scrollName20 Poison
set %scrollMana20 9
set %scroll21 RTL
set %scrollName21 Telekinesis
set %scrollMana21 9
set %scroll22 UTL
set %scrollName22 Teleport
set %scrollMana22 9
set %scroll23 TTL
set %scrollName23 Unlock
set %scrollMana23 9
set %scroll24 OTL
set %scrollName24 Wall , #spc , of , #spc , Stone
set %scrollMana24 9
; 4th Circle Spells
set %scroll25 NTL
set %scrollName25 Arch , #spc , Cure
set %scrollMana25 11
set %scroll26 QTL
set %scrollName26 Arch , #spc , Protection
set %scrollMana26 11
set %scroll27 PTL
set %scrollName27 Curse
set %scrollMana27 11
set %scroll28 AUL
set %scrollName28 Fire , #spc , Field
set %scrollMana28 11
set %scroll29 ZTL
set %scrollName29 Greater , #spc , Heal
set %scrollMana29 11
set %scroll30 CUL
set %scrollName30 Lightning
set %scrollMana30 11
set %scroll31 BUL
set %scrollName31 Mana , #spc , Drain
set %scrollMana31 11
set %scroll32 WTL
set %scrollName32 Recall
set %scrollMana32 11
; 5th Circle Spells
set %scroll33 VTL
set %scrollName33 Blade , #spc , Spirits
set %scrollMana33 14
set %scroll34 YTL
set %scrollName34 Dispel , #spc , Field
set %scrollMana34 14
set %scroll35 XTL
set %scrollName35 Incognito
set %scrollMana35 14
set %scroll36 IUL
set %scrollName36 Magic , #spc , Reflection
set %scrollMana36 14
set %scroll37 HUL
set %scrollName37 Mind , #spc , Blast
set %scrollMana37 14
set %scroll38 KUL
set %scrollName38 Paralyze
set %scrollMana38 14
set %scroll39 JUL
set %scrollName39 Poison , #spc , Field
set %scrollMana39 14
set %scroll40 EUL
set %scrollName40 Summon , #spc , Creature
set %scrollMana40 14
; 6th Circle Spells
set %scroll41 DUL
set %scrollName41 Dispel
set %scrollMana41 20
set %scroll42 GUL
set %scrollName42 Energy , #spc , Bolt
set %scrollMana42 20
set %scroll43 FUL
set %scrollName43 Explosion
set %scrollMana43 20
set %scroll44 QUL
set %scrollName44 Invisibility
set %scrollMana44 20
set %scroll45 PUL
set %scrollName45 Mark
set %scrollMana45 20
set %scroll46 SUL
set %scrollName46 Mass , #spc , Curse
set %scrollMana46 20
set %scroll47 RUL
set %scrollName47 Paralyze , #spc , Field
set %scrollMana47 20
set %scroll48 MUL
set %scrollName48 Reveal
set %scrollMana48 20
; 7th Circle Spells
set %scroll49 LUL
set %scrollName49 Chain , #spc , Lightning
set %scrollMana49 40
set %scroll50 OUL
set %scrollName50 Energy , #spc , Field
set %scrollMana50 40
set %scroll51 NUL
set %scrollName51 Flamestrike
set %scrollMana51 40
set %scroll52 YUL
set %scrollName52 Gate , #spc , Travel
set %scrollMana52 40
set %scroll53 XUL
set %scrollName53 Mana , #spc , Vampire
set %scrollMana53 40
set %scroll54 AVL
set %scrollName54 Mass , #spc , Dispell
set %scrollMana54 40
set %scroll55 ZUL
set %scrollName55 Meteor , #spc , Swarm
set %scrollMana55 40
set %scroll56 UUL
set %scrollName56 Polymorph
set %scrollMana56 40
; 8th Circle Spells
set %scroll57 TUL
set %scrollName57 Earthquake
set %scrollMana57 50
set %scroll58 WUL
set %scrollName58 Energy , #spc , Vortex
set %scrollMana58 50
set %scroll59 VUL
set %scrollName59 Resurrection
set %scrollMana59 50
set %scroll60 GVL
set %scrollName60 Summon , #spc , Air , #spc , Elemental
set %scrollMana60 50
set %scroll61 FVL
set %scrollName61 Summon , #spc , Daemon
set %scrollMana61 50
set %scroll62 IVL
set %scrollName62 Summon , #spc , Earth , #spc , Elemental
set %scrollMana62 50
set %scroll63 HVL
set %scrollName63 Summon , #spc , Fire , #spc , Elemental
set %scrollMana63 50
set %scroll64 CVL
set %scrollName64 Summon , #spc , Water , #spc , Elemental
set %scrollMana64 50
set %scrollstype
for !CSA_cntx 1 %scroll
{
set %scrollstype %scrollstype , _ , %scroll . !CSA_cntx
}
} ; End If CSA
if !CSA_Type = necro
{
set %BookType %NecroBookType
set %MultiPage YES
set %StartMenu 9
set %SpellPerPage 10
set %reg 5
set %reg1 UZF ;Nox Crystal
set %reg2 DUF ;Daemon Blood
set %reg3 TZF ;Grave Dust
set %reg4 IUF ;Batwing
set %reg5 YZF ;Pig Iron
set %regstype
for !CSA_cntx 1 %reg
{
set %regstype %regstype , _ , %reg . !CSA_cntx
}
set %Scroll 17
set %scroll1 MYM
set %scrollName1 Animate , #spc , Dead
set %scrollMana1 23
set %scroll2 LYM
set %scrollName2 Blood , #spc , Oath
set %scrollMana2 13
set %scroll3 OYM
set %scrollName3 Corpse , #spc , Skin
set %scrollMana3 11
set %scroll4 NYM
set %scrollName4 Curse , #spc , Weapon
set %scrollMana4 7
set %scroll5 IYM
set %scrollName5 Evil , #spc , Omen
set %scrollMana5 11
set %scroll6 HYM
set %scrollName6 Horrific , #spc , Beast
set %scrollMana6 17
set %scroll7 KYM
set %scrollName7 Lich , #spc , Form
set %scrollMana7 23
set %scroll8 JYM
set %scrollName8 Mind , #spc , Rot
set %scrollMana8 17
set %scroll9 UYM
set %scrollName9 Pain , #spc , Spike
set %scrollMana9 5
set %scroll10 TYM
set %scrollName10 Poisin , #spc , Strike
set %scrollMana10 17
set %scroll11 WYM
set %scrollName11 Strangle
set %scrollMana11 29
set %scroll12 VYM
set %scrollName12 Summon , #spc , Familiar
set %scrollMana12 17
set %scroll13 QYM
set %scrollName13 Vampiric , #spc , Embrace
set %scrollMana13 23
set %scroll14 PYM
set %scrollName14 Vengeful , #spc , Spirit
set %scrollMana14 41
set %scroll15 SYM
set %scrollName15 Wither
set %scrollMana15 23
set %scroll16 RYM
set %scrollName16 Wraith , #spc , Form
set %scrollMana16 17
set %scroll17 CZM
set %scrollName17 Exorcism
set %scrollMana17 40
set %scrollstype
for !CSA_cntx 1 %scroll
{
set %scrollstype %scrollstype , _ , %scroll . !CSA_cntx
}
}
namespace clear
namespace pop
return
;======================================================
; MAKE ITEM
;======================================================
; %1 Tool ID
; %2 Ressource Type
; %3 Section
; %4 Page
; %5 Item
; (%6) Expected Item Type
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub MakeItem
namespace push
namespace local SubMI , #sCnt2 , #random
set !MI_Result #FALSE
set !MI_Tool %1
set !MI_Ressource %2
set !MI_Category %3
set !MI_Page %4
set !MI_Item %5
set !MI_ExpectedType %6
set !MI_Tries 0
set !MI_FunctionTimeOut #sCnt2 + 150
if !MI_ExpectedType <> N/A
{
set !MI_FouncItems 0
finditem !MI_ExpectedType C_ , #backpackid
if #findkind <> -1
set !MI_FouncItems #findcnt
}
_MI_OpenGump:
set !MI_Tries !MI_Tries + 1
set #LOBJECTID !MI_Tool
event macro 17 0
set !MI_Timeout #sCnt + 4
_MI_WaitGump:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitGump
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Tries < 3
goto _MI_OpenGump
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
if !MI_Ressource > 0 && !MI_Ressource <> N/A
{
; From here we are sure the gump is open or we already quitted :-)
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + 370
click !MI_ClickX !MI_ClickY
wait 10
set !MI_Timeout #sCnt + 4
_MI_WaitRessource:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitRessource
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
set !MI_PosY !MI_Ressource * 20
set !MI_PosY !MI_PosY + 50
set !MI_ClickX #contposX + 235
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
wait 10
set !MI_Timeout #sCnt + 4
_MI_WaitMenu:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitMenu
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
}
set !MI_PosY !MI_Category * 20
set !MI_PosY !MI_PosY + 70
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
wait 10
_MI_NextPage:
set !MI_Timeout #sCnt + 4
_MI_WaitList:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitList
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
if !MI_Page > 1
{
set !MI_Page !MI_Page - 1
if !MI_Page > 0
{
set !MI_ClickX #contposX + 385
set !MI_ClickY #contposY + 270
click !MI_ClickX !MI_ClickY
wait 10
goto _MI_NextPage
}
}
set !MI_PosY !MI_Item * 20
set !MI_PosY !MI_PosY + 50
set !MI_ClickX #contposX + 235
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
set !MI_Timeout #sCnt + 4
set !MI_Worn #false
set !MI_Scan #jindex
_MI_WaitItem:
wait 5
for !MI_Line !MI_Scan #jindex
{
scanjournal !MI_Line
if you_worn_out in #journal
{
set !MI_Worn #true
goto _MI_Done
}
}
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitItem
if #contname <> generic_gump && #contsize <> 530_437
{
set !MI_Worn #true
goto _MI_Done
}
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + 30
set !MI_Timeout #sCnt + 2
_MI_WaitGumpClose:
wait 5
if ( #contname <> generic_gump || #contsize <> 530_437 ) && !MI_Timeout > #sCnt
goto _MI_WaitGumpClose
set !MI_Timeout #sCnt + 2
_MI_Close:
click !MI_ClickX !MI_ClickY r
wait 5
if #contname = generic_gump && #contsize = 530_437 && !MI_Timeout > #sCnt
goto _MI_Close
_MI_Done:
if !MI_ExpectedType <> N/A
{
finditem !MI_ExpectedType C_ , #backpackid
if #findkind <> -1
{
if !MI_FouncItems < #findcnt
{
set !MI_Result #true
}
else
{
if !MI_FunctionTimeOut > #sCnt2 && !MI_Worn = #false
goto _MI_OpenGump
}
}
}
else
{
set !MI_Result #true
}
_MI_End:
set %Result !MI_Result
namespace clear
namespace pop
return %Result
;======================================================
; SETUP DESKTOP
;======================================================
; no parameters
;======================================================
; return True in case of success
;======================================================
; updates no globals
;======================================================
; requires %PlayerRace %AdditionalWeight %MLAccount
;======================================================
sub SetupDesktop
namespace push
namespace local SubSD , #sCnt2 , #random
;Detect and closes Veteran rewards
set !SD_TimeOut #sCnt + 5
_SD_VetGump:
click 60 60
wait 30
if #CONTNAME = generic_gump && #CONTSIZE = 510_145 && !SD_TimeOut > #sCnt
{
set !SD_ClickX #contposx + 300
set !SD_ClickY #contposy + 105
click !SD_ClickX !SD_ClickY
wait 30
goto _SD_VetGump
}
;opens and places the paperdoll
set !SD_TimeOut #sCnt + 5
_SD_PaperDollGump:
event Macro 8 1
wait 30
if #CONTNAME <> paperdoll_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_PaperDollGump
}
if #CONTNAME = paperdoll_gump
{
contpos 640 110
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_PaperDollMove:
if #CONTNAME <> paperdoll_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_PaperDollMove
}
;opens and places the Status bar
set !SD_TimeOut #sCnt + 5
_SD_StatusGump:
event Macro 8 2
wait 30
if #CONTNAME <> status_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_StatusGump
}
if #CONTNAME = status_gump
{
if #CONTTYPE notin XU_AV
{
set %PlayerRace Human
if %MLAccount = #true
{
set %AdditionalWeight 60
}
}
if #CONTTYPE in XU_AV
{
set %PlayerRace Elf
set %AdditionalWeight 0
}
contpos 610 370
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_StatusMove:
if #CONTNAME <> status_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_StatusMove
}
;opens and places the journal
set !SD_TimeOut #sCnt + 5
_SD_JournalGump:
event Macro 8 3
wait 30
if #CONTNAME <> text_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_JournalGump
}
if #CONTNAME = text_gump
{
contpos 0 460
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_JournalMove:
if #CONTNAME <> text_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 0
{
wait 10
goto _SD_JournalMove
}
;opens and places the Backpack
set !SD_TimeOut #sCnt + 5
_SD_BackpackGump:
event Macro 8 7
wait 30
if #CONTNAME <> container_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_BackpackGump
}
if #CONTNAME = container_gump
{
contpos 640 -45
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_BackpackMove:
if #CONTNAME <> container_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_BackPackMove
}
namespace clear
namespace pop
return #true
Kullanımı basit :
1. tüm reglerden fazlaca alıp bi "bag" içinde bankanıza bırakın.
2. vendordan boş spellbook alıp aynı bag içine atın, ins. tool'u da aynı bag içine atın.
3. 64 lük kitap çantanızda olsun.
Kolay Gelsin


Spoiler:
;=============================================================
; Script Name: Mage/Necro books Filler
; Author: Aganor
; Version: 0.4
; Shard: OSI
; Client Tested w/: 5.0.9+
; EUO tested w/: 1.50 Build 109
; Public Release: April 12, 2007
; Purpose: Fills mage/necro books from a chest or with inscription or both.
;=============================================================
; 0.4
; - Modified the code from the MakeItem sub. Not tested yet.
display yesno Which type of spellbook do you want to fill?$YES = MAGE$NO = NECRO$(Easy, no?)
set %WorkType Mage
if #dispres = NO
set %WorkType Necro
display yesno Do you have an ML account?$For weight calculations.
set %MLAccount #false
if #dispres = YES
set %MLAccount #true
set %MageBookType MPF
set %NecroBookType XXM
set %ScribeToolType PBG
set %TinkerToolType JTL
set %BlankScrollType DPF
set %IngotType ENK
set %AdditionalWeight 0
set %CurrentScroll 1
set %CurrentBook N/A
set %BooksDone 0
set #LPC 100
gosub CreateVariableArray %WorkType
set %Tinkering #False
chooseskill tink real
if #skill > 70
{
set %Tinkering #true
}
set %Inscription #false
chooseskill insc real
if #skill > 70
{
set %Inscription #true
}
set %Meditation #false
chooseskill medi real
if #skill > 70
{
set %Meditation #true
}
gosub GetContainers
gosub SetupDesktop
set %MaxWeight #maxweight + %AdditionalWeight - 20 ; security we remove 20
finditem %BookType C_ , #backpackid
if #findkind <> -1
{
for #findindex 1 #findcnt
{
event property #findid
if 64 in #property && %BookType = %MageBookType
ignoreitem #findid 33
if 17 in #property && %BookType = %NecroBookType
ignoreitem #findid 33
}
}
if %Inscription = #TRUE
{
set %TriesLimit %Scroll / 2
}
else
{
set %TriesLimit %Scroll
}
while #true
{
if #LPC < 200
set #LPC 200
gosub LoadRessources
if #result <> #true
{
display ok #result
halt
}
set %Tries 1
repeat
{
set %Tries %Tries + 1
set %OldScroll %CurrentScroll
gosub FillBook
if %OldScroll = %CurrentScroll
{
set %Tries %Tries + 1
}
}
until %Tries > %TriesLimit || %CurrentScroll > %Scroll
; gosub CheckBookFull
wait 5
}
halt
;======================================================
; RESSOURCE CHECK
;======================================================
; no parameters
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub RessourceCheck
namespace push
namespace local SubRCK , #sCnt2 , #random
set !RCK_Result #FALSE
if %Inscription = #TRUE
{
set !RCK_Result #TRUE
for !RCK_Count 1 %reg
{
finditem %reg . !RCK_Count C_ , #backpackid
if #findkind = -1 && #findstack < 5
{
set !RCK_Result #FALSE
}
}
finditem %BlankScrollType C_ , #backpackid
if #findkind = -1 || #findstack < 5
{
set !RCK_Result #FALSE
}
}
else
{
set !RCK_Result #TRUE
}
set %Result !RCK_Result
namespace clear
namespace pop
return %Result
;======================================================
; MANA CHECK
;======================================================
; no parameters
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub ManaCheck
namespace push
namespace local SubMCK , #sCnt2 , #random
set !MCK_Result #FALSE
if %Inscription = #TRUE
{
if %scrollMana . %CurrentScroll <> N/A
{
set !MCK_ManaReq %scrollMana . %CurrentScroll + 10
}
else
{
set !MCK_ManaReq 30
}
if #mana < !MCK_ManaReq
{
set !MCK_Meditate #sCnt2 - 1
while #mana < #maxmana
{
if %Meditation = #TRUE && !MCK_Meditate < #sCnt2
{
set !MCK_Journal #jindex
event macro 13 46
set !MCK_TimeOut #sCnt2 + 50
while !MCK_TimeOut > #sCnt2
{
for !MCK_Line !MCK_Journal #jindex
{
scanjournal !MCK_Line
if !MCK_Line > !MCK_Journal
{
if Cannot_focus in #journal
{
set !MCK_TimeOut #sCnt2
set !MCK_Meditate #sCnt2 + 110
}
if meditative_trance in #journal
{
set !MCK_TimeOut #sCnt2
set !MCK_Meditate #sCnt2 + 3000
}
}
}
}
}
wait 10
}
}
}
set %Result !MCK_Result
namespace clear
namespace pop
return %Result
;======================================================
; FILL BOOK
;======================================================
; no parameters
;======================================================
; return nothin
;======================================================
; updates tons of vars
;======================================================
; requires no globals
;======================================================
sub FillBook
namespace push
namespace local SubFBK , #sCnt2 , #random
set !FBK_Result #FALSE
if %CurrentScroll > %Scroll
{
set %CurrentScroll 1
}
setUOTitle Books Done : , #spc , %BooksDone , #spc , | Current Scroll : , #spc , %ScrollName . %CurrentScroll , #spc , ( , %CurrentScroll , / , %Scroll , )
if %CurrentBook <> N/A
{
finditem %CurrentBook C_ , #backpackid
if #findkind = -1
{
set %CurrentBook N/A
}
else
{
event property #findid
if %scroll in #property
{
set %CurrentBook N/A
}
}
}
if %CurrentBook = N/A
{
finditem %BookType C_ , #backpackid
if #findkind <> -1
{
for #findindex 1 #findcnt
{
event property #findid
if %scroll notin #property && %CurrentBook = N/A
{
set %CurrentBook #findid
set %CurrentScroll 1
}
}
}
}
if %CurrentBook <> N/A
{
set !FBK_Done #false
while !FBK_Done = #FALSE
{
gosub ManaCheck
set !FBK_ScrollID #false
if %ScrollContainer <> N/A && %notinContainer . %CurrentScroll = N/A
{
finditem %scroll . %CurrentScroll C_ , %ScrollContainer
if #findkind = -1
{
set %notinContainer . %CurrentScroll #true
}
else
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID = #FALSE
{
finditem %scroll . %CurrentScroll C_ , #backpackid
if #findkind <> -1
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID = #FALSE && %Inscription <> #FALSE
{
finditem %ScribeToolType C_ , #backpackid
if #findkind <> -1
{
set !FBK_ToolID #findid
if %MultiPage = NO
{
set !FBK_ScrollPage %CurrentScroll - 1 ; We need scrolls from 0 to 63
set !FBK_Page ( !FBK_ScrollPage / %SpellPerPage ) ; Goes from 0 to 7
set !FBK_Section %StartMenu + !FBK_Page
set !FBK_Page 1
set !FBK_Item ( !FBK_ScrollPage % %SpellPerPage ) + 1 ; The scroll button from 1 to 8
set !FBK_ScrollType %scroll . %CurrentScroll
}
else
{
set !FBK_ScrollPage %CurrentScroll - 1 ; We need scrolls from 0 to 63
set !FBK_Section %StartMenu
set !FBK_Page ( !FBK_ScrollPage / 10 ) + 1
set !FBK_Item ( !FBK_ScrollPage % %SpellPerPage ) + 1 ; The scroll button from 1 to 8
set !FBK_ScrollType %scroll . %CurrentScroll
}
gosub MakeItem #findid N/A !FBK_Section !FBK_Page !FBK_Item !FBK_ScrollType
}
else
{
set !FBK_Done #true
}
}
if !FBK_ScrollID = #FALSE && %Inscription <> #FALSE
{
finditem %scroll . %CurrentScroll C_ , #backpackid
if #findkind <> -1
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID <> #FALSE
{
exevent drag #findid 1
wait 5
exevent dropc %CurrentBook
wait 25
set !FBK_Done #true
}
if !FBK_ScrollID <> #FALSE || %Inscription = #FALSE
{
set %CurrentScroll %CurrentScroll + 1
}
if %CurrentScroll > %Scroll
{
set !FBK_Done #true
}
} ; End of While Done
}
set %Result !FBK_Result
namespace clear
namespace pop
return %Result
;======================================================
; LOAD RESSOURCES
;======================================================
; no parameters
;======================================================
; return a message or true
;======================================================
; updates no globels
;======================================================
; requires %Regs array, tool types, scrolls types
;======================================================
sub LoadRessources
namespace push
namespace local SubLRS , #sCnt2 , #random
set !LRS_Result #TRUE
set !LRS_OldLPC #LPC
set #LPC 300
set !LRS_LoadPen #false
if %Inscription = #TRUE
{
finditem %ScribeToolType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadPen #true
}
else
{
if #findcnt < 2
{
set !LRS_Uses 0
set !LRS_Tools #findcnt
for #findindex 1 #findcnt
{
set !LRS_Tools . #findindex #findid
}
for !LRS_Count 1 !LRS_Tools
{
gosub ToolUses !LRS_Tools . !LRS_Count
set !LRS_Uses !LRS_Uses + #result
}
if !LRS_Uses < 100
{
set !LRS_LoadPen 1
}
}
}
}
set !LRS_LoadScrolls #false
if %Inscription = #TRUE
{
finditem %BlankScrollType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadScrolls #TRUE
}
else
{
if #findstack < 30
{
set !LRS_Count 0
for #findindex 1 #findcnt
{
set !LRS_Count !LRS_Count + #findstack
}
if !LRS_Count < 100
{
set !LRS_LoadScrolls !LRS_Count
}
}
}
}
set !LRS_LoadRegs #false
if %Inscription = #TRUE
{
finditem %regstype C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadRegs #true
set !LRS_RegList 0
set !LRS_Count 0
while !LRS_Count < %reg
{
set !LRS_Count !LRS_Count + 1
set !LRS_RegList !LRS_RegList + 1
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
}
else
{
set !LRS_RegsCount 0
set !LRS_RegsFound
for #findindex 1 #findcnt
{
if #findtype notin !LRS_RegsFound
{
set !LRS_RegsFound !LRS_RegsFound , _
if #findstack > 30
{
set !LRS_RegsCount !LRS_RegsCount + 1
}
}
}
if !LRS_RegsCount < %reg
{
set !LRS_RegList 0
set !LRS_Count 0
while !LRS_Count < %reg
{
set !LRS_Count !LRS_Count + 1
finditem %Reg . !LRS_Count C_ , #backpackid
if #findkind = -1
{
set !LRS_RegList !LRS_RegList + 1
set !LRS_LoadRegs #true
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
else
{
if #findstack < 30
{
set !LRS_RegList !LRS_RegList + 1
set !LRS_LoadRegs #true
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
}
}
}
}
}
if !LRS_LoadPen <> #FALSE
{
finditem %ScribeToolType C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoPenLeft
}
else
{
exevent drag #findid #findstack
wait 5
exevent dropc #backpackid
wait 25
}
}
if !LRS_LoadScrolls <> #FALSE
{
finditem %BlankScrollType C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoScrollLeft
}
else
{
set !LRS_Amount 120 - !LRS_LoadScrolls
set !LRS_CurrentWeight %MaxWeight - #WEIGHT
if !LRS_Amount > !LRS_CurrentWeight
set !LRS_Amount !LRS_CurrentWeight ; scrolls weighting 1 stone :-)
if !LRS_Amount > #findstack
set !LRS_Amount #findstack
exevent drag #findid !LRS_Amount
wait 5
exevent dropc #backpackid
wait 25
}
}
if !LRS_LoadRegs <> #FALSE
{
for !LRS_Count 1 !LRS_RegList
{
finditem !LRS_RegList . !LRS_Count C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoRegsLeft
}
else
{
set !LRS_Amount 100
if !LRS_Amount > #findstack
set !LRS_Amount #findstack
exevent drag #findid !LRS_Amount
wait 5
exevent dropc #backpackid
wait 25
}
}
}
set !LRS_LoadEmptyBook #false
finditem %BookType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadEmptyBook #true
}
else
{
set !LRS_LoadEmptyBook #TRUE
set !LRS_LoadFoundBook #FALSE
for #findindex 1 #findcnt
{
event property #findid
if %scroll in #property
{
set !LRS_LoadEmptyBook #findid
}
else
{
if %Inscription = #TRUE
{
set !LRS_LoadFoundBook #true
}
else
{
if %CurrentScroll >= %Scroll
{
set !LRS_LoadEmptyBook #findid
}
}
}
}
if !LRS_LoadFoundBook = #true
{
set !LRS_LoadEmptyBook #false
}
}
if !LRS_LoadEmptyBook <> #FALSE
{
if !LRS_LoadEmptyBook <> #TRUE
{
finditem !LRS_LoadEmptyBook C_ , #backpackid
if #findkind <> -1
{
exevent drag #findid #findstack
wait 5
exevent dropc %RessourceContainer 300 300
wait 25
set %BooksDone %BooksDone + 1
ignoreitem #findid 4
}
}
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
set !LRS_Found #false
set !LRS_Count 0
while !LRS_Count < #findcnt
{
set !LRS_Count !LRS_Count + 1
set #findindex !LRS_Count
event property #findid
if %Scroll notin #property
{
exevent drag #findid #findstack
wait 5
exevent dropc #backpackid
wait 25
set !LRS_Found #TRUE
set !LRS_Count #findcnt + 1
}
else
{
ignoreitem #findid 44
}
}
if !LRS_Found = #FALSE
{
set !LRS_Result NoBooksLeft
}
}
else
{
set !LRS_Result NoBooksLeft
}
}
set #LPC !LRS_OldLPC
set %Result !LRS_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET CONTAINERS
;======================================================
; no parameters
;======================================================
; return nothin
;======================================================
; updates %RessourceContainer %ScrollContainer
;======================================================
; requires no globals
;======================================================
sub GetContainers
namespace push
namespace local SubGCT , #sCnt2 , #random
set !GCT_Result #FALSE
set !GCT_Done #FALSE
set %RessourceContainer N/A
repeat
{
set %RessourceContainer N/A
repeat
{
display ok Please target your ressource container.$It must contain the following items :$- Blank Scrolls$- Reagents$- Books to fill$- Scribe pens
gosub GetObjectID
if #result <> #FALSE
{
set %RessourceContainer #result
}
}
until %RessourceContainer <> N/A
set #NEXTCPOSX 0
set #NEXTCPOSY 0
set #LOBJECTID %RessourceContainer
while #CONTID <> %RessourceContainer
{
event macro 17 0
wait 20
}
if %Inscription = #true
{
finditem %ScribeToolType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %BlankScrollType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %RegsType C_ , %RessourceContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No regs in this container.
}
}
else
{
display ok No blank scrolls in this container.
}
}
else
{
display ok No empty books in this container.
}
}
else
{
display ok No scribe tools in this container.
}
}
else
{
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No empty books in this container.
}
}
}
until !GCT_Done = #true
set !GCT_Done #FALSE
set %ScrollContainer N/A
repeat
{
set %ScrollContainer N/A
repeat
{
if %Inscription = #TRUE
{
display yesno If you want to use a scroll container, click YES and target.$If you don't want to use a scroll container, just press No
}
else
{
display ok You need to use a scroll container.$Please target it!
}
if #dispres = Yes || %Inscription <> #TRUE
{
gosub GetObjectID
if #result <> #FALSE
{
set %ScrollContainer #result
}
}
else
{
set !GCT_Done #true
}
}
until %ScrollContainer <> N/A || !GCT_Done = #true
if !GCT_Done <> #true
{
set #NEXTCPOSX 0
set #NEXTCPOSY 300
set #LOBJECTID %ScrollContainer
while #CONTID <> %ScrollContainer
{
event macro 17 0
wait 20
}
finditem %ScrollsType C_ , %ScrollContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No scrolls in this container.
}
}
}
until !GCT_Done = #true
set %Result !GCT_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET PACK INFO
;======================================================
; %1 Weight or Items or MaxItems or MaxWeight
; %2 ID of the Item
;======================================================
; return weight or items or max items or max weight
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub GetPackInfo
namespace push
namespace local SubGPI , #sCnt2 , #random
set !GPI_Result #FALSE
if %0 < 2
goto _GPI_End
set !GPI_Type %1
set !GPI_ID %2
finditem !GPI_ID
if #findkind <> -1
{
event property !GPI_ID
set !GPI_String #property
if !GPI_Type = Weight
{
str pos !GPI_string weight
if #strres > 0
{
set !GPI_Pos #strres + 7
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String Stones
if #strres > 0
{
set !GPI_Pos #strres - 2
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
goto _GPI_End
}
str pos !GPI_string items
if #strres > 0
{
set !GPI_Pos #strres + 6
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
goto _GPI_End
}
}
if !GPI_Type = Items
{
str pos !GPI_string contents
if #strres > 0
{
set !GPI_Pos #strres + 9
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
goto _GPI_End
}
if !GPI_Type = MaxItems
{
str pos !GPI_string contents
if #strres > 0
{
set !GPI_Pos #strres + 9
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres
str len !GPI_String
set !GPI_MaxPos #strres
set !GPI_MaxPos !GPI_MaxPos - !GPI_Pos
str right !GPI_String !GPI_MaxPos
set !GPI_String #strres
str pos !GPI_String #spc
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
}
goto _GPI_End
}
if !GPI_Type = MaxWeight
{
str pos !GPI_string items
if #strres > 0
{
set !GPI_Pos #strres + 6
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0 && #strres < 5
{
set !GPI_Pos #strres
str len !GPI_String
set !GPI_MaxPos #strres
set !GPI_MaxPos !GPI_MaxPos - !GPI_Pos
str right !GPI_String !GPI_MaxPos
set !GPI_String #strres
str pos !GPI_String #spc
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
}
goto _GPI_End
}
}
_GPI_End:
set %Result !GPI_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET OBJECT ID
;======================================================
; (%1) Expected object type
;======================================================
; return Object ID or #false if fails.
;======================================================
; updates no globels
;======================================================
; requires no globals
;======================================================
sub GetObjectID
namespace push
namespace local SubGOI , #sCnt2 , #random
set !GOI_Result #FALSE
set !GOI_Type #false
if %0 > 0
set !GOI_Type %1
set #TARGCURS 1
while #TARGCURS = 1
{
wait 1
}
finditem #LTARGETID
if #findkind <> -1
{
if !GOI_Type <> #FALSE
{
if !GOI_Type = #findtype
set !GOI_Result #findid
}
else
{
set !GOI_Result #findid
}
}
set %Result !GOI_Result
namespace clear
namespace pop
return %Result
;======================================================
; TOOL USES
;======================================================
; %1 Tool ID
;======================================================
; return number of uses
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub ToolUses
namespace push
namespace local SubTU , #sCnt2 , #random
set !TU_Result 0
set !TU_Tool %1
finditem !TU_Tool C_ , #backpackid
if #findkind = -1
goto _TU_End
set !TU_ToolFound #findid
event property !TU_ToolFound
set !TU_String #property
str pos !TU_string remaining
if #strres > 0
{
set !TU_Pos #strres + 10
str del !TU_String 1 !TU_Pos
set !TU_String #strres
str pos !TU_String $
if #strres > 0
{
set !TU_Pos #strres - 1
str left !TU_String !TU_Pos
set !TU_String #strres
set !TU_Result !TU_String
goto _TU_End
}
}
_TU_End:
set %Result !TU_Result
namespace clear
namespace pop
return %Result
;======================================================
; CREATE VARIABLE ARRAY
;======================================================
; (%1) Type : Necro or Mage (Default)
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub CreateVariableArray
namespace push
namespace local SubCSA , #sCnt2 , #random
set !CSA_Type Mage
if %0 > 0
{
set !CSA_Type %1
}
if !CSA_Type = Mage
{
set %BookType %MageBookType
set %MultiPage NO
set %StartMenu 1
set %SpellPerPage 8
set %reg 8
set %reg1 kuf ;Black Pearl
set %reg2 juf ;Blood Moss
set %reg3 mzf ;Mandrake Root
set %reg4 wzf ;Nightshade
set %reg5 rzf ;Spiders' Silk
set %reg6 kzf ;Garlic
set %reg7 jzf ;Ginseng
set %reg8 szf ;Sulfurous Ash
set %regstype
for !CSA_cntx 1 %reg
{
set %regstype %regstype , _ , %reg . !CSA_cntx
}
set %scroll 64
;*******************************************
; Scroll Item Types
; From Ma$$acre Spellbook Filler!
;*******************************************
; 1st Circle Spells
set %scroll1 NXL
set %scrollName1 Reactive , #spc , Armor
set %scrollMana1 4
set %scroll2 QXL
set %scrollName2 Clumsy
set %scrollMana2 4
set %scroll3 PXL
set %scrollName3 Create , #spc , Food
set %scrollMana3 4
set %scroll4 AYL
set %scrollName4 Feeblemind
set %scrollMana4 4
set %scroll5 ZXL
set %scrollName5 Heal
set %scrollMana5 4
set %scroll6 CYL
set %scrollName6 Magic , #spc , Arrow
set %scrollMana6 4
set %scroll7 BYL
set %scrollName7 Night , #spc , Sight
set %scrollMana7 4
set %scroll8 WXL
set %scrollName8 Weaken
set %scrollMana8 4
; 2nd Circle Spells
set %scroll9 VXL
set %scrollName9 Agility
set %scrollMana9 6
set %scroll10 YXL
set %scrollName10 Cunning
set %scrollMana10 6
set %scroll11 XXL
set %scrollName11 Cure
set %scrollMana11 6
set %scroll12 IYL
set %scrollName12 Harm
set %scrollMana12 6
set %scroll13 HYL
set %scrollName13 Magic , #spc , Trap
set %scrollMana13 6
set %scroll14 KYL
set %scrollName14 Magic , #spc , Untrap
set %scrollMana14 6
set %scroll15 JYL
set %scrollName15 Protection
set %scrollMana15 6
set %scroll16 EYL
set %scrollName16 Strength
set %scrollMana16 6
; 3rd Circle Spells
set %scroll17 DYL
set %scrollName17 Bless
set %scrollMana17 9
set %scroll18 GYL
set %scrollName18 Fireball
set %scrollMana18 9
set %scroll19 FYL
set %scrollName19 Magic , #spc , Lock
set %scrollMana19 9
set %scroll20 STL
set %scrollName20 Poison
set %scrollMana20 9
set %scroll21 RTL
set %scrollName21 Telekinesis
set %scrollMana21 9
set %scroll22 UTL
set %scrollName22 Teleport
set %scrollMana22 9
set %scroll23 TTL
set %scrollName23 Unlock
set %scrollMana23 9
set %scroll24 OTL
set %scrollName24 Wall , #spc , of , #spc , Stone
set %scrollMana24 9
; 4th Circle Spells
set %scroll25 NTL
set %scrollName25 Arch , #spc , Cure
set %scrollMana25 11
set %scroll26 QTL
set %scrollName26 Arch , #spc , Protection
set %scrollMana26 11
set %scroll27 PTL
set %scrollName27 Curse
set %scrollMana27 11
set %scroll28 AUL
set %scrollName28 Fire , #spc , Field
set %scrollMana28 11
set %scroll29 ZTL
set %scrollName29 Greater , #spc , Heal
set %scrollMana29 11
set %scroll30 CUL
set %scrollName30 Lightning
set %scrollMana30 11
set %scroll31 BUL
set %scrollName31 Mana , #spc , Drain
set %scrollMana31 11
set %scroll32 WTL
set %scrollName32 Recall
set %scrollMana32 11
; 5th Circle Spells
set %scroll33 VTL
set %scrollName33 Blade , #spc , Spirits
set %scrollMana33 14
set %scroll34 YTL
set %scrollName34 Dispel , #spc , Field
set %scrollMana34 14
set %scroll35 XTL
set %scrollName35 Incognito
set %scrollMana35 14
set %scroll36 IUL
set %scrollName36 Magic , #spc , Reflection
set %scrollMana36 14
set %scroll37 HUL
set %scrollName37 Mind , #spc , Blast
set %scrollMana37 14
set %scroll38 KUL
set %scrollName38 Paralyze
set %scrollMana38 14
set %scroll39 JUL
set %scrollName39 Poison , #spc , Field
set %scrollMana39 14
set %scroll40 EUL
set %scrollName40 Summon , #spc , Creature
set %scrollMana40 14
; 6th Circle Spells
set %scroll41 DUL
set %scrollName41 Dispel
set %scrollMana41 20
set %scroll42 GUL
set %scrollName42 Energy , #spc , Bolt
set %scrollMana42 20
set %scroll43 FUL
set %scrollName43 Explosion
set %scrollMana43 20
set %scroll44 QUL
set %scrollName44 Invisibility
set %scrollMana44 20
set %scroll45 PUL
set %scrollName45 Mark
set %scrollMana45 20
set %scroll46 SUL
set %scrollName46 Mass , #spc , Curse
set %scrollMana46 20
set %scroll47 RUL
set %scrollName47 Paralyze , #spc , Field
set %scrollMana47 20
set %scroll48 MUL
set %scrollName48 Reveal
set %scrollMana48 20
; 7th Circle Spells
set %scroll49 LUL
set %scrollName49 Chain , #spc , Lightning
set %scrollMana49 40
set %scroll50 OUL
set %scrollName50 Energy , #spc , Field
set %scrollMana50 40
set %scroll51 NUL
set %scrollName51 Flamestrike
set %scrollMana51 40
set %scroll52 YUL
set %scrollName52 Gate , #spc , Travel
set %scrollMana52 40
set %scroll53 XUL
set %scrollName53 Mana , #spc , Vampire
set %scrollMana53 40
set %scroll54 AVL
set %scrollName54 Mass , #spc , Dispell
set %scrollMana54 40
set %scroll55 ZUL
set %scrollName55 Meteor , #spc , Swarm
set %scrollMana55 40
set %scroll56 UUL
set %scrollName56 Polymorph
set %scrollMana56 40
; 8th Circle Spells
set %scroll57 TUL
set %scrollName57 Earthquake
set %scrollMana57 50
set %scroll58 WUL
set %scrollName58 Energy , #spc , Vortex
set %scrollMana58 50
set %scroll59 VUL
set %scrollName59 Resurrection
set %scrollMana59 50
set %scroll60 GVL
set %scrollName60 Summon , #spc , Air , #spc , Elemental
set %scrollMana60 50
set %scroll61 FVL
set %scrollName61 Summon , #spc , Daemon
set %scrollMana61 50
set %scroll62 IVL
set %scrollName62 Summon , #spc , Earth , #spc , Elemental
set %scrollMana62 50
set %scroll63 HVL
set %scrollName63 Summon , #spc , Fire , #spc , Elemental
set %scrollMana63 50
set %scroll64 CVL
set %scrollName64 Summon , #spc , Water , #spc , Elemental
set %scrollMana64 50
set %scrollstype
for !CSA_cntx 1 %scroll
{
set %scrollstype %scrollstype , _ , %scroll . !CSA_cntx
}
} ; End If CSA
if !CSA_Type = necro
{
set %BookType %NecroBookType
set %MultiPage YES
set %StartMenu 9
set %SpellPerPage 10
set %reg 5
set %reg1 UZF ;Nox Crystal
set %reg2 DUF ;Daemon Blood
set %reg3 TZF ;Grave Dust
set %reg4 IUF ;Batwing
set %reg5 YZF ;Pig Iron
set %regstype
for !CSA_cntx 1 %reg
{
set %regstype %regstype , _ , %reg . !CSA_cntx
}
set %Scroll 17
set %scroll1 MYM
set %scrollName1 Animate , #spc , Dead
set %scrollMana1 23
set %scroll2 LYM
set %scrollName2 Blood , #spc , Oath
set %scrollMana2 13
set %scroll3 OYM
set %scrollName3 Corpse , #spc , Skin
set %scrollMana3 11
set %scroll4 NYM
set %scrollName4 Curse , #spc , Weapon
set %scrollMana4 7
set %scroll5 IYM
set %scrollName5 Evil , #spc , Omen
set %scrollMana5 11
set %scroll6 HYM
set %scrollName6 Horrific , #spc , Beast
set %scrollMana6 17
set %scroll7 KYM
set %scrollName7 Lich , #spc , Form
set %scrollMana7 23
set %scroll8 JYM
set %scrollName8 Mind , #spc , Rot
set %scrollMana8 17
set %scroll9 UYM
set %scrollName9 Pain , #spc , Spike
set %scrollMana9 5
set %scroll10 TYM
set %scrollName10 Poisin , #spc , Strike
set %scrollMana10 17
set %scroll11 WYM
set %scrollName11 Strangle
set %scrollMana11 29
set %scroll12 VYM
set %scrollName12 Summon , #spc , Familiar
set %scrollMana12 17
set %scroll13 QYM
set %scrollName13 Vampiric , #spc , Embrace
set %scrollMana13 23
set %scroll14 PYM
set %scrollName14 Vengeful , #spc , Spirit
set %scrollMana14 41
set %scroll15 SYM
set %scrollName15 Wither
set %scrollMana15 23
set %scroll16 RYM
set %scrollName16 Wraith , #spc , Form
set %scrollMana16 17
set %scroll17 CZM
set %scrollName17 Exorcism
set %scrollMana17 40
set %scrollstype
for !CSA_cntx 1 %scroll
{
set %scrollstype %scrollstype , _ , %scroll . !CSA_cntx
}
}
namespace clear
namespace pop
return
;======================================================
; MAKE ITEM
;======================================================
; %1 Tool ID
; %2 Ressource Type
; %3 Section
; %4 Page
; %5 Item
; (%6) Expected Item Type
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub MakeItem
namespace push
namespace local SubMI , #sCnt2 , #random
set !MI_Result #FALSE
set !MI_Tool %1
set !MI_Ressource %2
set !MI_Category %3
set !MI_Page %4
set !MI_Item %5
set !MI_ExpectedType %6
set !MI_Tries 0
set !MI_FunctionTimeOut #sCnt2 + 150
if !MI_ExpectedType <> N/A
{
set !MI_FouncItems 0
finditem !MI_ExpectedType C_ , #backpackid
if #findkind <> -1
set !MI_FouncItems #findcnt
}
_MI_OpenGump:
set !MI_Tries !MI_Tries + 1
set #LOBJECTID !MI_Tool
event macro 17 0
set !MI_Timeout #sCnt + 4
_MI_WaitGump:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitGump
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Tries < 3
goto _MI_OpenGump
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
if !MI_Ressource > 0 && !MI_Ressource <> N/A
{
; From here we are sure the gump is open or we already quitted :-)
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + 370
click !MI_ClickX !MI_ClickY
wait 10
set !MI_Timeout #sCnt + 4
_MI_WaitRessource:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitRessource
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
set !MI_PosY !MI_Ressource * 20
set !MI_PosY !MI_PosY + 50
set !MI_ClickX #contposX + 235
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
wait 10
set !MI_Timeout #sCnt + 4
_MI_WaitMenu:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitMenu
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
}
set !MI_PosY !MI_Category * 20
set !MI_PosY !MI_PosY + 70
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
wait 10
_MI_NextPage:
set !MI_Timeout #sCnt + 4
_MI_WaitList:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitList
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
if !MI_Page > 1
{
set !MI_Page !MI_Page - 1
if !MI_Page > 0
{
set !MI_ClickX #contposX + 385
set !MI_ClickY #contposY + 270
click !MI_ClickX !MI_ClickY
wait 10
goto _MI_NextPage
}
}
set !MI_PosY !MI_Item * 20
set !MI_PosY !MI_PosY + 50
set !MI_ClickX #contposX + 235
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
set !MI_Timeout #sCnt + 4
set !MI_Worn #false
set !MI_Scan #jindex
_MI_WaitItem:
wait 5
for !MI_Line !MI_Scan #jindex
{
scanjournal !MI_Line
if you_worn_out in #journal
{
set !MI_Worn #true
goto _MI_Done
}
}
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitItem
if #contname <> generic_gump && #contsize <> 530_437
{
set !MI_Worn #true
goto _MI_Done
}
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + 30
set !MI_Timeout #sCnt + 2
_MI_WaitGumpClose:
wait 5
if ( #contname <> generic_gump || #contsize <> 530_437 ) && !MI_Timeout > #sCnt
goto _MI_WaitGumpClose
set !MI_Timeout #sCnt + 2
_MI_Close:
click !MI_ClickX !MI_ClickY r
wait 5
if #contname = generic_gump && #contsize = 530_437 && !MI_Timeout > #sCnt
goto _MI_Close
_MI_Done:
if !MI_ExpectedType <> N/A
{
finditem !MI_ExpectedType C_ , #backpackid
if #findkind <> -1
{
if !MI_FouncItems < #findcnt
{
set !MI_Result #true
}
else
{
if !MI_FunctionTimeOut > #sCnt2 && !MI_Worn = #false
goto _MI_OpenGump
}
}
}
else
{
set !MI_Result #true
}
_MI_End:
set %Result !MI_Result
namespace clear
namespace pop
return %Result
;======================================================
; SETUP DESKTOP
;======================================================
; no parameters
;======================================================
; return True in case of success
;======================================================
; updates no globals
;======================================================
; requires %PlayerRace %AdditionalWeight %MLAccount
;======================================================
sub SetupDesktop
namespace push
namespace local SubSD , #sCnt2 , #random
;Detect and closes Veteran rewards
set !SD_TimeOut #sCnt + 5
_SD_VetGump:
click 60 60
wait 30
if #CONTNAME = generic_gump && #CONTSIZE = 510_145 && !SD_TimeOut > #sCnt
{
set !SD_ClickX #contposx + 300
set !SD_ClickY #contposy + 105
click !SD_ClickX !SD_ClickY
wait 30
goto _SD_VetGump
}
;opens and places the paperdoll
set !SD_TimeOut #sCnt + 5
_SD_PaperDollGump:
event Macro 8 1
wait 30
if #CONTNAME <> paperdoll_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_PaperDollGump
}
if #CONTNAME = paperdoll_gump
{
contpos 640 110
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_PaperDollMove:
if #CONTNAME <> paperdoll_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_PaperDollMove
}
;opens and places the Status bar
set !SD_TimeOut #sCnt + 5
_SD_StatusGump:
event Macro 8 2
wait 30
if #CONTNAME <> status_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_StatusGump
}
if #CONTNAME = status_gump
{
if #CONTTYPE notin XU_AV
{
set %PlayerRace Human
if %MLAccount = #true
{
set %AdditionalWeight 60
}
}
if #CONTTYPE in XU_AV
{
set %PlayerRace Elf
set %AdditionalWeight 0
}
contpos 610 370
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_StatusMove:
if #CONTNAME <> status_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_StatusMove
}
;opens and places the journal
set !SD_TimeOut #sCnt + 5
_SD_JournalGump:
event Macro 8 3
wait 30
if #CONTNAME <> text_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_JournalGump
}
if #CONTNAME = text_gump
{
contpos 0 460
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_JournalMove:
if #CONTNAME <> text_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 0
{
wait 10
goto _SD_JournalMove
}
;opens and places the Backpack
set !SD_TimeOut #sCnt + 5
_SD_BackpackGump:
event Macro 8 7
wait 30
if #CONTNAME <> container_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_BackpackGump
}
if #CONTNAME = container_gump
{
contpos 640 -45
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_BackpackMove:
if #CONTNAME <> container_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_BackPackMove
}
namespace clear
namespace pop
return #true





gruptria yazmış:
soldier06 yazmış:
ya biri yardım edebilirmi? güzel başlıyor bless scrolluna gelince hep bless üretmeye başlıyor. Bir sıkıntı var ama halledemedim :(
Scriptte değişiklik yaptın mı? İstersen Orjinal halini atabilirim sana
değişiklik yapmadım. Blesse gelince sürekli bless basıyor. Sürümden mi kaynaklanıyor anlamadım :(. Bi de seninkini atarsan onu da deniyebilirim:(

Bende sıkıntı yok çalışıyor bu script.
;=============================================================
; Script Name: Mage/Necro books Filler
; Author: Aganor
; Version: 0.4
; Shard: OSI
; Client Tested w/: 5.0.9+
; EUO tested w/: 1.50 Build 109
; Public Release: April 12, 2007
; Purpose: Fills mage/necro books from a chest or with inscription or both.
;=============================================================
; 0.4
; - Modified the code from the MakeItem sub. Not tested yet.
display yesno Which type of spellbook do you want to fill?$YES = MAGE$NO = NECRO$(Easy, no?)
set %WorkType Mage
if #dispres = NO
set %WorkType Necro
display yesno Do you have an ML account?$For weight calculations.
set %MLAccount #false
if #dispres = YES
set %MLAccount #true
set %MageBookType MPF
set %NecroBookType XXM
set %ScribeToolType PBG
set %TinkerToolType JTL
set %BlankScrollType DPF
set %IngotType ENK
set %AdditionalWeight 0
set %CurrentScroll 1
set %CurrentBook N/A
set %BooksDone 0
set #LPC 100
gosub CreateVariableArray %WorkType
set %Tinkering #False
chooseskill tink real
if #skill > 70
{
set %Tinkering #true
}
set %Inscription #false
chooseskill insc real
if #skill > 70
{
set %Inscription #true
}
set %Meditation #false
chooseskill medi real
if #skill > 70
{
set %Meditation #true
}
gosub GetContainers
gosub SetupDesktop
set %MaxWeight #maxweight + %AdditionalWeight - 20 ; security we remove 20
finditem %BookType C_ , #backpackid
if #findkind <> -1
{
for #findindex 1 #findcnt
{
event property #findid
if 64 in #property && %BookType = %MageBookType
ignoreitem #findid 33
if 17 in #property && %BookType = %NecroBookType
ignoreitem #findid 33
}
}
if %Inscription = #TRUE
{
set %TriesLimit %Scroll / 2
}
else
{
set %TriesLimit %Scroll
}
while #true
{
if #LPC < 200
set #LPC 200
gosub LoadRessources
if #result <> #true
{
display ok #result
halt
}
set %Tries 1
repeat
{
set %Tries %Tries + 1
set %OldScroll %CurrentScroll
gosub FillBook
if %OldScroll = %CurrentScroll
{
set %Tries %Tries + 1
}
}
until %Tries > %TriesLimit || %CurrentScroll > %Scroll
; gosub CheckBookFull
wait 5
}
halt
;======================================================
; RESSOURCE CHECK
;======================================================
; no parameters
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub RessourceCheck
namespace push
namespace local SubRCK , #sCnt2 , #random
set !RCK_Result #FALSE
if %Inscription = #TRUE
{
set !RCK_Result #TRUE
for !RCK_Count 1 %reg
{
finditem %reg . !RCK_Count C_ , #backpackid
if #findkind = -1 && #findstack < 5
{
set !RCK_Result #FALSE
}
}
finditem %BlankScrollType C_ , #backpackid
if #findkind = -1 || #findstack < 5
{
set !RCK_Result #FALSE
}
}
else
{
set !RCK_Result #TRUE
}
set %Result !RCK_Result
namespace clear
namespace pop
return %Result
;======================================================
; MANA CHECK
;======================================================
; no parameters
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub ManaCheck
namespace push
namespace local SubMCK , #sCnt2 , #random
set !MCK_Result #FALSE
if %Inscription = #TRUE
{
if %scrollMana . %CurrentScroll <> N/A
{
set !MCK_ManaReq %scrollMana . %CurrentScroll + 10
}
else
{
set !MCK_ManaReq 30
}
if #mana < !MCK_ManaReq
{
set !MCK_Meditate #sCnt2 - 1
while #mana < #maxmana
{
if %Meditation = #TRUE && !MCK_Meditate < #sCnt2
{
set !MCK_Journal #jindex
event macro 13 46
set !MCK_TimeOut #sCnt2 + 50
while !MCK_TimeOut > #sCnt2
{
for !MCK_Line !MCK_Journal #jindex
{
scanjournal !MCK_Line
if !MCK_Line > !MCK_Journal
{
if Cannot_focus in #journal
{
set !MCK_TimeOut #sCnt2
set !MCK_Meditate #sCnt2 + 110
}
if meditative_trance in #journal
{
set !MCK_TimeOut #sCnt2
set !MCK_Meditate #sCnt2 + 3000
}
}
}
}
}
wait 10
}
}
}
set %Result !MCK_Result
namespace clear
namespace pop
return %Result
;======================================================
; FILL BOOK
;======================================================
; no parameters
;======================================================
; return nothin
;======================================================
; updates tons of vars
;======================================================
; requires no globals
;======================================================
sub FillBook
namespace push
namespace local SubFBK , #sCnt2 , #random
set !FBK_Result #FALSE
if %CurrentScroll > %Scroll
{
set %CurrentScroll 1
}
setUOTitle Books Done : , #spc , %BooksDone , #spc , | Current Scroll : , #spc , %ScrollName . %CurrentScroll , #spc , ( , %CurrentScroll , / , %Scroll , )
if %CurrentBook <> N/A
{
finditem %CurrentBook C_ , #backpackid
if #findkind = -1
{
set %CurrentBook N/A
}
else
{
event property #findid
if %scroll in #property
{
set %CurrentBook N/A
}
}
}
if %CurrentBook = N/A
{
finditem %BookType C_ , #backpackid
if #findkind <> -1
{
for #findindex 1 #findcnt
{
event property #findid
if %scroll notin #property && %CurrentBook = N/A
{
set %CurrentBook #findid
set %CurrentScroll 1
}
}
}
}
if %CurrentBook <> N/A
{
set !FBK_Done #false
while !FBK_Done = #FALSE
{
gosub ManaCheck
set !FBK_ScrollID #false
if %ScrollContainer <> N/A && %notinContainer . %CurrentScroll = N/A
{
finditem %scroll . %CurrentScroll C_ , %ScrollContainer
if #findkind = -1
{
set %notinContainer . %CurrentScroll #true
}
else
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID = #FALSE
{
finditem %scroll . %CurrentScroll C_ , #backpackid
if #findkind <> -1
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID = #FALSE && %Inscription <> #FALSE
{
finditem %ScribeToolType C_ , #backpackid
if #findkind <> -1
{
set !FBK_ToolID #findid
if %MultiPage = NO
{
set !FBK_ScrollPage %CurrentScroll - 1 ; We need scrolls from 0 to 63
set !FBK_Page ( !FBK_ScrollPage / %SpellPerPage ) ; Goes from 0 to 7
set !FBK_Section %StartMenu + !FBK_Page
set !FBK_Page 1
set !FBK_Item ( !FBK_ScrollPage % %SpellPerPage ) + 1 ; The scroll button from 1 to 8
set !FBK_ScrollType %scroll . %CurrentScroll
}
else
{
set !FBK_ScrollPage %CurrentScroll - 1 ; We need scrolls from 0 to 63
set !FBK_Section %StartMenu
set !FBK_Page ( !FBK_ScrollPage / 10 ) + 1
set !FBK_Item ( !FBK_ScrollPage % %SpellPerPage ) + 1 ; The scroll button from 1 to 8
set !FBK_ScrollType %scroll . %CurrentScroll
}
gosub MakeItem #findid N/A !FBK_Section !FBK_Page !FBK_Item !FBK_ScrollType
}
else
{
set !FBK_Done #true
}
}
if !FBK_ScrollID = #FALSE && %Inscription <> #FALSE
{
finditem %scroll . %CurrentScroll C_ , #backpackid
if #findkind <> -1
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID <> #FALSE
{
exevent drag #findid 1
wait 5
exevent dropc %CurrentBook
wait 25
set !FBK_Done #true
}
if !FBK_ScrollID <> #FALSE || %Inscription = #FALSE
{
set %CurrentScroll %CurrentScroll + 1
}
if %CurrentScroll > %Scroll
{
set !FBK_Done #true
}
} ; End of While Done
}
set %Result !FBK_Result
namespace clear
namespace pop
return %Result
;======================================================
; LOAD RESSOURCES
;======================================================
; no parameters
;======================================================
; return a message or true
;======================================================
; updates no globels
;======================================================
; requires %Regs array, tool types, scrolls types
;======================================================
sub LoadRessources
namespace push
namespace local SubLRS , #sCnt2 , #random
set !LRS_Result #TRUE
set !LRS_OldLPC #LPC
set #LPC 300
set !LRS_LoadPen #false
if %Inscription = #TRUE
{
finditem %ScribeToolType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadPen #true
}
else
{
if #findcnt < 2
{
set !LRS_Uses 0
set !LRS_Tools #findcnt
for #findindex 1 #findcnt
{
set !LRS_Tools . #findindex #findid
}
for !LRS_Count 1 !LRS_Tools
{
gosub ToolUses !LRS_Tools . !LRS_Count
set !LRS_Uses !LRS_Uses + #result
}
if !LRS_Uses < 100
{
set !LRS_LoadPen 1
}
}
}
}
set !LRS_LoadScrolls #false
if %Inscription = #TRUE
{
finditem %BlankScrollType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadScrolls #TRUE
}
else
{
if #findstack < 30
{
set !LRS_Count 0
for #findindex 1 #findcnt
{
set !LRS_Count !LRS_Count + #findstack
}
if !LRS_Count < 100
{
set !LRS_LoadScrolls !LRS_Count
}
}
}
}
set !LRS_LoadRegs #false
if %Inscription = #TRUE
{
finditem %regstype C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadRegs #true
set !LRS_RegList 0
set !LRS_Count 0
while !LRS_Count < %reg
{
set !LRS_Count !LRS_Count + 1
set !LRS_RegList !LRS_RegList + 1
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
}
else
{
set !LRS_RegsCount 0
set !LRS_RegsFound
for #findindex 1 #findcnt
{
if #findtype notin !LRS_RegsFound
{
set !LRS_RegsFound !LRS_RegsFound , _
if #findstack > 30
{
set !LRS_RegsCount !LRS_RegsCount + 1
}
}
}
if !LRS_RegsCount < %reg
{
set !LRS_RegList 0
set !LRS_Count 0
while !LRS_Count < %reg
{
set !LRS_Count !LRS_Count + 1
finditem %Reg . !LRS_Count C_ , #backpackid
if #findkind = -1
{
set !LRS_RegList !LRS_RegList + 1
set !LRS_LoadRegs #true
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
else
{
if #findstack < 30
{
set !LRS_RegList !LRS_RegList + 1
set !LRS_LoadRegs #true
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
}
}
}
}
}
if !LRS_LoadPen <> #FALSE
{
finditem %ScribeToolType C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoPenLeft
}
else
{
exevent drag #findid #findstack
wait 5
exevent dropc #backpackid
wait 25
}
}
if !LRS_LoadScrolls <> #FALSE
{
finditem %BlankScrollType C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoScrollLeft
}
else
{
set !LRS_Amount 120 - !LRS_LoadScrolls
set !LRS_CurrentWeight %MaxWeight - #WEIGHT
if !LRS_Amount > !LRS_CurrentWeight
set !LRS_Amount !LRS_CurrentWeight ; scrolls weighting 1 stone :-)
if !LRS_Amount > #findstack
set !LRS_Amount #findstack
exevent drag #findid !LRS_Amount
wait 5
exevent dropc #backpackid
wait 25
}
}
if !LRS_LoadRegs <> #FALSE
{
for !LRS_Count 1 !LRS_RegList
{
finditem !LRS_RegList . !LRS_Count C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoRegsLeft
}
else
{
set !LRS_Amount 100
if !LRS_Amount > #findstack
set !LRS_Amount #findstack
exevent drag #findid !LRS_Amount
wait 5
exevent dropc #backpackid
wait 25
}
}
}
set !LRS_LoadEmptyBook #false
finditem %BookType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadEmptyBook #true
}
else
{
set !LRS_LoadEmptyBook #TRUE
set !LRS_LoadFoundBook #FALSE
for #findindex 1 #findcnt
{
event property #findid
if %scroll in #property
{
set !LRS_LoadEmptyBook #findid
}
else
{
if %Inscription = #TRUE
{
set !LRS_LoadFoundBook #true
}
else
{
if %CurrentScroll >= %Scroll
{
set !LRS_LoadEmptyBook #findid
}
}
}
}
if !LRS_LoadFoundBook = #true
{
set !LRS_LoadEmptyBook #false
}
}
if !LRS_LoadEmptyBook <> #FALSE
{
if !LRS_LoadEmptyBook <> #TRUE
{
finditem !LRS_LoadEmptyBook C_ , #backpackid
if #findkind <> -1
{
exevent drag #findid #findstack
wait 5
exevent dropc %RessourceContainer 300 300
wait 25
set %BooksDone %BooksDone + 1
ignoreitem #findid 4
}
}
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
set !LRS_Found #false
set !LRS_Count 0
while !LRS_Count < #findcnt
{
set !LRS_Count !LRS_Count + 1
set #findindex !LRS_Count
event property #findid
if %Scroll notin #property
{
exevent drag #findid #findstack
wait 5
exevent dropc #backpackid
wait 25
set !LRS_Found #TRUE
set !LRS_Count #findcnt + 1
}
else
{
ignoreitem #findid 44
}
}
if !LRS_Found = #FALSE
{
set !LRS_Result NoBooksLeft
}
}
else
{
set !LRS_Result NoBooksLeft
}
}
set #LPC !LRS_OldLPC
set %Result !LRS_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET CONTAINERS
;======================================================
; no parameters
;======================================================
; return nothin
;======================================================
; updates %RessourceContainer %ScrollContainer
;======================================================
; requires no globals
;======================================================
sub GetContainers
namespace push
namespace local SubGCT , #sCnt2 , #random
set !GCT_Result #FALSE
set !GCT_Done #FALSE
set %RessourceContainer N/A
repeat
{
set %RessourceContainer N/A
repeat
{
display ok Please target your ressource container.$It must contain the following items :$- Blank Scrolls$- Reagents$- Books to fill$- Scribe pens
gosub GetObjectID
if #result <> #FALSE
{
set %RessourceContainer #result
}
}
until %RessourceContainer <> N/A
set #NEXTCPOSX 0
set #NEXTCPOSY 0
set #LOBJECTID %RessourceContainer
while #CONTID <> %RessourceContainer
{
event macro 17 0
wait 20
}
if %Inscription = #true
{
finditem %ScribeToolType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %BlankScrollType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %RegsType C_ , %RessourceContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No regs in this container.
}
}
else
{
display ok No blank scrolls in this container.
}
}
else
{
display ok No empty books in this container.
}
}
else
{
display ok No scribe tools in this container.
}
}
else
{
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No empty books in this container.
}
}
}
until !GCT_Done = #true
set !GCT_Done #FALSE
set %ScrollContainer N/A
repeat
{
set %ScrollContainer N/A
repeat
{
if %Inscription = #TRUE
{
display yesno If you want to use a scroll container, click YES and target.$If you don't want to use a scroll container, just press No
}
else
{
display ok You need to use a scroll container.$Please target it!
}
if #dispres = Yes || %Inscription <> #TRUE
{
gosub GetObjectID
if #result <> #FALSE
{
set %ScrollContainer #result
}
}
else
{
set !GCT_Done #true
}
}
until %ScrollContainer <> N/A || !GCT_Done = #true
if !GCT_Done <> #true
{
set #NEXTCPOSX 0
set #NEXTCPOSY 300
set #LOBJECTID %ScrollContainer
while #CONTID <> %ScrollContainer
{
event macro 17 0
wait 20
}
finditem %ScrollsType C_ , %ScrollContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No scrolls in this container.
}
}
}
until !GCT_Done = #true
set %Result !GCT_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET PACK INFO
;======================================================
; %1 Weight or Items or MaxItems or MaxWeight
; %2 ID of the Item
;======================================================
; return weight or items or max items or max weight
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub GetPackInfo
namespace push
namespace local SubGPI , #sCnt2 , #random
set !GPI_Result #FALSE
if %0 < 2
goto _GPI_End
set !GPI_Type %1
set !GPI_ID %2
finditem !GPI_ID
if #findkind <> -1
{
event property !GPI_ID
set !GPI_String #property
if !GPI_Type = Weight
{
str pos !GPI_string weight
if #strres > 0
{
set !GPI_Pos #strres + 7
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String Stones
if #strres > 0
{
set !GPI_Pos #strres - 2
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
goto _GPI_End
}
str pos !GPI_string items
if #strres > 0
{
set !GPI_Pos #strres + 6
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
goto _GPI_End
}
}
if !GPI_Type = Items
{
str pos !GPI_string contents
if #strres > 0
{
set !GPI_Pos #strres + 9
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
goto _GPI_End
}
if !GPI_Type = MaxItems
{
str pos !GPI_string contents
if #strres > 0
{
set !GPI_Pos #strres + 9
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres
str len !GPI_String
set !GPI_MaxPos #strres
set !GPI_MaxPos !GPI_MaxPos - !GPI_Pos
str right !GPI_String !GPI_MaxPos
set !GPI_String #strres
str pos !GPI_String #spc
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
}
goto _GPI_End
}
if !GPI_Type = MaxWeight
{
str pos !GPI_string items
if #strres > 0
{
set !GPI_Pos #strres + 6
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0 && #strres < 5
{
set !GPI_Pos #strres
str len !GPI_String
set !GPI_MaxPos #strres
set !GPI_MaxPos !GPI_MaxPos - !GPI_Pos
str right !GPI_String !GPI_MaxPos
set !GPI_String #strres
str pos !GPI_String #spc
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
}
goto _GPI_End
}
}
_GPI_End:
set %Result !GPI_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET OBJECT ID
;======================================================
; (%1) Expected object type
;======================================================
; return Object ID or #false if fails.
;======================================================
; updates no globels
;======================================================
; requires no globals
;======================================================
sub GetObjectID
namespace push
namespace local SubGOI , #sCnt2 , #random
set !GOI_Result #FALSE
set !GOI_Type #false
if %0 > 0
set !GOI_Type %1
set #TARGCURS 1
while #TARGCURS = 1
{
wait 1
}
finditem #LTARGETID
if #findkind <> -1
{
if !GOI_Type <> #FALSE
{
if !GOI_Type = #findtype
set !GOI_Result #findid
}
else
{
set !GOI_Result #findid
}
}
set %Result !GOI_Result
namespace clear
namespace pop
return %Result
;======================================================
; TOOL USES
;======================================================
; %1 Tool ID
;======================================================
; return number of uses
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub ToolUses
namespace push
namespace local SubTU , #sCnt2 , #random
set !TU_Result 0
set !TU_Tool %1
finditem !TU_Tool C_ , #backpackid
if #findkind = -1
goto _TU_End
set !TU_ToolFound #findid
event property !TU_ToolFound
set !TU_String #property
str pos !TU_string remaining
if #strres > 0
{
set !TU_Pos #strres + 10
str del !TU_String 1 !TU_Pos
set !TU_String #strres
str pos !TU_String $
if #strres > 0
{
set !TU_Pos #strres - 1
str left !TU_String !TU_Pos
set !TU_String #strres
set !TU_Result !TU_String
goto _TU_End
}
}
_TU_End:
set %Result !TU_Result
namespace clear
namespace pop
return %Result
;======================================================
; CREATE VARIABLE ARRAY
;======================================================
; (%1) Type : Necro or Mage (Default)
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub CreateVariableArray
namespace push
namespace local SubCSA , #sCnt2 , #random
set !CSA_Type Mage
if %0 > 0
{
set !CSA_Type %1
}
if !CSA_Type = Mage
{
set %BookType %MageBookType
set %MultiPage NO
set %StartMenu 1
set %SpellPerPage 8
set %reg 8
set %reg1 kuf ;Black Pearl
set %reg2 juf ;Blood Moss
set %reg3 mzf ;Mandrake Root
set %reg4 wzf ;Nightshade
set %reg5 rzf ;Spiders' Silk
set %reg6 kzf ;Garlic
set %reg7 jzf ;Ginseng
set %reg8 szf ;Sulfurous Ash
set %regstype
for !CSA_cntx 1 %reg
{
set %regstype %regstype , _ , %reg . !CSA_cntx
}
set %scroll 64
;*******************************************
; Scroll Item Types
; From Ma$$acre Spellbook Filler!
;*******************************************
; 1st Circle Spells
set %scroll1 QXL
set %scrollName1 Clumsy
set %scrollMana1 4
set %scroll2 PXL
set %scrollName2 Create , #spc , Food
set %scrollMana2 4
set %scroll3 AYL
set %scrollName3 Feeblemind
set %scrollMana3 4
set %scroll4 ZXL
set %scrollName4 Heal
set %scrollMana4 4
set %scroll5 CYL
set %scrollName5 Magic , #spc , Arrow
set %scrollMana5 4
set %scroll6 BYL
set %scrollName6 Night , #spc , Sight
set %scrollMana6 4
set %scroll7 NXL
set %scrollName7 Reactive , #spc , Armor
set %scrollMana7 4
set %scroll8 WXL
set %scrollName8 Weaken
set %scrollMana8 4
; 2nd Circle Spells
set %scroll9 VXL
set %scrollName9 Agility
set %scrollMana9 6
set %scroll10 YXL
set %scrollName10 Cunning
set %scrollMana10 6
set %scroll11 XXL
set %scrollName11 Cure
set %scrollMana11 6
set %scroll12 IYL
set %scrollName12 Harm
set %scrollMana12 6
set %scroll13 HYL
set %scrollName13 Magic , #spc , Trap
set %scrollMana13 6
set %scroll14 KYL
set %scrollName14 Magic , #spc , Untrap
set %scrollMana14 6
set %scroll15 JYL
set %scrollName15 Protection
set %scrollMana15 6
set %scroll16 EYL
set %scrollName16 Strength
set %scrollMana16 6
; 3rd Circle Spells
set %scroll17 DYL
set %scrollName17 Bless
set %scrollMana17 9
set %scroll18 GYL
set %scrollName18 Fireball
set %scrollMana18 9
set %scroll19 FYL
set %scrollName19 Magic , #spc , Lock
set %scrollMana19 9
set %scroll20 STL
set %scrollName20 Poison
set %scrollMana20 9
set %scroll21 RTL
set %scrollName21 Telekinesis
set %scrollMana21 9
set %scroll22 UTL
set %scrollName22 Teleport
set %scrollMana22 9
set %scroll23 TTL
set %scrollName23 Unlock
set %scrollMana23 9
set %scroll24 OTL
set %scrollName24 Wall , #spc , of , #spc , Stone
set %scrollMana24 9
; 4th Circle Spells
set %scroll25 NTL
set %scrollName25 Arch , #spc , Cure
set %scrollMana25 11
set %scroll26 QTL
set %scrollName26 Arch , #spc , Protection
set %scrollMana26 11
set %scroll27 PTL
set %scrollName27 Curse
set %scrollMana27 11
set %scroll28 AUL
set %scrollName28 Fire , #spc , Field
set %scrollMana28 11
set %scroll29 ZTL
set %scrollName29 Greater , #spc , Heal
set %scrollMana29 11
set %scroll30 CUL
set %scrollName30 Lightning
set %scrollMana30 11
set %scroll31 BUL
set %scrollName31 Mana , #spc , Drain
set %scrollMana31 11
set %scroll32 WTL
set %scrollName32 Recall
set %scrollMana32 11
; 5th Circle Spells
set %scroll33 VTL
set %scrollName33 Blade , #spc , Spirits
set %scrollMana33 14
set %scroll34 YTL
set %scrollName34 Dispel , #spc , Field
set %scrollMana34 14
set %scroll35 XTL
set %scrollName35 Incognito
set %scrollMana35 14
set %scroll36 IUL
set %scrollName36 Magic , #spc , Reflection
set %scrollMana36 14
set %scroll37 HUL
set %scrollName37 Mind , #spc , Blast
set %scrollMana37 14
set %scroll38 KUL
set %scrollName38 Paralyze
set %scrollMana38 14
set %scroll39 JUL
set %scrollName39 Poison , #spc , Field
set %scrollMana39 14
set %scroll40 EUL
set %scrollName40 Summon , #spc , Creature
set %scrollMana40 14
; 6th Circle Spells
set %scroll41 DUL
set %scrollName41 Dispel
set %scrollMana41 20
set %scroll42 GUL
set %scrollName42 Energy , #spc , Bolt
set %scrollMana42 20
set %scroll43 FUL
set %scrollName43 Explosion
set %scrollMana43 20
set %scroll44 QUL
set %scrollName44 Invisibility
set %scrollMana44 20
set %scroll45 PUL
set %scrollName45 Mark
set %scrollMana45 20
set %scroll46 SUL
set %scrollName46 Mass , #spc , Curse
set %scrollMana46 20
set %scroll47 RUL
set %scrollName47 Paralyze , #spc , Field
set %scrollMana47 20
set %scroll48 MUL
set %scrollName48 Reveal
set %scrollMana48 20
; 7th Circle Spells
set %scroll49 LUL
set %scrollName49 Chain , #spc , Lightning
set %scrollMana49 40
set %scroll50 OUL
set %scrollName50 Energy , #spc , Field
set %scrollMana50 40
set %scroll51 NUL
set %scrollName51 Flamestrike
set %scrollMana51 40
set %scroll52 YUL
set %scrollName52 Gate , #spc , Travel
set %scrollMana52 40
set %scroll53 XUL
set %scrollName53 Mana , #spc , Vampire
set %scrollMana53 40
set %scroll54 AVL
set %scrollName54 Mass , #spc , Dispell
set %scrollMana54 40
set %scroll55 ZUL
set %scrollName55 Meteor , #spc , Swarm
set %scrollMana55 40
set %scroll56 UUL
set %scrollName56 Polymorph
set %scrollMana56 40
; 8th Circle Spells
set %scroll57 TUL
set %scrollName57 Earthquake
set %scrollMana57 50
set %scroll58 WUL
set %scrollName58 Energy , #spc , Vortex
set %scrollMana58 50
set %scroll59 VUL
set %scrollName59 Resurrection
set %scrollMana59 50
set %scroll60 GVL
set %scrollName60 Summon , #spc , Air , #spc , Elemental
set %scrollMana60 50
set %scroll61 FVL
set %scrollName61 Summon , #spc , Daemon
set %scrollMana61 50
set %scroll62 IVL
set %scrollName62 Summon , #spc , Earth , #spc , Elemental
set %scrollMana62 50
set %scroll63 HVL
set %scrollName63 Summon , #spc , Fire , #spc , Elemental
set %scrollMana63 50
set %scroll64 CVL
set %scrollName64 Summon , #spc , Water , #spc , Elemental
set %scrollMana64 50
set %scrollstype
for !CSA_cntx 1 %scroll
{
set %scrollstype %scrollstype , _ , %scroll . !CSA_cntx
}
} ; End If CSA
if !CSA_Type = necro
{
set %BookType %NecroBookType
set %MultiPage YES
set %StartMenu 9
set %SpellPerPage 10
set %reg 5
set %reg1 UZF ;Nox Crystal
set %reg2 DUF ;Daemon Blood
set %reg3 TZF ;Grave Dust
set %reg4 IUF ;Batwing
set %reg5 YZF ;Pig Iron
set %regstype
for !CSA_cntx 1 %reg
{
set %regstype %regstype , _ , %reg . !CSA_cntx
}
set %Scroll 17
set %scroll1 MYM
set %scrollName1 Animate , #spc , Dead
set %scrollMana1 23
set %scroll2 LYM
set %scrollName2 Blood , #spc , Oath
set %scrollMana2 13
set %scroll3 OYM
set %scrollName3 Corpse , #spc , Skin
set %scrollMana3 11
set %scroll4 NYM
set %scrollName4 Curse , #spc , Weapon
set %scrollMana4 7
set %scroll5 IYM
set %scrollName5 Evil , #spc , Omen
set %scrollMana5 11
set %scroll6 HYM
set %scrollName6 Horrific , #spc , Beast
set %scrollMana6 17
set %scroll7 KYM
set %scrollName7 Lich , #spc , Form
set %scrollMana7 23
set %scroll8 JYM
set %scrollName8 Mind , #spc , Rot
set %scrollMana8 17
set %scroll9 UYM
set %scrollName9 Pain , #spc , Spike
set %scrollMana9 5
set %scroll10 TYM
set %scrollName10 Poisin , #spc , Strike
set %scrollMana10 17
set %scroll11 WYM
set %scrollName11 Strangle
set %scrollMana11 29
set %scroll12 VYM
set %scrollName12 Summon , #spc , Familiar
set %scrollMana12 17
set %scroll13 QYM
set %scrollName13 Vampiric , #spc , Embrace
set %scrollMana13 23
set %scroll14 PYM
set %scrollName14 Vengeful , #spc , Spirit
set %scrollMana14 41
set %scroll15 SYM
set %scrollName15 Wither
set %scrollMana15 23
set %scroll16 RYM
set %scrollName16 Wraith , #spc , Form
set %scrollMana16 17
set %scroll17 CZM
set %scrollName17 Exorcism
set %scrollMana17 40
set %scrollstype
for !CSA_cntx 1 %scroll
{
set %scrollstype %scrollstype , _ , %scroll . !CSA_cntx
}
}
namespace clear
namespace pop
return
;======================================================
; MAKE ITEM
;======================================================
; %1 Tool ID
; %2 Ressource Type
; %3 Section
; %4 Page
; %5 Item
; (%6) Expected Item Type
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub MakeItem
namespace push
namespace local SubMI , #sCnt2 , #random
set !MI_Result #FALSE
set !MI_Tool %1
set !MI_Ressource %2
set !MI_Category %3
set !MI_Page %4
set !MI_Item %5
set !MI_ExpectedType %6
set !MI_Tries 0
set !MI_FunctionTimeOut #sCnt2 + 150
if !MI_ExpectedType <> N/A
{
set !MI_FouncItems 0
finditem !MI_ExpectedType C_ , #backpackid
if #findkind <> -1
set !MI_FouncItems #findcnt
}
_MI_OpenGump:
set !MI_Tries !MI_Tries + 1
set #LOBJECTID !MI_Tool
event macro 17 0
set !MI_Timeout #sCnt + 4
_MI_WaitGump:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitGump
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Tries < 3
goto _MI_OpenGump
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
if !MI_Ressource > 0 && !MI_Ressource <> N/A
{
; From here we are sure the gump is open or we already quitted :-)
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + 370
click !MI_ClickX !MI_ClickY
wait 10
set !MI_Timeout #sCnt + 4
_MI_WaitRessource:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitRessource
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
set !MI_PosY !MI_Ressource * 20
set !MI_PosY !MI_PosY + 50
set !MI_ClickX #contposX + 235
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
wait 10
set !MI_Timeout #sCnt + 4
_MI_WaitMenu:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitMenu
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
}
set !MI_PosY !MI_Category * 20
set !MI_PosY !MI_PosY + 70
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
wait 10
_MI_NextPage:
set !MI_Timeout #sCnt + 4
_MI_WaitList:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitList
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
if !MI_Page > 1
{
set !MI_Page !MI_Page - 1
if !MI_Page > 0
{
set !MI_ClickX #contposX + 385
set !MI_ClickY #contposY + 270
click !MI_ClickX !MI_ClickY
wait 10
goto _MI_NextPage
}
}
set !MI_PosY !MI_Item * 20
set !MI_PosY !MI_PosY + 50
set !MI_ClickX #contposX + 235
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
set !MI_Timeout #sCnt + 4
set !MI_Worn #false
set !MI_Scan #jindex
_MI_WaitItem:
wait 5
for !MI_Line !MI_Scan #jindex
{
scanjournal !MI_Line
if you_worn_out in #journal
{
set !MI_Worn #true
goto _MI_Done
}
}
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitItem
if #contname <> generic_gump && #contsize <> 530_437
{
set !MI_Worn #true
goto _MI_Done
}
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + 30
set !MI_Timeout #sCnt + 2
_MI_WaitGumpClose:
wait 5
if ( #contname <> generic_gump || #contsize <> 530_437 ) && !MI_Timeout > #sCnt
goto _MI_WaitGumpClose
set !MI_Timeout #sCnt + 2
_MI_Close:
click !MI_ClickX !MI_ClickY r
wait 5
if #contname = generic_gump && #contsize = 530_437 && !MI_Timeout > #sCnt
goto _MI_Close
_MI_Done:
if !MI_ExpectedType <> N/A
{
finditem !MI_ExpectedType C_ , #backpackid
if #findkind <> -1
{
if !MI_FouncItems < #findcnt
{
set !MI_Result #true
}
else
{
if !MI_FunctionTimeOut > #sCnt2 && !MI_Worn = #false
goto _MI_OpenGump
}
}
}
else
{
set !MI_Result #true
}
_MI_End:
set %Result !MI_Result
namespace clear
namespace pop
return %Result
;======================================================
; SETUP DESKTOP
;======================================================
; no parameters
;======================================================
; return True in case of success
;======================================================
; updates no globals
;======================================================
; requires %PlayerRace %AdditionalWeight %MLAccount
;======================================================
sub SetupDesktop
namespace push
namespace local SubSD , #sCnt2 , #random
;Detect and closes Veteran rewards
set !SD_TimeOut #sCnt + 5
_SD_VetGump:
click 60 60
wait 30
if #CONTNAME = generic_gump && #CONTSIZE = 510_145 && !SD_TimeOut > #sCnt
{
set !SD_ClickX #contposx + 300
set !SD_ClickY #contposy + 105
click !SD_ClickX !SD_ClickY
wait 30
goto _SD_VetGump
}
;opens and places the paperdoll
set !SD_TimeOut #sCnt + 5
_SD_PaperDollGump:
event Macro 8 1
wait 30
if #CONTNAME <> paperdoll_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_PaperDollGump
}
if #CONTNAME = paperdoll_gump
{
contpos 640 110
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_PaperDollMove:
if #CONTNAME <> paperdoll_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_PaperDollMove
}
;opens and places the Status bar
set !SD_TimeOut #sCnt + 5
_SD_StatusGump:
event Macro 8 2
wait 30
if #CONTNAME <> status_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_StatusGump
}
if #CONTNAME = status_gump
{
if #CONTTYPE notin XU_AV
{
set %PlayerRace Human
if %MLAccount = #true
{
set %AdditionalWeight 60
}
}
if #CONTTYPE in XU_AV
{
set %PlayerRace Elf
set %AdditionalWeight 0
}
contpos 610 370
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_StatusMove:
if #CONTNAME <> status_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_StatusMove
}
;opens and places the journal
set !SD_TimeOut #sCnt + 5
_SD_JournalGump:
event Macro 8 3
wait 30
if #CONTNAME <> text_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_JournalGump
}
if #CONTNAME = text_gump
{
contpos 0 460
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_JournalMove:
if #CONTNAME <> text_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 0
{
wait 10
goto _SD_JournalMove
}
;opens and places the Backpack
set !SD_TimeOut #sCnt + 5
_SD_BackpackGump:
event Macro 8 7
wait 30
if #CONTNAME <> container_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_BackpackGump
}
if #CONTNAME = container_gump
{
contpos 640 -45
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_BackpackMove:
if #CONTNAME <> container_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_BackPackMove
}
namespace clear
namespace pop
return #true
Spoiler:
;=============================================================
; Script Name: Mage/Necro books Filler
; Author: Aganor
; Version: 0.4
; Shard: OSI
; Client Tested w/: 5.0.9+
; EUO tested w/: 1.50 Build 109
; Public Release: April 12, 2007
; Purpose: Fills mage/necro books from a chest or with inscription or both.
;=============================================================
; 0.4
; - Modified the code from the MakeItem sub. Not tested yet.
display yesno Which type of spellbook do you want to fill?$YES = MAGE$NO = NECRO$(Easy, no?)
set %WorkType Mage
if #dispres = NO
set %WorkType Necro
display yesno Do you have an ML account?$For weight calculations.
set %MLAccount #false
if #dispres = YES
set %MLAccount #true
set %MageBookType MPF
set %NecroBookType XXM
set %ScribeToolType PBG
set %TinkerToolType JTL
set %BlankScrollType DPF
set %IngotType ENK
set %AdditionalWeight 0
set %CurrentScroll 1
set %CurrentBook N/A
set %BooksDone 0
set #LPC 100
gosub CreateVariableArray %WorkType
set %Tinkering #False
chooseskill tink real
if #skill > 70
{
set %Tinkering #true
}
set %Inscription #false
chooseskill insc real
if #skill > 70
{
set %Inscription #true
}
set %Meditation #false
chooseskill medi real
if #skill > 70
{
set %Meditation #true
}
gosub GetContainers
gosub SetupDesktop
set %MaxWeight #maxweight + %AdditionalWeight - 20 ; security we remove 20
finditem %BookType C_ , #backpackid
if #findkind <> -1
{
for #findindex 1 #findcnt
{
event property #findid
if 64 in #property && %BookType = %MageBookType
ignoreitem #findid 33
if 17 in #property && %BookType = %NecroBookType
ignoreitem #findid 33
}
}
if %Inscription = #TRUE
{
set %TriesLimit %Scroll / 2
}
else
{
set %TriesLimit %Scroll
}
while #true
{
if #LPC < 200
set #LPC 200
gosub LoadRessources
if #result <> #true
{
display ok #result
halt
}
set %Tries 1
repeat
{
set %Tries %Tries + 1
set %OldScroll %CurrentScroll
gosub FillBook
if %OldScroll = %CurrentScroll
{
set %Tries %Tries + 1
}
}
until %Tries > %TriesLimit || %CurrentScroll > %Scroll
; gosub CheckBookFull
wait 5
}
halt
;======================================================
; RESSOURCE CHECK
;======================================================
; no parameters
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub RessourceCheck
namespace push
namespace local SubRCK , #sCnt2 , #random
set !RCK_Result #FALSE
if %Inscription = #TRUE
{
set !RCK_Result #TRUE
for !RCK_Count 1 %reg
{
finditem %reg . !RCK_Count C_ , #backpackid
if #findkind = -1 && #findstack < 5
{
set !RCK_Result #FALSE
}
}
finditem %BlankScrollType C_ , #backpackid
if #findkind = -1 || #findstack < 5
{
set !RCK_Result #FALSE
}
}
else
{
set !RCK_Result #TRUE
}
set %Result !RCK_Result
namespace clear
namespace pop
return %Result
;======================================================
; MANA CHECK
;======================================================
; no parameters
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub ManaCheck
namespace push
namespace local SubMCK , #sCnt2 , #random
set !MCK_Result #FALSE
if %Inscription = #TRUE
{
if %scrollMana . %CurrentScroll <> N/A
{
set !MCK_ManaReq %scrollMana . %CurrentScroll + 10
}
else
{
set !MCK_ManaReq 30
}
if #mana < !MCK_ManaReq
{
set !MCK_Meditate #sCnt2 - 1
while #mana < #maxmana
{
if %Meditation = #TRUE && !MCK_Meditate < #sCnt2
{
set !MCK_Journal #jindex
event macro 13 46
set !MCK_TimeOut #sCnt2 + 50
while !MCK_TimeOut > #sCnt2
{
for !MCK_Line !MCK_Journal #jindex
{
scanjournal !MCK_Line
if !MCK_Line > !MCK_Journal
{
if Cannot_focus in #journal
{
set !MCK_TimeOut #sCnt2
set !MCK_Meditate #sCnt2 + 110
}
if meditative_trance in #journal
{
set !MCK_TimeOut #sCnt2
set !MCK_Meditate #sCnt2 + 3000
}
}
}
}
}
wait 10
}
}
}
set %Result !MCK_Result
namespace clear
namespace pop
return %Result
;======================================================
; FILL BOOK
;======================================================
; no parameters
;======================================================
; return nothin
;======================================================
; updates tons of vars
;======================================================
; requires no globals
;======================================================
sub FillBook
namespace push
namespace local SubFBK , #sCnt2 , #random
set !FBK_Result #FALSE
if %CurrentScroll > %Scroll
{
set %CurrentScroll 1
}
setUOTitle Books Done : , #spc , %BooksDone , #spc , | Current Scroll : , #spc , %ScrollName . %CurrentScroll , #spc , ( , %CurrentScroll , / , %Scroll , )
if %CurrentBook <> N/A
{
finditem %CurrentBook C_ , #backpackid
if #findkind = -1
{
set %CurrentBook N/A
}
else
{
event property #findid
if %scroll in #property
{
set %CurrentBook N/A
}
}
}
if %CurrentBook = N/A
{
finditem %BookType C_ , #backpackid
if #findkind <> -1
{
for #findindex 1 #findcnt
{
event property #findid
if %scroll notin #property && %CurrentBook = N/A
{
set %CurrentBook #findid
set %CurrentScroll 1
}
}
}
}
if %CurrentBook <> N/A
{
set !FBK_Done #false
while !FBK_Done = #FALSE
{
gosub ManaCheck
set !FBK_ScrollID #false
if %ScrollContainer <> N/A && %notinContainer . %CurrentScroll = N/A
{
finditem %scroll . %CurrentScroll C_ , %ScrollContainer
if #findkind = -1
{
set %notinContainer . %CurrentScroll #true
}
else
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID = #FALSE
{
finditem %scroll . %CurrentScroll C_ , #backpackid
if #findkind <> -1
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID = #FALSE && %Inscription <> #FALSE
{
finditem %ScribeToolType C_ , #backpackid
if #findkind <> -1
{
set !FBK_ToolID #findid
if %MultiPage = NO
{
set !FBK_ScrollPage %CurrentScroll - 1 ; We need scrolls from 0 to 63
set !FBK_Page ( !FBK_ScrollPage / %SpellPerPage ) ; Goes from 0 to 7
set !FBK_Section %StartMenu + !FBK_Page
set !FBK_Page 1
set !FBK_Item ( !FBK_ScrollPage % %SpellPerPage ) + 1 ; The scroll button from 1 to 8
set !FBK_ScrollType %scroll . %CurrentScroll
}
else
{
set !FBK_ScrollPage %CurrentScroll - 1 ; We need scrolls from 0 to 63
set !FBK_Section %StartMenu
set !FBK_Page ( !FBK_ScrollPage / 10 ) + 1
set !FBK_Item ( !FBK_ScrollPage % %SpellPerPage ) + 1 ; The scroll button from 1 to 8
set !FBK_ScrollType %scroll . %CurrentScroll
}
gosub MakeItem #findid N/A !FBK_Section !FBK_Page !FBK_Item !FBK_ScrollType
}
else
{
set !FBK_Done #true
}
}
if !FBK_ScrollID = #FALSE && %Inscription <> #FALSE
{
finditem %scroll . %CurrentScroll C_ , #backpackid
if #findkind <> -1
{
set !FBK_ScrollID #findid
}
}
if !FBK_ScrollID <> #FALSE
{
exevent drag #findid 1
wait 5
exevent dropc %CurrentBook
wait 25
set !FBK_Done #true
}
if !FBK_ScrollID <> #FALSE || %Inscription = #FALSE
{
set %CurrentScroll %CurrentScroll + 1
}
if %CurrentScroll > %Scroll
{
set !FBK_Done #true
}
} ; End of While Done
}
set %Result !FBK_Result
namespace clear
namespace pop
return %Result
;======================================================
; LOAD RESSOURCES
;======================================================
; no parameters
;======================================================
; return a message or true
;======================================================
; updates no globels
;======================================================
; requires %Regs array, tool types, scrolls types
;======================================================
sub LoadRessources
namespace push
namespace local SubLRS , #sCnt2 , #random
set !LRS_Result #TRUE
set !LRS_OldLPC #LPC
set #LPC 300
set !LRS_LoadPen #false
if %Inscription = #TRUE
{
finditem %ScribeToolType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadPen #true
}
else
{
if #findcnt < 2
{
set !LRS_Uses 0
set !LRS_Tools #findcnt
for #findindex 1 #findcnt
{
set !LRS_Tools . #findindex #findid
}
for !LRS_Count 1 !LRS_Tools
{
gosub ToolUses !LRS_Tools . !LRS_Count
set !LRS_Uses !LRS_Uses + #result
}
if !LRS_Uses < 100
{
set !LRS_LoadPen 1
}
}
}
}
set !LRS_LoadScrolls #false
if %Inscription = #TRUE
{
finditem %BlankScrollType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadScrolls #TRUE
}
else
{
if #findstack < 30
{
set !LRS_Count 0
for #findindex 1 #findcnt
{
set !LRS_Count !LRS_Count + #findstack
}
if !LRS_Count < 100
{
set !LRS_LoadScrolls !LRS_Count
}
}
}
}
set !LRS_LoadRegs #false
if %Inscription = #TRUE
{
finditem %regstype C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadRegs #true
set !LRS_RegList 0
set !LRS_Count 0
while !LRS_Count < %reg
{
set !LRS_Count !LRS_Count + 1
set !LRS_RegList !LRS_RegList + 1
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
}
else
{
set !LRS_RegsCount 0
set !LRS_RegsFound
for #findindex 1 #findcnt
{
if #findtype notin !LRS_RegsFound
{
set !LRS_RegsFound !LRS_RegsFound , _
if #findstack > 30
{
set !LRS_RegsCount !LRS_RegsCount + 1
}
}
}
if !LRS_RegsCount < %reg
{
set !LRS_RegList 0
set !LRS_Count 0
while !LRS_Count < %reg
{
set !LRS_Count !LRS_Count + 1
finditem %Reg . !LRS_Count C_ , #backpackid
if #findkind = -1
{
set !LRS_RegList !LRS_RegList + 1
set !LRS_LoadRegs #true
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
else
{
if #findstack < 30
{
set !LRS_RegList !LRS_RegList + 1
set !LRS_LoadRegs #true
set !LRS_RegList . !LRS_RegList %Reg . !LRS_Count
}
}
}
}
}
}
if !LRS_LoadPen <> #FALSE
{
finditem %ScribeToolType C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoPenLeft
}
else
{
exevent drag #findid #findstack
wait 5
exevent dropc #backpackid
wait 25
}
}
if !LRS_LoadScrolls <> #FALSE
{
finditem %BlankScrollType C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoScrollLeft
}
else
{
set !LRS_Amount 120 - !LRS_LoadScrolls
set !LRS_CurrentWeight %MaxWeight - #WEIGHT
if !LRS_Amount > !LRS_CurrentWeight
set !LRS_Amount !LRS_CurrentWeight ; scrolls weighting 1 stone :-)
if !LRS_Amount > #findstack
set !LRS_Amount #findstack
exevent drag #findid !LRS_Amount
wait 5
exevent dropc #backpackid
wait 25
}
}
if !LRS_LoadRegs <> #FALSE
{
for !LRS_Count 1 !LRS_RegList
{
finditem !LRS_RegList . !LRS_Count C_ , %RessourceContainer
if #findkind = -1
{
set !LRS_Result NoRegsLeft
}
else
{
set !LRS_Amount 100
if !LRS_Amount > #findstack
set !LRS_Amount #findstack
exevent drag #findid !LRS_Amount
wait 5
exevent dropc #backpackid
wait 25
}
}
}
set !LRS_LoadEmptyBook #false
finditem %BookType C_ , #backpackid
if #findkind = -1
{
set !LRS_LoadEmptyBook #true
}
else
{
set !LRS_LoadEmptyBook #TRUE
set !LRS_LoadFoundBook #FALSE
for #findindex 1 #findcnt
{
event property #findid
if %scroll in #property
{
set !LRS_LoadEmptyBook #findid
}
else
{
if %Inscription = #TRUE
{
set !LRS_LoadFoundBook #true
}
else
{
if %CurrentScroll >= %Scroll
{
set !LRS_LoadEmptyBook #findid
}
}
}
}
if !LRS_LoadFoundBook = #true
{
set !LRS_LoadEmptyBook #false
}
}
if !LRS_LoadEmptyBook <> #FALSE
{
if !LRS_LoadEmptyBook <> #TRUE
{
finditem !LRS_LoadEmptyBook C_ , #backpackid
if #findkind <> -1
{
exevent drag #findid #findstack
wait 5
exevent dropc %RessourceContainer 300 300
wait 25
set %BooksDone %BooksDone + 1
ignoreitem #findid 4
}
}
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
set !LRS_Found #false
set !LRS_Count 0
while !LRS_Count < #findcnt
{
set !LRS_Count !LRS_Count + 1
set #findindex !LRS_Count
event property #findid
if %Scroll notin #property
{
exevent drag #findid #findstack
wait 5
exevent dropc #backpackid
wait 25
set !LRS_Found #TRUE
set !LRS_Count #findcnt + 1
}
else
{
ignoreitem #findid 44
}
}
if !LRS_Found = #FALSE
{
set !LRS_Result NoBooksLeft
}
}
else
{
set !LRS_Result NoBooksLeft
}
}
set #LPC !LRS_OldLPC
set %Result !LRS_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET CONTAINERS
;======================================================
; no parameters
;======================================================
; return nothin
;======================================================
; updates %RessourceContainer %ScrollContainer
;======================================================
; requires no globals
;======================================================
sub GetContainers
namespace push
namespace local SubGCT , #sCnt2 , #random
set !GCT_Result #FALSE
set !GCT_Done #FALSE
set %RessourceContainer N/A
repeat
{
set %RessourceContainer N/A
repeat
{
display ok Please target your ressource container.$It must contain the following items :$- Blank Scrolls$- Reagents$- Books to fill$- Scribe pens
gosub GetObjectID
if #result <> #FALSE
{
set %RessourceContainer #result
}
}
until %RessourceContainer <> N/A
set #NEXTCPOSX 0
set #NEXTCPOSY 0
set #LOBJECTID %RessourceContainer
while #CONTID <> %RessourceContainer
{
event macro 17 0
wait 20
}
if %Inscription = #true
{
finditem %ScribeToolType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %BlankScrollType C_ , %RessourceContainer
if #findkind <> -1
{
finditem %RegsType C_ , %RessourceContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No regs in this container.
}
}
else
{
display ok No blank scrolls in this container.
}
}
else
{
display ok No empty books in this container.
}
}
else
{
display ok No scribe tools in this container.
}
}
else
{
finditem %BookType C_ , %RessourceContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No empty books in this container.
}
}
}
until !GCT_Done = #true
set !GCT_Done #FALSE
set %ScrollContainer N/A
repeat
{
set %ScrollContainer N/A
repeat
{
if %Inscription = #TRUE
{
display yesno If you want to use a scroll container, click YES and target.$If you don't want to use a scroll container, just press No
}
else
{
display ok You need to use a scroll container.$Please target it!
}
if #dispres = Yes || %Inscription <> #TRUE
{
gosub GetObjectID
if #result <> #FALSE
{
set %ScrollContainer #result
}
}
else
{
set !GCT_Done #true
}
}
until %ScrollContainer <> N/A || !GCT_Done = #true
if !GCT_Done <> #true
{
set #NEXTCPOSX 0
set #NEXTCPOSY 300
set #LOBJECTID %ScrollContainer
while #CONTID <> %ScrollContainer
{
event macro 17 0
wait 20
}
finditem %ScrollsType C_ , %ScrollContainer
if #findkind <> -1
{
set !GCT_Done #true
}
else
{
display ok No scrolls in this container.
}
}
}
until !GCT_Done = #true
set %Result !GCT_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET PACK INFO
;======================================================
; %1 Weight or Items or MaxItems or MaxWeight
; %2 ID of the Item
;======================================================
; return weight or items or max items or max weight
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub GetPackInfo
namespace push
namespace local SubGPI , #sCnt2 , #random
set !GPI_Result #FALSE
if %0 < 2
goto _GPI_End
set !GPI_Type %1
set !GPI_ID %2
finditem !GPI_ID
if #findkind <> -1
{
event property !GPI_ID
set !GPI_String #property
if !GPI_Type = Weight
{
str pos !GPI_string weight
if #strres > 0
{
set !GPI_Pos #strres + 7
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String Stones
if #strres > 0
{
set !GPI_Pos #strres - 2
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
goto _GPI_End
}
str pos !GPI_string items
if #strres > 0
{
set !GPI_Pos #strres + 6
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
goto _GPI_End
}
}
if !GPI_Type = Items
{
str pos !GPI_string contents
if #strres > 0
{
set !GPI_Pos #strres + 9
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
goto _GPI_End
}
if !GPI_Type = MaxItems
{
str pos !GPI_string contents
if #strres > 0
{
set !GPI_Pos #strres + 9
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0
{
set !GPI_Pos #strres
str len !GPI_String
set !GPI_MaxPos #strres
set !GPI_MaxPos !GPI_MaxPos - !GPI_Pos
str right !GPI_String !GPI_MaxPos
set !GPI_String #strres
str pos !GPI_String #spc
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
}
goto _GPI_End
}
if !GPI_Type = MaxWeight
{
str pos !GPI_string items
if #strres > 0
{
set !GPI_Pos #strres + 6
str del !GPI_String 1 !GPI_Pos
set !GPI_String #strres
str pos !GPI_String /
if #strres > 0 && #strres < 5
{
set !GPI_Pos #strres
str len !GPI_String
set !GPI_MaxPos #strres
set !GPI_MaxPos !GPI_MaxPos - !GPI_Pos
str right !GPI_String !GPI_MaxPos
set !GPI_String #strres
str pos !GPI_String #spc
if #strres > 0
{
set !GPI_Pos #strres - 1
str left !GPI_String !GPI_Pos
set !GPI_String #strres
set !GPI_Result !GPI_String
}
}
}
goto _GPI_End
}
}
_GPI_End:
set %Result !GPI_Result
namespace clear
namespace pop
return %Result
;======================================================
; GET OBJECT ID
;======================================================
; (%1) Expected object type
;======================================================
; return Object ID or #false if fails.
;======================================================
; updates no globels
;======================================================
; requires no globals
;======================================================
sub GetObjectID
namespace push
namespace local SubGOI , #sCnt2 , #random
set !GOI_Result #FALSE
set !GOI_Type #false
if %0 > 0
set !GOI_Type %1
set #TARGCURS 1
while #TARGCURS = 1
{
wait 1
}
finditem #LTARGETID
if #findkind <> -1
{
if !GOI_Type <> #FALSE
{
if !GOI_Type = #findtype
set !GOI_Result #findid
}
else
{
set !GOI_Result #findid
}
}
set %Result !GOI_Result
namespace clear
namespace pop
return %Result
;======================================================
; TOOL USES
;======================================================
; %1 Tool ID
;======================================================
; return number of uses
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub ToolUses
namespace push
namespace local SubTU , #sCnt2 , #random
set !TU_Result 0
set !TU_Tool %1
finditem !TU_Tool C_ , #backpackid
if #findkind = -1
goto _TU_End
set !TU_ToolFound #findid
event property !TU_ToolFound
set !TU_String #property
str pos !TU_string remaining
if #strres > 0
{
set !TU_Pos #strres + 10
str del !TU_String 1 !TU_Pos
set !TU_String #strres
str pos !TU_String $
if #strres > 0
{
set !TU_Pos #strres - 1
str left !TU_String !TU_Pos
set !TU_String #strres
set !TU_Result !TU_String
goto _TU_End
}
}
_TU_End:
set %Result !TU_Result
namespace clear
namespace pop
return %Result
;======================================================
; CREATE VARIABLE ARRAY
;======================================================
; (%1) Type : Necro or Mage (Default)
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub CreateVariableArray
namespace push
namespace local SubCSA , #sCnt2 , #random
set !CSA_Type Mage
if %0 > 0
{
set !CSA_Type %1
}
if !CSA_Type = Mage
{
set %BookType %MageBookType
set %MultiPage NO
set %StartMenu 1
set %SpellPerPage 8
set %reg 8
set %reg1 kuf ;Black Pearl
set %reg2 juf ;Blood Moss
set %reg3 mzf ;Mandrake Root
set %reg4 wzf ;Nightshade
set %reg5 rzf ;Spiders' Silk
set %reg6 kzf ;Garlic
set %reg7 jzf ;Ginseng
set %reg8 szf ;Sulfurous Ash
set %regstype
for !CSA_cntx 1 %reg
{
set %regstype %regstype , _ , %reg . !CSA_cntx
}
set %scroll 64
;*******************************************
; Scroll Item Types
; From Ma$$acre Spellbook Filler!
;*******************************************
; 1st Circle Spells
set %scroll1 QXL
set %scrollName1 Clumsy
set %scrollMana1 4
set %scroll2 PXL
set %scrollName2 Create , #spc , Food
set %scrollMana2 4
set %scroll3 AYL
set %scrollName3 Feeblemind
set %scrollMana3 4
set %scroll4 ZXL
set %scrollName4 Heal
set %scrollMana4 4
set %scroll5 CYL
set %scrollName5 Magic , #spc , Arrow
set %scrollMana5 4
set %scroll6 BYL
set %scrollName6 Night , #spc , Sight
set %scrollMana6 4
set %scroll7 NXL
set %scrollName7 Reactive , #spc , Armor
set %scrollMana7 4
set %scroll8 WXL
set %scrollName8 Weaken
set %scrollMana8 4
; 2nd Circle Spells
set %scroll9 VXL
set %scrollName9 Agility
set %scrollMana9 6
set %scroll10 YXL
set %scrollName10 Cunning
set %scrollMana10 6
set %scroll11 XXL
set %scrollName11 Cure
set %scrollMana11 6
set %scroll12 IYL
set %scrollName12 Harm
set %scrollMana12 6
set %scroll13 HYL
set %scrollName13 Magic , #spc , Trap
set %scrollMana13 6
set %scroll14 KYL
set %scrollName14 Magic , #spc , Untrap
set %scrollMana14 6
set %scroll15 JYL
set %scrollName15 Protection
set %scrollMana15 6
set %scroll16 EYL
set %scrollName16 Strength
set %scrollMana16 6
; 3rd Circle Spells
set %scroll17 DYL
set %scrollName17 Bless
set %scrollMana17 9
set %scroll18 GYL
set %scrollName18 Fireball
set %scrollMana18 9
set %scroll19 FYL
set %scrollName19 Magic , #spc , Lock
set %scrollMana19 9
set %scroll20 STL
set %scrollName20 Poison
set %scrollMana20 9
set %scroll21 RTL
set %scrollName21 Telekinesis
set %scrollMana21 9
set %scroll22 UTL
set %scrollName22 Teleport
set %scrollMana22 9
set %scroll23 TTL
set %scrollName23 Unlock
set %scrollMana23 9
set %scroll24 OTL
set %scrollName24 Wall , #spc , of , #spc , Stone
set %scrollMana24 9
; 4th Circle Spells
set %scroll25 NTL
set %scrollName25 Arch , #spc , Cure
set %scrollMana25 11
set %scroll26 QTL
set %scrollName26 Arch , #spc , Protection
set %scrollMana26 11
set %scroll27 PTL
set %scrollName27 Curse
set %scrollMana27 11
set %scroll28 AUL
set %scrollName28 Fire , #spc , Field
set %scrollMana28 11
set %scroll29 ZTL
set %scrollName29 Greater , #spc , Heal
set %scrollMana29 11
set %scroll30 CUL
set %scrollName30 Lightning
set %scrollMana30 11
set %scroll31 BUL
set %scrollName31 Mana , #spc , Drain
set %scrollMana31 11
set %scroll32 WTL
set %scrollName32 Recall
set %scrollMana32 11
; 5th Circle Spells
set %scroll33 VTL
set %scrollName33 Blade , #spc , Spirits
set %scrollMana33 14
set %scroll34 YTL
set %scrollName34 Dispel , #spc , Field
set %scrollMana34 14
set %scroll35 XTL
set %scrollName35 Incognito
set %scrollMana35 14
set %scroll36 IUL
set %scrollName36 Magic , #spc , Reflection
set %scrollMana36 14
set %scroll37 HUL
set %scrollName37 Mind , #spc , Blast
set %scrollMana37 14
set %scroll38 KUL
set %scrollName38 Paralyze
set %scrollMana38 14
set %scroll39 JUL
set %scrollName39 Poison , #spc , Field
set %scrollMana39 14
set %scroll40 EUL
set %scrollName40 Summon , #spc , Creature
set %scrollMana40 14
; 6th Circle Spells
set %scroll41 DUL
set %scrollName41 Dispel
set %scrollMana41 20
set %scroll42 GUL
set %scrollName42 Energy , #spc , Bolt
set %scrollMana42 20
set %scroll43 FUL
set %scrollName43 Explosion
set %scrollMana43 20
set %scroll44 QUL
set %scrollName44 Invisibility
set %scrollMana44 20
set %scroll45 PUL
set %scrollName45 Mark
set %scrollMana45 20
set %scroll46 SUL
set %scrollName46 Mass , #spc , Curse
set %scrollMana46 20
set %scroll47 RUL
set %scrollName47 Paralyze , #spc , Field
set %scrollMana47 20
set %scroll48 MUL
set %scrollName48 Reveal
set %scrollMana48 20
; 7th Circle Spells
set %scroll49 LUL
set %scrollName49 Chain , #spc , Lightning
set %scrollMana49 40
set %scroll50 OUL
set %scrollName50 Energy , #spc , Field
set %scrollMana50 40
set %scroll51 NUL
set %scrollName51 Flamestrike
set %scrollMana51 40
set %scroll52 YUL
set %scrollName52 Gate , #spc , Travel
set %scrollMana52 40
set %scroll53 XUL
set %scrollName53 Mana , #spc , Vampire
set %scrollMana53 40
set %scroll54 AVL
set %scrollName54 Mass , #spc , Dispell
set %scrollMana54 40
set %scroll55 ZUL
set %scrollName55 Meteor , #spc , Swarm
set %scrollMana55 40
set %scroll56 UUL
set %scrollName56 Polymorph
set %scrollMana56 40
; 8th Circle Spells
set %scroll57 TUL
set %scrollName57 Earthquake
set %scrollMana57 50
set %scroll58 WUL
set %scrollName58 Energy , #spc , Vortex
set %scrollMana58 50
set %scroll59 VUL
set %scrollName59 Resurrection
set %scrollMana59 50
set %scroll60 GVL
set %scrollName60 Summon , #spc , Air , #spc , Elemental
set %scrollMana60 50
set %scroll61 FVL
set %scrollName61 Summon , #spc , Daemon
set %scrollMana61 50
set %scroll62 IVL
set %scrollName62 Summon , #spc , Earth , #spc , Elemental
set %scrollMana62 50
set %scroll63 HVL
set %scrollName63 Summon , #spc , Fire , #spc , Elemental
set %scrollMana63 50
set %scroll64 CVL
set %scrollName64 Summon , #spc , Water , #spc , Elemental
set %scrollMana64 50
set %scrollstype
for !CSA_cntx 1 %scroll
{
set %scrollstype %scrollstype , _ , %scroll . !CSA_cntx
}
} ; End If CSA
if !CSA_Type = necro
{
set %BookType %NecroBookType
set %MultiPage YES
set %StartMenu 9
set %SpellPerPage 10
set %reg 5
set %reg1 UZF ;Nox Crystal
set %reg2 DUF ;Daemon Blood
set %reg3 TZF ;Grave Dust
set %reg4 IUF ;Batwing
set %reg5 YZF ;Pig Iron
set %regstype
for !CSA_cntx 1 %reg
{
set %regstype %regstype , _ , %reg . !CSA_cntx
}
set %Scroll 17
set %scroll1 MYM
set %scrollName1 Animate , #spc , Dead
set %scrollMana1 23
set %scroll2 LYM
set %scrollName2 Blood , #spc , Oath
set %scrollMana2 13
set %scroll3 OYM
set %scrollName3 Corpse , #spc , Skin
set %scrollMana3 11
set %scroll4 NYM
set %scrollName4 Curse , #spc , Weapon
set %scrollMana4 7
set %scroll5 IYM
set %scrollName5 Evil , #spc , Omen
set %scrollMana5 11
set %scroll6 HYM
set %scrollName6 Horrific , #spc , Beast
set %scrollMana6 17
set %scroll7 KYM
set %scrollName7 Lich , #spc , Form
set %scrollMana7 23
set %scroll8 JYM
set %scrollName8 Mind , #spc , Rot
set %scrollMana8 17
set %scroll9 UYM
set %scrollName9 Pain , #spc , Spike
set %scrollMana9 5
set %scroll10 TYM
set %scrollName10 Poisin , #spc , Strike
set %scrollMana10 17
set %scroll11 WYM
set %scrollName11 Strangle
set %scrollMana11 29
set %scroll12 VYM
set %scrollName12 Summon , #spc , Familiar
set %scrollMana12 17
set %scroll13 QYM
set %scrollName13 Vampiric , #spc , Embrace
set %scrollMana13 23
set %scroll14 PYM
set %scrollName14 Vengeful , #spc , Spirit
set %scrollMana14 41
set %scroll15 SYM
set %scrollName15 Wither
set %scrollMana15 23
set %scroll16 RYM
set %scrollName16 Wraith , #spc , Form
set %scrollMana16 17
set %scroll17 CZM
set %scrollName17 Exorcism
set %scrollMana17 40
set %scrollstype
for !CSA_cntx 1 %scroll
{
set %scrollstype %scrollstype , _ , %scroll . !CSA_cntx
}
}
namespace clear
namespace pop
return
;======================================================
; MAKE ITEM
;======================================================
; %1 Tool ID
; %2 Ressource Type
; %3 Section
; %4 Page
; %5 Item
; (%6) Expected Item Type
;======================================================
; return nothing
;======================================================
; Updates no globals
;======================================================
; requires no globals
;======================================================
sub MakeItem
namespace push
namespace local SubMI , #sCnt2 , #random
set !MI_Result #FALSE
set !MI_Tool %1
set !MI_Ressource %2
set !MI_Category %3
set !MI_Page %4
set !MI_Item %5
set !MI_ExpectedType %6
set !MI_Tries 0
set !MI_FunctionTimeOut #sCnt2 + 150
if !MI_ExpectedType <> N/A
{
set !MI_FouncItems 0
finditem !MI_ExpectedType C_ , #backpackid
if #findkind <> -1
set !MI_FouncItems #findcnt
}
_MI_OpenGump:
set !MI_Tries !MI_Tries + 1
set #LOBJECTID !MI_Tool
event macro 17 0
set !MI_Timeout #sCnt + 4
_MI_WaitGump:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitGump
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Tries < 3
goto _MI_OpenGump
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
if !MI_Ressource > 0 && !MI_Ressource <> N/A
{
; From here we are sure the gump is open or we already quitted :-)
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + 370
click !MI_ClickX !MI_ClickY
wait 10
set !MI_Timeout #sCnt + 4
_MI_WaitRessource:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitRessource
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
set !MI_PosY !MI_Ressource * 20
set !MI_PosY !MI_PosY + 50
set !MI_ClickX #contposX + 235
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
wait 10
set !MI_Timeout #sCnt + 4
_MI_WaitMenu:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitMenu
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
}
set !MI_PosY !MI_Category * 20
set !MI_PosY !MI_PosY + 70
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
wait 10
_MI_NextPage:
set !MI_Timeout #sCnt + 4
_MI_WaitList:
wait 5
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitList
if #contname <> generic_gump && #contsize <> 530_437
goto _MI_End
if !MI_Page > 1
{
set !MI_Page !MI_Page - 1
if !MI_Page > 0
{
set !MI_ClickX #contposX + 385
set !MI_ClickY #contposY + 270
click !MI_ClickX !MI_ClickY
wait 10
goto _MI_NextPage
}
}
set !MI_PosY !MI_Item * 20
set !MI_PosY !MI_PosY + 50
set !MI_ClickX #contposX + 235
set !MI_ClickY #contposY + !MI_PosY
click !MI_ClickX !MI_ClickY
set !MI_Timeout #sCnt + 4
set !MI_Worn #false
set !MI_Scan #jindex
_MI_WaitItem:
wait 5
for !MI_Line !MI_Scan #jindex
{
scanjournal !MI_Line
if you_worn_out in #journal
{
set !MI_Worn #true
goto _MI_Done
}
}
if #contname <> generic_gump && #contsize <> 530_437 && !MI_Timeout > #sCnt
goto _MI_WaitItem
if #contname <> generic_gump && #contsize <> 530_437
{
set !MI_Worn #true
goto _MI_Done
}
set !MI_ClickX #contposX + 30
set !MI_ClickY #contposY + 30
set !MI_Timeout #sCnt + 2
_MI_WaitGumpClose:
wait 5
if ( #contname <> generic_gump || #contsize <> 530_437 ) && !MI_Timeout > #sCnt
goto _MI_WaitGumpClose
set !MI_Timeout #sCnt + 2
_MI_Close:
click !MI_ClickX !MI_ClickY r
wait 5
if #contname = generic_gump && #contsize = 530_437 && !MI_Timeout > #sCnt
goto _MI_Close
_MI_Done:
if !MI_ExpectedType <> N/A
{
finditem !MI_ExpectedType C_ , #backpackid
if #findkind <> -1
{
if !MI_FouncItems < #findcnt
{
set !MI_Result #true
}
else
{
if !MI_FunctionTimeOut > #sCnt2 && !MI_Worn = #false
goto _MI_OpenGump
}
}
}
else
{
set !MI_Result #true
}
_MI_End:
set %Result !MI_Result
namespace clear
namespace pop
return %Result
;======================================================
; SETUP DESKTOP
;======================================================
; no parameters
;======================================================
; return True in case of success
;======================================================
; updates no globals
;======================================================
; requires %PlayerRace %AdditionalWeight %MLAccount
;======================================================
sub SetupDesktop
namespace push
namespace local SubSD , #sCnt2 , #random
;Detect and closes Veteran rewards
set !SD_TimeOut #sCnt + 5
_SD_VetGump:
click 60 60
wait 30
if #CONTNAME = generic_gump && #CONTSIZE = 510_145 && !SD_TimeOut > #sCnt
{
set !SD_ClickX #contposx + 300
set !SD_ClickY #contposy + 105
click !SD_ClickX !SD_ClickY
wait 30
goto _SD_VetGump
}
;opens and places the paperdoll
set !SD_TimeOut #sCnt + 5
_SD_PaperDollGump:
event Macro 8 1
wait 30
if #CONTNAME <> paperdoll_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_PaperDollGump
}
if #CONTNAME = paperdoll_gump
{
contpos 640 110
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_PaperDollMove:
if #CONTNAME <> paperdoll_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_PaperDollMove
}
;opens and places the Status bar
set !SD_TimeOut #sCnt + 5
_SD_StatusGump:
event Macro 8 2
wait 30
if #CONTNAME <> status_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_StatusGump
}
if #CONTNAME = status_gump
{
if #CONTTYPE notin XU_AV
{
set %PlayerRace Human
if %MLAccount = #true
{
set %AdditionalWeight 60
}
}
if #CONTTYPE in XU_AV
{
set %PlayerRace Elf
set %AdditionalWeight 0
}
contpos 610 370
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_StatusMove:
if #CONTNAME <> status_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_StatusMove
}
;opens and places the journal
set !SD_TimeOut #sCnt + 5
_SD_JournalGump:
event Macro 8 3
wait 30
if #CONTNAME <> text_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_JournalGump
}
if #CONTNAME = text_gump
{
contpos 0 460
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_JournalMove:
if #CONTNAME <> text_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 0
{
wait 10
goto _SD_JournalMove
}
;opens and places the Backpack
set !SD_TimeOut #sCnt + 5
_SD_BackpackGump:
event Macro 8 7
wait 30
if #CONTNAME <> container_gump && !SD_TimeOut > #sCnt
{
wait 20
goto _SD_BackpackGump
}
if #CONTNAME = container_gump
{
contpos 640 -45
wait 30
}
set !SD_TimeOut #sCnt + 5
_SD_BackpackMove:
if #CONTNAME <> container_gump && !SD_TimeOut > #sCnt && #CONTPOSX <> 640
{
wait 10
goto _SD_BackPackMove
}
namespace clear
namespace pop
return #true




![]() ![]() |
Sayfaya git: 1, 2, Sonraki |
1. sayfa (Toplam 2 sayfa) [ 13 mesaj ] |
Bu forumda yeni başlıklar açamazsınız Bu forumdaki başlıklara cevap veremezsiniz Bu forumdaki mesajlarınızı değiştiremezsiniz Bu forumdaki mesajlarınızı silemezsiniz Bu forumdaki anketlerde oy kullanamazsınız |