-
| .
|
Contadino
- Group
- Member
- Posts
- 45
- Reputation
- 0
- Status
- Offline
|
|
Esiste un codice per arrestare una sequenza che non sia quella in cui è scritto il codice stasso? Grazie in anticipo.
|
|
| .
|
-
| .
|
Guerriero
- Group
- Eroi
- Posts
- 2,161
- Reputation
- +155
- Location
- Sardegna
- Status
- Anonymous
|
|
Desumendo da quanto hai scritto, credo tu intenda creare una sequenza costituita da un loop infinito e che viene interrotta da un altro comando posto all'interno di un'altra sequenza. Non esiste un comando che ottempera a tale funzione, ma puoi sempre usare le variabili d'ambiente (o variabili globali), che ti danno la facoltà di manipolare una determinata variabile (stringa o numero intero) in ogni sequenza di ogni mappa dell'avventura: è per tale ragione che si tratta di uno strumento molto potente.
In quanto all'utilizzo, ti basta porre, come condizione del while, la variabile d'ambiente tramite il seguente codice:
CODICE while(EnvReadInt("NOMEVARIABILE")==0){ //ISTRUZIONI ; }
Questo è l'archetipo della sequenza che hai realizzato tu, con la variabile d'ambiente che regola la continuazione/interruzione del loop. Per far si che tale sequenza si interrompa tramite l'ordine impartito da un'altra sequenza, posto che essa sia già attiva quando il valore viene cambiato, devi semplicemente scrivere questo:
CODICE EnvWriteInt("NOMEVARIABILE",1);
Assicurati che il nome della variabile sia IDENTICO, altrimenti il gioco le utilizzerà come due variabili differenti, con il risultato che il ciclo non si interromperà mai. Spero di essere stato chiaro e che questa sia la soluzione al tuo problema.
|
|
| .
|
-
| .
|
Contadino
- Group
- Member
- Posts
- 45
- Reputation
- 0
- Status
- Offline
|
|
Grazie mile della risposta. Era esttamente quello che mi serviva però ha funzionato solo in parte. In pratica succede che invece di essere un'azione ripetuta diventa un'azione che succede una volta sola. C'è un modo per fare in modo che non succeda proprio? Grazie in anticipo.
|
|
| .
|
-
| .
|
Guerriero
- Group
- Eroi
- Posts
- 2,161
- Reputation
- +155
- Location
- Sardegna
- Status
- Anonymous
|
|
Non ho ben capito, ciò che intendi. Potresti postare le sequenze coinvolte?
|
|
| .
|
-
| .
|
Contadino
- Group
- Member
- Posts
- 45
- Reputation
- 0
- Status
- Offline
|
|
Questa è quella che si ripete:
CODICE while(EnvReadInt("var1")==0){
while(!WaitUnitsInArea(Hadrianus1,"a16",100));
RunConv("conv17");
StartViewFollow(Hadrianus1);
BlockUserInput();
Hadrianus1.SetCommand("move",AreaCenter("a20"));
while(!WaitUnitsInArea(Hadrianus1,"a20",100));
UnblockUserInput();
StopViewFollow();
;
}
e questa è quella che ho fatto per prova che la arresta:
CODICE while(!WaitUnitsInArea(Hadrianus1,"atest",100));
SpawnGroup("gruppo9");
EnvWriteInt("var1",1);
Il mio problema è che quando la seconda sequenza dovrebbe annulare la prima comunque la fa svolgere una volta. Intendo che invece di ripetersi succede una volta sola ma io vorrei che non succedesse proprio. Grazie in anticipo
|
|
| .
|
-
| .
|
Guerriero
- Group
- Eroi
- Posts
- 2,161
- Reputation
- +155
- Location
- Sardegna
- Status
- Anonymous
|
|
Ci sono diversi appunti/correzioni/consigli che dovrei sollevare riguardo ai tuoi codici:
1) Evita di utilizzare troppo spesso e/o a sproposito il ciclo while. Ricorda che si tratta di un ciclo molto utile, ma è anche molto potente e richiede un enorme capacità di calcolo al computer; 2) Non utilizzare le funzioni latenti (per intenderci quelle che iniziano con Wait), tranne quella per le conversazioni (WaitConvRequest), perché risultano pesantemente buggate (a difficoltà difficile la sequenza non funzionerà); 3) Utilizza SEMPRE uno Sleep in una sequenza con while, anche con un valore basso (ad esempio 10), perché evita al gioco di eseguire l'intero blocco di istruzioni ben 1000 volte al secondo; 4) Utilizza nomi di variabili comprensibili e distinguibili, perché eviti un sacco di grattacapi (pensa a 100 diverse aree che si chiamano "area1", "area2", "area3" e così via: quanto è difficile identificarle immediatamente in una mappa?);
Le sequenze andranno riscritte in questo modo:
CODICE while(EnvReadInt("var1")==0){ if((AreaObjs("a16","Military").Contains(Hadrianus1) && EnvReadInt("var1")==0)){ RunConv("conv17"); StartViewFollow(Hadrianus1); BlockUserInput(); Hadrianus1.SetCommand("move",AreaCenter("a20")); Sleep(5000); UnblockUserInput(); StopViewFollow(); } Sleep(100); }
CODICE while(!AreaObjs("atest","Military").Contains(Hadrianus1)){ Sleep(100); } SpawnGroup("gruppo9"); EnvWriteInt("var1",1);
|
|
| .
|
-
| .
|
Contadino
- Group
- Member
- Posts
- 45
- Reputation
- 0
- Status
- Offline
|
|
Grazie mille dei consigli, in questo modo ha funzionato.
|
|
| .
|
6 replies since 16/6/2018, 16:06 100 views
.