Ist pBanGrund und pBanAdmin aus einem enum? Wenn ja, wie sieht das enum und das Array dazu aus?
Beiträge von Jeffry
-
-
Ok, kein Problem.
Ich habe es dir hier in den Kommentaren jeweils kurz erklärt.
Versuche es dann so:
CMD:takegift(playerid)
{
//Variablen:
new pname[MAX_PLAYER_NAME], path[64];
//Spielername abfragen:
GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
//Pfad einlesen: (Ordner heißt GiftsGenommen)
format(path, sizeof(path), "/GiftsGenommen/%s.ini", pname);
//Prüfen ob Datei existiert, wenn nicht, erstellen.
if(!fexist(path)) dini_Create(path);
//Abfrage direkt aus der Datei:
if(dini_Int(path, "canPickAgain") > gettime()) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du kannst nur alle 60 Sekunden ein Geschenk aufnehmen.");
for(new i = 0; i < MaxGifts; i++)
{
if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
if(GiftBox[i][e_oID] == -1) continue;
if(IsPlayerInRangeOfPoint(playerid, 2.0, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]))
{
RandomGift(playerid);
DestroyDynamicObject(GiftBox[i][e_oID]);
DestroyDynamic3DTextLabel (GiftBox[i][e_label] );
PlayerPlaySound(playerid,4202, 0.0, 0.0, 0.0);
SetTimerEx("CreateGiftAgain", 30000, false, "d", i);
GiftBox[i][e_oID] = -1;
//Neuen Wert direkt in die Datei schreiben.
dini_IntSet(path, "canPickAgain", gettime() + 60); //60 Sekunden zu warten
return 1;
}
}
return 1;
} -
Poste bitte die Fehler die du bekommst, und wie du FORUMNAME definiert hast.
-
Die Zeile ist zu lang.
Mache es so:
new Banstring[512];
format(Banstring, sizeof(Banstring), "Ihr Spieler-Account wurde gesperrt!\n\nAufgrund eines Regelverstoßes wurde ihr Spieleraccount gesperrt!\nSollte dies ein Fehlban sein,");
format(Banstring, sizeof(Banstring), "%s schreiben Sie ein Entbannantrag im Forum "FORUMNAME"\nDie Daten des Bannes\nDauer: Immer\nGrund: %s\nVon: %s",Banstring,pBanGrund,pBanAdmin);
ShowPlayerDialog(playerid,DIALOG_BANG,DIALOG_STYLE_MSGBOX,"Sie wurden Gesperrt",Banstring,"EXIT",""); -
Das musst du dann so machen:
ocmd:spielerinfo(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
{
if(!strlen(params)) return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");
new str[145], query[128];
mysql_real_escape_string(params, str);
format(query,sizeof(query),"SELECT Baned FROM accounts WHERE Name='%s' LIMIT 1",str);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() == 0)
{
format(str, sizeof(str), "Spieler %s ist bei uns nicht registriert.", str);
SendClientMessage(playerid, 0xFFFFFFFF, str);
}
else if(mysql_fetch_int() == 1)
{
format(str, sizeof(str), "Spieler %s ist gebannt.", str);
SendClientMessage(playerid, 0xFFFFFFFF, str);
}
else
{
format(str, sizeof(str), "Spieler %s ist nicht gebannt.", str);
SendClientMessage(playerid, 0xFFFFFFFF, str);
}
mysql_free_result();
}
return 1;
}Zwecks der Nachricht: Die sollte nur kommen, wenn du keinen Namen eingibst.
-
Super!

