Author Topic: IDOC Rail system  (Read 2507 times)

0 Members and 1 Guest are viewing this topic.

Offline Dread385Topic starter

  • Jr. Member
  • **
  • Posts: 33
  • Activity:
    0%
  • Reputation Power: 1
  • Dread385 has no influence.
  • Respect: +9
  • Referrals: 0
    • View Profile
IDOC Rail system
« on: August 18, 2015, 03:20:26 PM »
0
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

Offline TrailMyx

  • Officially retired from UO
  • Administrator
  • *
  • *
  • Posts: 13303
  • Activity:
    0.4%
  • Reputation Power: 154
  • TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!TrailMyx is awe-inspiring!
  • Gender: Male
  • Viper!
  • Respect: +1349
  • Referrals: 33
    • View Profile
    • ScriptUO
Re: IDOC Rail system
« Reply #1 on: August 18, 2015, 03:23:26 PM »
0
Probably didn't take off because it wasn't widely available and it was very complex.
Please read the ScriptUO site RULES
Come play RIFT with me!

Offline KaliOfLS

  • That's "Dr." Kali to you!
  • Sr. Member
  • *
  • Posts: 406
  • Activity:
    0%
  • Reputation Power: 6
  • KaliOfLS has no influence.
  • Gender: Male
  • Respect: +33
  • Referrals: 2
    • View Profile
Re: IDOC Rail system
« Reply #2 on: August 18, 2015, 03:29:48 PM »
0
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
Code: [Select]
--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.

Code: [Select]
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.

« Last Edit: August 18, 2015, 03:38:17 PM by KaliOfLS »
R~~~~ B~~~~~~~~ 
^ real life signature for sure

Tags: