annuncio

Comprimi
Ancora nessun annuncio.

[EASYUO HELP]Domanda generale

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

  • [EASYUO HELP]Domanda generale

    Stò studiando la teoria dello scriptaggio , volevo chiedervi cos'è il loop di uno script?
    Di solito come viene strutturato uno script? si procede alle variabili , poi al corpo dello script e dopo alle sub? come dovrei strutturarlo per organizzare al meglio?



    Edit : Altra domanda , ho bisogno di una sub richiamabile che controlli se è passata un'ora , tipo un check , come posso fare? ho visto che boydon nel bodgather ha usato una sub del genere

    sub timeOld
    set %time *RazielBodTime
    set %date_old *RazielBodDate
    set %seconds_old ( %time % 100 ) + ( ( %time % 10000 ) / 100 ) * 60 + ( %time / 10000 ) * 3600
    set %date_new #date

    if %time = N/A 2
    set %date_old #date
    set %seconds_old ( #time % 100 ) + ( ( #time % 10000 ) / 100 ) * 60 + ( #time / 10000 ) * 3600 - 3600 * %hoursBetweenBods
    return

    Qualcuno può aiutarmi in questo aspetto?posso inserire un goto sub in una sub?
    Ultima modifica di Simo63; 19-10-2009, 14:47.
    Sephirot [Fear]

    sigpic
    ICQ : 376331016

  • #2
    Se sei proprio alle prime armi, ti consiglio di cercare su google qualche tutorial sulla programmazione in generale, prima di cimentarti nello scripting su uo.
    Il Pascal è un ottimo linguaggio per imparare.
    (mi raccomando se cerchi tutorial, cerca programmazione procedurale/strutturata, non Object Oriented)

    Comunque il loop (in italiano: ciclo) è una struttura di controllo di un linguaggio di programmazione.
    Il suo scopo basilare è permettere di eseguire parti di codice più volte.
    Solitamente si concretizza ad alto livello con i costrutti WHILE e FOR (i più comuni, e presenti in quasi la totalità dei linguaggi di programmazione): è in pratica un blocco di codice, racchiuso dalla parola chiave WHILE o FOR, che viene ripetuto fin quando si verifica una certa condizione (indicata all'inizio del codice stesso).
    Ovviamente la sintassi esatta cambia da linguaggio a linguaggio, ma la sostanza è quella...
    Ultima modifica di Silkriver; 19-10-2009, 14:11.
    A man's IQ, yearly income, sexual prowess, ingenuity, physical appearance and generally every other aspect of his life can be condensed down to four digits: his Arena rating.

    Commenta


    • #3
      il Turbo Pascal già l'ho imparato , e per base di strutture iterattive è utile per easy , cmq loop sò cosa significa ma non capivo in easy perchè alcuni dividevono una parte con scritto loop , pensavo fosse il corpo principale del programma
      Sephirot [Fear]

      sigpic
      ICQ : 376331016

      Commenta


      • #4
        Il loop che leggi nei vari script è molto più probabilmente un "loop:" che è ben diverso...
        Quella è una label (poteva chiamarsi anche "cicciopasticcio:" l'importante sono i ":" dopo) e serve per segnare un punto di codice per poterci ritornare dopo con una istruzione "goto loop", creando effettivamente un ciclo.

        ATTENZIONE: IL TIPO DI PROGRAMMAZIONE "GOTO", SEBBENE IN VOGA NEGLI ANNI '80 (lol) E' FONDAMENTALMENTE UNA PRATICA SBAGLIATISSIMA (per motivi che non vi sto ad elencare qui), QUINDI SE POTETE SOSTITUITE TUTTI I "GOTO" CON DEI WHILE o FOR (è sempre possibile farlo, non vi preoccupate) OPPURE PRENDETEVI L'APPELLATIVO DI "SPAGHETTI PROGRAMMING" lol


        Per la tua seconda domanda, certo che è possibile richiamare una sub all'interno di un'altra sub... usando l'istruzione GOSUB <nomesub>.
        Al termine della sub "nomesub" l'esecuzione continua dall'istruzione dopo "GOSUB <nomesub>".
        Puoi usare la variabile di sistema #result per controllare eventuali valori restituiti da "nomesub"

        P.s.: "iterattive" non esiste come parola, per me hai fatto un mix tra "interattive" e "iterative" :P
        A man's IQ, yearly income, sexual prowess, ingenuity, physical appearance and generally every other aspect of his life can be condensed down to four digits: his Arena rating.

        Commenta


        • #5
          doppio post sry
          A man's IQ, yearly income, sexual prowess, ingenuity, physical appearance and generally every other aspect of his life can be condensed down to four digits: his Arena rating.

          Commenta


          • #6
            Potresti aiutarmi con la domanda che ho messo su Edit? per il momento riesco a implementarla ma non a pensare e a creare
            Sephirot [Fear]

            sigpic
            ICQ : 376331016

            Commenta


            • #7
              Originariamente inviato da Simo63 Visualizza il messaggio

              Edit : Altra domanda , ho bisogno di una sub richiamabile che controlli se è passata un'ora , tipo un check , come posso fare? ho visto che boydon nel bodgather ha usato una sub del genere

              sub timeOld
              set %time *RazielBodTime
              set %date_old *RazielBodDate
              set %seconds_old ( %time % 100 ) + ( ( %time % 10000 ) / 100 ) * 60 + ( %time / 10000 ) * 3600
              set %date_new #date

              if %time = N/A 2
              set %date_old #date
              set %seconds_old ( #time % 100 ) + ( ( #time % 10000 ) / 100 ) * 60 + ( #time / 10000 ) * 3600 - 3600 * %hoursBetweenBods
              return

              Qualcuno può aiutarmi in questo aspetto?posso inserire un goto sub in una sub?
              La variabile #systime indica, in millisecondi, il tempo trascorso da una certa data che al momento non ricordo

              Percui prendendolo come riferimento
              set %TimeOld #sistime
              puoi fare quando vuoi un check del tipo:

              If ( ( #systime - %TimeOld ) >= 3600000 )
              {
              blablabla
              }

              E.. sì puoi fare

              gosub sub1

              sub sub1
              gosub sub2
              return

              sub2
              wait 1s
              return

              basta che tu usi correttamente il comando "return"

              • nuovo icq : 442149577

              Commenta


              • #8
                non sono molto convinto , sicuro che funzioni?
                Sephirot [Fear]

                sigpic
                ICQ : 376331016

                Commenta


                • #9
                  cos'è che non ti convince?

                  In realtà è molto semplice: calcoli la variazione tra t0 (valore di riferimento) e t1 (valore attuale) e se questa supera i 3600000 ms (1 ora) allora l'"if" diventa vero e viene letto anche il codice tra le parentesi
                  Ultima modifica di lorenzo.cordiner; 19-10-2009, 23:41.

                  • nuovo icq : 442149577

                  Commenta


                  • #10
                    set %TimeOld #sistime
                    qui non capisco bene che fà
                    Sephirot [Fear]

                    sigpic
                    ICQ : 376331016

                    Commenta


                    • #11
                      è un semplice set di una variabile.
                      Le variabili con il # sono fornite da easyuo e in quella ci trovi il tempo attuale (nel formato che easyuo usa).

                      Commenta


                      • #12
                        grazie a tutti , sono un noob che si affaccia allo scriptaggio , vediamo che combino :P
                        Sephirot [Fear]

                        sigpic
                        ICQ : 376331016

                        Commenta


                        • #13
                          ah dimenticavo ovviamente l'azione deve essere ciclica ogni ora si ripete,,funziona così?
                          Sephirot [Fear]

                          sigpic
                          ICQ : 376331016

                          Commenta


                          • #14
                            Originariamente inviato da Simo63 Visualizza il messaggio
                            ah dimenticavo ovviamente l'azione deve essere ciclica ogni ora si ripete,,funziona così?
                            Questo non è un problema

                            codice:
                            Set %BaseTime #SYSTIME         ;Attribuisce a %BaseTime il valore tenuto in quel momento da #SYSTIME
                            
                            _Loop:    ;Questo è un "label" è una sorta di punto fermo a cui si può tornare usando "goto _Loop"  (il primo con ":" quello per tornareci invece senza)
                            If ( ( #systime - %BaseTime ) >= 3600000 ) ;controlla se è passata un'ora
                              {        ;se le condizioni dell' "If" vengono riscontrate legge anche ciò che c'è tra le parentesi
                               set %BaseTime #SYSTIME  ;questo è quello che ti interessa infatti così il contatore si riazzera permettendo,       finita l'azione che vuoi svolgere , di ricominciare a contare il tempo
                               Gosub AZIONECHEDEVIFARE
                              }
                            
                            Goto _Loop ;come dicevo sopra questo comando fa tornare al "label"
                            Visto che non ti era chiara prima:

                            le variabili precedute da % sono variabili standard: il valore attribuitole permane solo durante l'esecuzione in corso (N.B. non confondere con % usato nelle operazioni aritmtetiche in quel caso è il segno del modulo)

                            le variabili precedute da ! sono variabili namespace: il valore attribuitole permane fino al comando "namespace clear" (vedi namespaces)

                            le variabili precedute da # sono variabili di sistema e sono fornite dal client di uo a quello di easyuo (molto importanti per le azioni)

                            le variabili precedute da * sono variabili persistenti e vengono tenute nei registri di sistema, per questo possono essere utilizzate da più script in contemporanea ed inoltre non scompaiono alla fine dell'esecuzione


                            spero di non aver scritto un numero eccessivo di boiate
                            Ultima modifica di lorenzo.cordiner; 20-10-2009, 08:18.

                            • nuovo icq : 442149577

                            Commenta


                            • #15
                              la modifico in sub creando un piccolo script e diminuendo il tempo , ti faccio sapere come và a finire ^^
                              Sephirot [Fear]

                              sigpic
                              ICQ : 376331016

                              Commenta

                              Sto operando...
                              X