Entferne die Include und mache es so:
Unter die Includes:
new tTime[MAX_PLAYERS];
OnPlayerUpdate:
tTime[playerid] = gettime();
Und der stock:
stock IsPlayerOnDesktop(playerid)
{
if(tTime[playerid]+1 < gettime()) return true;
return false;
}
Entferne die Include und mache es so:
Unter die Includes:
new tTime[MAX_PLAYERS];
OnPlayerUpdate:
tTime[playerid] = gettime();
Und der stock:
stock IsPlayerOnDesktop(playerid)
{
if(tTime[playerid]+1 < gettime()) return true;
return false;
}
Was geht denn nicht? Kommen irgendwelche Meldungen im Chat?
Edit:
DenJail:
Ich habe die Meldung in Zusammenhang mit dem Code noch gar nicht gesehen als du gepostet hast, kann es ja zuvor schlecht erraten, deshalb habe ich nach der Meldung gefragt. Und liegt ja nicht mal da dran. ![]()
Sinnvoll wäre es jetzt die IF Abfrage mal zu debuggen.
Gute Nacht, das bekommt ihr schon hin ![]()
Hast du jetzt den Code einfach von einem anderen Thread kopiert?
Lösung steht hier: errors hilf
Kannst es so schreiben:
forward updateTimer();
public updateTimer()
{
new str[128];
new name[MAX_PLAYER_NAME], Float:pHP, Float:armour;
for(new i=0; i<MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
GetPlayerName(i, name, sizeof(name));
GetPlayerHealth(i,pHP);
GetPlayerArmour(i,armour);
if(IsPlayerOnDesktop(i)) format(str, sizeof(str), "AFK/Desktop\n%s (%d)\n%0.2f HP | %0.2f R", name, i, pHP, armour);
else format(str, sizeof(str), "%s (%d)\n%0.2f HP | %0.2f R", name, i, pHP, armour);
Update3DTextLabelText(label[i],0xFFFFFFFF,str);
}
return 1;
}
Nein, als INT, da es ja eine Ganzzahl ist, nur eben umdefiniert.
new betrag = Spieler[playerid][pMetall] * 2;
Ja, dann nur *1. Du kannst es auch mal eine Variable machen:
new betrag = Spieler[playerid][pMetall] * anzahl;
Ah, deine Einrückung war komplett daneben.
Schreibe es so:
forward desktoptimer();
public desktoptimer()
{
for(new i=0; i<MAX_PLAYERS; i++)
{
new str[32];
if(IsPlayerOnDesktop(i))
{
format(str, 32, "%s Sekunden AFK", GetPlayerDesktopTime(i));
if(GetPVarInt(i, "TextSend") == 0)
{
SetPVarInt(i, "TextSend", 1);
PlayerText[i] = Create3DTextLabel(str, COLOR_LIGHTRED, 0.0, 0.0, 0.0, 20.0, -1, -1);
}
Attach3DTextLabelToPlayer(PlayerText[i], i, 0.0, 0.0, 0.0);
Update3DTextLabelText(PlayerText[i], 0x0069FFFF, str);
}
else
{
if(GetPVarInt(i, "TextSend") == 1)
{
Delete3DTextLabel(PlayerText[i]);
SetPVarInt(i, "TextSend", 0);
}
}
}
return 1;
}
Was denn?
In deinem Befehl bei der Auswahl:
sInfo[playerid][fightingstyle] = 1;
zu:
sInfo[playerid][fightingstyle] = FIGHT_STYLE_NORMAL;
Ebenso für alle anderen Styles.
Und beim Login lädst du es ja wieder aus der Datei/Datenbank, danach kannst du dann
SetPlayerFightingStyle(playerid,sInfo[playerid][fightingstyle]);
machen.
![]()
forwrd desktoptimer();
zu:
forward desktoptimer();
Dann sollten die anderen Fehler auch weg sein.
Ja. Einfach den switch in einen stock packen und den Name dann zurückgeben lassen mir return.
Versuche es mal selbst.
Nach deiner Variante so:
ocmd:makeadmin(playerid, params[])
{
new pid,level,string[128],string1[128],alvlname[64];
if(SpielerInfo[playerid][pAdminlevel] < 6) return SendClientMessage(playerid,Rot,"M�glich ab: "COLO" Adminrank 6");
if(!IsPlayerConnected(pid)) return SendClientMessage(playerid,Rot,"Keiner ist Verbunden mit dieser ID!");
if(sscanf(params,"ud", pid, level)) return SendClientMessage(playerid, Rot,""COLO"Verwendung :"COLR" /makeadmin [ID] [Level]");
SpielerInfo[pid][pAdminlevel] = level;
SavePlayer(pid);
switch(level)
{
case 1: format(alvlname, 64, arang1[id]);
case 2: format(alvlname, 64, arang2[id]);
case 3: format(alvlname, 64, arang3[id]);
case 4: format(alvlname, 64, arang4[id]);
case 5: format(alvlname, 64, arang5[id]);
case 6: format(alvlname, 64, arang6[id]);
}
format(string,sizeof(string),""COLO"[%s] %s"COLR" hat dir das Adminlevel"COLO" %d (%s) "COLR"gegeben ",adminrang(playerid),GetName(playerid),level,alvlname);
format(string1,sizeof(string1),"Du hast "COLO"%s "COLR"das Adminlevel "COLO"%d (%s) "COLR"gegeben ",GetName(pid),level,alvlname);
SendClientMessage(playerid,Rot,string1);
SendClientMessage(pid,Rot,string);
return 1;
}
updaterang();
zu OnGameModeInit schreiben.
Naja, dann prüfst du es eben nur da, wo Geld in die Bank eingezahlt wird:
if(pInfo[playerid][BankKonto] > pInfo[playerid][MonthlyBankMax]) pInfo[playerid][MonthlyBankMax] = pInfo[playerid][BankKonto];
Beim Login, dort wo du es aus der Datei lädst eben wieder SetPlayerFightingStyle machen.
Den Fightingstyle würde ich dann lieber so in's enum schreiben:
sInfo[playerid][fightingstyle] = FIGHT_STYLE_NORMAL;
(bei allen)
Dann kannst du einfach
SetPlayerFightingStyle(playerid,sInfo[playerid][fightingstyle]);
machen.
SPECIAL_ACTION_CUFFED funktioniert an Skin ID 0 (CJ) nicht.
Das else hast du an den switch gesetzt, das war falsch. Und in Zeile 3540 war das " und das ! vertauscht.
So:
Sag mal ...
SetPlayerFightingStlye
l und y sind falsch rum.
Markiere bitte die anderen Fehler im Code, falls noch welche da sind, nachdem du das ausgebessert hast.
Soll beim /update Befehl der beste Spieler der momentan im Spiel ist angezeigt werden, oder wie darf man den Code verstehen?
SetPlayerFightingstlye zu SetPlayerFightingStyle ändern.
Möglicherweise behebt das schon alle Errors. Wenn money noch immer nicht definiert ist, dann musst du es in das sInfo enum dazu schreiben.
Außerdem muss das Semikolon hinter den if-Abfragen weg:
if(sInfo[playerid][money]<15000);
zu:
if(sInfo[playerid][money]<15000)
public OnPlayerDisconnect(playerid)
{
DeletePlayer3DTextLabel(playerid, label[playerid]);
return 1;
}
new name[MAX_PLAYER_NAME], Float:pHP;
GetPlayerName(playerid, name, sizeof(name));
GetPlayerHealth(playerid,pHP);
new str[128];
format(str, sizeof(str), "%s (%d)\n%0.2f", name, playerid, pHP); //Die 1 ersetzen mit der Variable die du da haben willst.
printf("pHP: %f", pHP);
label[playerid] = Create3DTextLabel(str, 0xFFFFFFFF, 30.0, 40.0, 50.0, 40.0, 0); //WARNING ZEILE
Attach3DTextLabelToPlayer(label[playerid], playerid, 0.0, 0.0, 0.2);