De basissen van een missie
Hoofdpagina > Modding > Modding Tutorial List > De basissen van een missie
In deze tutorial van JGuntherS wordt de basissen van het SCM-scripten uitgelegd.
Inhoud
Introductie
Het is aangeraden eerst een beetje ervaring op te doen. Je kunt deze tutorial volgen. IF's en threads zijn heel belangrijk voor het schrijven van een missie.
Een missie definiëren
Een missie moet je aan het begin van het script definiëren. Je moet je missie bij dit stuk zetten:
:JGS1
0001: wait 100 ms
03A4: name_thread 'PANC_1'
0005: $2000 = 40.30668
0005: $2001 = 20.28515
0005: $2002 = 14.26602
:JGS1_0
02A7: $2003 = create_icon_marker_and_sphere 34 at $2000 $2001 $2002
0004: $eiland_m1_on = 1
:JGS1_2
0001: wait 100 ms
00D6: if 0
0038: $ON_MISSION == 0
004D: jump_if_false ££JGS1_5
00D6: if 1
0038: $ON_MISSION == 0
0038: $eiland_m1_on == 0
004D: jump_if_false ££JGS1_3
02A7: $2003 = create_icon_marker_and_sphere 34 at $2000 $2001 $2002
0004: $eiland_m1_on = 1
:JGS1_3
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££JGS1_2
00D6: if 0
00FF: actor $PLAYER_ACTOR 0 ()near_point_on_foot $2000 $2001 $2002 radius 3.0 3.0 2.0
004D: jump_if_false ££JGS1_2
00D6: if 0
03EE: player $PLAYER_CHAR controllable
004D: jump_if_false ££JGS1_2
0164: disable_marker $2003
0004: $eiland_m1_on = 0
00BA: text_styled 'JGS_M1' 1500 ms 2
0050: gosub ££PANCCAM
0417: start_mission (missienummer)
:JGS1_4
0001: wait 0 ms
00D6: if 0
0038: $m_135_tried == 1
004D: jump_if_false ££JGS1_4
0004: $m_135_tried = 0
00D6: if 0
0038: $m_135_done == 1
004D: jump_if_false ££JGS1_2
00BE: text_clear_all
03E6: remove_text_box
01E3: text_1number_styled 'M_PASS' 1000 5000 ms 1
0318: set_latest_mission_passed 'PANCA_1'
030C: set_mission_points += 1
0394: play_music 1
01BD: $184 = current_time_in_ms
0109: player $PLAYER_CHAR money += 1000
0110: clear_player $PLAYER_CHAR wanted_level
004E: end_thread
:JGS1_5
00D6: if 0
0038: $eiland_m1_on == 1
004D: jump_if_false ££JGS1_2
0164: disable_marker $2003
0004: $eiland_m1_on = 0
0002: jump ££JGS1_2
:PANCCAM
0002: jump ££PANCCAM5
:PANCCAM1
0169: set_fade_color 0 0 0
016A: fade 0 () 500 ms
:PANCCAM2
00D6: if 0
016B: fading
004D: jump_if_false ££PANCCAM3
0001: wait 0 ms
00BE: text_clear_all
03E6: remove_text_box
0002: jump ££PANCCAM2
:PANCCAM3
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££PANCCAM4
016A: fade 0 () 0 ms
02EB: restore_camera_with_jumpcut
0687: $PLAYER_ACTOR
016A: fade 0 () 0 ms
:PANCCAM4
0051: return
:PANCCAM5
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££PANCCAM6
03E6: remove_text_box
01B4: set_player $PLAYER_CHAR frozen_state 0 (frozen)
0050: gosub ££PANCCAM1
:PANCCAM6
0051: return
Kijkt en leert. Een goede oefening is trouwens om deze thread te begrijpen.
Het "frame" van een missie
Het frame van een missie ziet er ongeveer zo uit:
:M_BEGIN 0050: gosub £M_CODE 00D6: if 0 0112: wasted_or_busted 004D: jump_if_false £M_KLAAR 0050: gosub £M_FAIL :M_KLAAR 0050: gosub £M_OPSCHONEN 004E: end_thread :M_CODE ;; de echte code van de missie ;; als de missie faalt, moet je deze code gebruiken: 0002: jump £M_FAIL :M_PASS ;; als je mijn thread gebruikt moet je deze code hier neerzetten: 0004: $m_135_done = 1 0002: jump £M_OPSCHONEN :M_FAIL 00BA: text_styled 'M_FAIL' 5000 ms 1; MISSION FAILED! :M_OPSCHONEN ;; opschoondingen hier ;; als je mijn thread gebruikt moet je deze code hier neerzetten: 0004: $m_135_tried = 1 0051: return
De plek in het script voor de missie
Een nieuwe missie zet je altijd onder laatse missie en boven het eerste externe script (in de normale GTA San Andreas is dat externe script AAA). In de normale SA:
01B4: set_player $PLAYER_CHAR frozen_state 1 (unfrozen) 03BF: set_player $PLAYER_CHAR ignored_by_everyone_to 0 (false) 02A3: toggle_widescreen 0 (off) 0004: $ON_MISSION = 0 ;; integer values 01BD: $184 = current_time_in_ms 00D8: mission_cleanup 004E: end_thread 0051: return Hier komt je missie ;----------------------------------------------------- DEFINE EXTERNAL_SCRIPT_START AAA ; Originally: player using parachute ; The AAA script is created internally ;----------------------------------------------------- DEFINE EXTERNAL_SCRIPT_START AMMU ; Originally: npc actors with parachutes 0005: $9585 = 0.0 ;; floating-point values
Handige stukjes code
Race checkpoints
Racecheckpoints maak je met opcode 06D5 op deze manier:
06D5: $cpID = create_racing_checkpoint_at X Y Z X2 Y2 Z2 type 0 radius 3.0
X Y Z
|
Dit zijn de coördinaten van dit checkpoint |
X2 Y2 Z2
|
Dit zijn de coördinaten van het volgende checkpoint. |
type 0
|
Het type kan 0 t/m 4 zijn.
|
Vervolgens moet er een stuk code komen dat controleert of de speler door het CP heen is gegaan. Meestal is dat zoiets als dit:
:MissC2a 0001: wait 0 00D6: if 0 00EE: actor $PLAYER_ACTOR 0 ()near_point_in_car X Y radius 7.0 7.0 004D: jf ££MissC2a -- meer code --
Een race checkpoint vernietig je weer met opcode 06D6 op deze manier:
06D6: destroy_racing_checkpoint $cpID