MySQL kannst du per mysql_close(Name von Connection Handle); beenden (unter OnGameModeExit).
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
MySQL kannst du per mysql_close(Name von Connection Handle); beenden (unter OnGameModeExit).
Ja das habe ich schon immer drinne gehabt geht immer noch nicht
-
Ja das habe ich schon immer drinne gehabt geht immer noch nicht
Brauchst du an der Stelle auch nicht. Der Fehler hat damit nichts zu tun.
Liegt der MySQL Server auf dem gleichen Server, wie der SA-MP Server? Sprich, haben diese die gleiche IP?
Wenn ja, dann kannst du localhost bzw. 127.0.0.1 nutzen, entweder mit dem dafür angelegten User, oder dem root User, das kommt drauf an, ob du den MySQL Server selbst eingerichtet hast (eigene VM) oder ob es über einen Hoster läuft.
Wenn nein, dann ist die Remote-Verbindung eventuell blockiert. Siehe hierzu: https://www.tecmint.com/fix-er…-server-on-127-0-0-1-111/ -
Nabend, gibt es eine Funktion wie GetTargetVehicle ?
-
Es gibt https://wiki.sa-mp.com/wiki/GetPlayerCameraTargetVehicle
Siehe auch hier (ganz unten die Liste):
https://wiki.sa-mp.com/wiki/Category:Scripting_Functions -
Ich habe gerade gemerkt, dass GetPlayerCameraTargetObject existiert, sehr sehr geil!
Es ist ein Hinweis beigelegt, dieser weißt darauf hin dass die Funktion standardmäßig deaktiviert ist.
Sie sei deaktiviert um Bandbreite zu sparen, wie sehr macht es sich denn bemerkbar, wenn ich sie benötige für eine Funktion und sie auch dauerhaft anlasse? Hat jemand damit Erfahrung gemacht? -
Das ist immer im Einzelfall zu betrachten, die Bandbreite liegt ja sowohl am einzelnen Spieler als auch am jeweiligen Server.
Ich gehe nicht davon aus, dass es große Probleme erzeugt. Am besten wird es aber sein, es auszuprobieren. -
Hi, wieder mal eine Frage...
Gibt es beim Scripten eine bestimmte Reihenfolge die man einhalten muss? Z.B. wenn ich über OnPlayerConnect selber eine Funktion erstelle, könnte dass anschliessend irgendwelche Auswirkungen haben?
-
Gibt es beim Scripten eine bestimmte Reihenfolge die man einhalten muss? Z.B. wenn ich über OnPlayerConnect selber eine Funktion erstelle, könnte dass anschliessend irgendwelche Auswirkungen haben?
Prinzipiell nein.
Ausnahmen gibt es, z.B. Funktionen mit Tags, wie Float oder bool, da müsste man ein forward verwenden, aber das sagt dir schon der Compiler, ansonsten, nein.
Oder Markos (also diese Dinge mit #define) oder auch #include.(Innerhalb einer Funktion hingegen ist es natürlich sehr wichtig, dass du erst eine Variable deklarierst, bevor du sie nutzt).
-
Hallo Zusammen,
Was ist bei der Funktion fehlerhaft?
getRangName(fraktionsID, rangID)
{
if(PlayerInfo[playerid][pFraktion] == 1) // COPS
{
switch(PlayerInfo[playerid][pFraktionrang])
{
case 0:{rang="Anwärter";}
case 1:{rang="Anwärter";}
case 2: return "Chief of Police";
}
}
if(PlayerInfo[playerid][pFraktion] == 2)
{
switch(PlayerInfo[playerid][pFraktionrang])
{
case 0: return "Anwärter";
case 1: return "Artz";
case 2: return "Chefartz";
}
}
return rang;
}
Fehler: Run time Error 17: "Invalid/unsupported P-Code file Format"Aber der Compiler gibt keinen Error beim Compilen, sondern braucht nur ziemlich lange um das Skript zu Compilen
-
Schreibe die Texte nicht direkt in das return, sondern mache es wie bei den ersten beiden cases, über die Variable "rang".
-
Meine Zeitrechnung spinnt irgendwie.
Sie rechnet richtig, solange der Minuten Wert nicht höher als 59 Minuten ist.
Gehen wir davon aus, das man 180 Minuten im "Knast" ist, dann rechnet er aus, 3 Stunden, 180 Minuten & 0 Sekunden.Wobei er dann mir 3 Stunden, 0 Minuten & 0 Sekunden ausgeben sollte.
Bei einem Timestamp der 59 beträgt, rechnet er auch richtig.Quellcode:
//Funktionen
stock MathTime(atime, &days, &hours, &mins)
{
new restzeit= atime -gettime();
days = floatround(restzeit / 86400,floatround_floor),
hours = restzeit - (days * 86400),
hours = floatround(hours / 3600,floatround_floor),
mins = restzeit - ( (days * 86400) + (hours * 3600) ),
mins = floatround(mins / 60,floatround_floor);
return 1;
}
stock MathTimeSeconds(atime, &mins, &secs)
{
mins = (atime-gettime())/60;
secs = atime-gettime() - (mins*60);
return 1;
}//Anwendung
if(pInfo[playerid][pMute])
{
new day, hour, mins, secs, mutetime = pInfo[playerid][pMutetime];
MathTime(mutetime, day, hour, mins),
MathTimeSeconds(mutetime, mins, secs);
SCMF(playerid, COLOR_LESSRED, "Du bist noch für %02d:%02d:%02d Stunden gemuted.", hour, mins, secs);
return 0;
} -
Du kannst es so machen:
if(pInfo[playerid][pMute])
{
new hour, mins, secs, mutetime = pInfo[playerid][pMutetime] - gettime();
hour = mutetime/3600;
mutetime -= hour*3600;
mins = mutetime/60;
mutetime -= mins*60;
secs = mutetime;
SCMF(playerid, COLOR_LESSRED, "Du bist noch für %02d:%02d:%02d Stunden gemuted.", hour, mins, secs);
return 0;
} -
Okay, das funktioniert Super.
Einen Ansatz wie ich die Tage zusätzlich aus dem UNIX TS rechnen kann? -
Vor der hour Zeile:
days = mutetime/86400;
mutetime -= days*86400; -
Ich habe mehrere Actors und wollte fragen, wie ich diese in einem Timer Sync.
So werden diese erstellt:
Ich habe da nichts gefunden, gibt es eine Funktionen die den Actor "Respawnen"?
Oder muss man wirklich SetActorPos und SetActorFacingAngle bei jedem Actor benutzten, das ist doch richtig umständlich jedes mal -
Hallo ich habe gerade mein script auf Linux laufen lassen es funkt alles.
nur auf linux bekomme ich in dem mysql logs die Fehler zu sehen.
Fehler:
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name_float: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name_float: no active cache
[20:35:10] [plugins/mysql] cache_get_value_name_float: no active cacheCode:
stock SaveServerInfo()
{
print("MYSQL: Server Infomationen werden Gespeichert.");
new query[600];
mysql_format(handle, query, sizeof(query), "UPDATE server_info SET servername = '%s',servertag = '%s',slogan = '%s',serverversion = '%s',scripter = '%s',inhaber = '%s',mapname = '%s',weburl = '%s',ucpurl = '%s',tsip = '%s',noobX = '%f',noobY = '%f',noobZ = '%f'",
ServerInfo[servername],
ServerInfo[servertag],
ServerInfo[slogan],
ServerInfo[serverversion],
ServerInfo[scripter],
ServerInfo[inhaber],
ServerInfo[mapname],
ServerInfo[weburl],
ServerInfo[ucpurl],
ServerInfo[tsip],
ServerInfo[noobX],
ServerInfo[noobY],
ServerInfo[noobZ]);
mysql_pquery(handle, query);
print("MYSQL: Server Infomationen wurden Gespeichert.");
return query;
} -
So mal ein Tipp am Rande.
Wenn du schon mysql_format nutzt, dann nutze statt %s, %e.
In der Funktion mysql_format kannst du mit %e, den String gleich Escapen. (SQL Injection Shield)
Wieso returnst du query? Welchen zweck hat das.
Und die String Größe kannst du auch kleiner ansetzen, so viel brauchst du für den Query nicht.Zeig mal die du deine Verbindung aufbaust.
-
In der Funktion mysql_format kannst du mit %e, den String gleich Escapen. (SQL Injection Shield)
Danke für den Tipp.
Wieso returnst du query? Welchen zweck hat das.
Das mache ich immer so hatte es in einem Tutorial gelernt.
Und die String Größe kannst du auch kleiner ansetzen, so viel brauchst du für den Query nicht.
Ja war mir nicht sicher wie lang es wird deshalb hatte ich es so habs vergessen zu ändern Danke.
Zeig mal die du deine Verbindung aufbaust.
stock MySQL_SetupConnection(ttl = 3)
{
print("[MySQL] Verbindungsaufbau...");
handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
if(mysql_errno(handle) != 0)
{
if(ttl > 1)
{
print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
return MySQL_SetupConnection(ttl-1);
}
else
{
print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
print("[MySQL] Der Server wird heruntergefahren.");
return SendRconCommand("exit");
}
}
printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", _:handle);
return 1;
}
Bei der Verbindung gibts kein Problem beim Registieren klapp auch alles wird auch in die Datenbank eingetragen. -
Das mache ich immer so hatte es in einem Tutorial gelernt.
Das macht nur Sinn, wenn du es dann auch verwendest, ansonsten kannst du das lassen.
Im Log ist die Rede von den cache Funktionen, diese werden hier allerdings gar nicht aufgerufen...
Rufst du irgendwo denn noch diese auf in einem Callback?
-