GTAvision.com - Forum - Grand Theft Auto News, Downloads, Community and more...

Position: Tutorials » Workshop » In Bearbeitung » [VWW] Globale/Lokale Variablen mit/ohne Arrays » Druckansicht
Recycler, 12.04.2007, 20:28
Globale/Lokale Variablen mit und ohne Arrays

Dies ist ein Tutorial über Variablen in der Scripting-Language PAWN (Eigentlich gillt das meiste
auch für andere Programmiersprachen :-P).
Wie der Titel schon sagt, gibt es nicht nur die eine und einfache Variable, sondern auch
Formationen, sprich global/lokal/indexiert/ uvm.
Alles werde ich nicht erklären können, aber das, was für den kleinen Scripter benötigt wird, sollte
hier vorzufinden sein.
Aber fangen wir einfach an:

Was sind eigentlich "Variablen"?

Eine Variable ist eine Größe, die verschiedene Werte annehmen kann. Das heißt, sie ist in ihrer
Größe variabel. Variablen kann man auch als Platzhalter/Unbekannte bezeichenen. Sie kommen in
Formeln, Termen und Gleichungen vor. Und das nicht nur z.B. in einer binomischen Formel:

Code:
1
(a+b)^2 = a^2 + 2ab + b^2


Auf diese Formel wird dir der beste Rechner der Welt keine Antwort geben können, wenn du keine
Wertzuweisung oder eine Gleichung aufstellst.
Man kann diese Formel so...

Code:
1
2
a sei 1
b sei 267594


oder so...

Code:
1
(a+b)^2 = 12345


...lösen. Aber nun zurück zu unserer Variable. Variablen gibt es nicht nur in Mathematik und NW,
sondern auch im IT-Bereich. Dabei haben sie nun aber überhaupt keine andere Funktion als in der
Mathematik.
Wer gut in Mathe ist, wird keine Probleme mit Variablen haben^^ Nehmen wir ein Beispiel
aus der Scriptengine von SA-MP. Durch ein Command wählt der Spieler nun, ob er das Spiel in der
Sprache Englisch oder Deutsch spielen will. Logischerweise kann das Script nicht jedesmal, bevor
Text erscheinen soll, den Spieler nach der Sprache fragen; das wäre ziemlich dämlich. Und nun
kommen wir zu der ersten Art der Variabeln. *anbet*

Globale Variablen

Mit Arrays...

Wir nehmen wieder das oben genannte Beispiel auf. Nun, da wir etwas brauchen, um die Sprache zu
speichern, brauchen wir Platzhalter. Wir vereinbaren, das wenn der der Spieler die Sprache Deutsch
wählt, eine Variable den Wert 1 annimmt.
Wir gehen folgendermaßen vor; in einem Script muss man Variablen vorher festlegen. Das heißt, du
kannst nicht einfach ein "x" als Variable benutzen, ohne sie zu "erstellen". In PAWN sieht das
ganze so aus:

Code:
1
new variablenname[MAX_PLAYERS];


Jetzt werdet ihr euch fragen: Wohin damit? Was soll das MAX_PLAYERS?! Eins nach dem anderen ;) Wir
brauchen für diese Situation eine globale Variable, da wir sie für jeden Text des Spiels immer
wieder einsetzen. Global bedeutet im Script, das sie immer existiert. Also werden wir sie vor
main() erstellen. Oben schon erwähnt, wir brauchen auch die sogenannten Arrays. Ein netter
englischer Begriff, und da ich in meinen Lernphasen im Alter von ca. 9 solche Begriffe
verabscheute, einigen wir uns darauf, das wir sie Garagen nennen. (Damit konnte ich es mir besser
merken :-P) Die Variable in diesem Fall brauchen zwingend alle Spieler. Aber was passiert nun, wenn
wir bei jedem neuen Spieler den Wert der Variable verändern? Genau, die Daten der vorherigen
Spieler werden gelöscht. Jetzt könnte man sich denken, dann erstelle ich eben für jeden Spieler
eine einzelne Variable. Das wird lange bei einem Server mit 100 Spielern dauern, findet ihr nicht
auch? *rofl* Und da kommen auf einmal die Garagen: sie ermöglichen es, das eine Variable spezifisch für
einen Spieler (oder was auch immer) ist. In diesem Fall steht das MAX_PLAYERS für die maximalen
Spieler im Server (100). So, Spieler Rafioso (ID: 0) wählt Englisch. Wir setzen die Variable so ein:

