Jump to content

Recommended Posts

Geplaatst: (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.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

: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: door Wauzie
Geplaatst:

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

Geplaatst:

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?

Geplaatst:

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 .

Geplaatst:

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 ££.

Geplaatst:

Ok, bedank voor deze informatie, nu ga ik het iets uitbreiden. Dat je een wapen krijgt en zo.......... :D

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.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...