Dann nutze
mysql_debug(1);
Und dann sollte in deinem Log eigentlich eine Menge stehen.
Dann nutze
mysql_debug(1);
Und dann sollte in deinem Log eigentlich eine Menge stehen.
Das war nur als Beispiel gedacht. Welches Plugin nutzt du denn?
public OnPlayerDeath(playerid, killerid, reason)
{
if(OnEvent[playerid] == 0)return 1;
if(TeamA[playerid] == 1) Team2++;
else if(TeamB[playerid] == 1) Team1++;
new string[128];
format(string,128,"%d",Team1);
TextDrawSetString(punkte1,string);
format(string,128,"%d",Team2);
TextDrawSetString(punkte2,string);
return 1;
}
Float:AP = GetPlayerArmour(...
Das geht so nicht. Du musst das Gleichzeichen und das davor weg machen, du hast den Wert ja im zweiten Parameter.
GetPlayerArmour(...
Ebenso bei Health.
forward MSG_OnPlayerCommandPerformed(playerid, cmdtext, success);
Zu
forward MSG_OnPlayerCommandPerformed(playerid, cmdtext[], success);
xSoldier:
{2757.8887, 1223.3120, 2861.1313, 1383.1230, CTFx, CTFy, CTFz}
Die drei letzen Koordinaten musst du mit noch einem /save auffüllen, wird wohl ein Checkpoint sein oder sowas, das was in der Zone irgendwo ist. Dafür nimmst du vom /save den 2., 3. und 4. Wert.
@[GeD]Max: Zeigt es den richtigen Skin an, wenn du anstatt GetPlayerSkin einfach mal 50 reinschreibst? Siehst du dann Skin 50? Wenn ja, dann nutzt du wohl GetPlayerSkin an einer Stelle im Code an der es nicht geht, oder der Timer wird nicht richtig aufgerufen, oder du siehst ein falsches Textdraw.
if(cmdtext == "/ls")
Zu
if(!strcmp(cmdtext, "/ls", true))
Das für alle so machen.
Das ist nötig, damit das Label nicht nochmal zerstört wird, denn die ID des Labels bleibt ja in der Variable, rufst du dann mit dieser Variable die Methode zum zerstören noch mal auf, kann es sein, dass ein Label eines anderen Spielers weg geht. Deshalb leeren wir die Variable zusätzlich, indem wir sie auf -1 setzen.
Ok, das ist komisch. Es kann nicht -1 Zeilen geben, das muss eine Fehlerrückgabe sein.
Da das query ausgeführt wird, muss aber mehr im Log stehen, wenn du mysql_log auf LOG_ALL setzt. Schau mal danach, da muss wesentlich mehr stehen. Dann poste das was da steht.
Hast du dir auch einen Skin gesetzt?
Mache mal einen Befehl /skin mit dem du dir die Skin ID 50 setzt, und schaue dann, ob es den Skin anzeigt, wenn der Timer erneut aufgerufen wird.
So, das "mysql_CheckAccount" erklärt das auch, warum kein Dialog kommt, da du den nur anzeigen lässt, wenn es 0 oder 1 ist.
Poste mal deine "mysql_CheckAccount"-Funktion, damit wir prüfen können ob es so gewollt ist, oder ob -1 als Fehler steht.
arank ist ein Integer, es muss aber ein String (=Array) sein. Da nehmen wir eine neue Variable hinzu (rankstr).
ocmd:makeadmin(playerid,params[])
{
new pID,string[256],adminname[MAX_PLAYERS],spielername[MAX_PLAYERS],arank;
GetPlayerName(playerid, adminname, sizeof(adminname));
GetPlayerName(playerid, spielername, sizeof(spielername));
if(!IsPlayerConnected(playerid))return SendClientMessage(playerid, Rot,"[FEHLER] {FFFFFF}Die angegebende SpielerID ist nicht online!");
SpielerInfo[playerid][pAlevel] = arank;
if(arank < 0 || arank > 7) return SendClientMessage(playerid,Rot, "[FEHLER] {FFFFFF}Du kannst nur das Adminlevel von 0 - 7 vergeben!");
if(SpielerInfo[playerid][pAlevel] == 8)
{
if(SpielerInfo[playerid][pAlevel] == 0)
{
format(string, sizeof string, "[INFO] {FFFFFF}Serverleiter %s hat dich aus dem Team entfernt!",adminname);
format(string, sizeof string, "[A-INFO] {FFFFFF}Serverleiter %s hat %s aus dem Team entfernt!",adminname,spielername);
SendClientMessage(playerid,Rot,string);
SendAdminMessage(Rot,string);
SpielerInfo[pID][pAlevel] = 0;
SavePlayer(playerid);
}
else if(SpielerInfo[playerid][pAlevel] >= 1)
{
new rankstr[64];
if(SpielerInfo[playerid][pAlevel] == 1)
{
rankstr = "Supporter";
}
else if(SpielerInfo[playerid][pAlevel] == 2)
{
rankstr = "Administrator Level 1";
}
else if(SpielerInfo[playerid][pAlevel] == 3)
{
rankstr = "Administrator Level 2";
}
else if(SpielerInfo[playerid][pAlevel] == 4)
{
rankstr = "Administrator Level 3";
}
else if(SpielerInfo[playerid][pAlevel] == 5)
{
rankstr = "High Administrator";
}
else if(SpielerInfo[playerid][pAlevel] == 6)
{
rankstr = "Entwickler";
}
else if(SpielerInfo[playerid][pAlevel] == 7)
{
rankstr = "Stelv. Serverleiter";
}
format(string, sizeof string, "[INFO] {FFFFFF}Serverleiter %s hat dich zum %s befördert!",adminname,rankstr);
format(string, sizeof string, "[A-INFO] {FFFFFF}Serverleiter %s hat %s zum %s befördert!",adminname,spielername,rankstr);
SendClientMessage(playerid,Rot,string);
SendAdminMessage(Rot,string);
SpielerInfo[pID][pAlevel] = arank;
SavePlayer(playerid);
}
return 1;
}
return 1;
}
Ja, das sieht zwar gut aus aber das zeigt auch, dass
if(mysql_CheckAccount(playerid) == 1)
nicht aufgerufen wird.
Mache dein OnPlayerRequestClass mal zu:
public OnPlayerRequestClass(playerid, classid)
{
printf("OnPlayerRequestClass: %d", playerid);
if(IsPlayerNPC(playerid))
{
SpawnPlayer(playerid);
return 1;
}
printf("No NPC");
printf("CheckAccount: %d", mysql_CheckAccount(playerid));
if(mysql_CheckAccount(playerid) == 1)
{
printf("1");
new logname[MAX_PLAYER_NAME];
new logstr[250];
printf("2");
format(logstr,sizeof(logstr),"{FEFEFE}Herzlich Willkommen zurück {FF8C00}%s{FEFEFE},\nWir die NoL Community, wünschen dir noch {FF8C00}viel Spaß\n{FEFEFE}Logge dich bitte ein!",logname);
printf("3");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"NoL - Login",logstr,"Login","Abbrechen");
}
else if(mysql_CheckAccount(playerid) == 0)
{
printf("4");
ShowPlayerDialog(playerid,DIALOG_REG,DIALOG_STYLE_PASSWORD,"NoL - Registrierung","{FF8C00}Herzlich Willkommen{FEFEFE},\n Es freut uns das du zu uns gefunden hast\nBitte {FF8C00}Registriere dich {FEFEFE}nun um hier Spielen zu können!","Register","Abbrechen");
}
printf("MySQL passed");
PlayerPlaySound(playerid, 1176, 0.0, 0.0, 0.0);
PlayerInfo[playerid][pModel] = Peds[classid][0];
SetPlayerTeamFromClass(playerid,classid);
SetupPlayerForClassSelection(playerid);
printf("OnPlayerRequestClass - Done");
return 1;
}
Was wird im server_log geprintet?
Ja das.
Und dazu den MySQL Log, da es wohl an MySQL liegt.
wie du den aktivierst, siehst du hier: Tipps: Scripting-Probleme richtig erklären (Kapitel 1.4.)
Bitte poste den Code, der den Dialog anzeigen soll.
Poste außerdem auch gleich noch den MySQL Log dazu, wie du den aktivierst, siehst du hier: Tipps: Scripting-Probleme richtig erklären (Kapitel 1.4.)
Regelt das Switch denn nicht ?
Ein switch wäre natürlich noch besser, klar.
Der geht aber nicht immer, sondern nur wenn man konstante Werte abfragt. Bei Dialogen und in meinem Beispiel würde es gehen, aber wenn man zwei Variablen vergleicht, geht es nicht.
Du warst schneller mit kopieren als ich mit editieren.
Also nochmal:
forward GetpMember(playerid);
public GetpMember(playerid)
{
return PlayerInfo[playerid][pMember];
}
forward GetpLeader(playerid);
public GetpLeader(playerid)
{
return PlayerInfo[playerid][pLeader];
}
forward GetpMember(playerid);
public GetpMember(playerid)
{
return PlayerInfo[playerid][pMember];
}
forward GetpLeader(playerid);
public GetpLeader(playerid)
{
return PlayerInfo[playerid][pLeader];
}
So.
PlayerTextDrawFont(playerid, Textdraw7[playerid], 4);
zu:
PlayerTextDrawFont(playerid, Textdraw7[playerid], TEXT_DRAW_FONT_MODEL_PREVIEW); // TEXT_DRAW_FONT_MODEL_PREVIEW = 5
Aha, so heißt das enum.
Jetzt suche nach "[pInfo]".
Das was dort nach dem "new" steht, muss anstelle von "pInfo" in die beiden Funktionen die du in den Gamemode eingefügt hast.