Beiträge von Manniac
-
-
-
19282 bis 19299
Einige buggen aber bei bestimmten Wetter-IDs rum, weiß grade nicht, ob das bei denen auch so ist.
-
Ne, einfach nur attachen. Das müssten Polizeisirenen sein, die blinken.
-
Kommt auch auf das Wetter an.
/edit: Du kannst auch das hier einfach attachen
19419 bzw
19420 -
Du könntest ein Objekt attachen und das wieder löschen. Weiß grade nicht die ID auswendig, ich schau eben nach.
-
Wenn du beide Lichter gleichzeitig aus bzw anschalten willst, kannst du außerdem auch "SetVehicleParams(-Ex)" verwenden.
Einfach einen Timer wiederholen und jeweils die Lichter an/ab- schalten.
Ansonsten ^.
-
Bietest du deine Photoshop-Künste auch an?
-
Was verstehst du unter "bester Spieler"?
Lies dir das mal durch
Den User mit den meisten kills errechnen.. -
Mein Name ist wohl allgegenwärtig^^
Du musst bei dem Stock "xp" als return-wert angeben. -
-
http://forum.sa-mp.de/index.php?form=Explain
ZitatDu hast der Variable bspw durch ein "new variable[10]" eine gewisse Anzahl an Dimensionen gegeben. In diesem Beispiel 10 (variable[0] - variable[9]).
Nun kannst du aber auch nur diese nutzen.
Der Fehler tritt auf wenn du also bspw nur 10 Dimensionen erstellst, aber versuchst weitere Dimensionen anzusprechen,
also du bspw versucht, nun die Variable "variable[200]" zu nutzen.
Von Trooper[Y] 27 20Zum 2. : Du hat "IsNumeric" bereits erstellt.
-
Das ist richtig.
%d und %i verhalten sich genau gleich.
Wir du schon gesagt hast kann man mit "Decimal" leicht mit dem Variablentypen Float durcheinander kommen. Ich werde das mal kurz hinzufügen. -
Weitere Platzhalter sehen wie folgt aus:
%b Fügt eine Binärummer an dieser Position
%c Fügt ein einzelnes Zeichen ein
%d Fügt einen Integer (ganze Zahl) ein.
%f Fügt eine Zahl mit Nachkommastellen ein (Float)
%i Fügt einen Integer (ganze Zahl) ein
%s Fügt einen String ein
%x Fügt eine Hexdezimalzahl ein
%% Fügt ein % einDie wichtigsten sind jedoch "%d", "%f", "%i" ( = vom Prinzip her "%d" ) und "%s".
Zu beachten ist, dass "%i" und "%d" exakt das selbe tun. Beide geben normale Zahlen ( 1,2, 123231 ) aus.
Gewöhnt euch einfach an, "%i" zu verwenden ( Integer ), damit ihr nicht mit "Float" durcheinander kommt.Möchte man nun die Zahl "1" ausgeben, kann man das wie folgt tun:
format(string,sizeof(string),"%d",1);
Output -> 1Wenn man allerdings möchte, dass die mindestzahl an Ziffern 2 ist, kann man "%02d" verwenden.
format(string,sizeof(string),"%02d",1);
Output -> 01Des Weiteren kann man "format" verwenden, um einer 2-Dimensionalen Variable einen String zuzuweisen.
[pwn]vehicle[vehicleid][owner] = "PETER"; // Würde nicht funktionieren
format(vehicle[vehicleid][owner],24,"%s", playername);// richtig7.2 STRVAL
"strval" gehört zu den "String-Funktionen".
Diese Funktion ist mMn einer der wichtigsten in dem "Paket". Sie wandelt einen string ( =Text ) in einen integer ( = Zahl ) um.
Ein gutes Beispiel hierfür wäre folgendes:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_MONEY:
{
if(!response)return 1;
new amount = strval(inputtext);
GivePlayerMoney(playerid,amount);
}
}
return 1;
}Würden wir hier direkt "inputtext" als 2. Parameter einsetzen, würden wir einen Fehler bekommen.
7.3 print
Diese Funktion bzw. die Funktion von 7.4 wird gerne verwendet, um sein Script zu debuggen. ( Um Fehler zu finden, welche auf den ersten Blick nicht ersichtlich sind )
"print" hat lediglich einen Parameter: "Text".Wichtig ist, dass der Text nicht InGame ausgegeben wird, sondern in der Konsole btw. server_log.txt gespeichert wird.
public OnGameModeInit()
{
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
print("Hello World!");
return 1;
}
^Code gibt in der Konsole bei dem Serverstart "Hello World" aus.7.4 printf
Diese Funktion wird noch häufiger zum debuggen verwendet. Grund hierfür ist, dass man bei dieser Funktion auch Parameter verwenden kann.
Der Aufbau ist im Prinzip genauso wie bei "format".
new var = 121;
new string[] = "Hello"
new var2 = 1;
public OnGameModeInit()
{
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
printf("%d | %s | %02d",var,string,var2);
return 1;
}
Würde in der Konsole
121 | Hello | 01ausgeben.8. Schleifen
Kommen wir nun zu dem ( wahrscheinlich ) letzten Themengebiet, von dem ein (fortgeschrittener-) Anfänger wissen sollte: Schleifen.
Es gibt 3 Arten von Schleifen ( wobei 2 davon ziemlich die selben sind )
8.1 "for"- Schleife
Das ist wohl die häufigste anzutreffende Art der Schleifen. Außerdem ist sie auch die "bequemste" Schleife.
Der Aufbau sieht meistens wie folgt aus:
for(variable; bedingung; counter)
{}
Was bedeutet das nun?
Variable = Neue Variable, die man direkt in der Schleife deklariert & verwendet
Bedingung = Wie lange soll die Schleife laufen?
counter = Was soll mit der vorher definierten Variable passieren?Ein oft gesehenes Beispiel wäre:
for(new i = 0; i<GetMaxPlayers(); i++)
{}
Dieser Schleife läuft nun solange, wie die Variable i kleiner als der Wert ist, den GetMaxPlayers zurückgibt.Leider ist dieser Code extrem ineffizient. Siehe
new i;
for(;i<MAX_PLAYERS;i++)
{}
Wäre daher die beste Lösung. Aber halt, wohin ist denn die Variable verschwunden?
Diese kann ganz einfach außerhalb der Schleife erstellt werden. Die Deklaration wird in der Schleife mit ";" einfach übersprungen.new i;
for(;i<50;i++)
{
printf("%02d",i);
}Diese Schleife sollte nun von 00 - 49 die einzelnen Zahlen in der Konsole ausgeben.
8.2 "while"- loop
Eine "while" Schleife führt eine Aufgabe solange aus, bis die Bedingung nicht mehr stimmt.
Der Aufbau ist wie folgt:
while(bedingung)
{
}Zu beachten ist, dass man unter normalen Umständen keine Variablen in der While-Schleife deklarieren kann.
Ein kleines Beispiel:
new var=50;
while(var > 0) // Während var größer 0
{
printf("%02d",var); // printe var
var --; // Ziehe 1 von var ab
}
Diese Code würde nun von 50 - 01 alle Zahlen printen.
Wichtig ist, dass man das abziehen bzw dazuzählen nicht vergisst, da sonst die Variable unendlich weiterlaufen würde.Solch eine Schleife verwendet man meistens, um eine bestimmte Menge an Datensätzen aus der Datenbank zu laden.
8.3 "do-while" Schleife
Diese Schleife wird nie verwendet. ( Zumindest kenne ich kein sinnvolles Beispiel )
Der Grund dafür ist, dass sie eine Aufgabe mindestens einmal ausführt, bevor sie die Bedingung berücksichtigt.
Ein Beispiel:new var = 0;
do
{
printf("%02d",var);
var--;
}
while (var > 1);Der Output wäre "00", da die Schleife zuerst einmal die Aufgabe erledigt, bevor sie die Bedingung beachtet.
Würde man das Ganze mit einer "while" Schleife machen, sähe das folgendermaßen aus:
new var = 0;
while( var > 1)
{
printf("%02d",var);
var --;
}Diese Code hat keinen Output, da die Bedingung nicht erfüllt werden kann.
8.4 "Jump-Statements"
Es gibt noch weiter Möglichkeiten, eine Schleife zu verändern.
Dazu gehören "break, continue sowie goto ( welches ich aber nicht erklären werde, da es unsinnig ist. Auf Anfrage kann ich es aber hinzufügen )8.4.1 continue
Um eine Schleife noch effizienter zu gestalten, kann man eine weitere Reihe von Bedingungen erstellen.
Warum sollte eine "for"-Schleife beispielsweise 500 Slots durchgehen, wenn nur 100 davon tatsächlich Spieler sind?new i;
for(;i<MAX_PLAYERS;i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i))continue;
}
Diese Code überprüft nun, ob der Spieler
a) nicht auf dem Server ist &
b) ob er ein NPC ist.Sollte eine der beiden Bedingungen zutreffen, überspringt "continue" sie also.
Ein weiters Beispiel:
new i;
for(;i<5;i++)
{
if(i == 3)continue;
printf("%02d",i);
}Der Output wäre also: 00, 01, 02, 04
Grund: Wenn i == 3 -> überspringen8.4.2 break
Sollte man nur einen Wert in einer Datenmenge suchen, wäre es sinnlos, die Schleife weiterlaufen zu lassen, wenn man den Wert gefunden hat.
Um eine Schleife abzubrechen verwendet man "break".
new i;
for(;i<500;i++)
{
if(i == 5)break;
printf("%02d",i);
}Wie man sehen kann, würde die Schleife 500x durchlaufen, wenn wir die "break"-Bedingung nicht hätten.
Der Output wäre -> 00, 01, 02, 03, 04Tutorial um 7 + 8. erweitert.
Sollte jemand Fehler finden, kann er sie mir gerne melden.
Edits:
Spoiler anzeigen 1-5: Fehler ausgebessert
6: 7+8 hinzugefügt
8: Beitrag als neu makieren entfernt -
Du musst noch die Zeile "//#define FILTERSCRIPT" "entkommentieren"
Oder du entfernst einfach alles.
/edit, Jeffry war schneller
-
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPTFS muss natürlich auch im FS-Ordner sein.
-
Das ist doch schon ein Anfang^^
Lies dir jetzt nochmal den Post von Jack Bauer und mir durch.
-
Zuallererst: [ SCRIPTING ] PAWN - Die Grundlagen der SAMP-API
3.2 Spricht genau dein Problem an.In diesem Fall würde ich allerdings der Übersicht halber ein stock erstellen, welches dem Spieler dann die Nachrichten ausgibt. ( "stock ShowLic(playerid)" )
Falls du aber keine Lust hast, ^ durchzulesen, hier eine kleine Zusammenfassung:Variable erstellen, spielerID als Parameter angeben & durch den stock ( "ShowLic(variablenname)" bsp. ) Nachrichten ausgeben lassen.
-
Lies dir meinen Post nochmal durch
Kleine Hilfe:
if(var == value)
{
...
} -
Sorry, aber schau dir unbedingt die Grundlagen an.
if(sInfo[playerid][fuehrerschein]=1);
ist völlig falsch.
if(sInfo[playerid][fuehrerschein] == 1) Wäre richtig.
Selbiges gilt für die restlichen If-Statements.