annuncio

Comprimi
Ancora nessun annuncio.

[DOMANDA] X Easy UO aiutino x uno script

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

  • [DOMANDA] X Easy UO aiutino x uno script

    Ciao avevo un problemin con uno script di drag & drop molto semplice

    codice:
    ; Script Sposta_Item by Fex
    
    gosub SelectContainerDrag
    gosub SelectItem
    gosub SelectContainerDrop
    gosub GetTarget
    
    mainloop:
    gosub spostaitem
    goto mainloop
    
    SUB GetTarget
       NAMESPACE push
       NAMESPACE local GetTarget
       set %xposition 40
       set %yposition 70
    
       
       RETURN #result
        
    
    SUB SelectItem
       NAMESPACE push
       NAMESPACE local SelectItem
        SET #LTARGETID N/A
       DISPLAY OK Please select the item type you want to drag.
       SET #TARGCURS 1
       _SelectItem_ReCheckClick:
       IF #TARGCURS = 1
          GOTO _SelectItem_ReCheckClick
       FINDITEM #LTARGETID
       SET %item #FINDTYPE
       SET #RESULT %item
    
    RETURN #RESULT
    
    SUB SelectContainerDrag
       NAMESPACE push
       NAMESPACE local CavsSelectContainer
          SET !containertypes CKF_LKF_ZJF_JIF_HIF_KIF_IIF_CUD_HKF_VMF_
                           +BUD_WMF_TMF_UMF_KKF_ZTD_ABG_CTD_AUD_SPF_
                           +JKF_OKF_OVH_KUD_JIF_HIF_IIF_KIF_KIR_JIR_DYM_
       SET #LTARGETID N/A
       DISPLAY OK Please select your drag container.
       SET #TARGCURS 1
       SelectContainerDrag_ReCheckClick:
       IF #TARGCURS = 1
          GOTO SelectContainerDrag_ReCheckClick
       FINDITEM #LTARGETID
       IF #FINDTYPE notin !containertypes
          {
          DISPLAY YESNO This is not a valid container. $
                        +Would you like to re-target your container?
          IF #DISPRES = YES
             {
             SET #TARGCURS = 1
             GOTO SelectContainerDrag_ReCheckClick
             }
          IF #DISPRES = NO
             {
             SET #RESULT #FALSE
             GOTO SelectContainerDrag_Done
             }
          }
       SET %container_risorse #FINDID
       SET #RESULT %container_risorse
       SET #LOBJECTID %container_risorse
          WAIT 10
          EVENT macro 17 0
          WAIT 10
       SelectContainerDrag_Done
       NAMESPACE pop
    RETURN #RESULT
    
    SUB SelectContainerDrop
       NAMESPACE push
       NAMESPACE local CavsSelectContainer
       SET !containertypes CKF_LKF_ZJF_JIF_HIF_KIF_IIF_CUD_HKF_VMF_
                           +BUD_WMF_TMF_UMF_KKF_ZTD_ABG_CTD_AUD_SPF_
                           +JKF_OKF_OVH_KUD_JIF_HIF_IIF_KIF_KIR_JIR_DYM_
       SET #LTARGETID N/A
       DISPLAY OK Please select your drop container.
       SET #TARGCURS 1
       SelectContainerDrop_ReCheckClick:
       IF #TARGCURS = 1
          GOTO SelectContainerDrop_ReCheckClick
       FINDITEM #LTARGETID
       IF #FINDTYPE notin !containertypes
          {
          DISPLAY YESNO This is not a valid container. $
                        +Would you like to re-target your container?
          IF #DISPRES = YES
             {
             SET #TARGCURS = 1
             GOTO SelectContainerDrop_ReCheckClick
             }
          IF #DISPRES = NO
             {
             SET #RESULT #FALSE
             GOTO SelectContainerDrop_Done
             }
          }
       SET %container_drop #FINDID
       SET #RESULT %container_drop
       SET #LOBJECTID %container_drop
          WAIT 10
          EVENT macro 17 0
          WAIT 10
       SelectContainerDrop_Done
       NAMESPACE pop
    RETURN #RESULT
    
    SUB spostaitem
       _spostaitem_ReSearch:
       FINDITEM %item C_ , %container_risorse
       IF #FINDKIND <> -1
          {
          EXEVENT Drag #FINDID #FINDSTACK
          WAIT 10
          EXEVENT Dropc %container_drop %xposition %yposition
          WAIT 10
          SET #RESULT #TRUE
          GOTO _spostaitem_ReSearch
             }
       IF #FINDKIND = - 1
        {
         DISPLAY OK Hai finito di spostare gli oggetti
         halt
         }
     goto mainloop
    RETURN
    in pratica nella SUB GetTarget mi servirebbe di prendere le coordinate interne al contenitore del drop attraverso un target per droppare gli item tutti nello stesso posto scelto
    sulla guida di easy uo l'unica soluzione che ho trovato è mettere le coordinate a mano
    grazie x le risposte
    Zio Fex
    Ultima modifica di Aramon; 13-05-2015, 02:47.
    Discord: Fex#2112

    sigpic
    Zio Fex [TMG] Mago Negromante Arcanista Elfo Pazzo
    FeXTeR [TMG] Sworder Negromante Samurai Ammazzatutti
    Nevaria [TMG] Paladina Tamer Maga Arcanista
    ToDo LoCo [TMG] Carpenter Bowyer Fabbro Tailor Worker Criminale
    Ghiro [TMG] Tinker Cook Golem Collector
    Mogur [TMG] Tamer Disco Spellweaver
    AnnibalSmith [TMG] Thief

  • #2
    l'organizaer di uos non fa la stessa cosa?
    . . . . . . . . . . . . . . . . .


    . . . . . . . . . . . . . . . . .

    GM Kriegstreiber Käse®
    Discord: Jack___#9551

    Commenta


    • #3
      purtroppo non c'e' un a variabile "pronta" per sapere a quali coordinate si trova un item all'interno di un contenitore...
      puoi pero' calcolarla, ma per capire come funziona il tutto bisogna partire da alcuni concetti che cerchero' di spiegare in soldoni...

      in uo ogni item rappresentato graficamente ha una immagine relativa con le proprie dimensioni. per motivi di compressione ogni immagine e' fondamentalmente memorizzata in forma rettangolare, per non dare questa sensazione alcune parti dell'immagine vengono "omesse" cioe' rappresentate come trasparenti.
      per farla breve: l'angolo in alto a sinistra e' il primo pixel che "viene rappresentato sullo schermo" ed ha coordinate 0, 0 relativamente all'immagine... l'ultimo pixel ovviamente ha coordinate che dipendono in base alla dimensione dell'immagine.

      prendiamo in esempio un backpack:


      da easyuo possiamo sapere che l'immagine nel complesso e' grande 230 pixel in larghezza per 204 pixel in altezza, come si vede bene il punto 0,0 del backpack non e' rappresentato nel gioco ed e' trasparente.
      gli item che mettiamo pero' al suo interno non possono essere rappresentati su tutta l'immagine ma in uno spazio delimitato, che per convenzione chiameremo (erroneamente) offset.

      come dicevo all'inizio non abbiamo una variabile pronta per individuare dove si trova un item relativamente al suo contenitore, ma abbiamo solamente a disposizione le sue coordinate assolute nel contesto della finestra di gioco (findx e findy).
      per calcolarne quindi tale posizione dobbiamo fare quindi la differenza tra le coordinate dell'oggetto n interesse e le coordinate relative del contenitore in cui e' contenuto.

      schematizzando cosa bisogna fare:

      finditem dell'oggetto targettato per ottenere le variabili che ad esempio saranno: findx = 165 findy = 105 [la posizione dell'item nella finestra di gioco]
      calcoliamo la differenza tra posizione del contenitore nella finestra di gioco sommati gli offset (dove inizia il rettangolo rosso), coordinate del contenitore che per esempio saranno: contposx = 125 contposy = 25 [che si traduce nella posizione del pixel 0,0 del backpack nella finestra di gioco]

      l'esempio si risolve quindi con:
      x relativa = 165 - ( 125 + 55 ) = 40
      y relativa = 105 - ( 25 + 75 ) = 80

      queste coordinate ottenute sono quelle che ti serviranno per posizionare alle stesse coordinate un item omologo in un contenitore omologo , nel caso del tuo script ti bastera assegnarle alle variabili xposition e yposition.
      a occhio dovrebbe essere la posizione in basso al centro dello zaino.

      note: tieni bene a mente che le variabili 'container' sono sempre relative al gump in primo piano, quindi all'ultimo selezionato per aggiornarle hai bisogno di riaprire o cliccare sul gump.
      ogni item ha dimensioni e offset differenti, quelle dell'esempio non sono accurate e infatti te le ho indicate con '~', dovrai trovare gli offset di ogni contenitore per far tornare i calcoli.
      tempo fa mi ero fatto uno script partendo da uno simile al tuo per restockare con ordine i miei vendor... ha richiesto svariate righe di codice e ancora non so se ne sia valsa la pena. non uso piu i vendor npc per vendere gli item ;D

      vista la spiegazione da cani sono disponibile, tempo permettendo, a rispiegare vari concetti e fare piu' esempi se necessario.
      in conclusione, forse facevo prima a scriverti un paio di sub che svolgano il lavoro, ma mi scoccia aprire il client XD

      ps: a SelectContainerDrag_Done mancano i ':'
      Ultima modifica di fengyr; 13-05-2015, 15:42.
      ____________________________________________________________________

      Il p Fengyr
      ____________________________________________________________________
      : algander#6292

      Commenta


      • #4
        memorizza le coordinate del cursore in queste variabili (ed es. dopo X secondi che hai cliccato OK su un msg a display) e le usi come destinazione del tuo drop

        #cursorX ⇒ Returns the x-coordinate of the cursor
        #cursorY ⇒ Returns the y-coordinate of the cursor

        non funziona all'interno di un contenitore?
        Ultima modifica di Ponza; 13-05-2015, 15:14.
        Contatti:
        Discord - Ponza#3577
        ICQ - 624970855

        Commenta


        • #5
          Originariamente inviato da Ponza Visualizza il messaggio
          memorizza le coordinate del cursore in queste variabili (ed es. dopo X secondi che hai cliccato OK su un msg a display) e le usi come destinazione del tuo drop

          #cursorX ⇒ Returns the x-coordinate of the cursor
          #cursorY ⇒ Returns the y-coordinate of the cursor

          non funziona all'interno di un contenitore?
          Se sposta la finestra poi clicca a vuoto o peggio su altre cose.

          Commenta


          • #6
            fare invece il confronto col colore del pixel cliccato puo' funzionare? o c'è rischio di non univocità sullo schermo?
            Contatti:
            Discord - Ponza#3577
            ICQ - 624970855

            Commenta


            • #7
              Metti che ci va un gump sopra e sei fregato.
              L'unica è quella di fengyr ed è una tecnica infallibile usata da quando easyuo è nato ed è una cavolata implementarla.

              Commenta


              • #8
                Grazie ragazzi
                Fengyr bella spiegazione io uso #contposx e #contposy + o - le coordinate interne al contenitore
                cmq forse l'unico modo sarebbe mettere una finestrella dove si setta %xposition e %yposition cosi si scelgono le coordinate del Dropc %container_drop %xpositon %yposition...
                ci ritornerò su qndo imparo a fare i menu
                Dave l'organizer di steam posizione gli item tutti nell'angolo in alto a sinistra...io volevo fare uno script che te li posiziona dove ti pare...
                P.S.: Fengyr i ':' dove li devo mettere ? dopo SelectContainerDrag_Done ?
                Ultima modifica di Aramon; 13-05-2015, 20:50.
                Discord: Fex#2112

                sigpic
                Zio Fex [TMG] Mago Negromante Arcanista Elfo Pazzo
                FeXTeR [TMG] Sworder Negromante Samurai Ammazzatutti
                Nevaria [TMG] Paladina Tamer Maga Arcanista
                ToDo LoCo [TMG] Carpenter Bowyer Fabbro Tailor Worker Criminale
                Ghiro [TMG] Tinker Cook Golem Collector
                Mogur [TMG] Tamer Disco Spellweaver
                AnnibalSmith [TMG] Thief

                Commenta


                • #9
                  esatto quel + o - sarebbero gli "offset" che ho cercato di spiegare, li trovi in tutte le salse negli script che hanno a che fare con i gump e gestiscono i click (vedi gli script per i bod)

                  si correggi quello alla fine della SUB SelectContainerDrag altrimenti il goto non te lo considera!

                  Ultima modifica di fengyr; 13-05-2015, 21:46.
                  ____________________________________________________________________

                  Il p Fengyr
                  ____________________________________________________________________
                  : algander#6292

                  Commenta

                  Sto operando...
                  X