Lösch einfach die Zeile 36 in deinem Script.
Nein, dann startet der Timer nicht. Die Zeile 36 muss wie gesagt zu OnGameModeInit verschoben werden.
Lösch einfach die Zeile 36 in deinem Script.
Nein, dann startet der Timer nicht. Die Zeile 36 muss wie gesagt zu OnGameModeInit verschoben werden.
Das muss bei OnGameModeInit hin, nicht zu den forwards.
SetTimer("UnMuteTimer",60000,1);
Und der Timer so:
public UnMuteTimer()
{
for(new i;i<MAX_PLAYERS;i++)
{
if(GetPVarInt(i,"Mute")>0)
{
new wert = GetPVarInt(i,"Mute" )-1;
SetPVarInt(i,"Mute",wert);
if(GetPVarInt(i,"Mute") == 0) SendClientMessage(i,COLOR_GREEN,"You have been Unmuted.");
}
}
return 1;
}
@Mencent: malE:
dini_Int und dini_Bool sind genau gleich, es spielt keine Rolle welches man verwendet. Daher muss man (siehe Lösung) auch dini_Bool mit bool: casten.
stock dini_IntSet(filename[],key[],value) {
new valuestring[MAX_STRING];
format(valuestring,sizeof(valuestring),"%d",value);
return dini_Set(filename,key,valuestring);
}
stock dini_Int(filename[],key[]) {
return strval(dini_Get(filename,key));
}
stock dini_BoolSet(filename[],key[],value) {
new valuestring[MAX_STRING];
format(valuestring,sizeof(valuestring),"%d",value);
return dini_Set(filename,key,valuestring);
}
stock dini_Bool(filename[],key[]) {
return strval(dini_Get(filename,key));
}
Quelle: dini.inc
Eigentlich müsste dini_Bool so aussehen:
forward bool:dini_Bool(filename[],key[]);
stock bool:dini_Bool(filename[],key[]) {
return bool:strval(dini_Get(filename,key));
}
Das könntest du in der dini.inc ändern, dann sparst du dir das casten im eigentlichen Code, da das unschön ist.
new PlayerText:HausLabelTD[MAX_PLAYERS][10];
Und bei OnPlayerConnect:
Dann kannst du den String der Textdraws entsprechend dem jeweiligen Haus dem Spieler dann setzen, wenn es angezeigt werden soll.
ocmd:a(playerid, params[])
{
if(SpielerInfo[playerid][aLevel] < 1) return SendClientMessage(playerid, 0xFF0000FF, "Nur für Admins.");
if(!params[0])) return SendClientMessage(playerid, 0xFF0000FF, "Nutze: /a [Text]");
new str[145];
GetPlayerName(playerid, str, MAX_PLAYER_NAME);
format(str, sizeof(str), "[Admin] %s: %s", str, params);
for(new i=0; i<MAX_PLAYERS; i++) if(SpielerInfo[i][aLevel] > 0) SendClientMessage(i, 0xFFFFFFFF, str);
return 1;
}
EDIT:
Sorry, [] bei params vergessen, danke Red_Romeo:.
dini_IntSet(pfad, "BoolWert", bVar);
Wenn das nicht geht, dann so:
dini_IntSet(pfad, "BoolWert", _:bVar);
Wobei bVar deine Boolean'sche Variable ist.
Aber es sollte beides gehen.
Sollte irgendeine Nachricht kommen in der cmd.exe?
Nein, man sieht es im Download Center dann. Aber auch das geht, wie ich gerade gehört habe, nicht bei allen.
Soweit ist er bei mir momentan. Die 2.7GB hat er, was er jetzt macht, keine Ahnung. So steht er seit 15 Minuten.
Vielleicht noch das 1GB Update von dem gesprochen wurde, da er trotzdem noch wie wild runterlädt, wenn auch nur noch mit 1MBit/s ![]()
Wenn's erst morgen fertig ist machts auch nichts. Ich habs ja auf dem einen Laptop schon, aus der Insider-Phase. Finde es klasse.
Wird durch das Starten dieser Exe Der Download gestartet,oder sollte man besser auf die Benachrichtigung von Microsoft warten?
Wenn du alle Updates drauf hast, und er dir sagt du sollst auf die Benachrichtigung warten, dann kannst du es in der cmd.exe über
anstoßen, dann siehst du im Update Center, dass er es runter lädt. Hab ich so gemacht, er bereitet die Installation gerade vor.
Wie hast du DIALOG_TELEPORT definiert?
Nutze https://wiki.sa-mp.com/wiki/GetPlayerDistanceFromPoint .
Als x, y, z nimmst du die GetVehiclePos.
So wie das aussieht, ist die Funktion GetFlameSlot bereits definiert.
Entferne den Code-Teil mal, oder suche, wo sie bereits definiert ist.
Du willst das ganze System von ocmd/dini in zcmd/MySQL konvertiert haben?
Dann solltest du dich im Marktplatz umsehen, ob dir das jemand macht.
Sinnvoller wäre es, den Code einfach so zu nutzen, als Filterscript.
new pname[MAX_PLAYER_NAME], id;
GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
{
format(string, sizeof(string), "%s%s (ID: %d)\n", string, PlayerVehicle[CarInfo[i][modelID]-400], id);
id++;
}
zu:
new pname[MAX_PLAYER_NAME], id;
GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
printf("i: %d | Besitzer: %s | pname: %s | len: %d | model: %d", i, CarInfo[i][Besitzer], pname, strlen(CarInfo[i][Besitzer]), CarInfo[i][modelID]);
if(!strcmp(CarInfo[i][Besitzer], pname) && strlen(CarInfo[i][Besitzer]) > 2 && CarInfo[i][modelID] > 0)
{
printf("Füge Fahrzeug hinzu.");
printf("%s (ID: %d)", PlayerVehicle[CarInfo[i][modelID]-400], id);
format(string, sizeof(string), "%s%s (ID: %d)\n", string, PlayerVehicle[CarInfo[i][modelID]-400], id);
id++;
}
printf("Fertig. id: %d", id);
Was steht dann im Server Log, wenn du die Liste anzeigen lassen willst?
Poste bitte deinen gesamten Code, so wie das aussieht, hast du das an einer falschen Stelle eingefügt, oder hast einen Klammerfehler.
Alternativ, füge diese beiden Funktionen samt forward ganz unten im Code ein.
Geht es so?
ocmd:plist(playerid)
{
new pflanzenname[60], string[54], frak, dialog[100];
for(new drugid=1;drugid<MAX_DRUGS;drugid++)
{
format(string,sizeof(string),"/Drogenpflanzen/%i.ini",drugid);
if(dini_Exists(string))
{
frak = dini_Int(string, "Fraktionsnummer"); //Gegebenenfalls auch hier: DrugSys[drugid][DrogenFraktion]
if(frak == PlayerDaten[playerid][pFraktion])
{
switch(DrugSys[drugid][DrogenID])
{
case 1:{pflanzenname="HANFPFLANZE";}
case 2:{pflanzenname="-";}
case 3:{pflanzenname="-";}
}
format(dialog, sizeof(dialog), "[%s] | Drogenmenge: %dg | Wasserstand: %d%", pflanzenname, DrugSys[drugid][DrogenMenge], DrugSys[drugid][DrogenWasserstand]);
SendClientMessage(playerid, ORANGE, dialog);
}
}
}
if(!strlen(dialog)) SendClientMessage(playerid, 0xFF0000FF, "Die Fraktion hat keine Drogenpflanzen gepflanzt!");
return 1;
}
Wenn nicht, dann stimmt vielleicht was mit der Fraktionsnummer nicht.
Das kannst du so machen:
ocmd:plist(playerid)
{
new string[54], frak, dialog[512];
for(new drugid=1;drugid<MAX_DRUGS;drugid++)
{
format(string,sizeof(string),"/Drogenpflanzen/%i.ini",drugid);
if(dini_Exists(string))
{
frak = dini_Int(string, "FraktionsID");
if(frak == SpielerInfo[playerid][FrakID])
{
format(dialog, sizeof(dialog), "%sPflanze %d\n", dialog, drugid);
}
}
}
if(strlen(dialog)) ShowPlayerDialog(playerid, DIALOG_PFLANZEN, DIALOG_STYLE_LIST, "Pflanzen", dialog, "Ok", "Abbrechen");
else SendClientMessage(playerid, 0xFF0000FF, "Error: Keine Pflanzen in der Fraktion.");
return 1;
}
Dann hättest du eine Liste mit allen Pflanzen der Fraktion des Spielers. Die Bezeichnungen der Variablen etc musst du natürlich anpassen.
Schau dir dieses System an, das sollte vom Grundgerüst her dem entsprechen, was du haben willst, davon kannst du abschauen, oder den Code verwenden.
http://forum.sa-mp.com/showthread.php?t=169469
Bei Where ID = %d haben die Apostrophe gefehlt.
Sie braucht man bei Integers nicht zwangsläufig ![]()
Zum Problem:
Bist du dir sicher, dass du eine Verbindung mit der Datenbank hast? Wird das Geld zum Beispiel gespeichert?
Und aktualisierst du die Ansicht der Tabelle, nachdem der Spieler gespeichert wird?
Möglicherweise ist da der Lag schuld.
Versuche es so:
COMMAND:setskin(playerid, params[])
{
new cID, sID, String[128], TargetName[MAX_PLAYER_NAME];
if(!IsAdmin(playerid,2)) return SendClientMessage(playerid, COLOR_RED, "Du besitzt nicht die benötigten Rechte!");
if(sscanf(params, "ui", cID, sID)) return SendClientMessage(playerid, COLOR_YELLOW, "Verwendung: /setskin [Spieler-ID] [Skin-ID]");
GetPlayerName(cID, TargetName, sizeof(TargetName));
if(cID == INVALID_PLAYER_ID) return SendClientMessage(playerid, COLOR_RED, "Der Spieler ist nicht Online!");
SetPlayerSkin(cID, sID);
SpielerInfo[cID][pSkin] = sID;
format(String, sizeof(String), "%s %s (ID: %d) hat deinen Skin zu %i gesetzt.", AdminRanks(playerid), GetName(playerid), playerid, sID);
SendClientMessage(cID, COLOR_YELLOW, String);
format(String, sizeof(String), "Du hast %s (ID: %d) seinen Skin zur ID: %i geändert.", TargetName, cID, sID);
SendClientMessage(playerid, COLOR_YELLOW, String);
OnAccountSave(cID);
return 1;
}
forward OnAccountSave(playerid);
public OnAccountSave(playerid)
{
new Query[380];
mysql_format(Handle, Query, sizeof(Query), "UPDATE `spieler` SET `IP`='%s', `Admin`='%d', `VIP`='%d', `Kills`='%d', `Deaths`='%d', `Level`='%d', `Money`='%d', `Tutorial`='%d', `Skin`='%i' WHERE `ID`=%d",\
IP[playerid], SpielerInfo[playerid][pAdmin], SpielerInfo[playerid][pVIP], SpielerInfo[playerid][pKills], SpielerInfo[playerid][pDeaths], GetPlayerScore(playerid), SpielerInfo[playerid][pMoney],
SpielerInfo[playerid][pTutorialFinished], SpielerInfo[playerid][pSkin], SpielerInfo[playerid][pID]);
mysql_tquery(Handle, Query, "", "");
return 1;
}