K'heb even niks te doen, dus hier komt een tutorial.
Ik begin met wat uitleg, eigenlijk het thread in woorden.
De race komt er als volgt uit te zien: Er is een marker, en als je erin stapt, dan verschijnt er een auto.
Ook komt er 1 checkpoint, en je zorgt voor een timer. De timer start wanneer je door de eerste checkpoint gaat.
Dan verschijnt de tweede, en dus als je zou willen meer. Na de tweede krijg je geld en eindigt de missie.
Ik heb nog even geen tijd om opcodes te vermelden, dat komt later.
:Start
03BC:0@ = create_sphere x y z 1.0;; Je maakt een marker.
jump to missioncheck
:missioncheck
wait 50 ms;; dit is namelijk een loop
if 0
onmission == 0;; een dubbele is omdat het een check is of je missie status gelijk is aan 0
jf onmission
if 0
00F6: player $PLAYER_CHAR 0 ()near_point_on_foot x y z radius 1.0 1.0 1.0
jf missioncheck
jump startrace
:onmission
03BD: destroy_sphere 0@
:still
wait 0 ms;; weer een loop
if 0
onmission == 1
jf start;; Dat is de eerste, waar de marker gemaakt word
jump still
Dit is mijn standaart missie begin. Het zorgt dat de marker verdwijnt als je aan een missie bent, en weer verschijnt waneer je niet meer aan een missie bent.
:startrace
wait 10 ms;; voor het geval hij niet direkt laad is dit ook een loop
request model cheetah;; Dat is de raceauto
:loaded
wait 10 ms
if 0
NOT #cheetah loaded
jf startrace
:missionbuild
fade 100 ms
remove marker mission start
mission attemts+= 1
onmission = 1
create text "The Race" 5000 ms;; Hier moet je even het missie lettertype vinden
$car = Create #cheetah at X, Y, Z;; Dit moet dus een stukje naast jouw zijn...
set car $car z-angel to Z;; De richting van de eerste checkpoint
- Soms moet je zorgen dat de deuren niet op slot zijn -
$check1 = Create checkpoint at X, Y, Z
wait 5000 ms;; Onthoud: We zitten nog in het laadscherm
fade (1) back 100 ms
Hier heb je eigenlijk de missie opgebouwd: Vanaf nu begint de race.
:checkpoint
wait 0 ms
if 0
NOT player_char near_point_in_car $car X, Y, Z
jf second
gosub checker;; Voor een wasted/busted/car check gebruik ik altijd een gosub , dat bespaard je labels
jump checkpoint
:checker
wait 0 ms
if 1;; 2 functies
NOT wasted/busted;; Dat is 1 opcode
NOT car $car destroyed
jf failed
return
:second
remove marker $CHECK1
$CHECK2= create marker at X, Y, Z
:secondR
wait 0 ms
if 0
NOT player_char near_point_in_car $car X, Y, Z
jf completed
gosub checker
jump secondR
:failed
remove marker $check1
remove marker $check2
onmission = 0
jump start
:completed
clear wanted level
money += X;; hoeveel je zelf wilt
remove marker $check2
end_thread
Als je nu een race wil maken met verschillende checkpoints die je op een willekeurige volgorde kan pakken, gaat het behoorlijk anders.
Je moet het zo zien: Er komt een loop die checkt of je bij een van de punten bent. Stel voor dat je bij zo'n punt bent, dan blijft erlangs loopen. Je moet dus zorgen dat hij als je een checkpoint pakt dat label niet meer leest. Dat doe je met een ''schakelaar''. Die schakelaar is een integer value, die op 0 staat als je de checkpoint nog moet pakken, en naar 1 verspringt als je hemt hebt.
alles tot de missieopbouw klopt nog, dus vanaf
:missionbuild
fade 100 ms
remove marker mission start
mission attemts+= 1
onmission = 1
create text "The Race" 5000 ms;; Hier moet je even het missie lettertype vinden
$car = Create #cheetah at X, Y, Z;; Dit moet dus een stukje naast jouw zijn...
set car $car z-angel to Z;; De richting van de eerste checkpoint
- Soms moet je zorgen dat de deuren niet op slot zijn -
$marker1 = Create checkpoint at X, Y, Z
$marker2 = Create checkpoint at X, Y, Z
wait 5000 ms;; Onthoud: We zitten nog in het laadscherm
fade (1) back 100 ms
:integers
$check1 = 0;; De schakelaar van checkpoint 1
$check2 = 0;; De schakelaar van checkpoint 2
$checktotal = 0;; Alle checkpoints samen
:check1
wait 0 ms
if 0
$check1 = 0;; Die moet nul zijn, anders mag hij dit label niet lezen.
jf checker
if 0
player_char near_point_in_car $car X, Y, Z
jfchecker
$check1 += 1;; De schakelaar is omgezet, dus dit label word hierna niet meer gelezen
$checktotal += 1
remove marker $marker1
jump checker
:checker
wait 0 ms
if 0
NOT $checktotal == 2
jf complete
if 1
wasted/busted
car $car destroyed
jf failed
jump check2
:check2
wait 0 ms
if 0
$check2 = 0;; Die moet nul zijn, anders mag hij dit label niet lezen.
jf check1
if 0
player_char near_point_in_car $car X, Y, Z
jf check1
$check2 += 1;; De schakelaar is omgezet, dus dit label word hierna niet meer gelezen
$checktotal += 1
remove marker $marker2
jump check1
K'heb even niks te doen, dus hier komt een tutorial.
Ik begin met wat uitleg, eigenlijk het thread in woorden.
De race komt er als volgt uit te zien: Er is een marker, en als je erin stapt, dan verschijnt er een auto.
Ook komt er 1 checkpoint, en je zorgt voor een timer. De timer start wanneer je door de eerste checkpoint gaat.
Dan verschijnt de tweede, en dus als je zou willen meer. Na de tweede krijg je geld en eindigt de missie.
Ik heb nog even geen tijd om opcodes te vermelden, dat komt later.
Dit is mijn standaart missie begin. Het zorgt dat de marker verdwijnt als je aan een missie bent, en weer verschijnt waneer je niet meer aan een missie bent.
Hier heb je eigenlijk de missie opgebouwd: Vanaf nu begint de race.
Als je nu een race wil maken met verschillende checkpoints die je op een willekeurige volgorde kan pakken, gaat het behoorlijk anders.
Je moet het zo zien: Er komt een loop die checkt of je bij een van de punten bent. Stel voor dat je bij zo'n punt bent, dan blijft erlangs loopen. Je moet dus zorgen dat hij als je een checkpoint pakt dat label niet meer leest. Dat doe je met een ''schakelaar''. Die schakelaar is een integer value, die op 0 staat als je de checkpoint nog moet pakken, en naar 1 verspringt als je hemt hebt.
alles tot de missieopbouw klopt nog, dus vanaf
De completed en failed blijven ook hezelfde
Bewerkt: door Flotje