robin_be Geplaatst: 30 september 2017 Rapport Geplaatst: 30 september 2017 (bewerkt) Arrays In deze tutorial leg ik uit hoe je met arrays kunt werken in SCM. Benodigdheden GTA:SA en Sannybuilder basis SCM-kennis (Basis SCM-scripten: tutorial door @Dutchy3010 & @PatrickW) --------------------------- Arrays Stel dat je een aantal actors maakt in je script, en je wilt dat die de speler aanvallen. Dit kun je zo doen: 009A: 10@ = create_actor_pedtype 4 model #MALE01 at 2460.1829 -1655.1241 13.3359 009A: 11@ = create_actor_pedtype 4 model #MALE01 at 2465.1829 -1655.1241 13.3359 009A: 12@ = create_actor_pedtype 4 model #MALE01 at 2470.1829 -1655.1241 13.3359 009A: 13@ = create_actor_pedtype 4 model #MALE01 at 2475.1829 -1655.1241 13.3359 009A: 14@ = create_actor_pedtype 4 model #MALE01 at 2480.1829 -1655.1241 13.3359 009A: 15@ = create_actor_pedtype 4 model #MALE01 at 2485.1829 -1655.1241 13.3359 009A: 16@ = create_actor_pedtype 4 model #MALE01 at 2490.1829 -1655.1241 13.3359 0634: AS_actor 10@ attack_using_weapon_actor $PLAYER_ACTOR flags 7 perform_actions_after_time 2000 chance_of_action 100 0634: AS_actor 11@ attack_using_weapon_actor $PLAYER_ACTOR flags 7 perform_actions_after_time 2000 chance_of_action 100 0634: AS_actor 12@ attack_using_weapon_actor $PLAYER_ACTOR flags 7 perform_actions_after_time 2000 chance_of_action 100 0634: AS_actor 13@ attack_using_weapon_actor $PLAYER_ACTOR flags 7 perform_actions_after_time 2000 chance_of_action 100 0634: AS_actor 14@ attack_using_weapon_actor $PLAYER_ACTOR flags 7 perform_actions_after_time 2000 chance_of_action 100 0634: AS_actor 15@ attack_using_weapon_actor $PLAYER_ACTOR flags 7 perform_actions_after_time 2000 chance_of_action 100 0634: AS_actor 16@ attack_using_weapon_actor $PLAYER_ACTOR flags 7 perform_actions_after_time 2000 chance_of_action 100 (eerst natuurlijk wel het #MALE01 model laden) Hier heb je nu eigenlijk 12 lijntjes die puur herhaling zijn. En bij programmeren weet je: herhaling is (meestal) niet goed en kan je meestal wegwerken! Drie keer raden wat we hiervoor kunnen gebruiken Arrays! Een array is eigenlijk gewoon een reeks variabelen. Bij een array kun je dus gemakkelijk een aantal variabelen aanspreken. Hiervoor gebruik je een basis variabele, en een index variabele: 1@ = 4 20@(1@,1i) = 3 In bovenstaand voorbeeld is 20@ de basis variabele en 1@ de index variabele. Dit wilt zeggen dat je variabele (20+index) zal aanpassen, in dit voorbeeld zal dus de waarde 3 zitten in 24@. Je kan trouwens ook een negatieve index gebruiken, iets wat veel programmeertalen niet leuk vinden. Je ziet ook die '1i' staan. Naast de index moet je de grootte van de array geven, en het datatype van de elementen (dit bepaald hoeveel bytes (plaats) elk element inneemt). De grootte maakt eigenlijk niet uit, je moet gewoon een nummer > 0 gebruiken. Voor het type moet je een teken gebruiken: i: integer 4 bytesf: float, 4 bytess: shortstring, 8 bytesv: longstring, 16 bytes Meestal zul je dus i of f gebruiken. Voorbeeld 1 Nu kunnen we de code uit het oorspronkelijke voorbeeld korter maken: 20@ = 2460.1829 for 0@ = 0 to 6 009A: 10@(0@,1i) = create_actor_pedtype 4 model #MALE01 at 20@ -1655.1241 13.3359 0634: AS_actor 10@(0@,1i) attack_using_weapon_actor $PLAYER_ACTOR flags 7 perform_actions_after_time 2000 chance_of_action 100 20@ += 5.0 end De uitwerking is exact hetzelfde, nu zitten die actoren nog steeds in variabelen 10@ t.e.m. 16@, maar je hebt er minder code voor gebruikt. Voorbeeld 2 De array notatie is ook perfect voor wanneer je bijvoorbeeld een willekeurig doelwit wilt hebben: // in variabelen 10@ tot 14@ zitten allemaal auto's // nu wil je 1 ervan als doelwit hebben 0209: 0@ = random_int_in_ranges 0 6 // resultaat is 0 - 5 0085: 1@ = 10@(0@,1i) // doelwit auto zit nu ook in 1@ 0186: 2@ = create_marker_above_car 1@ Alternatieve notatie In sannybuilder kan je ook een andere notatie gebruiken, één die misschien beter gekend is door mensen die al in andere talen met arrays gewerkt hebben: var 20@: array 5 of Integer end 1@ = 4 20@[1@] = 3 Bij deze notatie kan je zelf een index specifiëren zonder een variabele te gebruiken, maar dit kan enkel bij globale variabelen: var $actors: array 5 of Integer end $actors[2] = 3 Bewerkt: 1 oktober 2017 door robin_be correctie eerste codevoorbeeldje alternatieve notatie Reageren
Dutchy3010 Geplaatst: 30 september 2017 Rapport Geplaatst: 30 september 2017 Yes, thanks Robin Heb vaker met Arrays gewerkt in 't verleden, maar kon wel weer even een refresh gebruiken. Reageren
Recommended Posts
Een reactie plaatsen
Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.