ScriptUO
Ultima Online Fan Board => General UO Chat => Topic started by: Dread385 on August 18, 2015, 03:20:26 PM
-
Hey everyone! I was looking through whatever I could find about some pre-made railing systems. I see a guy running by my house quite frequently and it's obvious he's on a rail. I followed him before to watch him pop out of llama form and mark a rune. He then hopped back in llama form and returned to walking. Is anyone familiar with a script that does this?
Also... I found a post from years ago and I wondered if it ever took off.
http://www.scriptuo.com/index.php?topic=76.0 (http://www.scriptuo.com/index.php?topic=76.0)
-
Probably didn't take off because it wasn't widely available and it was very complex.
-
HAHA, I don't have a railer for IDOC checking, I mean really railing wouldn't make since. You'd just keep checking the same houses over and over again. I usually run places that are less than 10 minutes away just to look for idocs.
I run this script while I do.
openEUO
--Idoc Screamer
dofile(getinstalldir()..'/scripts/kalilib.lua')
UO.CliNr = clientmenu()
local SignsT = {
[2980] = true,
[2982] = true,
[2984] = true,
[2986] = true,
[2988] = true,
[2990] = true,
[2992] = true,
[2994] = true,
[2996] = true,
[2998] = true,
[3000] = true,
[3002] = true,
[3004] = true,
[3006] = true,
[3008] = true,
[3010] = true,
[3012] = true,
[3014] = true,
[3016] = true,
[3018] = true,
[3020] = true,
[3022] = true,
[3024] = true,
[3026] = true,
[3028] = true,
[3030] = true,
[3032] = true,
[3034] = true,
[3036] = true,
[3038] = true,
[3040] = true,
[3042] = true,
[3044] = true,
[3046] = true,
[3048] = true,
[3050] = true,
[3052] = true,
[3054] = true,
[3056] = true,
[3058] = true,
[3060] = true,
[3062] = true,
[3064] = true,
[3066] = true,
[3068] = true,
[3070] = true,
[3072] = true,
[3074] = true,
[3076] = true,
[3078] = true,
[3080] = true,
[3082] = true,
[3084] = true,
[3086] = true,
[3088] = true,
[3090] = true,
}
local tSigns = {}
for k,_ in pairs(SignsT) do
tSigns[#tSigns+1] = k
print(k)
end
local Signs, iSigns = {},{}
while not getkey('f12') do
--Signs,iSigns = FindItemOnGround('Type',tSigns,10,iSigns)
UO.ScanItems(true)
for i = 0, UO.FilterItems(4)-1 do
local nID,nType,nKind,nContID,nX,nY,nZ,nStack,nRep,nCol = UO.GetItem(i)
if SignsT[nType] and iSigns[nID] == nil then
sInfo = ''
local tOut = 5000 + getticks()
while sInfo == '' do
sName,sInfo = UO.Property(nID)
if tOut < getticks() then print(nID) UO.ExMsg(nID,'Failed') break end
end
if sInfo:match('Condition') or sInfo:match('Worn') or sInfo:match('In Danger') then
UO.SysMessage('IDOC Found')
UO.ExMsg(nID,'IDOC')
print('IDOC found')
else
UO.ExMsg(nID,'Checked')
end
sInfo = ''
end
end
It will display 'checked' over the sign if it's okay.
If in IDOC, everything will go nuts. I mean it will put "IDOC" over the sign, system message IDOC and print IDOC in oEUO debug window.
Techincally, all you need to do is techinally use the extreme/boundary values, tiles, some math, and smart programming to generate a path, hell even wouldn't really need to be optimized on horseback with a couple accounts (think trial accounts, as many as you wish, subsections of UO) if you were really determined. Record X,Y,Facet of idoc house, and have an account that travels to those spots specifically to mark a rune.
Then you run my next script, which was made less worthwhile with the patch that randomized idoc fall times.
local timer = getticks()
local sHr = 11
local sMin = 36
dofile(getinstalldir()..'/scripts/kalilib.lua')
local tRB = 8901
local IDOCBooks = {}
local NonIDOC = {}
local SignsT = {
[2980] = true,
[2982] = true,
[2984] = true,
[2986] = true,
[2988] = true,
[2990] = true,
[2992] = true,
[2994] = true,
[2996] = true,
[2998] = true,
[3000] = true,
[3002] = true,
[3004] = true,
[3006] = true,
[3008] = true,
[3010] = true,
[3012] = true,
[3014] = true,
[3016] = true,
[3018] = true,
[3020] = true,
[3022] = true,
[3024] = true,
[3026] = true,
[3028] = true,
[3030] = true,
[3032] = true,
[3034] = true,
[3036] = true,
[3038] = true,
[3040] = true,
[3042] = true,
[3044] = true,
[3046] = true,
[3048] = true,
[3050] = true,
[3052] = true,
[3054] = true,
[3056] = true,
[3058] = true,
[3060] = true,
[3062] = true,
[3064] = true,
[3066] = true,
[3068] = true,
[3070] = true,
[3072] = true,
[3074] = true,
[3076] = true,
[3078] = true,
[3080] = true,
[3082] = true,
[3084] = true,
[3086] = true,
[3088] = true,
[3090] = true,
}
local tSigns = {}
for k,_ in pairs(SignsT) do
tSigns[#tSigns+1] = k
end
local rbs = FindItemInCont('Type',tRB)
for _,v in pairs(rbs) do
sName,sInfo = UO.Property(v['ID'])
wait(50)
if sInfo:match('IDOC') then
IDOCBooks[ v['ID'] ] = tonumber(sInfo:match('IDOC[%d ]+'):match('[%d]+'))
NonIDOC[ v['ID'] ] = {}
for i = 1, IDOCBooks[ v['ID'] ] do
NonIDOC[ v['ID'] ][i] = true
end
end
end
function GetTime(sTime,cTime,sHr,sMin,sSec)
sHr = sHr or 0
sMin = sMin or 0
sSec = sSec or 0
local hrs,mins,sec = 0,0,0
local timer = math.floor(( cTime - sTime ) / 1000)
mins,sec = math.modf(timer/60)
hrs,mins = math.modf(mins/60)
sec = math.floor(sec*60)
mins = math.floor(mins*60)
local idocHr = sHr + hrs
local idocMin = sMin + mins
local idocSec = sSec + sec
while idocSec > 59 do
idocMin = idocMin + 1
idocSec = idocSec - 60
end
while idocMin > 59 do
idocHr = idocHr + 1
idocMin = idocMin - 60
end
while idocHr > 23 do
idocHr = idocHr - 24
end
return idocHr,idocMin,idocSec
end
local tOutBook = nil
local tOutRune = nil
UO.SysMessage('Target Time Out Book')
UO.TargCurs = true
while UO.TargCurs do wait(1) end
tOutBook = UO.LTargetID
local key = { 1,2,3,4,5,6,7,8,9,0 }
local sKey = { 1,2,3,4,5,6 }
local tOut = getticks()
while not tOutRune do
if tOut < getticks() then
UO.SysMessage('Press 1-0 for runes 1-10, hold shift and press 1-6 for 11-16')
tOut = getticks() + 4000
end
for _,v in pairs(key) do
if getkey(tostring(v)) and not getkey('Shift') then
tOutRune = v
end
end
for _,v in pairs(sKey) do
if getkey(tostring(v)) and getkey('Shift') then
tOutRune = v
end
end
end
RBTravel(tOutBook,'Recall',tOutRune)
UO.SysMessage('If this is correct press play, otherwise stop and restart')
pause()
while not getkey('F12') do
local bLeft = false
local rtTimer = getticks() + 1000*60*5
for bookID,runeCnt in pairs(IDOCBooks) do
bLeft = true
for i = 1, runeCnt do
if NonIDOC[bookID][i] then
RBTravel(bookID,'Recall',i)
wait(2000)
local signs = FindItemOnGround('Type',tSigns,10)
for _,v in pairs(signs) do
local sName,sInfo = UO.Property(v['ID'])
while sName == '' do
wait(250)
sName,sInfo = UO.Property(v['ID'])
end
if sInfo:match('In Danger') then
local tHr,tMin = GetTime(timer,getticks(),sHr,sMin)
print('Book '..tostring(bookID)..' Rune '..tostring(i)..' went IDOC at '..tostring(tHr)..':'..tostring(tMin))
NonIDOC[bookID][i] = false
end
end
end
local cBook = false
for i = 1, runeCnt do
if NonIDOC[bookID][i] then cBook = true end
end
if not cBook then
IDOCBooks[bookID] = nil
end
end
end
RBTravel(tOutBook,'Recall',tOutRune)
while rtTimer > getticks() do
wait(1000)
end
if not bLeft then
break
end
end
But it's been a while, I don't remember how to set it up,a nd it's all hard coded (and dependent upon my library functions).. I think you have to set the time you start the script since oEUO doesn't have clock access, only systime (ms since computer was turned on). So you can calculate the time from the start time and estimate fall time, but now it would be a random of 6, 12, and 18 hours I think, instead of the time it lists.