Erzeuge keine zweite Variable (query2), sondern nutze die Variable query einfach nochmal, nachdem du das erste Query abgesendet hast.
Zu viele lokale Variablen, und zu große, sind schlecht. Hier musst du deshalb sparsamer umgehen.
Erzeuge keine zweite Variable (query2), sondern nutze die Variable query einfach nochmal, nachdem du das erste Query abgesendet hast.
Zu viele lokale Variablen, und zu große, sind schlecht. Hier musst du deshalb sparsamer umgehen.
Steht der Code so jetzt bei OnPlayerEnterVehicle oder OnPlayerStateChange?
Wird die SendClientMessage, dass man das Flugzeug nicht fliegen darf, angezeigt?
Das passt.
Setze bitte mal vor:
SetTimerEx("PlayerConnected", 100, false, "d", playerid);
einen
printf("Aufgerufen für playerid %d", playerid);
Wird das ausgeführt?
Wenn ja, setze den print auch mal in PlayerConnected als erste Zeile hin (vor IsPlayerConnected), wird das dann ausgeführt?
Ich würde dir entfehlen diese abfragen bei OnPlayerEnterVehicle auszuführen
Das würde ich auch empfehlen.
Allerdings anstatt RemovePlayerFromVehicle (das geht dort nämlich nicht):
TogglePlayerControllable(playerid, false);
TogglePlayerControllable(playerid, true);
das sagt er im Serverlog an "health: 87.00" aber mein hp balken ist voll
Hast du eventuell ein Textdraw darüber liegen, welches eine Server-Health anzeigt (um cheaten zu verhindern)?
Wie sieht denn die PlayerConnected Funktion aus? Ich nehme an das ist die Funktion, die nicht aufgerufen wird.
Ändere es hierzu ab:
if(isAmTelen[playerid])
{
if(Call_Anrufer[playerid]!=-1)
{
if(PlayerOnline(Call_Anrufer[playerid]))
{
SendClientMessage(Call_Anrufer[playerid],GRAU,"Du hörst nur noch ein Rauschen am anderen Ende der Leitung...");
isAmTelen[Call_Anrufer[playerid]]=0;
Call_Anrufer[playerid]=-1;
}
}
else if(Call_Anrufen[playerid]!=-1)
{
if(PlayerOnline(Call_Anrufen[playerid]))
{
SendClientMessage(Call_Anrufen[playerid],GRAU,"Du hörst nur noch ein Rauschen am anderen Ende der Leitung...");
isAmTelen[Call_Anrufen[playerid]]=0;
Call_Anrufen[playerid]=-1;
pInfo[playerid][handykarte]-=gpv(playerid,"MussTeleZahlen");
}
}
isAmTelen[playerid]=0;
}
if(killerid!=INVALID_PLAYER_ID)
{
if(PlayerOnline(killerid))
{
if(pInfo[killerid][fraktion]==2 || pInfo[killerid][fraktion]==3)
{
if(Robber[playerid]==1)
{
Robber[playerid]=0;
BankIsRobbed=0;
BankRobbed=1;
new str[128];
format(str,sizeof(str),"* Der Räuber %s wurde vom Beamten %s getötet. Der Bankraub ist gescheitert.",PlayerName(playerid), PlayerName(killerid));
SendClientMessageToAll(HBLAU,str);
SetTimer("BankRobReset", 10800*1000, false);
}
}
}
}
Wenn es aufgerufen wird (das return), dann ja.
Ändere es zu:
if(isAmTelen[playerid])
{
if(Call_Anrufer[playerid]!=-1)
{
if(PlayerOnline(Call_Anrufer[playerid]))
{
SendClientMessage(Call_Anrufer[playerid],GRAU,"Du hörst nur noch ein Rauschen am anderen Ende der Leitung...");
isAmTelen[Call_Anrufer[playerid]]=0;
Call_Anrufer[playerid]=-1;
}
}
else if(Call_Anrufen[playerid]!=-1)
{
if(PlayerOnline(Call_Anrufen[playerid]))
{
SendClientMessage(Call_Anrufen[playerid],GRAU,"Du hörst nur noch ein Rauschen am anderen Ende der Leitung...");
isAmTelen[Call_Anrufen[playerid]]=0;
Call_Anrufen[playerid]=-1;
pInfo[playerid][handykarte]-=gpv(playerid,"MussTeleZahlen");
}
}
isAmTelen[playerid]=0;
}
Dann wird der Code irgendwo drüber schon beendet.
Setze weitere prints in den Zeilen über diesem Abschnitt und finde so heraus, bis wohin der Code durchlaufen wird.
Setze bitte mal einen print direkt vor
if(PlayerOnline(killerid))
Wird der angezeigt?
printf("Aufgerufen für killerid: %d", killerid);
Entferne nach den drei if-Abfragen jeweils das "return".
Lass dir nach GetPlayerHealth mal das "health" ausgeben, was wird da ausgegeben?
printf("health: %0.2f", health);
Welche Nachricht kommt im Chat, und welche sollte kommen?
OnPlayerCarUpdate(playerid,false);
Nutze zwei format's hintereinander, Beispiel:
format(string, sizeof(string), "Hallo");
format(string, sizeof(string), "%s Welt!", string);
Oder, falls nur die Parameter am Ende zu viele sind, reicht ein Zeilenumbruch in eine neue Zeile im Code.
if(sInfo[i][sADuty])
{
format(string, sizeof(string),"%s%s\n",string, sInfo[i][sName]);
admins = string;
admin = 1;
}
else
{
format(string, sizeof(string),"%s%s\n",string, sInfo[i][sName]);
adminsoff = string;
adminoff = 1;
}
zu:
if(sInfo[i][sADuty])
{
format(admins, sizeof(admins),"%s%s\n",admins, sInfo[i][sName]);
admin = 1;
}
else
{
format(adminsoff, sizeof(adminsoff),"%s%s\n",adminsoff, sInfo[i][sName]);
adminoff = 1;
}
Beachte, dass es auch noch die Möglichkeit gibt, dass alle Admins off-Duty sind, und die Möglichkeit, das gar kein Admin online ist.
Die Abfrage ist korrekt, nur deine angegebenen Daten passen nicht. Poste diese, falls du nicht weißt was du ändern sollst (isInZone Aufruf).
Das hat zwei Gründe:
1) 527 liegt nicht zwischen 482 und 509
2) -1452 ist größer als -1553, daher musst du die beiden Werte in der Prüfung vertauschen.
Genau so.
Was ist in dem Code das Problem?
Ja.
Das Prinzip dessen kannst du dir hier abschauen: [jTuT] Fraktions-Fahrzeug-System mit MySQL R39-5
Kein Problem, so haben wir alle mal angefangen. Deshalb einfach nachfragen ![]()