in AmxLoad () from plugins/fcnpc.so
Du verwendest eine extrem alte Version von Fcnpc (aus 2015)..hier ist die Aktuelleste: https://github.com/ziggi/FCNPC/releases
in AmxLoad () from plugins/fcnpc.so
Du verwendest eine extrem alte Version von Fcnpc (aus 2015)..hier ist die Aktuelleste: https://github.com/ziggi/FCNPC/releases
...du nutzt immer noch 2 MySQL Versionen..
Alles anzeigen[18:26:34] Loading plugin: mysql_static.so
[18:26:34] >> plugin.mysql: R39-3 successfully loaded.
[18:26:34] Loaded.
[18:26:34] Loading plugin: mysql.so
[18:26:34] >> plugin.mysql: R39-3 successfully loaded.
[18:26:34] Loaded.
Du brauchst nur eine...
und wenn du crashdetect lädst, brauchst kein nativechecker mehr ![]()
Brauchst da keine Schleife und keine globale Variable.
Mach dir am einfachsten eine kurze Funktion für die Übersicht:
Und dann kannst du es so schreiben:
public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate==PLAYER_STATE_DRIVER)
{
new vID=GetPlayerVehicleID(playerid);
if(!hasEngine(vID))
{
new a,b,c,d,e,f;
//Motor an/ausschalten
GetVehicleParamsEx(vID, a,a,b,c,d,e,f);
SetVehicleParamsEx(vID, 1, a,b,c,d,e,f);
}
for(new i=0; i<sizeof(ahCars); i++)
{
if(ahCars[i][id_x]!=vID)continue;
//Verkaufsprozess
SetPVarInt(playerid,"buyCarID",i);
new string[256];
format(string,sizeof(string),"Möchten sie das Fahrzeug für %i$ kaufen?",ahCars[i][c_preis]);
ShowPlayerDialog(playerid,DIALOG_AUTOHAUS,DIALOG_STYLE_MSGBOX,"Autoverkauf",string,"Ja","Nein");
break;
}
return 1;
}
return 1;
}
Alles anzeigen
//Edit:
Ja das lag an dieser Zeile:
Zitatif(AutosOhneMotor[ i ]==vModel)continue;
Richtig wäre:
if(AutosOhneMotor[i]!=vModel)continue;
Dennoch würde ich dir meine Version empfehlen ![]()
Sry nicht richtig hingeschaut, dachte du hast so eine Variable benannt..aber nein, du schreibst da einfach den Namen vom Enum sub rein xD
Musst es so machen:
PlayerInfo[playerid][pMoney] -= ahCars[id][c_preis];
PlayerInfo[playerid][pMoney]=-c_preis;
Das muss heißen:
PlayerInfo[playerid][pMoney] -= c_preis;
Und das wird dann ganz normal beim relog gespeichert und somit brauchst du nichts direkt in der Datenbank verändern, da dass nach dem Relog automatisch passiert ![]()
Mach mal unter das saveCarToDb ein break;
@Kaliber
Hab bereits beide ausprobiert, also Main & Scriptfiles Ordner und hatte diese Konfig angegeben, connecten tut er aber nicht.
Finde diese Methode aber echt interessant und toll, da man dafür nur noch eine Zeile im Quellcode braucht fast um sich zur Datenbank zu verbinden.
1. Es steht im Wiki: You can't specify any directories in the file name, the connection file has to be in the SA-MP server root folder.
Also es darf nicht in den scriptfiles liegen.
2. Hat man davor doch auch...mysql_connect...
Du musst immer noch prüfen..ob alles geklappt hat oder nicht.
Der einzige Vorteil ist, du musst dein Passwort nicht im Skript angeben ![]()
Und zwar wollte ich fragen ob die INI datei im Main Ordner liegen muss oder im Scriptfiles ordner und ob meine Konfiguration richtig ist.
Die 2 Fragen kommen auf, da der errno -1 eingibt und der errno meines Wissens nach auf 0 stehen muss für eine aktive Verbindung.
1. Ehh probiers aus?
Das sollte nicht sehr lange dauern xD
2. Richtig, er muss 0 sein. errno steht für Error Code, und wenn dieser -1 ist, bedeutet dies invalid connection handle. Sprich, da stimmt etwas mit dem connecten nicht ![]()
Versuchs mal so:
ocmd:chouse(playerid, params[])
{
new price, interior, typ;
if(!isPlayerAnAdmin(playerid,4))return SCM(playerid, ERROR_FARBE, ERROR_ADMIN);
if(sscanf(params,"ddd",price,interior,typ))return SCM(playerid, -1, "Tippe: /chouse [price] [interior] [typ]");
for(new i; i<MAX_HOUSE; i++)
{
if(hInfo[i][house_description][0] != EOS) continue;
new Float:x, Float:y, Float:z, string[64], string2[MAX_PLAYER_NAME], query[512];
GetPlayerPos(playerid, x, y, z);
format(string,sizeof(string), "Zum verkauf");
format(string2,sizeof(string2), "Niemand");
hInfo[i][house_id] = i;
hInfo[i][house_owner] = string2;
hInfo[i][house_description] = string;
hInfo[i][house_price] = price;
hInfo[i][house_interior] = interior;
hInfo[i][house_typ] = typ;
hInfo[i][house_x] = x;
hInfo[i][house_y] = y;
hInfo[i][house_z] = z;
format(query, sizeof(query), "INSERT INTO houses (id, owner, description, price, interior, posx, posy, posz, typ) VALUES ('%d', '%s', '%s', '%d', '%d', '%f', '%f', '%f', '%d')",
i, hInfo[i][house_owner], hInfo[i][house_description], hInfo[i][house_price], hInfo[i][house_interior], hInfo[i][house_x], hInfo[i][house_y], hInfo[i][house_z], hInfo[i][house_typ]);
mysql_tquery(handle, query);
format(string,sizeof(string), "Du hast erfolgreich das Haus(ID: %d) erstellt.",i);
printf("%s", query);
SCM(playerid, BABYBLAU, string);
break;
}
return 1;
}
Alles anzeigen
Sorry für die späte antwort aber es hatte echt überhaupt nichts mit dem
Doch natürlich...das hat deinen Server heruntergefahren.
Der Fehlschlag vom mysql_connect hat dafür gesorgt, dass genau SendRconCommand("exit"); aufgerufen wurde.
Der Fehlschlag wurde halt eben nicht durch die falschen Login-Daten ausgelöst, sondern dadurch, dass du nicht die richtige Datenbank erstellt hattest. ![]()
Da müsste es jetzt auch eine mysql.log Datei geben ![]()
Das hat nichts mit den Rechten zu tun, sondern nur mit der Übertragung der Daten.
Det kannste aber so lassen ![]()
@Kaliber ging bei mir sonst auch ohne passwort naja wenn das so ist wo kann ich denn bei PHPMyAdmin das Passwort etc festlegen
Naja, da gibt es oben den Punkt Benutzerkonten...und dort gibt es dann Benutzerkonto hinzufügen
Dort wählst du dann den Benutzernamen aus, beim Hostname, wähle lokal aus. (des wichtig)
und dann einfach noch Passwort und die Rechte die dieser Benutzer haben soll ![]()
[15:25:39] [MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.
[15:25:39] [MySQL] Bitte prüfen Sie die Verbindungsdaten.
[15:25:39] [MySQL] Der Server wird heruntergefahren.
Und siehe da, es steht im Log und deshalb fährt der Server hinunter.
Offensichtlich ist etwas mit den Daten falsch.
Ich glaube mich zu erinnern, dass das Passwort nicht leer sein darf bei SA:MP.
Also erstelle im PHPMyAdmin Panel o.ä. einen neuen Benutzer mit Passwort und verwende diese Daten ![]()
Da crashdetect nichts registriert hat, ist dies kein Fehler, sondern gewollt.
Schau eventuell mal in deinem Skript nach SendRconCommand("exit"); anscheinend, steht das da drinnen, sodass sich dein Server wieder abschaltet ![]()
Zeig mal wie ApplyActorAnimation aufgerufen wird und von wo aus ![]()
Und wieso machst du es nicht einfach so?
SetTimerEx("ShopClerkRobTimer", 3000, false, "i", x);
forward ShopClerkRobTimer(shopIndex);
public ShopClerkRobTimer(shopIndex){
ClearActorAnimations(shops[shopIndex][_clerkID]);
}
Dann brauchste dir keine Timer_ID merken ![]()
Weil du in der Schleife unten ein break; setzen musst...sonst hört die Schleife ja nicht auf ![]()
printe doch den wert von playerinfo und dann den von f_ftype ![]()
Eventuell wurde da was nicht richtig zugewiesen ![]()