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

Position: Tutorials » Workshop » In Bearbeitung » Rechenarten, #define's und Enum's » Druckansicht
Tjong, 06.03.2008, 22:15
So ich weiß zwar nicht obs gebraucht wird, aber ich hab jetzt grad mal etwas Zeit/Langeweile und
schreibe einfach mal was ich so weiß, vllt. hilfts ja jemanden ^.^

Rechenarten:

So also erstmal ein paar Rechen Arten die es gibt.
Oft wird so ein Code hier gebraucht:

Code:
1
Variable = Variable + 2;


In dem Fall soll nur eine Variable um 2 erhöht werden, man kannes wie oeben ausschreiben allerdings
geht es auch einfach:

Code:
1
Variable += 2;


In dem Fall wird der Wert links um 2 erhöht, ist also genau das gleiche wie das davor nur weniger
zum schreiben, das gleiche kann man mit

Code:
1
2
3
Variable -= 2;  //Verringert die Variable um 2
Variable *= 3; //Multipliziert die Variable mit 3
Variable /= 4; //Teilt die Variable durch 4


Noch einfacher geht es wenn eine variable nur um 1 ehöht/verringert werden soll
Dann muss man lediglich

Code:
1
Variable++;


bzw.

Code:
1
Variable--;


schreiben, "Variable++;" hat dabei den selben Effekt als wenn man "Variable = Variable + 1;" bzw.
"Variable += 1;" schreibt


#define 's:

andere Sachen die euer Script einfacher zu lesen machen sind #define 's wie zB.

#define FARBE_BLAU 0x6699FF

#define's brauchen im Gegensatz zu Variablen keinen Arbeitspeicher, sind allerdings wie der Name
sagt "Definiert", sind also im Wert nicht änderbar.
Das ist aber auch gar nicht der Sinn der #define 's, denn die #define 's machen ein Script mehr
leserlicher, wenn man zB. in SendClientMessage jedesmal als Farbe 0x6699FF schreibt ist das erstens
ziemlich schwer sich die Buchstabenfolge zu merken und 2tens wird man nicht wenn man später kurz
draufguckt sofrt sagen können: "na kla! das ist blau", stattdessen schreibt man einfach "#define
FARBE_BLAU 0x6699FF" und kann es viel einfacher lesen. Auswirkungen auf das Script hat das
eigentlich nicht, denn wenn man nun auf dem CompileKnopf in Pawno o.ä. drückt, wird dann (für den
Computer) statt FARBE_BLAU der Wert der dahinter steht eingesetzt, es dient also "nur" der besseren
Übersicht, es hat allerdings auch weitergehende Bereiche, wenn man zB. was Abkürzen will (was
allerdings manchmal das Gegenteil der Leserlichkeit bewirkt), also wenn man was abkürzen will dann
geht das genauso zB.:

#define SCM SendClientMessage

Dann könnt ihr statt
SendClientMessage(playerid,COLOR_RED,"Hi!");

SCM(playerid,COLOR_RED,"Hi!");

schreiben, für den Server ist das das gleiche.
Es gibt noch weitere Anwendungsfälle mit denen man sogar Parameter übergeben kann, das ist
allerdings etwas kompliziert, und sollte eigentlich nicht in ein Tutorial

Enum's:


Was ich noch hab und das auch zur Leserlichkeit eines Scripts beiträgt sind Enum's

Enum's sind praktische Array's die aber nicht mit [1] oder [27] angesprochen werden, sondern Namen
haben

Sagen wir mal wir möchten die aktuelle Gesundheit, den Namen, die Anzahl der Kills, sowie ob der
Member sich eingeloggt hat, speicher

das würde in einem normalen Array schon gar nicht funktionieren da, wir 3 unterschiedliche Typen
(Float,Integer und Bool) brauchen
Mit Enum's geht das relativ einfach erstmal brauchen wir ein StandardArray für alle Spieler:

Code:
1
new SpielerDaten[MAX_PLAYERS][SDaten];


warum in den 2ten Klammern nicht ein Wert sondern ein Name steht, hat einen Grund, denn in die
zweite Klammer kommt der Name eurer Enum in diesem Fall SDaten:


Code:
1
2
3
4
5
6
7
enum SDaten
{
  Name[MAX_PLAYER_NAME],
  Float:Gesundheit,
  Kills,
  bool:Eingeloggt
}


Das wars eigentlich schon, wenn ihr nun eure Wert speichern wollt geht das einfach und man kann es
leicht überbklicken:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GetPlayerName(playerid,SpielerDaten[playerid][Name],MAX_PLAYER_NAME);

GetPlayerHealth(playerid,SpielerDaten[playerid][Gesundheit]);

public OnPlayerDeath(playerid,killerid,reason)
{
  SpielerDaten[killerid][Kills]++;

....
}

if(strcmp(cmd, "/login", true)==0)
{
   ...
   SpielerDaten[playerid][Eingeloggt] = true;
   ...
}



naja das wars erstmal, hoffe ich hab irgendjemand geholfen oO

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