Direkt als Boden kenne ich da keines mehr, ich denke auch nicht, dass es da noch welche gibt, denn die Böden sind ja eher größere Flächen.
Du kannst mal die 3095 probieren, und gegebenenfalls texturieren.
Ansonsten vielleicht ein Garagentor oder sowas, und das entsprechend texturieren. -
Der Compiler meckert dabei nicht rum? Das ist ja interessant, PAWN erscheint mir jedes mal kurioser
Nö, das stört ihn nicht. Man kann auch 5 Klammern auf machen, wenn man sie entsprechend wieder zu macht, das stört ihn gar nicht. Ob das dann noch lesbar ist ist natürlich eine andere Sache. Aber vor allem bei sscanf sehe ich es oft, dass die Leute das so schreiben, weil sie das Prinzip dann einfacher verstehen.
Zwecks dem SCM: Das sollte er eigentlich definiert haben, in seinem anderen Befehl hat er es ja auch drin und dort klappt es. Habe es ja nur von dort kopiert.
-
dann kommt eine Error meldung das der Befelh nicht existiert
Welche der beiden Meldungen kommt? Oder kommen beide Meldungen?
Versuche es mal so:
ocmd:spielerinfo(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
{
if(!strlen(params)) return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");
new str[145], query[128];
mysql_real_escape_string(params, str);
format(query,sizeof(query),"SELECT Baned FROM accounts WHERE Name='%s' AND Baned = '1'",str);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() > 0)
{
format(str, sizeof(str), "Spieler %s ist gebannt.", str);
SendClientMessage(playerid, 0xFFFFFFFF, str);
}
else
{
format(str, sizeof(str), "Spieler %s ist nicht gebannt.", str);
SendClientMessage(playerid, 0xFFFFFFFF, str);
}
mysql_free_result();
}
return 1;
}Die geschweifte Klammer von Zeile 4 (und zugehörige schließende Klammer) sind zu viel, da dass if etwas returned braucht die Klausel keine Klammern.
Viele schreiben das aus Gewohnheit so, man braucht es nicht, aber es schadet auch nicht.

