Klar, kann man machen, dass man seine clientid eingeben muss und dann setzt du den in die Gruppe.
Printe dir doch einfach mal die ids und probier das System aus, dann siehst du es ja ![]()
Klar, kann man machen, dass man seine clientid eingeben muss und dann setzt du den in die Gruppe.
Printe dir doch einfach mal die ids und probier das System aus, dann siehst du es ja ![]()
Wollte mal fragen wie ich einen Server Restart nach einem Textdraw Countdown mache.
Naja, also zuerst ist klar, du musst ein TextDraw designen, dafür gibt es ja haufenweise Editoren ![]()
Allerdings, da der Text ja für alle Spieler gleich ist, verwende direkt normale TextDraws und keine PlayerTextDraws.
Und dann startest du einfach einen Timer wie:
//Im Befehl
SetTimerEx("ServerRestart",997,0,"ii",5,0); //5 heißt 5 minuten
//Dann unten im Skript
forward ServerRestart(minuten, sekunden);
public ServerRestart(minuten, sekunden)
{
if(sekunden == 0) minuten--,sekunden=59;
else sekunden--;
//Hier dann sowas wie:
new string[64];
format(string,sizeof(string),"Restart in %02d Minuten & %02d Sekunden.",minuten,sekunden);
TextDrawSetString(restart, string);
TextDrawShowForAll(restart);
if(sekunden == 0 && minuten == 0) return SendRconCommand("gmx");
return SetTimerEx("ServerRestart",997,0,"ii",minuten,sekunden);
}
Alles anzeigen
Das was du beim TeamSpeak versuchst verstehe ich nicht so ganz.
Hier mal ein Beispiel Thread zur Inspiration: Ts3 mit Samp Server verbinden
Hier evtl wieder vorherige Dinge mit der Kompatibilität und dem Adminmodus ausprobieren xD
#Handy
Was mich nur wundert das kein Crash Log da ist
Das passiert, wenn sich die .exe automatisch beendet, anstatt zu crashen ![]()
2 Dinge die evtl noch helfen könnten...
1. Mal den GTA Ordner verschieben z.B. mal auf n Desktop packen.
2. Eventuell ein anderes GTA ausprobieren, es sei denn du bist sicher, dass genau diese Version schon mal gelaufen ist.
Windows Kompatibilität mal auf Win Xp stellen und als Admin ausführen...
und mal den Crash-Log posten ![]()
Oder die Sesamstraße ![]()
Sieht so n bisschen aus wie Bert mit Baskenmütze hahaha xD

