Wie sieht dein OnPlayerCarsLoad aktuell aus?
Beiträge von Jeffry
-
-
In der server.cfg:
mysqlstatic.so
zu:
mysql_static.so -
Konnte das Plugin überhaupt gestartet werden?
-
Die win.rar für die Include und das Windows Plugin, die linux.rar für das Linux Plugin.
-
Versuche es mal mit der R34:
https://github.com/pBlueG/SA-MP-MySQL/releases/tag/R34 -
Den Funktionen nach benötigst du die R5'er Version (oder eine ähnliche).
Ich habe die hier angehängt:
MySQL (Installation, Zugriff, Einstellungen, Login & Register Beispiel) -
Ach, wirklich?
Ja, das geht.
-
dcmd_createff(playerid,params[])
{
new fdatei[128];
format(fdatei,sizeof(fdatei),"/FPickups/Pickup.txt");
if(!fexist(fdatei)) dini_Create(fdatei);
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid,x,y,z);
dini_FloatSet(fdatei,"Pos_X",x);
dini_FloatSet(fdatei,"Pos_Y",y);
dini_FloatSet(fdatei,"Pos_Z",z);
Create3DTextLabel("Fastfood Restaurant!", hellrot, x, y, z, 5.0, 0, 1 );
return 1;
}Allerdings kannst du so natürlich nur ein Restaurant erstellen.
Falls du ein dynamisches System erstellen willst, rate ich dir dazu dir dieses Tutorial anzuschauen: [jTuT] Fraktions-Fahrzeug-System mit Dini 1.6
-
Du hast vergessen beim Timer die playerid mit anzugeben
Die braucht es gar nicht, da er es für alle anzeigt.
Mache es so:
ocmd:co(playerid,params[])
{
SetTimerEx("timer", 1000, false, "i", 5);
return 1;
}forward timer(zahl);
public timer(zahl)
{
new str[16];
format(str, sizeof(str), "%i", zahl);
if(zahl > 0) SetTimerEx("timer", 1000, false, "i", zahl-1); //Startet den Timer erneut, solange zahl > 0 ist.
else format(str, sizeof(str), "Looos!!");
GameTextForAll(str, 1200, 1);
return 1;
} -
war in dem befehl
Stimmt, da zeigst du ja die gesamten Namen an.
setze die länge von string auf 512 so wie du gesagt hast
Genau, falls das nicht ausreicht kannst du es ja auch etwas erhöhen.
-
Ändere im Befehl:
new string[MAX_PLAYER_NAME * MAX_PLAYERS];
zu:
new string[512];Dann müsste die Meldung weg gehen.
Ich habe es über MAX_PLAYERS deklariert, da ich nicht weiß, wie viele Slots du hast, wahrscheinlich reicht es aber auch so.Alternativ kannst du versuchen, unter den Includes das einzufügen:
#pragma dynamic 100000Schaue auch mal, ob du in der a_samp.inc die MAX_PLAYERS Anzahl auf die Anzahl deiner Slots im Server gesetzt hast, das spart ressourcen, sonst wird es immer mit 500 oder mehr kompiliert, obwohl du z.B. nur 50 Slots hast.
-
Dann den Befehl so:
ocmd:tickets(playerid,params[])
{
if(isPlayerAnAdmin(playerid,1) || isPlayerUservertreter(playerid,1))
{
new string[MAX_PLAYER_NAME * MAX_PLAYERS];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(GetPVarInt(i,"Ticket") == 1)
{
format(string, sizeof(string), "%s%s\n",string,SpielerName(i));
}
}
}
ShowPlayerDialog(playerid,DIALOG_TICKETS,DIALOG_STYLE_LIST,"Offene Tickets",string,"Ok","Abbrechen");
return 1;
}
else
{
SendClientMessage(playerid,RED,"FEHLER: Du bist kein Admin oder Uservertreter!");
return 1;
}
}Und in OnDialogResponse:
if(dialogid == DIALOG_TICKETS)
{
if(!response) return 1;
new count = -1;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(GetPVarInt(i,"Ticket") == 1)
{
count++;
if(count == listitem)
{
new string[145];
format(string, sizeof(string), "Spieler %s (ID: %d) in Zeile %d wurde angeklickt.", SpielerName(i), i, listitem);
SendClientMessage(playerid, 0xFFFFFFFF, string);
return 1;
}
}
}
}
return 1;
}Beachte aber, dass es sein könnte, dass ein Spieler in der Liste den Server verlässt, während du die Liste offen hast, sprich dann stimmt die Liste eventuell nicht mehr und es wird bei der Auswahl ein falscher Spieler ausgewählt.
Um das zu verhindern habe ich hier ein Tutorial, mit dem man solche Dialoge aktualisieren lassen kann: [jTuT] Interaktive DialogeAlternativ könnte man noch prüfen, ob der Spieler mit dem ausgewählten Name noch online ist, dann sieht es so aus:
if(dialogid == DIALOG_TICKETS)
{
if(!response) return 1;
new count = -1;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(GetPVarInt(i,"Ticket") == 1)
{
count++;
if(count == listitem)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(i, name, MAX_PLAYER_NAME);
if(strcmp(name, inputtext))
{
SendClientMessage(playerid, 0xFF0000FF, "Error: Der Spieler ist nicht mehr online.");
return 1;
}
new string[145];
format(string, sizeof(string), "Spieler %s (ID: %d) in Zeile %d wurde angeklickt.", SpielerName(i), i, listitem);
SendClientMessage(playerid, 0xFFFFFFFF, string);
return 1;
}
}
}
}
return 1;
}
Das geht allerdings nur so, wenn du im Dialog nur den Name anzeigst, da der inputtext bei einem Listdialog dem Text der Zeile entspricht, die ausgewählt wurde. So wie der Befehl momentan ist, kannst du es so nutzen. -
Hast du im enum das kennzeichen als Array deklariert?
Sprich so:
kennzeichen[64],Wenn nicht, mache das so.
-
random(5) gibt der Variable RandomExplosion hier eine zufällige Zahl von *0 - 5.
Stimmt nicht ganz, bei random(5) ist es von 0 bis 4 (0,1,2,3,4 = 5 Werte).
Etwas aufgeräumter kann man es so schreiben:
if(pData[playerid][P_HaveExplosion] == 1)
{
switch(random(5))
{
case 0,2,4:
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
CreateExplosion(x, y, z, 2, 5.0);
}
}
}
Dann gibt es eine Explosion, wenn 0, 2 oder 4 raus kommt, und keine Explosion, wenn 1 oder 3 raus kommt. -
Die Fehlermeldung ist auch der Grund, warum du mit dem Server keine Verbindung herstellen kannst.
Du hast irgendwas an den Einstellungen verbogen, sodass keine Verbindung mehr hergestellt werden kann. Was genau kann ich dir nicht sagen.Am besten du entfernst nochmal alles was zu XAMPP gehört (De-Installieren und Installationspfad komplett leeren) und installierst es nach dem Tutorial noch einmal, Schritt für Schritt. Dann sollte es wieder klappen.
-
Zwischenfrage zum Verständnis:
Warum zeigst du beim Befehl /tickets immer 3 Namen pro Zeile an? So kann meinem Verständnis nach doch nicht eindeutig eine Zeile einem Spieler zugeordnet werden, oder? Oder hat das einen anderen Sinn (x-Variable)? -
Versuche mal folgendes:
Entferne den Timer, der GangCarTune aufruft und setze stattdessen dort das hier hin:
GangCarTune();Entferne das GangCarTune(); auch bei OnVehicleSpawn.
Klappt es dann auch noch?
-
mysql_fetch_field("kennzeichen",data); format(cInfo[i][kennzeichen], 64, data);
Das SetVehicleNumberPlate dann direkt unter dem CreateVehicle.
-
Prinzipiell alles was irgendwie auf das Array zugreift, in das die Tuning IDs geschrieben werden, da die ja zwar drin sind, aber etwas später weg sind.
Den genauen Grund kann ich dir aber nicht sagen, das kann vieles sein. Das muss man debuggen und eventuell den Code etwas auseinander nehmen.
-
Willkommen auf Breadfish!
1.)
Erstelle dazu ein globales Array:
new sentID[MAX_PLAYERS];In dem Befehl dann:
sentID[pID] = playerid;
Somit weiß die pID, dass sie von der playerid die Einladung bekommen hat.Im Dialog kannst du den Namen dann so ausgeben:
printf("Fahrlehrer Name: %s", SpielerName(sentID[playerid]));2.)
Poste bitte den Befehl, den du dazu erstellt hast. Analog dazu muss nämlich der Code von OnDialogResponse aufgebaut sein.