Noch ne Info
if(...) // Einstiegs Abfrage
{
}
else if(...) // Weitere Abstimmung
{
}
else // Wenn alles nicht stimmt
{
}
Noch ne Info
if(...) // Einstiegs Abfrage
{
}
else if(...) // Weitere Abstimmung
{
}
else // Wenn alles nicht stimmt
{
}
new linez[500][255];
stock setline(ln,text[],const file[])
{
new lines;
new line[255],File:fx = fopen(file,io_read);
while(fread(fx,linez[lines]))lines++;
fclose(fx);
linez[ln][0] = '\0';
if(text[0])format(linez[line],255,"%s\r\n",text);
fx = fopen(file,io_write);
for(new i = 0;i<lines;i++)
{
if(!linez[i][0])continue;
fwrite(fx,linez[i]);
linez[i][0] = '\0';
}
fclose(fx);
}
Setzt die Linie einer Datei, wenn der Text leer ist wird die Linie einfach nicht mit rein geschrieben
- Kurze Abfragen -
Hallo Liebe Community,
Ich möchte euch mal die Sache mit verkürzten Abfragen vorstellen,
viele kennen diese Abfragen noch nicht daher möchte euch kurz erklären
wie komplex sie sind zudem auch sehr nützlich & lassen sich schnell von der Hand schreiben.
Beispiel Funktionen
test(param0,param1)return (param0 == 2) ? (5) : (7);
Eine Simple Abfrage gleich im Code eingebunden um extra Zeile zu vergäuden,
das ganze ist eigentlich ganz Simple da
(param0 == 2)
sowieso Wahr/Falsch zurückgibt ergibt dies schon das Direkte Ergebnis jedoch möchten wir in
diesem Fall darüber entscheiden daher stellen wir eine eigen Anweisung bereit
?
Dieses Zeichen eröffnet unsere eigene Rückgabe, danach geben wir den Rückgabewert an der
an den Code übergeben werden in dem Falle das es stimmt.
:
Dieses Zeichen stellt eine andere Möglichkeit da, sprich wenn die Anweisung nicht stimmen sollte
so wird der Standardwert wiedergegeben den wir angeben, der Standardwert ist ein muss bei dem ganzen denn
sollte alles nicht stimmen so muss ein Standardwert enthalten sein damit wir kein Nullverweis erhalten bzw. einen
Speicherfehler, Pawn wird euch so oder so darauf hinweisen.
Wenn ihr mehrere Abfragen erstellen möchtet bzw. mehrere Möglichkeiten...
return (param0 == 2) ? (5) : (param1 == 7) ? (8) : (9);
zerlegen wir das ganze mal...
(param0 == 2) ? (5) : // IF
(param1 == 7) ? (8) : // ELSE IF
(9); // ELSE
Wie ihr seht habt ihr alle Möglichkeiten die eine normale Abfrage auch bietet, da man aber leicht die Übersicht
verlieren kann sollte man sich das ganze immer zerlegen um sich das ganze immer genau anzuschauen & eventuell zu
gucken ob auch alles stimmt danach kann man es wieder in den Normal Zustand versetzen & weiterarbeiten, nur ein Tipp ![]()
Das besondere bei diesem Abfragen ist das man sie Direkt in Parameter verpflanzen kann so das die Rückgabe & Entscheidung sofort
zum Ergebnis führen kann, jedoch muss die Rückgabe immer den Typ wiedergeben der erfordert wird.
Beispiel :
print((param0 == 2) ? ("Hallo Welt") : ("Hallo Woot"));
Gibt je nach dem den gewünschten text wieder , je nach dem wie die Entscheidung ausfällt.
So, ich hoffe ich konnte euch hiermit ein Stück weiterhelfen
mfg. BlackFoX_UD_
// Nochmal editiert & etwas besser erklärt.
Ordner in den Ressourcen erstellen & deine Map darein dann noch ne Meta erstellen und das wars
Kommt davon wenn Sa-mp Server + Forum auf einem Server laufen :>
vllt bist du aber auch in Afrika & weißt es nicht ![]()
substr_count(substring[],string[],bool:ignorecase = false,startpos = 0)
{
new start = strfind(string,substring,ignorecase,startpos);
new ncount;
while(start>-1)
{
start = strfind(string,substring,ignorecase,start+strlen(substring));
ncount++;
}
return ncount;
}
zählt die Texte die übereinstimmen mit dem gesuchten , diese Funktion habe ich geschrieben da jemand im Englisch es nicht hingekriegt hat, diese Funktion sollte aber
nun ihren zweckt erfüllen, die gibt die Anzahl der gefundenen Teile an.
printf("%d Count",substr_count("tst","tst tst tst"));
Viel Spaß wiedermal ![]()
// Edit : Noch ne neue Funktion, hatte da php im Hintergedanken
stock checkstr(const string[],const otherstring[])
{
new bcount,check;
while(string[bcount] && otherstring[bcount])
{
if(string[bcount] == otherstring[bcount])check++;
bcount++;
}
return ((check*100)/max(strlen(string),strlen(otherstring)));
}
Prüft in wie Fern sich der Text schneidet sprich in wie Fern er übereinstimmt & gibt dann den Prozentwert wieder
Und ein Update meiner GetStr Funktion
stock GetStr(const string[],const count,delim = ' ')
{
new jpos,atmCount,lastct,incut[128],cpos;
while(string[jpos] && atmCount <=count)
{
if(string[jpos] == delim)
{
if(!lastct)atmCount++;
lastct = 1;
}
else
{
lastct = 0;
if(atmCount == count)
{
incut[cpos] = string[jpos];
cpos++;
}
}
jpos++;
}
return incut;
}
printf("%s",GetStr("Hallo Welt",0)); // Gibt Hallo wieder da Parameter 0 , 1 wäre Welt usw.
Kann für Kommandos mit Parameter verwendet werden oder andere Direkte Split Angelegenheiten.
if(freeze[players][drift1] == 1)
SetVehicleVelocity ? ist das echt nichts für nen Anfänger um es richtig zu nutzen musst du nur etwas Mathematik können,
zudem wäre das etwas Unsinnig da ist SetVehiclePos wohl eine bessere Lösung
Ich empfehle dir dich mit Linux zu beschäftigen, hatte bis vor ein paar Tagen auch nicht viel mit Linux zu tun,
hab mit unendlich Seiten durchgelesen, kannst du mal einen Screen vom Problem machen oder so,
denn normal sollte der Server ja starten , danach nimmst du deine IP+PORT auf dem der Server läuft
Nicht den ganzen Bildschirm nur die Fehler Nachricht
Ich finde du solltest etwas Abwechslung in deine Designs bringen, da sie zum Teil alle gleich aussehen nur immer mit anderen Grafiken gestaltet zudem ist
der Header sprich das Logo auch nicht der Bringer
Jo leider dann müsste man es halt mit ner eigenen Methode machen wie in deinem Beispiel,
normal müsste die Quelle vom Auslöser zurückgegeben werden :s
if(!strcmp(cmdtext,"/rlogin",true))return ShowPlayerDialog(/*Bitte selber ergänzen */);
Unter OnDialogResponse
if(response)
{
if(dialogid == /*Bitte ergänzen*/)
{
if(!inputtext[0])return SendClientMessage(playerid,0xFF0000FF,"Keine Eingabe erfolgt!");
new svpass[64],fm[70];
GetServerVarAsString("rcon_password",svpass,sizeof svpass);
if(strcmp(inputtext,svpass))return SendClientMessage(playerid,0xFF0000FF,"Passwort stimmt nicht!");
format(fm,sizeof fm,"login %s",inputtext);
SendRconCommand(fm);
SendClientMessage(playerid,0x00FF00FF,"Du wurdest erfolgreich eingeloggt!");
}
}
So oder so ähnlich sollte es aussehen
Ich frage mich aber noch immer warum ihr einen Zahlenwert mit der Text/Arrayrückgabe Funktion laden möchtet,
du lädst dort doch Integer/Float Werte dafür gibt es die jeweiligen Funktionen
Der Sinn ,,fördert die Kreativität´´ sollte eigentlich aussagen das sich die Leute nicht schon vorgemacht Funktionen nehmen können
sondern die Grauen Zellen Teils mehr anstrengen müssen sprich man muss sich einfach mehr einfallen lassen.
Du musst auch bedenken das an MTA mehr Leute arbeiten als an Sa-mp was natürlich zum Teil an der leitenden Person liegt,
wie gesagt hast du keine Lust mach erstmal was anderes, wir können für dich nicht entscheiden & die Fakten für MTA vs Sa-mp
wurden schon mehrmals auf den Tisch gelegt jetzt musst du nur noch entscheiden.
Entscheide dich, je nach dem MTA bietet Funktionen, Sa-mp fördert die Kreativität , Lua hat einen zu Abstrakten Syntax , Pawn hingegen einen geordneten, zudem ist Lua ein Interpreter sprich alles muss im Quellcode Format sein & das ist für manche eher ungünstig.
zudem solltest du dir selber mal Fakten suchen denn das muss jeder selber wissen
Nein du musst nichts zerstören zudem solltest du deinen Textdraw auf den Index mehrere Spieler definieren & dann in dem jeweiligen Index den Draw erstellen,
nicht vergessen ihn wieder zu zerstören sobald der Spieler den Server verlässt & beim verbinden genau anders rum, einfach erstellen
Ja Text formatieren & neu übergeben... oder wie willst du es sonst machen :>
SetTimer("blubb",MS_INTERVALL,WIEDERHOLEN 1/0);
public blubb()return TextDrawSetString(Textdraw,"neuertext");
nur ein Beispiel...
du kannst ein Kommando erstellen der den jeweiligen Rcon Command sendet