Code:
1
variablenname[playerid] = 2;


playerid bezeichnet hier nur den mitgelieferten Parameter in OnPlayerCommandText oder sonst woher.
Also ist playerid auch ein Platzhalter; er steht, weil es ja Rafioso ist, für 0. Dann wird die
Variable des Spielers "0" auf 2 (Englisch) gesetzt. Und fertig ist die perfekte Variable mit Garage
8-) Später wird man durch ein if-statement abfragen müssen, ob die Variable für 1 oder 2 steht. Ein
sehr gutes Tutorial hat unser Rafioso hier gemacht.

Recycler, 12.04.2007, 20:46
Ohne Arrays...

Wie oben schon gesagt, es bleibt bei einer globalen Variable. Also werden wir sie wieder über
main() erstellen.

Code:
1
new variablenname;


Diese Variable kann nur einen einzigen Wert haben und besitzt keine Garagen. Ihr könnt sie z.B. als
Wechselvariable benutzen, indem ihr, wenn etwas bestimmtes erfolgt ist, sie einem Wert zuweist und
diesen Wert für euer Script relevant macht. Ich hoffe, ihr versteht was ich meine ;-)

Lokale Variablen

Mit und ohne Arrays...

Diese Art von Variablen ist vielleicht die häufigste. Allerdings kommen sie in Verbindung mit
Garagen nur selten vor, weil es keinen großen Sinn ergeben würde ;) Sie sind das Gegenteil von
global. Das heißt, sie existieren nur in der Funktion, wo sie auch erstellt wurden. Wenn jemand
eine Variable in einem Command etwa so erstellt:

Code:
1
new variablenname;


Dann kann ihr ein Wert zugewiesen werden, und alles was man mit einer Variable halt so machen kann :D
Nur nach Beendigung der Funktion wird die Variable gelöscht, und ihr könnt sie nicht mehr
verwenden. Deshalb könnt ihr auch in anderen Funktionen gleichnamige Platzhalter erstellen, was bei
globalen nicht möglich ist. Sonst ist eigentlich nichts mehr zu sagen; alles wurde oben schon mehr
oder weniger erklärt^^
Ich mach noch ein Beispiel für eine lokale Variable:

Code:
1
2
3
4
5
6
7
8
public Funktion()
{
new variablenname = random(5);
SetPlayerHealth(variablenname, 0);
...
...
...
}


Hier wird zufällig irgendein Spieler zwischen 0-5 gekillt. (Wobei man eigentlich noch ein
IsPlayerConnected machen müsste, aber egal :D)

*guckstdu*

Array:

"Bei einem Array handelt es sich um eine Gruppe von Variablen oder Daten gleichen Typs, die unter
einem gemeinsamen Namen in einer eindimensionalen, zweidimensionalen oder mehrdimensionalen
Anordnung gespeichert werden. Arrays werden benötigt, um einerseits eine große Anzahl von Variablen
mit wenig Aufwand zu definieren und um andererseits die Voraussetzung zu schaffen, direkt auf ein
bestimmtes Variablenelement durch Angabe eines numerischen Werts, dem sogenannten Index
zuzugreifen
"

__________________________________________________________________________________

Ich hoffe dieses Tutorial hat euch nocheinmal ein bisschen beigebracht :-) Wenn ihr Fragen habt, fragt
ruhig. Aber bitte nicht hier! *anbet*

MfG
Recycler
FloRaX, 03.12.2007, 12:25
Hey cool,wenigstens weis ich jetzt was das bedeutet :)
GTAvision.com :: Forumregeln :: FAQ :: Impressum :: Kontakt :: RDRvision.com :: LANOIREvision.com :: MaxPayneVision.com
NetVisionWork.NET
.: © 2006-2014 by GTAvision.com :.

Rockstar GamesTake-Two Interactive Deutschland

Free Grand Theft Auto Downloads