[SAMMELTHREAD] Kleine Scripting Fragen

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
  • Alles Klar danke, habe es jetzt geschafft, jedoch habe ich noch eine Frage/Fehler:


    -> Warum werden nicht alle Map icons geladen? Bei mir wird nur einer geladen...



    SetPlayerMapIcon(playerid, 12, 204.0869,1861.0219,20.6209, 6, 0, MAPICON_LOCAL);
    SetPlayerMapIcon(playerid, 12, -136.1196,1116.7900,20.1966, 6, 0, MAPICON_LOCAL);
    SetPlayerMapIcon(playerid, 12, -378.4940,2237.0698,42.4495, 6, 0, MAPICON_LOCAL);
    SetPlayerMapIcon(playerid, 12, -684.3907,939.5387,13.6328, 6, 0, MAPICON_LOCAL);
    SetPlayerMapIcon(playerid, 12, 938.4085,1734.4572,8.8516, 6, 0, MAPICON_LOCAL);
    SetPlayerMapIcon(playerid, 12, -793.3663,1594.1543,27.1172, 6, 0, MAPICON_LOCAL);
    SetPlayerMapIcon(playerid, 12, -269.8531,2674.8159,62.6580, 6, 0, MAPICON_LOCAL);

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

  • Jeffry: Dort kommt nichts, das Passwort sowie der Name,LastLogin,RegDatum und Leben werden ja perfekt Gespeichert. Nur halt das Geburtsdatum, Alter sowie Geschlecht nicht :S


    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Du musst den MySQL Log schon einschalten. Da steht dann auch was, ganz sicher. Schau im mysql_log.txt nach.


    Dort steht nichts drinne, schau im pastebin Link nach, habe oben bei public OnGameModeInit() das mysql_log(1); stehen.

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Habe eben die Version auf die R39-2 von pBlueG gewechselt. Jetzt funktioniert das LOG_ALL und da kommt folgendes raus:

    Spoiler anzeigen
    [21:27:40] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
    [21:27:40] [DEBUG] CMySQLConnection::Connect - establishing connection to database...
    [21:27:40] [DEBUG] CMySQLConnection::Connect - connection was successful
    [21:27:40] [DEBUG] CMySQLConnection::Connect - connection was successful
    [21:27:40] [DEBUG] CMySQLConnection::Connect - connection was successful
    [21:27:40] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
    [21:27:40] [DEBUG] CMySQLConnection::Connect - auto-reconnect has been enabled
    [21:27:40] [DEBUG] CMySQLQuery::Execute[] - starting query execution
    [21:27:40] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 6.392 milliseconds
    [21:27:40] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
    [21:27:59] [DEBUG] mysql_format - connection: 1, len: 184, format: "SELECT COUNT(*) AS `count` FROM `Accounts` WHERE `pName` = '%e'"
    [21:27:59] [DEBUG] mysql_tquery - connection: 1, query: "SELECT COUNT(*) AS `count` FROM `Accounts` WHERE `pName` = 'Eddy", callback: "LoadPlayerDataSequence", format: "dd"
    [21:27:59] [DEBUG] CMySQLQuery::Execute[LoadPlayerDataSequence] - starting query execution
    [21:27:59] [DEBUG] CMySQLQuery::Execute[LoadPlayerDataSequence] - query was successfully executed within 2.296 milliseconds
    [21:27:59] [DEBUG] CMySQLResult::CMySQLResult() - constructor called
    [21:27:59] [DEBUG] Calling callback "LoadPlayerDataSequence"..
    [21:27:59] [DEBUG] cache_get_field_content_int - row: 0, field_name: "count", connection: 1
    [21:27:59] [DEBUG] CMySQLResult::GetRowDataByName - row: '0', field: "count", data: "0"
    [21:27:59] [DEBUG] CMySQLResult::~CMySQLResult() - deconstructor called
    [21:28:02] [DEBUG] mysql_format - connection: 1, len: 974, format: "INSERT INTO `Accounts` (`pName`, `pPasswort`, `pAlter`, `pGeburtsdatum`, `pGeschlecht`, `pAdminlevel`, `pBanned`, `pBargeld`, `p..."
    [21:28:02] [DEBUG] mysql_tquery - connection: 1, query: "INSERT INTO `Accounts` (`pName`, `pPasswort`, `pAlter`, `pGeburt", callback: "(null)", format: "(null)"
    [21:28:02] [DEBUG] CMySQLQuery::Execute[] - starting query execution
    [21:28:02] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 0.564 milliseconds
    [21:28:02] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
    [21:28:05] [DEBUG] mysql_format - connection: 1, len: 974, format: "UPDATE `Accounts` SET `pAlter` = '%d', `pGeburtsdatum` ='%d', `pGeschlecht` ='%d', `pAdminlevel` = '%d', `pBanned` = '%d', `pBar..."
    [21:28:05] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `Accounts` SET `pAlter` = '784762084', `pGeburtsdatum` ='", callback: "(null)", format: "(null)"
    [21:28:05] [DEBUG] CMySQLQuery::Execute[] - starting query execution
    [21:28:05] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 0.677 milliseconds
    [21:28:05] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving
    [21:28:25] [DEBUG] mysql_format - connection: 1, len: 974, format: "UPDATE `Accounts` SET `pAlter` = '%d', `pGeburtsdatum` ='%d', `pGeschlecht` ='%d', `pAdminlevel` = '%d', `pBanned` = '%d', `pBar..."
    [21:28:25] [DEBUG] mysql_tquery - connection: 1, query: "UPDATE `Accounts` SET `pAlter` = '784762084', `pGeburtsdatum` ='", callback: "(null)", format: "(null)"
    [21:28:25] [DEBUG] CMySQLQuery::Execute[] - starting query execution
    [21:28:25] [DEBUG] CMySQLQuery::Execute[] - query was successfully executed within 0.977 milliseconds
    [21:28:25] [DEBUG] CMySQLQuery::Execute[] - no callback specified, skipping result saving

    Die Kritik an anderen hat noch keinem die eigene Leistung erspart.

    – Noël Coward

  • Ok.
    Schau dir hier mal meinen Post an, das scheint der gleiche Gamemode zu sein:
    http://forum.sa-mp.de/gta-mult…er-abfragen-2#post1991628
    So wie ich es da gemacht habe funktioniert es, so musst du es für Alter und Geburtsdatum auch machen.


    Falls du irgendwo nicht mehr weiter kommst, poste den Teil der Registration und erkläre wo du hängst.



    PS: Für solche Probleme nächstes mal lieber einen Thread auf machen.

  • Warum geht der Server nicht mehr? Also der Server reagiert auf garnichts mehr wenn der Timer startet:



    public StatsUpdateTimer(playerid)
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    ocmd_update(i, "");
    }
    return 1;
    }


    /onPlayerSpawn
    SetTimer("StatsUpdateTimer",300,true);


    //ocmd:update:


    ocmd:update(playerid,params[])
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(mysql_CheckAccount(playerid) == 1)
    {
    new KillstreakTextdraw[144],ScoreTextdraw[144],KillsTextdraw[144],TodeTextdraw[144],GetRankTextdraw[144], GetKlasseTextdraw[144];
    SpielerInfo[i][pKillStreak] = 0;
    format(KillstreakTextdraw, sizeof(KillstreakTextdraw), "Killstreak: %i", SpielerInfo[i][pKillStreak]);
    PlayerTextDrawSetString(playerid,Textdraw41[i],KillstreakTextdraw);
    format(TodeTextdraw, sizeof(TodeTextdraw), "Tode: %i", SpielerInfo[i][pTode]);
    PlayerTextDrawSetString(playerid,Textdraw46[i],TodeTextdraw);
    format(GetRankTextdraw, sizeof(GetRankTextdraw), "Rank: %s", GetRank(i));
    PlayerTextDrawSetString(playerid,Textdraw43[i],GetRankTextdraw);
    format(KillsTextdraw, sizeof(KillsTextdraw), "Kills: %i", SpielerInfo[i][pKills]);
    PlayerTextDrawSetString(playerid,Textdraw45[i],KillsTextdraw);
    format(ScoreTextdraw, sizeof(ScoreTextdraw), "Score: %i", SpielerInfo[i][pScore]);
    PlayerTextDrawSetString(playerid,Textdraw45[i],ScoreTextdraw);
    format(GetKlasseTextdraw, sizeof(GetKlasseTextdraw), "Klasse: %s", GetKlasse(i));
    PlayerTextDrawSetString(playerid,Textdraw44[i],GetKlasseTextdraw);
    StatusBoxTextdrawsLoad(i);
    }
    else if(mysql_CheckNoAccount(playerid) == 1)
    {
    new KillstreakTextdraw[144],ScoreTextdraw[144],KillsTextdraw[144],TodeTextdraw[144],GetRankTextdraw[144], GetKlasseTextdraw[144];
    SpielerInfo[playerid][pKillStreak] = 0;
    format(KillstreakTextdraw, sizeof(KillstreakTextdraw), "Killstreak: %i", NoSpielerInfo[i][pNoKillStreak]);
    PlayerTextDrawSetString(playerid,Textdraw41[i],KillstreakTextdraw);
    format(TodeTextdraw, sizeof(TodeTextdraw), "Tode: %i", NoSpielerInfo[i][pNoTode]);
    PlayerTextDrawSetString(playerid,Textdraw46[i],TodeTextdraw);
    format(GetRankTextdraw, sizeof(GetRankTextdraw), "Rank: %s", GetRank(i));
    PlayerTextDrawSetString(playerid,Textdraw43[i],GetRankTextdraw);
    format(KillsTextdraw, sizeof(KillsTextdraw), "Kills: %i", NoSpielerInfo[i][pNoKills]);
    PlayerTextDrawSetString(playerid,Textdraw45[i],KillsTextdraw);
    format(ScoreTextdraw, sizeof(ScoreTextdraw), "Score: %i", NoSpielerInfo[i][pNoScore]);
    PlayerTextDrawSetString(playerid,Textdraw45[i],ScoreTextdraw);
    format(GetKlasseTextdraw, sizeof(GetKlasseTextdraw), "Klasse: %s", GetKlasse(i));
    PlayerTextDrawSetString(i,Textdraw44[i],GetKlasseTextdraw);
    StatusBoxTextdrawsLoad(i);
    }
    }
    return 1;
    }


    //EDIT: Also, diese nicht reagierungen kamen , als ich dass mit den Update angefangen hab.
    //EDIT: Der Server reagiert erst nach sehr sehr langer zeit wieder

    Mit freundlichen Grüßen
    [KoSoVa] :klugs:

    2 Mal editiert, zuletzt von [GeD]Max ()

  • Der Befehl gibt mir fehler aber ich weiß nicht wie ich es anderes schreiben soll xD:P



    ocmd:punkte(playerid,params[]){
    if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
    new pID,reason[64],string[144],punkte;
    if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /punkte [ID][Anzahl][Grund]");
    format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte eingetragen! Grund: %s",NamePlayer(playerid),punkte,reason),SendClientMessage(pID,BLUTROT,string);
    format(string,144,"Du hast %s %d Strafpunkte eingetragen! Grund: %s",NamePlayer(pID),punkte,reason),SendClientMessage(playerid,BABYBLAU,string);
    format(string,144,"(( HQ: %s hat %s %d Strafpunkte eingetragen! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
    for(new i;i<GetMaxPlayers();i++){
    if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
    SendClientMessage(i,BLAU,string),SpielerInfo[pID][pFscheinPunkte],SpielerInfo[pID][pFscheinPunkte]+punkte,SpielerSpeichern(pID);//244
    }
    return 1;
    }


    ocmd:clearpunkte(playerid,params[]){
    if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
    if(SpielerInfo[playerid][pRang] < 5)return SendClientMessage(playerid,ROT,"Du bist nicht Rank 5!");
    new pID,reason[64],string[144],punkte;
    if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /clearpunkte [ID][Anzahl][Grund]");
    format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte gelöscht! Grund: %s",NamePlayer(playerid),punkte,reason),SendClientMessage(pID,BLUTROT,string);
    format(string,144,"Du hast %s %d Strafpunkte gelöscht! Grund: %s",NamePlayer(pID),punkte,reason),SendClientMessage(playerid,BABYBLAU,string);
    format(string,144,"(( HQ: %s hat %s %d Strafpunkte gelöscht! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
    for(new i;i<GetMaxPlayers();i++){
    if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
    SendClientMessage(i,BLAU,string),SpielerInfo[pID][pFscheinPunkte],SpielerInfo[pID][pFscheinPunkte]-punkte,SpielerSpeichern(pID);//259
    }
    return 1;
    }


  • @[GeD]Max:
    Das playerid in der Klammer beim public StatsUpdateTimer kann weg, das brauchst du nicht.
    Dann zu deinem Problem: Es ist ja generell nicht verboten einen Timer mit 300ms zu machen, aber einen Timer der mehr als 3x pro Sekunde MAX_PLAYERS * MAX_PLAYERS (!), das werden wohl noch die 500 sein, durchgeht und zwischen 250000 und 1000000 (je nach dem ob das else-if aufgerufen wird) Anfragen an die Datenbank schickt, dass ist dann doch ein klein bisschen sehr viel zu viel.


    Selbst wenn du eine der beiden Schleifen weg machst (was ja an sich schonmal Sinn macht, da du ja sonst jeden Spieler MAX_PLAYERS mal aktualisierst), werden noch zwischen 500 und 1000 Anfragen gesendet, pro Sekunde also mehr als 1500 - 3000 Anfragen, das ist immer noch viel zu viel. Mach das mit dem MySQL Zeugs da weg, und nimm eine Variable, die du beim Login auf 1 setzt, so weißt du ob der Spieler ein Konto hat oder nicht, und mach auf jeden Fall eine der beiden Schleifen weg.


    @FerienFreak:
    Wer auch immer dir gesagt hat, dass es besser ist alles in eine Zeile zu schreiben gehört geschlagen (sorry, ist aber so ;) ). Unter Programmieren gilt allgemein eine ungeschriebene Regel: Eine Anweisung pro Zeile.
    An der Performance ändert es nämlich gar nichts, im Gegenteil, du kannst es nur nicht mehr lesen.
    ocmd:punkte(playerid,params[])
    {
    if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
    new pID,reason[64],string[144],punkte;
    if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /punkte [ID][Anzahl][Grund]");
    format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte eingetragen! Grund: %s",NamePlayer(playerid),punkte,reason);
    SendClientMessage(pID,BLUTROT,string);
    format(string,144,"Du hast %s %d Strafpunkte eingetragen! Grund: %s",NamePlayer(pID),punkte,reason);
    SendClientMessage(playerid,BABYBLAU,string);
    format(string,144,"(( HQ: %s hat %s %d Strafpunkte eingetragen! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
    for(new i;i<GetMaxPlayers();i++)
    {
    if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
    SendClientMessage(i,BLAU,string);//244
    }
    SpielerInfo[pID][pFscheinPunkte]+=punkte;
    SpielerSpeichern(pID);
    return 1;
    }


    ocmd:clearpunkte(playerid,params[])
    {
    if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
    if(SpielerInfo[playerid][pRang] < 5)return SendClientMessage(playerid,ROT,"Du bist nicht Rank 5!");
    new pID,reason[64],string[144],punkte;
    if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /clearpunkte [ID][Anzahl][Grund]");
    format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte gelöscht! Grund: %s",NamePlayer(playerid),punkte,reason);
    SendClientMessage(pID,BLUTROT,string);
    format(string,144,"Du hast %s %d Strafpunkte gelöscht! Grund: %s",NamePlayer(pID),punkte,reason);
    SendClientMessage(playerid,BABYBLAU,string);
    format(string,144,"(( HQ: %s hat %s %d Strafpunkte gelöscht! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
    for(new i;i<GetMaxPlayers();i++)
    {
    if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
    SendClientMessage(i,BLAU,string);//259
    }
    SpielerInfo[pID][pFscheinPunkte]-=punkte;
    SpielerSpeichern(pID);
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen