Jump to content

Simpele actor spawn = sa crash.


Recommended Posts

Geplaatst: (bewerkt)

Goedemidag, ik heb een probleempje met scm modding m.b.v. cleo en ik kom er maar niet uit. Ik probeerde een actor te spawnen aan de hand van de tutorial van Dutchy3010 en PatrickW, maar het lukt niet, want mijn san andreas crasht wanneer ik hem opstart. Ik heb cleo goed geïnstalleerd, want ik kan de 'gravity gun' mod ook al spelen.

Als iemand begrijpt wat ik fout heb gedaan in de volgende code ben ik hem of haar zeer dankbaar. _O_

{$CLEO .CS}
// Load models
0247: load_model #BFYST
038B: load_requested_models

:MODEL_LOAD
00D6: if
8248:   not model #BFYST available
004D: jump_if_false @MODEL_SPAWN
0001: wait 0 ms
0002: jump @MODEL_LOAD

:MODEL_SPAWN
10@ = Actor.Create(CIVFEMALE, #BFYST, 0.0, 0.0, 0.0)

//Hier komt wat je met je actor wilt doen

0249: release_model #BFYST

Alvast bedankt, :tu:

BB

Bewerkt: door Bierbuikje
  • Reacties 89
  • Created
  • Laatste reactie

Top Posters In This Topic

  • Bierbuikje

    40

  • Dutchy3010

    32

  • Beagle

    8

  • Crypteq

    3

Top Posters In This Topic

Posted Images

Geplaatst:

Wat houd dat in? En misschien is dat handig om aan jullie tutorial toe te voegen, het stond er namelijk niet bij voor zover ik me kan herinneren.

Bedankt dutchy. :tu:

Geplaatst: (bewerkt)

Dat je je thread beëindigt (geen idee of dat juist geschreven is).

In cleo is dat:

"0A93: end_custom_thread"

En als je gewoon script zonder cleo:

"004E: end_thread"

PS: Mij is altijd geleerd een wait te zetten voor een if.

:sigaar: Tom

Bewerkt: door .:TOM:.
Geplaatst: (bewerkt)

Dus je moet altijd en achter alles "0A93: end_custom_thread" zetten?

Oja, mijn oefening werkt.

scmmod2yu3.png

Bedankt voor de hulp. _O_ Nu door naar onderdeel wapens. :) Ik maak haar lekker dodelijk. :puh:

Bewerkt: door Bierbuikje
Geplaatst: (bewerkt)

Ja, als je je script wilt beëindigen zet je dat erachter. Maar alleen bij cleo, bij

gewoon mission scripten is het altijd: "004E: end_thread"

:sigaar: Tom

Bewerkt: door .:TOM:.
Geplaatst:
PS: Mij is altijd geleerd een wait te zetten voor een if.

Op zich kan dat geen kwaad, maar het levert wel heel erg veel wait's op.

Probleem daarvan is, dat als je een stabiel script wilt maken, je eigenlijk na elke wait weer moet checken of je player nog "defined" is, voor je iets met de $PLAYER_ACTOR of $PLAYER_CHAR mag doen.

Een betere richtlijn is dan ook:

Binnen iedere "lus" moet minstens 1 wait staan.

Met een wait geef je namelijk de game-engine de tijd om andere dingen te doen, en onderbreek je dus even de scm processing ( zelfs als het een "wait 0 ms" is).

Geplaatst:
Wat houd dat in? En misschien is dat handig om aan jullie tutorial toe te voegen, het stond er namelijk niet bij voor zover ik me kan herinneren.

Nee, want het zijn SCM tutorials, geen CLEO tutorials. Ik raad je aan om eerst de basis van het SCM'en te leren, anders komt er van mooie mods ook niets terecht. Iemand die kan SCM'en kan ook CLEO scripten (andersom is trouwens niet altijd het geval). Maar je moet meer kunnen dan een actor spawnen, wil je goede mod maken. Daarom raad ik je aan om deze tutorial goed door te lezen: daarin staan bijvoorbeeld de structuren die je moet gebruiken bij missies. Succes.

Geplaatst:

Nu wil ik graag dat dat vrouwtje die ik heb gespawnd telkens herspawnt. Nu valt ze daar neer met een minigun en als ik haar aanval probeert ze me te vermoorden, op het moment dat ik haar heb vermoord ligt ze daar non-stop, al vlieg ik eerst een rondje om las venturas heen en kom dan weer terug, ze ligt daar heerlijk te zonnen. Hoe kan ik ervoor zorgen dat ze respawnt? Als ik onder het script "return" zet dan gebeurt er niets en als ik neerzet "jump @Bierbuikje" (eerste label) gebeurt er ook niets. :?

Alvast bedankt! :tu:

Geplaatst:

Het gaat toch om deze code?:

{$CLEO .CS}
// Load models
0247: load_model #BFYST
038B: load_requested_models

:MODEL_LOAD
00D6: if
8248:   not model #BFYST available
004D: jump_if_false @MODEL_SPAWN
0001: wait 0 ms
0002: jump @MODEL_LOAD

:MODEL_SPAWN
10@ = Actor.Create(CIVFEMALE, #BFYST, 0.0, 0.0, 0.0)

//Hier komt wat je met je actor wilt doen

0249: release_model #BFYST

Hoe kom je dan op @Bierbuikje en op return zonder eerst een gosub? Ik zou je graag willen helpen hoor, maar dan moet je wel de code geven die jij gebruikt en niet zomaar een willekeurige code. :)

Geplaatst:

Dit is de code waar ik op dit moment mee bezig ben:

// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007

{$VERSION 3.1.0027}
{$CLEO .CS}

