Eines Tages wollte ich einen Levelcode machen, und da muss man ja oft die Strings an Zeichen trennen, um an die einzelnen Variablen zu kommen. Also ging ich auf Scripts/Import Scripts, nur um zu sehen, dass ich mein jahrelang genutztes Explode-Skript von Bottleneck verloren habe!
Also was jetzt? Google beförderte ein paar Scripts an den Tag, die entweder nicht mit meinem Zeug funzten oder ich nicht wusste, wie man sie benutzt/ein wenig umbaut. Also habe ich kurzerhand mein eigenes erstellt.
SCRIPT
Spoiler anzeigen
Alles anzeigen
BEISPIEL-CODE
object0:
Ergibt im Debug-Mode:
Natürlich bin ich immer offen für Vorschläge, Kommentare und Kritik!
Getestet auf GM7 Pro.
Also was jetzt? Google beförderte ein paar Scripts an den Tag, die entweder nicht mit meinem Zeug funzten oder ich nicht wusste, wie man sie benutzt/ein wenig umbaut. Also habe ich kurzerhand mein eigenes erstellt.
SCRIPT
GML-Quellcode
- /*
- Superyoshi's Explode-Skript
- Benutze es so:
- explode_script(arrayname,string,teiler,löschen,limit)
- arrayname: Name des Arrays, in dem die Teile gespeichert werden (arrayname[0] = erster Teil)
- globalarray: 0 (false) wenn das Array lokal sein soll, 1 (true) für ein globales Array
- string: der String, der geteilt werden soll
- teiler: String, an dem geteilt werden soll
- löschen: 1 (true) oder 0 (false), ob der Teiler gelöscht werden soll. Wenn er nicht gelöscht wird, ist der Teiler im Teil davor mit drin
- limit: Wie viele Teile geteilt werden, der Rest bekommt einen eigenen Index. 0 um alles zu teilen
- Return:
- 0 wenn keine Teilung stattfand, ansonsten wie viele Teile es gibt
- */
- var arrayname,globarr,meinstring,teiler,loeschen,limit,meinstring2,vorkommen,sooft;
- //Argumente zu Variablen
- arrayname = argument0
- globarr = argument1
- meinstring = argument2
- teiler = argument3
- loeschen = argument4
- limit = argument5
- //wie oft kommt der Teiler im String vor
- vorkommen = string_count(teiler,meinstring)
- if (limit == 0 || vorkommen < limit) { //wenn Limit aus ist oder der Teiler weniger oft vorkommt als das Limit
- sooft = vorkommen //vorkommen-mal "explodieren"
- } else {
- sooft = limit //limit-mal "explodieren"
- }
- if (vorkommen == 0) { //wenn es nie vorkommt, gleich so lassen
- if (globarr == 1) {
- variable_global_array_set(arrayname,0,meinstring)
- } else {
- variable_local_array_set(arrayname,0,meinstring)
- }
- return 0
- exit
- }
- for (i=0; i<sooft; i+=1) {
- meinstring2 = meinstring //Kopie anlegen
- position = string_pos(teiler,meinstring) //wo ist der Teiler
- if (loeschen == 1) { //wird der Teilere gelöscht?
- meinstring = string_delete(meinstring,position,9999999) //Teiler und alles dahinter raus
- } else {
- meinstring = string_delete(meinstring,position+string_length(teiler),9999999) //alles hinter dem Teiler raus
- }
- if (globarr == 1) {
- variable_global_array_set(arrayname,i,meinstring)
- } else {
- variable_local_array_set(arrayname,i,meinstring)
- }
- meinstring = string_copy(meinstring2,position+string_length(teiler),9999999) //meinstring beinhaltet nun den alten String ohne das Rausgeschnittene und Teiler
- letzteid = i //der wievielte Durchlauf
- }
- if (meinstring == "" || meinstring == " ") {
- return sooft //wenn alles weg ist, sind wir fertig
- } else { //sonst muss noch der Rest it ins Array
- if (globarr == 1) {
- variable_global_array_set(arrayname,letzteid+1,meinstring)
- } else {
- variable_local_array_set(arrayname,letzteid+1,meinstring)
- }
- return sooft+1
- }
BEISPIEL-CODE
object0:
GML-Quellcode
- string1 = "rofl,lol,xD,wut,lmao,omfg"
- string2 = "A-B-C-D-E-F-G"
- string3 = "omnomnomnomnom"
- string4 = "Test:;Trenner:;mit:;mehr:;als:;einem:;Zeichen"
- return1 = explode_script("array1",0,string1,",",1,0)
- return2 = explode_script("array2",0,string2,"-",1,3)
- return3 = explode_script("array3",1,string3,"m",0,0)
- return4 = explode_script("array4",0,string4,":;",1,0)
Ergibt im Debug-Mode:
Natürlich bin ich immer offen für Vorschläge, Kommentare und Kritik!
Getestet auf GM7 Pro.
<Irrenhaus3>wenn [zensiert] erstmal das sabbeln anfängt, wird sogar ne Sinuskurve linear, um schneller abzuhauen
<Irrenhaus3>da geht alles in Deckung
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Superyoshi ()