Das #define so machen:
#define DIALOG_TSKIN 8
mfg. ![]()
Das #define so machen:
#define DIALOG_TSKIN 8
mfg. ![]()
Was ist der unteschied zwischen:
return 1;
return 0;
und return -1;?
Nun das ist doch offensichtlich, der Unterschied liegt hinten in der Zahl ![]()
Und das macht alles nur einen Unterschied, wenn die Funktion/Callback einen bestimmten Wert brauch um etwas auszuführen, quasi return 0; damit eine Message gesendet wird, dass etwas nicht verfügbar ist oder return 1; das bedeutet meistens alles ist erfolgreich abgelaufen... ![]()
mfg. ![]()
Diese Warnings kommen, wenn du es nicht richtig eingerückt hast!
Am besten du rückst alles ein, oder schreibst oben in dein Script:
#pragma tabsize 0
Ich tendiere jedoch zum einrücken!
mfg. ![]()
Das dauert ganz unterschiedlich ![]()
Bei mir hat es 3-4 std gedauert ![]()
Aber liegt halt an den Admins/Mods wie die so online sind ![]()
mfg. ![]()
Oder noch kürzer geschrieben:
if(!strcmp("/open", cmdtext, true)) // Befehl zum öffnen
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,Rot,"Du bist kein Admin!");
if(!IsPlayerInRangeOfPoint(playerid,10.0,1003.88, -643.33, 123.49)) return SendClientMessage(playerid,Rot,"Du bist nicht in der Nähe!");
MoveObject(tor,1003.88, -643.33, 113.78, 4); // Wenn >Ja<, dann öffnet das Tor
SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden automatisch.");
SetTimer("close", 5000,0); // Timer
return 1;
}
mfg. ![]()
lass doch das format doch bitte weg ja Kaliber und reduziere die buffer string zu dem gebe bei dem nächsten format doch die string größe an oder benutze doch gleich strcat würde auch bei case schon gehen je nach dem wäre sogar besser und davor immer schön den string leeren
Ich bevorzuge ja eher strins, aber tut mir leid ich war zu faul das zu ändern und wofür auch, in seinem Script kommt es auf 5 Gute Zeilen auch nicht mehr an wenn 30.000 andere GF-Like sind ![]()
mfg. ![]()
Hey, danke erstmal für deine Antwort & Hilfe.
Ich habe die SuFu bentzt und nichts gescheites gefunden.. Es sind eher so einzelne Tutorials wie man z.B. das und jenes erstellt. Ich möchte gerne ein Tutorial wo eher alles im Allgemeinen erklärt ist und dann genauer ins Scripting geht. Wie z.B. die englische Wiki Scripting Seite
Dann schau dir das mal an: Pawn Einstieg 2.0
mfg. ![]()
Schreibe deinen Befehl mal so:
if(!strcmp("/admins",cmdtext,true))
{
SendClientMessage(playerid,weis,"Administartoren und Supporter");
for(new i; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i)) continue;
new buffer[32],string[64];
switch(GetPVarInt(i,"Adminrang"))
{
case 0: continue;
case 1: format(buffer,32,"Probe-Supporter");
case 2: format(buffer,32,"Supporter");
case 3: format(buffer,32,"Moderator");
case 4: format(buffer,32,"Super-Moderator");
case 5: format(buffer,32,"Administartor");
case 6: format(buffer,32,"Projektleiter");
}
format(string,sizeof(string),"%s : %s",buffer,SpielerName(i));
SendClientMessage(playerid,BLAU,string);
}
return 1;
}
mfg. ![]()
Lade dir mal die neuste PAWNO version runter und probier es neu
Das hat nichts mit PAWNO zu tuen !
Das liegt am Script ![]()
Wahrscheinlich nutzt du das Makro Function und wenn da sowas z.B. steht:
Function /* Also hier nichts */(playerid) {
}
Dann crasht unter anderem der Compiler ![]()
mfg. ![]()
Nein
Bist du dann überhaupt sicher, dass sich das Bild in dem gegebenen Ordner/Pfad befindet ![]()
while
//Edit: moment, willst du alle ausgebe die den Hauskey 4 haben oder was...drück dich echt mal besser aus ![]()
Nein, einfach so:
new string[64],name[25];
mysql_query("SELECT `Name` FROM `Tabelle` WHERE `Hauskey`='4'");
mysql_store_result();
mysql_fetch_row(name);
mysql_free_result();
format(string,64,"Der Name lautet: %s",name);
SendClientMessage(playerid,-1,string);
mfg. ![]()
und dir fällt es jetzt schwer einen Button zu erstellen oder was ![]()
Nun, das kannst du auch wie in PHP machen, einfach so:
mysql_query("SELECT `Name` FROM `Tabelle` WHERE `Hauskey`='4'");
mfg. ![]()
public BanWithMessage(playerid)
{
new string[258];
BanEx(playerid, GetPVarString(playerid, "Grund", string, 258)); // Hier soll dan der Grund wieder ausgegebn werden
return 1;
}
Der Fehler liegt hier, dass muss so aussehen:
public BanWithMessage(playerid)
{
new string[128];
GetPVarString(playerid, "Grund", string, 128);
BanEx(playerid,string);
return 1;
}
//Edit: und in deinem cmd musst du das so machen:
SetPVarString(pID, "Grund", reason);
SetTimerEx("BanWithMessage", 100, true, "i", pID); // Hier wird es im Sting gespeichert
mfg. ![]()
So:
new bool:var;
var = false; //eig unnötig, da der Wert eh auf false ist ^.^
switch(var) {
case false: print("false");
case true: print("true");
}
Das würde in diesem Fall natürlich false printen ![]()
mfg. ![]()
Vor dem Close, eine Frage, wie ist es Scripttechnisch möglich ?
Nun, ganz einfach mit folgender Funktion: http://wiki.sa-mp.com/wiki/SetObjectMaterialText
mfg. ![]()
So, ich finde hier sollte auch wieder mal was rein und da ich mal wieder Langeweile habe, schreibe ich hier mal ein paar Sachen rein:
Booleans:
Wenn eine Variable nur 2 Werte annehmen brauch, sagen wir 0 und 1, dann sollte man anstatt so:
//Falsche Variante
new var;
//In irgendeinem Callback
var = 1;
//Unter einem anderen Callback
if(var == 1)
Sollte man es so machen:
//Richtige Variante
new bool:var;
//In irgendeinem Callback
var = true;
//Unter einem anderen Callback
if(var == true)
Das sorgt dafür, dass von Anfang an weniger Speicherplatz für diese Variable verbraucht wird.
Char Arrays
Das ist ein Thema was ich wirklich jedem ans Herz lege !
Jeder kennt folgendes:
new var[MAX_PLAYERS];
if(var[playerid] == 1)
Nun das ist aber verdammt schlecht !
Jede Zelle bzw Spalte im Array verbraucht 4 Bytes, da MAX_PLAYERS (ohne das Makro zu verändern) eine größe von 500 hat, würde diese Variable:
verbrauchen !
Aus diesem Grund sogenannte char-Arrays verwenden, dass sähe dann so aus:
new var[MAX_PLAYERS char];
if(var{playerid} == 1) //Vorsicht: Hier { } verwenden anstatt [ ] !!!
Hier würde jede Zelle bzw Spalte im Array nur 1nen Byte verbrauchen !
Sprich wir verbrauchen 500 Bytes anstatt 2000 ! ![]()
Wichtig noch zu beachten, das geht nur bei 1 dimensionalen Arrays und auch nur bei Integern, wenn man das mit strings machen will muss man strpack benutzen (aber das ist eine andere Geschichte)...
Außerdem ist zu beachten, dass nur Werte von 0-255 möglich sind!
Sprich:
new test[MAX_PLAYERS char];
test{0} = 259; //Ist nicht möglich, da größer 255!
Strings-returnen
Viele von euch werden wahrscheinlich diese Funktion kennen:
stock PlayerName(playerid) {
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
return name;
}
Nun, hier returnen wir einen string, das führt zu sog. Memory Leaks und sorgt dafür dass euer Speicher unnötig belegt wird, denn diese Variable "name" wird Lokal erzeugt, aber sie wird durch das return nicht wieder "zerstört", somit bleibt der Speicher vorhanden.
Aus diesem Grund empfehle ich diese Variante:
//Oben im Script
new pName[MAX_PLAYERS][MAX_PLAYER_NAME];
//Unter OnPlayerConnect
GetPlayerName(playerid,pName[playerid],MAX_PLAYER_NAME);
//Nutzung:
format(string,sizeof(string),"Willkommen lieber %s",pName[playerid]);
Unnötig große Arrays
Wie oben schon mal angesprochen verbrauchen große Arrays viel Speicherplatz !
Ich zeige euch mal einige Beispiele die ihr sicher kennen werdet:
new string[256], string1[300], string2[499]; /* usw... */
format(string,sizeof(string),"bla...");
Also abgesehen davon, dass man das meistens eh mit 1ner Variable lösen kann, zeige ich euch nun das:
new string[] = "Hier euren Text rein...lieber %s",name[] = "Kaliber";
format(string,sizeof(string)+sizeof(name),string,name);
print(string); //würde ausgeben: "Hier euren Text rein...lieber Kaliber"
So das wars erstmal mit dem gröbsten, werde vielleicht noch einen 2. Part dranhängen, mal sehen ![]()
mfg.
//Edited: Infos
Du hast da 3x if(response==1) stehen, merkst du selber das da was falsch ist ![]()
Du musst das so machen wie mit dem 1. Dialog also:
if(dialogid == DIALOG_Perso_Nachname) {
format(SpielerInfo[playerid][sName],24,inputtext); //in "inputtext" steht der Text der eingegeben wurde
}
mfg. ![]()
Diese 3 Personen würden auf einer Seite in Facebook mit 10.000 Abos landen , um dort noch ein bisschen berühmter zu werden.
Fine das ja ein bisschen unsinnig, aber okay ![]()
Es ist eigentlich sehr erfeulich das es viel zu viele gute Dinge gibt als das man sagen könnte "Das ist es!"
Genau das finde ich auch, aus diesem Grund wird es bestimmt schwer, da einen Sieger festzustellen... ![]()
Aber trotzdem, gutes Gelingen ![]()
mfg. ![]()