Wauzie Geplaatst: 6 februari 2005 Rapport Geplaatst: 6 februari 2005 (bewerkt) Ik heb een vraagje over Threads. Ik heb geprobeerd een thread te maken. Als je in een marker gaat staan komt er een PCJ600 naast je te staan. Maar helaas loopt hij dan heel snel vast, soms hangt ie niet, soms wel. Kan iemand mij uitleggen wat ik verkeerd doe. DEFINE VERSION VICE 1.30002: jump ££SecondSegment DEFINE MEMORY 34329 :SecondSegment 0002: jump ££ThirdSegment DEFINE OBJECTS 1 DEFINE OBJECT (no name) ;; This is an unused object. You can put anything here. :ThirdSegment 0002: jump ££LabelMAIN DEFINE MISSIONS 0 ;-------------MAIN--------------- :LabelMAIN 03A4: name_thread "MAIN" 016A: fade 0 0 ms 01F0: set_max_wanted_level_to 6 0111: set_wasted_busted_check_to 0 (disabled) 00C0: set_current_time 12 0 04E4: unknown_refresh_game_renderer_at 83.0 -849.8 03CB: set_camera 83.0 -849.8 9.3 0053: $PLAYER_CHAR = create_player #NULL at 771.858 159.478 13.799 01F5: $PLAYER_ACTOR = create_emulated_actor_from_player $PLAYER_CHAR 0001: wait 0 ms 01B6: set_weather 0 00D6: if 0 8118: NOT actor $PLAYER_ACTOR dead 004D: jump_if_false ££LabelMAIN2 0352: set_actor $PLAYER_ACTOR skin_to "PLAYER" 038B: load_requested_models 0353: refresh_actor $PLAYER_ACTOR :LabelMAIN2 016A: fade 1 (back) 1000 ms 00D6: if 0 0256: player $PLAYER_CHAR defined 004D: jump_if_false ££LabelMAIN3 04BB: select_interiour 0 ;; select render area 01B4: set_player $PLAYER_CHAR frozen_state 1 (unfrozen) 01B7: release_weather 004F: create_thread ££LabelWAUZIE :LabelWAUZIE 03A4: name_thread "TEST" 0167: $6 = create_marker_at 762.116 156.443 13.899 1 3 :LabelWAUZIE2 0001: wait 0 ms 00D6: if 0 00F6: player $PLAYER_CHAR 1 (in-sphere)near_point_on_foot 762.116 156.443 13.899 radius 1.4 1.8 1.5 004D: jump_if_false ££LabelWAUZIE2 00A5: $7 = create_car #PCJ600 at 771.423 150.474 14.299 0175: set_car $7 z_angle_to 85.1412 0164: disable_marker $6 004E: end_thread :LabelMAIN3 0001: wait 2500 ms 0002: jump ££LabelMAIN3 Bewerkt: 6 februari 2005 door Wauzie Reageren
PatrickW Geplaatst: 6 februari 2005 Rapport Geplaatst: 6 februari 2005 Niet slecht wauzie, je lijkt de basis van scm modding onder de knie te hebben. Ik heb naar je code gekeken, en er zijn een paar dingen mis: * Dit is de oorzaak dat je thread regelmatig crashed, wanneer je de motor verwacht. Voor je een vehicle van een bepaald model kun "spawnen", moet je eerst het model voor die auto laden, en wachten tot dat klaar is: 0247: request_model #PCJ600 038B: load_requested_models :Label_wachtopmodel 00D6: if 0 8248: NOT model #PCJ600 available 004D: jump_if_false £Label_spawn_pcj 0001: wait 0 ms 0002: jump £Label_wachtopmodel :Label_spawn_pcj Als je dat niet doet, crashed de game op het moment dat het voertuig gespawned moet worden, tenzij het model toevallig aanwezig is, omdat er een voertuig van dat type in de buurt staat/rijdt * Nadat je de create_thread hebt aangeroepen, moet je de main thread in een eindeloze lus laten eindigen, deze stond nu helemaal achteraan, maar moet dus voor de code van de thread. Zoals je het nu had, ging zowel de bestaande "main" thread als de nieuwe thread de code achter "LabelWAUZIE" uitvoeren. * Na een "wait" moet je altijd eerst een "if player defined" check hebben gedaan voordat je weer de variabelen PLAYER_CHAR of PLAYER_ACTOR weer mag gebruiken. Als je dit niet doet, kan de game crashen als de speler dood gaat, of wordt ge-arresteerd. Hieronder heb ik je code aangepast.... Ik heb het nog niet gecompileerd/getest, maar het zou wel moeten werken...... Succes DEFINE VERSION VICE 1.3 0002: jump ££SecondSegment DEFINE MEMORY 34329 :SecondSegment 0002: jump ££ThirdSegment DEFINE OBJECTS 1 DEFINE OBJECT (no name) ;; This is an unused object. You can put anything here. :ThirdSegment 0002: jump ££LabelMAIN DEFINE MISSIONS 0 ;-------------MAIN--------------- :LabelMAIN 03A4: name_thread "MAIN" 016A: fade 0 0 ms 01F0: set_max_wanted_level_to 6 0111: set_wasted_busted_check_to 0 (disabled) 00C0: set_current_time 12 0 04E4: unknown_refresh_game_renderer_at 83.0 -849.8 03CB: set_camera 83.0 -849.8 9.3 0053: $PLAYER_CHAR = create_player #NULL at 771.858 159.478 13.799 01F5: $PLAYER_ACTOR = create_emulated_actor_from_player $PLAYER_CHAR 0001: wait 0 ms 01B6: set_weather 0 00D6: if 0 8118: NOT actor $PLAYER_ACTOR dead 004D: jump_if_false ££LabelMAIN2 0352: set_actor $PLAYER_ACTOR skin_to "PLAYER" 038B: load_requested_models 0353: refresh_actor $PLAYER_ACTOR :LabelMAIN2 016A: fade 1 (back) 1000 ms 00D6: if 0 0256: player $PLAYER_CHAR defined 004D: jump_if_false ££LabelMAIN3 04BB: select_interiour 0 ;; select render area 01B4: set_player $PLAYER_CHAR frozen_state 1 (unfrozen) 01B7: release_weather 004F: create_thread ££LabelWAUZIE :LabelMAIN3 0001: wait 2500 ms 0002: jump ££LabelMAIN3 :LabelWAUZIE 03A4: name_thread "TEST" 0167: $6 = create_marker_at 762.116 156.443 13.899 1 3 :LabelWAUZIE2 0001: wait 0 ms 00D6: if 0 0256: player $PLAYER_CHAR defined 004D: jump_if_false ££LabelWAUZIE2 00D6: if 0 00F6: player $PLAYER_CHAR 1 (in-sphere)near_point_on_foot 762.116 156.443 13.899 radius 1.4 1.8 1.5 004D: jump_if_false ££LabelWAUZIE2 0247: request_model #PCJ600 038B: load_requested_models :Label_wachtopmodel 00D6: if 0 8248: NOT model #PCJ600 available 004D: jump_if_false £Label_spawn_pcj 0001: wait 0 ms 0002: jump £Label_wachtopmodel :Label_spawn_pcj 00A5: $7 = create_car #PCJ600 at 771.423 150.474 14.299 0175: set_car $7 z_angle_to 85.1412 0164: disable_marker $6 0249: release_model #PCJ600 004E: end_thread Reageren
Wauzie Geplaatst: 8 februari 2005 Auteur Rapport Geplaatst: 8 februari 2005 Hardstikke bedankt voor de uitleg, ik steek er veel van op. Maar toen ik de verbeterde regels in de main zettu gaf de missionbuilder aan: You can't use LOCAL jump instructions in the MAIN part of the code. Use ££ in the front of a label to jump far/global Ik snap niet wat er precies mee bedoelt wordt en weet dus niet waar de fout ergens zit, zou mij dat mij even willen vertellen? Reageren
Na$! Geplaatst: 8 februari 2005 Rapport Geplaatst: 8 februari 2005 je moet denk ik niet altijd de hooflabel gebruiken maar voor de label (dus i de main vande label) dit gebruiken ££ (hoop dat het juist is ) verbeter me als het niet zo is . Reageren
PatrickW Geplaatst: 8 februari 2005 Rapport Geplaatst: 8 februari 2005 Ik zie dat ik inderdaad een foutje heb gemaakt: 0247: request_model #PCJ600 038B: load_requested_models :Label_wachtopmodel 00D6: if 0 8248: NOT model #PCJ600 available 004D: jump_if_false £Label_spawn_pcj 0001: wait 0 ms 0002: jump £Label_wachtopmodel :Label_spawn_pcj moet eigenlijk dit zijn 0247: request_model #PCJ600 038B: load_requested_models :Label_wachtopmodel 00D6: if 0 8248: NOT model #PCJ600 available 004D: jump_if_false ££Label_spawn_pcj 0001: wait 0 ms 0002: jump ££Label_wachtopmodel :Label_spawn_pcj Je moet dus op twee plekken een enkele £ vervangen door een dubbele ££. De reden heeft wat achtergrond uitleg nodig: De main.scm bestaat uit twee delen: Het MAIN deel en het MISSIONS deel. Het MISSIONS deel zijn de stukken waarnaar verwezen wordt in de MISSIONS tabel bovenin de file. Dit is grofweg de tweede helft van de main.scm. De eerste helft is het MAIN deel, hierin staan alle normale threads. De reden van dit onderscheid is dat het MAIN gedeelte altijd in het geheugen geladen is, en de threads die daarin staan dus ook continue kunnen blijven draaien. De missies uit het MISSIONS deel worden pas geladen op het moment dat de betreffende missie wordt uitgevoerd. Er is op elk moment dus hoogstens code voor 1 missie geladen. Door dit bovenstaande verschil is ook het gebruik van labels in beide delen anders, Als je een label in het MAIN deel gebruikt, moet je er een dubbele ££ voorzetten. In het MISSIONS deel moet er een enkele £ voor staan. Dit heeft een technische oorzaak waar ik nu maar even niet op in ga. Het probleem was dus dat ik een stuk code had gekopieerd uit het MISSIONS gedeelte, en had vergeten de enkel £ te vervangen door een dubbele ££. Reageren
Wauzie Geplaatst: 9 februari 2005 Auteur Rapport Geplaatst: 9 februari 2005 Ok, bedank voor deze informatie, nu ga ik het iets uitbreiden. Dat je een wapen krijgt en zo.......... 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.