|
|
scripten allgemein |
steinacker
Milupa-Fan
Dabei seit: 13.03.2008
Beiträge: 662
|
|
moin
ich hab mal ein paar grundlegende fragen, was das scripten (programmieren) angeht
ich hab zwar schon einiges an C / C++ programiert aber diese programmierei bei CoD bereitet mir doch immer wieder kopfschmerzen
ich hab hier mal ein paar auszüge von OMWG's script zu dem randomtriggern:
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
3:
|
randomtrig = getentarray("randomtrigger","targetname"); //Ein Array mit dem Namen randomtrig bilden und mit allen Triggern füllen, die den targetname randomtrigger haben
for (i = 0; i < randomtrig.size; i++) //Schleife. Schleife so oft durchlaufen, bis i die Anzahl der Elemente im Array randomtrig erreicht hat (i beginnt bei 0 und wird pro durchlauf um 1 erhöht
randomtrig[i] triggerOff(); //das Element (den Trigger) mit der Nummer i im Array randomtrig ausschalten |
|
randomtrig = getentarray("randomtrigger","targetname");
hier wird doch eigentlich mit der funktion "getentarray" die größe des array's randomtrig "ermittelt", nämlich die anzahl der trigger in der map mit dem namen randomtrigger
und das eigentliche "befüllen" des arrays macht doch die for-schleife und zwar wird diese so oft durchlaufen, wie anzahl trigger da sind und jeder eingetragene trigger an der "i-ten" stelle wird mit der funktion triggerOff() ausgeschaltet
richtig soweit?
weiter geht's:
Code angehängt. Klicke hier zum Ein-/Ausblenden
code: |
1:
2:
|
level.t1 = randomintrange (0,randomtrig.size-1); //der Variablen level.t1 eine Zufallszahl zuweisen, die zwischen 0 und der Anzahl-1 der Elemente im Array randomtrig liegt
randomtrig[level.t1] triggerOn(); //Das Element (den Trigger), der im Array randomtrig an Position level.t1 steht, wieder einschalten |
|
hier komme ich jetzt nicht ganz mit, nach meinen kenntnissen ist level ein objektarray der klasse level
und randomintrange(int , int) eine funktion die zwei integervariablen übergeben bekommt
aber wo ist diese funktion definiert, bzw. das objektarray der klasse level
und das .t1 kann ich auch nicht so recht zu ordnen
die zweite zeile ist wieder irgendwie verständlich, der ermittelte trigger im array wird mit der fuktion triggerOn() eingeschaltet
Edit:
hab hier mal'n screeny, was ich vor langer zeit programmiert hab, ein kleines archiv um musikCD's etc zu archivieren
in dem programmteil z.b. wird eine txt-datei geöffnet, die daten in ein dynamisches zeigerarray **dieMusikCD eingelesen und in einem listenfeld angezeigt
nur diese scripterei von CoD iss irgendwie verwirrend
__________________ Steinacker, Hans Adam - der letzte Scharfrichter von Bad Mergentheim
der mit der Schärfe eines Schwertes richtende
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von steinacker: 12.03.2009 21:50.
|
|
|
|
|
|
Original von steinacker
randomtrig = getentarray("randomtrigger","targetname");
hier wird doch eigentlich mit der funktion "getentarray" die größe des array's randomtrig "ermittelt", nämlich die anzahl der trigger in der map mit dem namen randomtrigger
und das eigentliche "befüllen" des arrays macht doch die for-schleife und zwar wird diese so oft durchlaufen, wie anzahl trigger da sind und jeder eingetragene trigger an der "i-ten" stelle wird mit der funktion triggerOff() ausgeschaltet
richtig soweit?
Nein.
randomtrig = getentarray("randomtrigger","targetname"); füllt auch gleich das Array randomtrig mit allen Elemtenten die den in den Klammern stehenden Parametern entsprechen (also es werden automatisch alle Elemente in das Array gepackt, die als targetname den Wert randomtrigger haben). Die Größe ergibt sich dabei automatisch (wird also einfach für jedes gefundene Element um 1 erhöht) und steht dann in randomtrig.size
Die for-Schleife danach schaltet dann einfach alle Trigger, die im Array randomtrig gespeichert sind aus (also randomtrig[0] ausschalten, randomtrig[1] ausschalten, randomtrig[2] ausschalten usw.)
Da man ja nicht weiß, wie oft man die Schleife durchlaufen lassen muss, nimmt man sich einfach den Größenwert des Arrays zur Hilfe (in diesem Fall randomtrig.size).
Dadurch ist sichergestellt, das alle Elemente im Array auch angesprochen werden (egal, wie viele Elemente sich im Array befinden).
Und was level betrifft, durch das Kombinieren einer Variablen mit level, wird die Variable global, wodurch sie nicht nur innerhalb der Funktion oder Schleife gültig ist sondern auch in anderen Funktionen und Schleifen (egal ob im selben Script oder sogar in einem anderen).
t1 = lokale Variable (nur innerhalb der Schleife/Funktion gültig)
level.t1 = globale Variable (überall gültig).
Wären in dem Script, auf den du dich beziehst, die Variablen nicht global, hättest du innerhalb der unterschiedlichen while-Schleifen die if-Abfragen nicht durchführen können, da die Werte, die dort herangezogen werden, innerhalb anderer Schleifen definiert worden sind (und wären dann in dieser Schleife wieder undefined)
__________________
Da die Lichtgeschwindigkeit höher ist als die Schallgeschwindigkeit,
hält man so manchen für einen hellen Kopf, bis man ihn reden hört.
|
|
|
|
|
|
|
|
Impressum ||Datenschutzerklärung
|