ReinierK Geplaatst: 2 november 2005 Rapport Geplaatst: 2 november 2005 (bewerkt) Weet iemand het 'echte' verschil tussen een WHILE loop en een WHILE_EXEC loop? De 'handleiding' is zo vaag hierover, dat ik er niet wijs uit wordt. Men zegt dat de WHILE_EXEC alle code in het command block uitvoert, maar dat lijkt me ook bij een gewone WHILE loop... En dan nog een gerelateerde vraag: Mijn missie bestaat uit 2 'delen': 1. schiet 4 guards neer, maar NIET de 'hoofdpersoon'. 2. Als '1' klaar is, gaat de 'hoofdpersoon' je volgen. Hoe script ik dit? Ik heb nu deze opzet: 1. WHILE loop voor de 4 guards, zolang ze nog niet alle 4 dood zijn blijven de arrows op hen gericht en blijft de loop chacken of zij nog leven en de hoofdpersoon niet dood is. 2. Zodra de 4 dood zijn zal hij naar de volgende WHILE loop gaan, die checkt of de 'hoofdpersoon' al in de auto zit. 3. Zodra de 'hoofdpersoon' in de auto zit, zal er weer een WHILE volgen die kijkt of de hoofdpersoon al met de auto in de gracht is geduwd. Kan dat op deze manier? Dus met 3 WHILE loops onder elkaar? P.S. kan een WHILE loop in een andere WHILE loop? Dus bijv: WHILE ( ( mis1_passed = 0 ) AND ( mis1_failed = 0 ) ) --counter1 WHILE_EXEC ( mis1_guard_kills < 4 ) //check if they all died ENDWHILE ENDWHILE Bewerkt: 2 november 2005 door ReinierK Reageren
Daedalus Geplaatst: 2 november 2005 Rapport Geplaatst: 2 november 2005 Volgens mij zitten er in de originele script ook meerdere WHILE loops achter elkaar. En genest zou moeten kunnen, dus WHILE binnen een WHILE. Reageren
ReinierK Geplaatst: 2 november 2005 Auteur Rapport Geplaatst: 2 november 2005 (bewerkt) Ok, dan ga ik dat ff proberen. Nog 1 vraag: hoe werkt de code tussen de LEVELSTART en LEVELEND precies? Ik wil graag alle phones uitzetten als ik op een missie ben ( SAVED_COUNTER player_on_mission = 1 ) en ze weer aan zetten als ik niet meer op een missie ben. Kan dat ook gewoon met een WHILE? Dus: WHILE ( NOT ( HAS_CHARACTER_DIED ( player1 ) ) ) IF ( player_on_mission = 1 ) STOP_PHONE ( phone1 ) STOP_PHONE ( phone2 ) ENDIF IF ( player_on_mission = 0 ) ANSWER_PHONE ( player1 , phone1 , -1 ) ANSWER_PHONE ( player1 , phone2 , -1 ) ENDIF ENDWHILE Bewerkt: 2 november 2005 door ReinierK Reageren
Daedalus Geplaatst: 2 november 2005 Rapport Geplaatst: 2 november 2005 Dat zou denk ik wel kunnen. Ook daar heb ik geen ervaring mee Probeer het eens, zou ik zeggen. Als het werkt, dan werkt het. Reageren
ReinierK Geplaatst: 2 november 2005 Auteur Rapport Geplaatst: 2 november 2005 (bewerkt) Ik denk dat ik eindelijk het verschil heb gevonden tussen de WHILE loop en de WHILE_EXEC loop. Hier komt het: WHILE_EXEC betekent dat all code binnen deze loop tegelijkertijd wordt gechecked, ik laat het even zien met een voorbeeld: //Hier kijk je tegelijkertijd naar de twee gebeurtenissen. Als je dus bijv. op een bepaald punt de ped1 neerschiet, stopt de loop. Maar ook als de ped1 de auto bereikt, de volgorde van de commando's maakt hier dus niet uit. Deze loop is geschikt voor bijv. het checken of bepaalde acties zijn uitgevoerd die in willekeurige volgorde plaats mogen vinden (bijv. het stelen van 3 auto's) WHILE_EXEC ( mission_passed = 0 ) IF ( CHARACTER_HAS_DIED ( ped1 ) ) ++mission_passed ENDIF IF ( IS_CHARACTER_IN_CAR ( ped1 , car1 ) ) ++mission_failed ENDIF ENDWHILE Een gewone WHILE is WEL afhankelijk van de volgorde, een voorbeeld: //Hier is het heel duidelijk dat er tijdens de loop een counter omhoog wordt gegooid, waarna de loop even wacht en dan pas het volgende commando uit zou voeren... Als je dit in een WHILE_EXEC loop zou gooien, dan zou het volgende gebeuren: de counter wordt omhoog gegooid, de speler krijgt (na 1000 cycles) geld en de WHILE_EXEC loop zou constant moeten wachten. Dit zal (denk ik) tot een crash leiden. WHILE ( IS_CHARACTER_IN_CAR ( player1 ) ) ++bonus_money DELAY_HERE ( 300 ) IF ( bonus_money > 1000 ) ADD_SCORE ( player1 , 1000 ) ENDIF ENDWHILE Ik hoop dat ik het wat duidelijk heb gemaakt. Dus even de regels: WHILE_EXEC --> Als je meerdere commando's tegelijk wilt uitvoeren of verschillende checks tegelijk wilt uitvoeren. WHILE -> Als je verschillende commando's en checks in een bepaalde volgorde wilt uitvoeren. Bewerkt: 2 november 2005 door ReinierK Reageren
Daedalus Geplaatst: 2 november 2005 Rapport Geplaatst: 2 november 2005 Ja, dat begreep ik ook al. Ik zie alleen niet waarom jouw eerste code niet in een gewone WHILE kan staan. Ik bedacht me dat het handig kan zijn als je binnen je while loop een subroutine aanroept. Het spel zal dan je subroutine starten en tegelijk de rest van de code in het blok. Anders start het eerst de subroutine, wacht tot die af is en start dan pas de rest van je code. Dat je DELAY_HERE niet in while_exec mag gebruiken staat ook vetgedrukt in de handleiding Ik denk niet dat dat crasht, maar dat het onverwachte resultaten geeft. Overigens lijkt het me niet handig om bijv. de waarde van bonusmoney te veranderen en dat dan te controleren binnen while_exec. Immers, je checkt dan iets wat net aan het veranderen is. Ik ben niet zeker welke waarde het script dan denkt dat bonusmoney heeft. Reageren
ReinierK Geplaatst: 2 november 2005 Auteur Rapport Geplaatst: 2 november 2005 Ik loop tegen een ENORM probleem aan... GTA2 crasht bij de volgende code: WHILE_EXEC ( NOT ( mis2_kill_total = 4 ) ) IF ( HAS_CHARACTER_DIED ( guard1 ) ) ++ mis2_kill_total REMOVE_ARROW ( arrow1 ) ENDIF ENDWHILE Ik ben echt radeloos... Ik weet dat het aan die counter ligt, maar hoe increase ik die in godsnaam anders? Zo staat het ook in de handleiding en tch crasht GTA... AAAAAAAAAAAAAAAAAAAAAAAAAAAARG! Ok, ik heb hem al opgelost, ik moest de guard blijkbaar deleten... Maar nu zit ik weer vast... zucht... wat een ontzettend lompe scripttaal Reageren
Daedalus Geplaatst: 2 november 2005 Rapport Geplaatst: 2 november 2005 Volgens mij heb je daar dan while nodig ipv while_exec. Het wil mij ook niet echt lukken. Ik wil een guard die gewoon op zijn plekje staat en niks doet. Als de player gaat schieten gaat hij op de player schieten en als de player ophoudt met schieten, gaat hij terug naar zijn plek. Het lukt me wel dat hij begint te schieten als de player begint te schieten, maar als je dan stopt gaat hij wel gewoon door. Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.