annuncio

Comprimi
Ancora nessun annuncio.

[OpenEUO] script da provare

Comprimi
X
 
  • Filtro
  • Ora
  • Visualizza
Elimina tutto
nuovi messaggi

  • [OpenEUO] script da provare

    EDIT: 1. per il looter vedi sotto!
    2. corretto la formula del delay della bendata
    3. aggiunto check mortal, fix sul looter


    Nei ritagli di tempo che ho il fine settimana, mi sono rimesso a giocare qualche ora su dreams e perchè no, a scriptare
    Essendo passato quasi un anno dagli ultimi codici che ho scritto sono un pò arrugginito e praticamente sto ripartendo da 0 con il LUA, ovviamente i vecchi codici che avevo scritto sono andati persi.

    Insomma sarebbe molto utile se qualcuno avesse voglia di provare i miei script e dirmi quali problemi sorgono usandoli.
    Per adesso non contattatemi in privato, ormai non controllo piu msn ne icq quindi sono reperibile solo tramite il forum.
    Quindi eccovi un paio di script, molto basilari e funzionanti da provare.

    Il primo script in lavorazione è quello per la bendata:
    • contatore che scandisce i secondi sopra al pg
    • avverte quando si è a corto di bende (10 o meno)
    • controllo sul cursore per cercare di non interrompere i cast
    • da implementare: letture sul journal, in caso di errori, ritardi, interruzioni


    codice:
    -- Soglia di hp per iniziare a curarsi Default: UO.MaxHits per curare appena manca 1hp
    hits = UO.MaxHits 
    
    --Inizio script
    bandagetype = 3617 
    
    function main()
      local items
      nBende = ContaBende()    
      while true do
        wait(1)
        while UO.Hits < hits or string.find(UO.CharStatus,"C")  and not string.find(UO.CharStatus,"D") do
          if ContaBende() >= 1 then
            WaitCursor()
            UO.Macro(58,0)
            bandageTime = getticks() + 60
            if ContaBende() <= 10 then
              UO.SysMessage("hai solo " .. ContaBende() .. " bende!",233)
              end 
            counter() 
          end 
        end
      end
    end  
     
    
    function counter()
    timer = ( 11 -  ( UO.Dex - ( UO.Dex % 10 ) ) / 20 ) 
    if timer % 1 > 0 and UO.Dex % 20 > 0 then --arrotondamento x la formula secondo stratics
      timer = timer + 0.5
      end
    if timer < 5 then timer = 5 end --tempo healing minimo cappato a 5sec
      for i=timer,1,-1 do
        UO.ExMsg(UO.CharID,3,375,tostring(i))
        wait(1000)
      end 
    end
    
    function ContaBende()
    local cnt = UO.ScanItems(true)-1 
      for i=0,cnt do
        local id,type,kind,contid,x,y,z,stack,rep,col = UO.GetItem(i)
        if contid == UO.BackpackID and type == bandagetype and stack > 0 then
         idbende = id
         return stack 
        end
      end
    return false
    end
    
    function WaitCursor(t)
    if t == nil then
      timeout = 1000 + getticks ()
    else 
      timeout = t + getticks ()
      end
    while UO.TargCurs == true and timeout > getticks() do 
       wait (5)
       if timeout <= getticks() then
          return false
          end 
       end
    return true 
    end
    
    main()
    il secondo è un looter:
    • loota gold, gemme, questitem per i peerless, reagenti
    • soltanto per adesso: parte solo quando si preme il tasto
    • droppa direttamente nello zaino
    • da implementare:
    • taglio di pelli e ossa, uso della bag of sending, controlli sul peso, altre liste di loot
    • controlli supplementari per prevenire eventuali crash
    • menu e valutazione delle props degli item


    codice:
       -- variabili personalizzabili
    hotkey = "F5"
    lootgold = true
    lootgems = true
    lootpeerless = true
    lootreagent = true
    
    
    debug = true
    hidelooted = false
    
    --inizializzazione costanti e tavole
    corpsetype = 8198
    oldcorpses = {}
    errmsg = {
      ["Something is standing in your way"] = true,
      ["That is out of sight."] = true,
      ["You must wait to perform another action."] = true,
      ["You can not pick that up."] = true,
      ["Target cannot be seen."] = true,
      [UO.CharName..": I can't reach that."] = true,
      }  
      
    -- Liste loot
    gems = {3855,3856,3857,3859,3861,3862,3864,3865,3873,3877,3878,3885}
    gold = {3821}
    peerlesskeys = {3829,3975,4328,6880,7391,7406,7408,7583,8193,8194,8765,8766,8770
    ,8773,8775,8776,22334}
    reagents = {3960,3962,3963,3965,3966,3968,3969,3972,3973,3974,3976,3978,3980
    ,3981,3982,3983,12688,12689,16503}
    
    -- INIZIO SCRIPT 
    
    function buildlootlist ()
    lootlist = {}
    if lootgold then
       for k,v in pairs(gold) do
          table.insert(lootlist,v)
          end
    end
    if lootgems then
        for k,v in pairs(gems) do
          table.insert(lootlist,v)
          end
        end
    if lootreagent then
       for k,v in pairs(reagents) do
          table.insert(lootlist,v)
          end
       end
    if lootpeerless then
       for k,v in pairs(peerlesskeys) do
          table.insert(lootlist,v)
          end
       end
    end
    
    --presa da choosy non mi piace, DA RIFARE
    --[[Features: debug
        Parameter: range = 'number'
        Return: true at first matching item
                false if nothing found
    ]]--
    
    function FindCorpse(range)
      local i, c, dx, dy
      for i = 0,UO.ScanItems(true)-1 do
        local id,type,kind,contid,x,y,z,stack,rep,col = UO.GetItem(i)
        if type == 8198 then
          local skip = false
          for c = 1,#oldcorpses do
            if id == oldcorpses[c] then
              skip = true
            end
          end
          if not skip then
            dx = math.abs(x-UO.CharPosX)
            dy = math.abs(y-UO.CharPosY)
            if dy < range and dx < range then
              corpse = id
              return true
            end
          end
        end
      end 
      return false  
    end
    
    
    --[[Parameter needed: global variable corpse = 'ID'
        Returns: false if timed out or error occurs   
                 true and sets variables if success
                 public variables: ccX
                                   ccY
                                   corpseCont
    ]]--
    
    function OpenCorpse()
      UO.LObjectID = corpse
      local timeout = getticks() + 2000
      local tempCont = UO.ContID
      UO.Macro(17, 0, "")
      wait (100)
      repeat 
        if checkMsg(timeout - getticks()) then
          print("OpenCorpse function error: not possible to complete")
          return false
        end
        if corpsetype == UO.ContType and corpse == UO.ContID then
         corpseCont = UO.ContID
         ccX = UO.ContPosX + 75
         ccY = UO.ContPosY + 75
         return true
        end
        wait(1)
      until timeout < getticks()
    return false
    end
    
    --[[Parameter: timeout = 'number'
        return: true if message is found
                false if nothing
    ]]--
    
    function checkMsg(timeout)
      local ref = 0
      local i, jstr, col, cnt
      ref,cnt = UO.ScanJournal(ref)
      repeat
        wait(1)
        ref,cnt = UO.ScanJournal(ref)
      until cnt > 0 or timeout < getticks()
      if cnt < 1 then
        return false
      end
      for i = cnt-1,0,-1 do
        jstr,col = UO.GetJournal(i)
        if errmsg[jstr] then
          print(jstr)
          return true
        end
      end
    return false
    end
    
    function CloseCorpse()
      while UO.ContID == corpseCont do
        UO.Click(ccX,ccY,false,true,true,false)
        wait (20)
      end
      UO.HideItem(corpse)
    end
    
    function dropitem(it,amt,bag)
      UO.Drag(it,amt)
      wait(100)
      repeat
      UO.DropC(UO.BackpackID)
      until not checkMsg(2000) 
      wait(210)
        --print("drag item error")
        --return false
      --end
      return true
    end
    
    function CheckLoot()
      lootTable = {}
      itemAmt = {}
      local i, j, added
      for i = 0,UO.ScanItems(true)-1 do
        local id,type,kind,contid,x,y,z,stack,rep,col = UO.GetItem(i)
        added = false
        for j = 1,#lootlist do
          if type == lootlist[j] and contid == corpseCont then
            table.insert(lootTable,id)
            table.insert(itemAmt,stack)
            added = true
          end
        end
        --[[if not added and contid == corpseCont then
          if evaluate(id) > minvalue then
            table.insert(lootTable,id)
            table.insert(itemAmt,1)
          end
        end 
        ]]-- 
      end
      if #lootTable == 0 or #lootTable == nil then
        if hidelooted then CloseCorpse () end
        return false
      end
      return true
    end
    
    function LootCorpse()
      local i,timeout
      timeout = getticks() + 20000 
      CheckLoot ()
      repeat  
      for i = 1, #lootTable do
        if not dropitem(lootTable[i],itemAmt[i],lootbag) then
          print ("error looting?")
          return false
        end
      end
      until not CheckLoot () 
      return true
    end
    
    timestamp = function(ms)
    --UO.SysMessage ("Operazione completata in " .. getticks() - ms .. " millisecondi" , 51)
    print("Operazione completata in " .. getticks() - ms .. " millisecondi") 
    end
    
    function main()
       if FindCorpse (3) then
          timer = getticks()
          if OpenCorpse () then
            if LootCorpse () then
              UO.SysMessage ( "looted in " .. getticks() - timer .. "ms" , 233)  
              if hidelooted then CloseCorpse () end 
              table.insert(oldcorpses,corpse)   
            end
          else
              UO.SysMessage ( "looted in " .. getticks() - timer .. "ms" , 233)  
          end
       end
    end
    
    buildlootlist()
    repeat 
    if getkey(hotkey) then
      main()
      wait(600)
      end
      wait (5)
    until false == true
    edit: ho corretto un errore per cui non ignorava sempre i corpse lootati, inoltre ho aggiunto le liste per lootare reagenti e chiavi dei boss ML per poter fare più test. ovviamente usate lo script a vostro rischio e pericolo

    quello che mi interessa ora è la stabilità quindi provateli così come sono e scrivetemi qualsiasi cosa notiate, anche i dettagli possono aiutare
    Ultima modifica di fengyr; 15-03-2012, 16:54.
    ____________________________________________________________________

    Il p Fengyr
    ____________________________________________________________________
    : algander#6292

  • #2
    ho provato solo il looter e non mi funziona -.- sarà che sono nabbo!!!
    Icq 634-999-981

    Commenta


    • #3
      non l' ho ancora provato ma da quello che vedo devi usare il tasto F5 per attivarlo

      Commenta


      • #4
        scusate nella fretta non ho spiegato come usarli , è abbastanza intuitivo per quello delle cure basta avere le bende nello zaino e far partire lo script.

        il looter invece una volta premuto F5, apre il corpo più vicino al pg e mette nello zaino gold e gemme.

        se ci sono dei problemi con il lootere mettete debug = true e continuate a provarlo postate poi i messaggi che vengono scritti in OEUO nella casella sotto lo script (quella con scritto StackLvl1 per intenderci).

        domattina parto... vi aggiornerò tra mercoledì e venerdì, scrivete qui qualsiasi cosa.
        Ultima modifica di fengyr; 05-03-2012, 00:09.
        ____________________________________________________________________

        Il p Fengyr
        ____________________________________________________________________
        : algander#6292

        Commenta


        • #5
          Ma come si fa?
          Scarico OpenEUO, copio il codice dello script in un file .txt e lo salvo in .lua poi lo apro con OpenEUO?

          Commenta


          • #6
            quello delle bende calcola dei millesecondi in meno e quindi non entra la bendata

            Commenta


            • #7
              Originariamente inviato da gramoz Visualizza il messaggio
              Ma come si fa?
              Scarico OpenEUO, copio il codice dello script in un file .txt e lo salvo in .lua poi lo apro con OpenEUO?
              come per easyuo... prendi uno degli script lo salvi come .txt o .lua e clicki start in openeuo dopo averlo caricato.

              Originariamente inviato da seel82 Visualizza il messaggio
              quello delle bende calcola dei millesecondi in meno e quindi non entra la bendata
              provvederò a breve per risolvere il problema, grazie
              però o bisogno di sapere se l'errore avviene, con una bendata in circorsanze normali o quando passa il messaggio "your fingers slip"?
              nel primo caso sarebbe un bug, nel secondo una mancanza di implementazione, devo ancora mettere dei controlli sul journal per quando la bendata fallisce, viene ritardata (fingers slip) o non perte per qualche errore...


              datemi qualche feedback sul looter
              Ultima modifica di fengyr; 06-03-2012, 12:55.
              ____________________________________________________________________

              Il p Fengyr
              ____________________________________________________________________
              : algander#6292

              Commenta


              • #8
                No proprio quando si benda, se vuoi ne discutismo su icq

                Commenta


                • #9
                  Originariamente inviato da fengyr Visualizza il messaggio
                  come per easyuo... prendi uno degli script lo salvi come .txt o .lua e clicki start in openeuo dopo averlo caricato.
                  Allora ho eseguito tutto nel modo giusto ma quando vado ad avviarlo non parte, cioè il pulsantino verde (start) non si calza...

                  Commenta


                  • #10
                    Ciao,
                    ho creato qualche script anche io per questo nuovo LUA. Devo dire, per quel che mi è parso, che il programma per l'esecuzione degli script mi sembra ancora poco funzionante per rimpiazzare easyUO. Che dici? hai avuto la stessa senzasione oppure no?

                    Ciao e saluti ^_^


                    Se dovessi rinascere, farei l’idraulico ” – Albert Einstein

                    Commenta


                    • #11
                      Originariamente inviato da d_fenixlm Visualizza il messaggio
                      Ciao,
                      ho creato qualche script anche io per questo nuovo LUA. Devo dire, per quel che mi è parso, che il programma per l'esecuzione degli script mi sembra ancora poco funzionante per rimpiazzare easyUO. Che dici? hai avuto la stessa senzasione oppure no?

                      Ciao e saluti ^_^
                      Se intendi dire il parser (il programma che fa girare gli script), aldilà di alcune implementazioni avanzate (miglioramenti al supporto per il multi-threading) ed alcuni dettagli, credo che sia abbastanza completo e stabile. Certo l'interfaccia è un pò scarna (ma hanno pubblicato dei mod per renderlo più gradevole), ma si possono fare esattamente le stesse cose che il vecchio euox permetteva.

                      Se hai comunque dei dubbi scrivi pure anche nel forum, avevo tentato di avviare una discussione tempo fa, cercherò di aiutarti per quanto mi è possibile
                      ____________________________________________________________________

                      Il p Fengyr
                      ____________________________________________________________________
                      : algander#6292

                      Commenta


                      • #12
                        noyz ti ho scritto in ts oggi pomeriggio.

                        cmq credo di aver trovato il problema, ho cambiato la formula del contatore... provate ora la bendata
                        ____________________________________________________________________

                        Il p Fengyr
                        ____________________________________________________________________
                        : algander#6292

                        Commenta


                        • #13
                          Originariamente inviato da fengyr Visualizza il messaggio
                          noyz ti ho scritto in ts oggi pomeriggio.

                          cmq credo di aver trovato il problema, ho cambiato la formula del contatore... provate ora la bendata
                          provato, va alla perfezione! ora se mi ci metto provo a scriparlo pure io

                          ps: avro chiuso ts per la fretta oggi e non ho visto il messaggio!

                          Commenta


                          • #14
                            Originariamente inviato da seel82 Visualizza il messaggio
                            provato, va alla perfezione! ora se mi ci metto provo a scriparlo pure io

                            ps: avro chiuso ts per la fretta oggi e non ho visto il messaggio!
                            ottimo, ora metto dei controlli sul journal (per i messaggi di errore) ed è praticamente uno script completo... ricordo, i vantaggi rispetto a easyuo ovviamente sono assoluti. Sia per velocità di esecuzione (rispetto a script simili si guadagna qualche millisecondo, è una differenza impercettibile ma è bello pensare che ci sia un guadagno ;D) che nella gestione della memoria (anche qui qualche kbyte risparmiato).
                            ____________________________________________________________________

                            Il p Fengyr
                            ____________________________________________________________________
                            : algander#6292

                            Commenta


                            • #15
                              una cosa indispensabile credo sia mettere un Check sul mortal! Oggi pome se non c'ho da fare ci provo, almeno imparo qualcosina, comunque i checks sul journal aono inutili perche se non ti entra la bendata lo script ci cura lo stesso fini a che non sei al 100%

                              Commenta

                              Sto operando...
                              X