Poste mir mal deine SQL Include das Plugin dazu.
Und den Abschnitt #include´s aus eurem Script VIA PN.
LG RFT
Poste mir mal deine SQL Include das Plugin dazu.
Und den Abschnitt #include´s aus eurem Script VIA PN.
LG RFT
Hat wer R6 a_mysql.inc und mysql.so für Debian ?
Alles anzeigen
stock SavePlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) //wir überprüfen ob der Spieler überhaupt noch Connected ist und ob er nicht ein NPC ist.
{
if(GetPVarInt(playerid,"Eingeloggt") == 1) //Und hier ob er noch eingeloggt ist.
{
//Nun speichern wir die Daten in der Datenbank.
mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
}
}
return 1;
}
Warum ?
Warum sendet man 5 MySQL Abfragen zum MySQL Server und wartet 5 MAL bis der MySQL Server die Abfragen verarbeitet und zurücksendet.
Was wird wohl um einiges besser sein ?
UPDATE `accounts` SET `Level` = '*ZAHL*' WHERE `Name` = '*NAME*'
UPDATE `accounts` SET `Geld` = '*ZAHL*' WHERE `Name` = '*NAME*'
UPDATE `accounts` SET `Kills` = '*ZAHL*' WHERE `Name` = '*NAME*'
UPDATE `accounts` SET `Tode` = '*ZAHL*' WHERE `Name` = '*NAME*'
UPDATE `accounts` SET `Health` = '*ZAHL*' WHERE `Name` = '*NAME*'
oder so alles auf einmal:
UPDATE `accounts` SET `Level`='*ZAHL*', `Geld`='*ZAHL*', `Kills`='*ZAHL*', `Tode`='*ZAHL*', `Health`='*ZAHL*' WHERE `Name` = '*NAME*'
Und hier das gleiche Problem:
stock LoadPlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//Wir fragen ab ob der angegebene Spieler auch Online ist, und kein NPC ist (nur zur sicherhheit)
{
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME); //Wir Speichern den Namen des Spielers in der Variable [i]SpielerInfo[playerid][pName][/i]
SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Level" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Geld" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Kills" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Tode" eingetragen ist und Speichern ihn in unserer Variable.
}
return 1;
}
Bei LoadPlayer wird das an mysql-Abfragen gesendet:
SELECT `Level` FROM `accounts` WHERE `Name` = '*NAME*'
SELECT `Geld` FROM `accounts` WHERE `Name` = '*NAME*'
SELECT `Kills` FROM `accounts` WHERE `Name` = '*NAME*'
SELECT `Tode` FROM `accounts` WHERE `Name` = '*NAME*'
4 mal mysql_store_result usw, obwohl es auf einmal auch geht:
So wie hier im Forum MySQL in SA-MP genutzt wird ist es sicher langsamer als jede andere Speichermethode und noch dazu ohne Threaded queries damit der Server anfängt zu hängen und alles zu ruckeln beginnt.
An und für sich klingt dein Tutorial nach vollziehbar, und wird sicherlich für den einen oder anderen Hilfreich sein.
Lediglich hast eine falsche Aussage bezüglich MySQL gemacht.
Zitat
Die Frage lässt sich ganz gut mit stichworten beantworten.
MySQL ist
- Schneller als die ganzen File Systems (dini, fini, SSI etc.)
- Übersichtlicher und leichter zu kontrollieren wenn etwas nicht stimmt
- Extern!
Diese Aussage ist nicht ganz richtig, denn alle Dateien die Lokal auf deinem Server sind, sind durch aus schneller lesbar als eine Extern Liegende Datei/Tabelle die erst abgerufen werden muss. Man sieht vllt nicht direkt den Unterschied, weil beides nur im Milli Sekunden Bereich liegt, und wir somit das ganze kaum bis garnicht mitkriegen. Allerdings besteht ja keine bzw sehr sehr geringe Latenz zwischen deiner Lokalen Datei und dem Server. Bei MySQL ist dass dann wieder anders.
Super Tut, aber bei mir will er nichts Speichern & Laden :>
Hoffe mir kann jemand helfen.
moin zusammen.
erstmal tolles tut 10/10
ich hab ein problem mit dem float. ich bin gerade dabei mein eigenes geld system zu schreiben und hänge fest.
habe mir das geld system von 8d angesehn und fand das ja auch schon gut aber
ich wollte ein eigenes mit float. hab schon einiges versucht aber nichts geht. in der datenbank und im
textdraw wird es schon richtig angezeit.
um mein problem verständlich zu machen nehme ich das von 8D als beispiel:
new euro,cent;
if(sscanf(inputtext,"p,dd",euro,cent))return SCM(playerid,Rot,"Achte darauf den Betag richtig einzugeben [Beispiel: 3,99]");
if(!EnoughCash(playerid,euro,cent))return SCM(playerid,Rot,"Du hast nicht genug Geld auf der Hand!");
GivePlayerCashBank(playerid,euro,cent);
GivePlayerCash(playerid,-euro,-cent);
jetzt hab ich das geld 2 interger gesplittet.
und zu meiner frage. wie setze ich das jetzt auf float um das ich anstatt euro und cent nur einen betrag mit 2 stellen nach dem punkt bekomme.
schonmal ein dickes danke voraus
mfg nicki85
//edit: rechtschreibung
Habe ein Fehler
Zeile (81) : error 001: expected token: ";", but found "public"
Hier ist es Zeile 6,und ich weiß nicht woran es liegt.
public OnPlayerDisconnect(playerid, reason)
SavePlayer(playerid)
public OnPlayerSpawn(playerid)
{
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
so
public OnPlayerDisconnect(playerid, reason)
{
SavePlayer(playerid);
return 1;
}
so sollte der public aussehen
Guten Morgen Chris^^
Danke,da war der kleine Fehler.
Aber wenn ich in die DB bei mir Geld --- 4000 eintrage ,habe ich IG kein Geld.
Ganz einfach gib mir mal den stock wo du den spieler laden lässt da muss nur was abgeändert werden
stock LoadPlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//Wir fragen ab ob der angegebene Spieler auch Online ist, und kein NPC ist (nur zur sicherhheit)
{
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME); //Wir Speichern den Namen des Spielers in der Variable [i]SpielerInfo[playerid][pName][/i]
SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Level" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Geld" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Kills" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Tode" eingetragen ist und Speichern ihn in unserer Variable.
}
return 1;
}
Tausch das mal aus
das:
SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]);
zu
GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]));
und zum Speichern so:
das:
mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
zu:
mysql_SetInt("accounts", "Geld", GetPlayerMoney(playerid), "Name", SpielerInfo[playerid][pName]);
Hmm klappt nicht mehr,Error
Zeile (380) : error 001: expected token: "-string end-", but found "-identifier-"
Zeile (380) : error 001: expected token: ";", but found ")"
Zeile (380) : error 029: invalid expression, assumed zero
Zeile (380) : fatal error 107: too many error messages on one line
GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name" SpielerInfo[playerid][pName]));
Zeile darüber bitte
SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]);
ich habs mein Fehler nicht gesehen
Mach ma das
GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name" SpielerInfo[playerid][pName]));
zu
GivePlayerMoney(playerid,mysql_GetInt("accounts", "Geld", "Name" ,SpielerInfo[playerid][pName]));
villeicht siehst du den kleinen Fehler
Problem noch:
Tod wird nicht gezählt in der DB.
Health wird nicht angezeigt,wenn ich zb 50 Health eingeben habe ich ig 100Health.
Kriege ig nur CJ Skin,egal welche Skin ID ich in die DB eingeben
Ich schaffe es nicht mich einzulogen....
Kann mir jmd helfen per Teamviewer?
wäre nett
Ich bedanke mich erstmal für dein Tutorial hat mir echt viel geholfen konnte ebenfalls viel dabei lernen.
10/10
Mit freundlichem Gruß,
.Mazda.
So habe vergessen mich zu bedanken.
Dank diesem Tutorial kenne ich mich nun mit den Grundlagen von MySql aus in Samp
Vorstellung: 9/10 (Update die mal :DD)
Mfg