Beitrag von Jameso ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Problem gelöst ().
Hab ein Actor der heißt new Actor1;.
Ich weiß nicht was der hat, dem geht es nicht gut.
Was kann ich machen, damit er mal auf der Stelle bleibt und nicht wegsurft, wenn ich ihn anfahre ![]()
Huhu,
ich bin ja aktuell dabei ein Haussystem zu scripten.
Ich wollte jetzt anfangen mit dem Interiorsystem, habe jedoch eine Probleme bzw. Fragen dazu:
1. Nehmen wir an, ich mappe einen eigenen Interior für ein Haus. Muss ich jetzt trotzdem per SetPlayerInterior den Interior wechseln, oder kann diese einfach 0 bleiben, da ich ja eh eine VW setze.
2. Ich habe gesehen, dass man die VirtualWorlds(VW) auf den selben Wert setzen soll, der die HausID ist(damit jeder nur die Leute im selben Haus sieht). Wenn ich dann jedoch ein Haus und eine Biz mit der ID 1 habe, wie gehe ich vor? Oder kann ich das außer Beachtung lassen, da die Ints sowieso alle an unterschiedl. Positionen sind?
Ich danke schonmal wie immer im Voraus.
//e:
Zu BrightLeaN:
Ich hab dass zwar selbst noch nicht gebraucht, jedoch könntest du ihn mithilfe eines Timers wieder auf seine alte Position setzen.
Oder immer wenn ein neuer Spieler den Actor lädt (OnActorSteamIn) diesen zurück auf seine Position setzen.
1. Nehmen wir an, ich mappe einen eigenen Interior für ein Haus. Muss ich jetzt trotzdem per SetPlayerInterior den Interior wechseln, oder kann diese einfach 0 bleiben, da ich ja eh eine VW setze.
Solange die InteriorID von den Objekten des Interiors auch in keinem Interior sind, brauchst du das nicht. Kann also bei 0 bleiben.
2. Ich habe gesehen, dass man die VirtualWorlds(VW) auf den selben Wert setzen soll, der die HausID ist(damit jeder nur die Leute im selben Haus sieht). Wenn ich dann jedoch ein Haus und eine Biz mit der ID 1 habe, wie gehe ich vor? Oder kann ich das außer Beachtung lassen, da die Ints sowieso alle an unterschiedl. Positionen sind?
Wenn ein Haus und ein Biz das gleiche Interior haben kann, dann solltest du einfach bei Biz's einfach als Virtual World 1000 + ID nehmen, dann kommt es zu keinen Überschneidungen.
zuwas wurde
fVehicle[fV][dbID] = cache_insert_id(MySQL_Connection);
umgennant MySQL R40?
zuwas wurde
fVehicle[fV][dbID] = cache_insert_id(MySQL_Connection);
umgennant MySQL R40?
fVehicle[fV][dbID] = cache_insert_id();
stock GarageSpeichern()
{
for(new garageid = 0; garageid < sizeof(gInfo); garageid++)
{
new query[256];
mysql_format(handle,query,sizeof(query),"UPDATE `garage` Set `Lock`='%d',`Mechaniker`='%d' WHERE `ID`='%d'",
gInfo[garageid][gLock],gInfo[garageid][gMechaniker],gInfo[garageid][db_gid]);
mysql_pquery(handle,query);
}
}
Ich lasse diesen stock unter OnGameModeExit aufrufen, ist das falsch?
Der soll das ja speichern, wenn der Server sich schließt.
Ich checke MySQL so oft nicht.
Werde geärgert, der Log sagt mir dazu nichts...
Codestock GarageSpeichern() { for(new garageid = 0; garageid < sizeof(gInfo); garageid++) { new query[256]; mysql_format(handle,query,sizeof(query),"UPDATE `garage` Set `Lock`='%d',`Mechaniker`='%d' WHERE `ID`='%d'", gInfo[garageid][gLock],gInfo[garageid][gMechaniker],gInfo[garageid][db_gid]); mysql_pquery(handle,query); } }Ich lasse diesen stock unter OnGameModeExit aufrufen, ist das falsch?
Der soll das ja speichern, wenn der Server sich schließt.
Ich checke MySQL so oft nicht.
Werde geärgert, der Log sagt mir dazu nichts...
Lass dir per prinft ausgeben ob die stock überhaupt aufgerufen wird wenn du den Server schließt, steht dann ja in der Log ![]()
Also Problem ist gefunden.
Wenn ich den Server instant schließe, heißt das Fenster der Konsole schließe, exited er den Gamemode nicht.
Wenn ich gmx benutzte geht es, zumindest wird es aufgerufen...
Er speichert mir den Wert in der ersten Datenbank Zeile, muss ID ein primary Key sein?
Ist gInfo[garageid][db_gid] denn richtig? Ist die ID in der Datenbank auch AUTO_INCREMENT?
Habe die Variable verändert, jetzt hat die jetzige AUTO_INCREMENT an aber jetzt scheint er nix zu speichern.
Wenn ich den Server instant schließe, heißt das Fenster der Konsole schließe, exited er den Gamemode nicht.
Einfach "exit" in die Konsole eintragen.
Er speichert mir den Wert in der ersten Datenbank Zeile, muss ID ein primary Key sein?
Was heißt "er speichert dir den Wert in der ersten Datenbankzeile" ?
Nur die Erste oder alles in der ersten ?
Guten Abend,
ich brauche mal wieder eure Hilfe, ich bin wohl gerade zu "Dumm" diesen Fehler zu finden ...
Meine Server Log Spuckt mir aus:
Server Log:
[debug] Run time error 4: "Array index out of bounds"
[debug] Attempted to read/write array element at index 65535 in array of size 1000
[debug] AMX backtrace:
[debug] #0 00008080 in main (0, 577720) in Script.amx
Script der Befehl dazu:
CMD:admins(playerid, params[])
{
if(!PlayerInfo[playerid][LoggedIn])return NO_CONYOURSELF
new rows, strDialog[512], strArt[64] = "{FFFFFF}Name:\tRang[Level]\tStatus\n";
new Cache:result = mysql_query(Handle, "SELECT `Name`, `Adminrang`, `LastOnline` FROM `PLAYERS` WHERE `Adminrang` > 0 ORDER BY `Adminrang` DESC LIMIT 0, 15");
cache_get_row_count(rows);
if(rows)
{
new admName[25], admRang, LastOnline[30];
for(new i; i < rows; i++){
cache_get_value_name(i, "Name", admName, 25);
cache_get_value_name(i, "LastOnline", LastOnline, 30);
cache_get_value_name_int(i, "Adminrang", admRang);
new isOnline = GetID(admName);
if(IsPlayerConnected(isOnline) && PlayerInfo[isOnline][LoggedIn]){
format(strDialog, sizeof(strDialog), "%s{FFFFFF}%s\t%s[%d]\t{00CC00}• {FFFFFF}Online", strDialog, admName, GetPlayerAdminRang(isOnline), admRang);
}else{
format(strDialog, sizeof(strDialog), "%s{FFFFFF}%s\t%s[%d]\t%s", strDialog, admName, GetPlayerAdminRang(isOnline), admRang, LastOnline);
}
strcat(strArt, strDialog);
printf("DEBUG - String:\n%s", strDialog);
}
cache_delete(result);
ShowPlayerDialog(playerid, DIA_ERROR, DIALOG_STYLE_TABLIST_HEADERS, "{CC6600}"#SERVER_NAME" {FFFFFF}- Teammitglieder", strDialog, "Schließen", "");
}
return 1;
}
Erkennt einer von euch den Fehler und kann mir diesen Fehler ebenfalls auch erklären?
Guten Abend,
ich brauche mal wieder eure Hilfe, ich bin wohl gerade zu "Dumm" diesen Fehler zu finden ...
Meine Server Log Spuckt mir aus:
Server Log:[debug] Run time error 4: "Array index out of bounds"[debug] Attempted to read/write array element at index 65535 in array of size 1000[debug] AMX backtrace:[debug] #0 00008080 in main (0, 577720) in Script.amx Script der Befehl dazu:CMD:admins(playerid, params[]){ if(!PlayerInfo[playerid][LoggedIn])return NO_CONYOURSELF new rows, strDialog[512], strArt[64] = "{FFFFFF}Name:\tRang[Level]\tStatus\n"; new Cache:result = mysql_query(Handle, "SELECT `Name`, `Adminrang`, `LastOnline` FROM `PLAYERS` WHERE `Adminrang` > 0 ORDER BY `Adminrang` DESC LIMIT 0, 15"); cache_get_row_count(rows); if(rows) { new admName[25], admRang, LastOnline[30]; for(new i; i < rows; i++){ cache_get_value_name(i, "Name", admName, 25); cache_get_value_name(i, "LastOnline", LastOnline, 30); cache_get_value_name_int(i, "Adminrang", admRang); new isOnline = GetID(admName); if(IsPlayerConnected(isOnline) && PlayerInfo[isOnline][LoggedIn]){ format(strDialog, sizeof(strDialog), "%s{FFFFFF}%s\t%s[%d]\t{00CC00}• {FFFFFF}Online", strDialog, admName, GetPlayerAdminRang(isOnline), admRang); }else{ format(strDialog, sizeof(strDialog), "%s{FFFFFF}%s\t%s[%d]\t%s", strDialog, admName, GetPlayerAdminRang(isOnline), admRang, LastOnline); } strcat(strArt, strDialog); printf("DEBUG - String:\n%s", strDialog); } cache_delete(result); ShowPlayerDialog(playerid, DIA_ERROR, DIALOG_STYLE_TABLIST_HEADERS, "{CC6600}"#SERVER_NAME" {FFFFFF}- Teammitglieder", strDialog, "Schließen", ""); } return 1;}
Erkennt einer von euch den Fehler und kann mir diesen Fehler ebenfalls auch erklären?
Überprüfe mal deine MySQL Datenbank und die Tabellen.
Einen anderen Fehler kann ich jetzt nicht erkennen.
Wahrscheinlich ist diese Zeile das Problem, da du versuchst in deinem Array auf den Loginstatus von INVALID_PLAYER_ID (65535) zu kriegen.
if(IsPlayerConnected(isOnline) && PlayerInfo[isOnline][LoggedIn])
Versuch Mal nur zu prüfen ob der Spieler verbunden ist, und dann in einem weiteren if-Statement fragst du dem Loginstatus vom Spieler ab. (Sofern dieser online ist)
Kann man nicht theoretisch ein gutes Blinker-System erstellen?
https://wiki.sa-mp.com/wiki/UpdateVehicleDamageStatus
Mit dieser Funktion kann man ja z.B vorne links und vorne rechts die Lichter zerstören ( https://wiki.sa-mp.com/wiki/LightStates ).
Ist so etwas möglich, oder brauch ich es erst gar nicht ausprobieren? Habe es noch nie gesehen, deswegen ist mir das skeptisch...
Habe das ganze mal Versucht nur mit "IsPlayerConnected" abzufragen, bleibt das gleiche, habe die Vermutung das es an diesem Stock liegt. (?)
Aktueller Befehl:
CMD:admins(playerid, params[])
{
if(!PlayerInfo[playerid][LoggedIn])return NO_CONYOURSELF
new rows, strDialog[512], strArt[64] = "{FFFFFF}Name:\tRang[Level]\tStatus\n";
new Cache:result = mysql_query(Handle, "SELECT `Name`, `Adminrang`, `LastOnline` FROM `PLAYERS` WHERE `Adminrang` > 0 ORDER BY `Adminrang` DESC LIMIT 0, 15");
cache_get_row_count(rows);
if(rows)
{
new admName[25], admRang, LastOnline[30];
for(new i; i < rows; i++){
cache_get_value_name(i, "Name", admName, 25);
cache_get_value_name(i, "LastOnline", LastOnline, 30);
cache_get_value_name_int(i, "Adminrang", admRang);
new isOnline = GetID(admName);
if(IsPlayerConnected(isOnline)){
format(strDialog, sizeof(strDialog), "%s{FFFFFF}%s\t%s[%d]\t{00CC00}• {FFFFFF}Online", strDialog, admName, GetPlayerAdminRang(isOnline), admRang);
}else{
format(strDialog, sizeof(strDialog), "%s{FFFFFF}%s\t%s[%d]\t%s", strDialog, admName, GetPlayerAdminRang(isOnline), admRang, LastOnline);
}
strcat(strArt, strDialog);
printf("DEBUG - String:\n%s", strDialog);
}
cache_delete(result);
ShowPlayerDialog(playerid, DIA_ERROR, DIALOG_STYLE_TABLIST_HEADERS, "{CC6600}"#SERVER_NAME" {FFFFFF}- Teammitglieder", strDialog, "Schließen", "");
}
return 1;
}
stock "GetID"
GetID(name[])
{
for(new i, j = GetPlayerPoolSize(); i <= j; i++)
{
new playeRname[MAX_PLAYER_NAME+1];
GetPlayerName(i, playeRname, sizeof(playeRname));
if(!strcmp(PlayerInfo[i][Name], name, true)) return i;
}
return INVALID_PLAYER_ID;
}
Ja, dort ist es genau der Fehler. Prüfe erst IsPlayerConnected bevor du den Namen im Array mit dem Namen des Spielers vergleichst.
Leider auch ohne Erfolg, die Funktion schaut nun so aus, Fehler bleibt leider ebenfalls der gleiche.
GetID(name[])
{
new playeRname[MAX_PLAYER_NAME+1];
for(new i=GetPlayerPoolSize(); i!=-1; i--){
if(IsPlayerConnected(i)){
GetPlayerName(i, playeRname, sizeof(playeRname));
if(!strcmp(PlayerInfo[i][Name], name, true))return i;
}
}
return INVALID_PLAYER_ID;
}