//-------------MAIN---------------
Model.Load(#VWFYWAI)
Model.Load(#MINIGUN)
038B: load_requested_models 

:Bierbuikje
if or
  not Model.Available(#VWFYWAI)
  not Model.Available(#MINIGUN)
else_jump @Bierbuikje2 
wait 0 
jump @Bierbuikje

:Bierbuikje2
10@ = Actor.Create(CivFemale, #VWFYWAI, 2490.563, -1688.95, 13.51973)
01B2: give_actor 10@ weapon 38 ammo 30000 // Load the weapon model before using this 
01B9: set_actor 10@ armed_weapon_to 38 
05E2: AS_actor 10@ kill_actor $PLAYER_ACTOR 
Actor.WeaponAccuracy(10@) = 90
Actor.Health(10@) = 2000
0350: set_actor 10@ maintain_position_when_attacked 1 
Model.Destroy(#VWFYWAI)
0A93: end_custom_thread

Geplaatst:

Kijk das wel zo makkelijk, he :puh:

// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007

{$VERSION 3.1.0027}
{$CLEO .CS}

//-------------MAIN---------------
:Bierbuikje
Model.Load(#VWFYWAI)
Model.Load(#MINIGUN)
038B: load_requested_models

:Bierbuikje1
if or
  not Model.Available(#VWFYWAI)
  not Model.Available(#MINIGUN)
else_jump @Bierbuikje2
wait 0
jump @Bierbuikje1

:Bierbuikje2
10@ = Actor.Create(CivFemale, #VWFYWAI, 2490.563, -1688.95, 13.51973)
01B2: give_actor 10@ weapon 38 ammo 30000 // Load the weapon model before using this
01B9: set_actor 10@ armed_weapon_to 38
05E2: AS_actor 10@ kill_actor $PLAYER_ACTOR
Actor.WeaponAccuracy(10@) = 90
Actor.Health(10@) = 2000
0350: set_actor 10@ maintain_position_when_attacked 1
Model.Destroy(#VWFYWAI) 
Model.Destroy(#MINIGUN))

repeat
 wait 100
until 0118:   actor 10@ dead 

wait 5000
009B: destroy_actor 10@ 

jump @bierbuikje

0A93: end_custom_thread

Probeer dit eens... Nu heb ik een repeat-wait-until ingebouwd die kijkt of een actor dood is, zo ja, dan wacht hij 5 seconden. Daarna wordt die actor verwijderd, en begint hij opnieuw helemaal bovenaan. Heb de namen van de labels iets aangepast, zodat het nog op volgorde loopt (en niet 3-1-2 of zo). Probeer dit maar eens, denk dat het wel werkt. :puh:

Geplaatst: (bewerkt)

Ik krijg de foutmelding:

Compiled file has no header, so the model name #MINIGUN) can not be used. Use number ID instead.

En als ik #MINIGUN verander in het id (362) dan krijg ik:

Niet genoeg parameters gezet. verwachte 1 params.

Ik zie net dat hij "#MINIGUN)" bedoelt, maar als ik dat haakje weghaal dan krijg ik:

A jump to zero offset found.

-----------------

Ik ben erachter gekomen dat het met de "jump @Bierbuikje" te maken heeft, maar als ik die regel weghaal dan start hij niet opnieuw, maar dan geeft hij geen foutmelding. Als ik de regel laat staan wel. Maar dan gaat hij toch niet respawnen?

Bewerkt: door Bierbuikje
Geplaatst:

Ik gebruik nu een andere code die wel werkt na wat gesjoemel met labels. :)

// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007

{$VERSION 3.1.0027}
{$CLEO .CS}

//-------------MAIN---------------
:Bierbuikje
Model.Load(#VWFYWAI)
Model.Load(#MINIGUN)
038B: load_requested_models
jump @Bierbuikje1

:Bierbuikjeeenhalf
Model.Load(#VWFYWAI)
Model.Load(#MINIGUN)
038B: load_requested_models
jump @Bierbuikje1

:Bierbuikje1
if or
  not Model.Available(#VWFYWAI)
  not Model.Available(#MINIGUN)
else_jump @Bierbuikje2
wait 0
jump @Bierbuikje1

:Bierbuikje2
10@ = Actor.Create(CivFemale, #VWFYWAI, 2490.563, -1688.95, 13.51973)
01B2: give_actor 10@ weapon 38 ammo 30000 // Load the weapon model before using this
01B9: set_actor 10@ armed_weapon_to 38
05E2: AS_actor 10@ kill_actor $PLAYER_ACTOR
Actor.WeaponAccuracy(10@) = 90
Actor.Health(10@) = 2000
0350: set_actor 10@ maintain_position_when_attacked 1
Model.Destroy(#VWFYWAI)
Model.Destroy(#MINIGUN)

repeat
 wait 100
until 0118:   actor 10@ dead

wait 5000
009B: destroy_actor 10@

jump @Bierbuikjeeenhalf

0A93: end_custom_thread

Nu respwant hij gelijk als je hem hebt neergeschoten en dan probeert de actor jou te vermoorden, onmogelijk om eraan te ontkomen, want ik heb het al 30x geprobeert, maar heb haar nooit meer dan 2x achterelkaar aan doodgeschoten. Daarna schoot zij telkens mij dood. :puh:

Geplaatst:

Lijkt me sterk, er zitten altijd 5 seconden tussen. Wanneer je het een halve minuut ofzo wilt laten zijn, hoef je alleen die wait van 5000 te verhogen naar een leuk getal. Wat je ook kunt doen, is kijken of je ver genoeg uit de buurt bent voor je haar weer spawnt. Dan moet je een lus maken waarin je controleert hoe ver de Player van de Actor is, met behulp van de volgende opcode:

0104:   actor $PLAYER_ACTOR near_actor 1@ radius 15.0 15.0 15.0 sphere 0

Die 15.0 staan voor x-y-z coördinaten. De sphere 0 zegt dat hij geen sphere eromheen wilt trekken, dat zou ik als ik jou was ook niet gewilt hebben: dat ziet er niet uit. :7

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