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