Ok.
Splitte die IP so:
new zahl[4];
sscanf(ip, "p<.>iiii", zahl[0], zahl[1], zahl[2], zahl[3]);
Dann hast du dort die einzelnen Zahlen drin stehen und kannst die vergleichen.
Bei vielen ändern sich übrigens die hinteren beiden Ranges der IP.
Ok.
Splitte die IP so:
new zahl[4];
sscanf(ip, "p<.>iiii", zahl[0], zahl[1], zahl[2], zahl[3]);
Dann hast du dort die einzelnen Zahlen drin stehen und kannst die vergleichen.
Bei vielen ändern sich übrigens die hinteren beiden Ranges der IP.
wie würde man dies in R39 auslesen?
Je nach dem wie genau es aussehen soll, eventuell so:
mysql_pquery(handle, "SELECT name, version FROM server WHERE id = 1;", "OnServer");
Und dann in einem extra Public:
forward OnServer();
public OnServer()
{
if(cache_get_row_count() == 0) return 1;
new strVersion[64], strGameMode[32];
cache_get_field_content(0, "name", strGameMode, handle);
cache_get_field_content(0, "version", strGameMode, handle);
format(strGameMode, sizeof(strGameMode), "%s %s", strGameMode, strVersion);
SetGameModeText(strGameMode);
format(strVersion, sizeof(strVersion), "hostname %s", strGameMode);
SendRconCommand(strVersion);
return 1;
}
Wäre das dann so?
Warum willst du die IP eigentlich splitten?
Nein, du kannst ein Query natürlich auch so schreiben, um alle Spalten auszulesen:
Die mysql_Get/Set... Funktionen waren schon in den alten Plugin Versionen das schlechteste an Performance, da die Datenbank viel zu oft unnötig angesprochen wird. Man kann das sich zwar basteln, aber das ist nicht zu empfehlen, da es am Sinn des Plugins vorbei geht. Dann kann man gleich bei der alten Version bleiben, einen Unterschied macht das dann kaum/keinen.
oder wäre das mit sscanf besser?
sscanf ist hier besser, das ist auf sowas optimiert.
gibt es eine mysql_GetString variante für R39?
Kann man zwar machen, ist aber aus Performancegründen nicht zu empfehlen, da man dann am Sinn des Plugins vorbei arbeitet. Nutze lieber die Cache-Funktionen in einem separaten Callback.
mysql_pquery(handle, "SELECT Kennzeichen FROM Autos WHERE id = 1;", "OnKennzeichen", "d", 1);
Und dann in einem extra Public:
forward OnKennzeichen(id);
public OnKennzeichen(id)
{
if(cache_get_row_count() == 0) return 1;
new str[50];
cache_get_field_content(0, "Kennzeichen", str, handle);
//Hier dann das Kennzeichen von id auf str setzen (id = 1 im Beispiel)
return 1;
}
Schalte mal den MySQL Debug Modus an und poste was im Log steht.
Es wird irgendwo sicher nochmal ein INSERT Query auf die "accounts" Tabelle angewendet.
Es dürfte nach dem Code eigentlich gar nichts in der Datenbank stehen, da das Query falsch ist.
Das INSERT Query muss so aussehen:
format(query, sizeof(query), "INSERT INTO accounts (Name, Passwort, Registrierungsdatum) VALUES ('%s', MD5('%s'), '%d.%d.%d')", SpielerName(playerid), passwort, day, month, year);
Siehe: Autos laden nicht
ocmd:carkey(playerid,params[])
{
new string[512], bool:found, model;
for(new s = 1; s <= 5; s++)
{
found = false;
for(new i = 0; i < sizeof(cInfo); i++)
{
if(cInfo[i][besitzer] == PlayerInfo[playerid][pMySQLID] && cInfo[i][slot] == s)
{
found = true;
model = cInfo[i][carmodel];
if(model >= 400 && model <= 611) format(string,sizeof(string),"%s{FF0000}%d) %s\n",string, s, getVehicleName(model));
else format(string,sizeof(string),"%s{00FF0}%d) -Schlüssel frei-\n",string, s);
break;
}
}
if(!found) format(string,sizeof(string),"%s{00FF0}%d) -Schlüssel frei-\n",string, s);
}
ShowPlayerDialog(playerid,DIALOG_CARKEY,DIALOG_STYLE_LIST,"Fahrzeuge",string,"Auswählen","Beenden");
return 1;
}
Was sagt der Server Log (prints) und der MySQL Log (Queries)?
Liegt es hierbei an "AUTO_INCREMENT"?
Nein, das ist korrekt so.
Woran könnte es liegen?
Wie sieht der Code aus?
Das kannst du auch ohne die Datenbank anzusprechen machen.
Versuche es so:
ocmd:carkey(playerid,params[])
{
new string[512], bool:found, model;
for(new s = 1; s <= 5; s++)
{
found = false;
for(new i = 0; i < sizeof(cInfo); i++)
{
if(cInfo[i][besitzer] == PlayerInfo[playerid][pMySQLID] && cInfo[i][slot] == s)
{
found = true;
model = cInfo[i][carmodel];
if(model >= 400 && model <= 611) format(string,sizeof(string),"%s{FF0000}%d) %s\n",string, s, getVehicleName(model));
else format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
break;
}
}
if(!found) format(string,sizeof(string),"%s{00FF00}%d) -Schlüssel frei-\n",string, s);
}
ShowPlayerDialog(playerid,DIALOG_CARKEY,DIALOG_STYLE_LIST,"Fahrzeuge",string,"Auswählen","Beenden");
return 1;
}
Genau, den Text eben mit SendClientMessage ausgeben, denke das ist aber klar.
Das kannst du mit dieser Funktion abfragen:
stock IsNumeric(string[])
{
for (new i = 0, j = strlen(string); i < j; i++)
{
if ((string[i] > '9' || string[i] < '0')) return 0;
}
return 1;
}
Das kannst du mit dieser Include machen:
http://forum.sa-mp.com/showthread.php?t=347605
Dann sollte es den Dialog auch anzeigen, wenn du dir das Admin Level entfernst, sodass die Nachricht im Chat nicht mehr kommt.
Wie hast du DIALOG_INFO definiert?
Du bist ein Admin.
Entferne dir das Admin Level.
Was?
Schau dir den Code im Tutorial an. Das ist ein format über mehrere Zeilen zusammengefügt.
Erst am Ende hast du ein mysql_tquery bzw. mysql_pquery. Versuche den Code von dir dazu abzuändern.
Nein, du musst in diesem Statement auch die Spalten angeben.
Du gibst alle deine Spalten mit ALTER TABLE an, da kannst du nicht abfragen, ob die Spalte/Tabelle bereits existiert.
habe gelesen das Copy & Paste, nix gut ist, und man das lieber nicht machen sollte?
Wie AirM4X schon sagte, das kannst du machen, wenn du selbst auch daran arbeitest und nicht nur über Copy & Paste arbeitest. Wenn man etwas ausprobieren will und einen Code gefunden hat, dann kann man den natürlich komplett nehmen und testen, man muss sich halt danach damit beschäftigen und die Einzelteile verstehen, sonst lernt man nichts dabei.
das hilft mir Sehr, nur ein Problem habe ich dennoch, ich kenne sowas wie C++,Java ect. was ist SAMP ?
http://www.compuphase.com/pawn/pawn.htm
pawn is a simple, typeless, 32-bit extension language with a C-like syntax.
C++ und Java sind objektorientiert, PAWN ist das nicht, daher ähnlich wie C.
und mir ist bewusst das es Sehr lange dauert, Arbeite somit an meine Größte schwäche wie ich finde, und das wäre Das zu machen wo man Kein Ergebnisse auf kurzer Strecke sieht.
Je nach dem was man macht, dauert es unterschiedlich lange um entsprechende Ergebnisse zu sehen. Wenn es mal länger dauert sollte dich das aber nicht abhalten, sondern eher anspornen, denn meistens ist die Freude danach noch größer, wenn es endlich klappt.
(lol, durfte erst in 5.xxx.xxx sec (mio) wieder hier wieder auf ein Thema Antworten?)
Das kommt, weil du keine zwei Posts hintereinander machen kannst.