ocmd:delbug(playerid,params[])
{
if(!isAdmin(playerid,8)) return SendClientMessage(playerid,RED,"Bugs können nur vom Scripter gelöscht werden!");
new bug;
if(sscanf(params,"i",bug)) return SendClientMessage(playerid,RED,"Verwendung: /delbug [Bugnummer 0-9]");
if(bug < 0 || bug >= MAX_BUGS) return SendClientMessage(playerid,RED,"Der Bug existiert nicht.");
if(strlen(gBugs[bug]) >= 10)
{
gBugs[bug] = "";
SendClientMessage(playerid,RED,"Du hast einen Bug erfolgreich gelöscht.");
}
else SendClientMessage(playerid,RED,"Der Bug existiert nicht.");
return 1;
}
Beiträge von Jeffry
-
-
Wenn du den Server verlässt bist du doch schlussfolgernd auch nicht mehr online, sprich in der Datenbank steht 0, was richtig wäre. Oder?
Um den Wert beim Online kommen auch auf 1 zu setzen, musst du die Variable auf 1 setzen, nachdem du dich eingeloggt hast, und dann direkt SavePlayer aufrufen. Dann geht es. -
ocmd:makeadmin(playerid, params[])
{
new query[128], string[128], rank, pID, name[MAX_PLAYER_NAME];
if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,ROT,"Du brauchst das Rcon Passwort.");
if(sscanf(params,"ui",pID,rank))return SendClientMessage(playerid,-1,"Tippe: /makeadmin [spieler] [level]");
if(rank<0||rank>7)return SendClientMessage(playerid,ROT,"Ungültig.");
GetPlayerName(pID, name, MAX_PLAYER_NAME);
format(string, sizeof(string),"Du hast Adminlevel erhalten. Checke /stats");
SendClientMessage(pID,ROT,string);
format(query, sizeof(query), "UPDATE accounts SET adminlevel = '%d' WHERE name = '%s'",name);
mysql_tquery(mysqlHandle, query, "", "");
return 1;
}"name" nach "WHERE" eben dazu ändern, wie die Spalte heißt, in der der Name des Spielers steht.
Zwecks des zweiten Befehls: Was willst du überhaupt machen?
-
Ist
GetPVarInt(playerid,"Eingeloggt")
aus 1 gesetzt worden?Wo rufst du SavePlayer(playerid) auf, unter welchem Callback?
-
Wie kann ich was in MYSQL in die Datenbank setzen?
Dem obigen Post nach nutzt du eins der neueren Plugins, nutze deshalb:
http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_tqueryBeispiel:
new query[128];
format(query, sizeof(query), "UPDATE tabelle SET spalte = 'wert' WHERE spalte = 'suchwert'");
mysql_tquery(Handle, query, "", ""); -
SpielerInfo[playerid][pAdminlevel] = cache_get_field_content_int(0, "Adminlevel", mysqlHandle), SpielerInfo[playerid][pAdminlevel];
zu:
SpielerInfo[playerid][pAdminlevel] = cache_get_field_content_int(0, "Adminlevel", mysqlHandle); -
Wie in PN abgesprochen, hier der Beispielcode, von dem, was du bis jetzt vorgeschlagen hast:
Oben unter die Includes:
#define MAX_BUGS 10
#define MAX_BUG_LEN 64new gBugs[MAX_BUGS][MAX_BUG_LEN]; //gBugs = >g<lobale Variable >Bugs<
new gBugCount;OnDialogResponse:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
//Bug melden
if(dialogid == DIALOG_BUG_MELDEN)
{
if(strlen(inputtext) >= 10)
{
for(new i=0; i<MAX_BUGS; i++)
{
if(strlen(Bugs[i]) < 10)
{
format(Bugs[i], MAX_BUG_LEN, inputtext);
SendClientMessage(playerid, 0xFFFFFFFF, "Bug gemeldet. Danke!");
gBugCount++; //Ein Bug mehr
return 1; //Es wird beendet, Bug ist eingetragen
}
}
SendClientMessage(playerid, 0xFF0000FF, "ERROR: Es ist leider kein Platz für einen Bug mehr frei!.");
}
else
{
SendClientMessage(playerid,RED,"ERROR: Bugmeldung war nicht erfolgreich -> bitte verwende mindestens 10 Zeichen!");
ShowPlayerDialog(playerid, DIALOG_BUG_MELDEN, DIALOG_STYLE_INPUT, "Bug melden","Bitte gebe eine genaue Beschreibung des Bugs an!", "Senden", "Abbrechen");
}
return 1;
}
return 0;
}Und das ist der Befehl:
ocmd:showbugs(playerid,params[])
{
if(!isAdmin(playerid,2)) return SendClientMessage(playerid,RED,"Nur Admins können gemeldete Bugs sehen!");
if(gBugCount <= 0) return SendClientMessage(playerid,RED,"Es gibt keine gemeldeten Bugs.");
new string[MAX_BUGS*(MAX_BUG_LEN+20)];
for(new i=0; i<MAX_BUGS; i++)
{
if(strlen(Bugs[i]) < 10)
{
format(string, sizeof(string), "%sBug %d: %s\n", string, i, Bug[i]);
}
}
ShowPlayerDialog(playerid,DIALOG_SHOW_BUGS,DIALOG_STYLE_MSGBOX,"Bug Übersicht",string,"OK","");
return 1;
}Ich habe versucht weitgehend das Prinzip das du angefangen hast beizubehalten.
Bis in drei Wochen dann, gute Fahrt und schönen Urlaub! -
#define MODE_NAME "MeinGamemode"
Vor die Include.Es kann bei Includes, vor allem bei so komplexen, immer wi der zu Fehlern kommen, wenn du zum Beispiel Variablen verwendest, die in der Include ebenfalls verwendet werden.
-
Ach ja, da habe ich nicht drauf geachtet.
ocmd:oban(playerid,params[])
{
new Spieler[128],grund[128],name[MAX_PLAYER_NAME];
if(!isPlayerRang(playerid,4)) return SendClientMessage(playerid,Dunkelrot,"Du besitzt nicht die benötigten Rechte!");
if(sscanf(params,"ss",name,grund)) return SendClientMessage(playerid,Grau,"Verwendung: /Oban [Spielername] [Grund]");
format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",name);
if(!dini_Exists(Spieler)) return SendClientMessage(playerid, Dunkelrot, "Es existiert kein Spieler mit diesem Namen in der Datenbank.");
dini_IntSet(Spieler,"Banned",1);
new string2[128];
format(string2,sizeof(string2),"[OFFLINEBANNED] %s wurde von %s offline gebannt. Grund: %s",name,getPlayerName(playerid),grund);
SendClientMessageToAll(Rot,string2);
return 1;
}Dann passt es.
-
Bist du sicher, dass der Fehler nur daran liegt und nicht durch etwas drüber verursacht wird? Für mich sieht der Code nämlich korrekt aus. Du kannst ja mal versuchen das "file" zu "pFile" umzubenennen (vielleicht hast du es zuvor irgendwo anders deklariert), aber ich denke nicht, dass das was bringt.
Wenn du den Befehl auskommentierst, ist der Fehler dann weg?
Hast du das y_ini Include mal aktualisiert? -
ocmd:oban(playerid,params[])
{
new Spieler[128],grund[128];
if(!isPlayerRang(playerid,4)) return SendClientMessage(playerid,Dunkelrot,"Du besitzt nicht die benötigten Rechte!");
if(sscanf(params,"ss",Spieler,grund)) return SendClientMessage(playerid,Grau,"Verwendung: /Oban [Spielername] [Grund]");
format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Spieler);
if(!dini_Exists(Spieler)) return SendClientMessage(playerid, Dunkelrot, "Es existiert kein Spieler mit diesem Namen in der Datenbank.");
dini_IntSet(Spieler,"Banned",1);
new string2[128];
format(string2,sizeof(string2),"[OFFLINEBANNED] %s wurde von %s offline gebannt. Grund: %s",Spieler,getPlayerName(playerid),grund);
SendClientMessageToAll(Rot,string2);
return 1;
}
Falls du das sscanf Plugin verwendest, musst du "ss" zu "s[128]s[128]" machen. -
Wenn du diese als PlayerTextDraws erstellst, also so:
http://wiki.sa-mp.com/wiki/CreatePlayerTextDrawMusst du es hiermit anzeigen:
http://wiki.sa-mp.com/wiki/PlayerTextDrawShow -
Möglicherweise startest du den Timer dann in einem zu kurzen Wiederholungszeitraum.
Wie startest du den denn, poste den Code mal. Und dazu auch gleich dein OnPlayerUpdate. Falls sich da nichts findet, können wir es gleich mal debuggen. -
OnPlayerUpdate wird auch ca. 10x pro Sekunde aufgerufen wenn man nur steht, ohne sich zu bewegen.
Dein Code sollte also so passen. -
Nutzt du das Plugin oder die Funktion (stock)?
Was genau funktioniert denn nicht? -
Du kannst die Leben hiermit wieder hochsetzen, somit sieht es aus, als dass du keine Leben verlierst:
http://wiki.sa-mp.com/wiki/OnPlayerTakeDamage -
-
Du hast "File" geschrieben, aber "file" deklariert.
ocmd:oban(playerid,params[])
{
new string[124],Spielerdatei[64];
new name[MAX_PLAYER_NAME];
if(sscanf(params,"s",name))return SendClientMessage(playerid,Rot,"/oban [Spielername]");
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
if(fexist(Spielerdatei))
{
new INI:file = INI_Open(Spielerdatei);
INI_WriteInt(file,"Banned",1);
INI_Close(file);
format(string,sizeof(string),"You have banned %s.",name);
SendClientMessage(playerid,-1,string);
return 1;
}
else SendClientMessage(playerid,-1,"Der Account wurde nicht gefunden!");
return 1;
} -
Objekte die attached sind können nicht solide sein, da man sonst im Objekt stecken würde.
-
Mit zwei Schleifen:
new Float:posX, Float:posY, Float: z;
GetPlayerPos(playerid, posX, posY, z);
for(new x = 0; x < 500; x += 10)
{
for(new y = 0; y < 500; y += 10)
{
CreateObject(id, posX+x, posY+y, z+50, ...);
}
}Wenn du es in dem Mitte haben willst, musst du eben von -250 bis 250 gehen (oder andere Zahlen, wie du willst).