Bekommst du im MySQL Log irgendwelche Meldungen ausgegeben, wenn du dich mit deinem User bzw. dem root Benutzer einloggen willst?
Beiträge von Jeffry
-
-
Muss ich nach dem mysql_pquery(db,q) break; benutzen?
Ja, aber das passt so trotzdem noch nicht.
Was genau soll der Befehl denn machen, und wann soll er benutzt werden?
-
Ja habe ich soeben getan, leider hat es nix gebracht.
Das muss gehen.
Hast du denn die .dll Dateien aus dem Ordner "DLL FILES" (msvc...) in deinen Server-Ordner verschoben, direkt dort wo die samp-server.exe liegt? -
Eben mal das andere Deinstalliert, den Installer ausgeführt... Leider geht es immer noch nicht. Genau das Gleiche Problem.
Hast du mal alle deinstalliert und nur das eine benötigte installiert?
An sscanf kann es eigentlich nicht liegen.
Habe es gerade mal bei mir probiert.
Das Plugin lädt einwandfrei.Falls es weiterhin nicht bei dir geht, poste bitte einen Screenshot mit der Liste aller bei dir installierten Visual C++ Pakete.
-
Die Erklärungen habe ich im Code als Kommentar beigefügt.
ocmd:setadmin(playerid,params[])
{
new number,level;
if(sscanf(params,"dd", number, level)) return GameTextForPlayer(playerid,"~g~/setadmin ~w~[AccountID] [Level]",2500,1);
if(level <0 || level>=10) return GameTextForPlayer(playerid,"~g~/setadmin ~w~ [AccountID] [Level]",2500,1); //Hier war ein ~ zu viel = Crash
new query[256];
mysql_format(handle, query, sizeof(query), "SELECT Name FROM user WHERE id = '%d'", number); //Du gibst die ID ein, dann nutze diese auch für die Abfrage
mysql_pquery(handle, query, "SetAdminLevelForPlayer", "ddd", playerid, level, number);
return 1;
}forward SetAdminLevelForPlayer(playerid, level, number);
public SetAdminLevelForPlayer(playerid, level, number)
{
new rows, string[145], name[MAX_PLAYER_NAME];
cache_get_row_count(rows);
if(rows == 0) return SendClientMessage(playerid,-1,"AccountID not found");
else
{
cache_get_value_name(0, "Name", name); //Wir lesen noch den Name aus.
format(string, sizeof(string), "ADMIN: %s has setted the Admin Level of %s <%d> to %d ", GetName(playerid),name,number,level);
ABroadCast(0xFFFFA333,string);
mysql_format(handle, string, sizeof(string), "UPDATE user SET Adminlevel = '%d' WHERE id = '%d'", level,number); //Auch hier, die eingegebene ID nutzen
mysql_pquery(handle, string);
return 1;
}
} -
Jep. Nur leider versteh ich nicht ganz wie damit das ganze Deaktiviert werden soll. Ich hab ja keine Teams ^^. Ich möchte ja auch einfach nur auf den Skin setzen, der in der Datenbank ist. Hab den auch schon ausgelesen und in PlayerInfo[playerid][pSkin] gespeichert.
Spielt keine Rolle, dann setzt du Team auf "playerid" und den Skin auf 0. Diesen setzt du ja direkt nach dem Login bzw. zum Spawn bei OnPlayerSpawn.
Dann kannst du die beiden Befehle wie beschrieben einbauen, das klappt dann.Ich gebe dir mal meine Serverlog:
Ok.
Das hier hast du versucht zu installieren?
https://www.microsoft.com/en-u…load/details.aspx?id=5555Das musst du nämlich installieren, ohne das geht es nicht. Wenn dir Fehler bei der Installation ausgegeben werden, musst du diese beheben. Wenn er dir sagt, dass du neuere Versionen hast, dann versuche diese zu deinstallieren, und später wieder zu installieren (vorher versuchen ob der Editor geht).
-
Richtig das die cache_insert_id(); die ID speichert damit der richtige Spieler auch die richtigen Autos bekommt?
Das ist, damit du die P_ID aus der Tabelle, die der neue Datensatz hat, zurück bekommst, damit du das Fahrzeug später sauber speichern kannst.
Sonst weißt du ja nicht, wo du es hin speichern sollst.ich weiß das ich normale inticher genommen habe und keine tiny oder ähnliche. Dazu habe ich auch nicht an die Länge gedacht, hab sie sehr sehr grob eingestellt.
Spielt kaum eine Rolle bei der Datenmenge.
Die Tabelle sieht so aus
Dort fehlt noch die Zuordnung zu dem das Fahrzeug gehört.
Wenn du eine "user" Tabelle hast, dann bietet es sich an, dass du die ID des Spielers in dieser Fahrzeug-Tabelle als "Besitzer-ID" einträgst.
Dann kannst du im Code beim Erstellen sagen:
PCar[playerid][d][P_BID] = PlayerInfo[playerid][db_id; //db_id eben so, wie die ID im PlayerInfo-enum heißt -
Zum Thema All-In-One-Runtimes... Hab nun mal alles Installieren lassen. Leider kein Erfolg. Plugin lädt trotzdem nicht. Somit kann der die Funktionen nicht finden und spuckt halt nen (Siehe unten) ... aus
Welches Plugin hast du denn genau und wird dir beim Laden des Plugins ein Fehler (weiter oben) ausgegeben?
weil die Webseite bei mir down ist...
Geht wieder.
-
meine primäre Frage... Wie bekomme ich die Standart Funktion mit dem "Spawn" Button und den "Pfeil" Buttons deaktiviert? Die werden noch Angezeigt.
Bei OnPlayerRequestClass:
Zuerst: http://wiki.sa-mp.com/wiki/SetSpawnInfo
Dann:TogglePlayerSpectating(playerid, true);Um den Spieler spawnen zu lassen genügt folgendes anschließend (z.B. bei OnDialogResponse):
TogglePlayerSpectating(playerid, false);Habt ihr da eine Idee oder eine Alternative ?
Hast du es mal hiermit versucht? http://www.chip.de/downloads/A…ne-Runtimes_37449838.html
-
mysql_pquery(db,query);
Du musst hier noch ein Callback aufrufen und im Callback cache_insert_id() aufrufen.
Sonst weißt du ja nicht, welche ID vergeben wurde, für das Fahrzeug. Diese benötigst du beim Speichern.
PCar[playerid][d][P_ID] = cache_insert_id();So sieht es ja bei der user-Tabelle aus, wie mach ich das, dass er die Sachen von der Tabelle; Personalcars rausnimmt,
Kommt drauf an wie deine Tabelle aussieht, in der die Fahrzeuge gespeichert sind.
-
Suche eine Drink Animation
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE);SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK);
Oder die Animationen unter VENDING:
VEND_Drink2_P
VEND_Drink_P
https://wiki.sa-mp.com/wiki/Animations -
Ging das nicht mal, dass man eine Tabelle in phpmyadmin zu einem SQL Query exportiert?
-
Die Warnung kommt von der falschen Einrückung des Codes.
Nach dem mysql_format musst du das Query auch absenden, mit mysql_pquery. Gleich wie überall sonst auch.
Im mysql_format darfst du für die floats nicht %e nutzen, das geht nur für Strings. Nutze %f.
-
Spieler[playerid][pFestgeld]+NeuesFestgeld
Zu
Spieler[playerid][pFestgeld]+floatround(NeuesFestgeld) -
Danke dir Jeffry, so klappts, jetzt sinds 4315 minuten mit 3 tagen bann
Gerne!
Noch als Tipp, du kannst es auch so schreiben:
new tage = timebanned / 86400;
timebanned -= tage * 86400;
new stunden = timebanned / 3600;
timebanned -= stunden * 3600;
new minuten = timebanned / 60;
timebanned -= minuten * 60;
new sekunden = timebanned;
new str[128];
if(tage > 0) format(str,sizeof(str),"Du bist noch %i Tage, %i Stunden, %i Minuten und %i Sekunden gebannt!",tage,stunden,minuten,sekunden);
else if(stunden > 0) format(str,sizeof(str),"Du bist noch %i Stunden, %i Minuten und %i Sekunden gebannt!",stunden,minuten,sekunden);
else if(minuten > 0) format(str,sizeof(str),"Du bist noch %i Minuten und %i Sekunden gebannt!",minuten,sekunden);
else format(str,sizeof(str),"Du bist noch %i Sekunden gebannt!",sekunden); -
Davon bin ich ausgegangen. Du speicherst doch aber dort den Timestamp rein, bis wohin der Spieler gesperrt ist. 4 kann nicht sein. Das wäre 01.01.1970 00:00:04 Uhr.
Edit:
Sehe grade auch noch folgenden Fehler:
if(gettime() > bisgebannt)
Zu
if(gettime() < bisgebannt)Sprich, wenn in der DB 4 steht, bist du eigentlich entsperrt.
-
Der Wert "pBanDauer" liegt bei dem Spieler derzeit bei 4 (unverändert)
Das kann nicht richtig sein, dort muss ein Timestamp drin stehen. Du gibst den Werte ja in Tagen an, rechnest ihn dann *60*60*24 plus den aktuellen Timestamp. 4 kann damit nicht richtig sein.
Am besten du setzt das nochmal zurück und bannst den Spieler nochmal. -
Also man kann dann anhand des arrays eine bestimmte Spalte abfragen und dann ggf. vergleichen mit einem Wert.
Nutze dazu die Funktionen
http://wiki.sa-mp.com/wiki/MySQL/R40#cache_get_value_name
http://wiki.sa-mp.com/wiki/MyS…cache_get_value_name_int_
http://wiki.sa-mp.com/wiki/MyS…ache_get_value_name_floatBeispiel:
mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e'", SpielerName(playerid));
mysql_pquery(handle, query, "OnUserCheckResult", "d", playerid);Und dann:
forward OnUserCheckResult(playerid);
public OnUserCheckResult(playerid)
{
new wert[32], rows;
cache_get_row_count(rows);
if(rows)
{
//wert = Name der Spalte aus der Datenbank, die du auslesen willst.
cache_get_value_name(0, "wert", wert);
}
return 1;
} -
Du rechnest es auch falschrum.
Nein, das ist schon richtig rum.
Der Fehler liegt hier:
new bisgebannt = cache_get_value_name_int(0, "pBanDauer", PlayerInfo[playerid][pBanDauer]);
if(PlayerInfo[playerid][pBanDauer]>=1)
zu:
new bisgebannt;
cache_get_value_name_int(0, "pBanDauer", bisgebannt);
PlayerInfo[playerid][pBanDauer] = bisgebannt;
if(PlayerInfo[playerid][pBanDauer]>=1)und
new minuten = timebanned / 86400;
zu:
new minuten = timebanned / 60; -
Warum schreibt man für die Verbindungsversuche "_:handle" ... reicht nicht einfach nur "handle" ?
Weil handle den Tag "MySQL" hat, welcher nicht korrekt interpretiert wird, wenn er im Print ausgegeben wird (Warnung Tag Mismatch), daher wird mit "_:" der Tag sozusagen entfernt und der Wert als reiner Integer interpretiert, somit gibt es keine Warnung.