Das die Gebäude ect ordentlich geladen werden.
Nein, da reicht es wenn du den Spieler in den Spectate Modus setzt, mit [wiki]TogglePlayerSpectating[/wiki]
Kurze frage kann man den Spieler irgendwie mit fahren lassen?
Was meinst du mit fahren?
Wenn du langsame Bewegung meinst, dann so:
InterpolateCameraPos(playerid, 2039.615722, 1712.241210, 15.445195, 2039.757934, 951.170471, 30.502363, 50000, CAMERA_MOVE);
Primzahlen, sind Zahlen, die nur durch sich selbst und 1 teilbar sind.
Also musst du leider wenn du wissen willst, ob N eine Primzahl ist erstmal checken, von 2-wurzel(n) ob da eine Zahl ist, mit der man N teilen kann.
Ups, sorry ![]()
public class Primzahlen
{
public static void main(String[] args) {
int erg = prim(2,30);
System.out.println(+erg);
}
private static int prim(int zahl1, int zahl2) {
if(zahl1 < 2 || zahl2 < 2)return System.out.println("Die Zahlen müssen mindestens 2 betragen!");
if(zahl2 < zahl1)return System.out.println("Zahl 2 muss größer als Zahl 1 sein!");
if(zahl2 == zahl1)return System.out.println("Gib 2 unterschiedliche Zahlen an!");
int primzahlen = 0;
for(int i=zahl1; i <= zahl2; i++)
{
if(isPrime(i))
{
primzahlen++;
}
}
return primzahlen;
}
private static boolean isPrime(int num)
{
if (num == 2)
return true;
if (num < 2 || num % 2 == 0)
return false;
for (int i = 3; i * i <= num; i += 2)
if (num % i == 0)
return false;
return true;
}
}
Alles anzeigen
Was soll die Funktion denn zurückgeben?
Aber jetzt Crasht Game immer
Gibt es einen crash-log? ![]()
Einfach mal googeln ![]()
Den Fehler gab es schon sehr oft, dir fehlen die C++ Redistributable ![]()
wobei es nicht mal einen inputtext gibt
Du musst schon lesen, was ich dir schicke.
inputtext hat den String als Wert, auf die listrow, auf die du geklickt hast.
Klickst du beispielsweise auf die 2. Zeile steht in inputtext "a (1)" in deinem Fall.
Dafür der Link...dafür habe ich das geschrieben...
Hier der Code noch mal ein bisschen anders geschrieben, kannst an einigen Stellen auf einiges verzichten.
Zudem solltest du versuchen keine globalen Strings zu verwenden.
CMD:billboards(playerid)
{
if(Spieler[playerid][pFraktion] != 5 && Spieler[playerid][pAdmin] < 4) return SendClientMessage(playerid, COLOR_GREY, "Fehler: Sie haben keinen Zugriff auf Billboards.");
new Header[32], count, string[(64)*sizeof(Billboards)] = "ID\tStandort\tText\n";
for(new i; i<sizeof(Billboards);i++)
{
if(Billboards[i][b_Created] != 1) continue;
format(string,sizeof(string),"%s\n%d\t%s (%d)\t%s", string, Billboards[i][datenbank_id], Billboards[i][bOrt], i, Billboards[i][bText]);
count ++;
}
if(count == 0)return SendClientMessage(playerid, COLOR_GREY, "Fehler: Es existieren zur Zeit keine Billboards.");
format(Header, sizeof(Header), "Werbetafeln (Insgesamt: %d)", count);
ShowPlayerDialog(playerid, DIALOG_BILLBOARDS, DIALOG_STYLE_TABLIST_HEADERS, Header, string, "Schließen", "");
return 1;
}
//Dann der Dialog part
if(!response) return 1;
new header[32];
//Das hier eventuell so lösen:
//Das liefert dir direkt die DatenbankID
pBillboardList[playerid] = strval(inputtext);
format(header, sizeof(header),"Billboard (ID: %d)", pBillboardList[playerid]);
if(Spieler[playerid][pAdmin] >= 4)
{
ShowPlayerDialog(playerid, DIALOG_BILLBOARDS_ADMIN, DIALOG_STYLE_LIST, header, "Checkpoint setzen\nText bearbeiten\nOrt bearbeiten\nBillboard löschen", "Auswählen", "Zurück");
}
else if(Spieler[playerid][pFraktion] == 5)
{
ShowPlayerDialog(playerid, DIALOG_BILLBOARDS_NR, DIALOG_STYLE_LIST, header, "Checkpoint setzen\nText bearbeiten", "Auswählen", "Zurück");
}
return 1;
Alles anzeigen
Habe direkt mal eine mögliche Lösung im Code angegeben, über inputtext kannst du dann die Datenbankid abfragen.
Hier mal, was inputtext für den jeweiligen Dialog Typ enthält: https://wiki.sa-mp.com/wiki/Dialog_Styles
Man kann es auch anders lösen, z.B. indem du das temporär in PVars zwischenspeicherst o.ä.
Aber so ist es eigentlich am einfachsten ![]()
v_boonet
Im new schreibst du v_boonet willst aber v_bonnet nutzen.
Musst dich auf eins einigen ![]()
konstrukive Diskussionen sind nicht möglich
Hmm? Doch natürlich, kannst gerne schreiben, was dich stört, nur dann solltest du auch schon eine Alternative bieten und keine einfaches, ja das ist nicht gut.
Zumal man deine Szenarien auch durch eine 2. Variablen lösen könnte wie...er ist Gast oder er muss Angemeldet sein.
Wie dem auch sei, ich würde sowas über einen zusätzlichen Parameter im ocmd Kopf umsetzen. Das braucht keine Zeile Code, kann pro Befehl gesteuert werden, und benötigt keine Ausnahmen in dem Callback, die im schlimmsten Fall auch noch mit strcmp gemacht werden, und womöglich auch vergessen werden, was ein Notfall Update nach sich zieht. Den zugehörigen Code baut man dann in das Callback ein oder direkt in die Include.
Das ist zwar eine nette Idee, aber mit ocmd, kaum bzw gar nicht realisierbar.
Woher soll man im Callback auch wissen, dass im Funktionsheader der Parameter auf true gesetzt wurde?!
Das müsste man dann zwischenspeichern und das wäre sehr aufwändig...da ist es einfach ein paar Ausnahmen zu schreiben oder das anders zu realisieren.
Aber im Endeffekt ist das noch um einiges umständlicher und viel schwieriger.
Mein Vorschläge sind einfach zu realisieren & zu integrieren.
Klar könnte man direkt auch auf Plugins wie https://forum.sa-mp.com/showthread.php?t=608474 umsteigen, wo man schon eine größere Funktionalität geboten bekommt, aber darum ging es ja eigentlich nicht.
aber ich hätte es glaube ich so geregelt
Also die Idee mit der Schleife ist schon gut, aber dein Code wird nicht funktionieren, da du x,y,z nicht updatest + nicht als erstes abfragst.
Desweiteren verwendest du hier 2 globale Variablen mit dem index MAX_PLAYERS, ich zeige mal, dass man das nicht brauch und der Code effizienter wird:
Zudem sollte man eine Zeitsperre einbauen, damit man den Command nicht spammt, während man sich noch bewegt:
ocmd:move(playerid,params[])
{
if(GetPVarInt(playerid,"p_move")) return SendClientMessage(playerid,-1,"Du bewegst dich schon gerade!");
SetPVarInt(playerid,"p_move",1);
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
SetTimerEx("RotatePlayer", 200, 0, "iifff", playerid, 0, x, y, z);
return 1;
}
public RotatePlayer(playerid, count, Float:x, Float:y, Float:z)
{
if(++count == 10) return DeletePVar(playerid,"p_move");
y += 2;
SetPlayerPos(playerid, x, y, z);
SetTimerEx("RotatePlayer", 200, 0, "iifff", playerid, count, x, y, z);
return 1;
}
Alles anzeigen
Damit hast du dann auch den /register und /login Befehl deaktiviert, man könnte sich daher nicht mehr einloggen bzw. registrieren, ohne eingeloggt zu sein.
Ebenso Befehle wie /help oder /contact. Diese sollten durchaus ohne Login möglich sein. Daher macht es meiner Meinung nach keinen Sinn, dieses Callback für diesen Zweck zu nutzen, da der eine oder andere Befehl mehr, weniger oder andere Abfragen benötigt.
1. Wer nutzt dafür heute noch Befehle?
2. Man kann dafür Ausnahmen einfügen, ich hoffe das ist dir bewusst. Nur weil man 3 Befehle verwenden mag, soll man also in allen anderen 1000 diese Zeile Code nutzen?! aha.