Danke, hab das mal gemacht.
Beiträge von Stas
-
-
-
Vorwort:
Dieses Tutorial bezieht sich auf die neue Version von SAMP. Diese findet ihr hier: 0.3a R7.
Warum sollte ich pVars nutzen?
Es war immer üblich, für jeden Spieler der auf den Server joint ein neues Array oder enum anzulegen,
in dem man seine Statistiken (Flags) festhalten kann.
Diese Arrays hängt von MAX_PLAYERS ab, welches ursprünglich 100 Elemente groß war.
Nun ist es auf 500 definiert worden und erstellt somit nun noch größere Arrays.
Genau genommen ist es eine Verschwendung des Speichers und dauert zu lange, solche riesigen Variablen abzufragen,
besonders wenn wie in vielen GameModes (zum Beispiel Godfather) sehr viele erstellt worden sind.
Daher hat das SAMP-Dev. Team eine interne Flag-Speicherung erstellt, welche erstens viel schneller als ein Array abgefragt wird
und zweitens unnötigen Speicher verbrauch verhindert.Hier sind weitere Vorteile gegenüber den Arrays:
- pVars können frei über den kompletten Server verteilt werden. Egal ob sie in einem FilterScript oder einem GameMode gesetzt wurden.
- Wenn der Spieler den Server betritt oder verlässt, werden seine pVars automatisch auf 0 gesetzt. Dies erspart Funktionen wie ResetStats, welches dem Spieler ein schnelleres und sanfteres betreten des Servers ermöglicht
- Lange und komplexe SpielerInfo - Strukturen über enum sind nicht mehr notwendig.
- Sichert Speicher von erstellten Arrays, welche wahrscheinlich niemals verwendet werden würden. Nicht jeder Server hat 500 Spieler und nutzt somit den kompletten Array aus.
- pVars können leicht aufgzählt und ausgegeben / in eine Liste gespeichert werden. Dies erleichtert sowohl das Debuggen als auch die SpielerInfo (Account - Speicherung).
- Auch wenn ein pVar nicht erstellt worden ist, wird es dennoch den Standardwert 0 ausgeben.
- PVars können über sehr große Strings mit dynamisch zugewiesenen Speicher erstellt werden. Das heißt, man benötigt keine riesigen Strings mehr zu erstellen, sondern kann diesen langen Text in eine pVar speichern.
Funktionen:
SetPVarInt(playerid, varname[], int_value);
Setzt dem Spieler eine Variable (Integer) ("varname") auf einen Wert ("int_value").GetPVarInt(playerid, varname[]);
Gibt den Wert der Variable ("varname") wieder.SetPVarString(playerid, varname[], string_value[]);
Setzt dem Spieler eine Variable (String) ("varname") auf einen Wert ("string_value").GetPVarString(playerid, varname[], string_return[], len);
// Gebrauch
new string[128];
GetPVarString(playerid, "varname", string, 128);
printf("%s", string);
Gibt den Wert der Variable ("varname") wieder. Dieser wird in string_return[] angegebenem String gespeichert. In "len" muss die Länge dieses Strings angegeben werden.SetPVarFloat(playerid, varname[], Float:float_value);
Setzt dem Spieler eine Variable (Float) ("varname") auf einen Wert ("float_value").Float:GetPVarFloat(playerid, varname[]);
Gibt den Wert der Variable ("varname") wieder. Wichtig ist hierbei zu beachten, dass sie als Float wiedergegeben wird.DeletePVar(playerid, varname[]);
Löscht eine Variable ("varname") und setzt diese automatisch auf 0.Gebrauch:
Die pVars kann man auf folgende Weise verwenden:
if(GetPVarInt(playerid, "Online") != 1) {
SetPVarInt(playerid, "Online", 1);
}Außerdem kann man auch ganz einfach TextDraws in pVars speichern, ohne auch für sie ein extra Array anzulegen:
SetPVarInt(playerid, "Text", _:TextDrawCreate(0.0,0.0,"Text"));
new _:Text= GetPVarInt(playerid, "Text");
TextDrawUseBox(Text:Text,1);
TextDrawBoxColor(Text:Text,0x00000033);
TextDrawTextSize(Text:Text,217.0,60.0);
TextDrawAlignment(Text:Text,0);
TextDrawBackgroundColor(Text:Text,0x000000ff);
TextDrawFont(Text:Text,2);
TextDrawLetterSize(Text:Text,0.2,1.2);
TextDrawColor(Text:Text,0xffffffff);
TextDrawSetOutline(Text:Text,1);
TextDrawSetProportional(Text:Text,1);
TextDrawSetShadow(Text:Text,1);// und später dann:
TextDrawSetString(Text:GetPVarInt(playerid, "Text"), string);
TextDrawShowForPlayer(playerid, Text:GetPVarInt(playerid, "Text")); -
Ich bin halt der beste .. (( ja, ja, selbstlob stinkt ))
-
Da beides Punkt-Rechnung ist, hat die Klammer keinen Sinn.
-
Danke. Kleines Update im ersten Post.
v1.2 is out now! -
Das kannst du trotzdem so machen.
-
So: [ SCRIPTING ] Fraktionsautos für gf keine id verschiebung!
-
Wieviele Spieler habt ihr tagsüber?
-
Siht gut aus Habt ihr ganz gut hinbekommen
-
Das sieht ja mal geil aus, ist es veröffentlicht worden?
-
Man könnte es mit jeder Waffe machen lassen, aber das ist doof, da viele eine hohe Feuerrate.
Du kannst Spieler einem einen Helm aufsetzen (pVar Helm 1). Beim treffen überprüfst du, ob er Helm hat, wenn ja, dann return 1, so dass er nicht mehr in die HS Abfrage kommt,
-
Danke euch.
Alles geht, wenn man einen logischen Weg dahin findet
-
Jo, bloss so würde es kein Informatiker schreiben, da man sich eig. gerne Sachen sparrt.
So wie im Englischen: Nicht I am sondern I'm. -
Brauchst du doch eig. nicht, da der Spieler ja nach dem GMX neu connectet?
Die ID kannst du in einem Spieler-Array oder einer pVar speichern. -
Man kann die Spawnen, füge PutPlayerInVehicle ein. Sie werden bloss auf die nächsten Schienen teleportiert.
-
Du musst schon noch auslesen, denn bei deinem Script gehst du nur die Liste der online Spieler durch.
Außerdem muss das so:
SendClientMessage(playerid, BLUE, "|____Dangerous Killer List____|");
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{ -
Lies dir das auch mal durch: [ SCRIPTING ] [TUT] Wie erstelle ich einen SA:MP Server?
-
Es ist nur mit Sniper möglich.
-
Ja und, wir sid hier in Deutschland.
PS: [ FILTERSCRIPT ] HeadShot Script
http://pastebin.com/5i2SnU6s