Ich habe es einfach so übernommen, wie er es in seinem anderen Befehl hat, damit er sich nicht umgewöhnen muss. -
Versuche diese ID: 12814
-
Das weiß ich nicht, aber selbst wenn es einen gibt, dann kann ich dir nicht sagen ob der funktioniert.
Von meinem kann ich sagen, dass der auf jeden Fall funktioniert, da ich ihn selbst über Jahre auf meinem eigenen Server benutzt habe.http://pastebin.com/qz56UCRe
Das wäre der Filterscript aus oben verlinktem Thread. Den kannst du nutzen. -
Was geht denn nicht? Was passiert, bzw. was passiert nicht?
Was steht im MySQL Log, wenn du den Befehl ausführst? -
Ist das ein heruntergeladenes System oder hast du das selbst angefangen zu schreiben ?
Das sieht selbstgeschrieben aus. Wenn du darauf hinaus willst, ob es fertige Systeme gibt, dann kann ich dich an meine Veröffentlichung im englischen Forum verweisen:
[FS/INC] WeaponDrop v1.1 -
Ja, dann so:
ocmd:spielerinfo(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
{
if(!strlen(params))return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");
new str[145], query[128];
mysql_real_escape_string(params, params);
format(query,sizeof(query),"SELECT Baned FROM accounts WHERE Name='%s' AND Baned = '1'",params);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() > 0)
{
format(str, sizeof(str), "Spieler %s ist gebannt.", params);
SendClientMessage(playerid, 0xFFFFFFFF, str);
}
else
{
format(str, sizeof(str), "Spieler %s ist nicht gebannt.", params);
SendClientMessage(playerid, 0xFFFFFFFF, str);
}
mysql_free_result();
}
return 1;
} -
Bei den kleinen Abfragen spielt es so gut wie keine Rolle, sofern du bei den Textdateien für jeden Spieler eine eigene Datei erstellst.
Eine SQLite Datenbank wäre etwas übersichtlicher im Ordner (nur eine Datei), aber dafür komplizierter zu verwenden im Code, als zum Beispiel dini.Für Dateien musst du erst ein Verzeichnis erstellen, genau.
Dann kannst du ja mal versuchen, ob du selbst mit dini klar kommst, falls du das nutzt. Alle entsprechenden Änderungen müssten dort nur in dem Befehl gemacht werden.
Wenn du nicht weiter kommst, dann poste was du bis dahin hast. -
Dann müsstest du es in Dateien abspeichern, sprich Textdateien oder einer SQLite Datenbankbank.
Jeweils natürlich nur, wenn es nach dem Logout -> Login auch wieder überprüft werden soll. -
Den Befehl musst du so schreiben, sonst geht es nicht:
ocmd:ban(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
{
new pID, reason[128],string[128], query[144];
if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/Ban [ID] [Grund]");
if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_RED,"Diese Spieler ist nicht online");
if(IsPlayerNPC(pID))return SendClientMessage(playerid,COLOR_RED,"Du kannst keinen Bot Bannen !");
format(string,sizeof(string),"[BANNED]: %s wurde von %s gebannt. Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
SendClientMessageToAll(0x9B0000FF,string);
format(string,sizeof(string),"~r~Du wurdest gebannt !~n~Grund: %s",reason);
GameTextForPlayer(pID, string, 30000, 4);
TogglePlayerControllable(pID,0);
GetPlayerName(pID, string, MAX_PLAYER_NAME); //Hinzugefügt
format(query,sizeof(query),"UPDATE accounts SET Baned=1 WHERE Name='%s'",string);
mysql_query(query);
}
return 1;
}Dann kann die Abfrage so ein:
ocmd:spielerinfo(playerid,params[])
{
if(!isPlayerAnAdmin(playerid,2))return SCM(playerid,TESTFARBE,"Du hast nicht die benötigten Rechte!");
{
if(!strlen(params))return SendClientMessage(playerid,ROT,"{FFD200}Benutze:{FEFEFE}/spielerinfo [Name]");
mysql_real_escape_string(params, params);
format(query,sizeof(query),"SELECT Baned FROM accounts WHERE Name='%s' AND Baned = '1'",params);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() > 0)
{
SendClientMessage(playerid, 0xFFFFFFFF, "Spieler ist gebannt.");
}
else
{
SendClientMessage(playerid, 0xFFFFFFFF, "Spieler ist nicht gebannt.");
}
mysql_free_result();
}
return 1;
}EDIT:
@xXBastianXx
Bitte aktualisiere den spielerinfo Befehl, falls du ihn schon abgeschrieben hast, ich hatte im Query die Banned Abfrage vergessen. -
CMD:takegift(playerid)
{
if(SpielerInfo[playerid][canPickAgain] > gettime()) return SendClientMessage(playerid, 0xFF0000FF, "Error: Du kannst nur alle 60 Sekunden ein Geschenk aufnehmen.");
for(new i = 0; i < MaxGifts; i++)
{
if(GiftBox[i][e_x] == 0.0 && GiftBox[i][e_y] == 0.0 && GiftBox[i][e_z] == 0.0) continue;
if(GiftBox[i][e_oID] == -1) continue;
if(IsPlayerInRangeOfPoint(playerid, 2.0, GiftBox[i][e_x], GiftBox[i][e_y], GiftBox[i][e_z]))
{
RandomGift(playerid);
DestroyDynamicObject(GiftBox[i][e_oID]);
DestroyDynamic3DTextLabel (GiftBox[i][e_label] );
PlayerPlaySound(playerid,4202, 0.0, 0.0, 0.0);
SetTimerEx("CreateGiftAgain", 30000, false, "d", i);
GiftBox[i][e_oID] = -1;
SpielerInfo[playerid][canPickAgain] = gettime() + 60; //60 Sekunden zu warten
return 1;
}
}
return 1;
}Das SpielerInfo[playerid][canPickAgain] musst du so umbenennen wie das Stats-System bei dir heißt, und canPickAgain muss ins enum eingefügt werden.
Dann kannst du das SpielerInfo[playerid][canPickAgain] zum Laden und Speichern der Spieler-Statistiken (wie Geld oder so) hinzufügen. -
Poste bitte den Code, mit dem du den Spieler bannst.
-
Ohne das Semikolon am Ende, und playerid mit %0 ersetzt:
#define GMSG(%0) SendClientMessage(%0,WHITE,"{FF0000}Merry Christmas {00FFFF}- LSGW Staff ^_^ ")
Denn das hast du ja nach GMSG schon. -
Das kommt drauf an wie du den Spieler gebannt hast und welches System du nutzt.
Am besten du machst einen neuen Thread auf und postest dort die relevanten Daten.