Hoofdpagina > Modding > Modding Tutorial List > Statusbalken scripten
Deze tutorial gaat over status texten, ofwel de balkjes die je bijvoorbeeld tegenkomt bij de missie "Drive-by" en de missie "Supply Lines".
:SWEET4_47 Model.Load(#GREENWOO) 038B: load_requested_models :SWEET4_103 if not Model.Available(#GREENWOO) else_jump @SWEET4_152 wait 0 jump @SWEET4_103 :SWEET4_152 1@ = 2508.16 2@ = -1666.47 3@ = 13.0 4@ = 16.0 0395: clear_area 1 at 1@ 2@ 3@ range 6.0 5@ = Car.Create(#GREENWOO, 1@, 2@, 3@) 0229: set_car 5@ color_to 59 34 Car.Angle(5@) = 4@ Car.Health(5@) = 1450 $6674 = Car.Health(5@)
Dit is gewoon het spawnen van een voertuig, de Greenwood. Daarnaast wordt de variabele $6674 aangemaakt, dat betekent de car health van de Greenwood.
Ik zal eerst even het principe uitleggen. Het balkje gaat van 0 tot 100, gemeten in percentages. Je hebt de car health van de Greenwood op 1450 staan. Onder de 250 gaat de auto branden en ontploffen. Als je dus zegt dat 250 de 0 is van het balkje, dan is de 1450: 1200 (1450 - 250 = 1200). Aangezien je maar van 0 tot 100 mag hebben, moet je dat getal dus delen door 12. Dat gaan we nu eerst laten zien.
0084: $6673 = $6674 // integer values and handles if $6673 > 250 // integer values else_jump @SWEET4_11472 $6673 -= 250 // integer values :SWEET4_11472 $6673 /= 12 // integer values
Voor je bij $6674 250 af gaat trekken, moet je eerst kijken of hij boen de 250 is. Anders kom je in een negatief getal en dat kan het balkje dus niet aan. Dus als het getal onder de 250 ligt moet je alvast verder gaan bij het volgende label (door de jump), als het getal boven de 250 ligt moet je er 250 vanaf halen.
Vervolgens stel je de variabele $6673 gelijk aan de variabele $6674 (de car health - 250 dus). Dat getal deel je door 12. Zo heb je dus in plaats van een getal tussen 250 en 1450, een getal tussen 0 en 100. In verhouding hetzelfde, maar zo kan je dus instellen voor dat balkje.
0151: remove_status_text $6673 03C4: set_status_text_to $6673 1 'SWE4_08' // CAR HEALTH[/code]
Dit is de code van "het balkje". Je ziet niet "car health" staan, aangezien de thread niet overeenkomt met het deel uit de GXT wat aangeroepen wordt.
Je kunt de 1 ook veranderen in een 0, dan is het niet meer een balkje, maar een getal. Dan begin je dus met 100 en dan eindig je met 0 en alle waardes daar tussenin.
repeat wait 0 ms $6674 = Car.Health(5@) 0084: $6673 = $6674 // integer values and handles if $6673 > 250 // integer values else_jump @SWEET4_11472 $6673 -= 250 // integer values :SWEET4_11472 $6673 /= 12 // integer values until $6674 < 250 0151: remove_status_text $6673 end_thread
Wat we hier maken is dat je het balkje ziet tot de auto kapot is (balkje verdwijnt als de variabele op 0 komt dus).
Dit is een repeat-wait-until structuur. Hij moet dus alles herhalen vanaf repeat, totdat $6674 kleiner is als 250 (dan is $6673 0 dus). Waarom hebben we nou nog een stuk erin gekopieerd? Omdat hij in de repeat, telkens moet checken of de car health veranderd, dat telkens gelijk moet stellen aan $6673, van $6673 telkens 250 af moet trekken, en $6673 telkens weer moet delen. Anders blijft hij natuurlijk op hetzelfde getal staan, en zal het balkje nooit aflopen.
Je wacht dus tot $6674 (de car health) onder de 250 komt. Dan ontploft de auto namelijk. Dan laat je het balkje met de code "0151: remove_status_text $6673" verdwijnen. Tot slot nog een end_thread, zodat het spel niet crasht en verder gaat met de main thread.
Alles in een stripped SCM file, dus dat je een auto ziet en dat het balkje loopt tot hij kapot gaat, zie je hieronder. Tip: gooi dit even in SannyBuilder om te kijken hoe het er werkelijk uit ziet, zodat je je het beter voor kunt stellen.
{ use macro (Ctrl+J) "headsa" to insert a file header } {$VERSION 3.0.0000} var $PLAYER_CHAR: Player end // var 03A4: name_thread 'MAIN' 01F0: set_max_wanted_level_to 6 0111: toggle_wasted_busted_check 0 00C0: set_current_time_hours_to 8 minutes_to 0 04E4: unknown_refresh_game_renderer_at 2488.56 -1666.84 03CB: set_rendering_origin_at 2488.56 -1666.84 13.38 0053: $PLAYER_CHAR = create_player #NULL at 2488.56 -1666.84 13.38 01F5: $PLAYER_ACTOR = create_player_actor $PLAYER_CHAR 07AF: $PLAYER_GROUP = player $PLAYER_CHAR group 0373: set_camera_directly_behind_player 01B6: set_weather 0 0001: wait 0 ms 087B: set_player $PLAYER_CHAR clothes_texture "PLAYER_FACE" model "HEAD" body_part 1 087B: set_player $PLAYER_CHAR clothes_texture "JEANSDENIM" model "JEANS" body_part 2 087B: set_player $PLAYER_CHAR clothes_texture "SNEAKERBINCBLK" model "SNEAKER" body_part 3 087B: set_player $PLAYER_CHAR clothes_texture "VEST" model "VEST" body_part 0 070D: rebuild_player $PLAYER_CHAR 01B4: toggle_player $PLAYER_CHAR can_move 1 016A: fade 1 time 0 04BB: select_interior 0 0629: change_integer_stat 181 to 4 016C: restart_if_wasted_at 2027.77 -1420.52 15.99 angle 137.0 town_number 0 016D: restart_if_busted_at 1550.68 -1675.49 14.51 angle 90.0 town_number 0 0180: set_on_mission_flag_to $ONMISSION // Note: your missions have to use the variable defined here 0004: $DEFAULT_WAIT_TIME = 250 03E6: remove_text_box 004F: create_thread @BALKJE // put your create_thread commands here :MAIN_LOOP 0001: wait $DEFAULT_WAIT_TIME ms 00BF: $TIME_HOURS = current_time_hours, $TIME_MINS = current_time_minutes 0002: jump @MAIN_LOOP :BALKJE thread "BALKJE" :SWEET4_47 Model.Load(#GREENWOO) 038B: load_requested_models :SWEET4_103 if not Model.Available(#GREENWOO) else_jump @SWEET4_152 wait 0 jump @SWEET4_103 :SWEET4_152 1@ = 2508.16 // floating-point values 2@ = -1666.47 // floating-point values 3@ = 13.0 // floating-point values 4@ = 16.0 // floating-point values 0395: clear_area 1 at 1@ 2@ 3@ range 6.0 5@ = Car.Create(#GREENWOO, 1@, 2@, 3@) 0229: set_car 5@ color_to 59 34 Car.Angle(5@) = 4@ Car.Health(5@) = 1450 $6674 = Car.Health(5@) if $6674 > 250 // integer values else_jump @SWEET4_11471 $6674 -= 250 // integer values :SWEET4_11471 0084: $6673 = $6674 // integer values and handles $6673 /= 12 // integer values 0151: remove_status_text $6673 03C4: set_status_text_to $6673 0 'SWE4_08' // CAR HEALTH repeat wait 0 ms $6674 = Car.Health(5@) 0084: $6673 = $6674 // integer values and handles if $6673 > 250 // integer values else_jump @SWEET4_11472 $6673 -= 250 // integer values :SWEET4_11472 $6673 /= 12 // integer values until $6674 < 250 0151: remove_status_text $6673 end_thread
Hopelijk is het een beetje duidelijk, reactie en/of vragen kan je altijd in het reactietopic kwijt.