GTA SAN ANDREAS
MODS for
GTA-San Andreas-Mission-scripting
mit Bart Waterducks Mission Builder/Teil3
Übersicht
- für Anfänger: Vorbereitung und Umgang mit dem SABuilder033
- Erste Lektion: Parked cars (Autos platzieren) und Waffen-Pickups
- Koordinaten auslesen
- speichern und kompilieren
- create_thread/Einfügen eines Mod-Scripts am Beispiel eines neuen Speicherpunktes
- Einteilung und Aufbau der Main
- Stripped main
- Der Opcode
- DATA TYPE MEANING/Die Zeichen und ihre Bedeutung
- Arbeiten mit der Stripped Main erleichtert das Scripten
- Script schreiben
- Modelle einsetzen
- Lokals and Globals
- Math-Coding
- Tastenbelegung
- gosub
- Animationen
- Sounds
- Text aus der german.gxt
- Missionen
- EXTERNAL_SCRIPT
- Zusammenfassung
- Garagen
- Das Interaktive Menue
- Define Memory Beispiel-Scripte
- CJ spricht
- die Koordinatenanzeige
- Die frei bewegliche Kamera
- Cardrive-Script
- Das Wetter-Script
- Stripped Main with Externscripts and Submissions
- Wenn im Mozilla Firefox die Seite nicht richtig dargestellt wird, dann schließt alle anderen Tabs oder startet ihn neu
Tastenbelegung
- Beim Anwenden von Tastenabfragen kommts zu dem Problem, daß wenn der code nach der Aktion wieder in die selbe Abfrage springt, die Aktion andauernd wiederholt wird, weil der Lesevorgang viel schneller ist als ein Tastendruck
- Eine einfache Lösung ist ein wait 1000 ms nach der key_pressed-Abfrage
- siehe Jump-Rampe-Script
- key_pressed 0 0 ist links / rechts gleichermaßen und
- key_pressed 0 1 ist vorwärts / rückwärts gleichermaßen
- zur Aufsplittung in links , rechts und vorwärts , rückwärts
- gibts eine etwas komplizierte Variante
- @26 entspricht vorwärts / rückwärts und gibt in eine Richtung einen Minuswert aus
- @27 entspricht links / rechts und gibt in eine Richtung einen Minuswert aus
- Im Script für die freibewegliche Kamera wird das veranschaulicht
- freibewegliche Kamera
- Kamera einschalten: mit Duckentaste
- Kamera-Kontrolle:
- mit Vorwärtstaste hoch / Rückwärtstaste runter
- mit Linkstaste links drehen / mit Rechtstaste rechts drehen
- mit Waffenwechsel rückwärts/vorwärts - hoch/runter-schwenken
- mit Feuertaste vorwärts / mit Sprintentaste rückwärts
- zusaeztlich Springentaste um Bewegung zu beschleunigen
- Aktiontaste-screenshot
- Enter/exit-beenden
00D6: if 0
00E1: key_pressed 0 10
004D: jump_if_false ££weiter
Zu Fuß CONTROLS
# CONTROL
0 left/right links / rechts
1 forward/backward vorwärts / rückwärts
2 special ctrl left/right -unbekannt-
3 special ctrl up/down -unbekannt-
4 action/secondary fire Telefonanruf annehmen/action/secondary fire
5 previous weapon/zoom in Waffenwechsel rückwärts / SNIPER_ZOOM_IN
6 aim weapon mit Waffe zielen
7 next weapon/zoom out Waffenwechsel vorwärts / SNIPER_ZOOM_OUT
8 group CTRL forward Homie recrutieren/rufen
9 group CTRL back Homie entlassen/wegschicken
10 conversation - no KONVERSATION_NO
11 conversation - yes KONVERSATION_YES
12 (does not exist) -- -- --
13 change camera Blickwinkel ändern
14 jump springen
15 enter vehicle Ein/Aussteigen
16 sprint sprinten
17 fire Feuer
18 crouch ducken
19 look behind nach hinten schauen
LALT schleichen schleichen
Fahrzeug CONTROLS
# CONTROL
0 left/right links / rechts
1 steer back/up auf / ab
2 special ctrl left/right -unbekannt-
3 special control up/down -unbekannt-
4 secondary fire Sekundärfeuer
5 look left links schauen
6 brake/reserve Bremse/rückwärts
7 look right rechts schauen
8 next radio station Radiosender vor
9 previous radio station Radiosender zurück
10 no KONVERSATION_NO/Song überspringen
11 yes / trip skip KONVERSATION_YES/Fahrt überspringen
12 (does not exist) -- -- --
13 camera Blickwinkel ändern
14 hand brake Handbremse
15 enter/exit Ein/Aussteigen
16 accelerate Beschleunigen
17 fire Feuer
18 horn Hupe
19 submission Spezialmission
RMB vehicle mouse look VEHICLE_MOUSELOOK
0494: get_joystick_data 0 @26 @27 @28 @29
:FlyCam_001;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
03A4: name_thread 'FCAM'
:FlyCam_002
0001: wait 0 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££FlyCam_002
00D6: if 0
00E1: key_pressed 0 18
004D: jump_if_false ££FlyCam_002
0619: $PLAYER_ACTOR 0;collision_detection
01B4: set_player $PLAYER_CHAR frozen_state 0 (frozen)
016A: fade 0 () 250 ms
0001: wait 250 ms
04C4: create_coordinate $camx2 $camy2 $camz2 from_actor $PLAYER_ACTOR offset 0.0 2.0 1.0
0172: $cama2 = actor $PLAYER_ACTOR z_angle
0247: request_model #NULL
:FlyCam_04
0001: wait 0 ms
00D6: if 0
0248: model #NULL available
004D: jump_if_false ££FlyCam_04
009A: @9 = create_actor 24 #NULL at $camx2 $camy2 $camz2
0223: set_actor @9 health_to 2000
02AB: set_actor @9 immunities 1 1 1 1 1
0173: set_actor @9 z_angle_to $cama2
0337: set_actor @9 visibility 0
0619: @9 0;collision_detection
0249: release_model #NULL
:FlyCam_FC00
0001: wait 250 ms
016A: fade 1 () 250 ms
0007: @24 = -1.0 ;; floating-point values
0007: @25 = 0.4 ;; floating-point values
067C: @9 0.0 0.3 0.5 0.0 0.5 @25 0.0 2;;put_camera_on_actor
:FlyCam_FC01
0001: wait 0 ms
00D6: if 0
80E1: NOT key_pressed 0 15
004D: jump_if_false ££FlyCam_FC25
00D6: if 23
00E1: key_pressed 0 0
00E1: key_pressed 0 1
00E1: key_pressed 0 17
00E1: key_pressed 0 16
004D: jump_if_false ££FlyCam_FC20
00A0: store actor @9 position to @21 @22 @23
00D6: if 25
0021: @21 > 3500.0 ;; floating-point values
0023: -3500.0 > @21 ;; floating-point values
0021: @22 > 3500.0 ;; floating-point values
0023: -3500.0 > @22 ;; floating-point values
0023: -100.8 > @23 ;; floating-point values
0021: @23 > 1100.7 ;; floating-point values
004D: jump_if_false ££FlyCam_FC02
00A1: put_actor @9 at -1660.5 1208.4 13.7
0173: set_actor @9 z_angle_to 320.8
0002: jump ££FlyCam_FC02
:FlyCam_FC02
0001: wait 0 ms
0494: get_joystick_data 0 @26 @27 @28 @29
00D6: if 0
0039: @26 == 0 ;; integer values
004D: jump_if_false ££FlyCam_FC03
0172: $cama1 = actor @9 z_angle
0002: jump ££FlyCam_FC07
:FlyCam_FC03
00D6: if 0
0019: @26 > 0 ;; integer values
004D: jump_if_false ££FlyCam_FC04
0172: $cama1 = actor @9 z_angle
000F: $cama1 -= 7.5 ;; floating-point values
0173: set_actor @9 z_angle_to $cama1
0002: jump ££FlyCam_FC07
:FlyCam_FC04
00D6: if 0
001B: 0 > @26 ;; integer values
004D: jump_if_false ££FlyCam_FC07
0172: $cama1 = actor @9 z_angle
000B: $cama1 += 7.5 ;; floating-point values
0173: set_actor @9 z_angle_to $cama1
0002: jump ££FlyCam_FC07
:FlyCam_FC07
00D6: if 0
0039: @27 == 0 ;; integer values
004D: jump_if_false ££FlyCam_FC08
0007: @24 = -1.0 ;; floating-point values
0002: jump ££FlyCam_FC10
:FlyCam_FC08
00D6: if 0
0019: @27 > 0 ;; integer values
004D: jump_if_false ££FlyCam_FC09
0007: @24 = -1.1 ;; floating-point values
0002: jump ££FlyCam_FC11
:FlyCam_FC09
00D6: if 0
001B: 0 > @27 ;; integer values
004D: jump_if_false ££FlyCam_FC10
0007: @24 = -0.9 ;; floating-point values
0002: jump ££FlyCam_FC12
:FlyCam_FC10
0007: @24 = -1.0 ;; floating-point values
0002: jump ££FlyCam_FC15
:FlyCam_FC11
00D6: if 0
00E1: key_pressed 0 14
004D: jump_if_false ££FlyCam_FC15
000F: @24 -= 2.5 ;; floating-point values
0002: jump ££FlyCam_FC15
:FlyCam_FC12
00D6: if 0
00E1: key_pressed 0 14
004D: jump_if_false ££FlyCam_FC15
000B: @24 += 2.5 ;; floating-point values
0002: jump ££FlyCam_FC15
:FlyCam_FC15
00D6: if 0
00E1: key_pressed 0 17
004D: jump_if_false ££FlyCam_FC16
0007: @20 = 0.1 ;; floating-point values
0002: jump ££FlyCam_FC17
:FlyCam_FC16
00D6: if 0
00E1: key_pressed 0 16
004D: jump_if_false ££FlyCam_FC18
0007: @20 = -0.1 ;; floating-point values
0002: jump ££FlyCam_FC17
:FlyCam_FC17
00D6: if 0
00E1: key_pressed 0 14
004D: jump_if_false ££FlyCam_FC19
0013: @20 *= 50.5 ;; floating-point values
0002: jump ££FlyCam_FC19
:FlyCam_FC18
0007: @20 = 0.0 ;; floating-point values
04C4: create_coordinate $camx1 $camy1 $camz1 from_actor @9 offset 0.0 @20 @24
00A1: put_actor @9 at $camx1 $camy1 $camz1
0002: jump ££FlyCam_FC20
:FlyCam_FC19
04C4: create_coordinate $camx1 $camy1 $camz1 from_actor @9 offset 0.0 @20 @24
00A1: put_actor @9 at $camx1 $camy1 $camz1
0002: jump ££FlyCam_FC20
:FlyCam_FC20
00D6: if 0
00E1: key_pressed 0 5
004D: jump_if_false ££FlyCam_FC21
000F: @25 -= 0.01 ;; floating-point values
067C: @9 0.0 0.3 0.5 0.0 0.5 @25 0.0 2;;put_camera_on_actor
0002: jump ££FlyCam_FC23
:FlyCam_FC21
00D6: if 0
00E1: key_pressed 0 7
004D: jump_if_false ££FlyCam_FC23
000B: @25 += 0.01 ;; floating-point values
067C: @9 0.0 0.3 0.5 0.0 0.5 @25 0.0 2;;put_camera_on_actor
0002: jump ££FlyCam_FC23
:FlyCam_FC23
00D6: if 0
00E1: key_pressed 0 4
004D: jump_if_false ££FlyCam_FC01
0A1E: 1
0001: wait 1000 ms
0002: jump ££FlyCam_FC01
:FlyCam_FC25
016A: fade 0 () 250 ms
0001: wait 250 ms
04E4: unknown_refresh_game_renderer_at $camx2 $camy2
03CB: set_camera $camx2 $camy2 $camz2
0001: wait 250 ms
016A: fade 1 () 250 ms
0373: set_camera_directly_behind_player
02EB: restore_camera_with_jumpcut
009B: destroy_actor_instantly @9
0619: $PLAYER_ACTOR 1;collision_detection
01B4: set_player $PLAYER_CHAR frozen_state 1 (unfrozen)
0002: jump ££FlyCam_002
gosub
- Das sub script befindet sich nicht in der Scriptfolge des Threads.
Es ist ausgelagert, existiert für sich und durchläuft seinen eigenen Level.
Es kann zu einem Thread gehören wie ein Seitenast, einen Ordner tiefer oder ein Verstärker.
Es kann von vielen anderen Scripten genutzt werden, wenn es sich im Main part der Main.scm befindet.
Es ist nicht als Thread definiert und endet immer mit 0051: return.
der Leseprozess wird in das subscript geleitet, um dann mit der eigentlichen Scriptfolge des Threads fortzufahren, sobald der "return"-code erfolgt. - Ein einfaches Bespiel ist das save-script
- verweist ins sub-script :SAVE_14
- wenn das Speichern erledigt ist, gehts im thread mit 0002: jump ££SAVE_2 weiter
- Im sub-script einen Loop zu integrieren, wie beim save-script, ist ansonsten nicht ratsam.
- Natürlich kommt es auf den Inhalt den sub-scripts an.
- Aber fürs Gameplay absichernde Abfragen, wie "if_playerchar_defined" oder "if actor $X is dead", oder "if car wrecked"
- und der Auflösungsabschnitt befinden sich ja in der Regel im Thread
- Im Falle von Tod oder Verhaftung könnte der code dann im sub-script endlos weiter-loopen
- Das Risiko, daß es zu Fehlern kommt, wäre größer.
- Ausnahme sind die Missionen, die nur aus sub-scripten bestehen
- Diese laufen aber in einem speziellen Modus
- Meistens werden die sub-scripte zur Unterstützung des Hauptscripts genutzt, z.B um Informationen einzuholen, mit denen dann im Hauptscript Aktionen ausgeführt werden.
- Oft wird der gosub-Befehl sogar in einen Loop gesetzt um das sub-script ständig auszulesen
- Das sub-script selbst wird dann ohne Verzögerung durch wait-codes oder Loops gehalten, damit es in 0 Sekunde durchlaufen werden kann
- Im folgenden Beispiel-Thread dient das sub-script dazu, das Fahrverhalten des car@7 zu regeln
- Der gosub-Befehl ist im Loop des Thread-Abschnitts :Drive_7 , Der Loop ist jetzt fast leer. Da ist Platz für andere Abfragen und Aktionen
- Actor @9 wird auch im sub-script geregel, daß er wieder aufsteigt.
Und wenn er die 2.Runde geschafft hat wird eine Textmessage eingeblendet
Damit er nicht vom Bike fällt, kann man den Code ;08C6: set_actor @9 stay_on_bike 1 aktivieren - Cardrive-Script/zum aktivieren "Ja/Yes"-Taste drücken
0050: gosub ££SAVE_14
:SAVE_1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
03A4: name_thread 'SAVE'
0570: $sv02 = create_asset_radar_marker_with_icon 35 at 384.44 2544.108 16.66
018B: show_on_radar $sv02 2
:SAVE_2
0001: wait 0 ms
0213: $sv01 = create_pickup #PICKUPSAVE type 3 at 417.44 2538.108 10.1
:SAVE_5
0001: wait 0 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££SAVE_5
00D6: if 0
0214: pickup $sv01 picked_up
004D: jump_if_false ££SAVE_5
0050: gosub ££SAVE_14
0002: jump ££SAVE_2
:SAVE_14
00D6: if 0
0038: $ON_MISSION == 0 ;; integer values
004D: jump_if_false ££SAVE_17
0004: $ON_MISSION = 1 ;; integer values
01B4: set_player $PLAYER_CHAR frozen_state 0 (frozen)
0001: wait 350 ms
03D8: show_SAVE_screen
:SAVE_15
00D6: if 0
83D9: NOT save_done
004D: jump_if_false ££SAVE_16
0001: wait 0 ms
0002: jump ££SAVE_15
:SAVE_16
00A1: put_actor $PLAYER_ACTOR at 420.44 2538.108 10.0
01B4: set_player $PLAYER_CHAR frozen_state 1 (unfrozen)
0004: $ON_MISSION = 1 ;; integer values
0001: wait 350 ms
0004: $ON_MISSION = 0 ;; integer values
:SAVE_17
0051: return
0050: gosub ££Drive_sub_3
:Drive_1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
03A4: name_thread 'DRIV'
:Drive_3
0001: wait 0 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££Drive_3
077E: $ACTIVE_INTERIOR = active_interior
00D6: if 2
0038: $ACTIVE_INTERIOR == 0 ;; integer values
00E1: key_pressed 0 11
004D: jump_if_false ££Drive_3
016A: fade 0 () 250 ms
0001: wait 250 ms
01B4: set_player $PLAYER_CHAR frozen_state 0 (frozen)
0362: remove_actor $PLAYER_ACTOR from_car_and_place_at -1338.5 -408.1 14.1
0173: set_actor $PLAYER_ACTOR z_angle_to 90.8
0001: wait 500 ms
0247: request_model #NRG500
0247: request_model #MAFFA
:Drive_5
0001: wait 0 ms
00D6: if 1
0248: model #NRG500 available
0248: model #MAFFA available
004D: jump_if_false ££Drive_5
00A5: @1 = create_car #NRG500 at -1333.5 -408.1 14.1
0175: set_car @1 z_angle_to 280.0
0224: set_car @1 health_to 2000
00A5: @7 = create_car #NRG500 at -1354.5 -419.1 14.1
0175: set_car @7 z_angle_to 280.0
0224: set_car @7 health_to 2000
020A: set_car @7 door_status_to 4
02AC: set_car @7 immunities 1 1 1 1 1
01EC: make_car @7 very_heavy 1
0129: @9 = create_actor 24 #MAFFA in_car @7 driverseat
0223: set_actor @9 health_to 3000
04E4: unknown_refresh_game_renderer_at -1333.5 -408.1
03CB: set_camera -1333.5 -408.1 14.1
029B: @23 = init_object #AD_JUMP at -1576.02 -202.34 13.76
0177: set_object @23 z_angle_to 270.0
01C7: remove_object_from_mission_cleanup_list @23
0382: set_object @23 collision_detection 1
029B: @24 = init_object #AD_JUMP at -1597.9 -506.5 21.7
0177: set_object @24 z_angle_to 270.0
01C7: remove_object_from_mission_cleanup_list @24
0382: set_object @24 collision_detection 1
029B: @25 = init_object #AD_JUMP at -1375.9 -581.5 13.69
0177: set_object @25 z_angle_to 270.0
01C7: remove_object_from_mission_cleanup_list @25
0382: set_object @25 collision_detection 1
029B: @26 = init_object #AD_JUMP at -1374.9 -585.5 13.69
0177: set_object @26 z_angle_to 270.0
01C7: remove_object_from_mission_cleanup_list @26
0382: set_object @26 collision_detection 1
0177: set_object @23 z_angle_to 135.0
0177: set_object @24 z_angle_to 225.0
0177: set_object @25 z_angle_to 280.0
0177: set_object @26 z_angle_to 280.0
0249: release_model #NRG500
0249: release_model #MAFFA
04e0: car @7 abandon_path_radius 200
00AD: set_car @7 max_speed_to 100.0
04BA: set_car @7 speed_instantly 30.0
00AF: set_car @7 driver_behaviour_to 1
00AE: unknown_set_car @7 to_ignore_traffic_lights 2
0001: wait 250 ms
036A: put_actor $PLAYER_ACTOR in_car @1
0001: wait 250 ms
016A: fade 1 () 1000 ms
0001: wait 1000 ms
0373: set_camera_directly_behind_player
02EB: restore_camera_with_jumpcut
01B4: set_player $PLAYER_CHAR frozen_state 1 (unfrozen)
0004: $checkpoint1 = 0 ;; integer values
0004: $check2 = 0 ;; integer values
0005: $sperce5 = 20000 ;; floating-point values
0004: $mark03 = 0 ;; integer values
0005: @11 = -1320.48 ;; floating-point values
0005: @12 = -407.1 ;; floating-point values
0005: @13 = 13.76 ;; floating-point values
00A7: car @7 drive_to @11 @12 @13
00AD: set_car @7 max_speed_to 1.0
04e0: car @7 abandon_path_radius 250
;08C6: set_actor @9 stay_on_bike 1
:Drive_7
0001: wait 0 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££Drive_7
0050: gosub ££Drive_sub_3
00D6: if 2
8119: NOT car @1 wrecked
8119: NOT car @7 wrecked
8118: NOT actor @9 dead
004D: jump_if_false ££Drive_7
00D6: if 0
00FE: actor $PLAYER_ACTOR 0 ()near_point -1333.5 -408.1 14.1 radius 650.5 650.5 50.5
004D: jump_if_false ££Drive_12
0002: jump ££Drive_7
:Drive_12
01C3: remove_references_to_car @1 ;; Like turning a car into any random car
01C3: remove_references_to_car @7 ;; Like turning a car into any random car
01C2: remove_references_to_actor @9 ;; Like turning an actor into a random pedestrian
0108: destroy_object @23
0108: destroy_object @24
0108: destroy_object @25
0108: destroy_object @26
0002: jump ££Drive_3
:Drive_sub_3
00D6: if 0
8119: NOT car @7 wrecked
004D: jump_if_false ££Drive_sub_109
00D6: if 0
00DB: actor @9 in_car @7
004D: jump_if_false ££Drive_sub_99
00D6: if 0
0038: $mark03 == 1 ;; integer values
004D: jump_if_false ££Drive_sub_10
0004: $mark03 = 0 ;; integer values
0002: jump ££Drive_sub_100
:Drive_sub_10
00D6: if 0
0038: $checkpoint1 == 0 ;; integer values
004D: jump_if_false ££Drive_sub_11
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 5.2 5.2 5.0
004D: jump_if_false ££Drive_sub_11
0004: $checkpoint1 = 1 ;; integer values
0005: @11 = -1181.78 ;; floating-point values
0005: @12 = -331.30 ;; floating-point values
0005: @13 = 13.76 ;; floating-point values
0008: $check2 += 0 ;; integer values
0005: $speed1 = 100.0 ;; floating-point values
0005: $speed2 = 20.0 ;; floating-point values
04e0: car @7 abandon_path_radius 250
0002: jump ££Drive_sub_100
:Drive_sub_11
00D6: if 0
0038: $checkpoint1 == 1 ;; integer values
004D: jump_if_false ££Drive_sub_12
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 15.2 15.2 5.0
004D: jump_if_false ££Drive_sub_12
00AD: set_car @7 max_speed_to 10.0
0004: $checkpoint1 = 2 ;; integer values
0007: @11 = -1282.1 ;; floating-point values
0007: @12 = -159.3 ;; floating-point values
0007: @13 = 13.76 ;; floating-point values
0175: set_car @7 z_angle_to 340.0
0008: $check2 += 0 ;; integer values
0005: $speed1 = 100.0 ;; floating-point values
0005: $speed2 = 20.0 ;; floating-point values
04e0: car @7 abandon_path_radius 250
0002: jump ££Drive_sub_100
:Drive_sub_12
00D6: if 0
0038: $checkpoint1 == 2 ;; integer values
004D: jump_if_false ££Drive_sub_13
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 15.2 15.2 5.0
004D: jump_if_false ££Drive_sub_13
00AD: set_car @7 max_speed_to 25.0
0004: $checkpoint1 = 3 ;; integer values
0005: @11 = -1498.78 ;; floating-point values
0005: @12 = -138.30 ;; floating-point values
0005: @13 = 13.76 ;; floating-point values
0175: set_car @7 z_angle_to 65.0
0008: $check2 += 0 ;; integer values
0005: $speed1 = 100.0 ;; floating-point values
0005: $speed2 = 20.0 ;; floating-point values
04e0: car @7 abandon_path_radius 250
0002: jump ££Drive_sub_100
:Drive_sub_13
00D6: if 0
0038: $checkpoint1 == 3 ;; integer values
004D: jump_if_false ££Drive_sub_14
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 8.2 8.2 5.0
004D: jump_if_false ££Drive_sub_14
00AD: set_car @7 max_speed_to 25.0
0004: $checkpoint1 = 4 ;; integer values
0005: @11 = -1576.78 ;; floating-point values
0005: @12 = -202.30 ;; floating-point values
0005: @13 = 13.76 ;; floating-point values
0175: set_car @7 z_angle_to 135.0
0008: $check2 += 0 ;; integer values
0005: $speed1 = 100.0 ;; floating-point values
0005: $speed2 = 20.0 ;; floating-point values
04e0: car @7 abandon_path_radius 250
0002: jump ££Drive_sub_100
:Drive_sub_14
00D6: if 0
0038: $checkpoint1 == 4 ;; integer values
004D: jump_if_false ££Drive_sub_15
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 5.2 5.2 5.0
004D: jump_if_false ££Drive_sub_15
0004: $checkpoint1 = 5 ;; integer values
0005: @11 = -1694.78 ;; floating-point values
0005: @12 = -352.30 ;; floating-point values
0005: @13 = 13.9 ;; floating-point values
0175: set_car @7 z_angle_to 135.0
0008: $check2 += 0 ;; integer values
0005: $speed1 = 100.0 ;; floating-point values
0005: $speed2 = 20.0 ;; floating-point values
04e0: car @7 abandon_path_radius 250
0002: jump ££Drive_sub_100
:Drive_sub_15
00D6: if 0
0038: $checkpoint1 == 5 ;; integer values
004D: jump_if_false ££Drive_sub_16
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 15.2 15.2 5.0
004D: jump_if_false ££Drive_sub_16
00AD: set_car @7 max_speed_to 10.0
0004: $checkpoint1 = 6 ;; integer values
0005: @11 = -1691.78 ;; floating-point values
0005: @12 = -409.30 ;; floating-point values
0005: @13 = 13.9 ;; floating-point values
0175: set_car @7 z_angle_to 180.0
0008: $check2 += 0 ;; integer values
0005: $speed1 = 40.0 ;; floating-point values
0005: $speed2 = 10.0 ;; floating-point values
04e0: car @7 abandon_path_radius 250
00AE: unknown_set_car @7 to_ignore_traffic_lights 2
0002: jump ££Drive_sub_100
:Drive_sub_16
00D6: if 0
0038: $checkpoint1 == 6 ;; integer values
004D: jump_if_false ££Drive_sub_17
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 8.2 8.2 5.0
004D: jump_if_false ££Drive_sub_17
00AD: set_car @7 max_speed_to 0.0
0004: $checkpoint1 = 7 ;; integer values
0005: @11 = -1519.78 ;; floating-point values
0005: @12 = -580.30 ;; floating-point values
0005: @13 = 13.76 ;; floating-point values
0175: set_car @7 z_angle_to 250.0
0008: $check2 += 0 ;; integer values
0005: $speed1 = 100.0 ;; floating-point values
0005: $speed2 = 0.0 ;; floating-point values
04e0: car @7 abandon_path_radius 250
00AE: unknown_set_car @7 to_ignore_traffic_lights 2
0002: jump ££Drive_sub_100
:Drive_sub_17
00D6: if 0
0038: $checkpoint1 == 7 ;; integer values
004D: jump_if_false ££Drive_sub_18
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 15.2 15.2 5.0
004D: jump_if_false ££Drive_sub_18
00AD: set_car @7 max_speed_to 5.0
01EB: set_car_density_to 0.0
0004: $checkpoint1 = 8 ;; integer values
0005: @11 = -1299.78 ;; floating-point values
0005: @12 = -565.30 ;; floating-point values
0005: @13 = 13.76 ;; floating-point values
0175: set_car @7 z_angle_to 0.0
0008: $check2 += 0 ;; integer values
0005: $speed1 = 100.0 ;; floating-point values
0005: $speed2 = 20.0 ;; floating-point values
04e0: car @7 abandon_path_radius 250
0002: jump ££Drive_sub_100
:Drive_sub_18
00D6: if 0
0038: $checkpoint1 == 8 ;; integer values
004D: jump_if_false ££Drive_sub_109
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 25.2 25.2 5.0
004D: jump_if_false ££Drive_sub_109
00AD: set_car @7 max_speed_to 0.0
0004: $checkpoint1 = 1 ;; integer values
0008: $check2 += 1 ;; integer values
0005: @11 = -1181.78 ;; floating-point values
0005: @12 = -331.30 ;; floating-point values
0005: @13 = 13.76 ;; floating-point values
0175: set_car @7 z_angle_to 1.0
0005: $speed1 = 100.0 ;; floating-point values
0005: $speed2 = 20.0 ;; floating-point values
04e0: car @7 abandon_path_radius 250
00AE: unknown_set_car @7 to_ignore_traffic_lights 2
00D6: if 0
0038: $check2 == 2 ;; integer values
004D: jump_if_false ££Drive_sub_100
00BC: text_highpriority 'BJ_LOSE' 5000 ms 1
0002: jump ££Drive_sub_100
:Drive_sub_99
00D6: if 0
0038: $mark03 == 0 ;; integer values
004D: jump_if_false ££Drive_sub_109
00AD: set_car @7 max_speed_to 0.0
05CB: actor_goto_and_enter_car @9 @7 5000
0004: $mark03 = 1 ;; integer values
0002: jump ££Drive_sub_109
:Drive_sub_100
00A7: car @7 drive_to @11 @12 @13
00AD: set_car @7 max_speed_to $speed1
03F0: text_draw_toggle 0
0006: @33 = 0 ;; integer values
0002: jump ££Drive_sub_109
:Drive_sub_102
00D6: if 0
01F3: car @7 airborne
004D: jump_if_false ££Drive_sub_103
0005: $speed2 = 0.0 ;; floating-point values
00A7: car @7 drive_to @11 @12 @13
04BA: set_car @7 speed_instantly $speed2
00AD: set_car @7 max_speed_to $speed1
0002: jump ££Drive_sub_103
:Drive_sub_103
00D6: if 0
01AF: car @7 0 ()near_point @11 @12 @13 radius 30.2 30.2 5.0
004D: jump_if_false ££Drive_sub_104
0002: jump ££Drive_sub_105
:Drive_sub_104
02E3: $sperce5 = car @7 speed
00D6: if 0
81F3: NOT car @7 airborne
004D: jump_if_false ££Drive_sub_106
00D6: if 1
0020: $sperce5 > 30.0 ;; floating-point values
0019: @33 > 700 ;; integer values
004D: jump_if_false ££Drive_sub_105
04BA: set_car @7 speed_instantly 50.0
008C: $sperce6 = float_to_integer $sperce5
:Drive_sub_105
00D6: if 0
0019: @33 > 2000 ;; integer values
004D: jump_if_false ££Drive_sub_109
:Drive_sub_106
0006: @33 = 0 ;; integer values
:Drive_sub_109
0051: return
Animationen
- Die Animationen an sich sind als *.ifp-Dateien erstellt,
und können durch Script-Kommandos ausgeführt werden
Ein Großteil der Animationen befindet sich in der SA\anim\ped.ifp
Sie werden beim Spielstart automatisch geladen und lassen die Exe-gesteuerte
Spiel-Bevölkerung verschiedene Handlungen ausführen
Animationen der SA\anim\ped.ifp lassen sich direkt, ohne vorheriges Laden,
mit der Animations-code-Zeile ausführen - Der andere Teil der Animationen befindet sich in vielen kleinen einzelnen *.ifp-Dateien,
in der gta3.img. Auch die Animationen, die einer Waffe zugeordnet sind.
Diese Animationen müssen vorher geladen und bei Script-Ende released werden:
Geladen und released wird der Name der *.ifp-Datei.
Im Ausführungs-code wird die Einzel-Animation und der Name der *.ifp-Datei eingetragen - Die Animationen, die einer Waffe zugeordnet sind, werden vom Player automatisch ausführt.
Sie werden von der Exe gesteuert und nicht in der main.scm
Lassen sich aber auch auf diese Weise ausführen. - Animations-Ausführungs-codes lassen sich auch in Pakete zusammenfassen
- Das Paket wird in der Regel entlassen, indem anschließend folgender code gesetzt wird:
- Die actors unterbrechen die Animation, wenn man sie anrempelt.
- Das lässt sich verhindern, wenn folgender code ins Paket hinzugefügt wird:
- Der Enlassungs-code hebt dies wieder auf und kann deshalb auch an einer späteren stelle gesetzt werden
- Man kann abfragen, ob eine bestimmte Animation ausgeführt wird und auch den Zeitpunkt der Animations-Phase
- Die Bedeutung der Parameter beschreibt Plynton so:
- lockX 0 lockY 0 heißt, er bleibt auf der Stelle
- Um herrauszufinden, welche Animationen die *.ifp-Dateien enthalten kann man sie
mit Hilfe von Kam´s script in 3dMax laden.
Eine unvollständige Liste gibts von Ceej auf GTAforums.com - Zusätlich gibts noch die Möglichkeit bestimmte Animationen als Aktions-codes zu verwenden.
Oder eine Gangart einem actor zuweisen, oder den actor irgendwohin gehen lassen
0605: actor @1 perform_animation_sequence "CLIMB_Pull" from_file "PED" 4.0 0 0 0 1 -1 ms
:Animation1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
04ED: load_animation "PARK"
:Animations_load_check
0001: wait 0 ms
00D6: if 0
04EE: animation "PARK" loaded
004D: jump_if_false ££Animations_load_again
0002: jump ££Animation_run
:Animations_load_again
04ED: load_animation "PARK"
0002: jump ££Animations_load_check
:Animation_run
0605: actor @1 perform_animation_sequence "TAI_CHI_LOOP" from_file "PARK" 4.0 0 0 0 1 -1 ms
0001: wait 5000 ms
:Animation_end
04EF: release_animation "PARK"
0615: define_action_sequences @8
0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "DNCE_M_A" from_file "DANCING" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "DNCE_M_A" from_file "DANCING" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "DAN_LOOP_A" from_file "DANCING" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "DNCE_M_D" from_file "DANCING" 4.0 0 0 0 1 -1 ms
0616: define_action_sequences_end @8
0618: assign_actor @1 to_action_sequences @8
061B: @8
0643: @8 1
0615: define_action_sequences @8
0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "DNCE_M_A" from_file "DANCING" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "DNCE_M_A" from_file "DANCING" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "STR_B2C" from_file "STRIP" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "DAN_LOOP_A" from_file "DANCING" 4.0 0 0 0 1 -1 ms
0605: actor -1 perform_animation_sequence "DNCE_M_D" from_file "DANCING" 4.0 0 0 0 1 -1 ms
0643: @8 1
0616: define_action_sequences_end @8
0618: assign_actor @1 to_action_sequences @8
00D6: if 0
0611: actor @1 animation == "DNCE_M_A"
004D: jump_if_false ££weiter
0613: @25 = actor @1 animation "DNCE_M_A" time
00D6: if 0
0023: .6 > @25 ;; floating-point values
004D: jump_if_false ££weiter
0605=9,set_actor %1d% perform_animation %2h% file %3h% %4d% loop %5h% lockX %6h% lockY %7h% lockF %8h% limT %9h%
0605: actor @1 perform_animation_sequence "TAI_CHI_LOOP" from_file "PARK" loop 4.0 lockX 0 lockY 0 lockF 0 limT 1 -1 ms
05D3: AS_actor @1 go_to -1629.6 1411.7 6.2 speed 4 timeout -1
0245: set_actor @1 walk_style_to "DRUNKMAN"
0639: AS_actor @1 rotate_to_actor $PLAYER_ACTOR
05BC: AS_actor_jump @1 1
05D9: @1 go_to $PLAYER_ACTOR time 12000 radius 5.0
05C7: use_atm @1
05C8: look_around @1
05C2: show_the_finger @1
05C4: hands_up @1 time 15000
0729: AS_actor @1 hold_cellphone 1
0729: AS_actor @1 hold_cellphone 0
0823: AS_actor @1 greet_actor $PLAYER_ACTOR .5 5
06B0: AS_actor $PLAYER_ACTOR sit_down 999999 ms
0967: actor @1 move_mouth_for 10000 ms
05E2: AS_actor @1 kill_actor $PLAYER_ACTOR
Sounds
- Die Radiosender kann man nur hören, wenn man in oder auf einem Fahrzeug sitzt.
Es ist machbar auch Musik zu Fuss zu hören
Dazu müssen aber andere Sounddateien benutzt werden und per main oder sonst wie initiiert werden. - Mit der S_Acid mod werden diese Sounddateien modifiziert und Dateien vorbereitet,
daß man seine eigene Musik installieren kann. Mit der S_Acid main kann man dann diese Musik zu Fuß hören. - Für die Radiosender gibts nur die Möglichkeiten
- 1.Einen bestimmten Radiosender einstellen
- 2.Den momentanen Radiosender auslesen und in einer Variable definieren
- 3.Einen Radiosender als Lieblingssender einstellen
- Die Radiosender-Musik ist im *.ogg -Format in SA\audio\streams in spezielle Dateien gepackt
- Die Dateien Ambience und Beats in SA\audio\streams können per main-script initiiert werden
- Mit folgenden codes werden sie gehandhabt:
- Die Sounds der Datei Ambience wird vorwiegend in Innenräumen benutzt, wie z.B. im Nachtclub oder Casino
Die Initiialisierung und Zuordnung wird dabei aber über die SA\data\maps\Audiozon.ipl geregelt.
Diese Initiialisierung kann aber auch per main-script vorgenommen werden: - Zwei der Sounds der Datei Beats lassen sich mit folgenden codes abspielen:
- verschiedene sounds lassen sich so als sound auslösen
- Dialog-Sounds sind im *.wav -Format in SA\audio\SFX in spezielle Dateien gepackt
- Die waves der Datei SCRIPT werden folgendermaßen gehandhabt
- Man kann den wave-sound auch einem actor zuordnen
- In der original SA-main.scm befindet sich ein Thread, der das Wav-laden und Abspielen übernimmt.
Er lässt den actor auch Mundbewegungen machen und stellt den angegebenen Text dar.
Es ist der Thread AUDIOL_1. Er wird mit der create_thread-Zeile extra für einen wav-sound ausgeführt.
Dazu muß man den Variable-Namen eines actors oder des Players mitangeben
Und natürlich die Sound-Nummer: - Dann gibts noch ne Reihe anderer codes um actor sprechen zu lassen
Die funktionieren meistens nur mit den passenden Peds
Z.B. - In der SA\audio\CONFIG\AudioEventHistory.txt sind wichtigsten Sounds aufgeführt
Eine Umfangreiche Aufschlüsselung der SFX-Sounds findet man hier
041E: set_radio_station 11
051E: get_radio_station @5
041E: set_radio_station @5
0A26: set_radio_to_favorite_station
0953: get_soundtrack_status_to @17
0952: load_soundtrack 12
0954: start_playing_loaded_soundtrack
0955: end_playing_loaded_soundtrack
0917: audio_zone 'BEACH' enable 1
0394: play_music 1
0394: play_music 2
018C: play_sound 1058 at 0.0 0.0 0.0
Dialog-Sounds
040D: unload_wav 1
03CF: load_wav 18401 as 1
:wave_load_check
00D6: if 0
83D0: NOT wav 1 loaded
004D: jump_if_false ££play_wave
0001: wait 0 ms
0002: jump ££wave_load_check
:play_wave
03D1: play_wav 1
:loop_wave
0001: wait 0 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££loop_wave
00D6: if 0
03D2: wav 1 ended
004D: jump_if_false ££loop_wave
:end_wave
040D: unload_wav 1
0949: link_wav 1 to_actor @1
0004: $ACTOR_SPEECH_WAV_FILE = 24800 ;; integer values
004F: create_thread ££AUDIOL_1 $PLAYER_ACTOR 0 1 1 0
009A: @5 = create_actor 4 #WMYAMMO at 2481.22 -1675.941 13.73
0947: @5 333 $10081
Text aus der german.gxt
- Die Stopuhr
- Der Statusbalken
- Ändern des darzustellenden Textes
- Codes zur Darstellung von Text gibts jede Menge.
- Der gebräuchlichste ist wohl:
- text_highpriority wird unten dargestellt, ist bei aktivem widescreen sichtbar und in den Game-Infos nachzulesen
- text_lowpriority wird unten dargestellt, ist bei aktivem widescreen NICHT sichtbar und NICHT in den Game-Infos nachzulesen
- Im letzten Parameter, im Beispiel die 1, kann ein Wert bis 5 eingetragen werden
Das ändert dann die Darstellungsvariante - Zusätlich kann zum Text ein oder mehrere integere Werte angezeigt werden,in Form von Variablen,
die im script ausgerechnet werden oder durch einfachen Eintrag einer integeren Zahl - text_styled wird meistens zur Ankündigung oder Abschluss von Missionen benutzt
- Im letzten Parameter, im Beispiel die 2 bzw. 1, kann ein Wert bis 7 eingetragen werden
Das ändert dann die Darstellungsvariante - 1: gelbe Schrift, groß, Bildschirm-Mitte
2: gelbe Schrift, groß, rechts unten
3: weiße, altdeutsche Schriftart, groß, Bildschirm-Mitte, Text verschwindet nicht, kommt in der original main.scm nicht vor
4: gelbe Schrift, klein, etwas über Bildschirm-Mitte
5: weiße Schrift, klein, etwas über Bildschirm-Mitte
6: weiß-gelbe Schrift, fett, oben - Als Meldung für "Mission erfolgreich bestanden wird meistens text_1number_styled
- Hier sollte man einen integeren Wert eintragen können, auch in Form einer Variable
Funktioniert scheinbar nur in Missions-scripte - Die Textbox stellt einen dunklen Kasten dar, in dem der Text eingeschlossen wird.
- Die Breite ist begrenzt, die Länge passt sich an.
- Für text_draw gibts viel Einstellungs-codes,
die der text_draw-Zeile mit dem Eintragsnamen vorrangestellt werden
Größe der Buchstaben, Schrift-Style, Zeilenlänge, usw. - Für Zahlendarstellungen ist das Koordinaten-Script als Beispiel geeignet
- Ein schwarzes oder farbiges Feld auf dem Bildschirm,
- dessen Höhe und Breite bestimmt werden kann, wird mit diesem code erzeugt:
- Text_draw-Darstellungen müssen widerrufen werden:
- In dieser Code-Zeile ist der Name der GXT-Kategorie einzutragen
- Die Stopuhr funktioniert nur mit Globalen Variablen und integeren Werten
- Zuerst wird der Variable-Wert definiert, dann der Timer gestartet
type 0 zählt aufwärts
type 1 zählt abwärts
Im Script wird die Variable abgefragt und am Ende der Timer abgeschaltet
Ein Beispiel - Der Statusbalken funktioniert nur mit Globalen Variablen und integeren Werten
- Zuerst wird der Variable-Wert definiert, dann der Statusbalken eingeschaltet
Ein voller Balken entspricht 100
Der Variable-Wert ist dementsprechend umzurechnen
Im Script wird die Variable abgefragt und am Ende der Statusbalken abgeschaltet
Ein Beispiel - Text in der german.gxt modifizieren
- Dazu bevorzuge ich den sagxtedit von Hammer83
- Saug Dir den Editor, packe eine Kopie der german.gxt in den Ordner
wo sich die sagxtedit.exe befindet.
Saug Dir dann noch diese INI und packe sie auch dorthin.
Starte den sagxtedit und öffne jetzt die german.gxt, die sich bei der
sagxtedit.exe befindet.
Im linken oberen Fenster sind die GXT-Kategorien aufgelistet
Im linken unteren Fenster sind die Eintragsnamen und der dazugehörige Text aufgelistet,
die zur markierten GXT-Kategorie im linken oberen Fenster gehören
Im rechten Fenster wird nur der Text dargestellt,
der zum markierten Eintrag im linken unteren Fenster gehört
Die Eintragsnamen des linken unteren Fensters werden in der main.scm benutzt
Klick im linken oberen Fenster auf die Kategorie "main"
Klick auf das suchen-icon (Fernglas)
Jetzt gibts 2 Möglichkeiten für die Suche
1."Find Name" / hier ist der Eintragsname als Suchbegriff einzugeben
2."Find Value" / hier kann ein Suchbegriff eingegeben werden, der im darzustellenden Text enthalten sein soll
Wähle jetzt 2."Find Value" und suche nach: dirtbike danger
Der gefundene Eintragsname sollte RACE09 sein.
Wenn das nicht der Fall ist sondern nur ein wirres Gemisch aus Zahlen und Buchstaben,
dann must Du die ini-Datei importieren:
Klick dazu wieder auf das suchen-icon (Fernglas) und wähle "String List Match"
Ein Fenster erscheint,
Klick auf Open,
Ändere im öffnen-Fenster unten bei Dateityp um auf "ALL FILES *.*"
Öffne dann über dieses Fenster die german.ini
Bestätige mit OK
Wähle jetzt 2."Find Value" und suche nach: dirtbike danger
Der gefundene Eintragsname sollte RACE09 sein.
Denk daran: sagxtedit.exe, german.gxt und german.ini sollen sich alle in einem Ordner befinden
Mit der american.gxt funktionierts genauso.
Dazu einfach german.ini in american.ini umbenennen.
- In dieser Code-Zeile ist der Name der GXT-Kategorie einzutragen
00BC: text_highpriority 'LOW_32' 5000 ms 1
00BB: text_lowpriority 'LOW_32' 4000 ms 1
01E5: text_1number_highpriority 'LOW_38' @271 5000 ms 1
0303: text_4numbers_highpriority 'QUAR_P6' @208 @209 @210 @211 10000 ms 1
0308: text_6numbers 'HJSTAT' $1299 $1298 $1292 $1297 $1296 $1300 5000 ms 5
00BA: text_styled 'DESERT5' 1000 ms 2
00BA: text_styled 'M_FAIL' 5000 ms 1
00BA: text_styled 'M_PASSD' 5000 ms 1
01E3: text_1number_styled 'M_PASSR' 5 5000 ms 1
036D: text_2numbers_styled 'STUNTPT' @125 @123 5000 ms 1
;---Die einfache Textbox verschwindet nach ca. 10 Sekunden:
03E5: text_box 'NEWWEAP'
;---Die permanente Textbox muss widerrufen werden:
0512: permanent_text_box 'AMMU_H3'
03E6: remove_text_box
0340: set_text_draw_color 0 0 0 255
033F: set_text_draw_letter_width_height 0.8 3.5
03E4: set_text_draw_align_right 0
0341: unknown_text_stuff 0
0342: set_text_draw_centered 0
0343: set_text_linewidth 200.0
0348: set_text_draw_proportional 1
0345: set_text_draw_in_box 0
0349: text_draw_style = 2
033E: text_draw 50.0 80.0 'BB_12'
03F0: text_draw_toggle 1
0001: wait 50 ms
03F0: text_draw_toggle 0
0001: wait 50 ms
045A: text_draw_1number 50.0 425.0 'NUMBER' @3 ; value
045A: text_draw_1number 200.0 425.0 'NUMBER' @4 ; value
045A: text_draw_1number 350.0 425.0 'NUMBER' @5 ; value
045A: text_draw_1number 100.0 425.0 'NUMBER' @11 ; value
045A: text_draw_1number 250.0 425.0 'NUMBER' @12 ; value
045A: text_draw_1number 400.0 425.0 'NUMBER' @13 ; value
038E: 140.0 220.0 600.0 150.0 0 0 0 255;draw_box position; BxH; color ; alpha 255
03F0: text_draw_toggle 0
Eintragsnamen der GXT-Kategorie "main" können mit Textdarstellungs-codes jederzeit benutzt werden.
Eintragsnamen anderer GXT-Kategorien NICHT!
Die anderen GXT-Kategorien sind Missionen zugeordnet
Dazu muss man das erst anmelden:
054C: use_GXT_table 'RACETOR'
014E: set_timer_to $time1 type 1
:Timer_1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
03A4: name_thread 'TIM'
:Timer_2
0001: wait 0 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££Timer_2
00D6: if 0
00FF: actor $PLAYER_ACTOR 1 (in-sphere)near_point_on_foot 2493.5 -1682.5 13.35 radius 1.0 1.0 1.0
004D: jump_if_false ££Timer_2
0004: $time1 = 8000 ;; integer values
014E: set_timer_to $time1 type 1
00A1: put_actor $PLAYER_ACTOR at 2524.5 -1677.5 19.95
0002: jump ££Timer_3
:Timer_3
0001: wait 0 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££Timer_3
00D6: if 21
00FF: actor $PLAYER_ACTOR 1 (in-sphere)near_point_on_foot 2493.5 -1682.5 13.35 radius 8.0 8.0 1.0
001A: 1 > $time1 ;; integer values
004D: jump_if_false ££Timer_3
014F: stop_timer $time1
00A1: put_actor $PLAYER_ACTOR at 2497.5 -1681.5 13.4
0002: jump ££Timer_2
03C4: set_status_text_to $ActorHealth1 1 (bar) 'SYND_4'
:StatusBar_1;;;--------------------------MB0.33/sascm.ini vom 1.Sep.2005
03A4: name_thread 'STB'
:ActorHealth_2
0001: wait 0 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££ActorHealth_2
00D6: if 0
00FF: actor $PLAYER_ACTOR 1 (in-sphere)near_point_on_foot 2493.5 -1678.5 13.35 radius 1.0 1.0 1.0
004D: jump_if_false ££ActorHealth_2
0247: request_model #VMAFF4
0247: request_model #AK47
:ActorHealth_3
0001: wait 0 ms
00D6: if 1
0248: model #VMAFF4 available
0248: model #AK47 available
004D: jump_if_false ££ActorHealth_3
009A: $killer1 = create_actor 24 #VMAFF4 at 2486.5 -1664.5 13.45
0173: set_actor $killer1 z_angle_to 180.0
01B2: give_actor $killer1 weapon 30 ammo 99999 ;; Load the weapon model before using this
02E2: set_actor $killer1 weapon_accuracy_to 100
0223: set_actor $killer1 health_to 3000
0446: set_actor_immune_to_headshots $killer1 0
05E2: AS_actor $killer1 kill_actor $PLAYER_ACTOR
0249: release_model #VMAFF4
:StatusBar_2
0001: wait 0 ms
00D6: if 0
0256: player $PLAYER_CHAR defined
004D: jump_if_false ££StatusBar_3
00D6: if 0
8118: NOT actor $killer1 dead
004D: jump_if_false ££StatusBar_3
00D6: if 0
0104: actor $PLAYER_ACTOR near_actor $killer1 radius 200.0 200.0 10.0 sphere 0
004D: jump_if_false ££StatusBar_3
0226: $ActorHealth1 = actor $killer1 health
0014: $ActorHealth1 /= 30 ;; integer values
03C4: set_status_text_to $ActorHealth1 1 (bar) 'SYND_4'
00D6: if 0
001A: 20 > $ActorHealth1 ;; integer values
004D: jump_if_false ££StatusBar_2
0446: set_actor_immune_to_headshots $killer1 1
0002: jump ££StatusBar_2
:StatusBar_3
0151: remove_status_text $ActorHealth1
01C2: remove_references_to_actor $killer1 ;; Like turning an actor into a random pedestrian
0002: jump ££ActorHealth_2
Modifizierten Texteintrag speichern:
Beim Speichern ist sagxtedit etwas eigenartig.
Nach dem Ändern eines darzustellenden Textes,
erst auf einen anderen Eintragsnamen klicken und dann speichern
Eintragsnamen der GXT-Kategorie "main" können mit Textdarstellungs-codes jederzeit benutzt werden.
Eintragsnamen anderer GXT-Kategorien NICHT!
Die anderen GXT-Kategorien sind Missionen zugeordnet
Dazu muss man das erst anmelden:
054C: use_GXT_table 'RACETOR'