[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
  • Mein Script sagt mir das die Zeile zu lang ist wie kann ich sie sinnvoll trennen?
    format(query, sizeof(query), "UPDATE accounts SET Geld='%i',Level='%i',Adminlevel='%i',IP='%i',Banned='%i',Bangrund='%i',Banadmin='%s',Fraktion='%i',Rang='%i',FPunkte='%i' WHERE Name='%s'", GetPlayerMoney(playerid), GetPlayerScore(playerid), SpielerInfo[playerid][pAdminlevel], SpielerInfo[playerid][pIP], SpielerInfo[playerid][pBanned], SpielerInfo[playerid][pBangrund], SpielerInfo[playerid][pBanadmin], SpielerInfo[playerid][pFraktion], SpielerInfo[playerid][pRang], SpielerInfo[playerid][pFscheinPunkte], NamePlayer(playerid));
    mysql_tquery(mysqlHandle, query);

  • Einfach zwischen den Parametern, da ist es kein Problem:
    format(query, sizeof(query), "UPDATE accounts SET Geld='%i',Level='%i',Adminlevel='%i',IP='%i',Banned='%i',Bangrund='%i',Banadmin='%s',Fraktion='%i',Rang='%i',FPunkte='%i' WHERE Name='%s'",
    GetPlayerMoney(playerid), GetPlayerScore(playerid), SpielerInfo[playerid][pAdminlevel], SpielerInfo[playerid][pIP], SpielerInfo[playerid][pBanned],
    SpielerInfo[playerid][pBangrund], SpielerInfo[playerid][pBanadmin], SpielerInfo[playerid][pFraktion], SpielerInfo[playerid][pRang], SpielerInfo[playerid][pFscheinPunkte], NamePlayer(playerid));
    mysql_tquery(mysqlHandle, query);

  • Jeffry:
    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;
    }


    Er zeigt mir die Ganze zeit an das ich die Parameter falsch eintrage (Ingame).
    Das heißt die Meldung "Tippe: /punkte [id][anzahl][grund]".
    Hast du ne lösung=

  • ocmd:getip(playerid,params[])
    {
    if(!isPlayerAnAdmin(playerid,4))return SendClientMessage(playerid,-1,"Du hast kein Admin Level 4");
    {
    new pID,string[128];
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,-1,"Spieler ist nicht Online");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,-1,"Tippe : /getip [playerid]");
    {
    new playersip[16], query[50];
    GetPlayerIp(pID,playersip,sizeof(playersip));
    format(string,sizeof(string),"Die IP vom Spieler %s ist %s",NamePlayer(pID),playersip);
    SendClientMessage(playerid,-1,string);
    format(query, sizeof(query), "UPDATE accounts SET IP = '%d'",playersip);
    mysql_tquery(mysqlHandle, query, "", "");
    }
    }
    return 1;
    }


    SpielerInfo[playerid][pIP] um es aufzurufen.


    stock SpielerSpeichern(playerid)
    {
    new query[256];
    if(SpielerInfo[playerid][pEingeloggt] == false) return 1;
    mysql_escape_string(NamePlayer(playerid), NamePlayer(playerid));
    format(query, sizeof(query), "UPDATE accounts SET Geld='%i',Level='%i',Adminlevel='%i',IP='%i',Banned='%i',Bangrund='%i',Banadmin='%s',Fraktion='%i',Rang='%i',FPunkte='%i',pPerso='%i' WHERE Name='%s'",
    GetPlayerMoney(playerid), GetPlayerScore(playerid), SpielerInfo[playerid][pAdminlevel], SpielerInfo[playerid][pIP], SpielerInfo[playerid][pBanned],
    SpielerInfo[playerid][pBangrund], SpielerInfo[playerid][pBanadmin], SpielerInfo[playerid][pFraktion], SpielerInfo[playerid][pRang], SpielerInfo[playerid][pFscheinPunkte], SpielerInfo[playerid][pPerso], NamePlayer(playerid));
    mysql_tquery(mysqlHandle, query);
    printf("Acc gespeichert (%s)",NamePlayer(playerid));
    return 1;
    }


    SpielerInfo[playerid][pIP] = cache_get_field_content_int(0, "IP", mysqlHandle);


    Jeffry:


    Ich hab keine Errorcodes.
    Er will das nicht in die Datenbank eintragen :P
    In der Datenbank steht immer 0.

  • @FerienFreak: Du musst die IP als String speichern und auch wieder laden.

    Einmal editiert, zuletzt von AirM4X ()

  • Jeffry: Der Speichert einfach nicht so, wie er soll -.- das Leben wird auch nicht gespeichert, bis ich mich nicht zu einem Admin mache :wacko: total bekloppt das ganze :D

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

    – Noël Coward

  • Eddy: Lass mal den Query printen und poste das Ergebnis hier.


    Habe mal alle Query printen lassen, und da kommt folgendes bei raus:


    Spoiler anzeigen
    [10:59:26] Number of vehicle models: 0
    [10:59:47] Incoming connection: 127.0.0.1:52255
    [10:59:47] [join] Eddy_Mind has joined the server (0:127.0.0.1)
    [10:59:47] SELECT COUNT(*) AS `count` FROM `Accounts` WHERE `pName` = 'Eddy_Mind'
    [10:59:50] INSERT INTO `Accounts` (`pName`, `pPasswort`, `pAlter`, `pGeburtsdatum`, `pGeschlecht`, `pAdminlevel`, `pBanned`, `pBargeld`, `pKontoguthaben`, `pLastLogin`, `pRegDatum`, `pVersuche`, `pLeben`) VALUES ('Eddy_Mind','test','0','0','0','0','0','0','0','2014.12.23 - 10:59:50','2014.12.23 - 10:59:50','0','100.0')
    [10:59:53] UPDATE `Accounts` SET `pAlter` = '784724393', `pAdminlevel` = '0', `pGeburtsdatum` ='0',`pGeschlecht` ='1', `pBanned` = '0', `pBargeld` = '0', `pKontoguthaben` = '0', `pLastLogin` = '2014.12.23 - 10:59:53', `pLeben` = '0.0' WHERE `pName` = 'Eddy_Mind'
    [11:00:03] UPDATE `Accounts` SET `pAlter` = '784724393', `pAdminlevel` = '5', `pGeburtsdatum` ='0',`pGeschlecht` ='1', `pBanned` = '0', `pBargeld` = '0', `pKontoguthaben` = '0', `pLastLogin` = '2014.12.23 - 11:00:3', `pLeben` = '0.0' WHERE `pName` = 'Eddy_Mind'
    [11:00:05] [part] Eddy_Mind has left the server (0:1)

    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
  • Es laggt immernoch ...



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


    //ONPLAYERSPAWN
    SetTimer("StatsUpdateTimer",3500,true);


    ocmd:update(playerid,params[])
    {
    if(GetPVarInt(playerid,"Eingeloggt") == 1)//Textdraw41 = Killstreak , Textdraw42 = Score, 43= Rank, 44=Klasse , 45=Kills, 46=Tode
    {
    new KillstreakTextdraw[144],ScoreTextdraw[144],KillsTextdraw[144],TodeTextdraw[144],GetRankTextdraw[144], GetKlasseTextdraw[144];
    SpielerInfo[playerid][pKillStreak] = 0;
    format(KillstreakTextdraw, sizeof(KillstreakTextdraw), "Killstreak: %i", SpielerInfo[playerid][pKillStreak]);
    PlayerTextDrawSetString(playerid,Textdraw41[playerid],KillstreakTextdraw);
    format(TodeTextdraw, sizeof(TodeTextdraw), "Tode: %i", SpielerInfo[playerid][pTode]);
    PlayerTextDrawSetString(playerid,Textdraw46[playerid],TodeTextdraw);
    format(GetRankTextdraw, sizeof(GetRankTextdraw), "Rank: %s", GetRank(playerid));
    PlayerTextDrawSetString(playerid,Textdraw43[playerid],GetRankTextdraw);
    format(KillsTextdraw, sizeof(KillsTextdraw), "Kills: %i", SpielerInfo[playerid][pKills]);
    PlayerTextDrawSetString(playerid,Textdraw45[playerid],KillsTextdraw);
    format(ScoreTextdraw, sizeof(ScoreTextdraw), "Score: %i", SpielerInfo[playerid][pScore]);
    PlayerTextDrawSetString(playerid,Textdraw42[playerid],ScoreTextdraw);
    format(GetKlasseTextdraw, sizeof(GetKlasseTextdraw), "Klasse: %s", GetKlasse(playerid));
    PlayerTextDrawSetString(playerid,Textdraw44[playerid],GetKlasseTextdraw);
    StatusBoxTextdrawsLoad(playerid);
    }
    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[playerid][pNoKillStreak]);
    PlayerTextDrawSetString(playerid,Textdraw41[playerid],KillstreakTextdraw);
    format(TodeTextdraw, sizeof(TodeTextdraw), "Tode: %i", NoSpielerInfo[playerid][pNoTode]);
    PlayerTextDrawSetString(playerid,Textdraw46[playerid],TodeTextdraw);
    format(GetRankTextdraw, sizeof(GetRankTextdraw), "Rank: %s", GetRank(playerid));
    PlayerTextDrawSetString(playerid,Textdraw43[playerid],GetRankTextdraw);
    format(KillsTextdraw, sizeof(KillsTextdraw), "Kills: %i", NoSpielerInfo[playerid][pNoKills]);
    PlayerTextDrawSetString(playerid,Textdraw45[playerid],KillsTextdraw);
    format(ScoreTextdraw, sizeof(ScoreTextdraw), "Score: %i", NoSpielerInfo[playerid][pNoScore]);
    PlayerTextDrawSetString(playerid,Textdraw42[playerid],ScoreTextdraw);
    format(GetKlasseTextdraw, sizeof(GetKlasseTextdraw), "Klasse: %s", GetKlasse(playerid));
    PlayerTextDrawSetString(playerid,Textdraw44[playerid],GetKlasseTextdraw);
    StatusBoxTextdrawsLoad(playerid);
    }
    return 1;
    }
    //Und die Kills werden nicnt angezeigt, und ich muss doch MAX_PLAYERS abfragen? Dass jeder Spieler der online ist doch aktuliesert wird oder nicht? Oder braucht man dass nicht?

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

  • Ich bekomme da diesen Warning:


    PHP
    warning 202: number of arguments does not match definition



    public StatsUpdateTimer(playerid)
    {


    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(playerid, i)) ocmd_update(i,"");//hier
    }
    return 1;
    }

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

  • hallo ich habe ein Problem bzw 2 Probleme 1 wird mir der Checkpoint bei /tfind nicht gesetzt ( ich will den toten Spieler suchen )
    und das 2 es werden die kordinaten wo der Spieler gestorben ist nicht gespeichert ?



    savePlayer(playerid)
    {
    sInfo[playerid][eingeloggt] = 1;
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',skin='%i',money='%i',geschlecht='%i',alevel='%i',slevel='%i',fraktion='%i',rang='%i',leader='%i',coleader='%i',spawnchange='%i',perso='%i',palter='%i',pjob='%i',ptot='%i',kGeld='%i',tx='%f',ty='%f',tz='%f' WHERE id='%i'",
    GetPlayerScore(playerid),GetPlayerSkin(playerid),GetPlayerMoney(playerid),sInfo[playerid][geschlecht],sInfo[playerid][alevel],sInfo[playerid][slevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][leader],sInfo[playerid][coleader],sInfo[playerid][spawnchange],sInfo[playerid][perso],sInfo[playerid][palter],sInfo[playerid][pjob],sInfo[playerid][PTot],sInfo[playerid][kGeld],sInfo[playerid][dx],sInfo[playerid][dy],sInfo[playerid][dz],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    return 1;
    }


    stock SaveAllPlayers()
    {
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
    {
    if(!IsPlayerConnected(playerid)) continue;
    new query[256];
    format(query,sizeof(query),"UPDATE user SET level='%i',skin='%i',money='%i',geschlecht='%i',alevel='%i',slevel='%i',fraktion='%i',rang='%i',leader='%i',coleader='%i',spawnchange='%i',perso='%i',palter='%i',pjob='%i',ptot='%i',kGeld='%i',tx='%f',ty='%f',tz='%f' WHERE id='%i'",
    GetPlayerScore(playerid),GetPlayerSkin(playerid),GetPlayerMoney(playerid),sInfo[playerid][geschlecht],sInfo[playerid][alevel],sInfo[playerid][slevel],sInfo[playerid][fraktion],sInfo[playerid][rang],sInfo[playerid][leader],sInfo[playerid][coleader],sInfo,sInfo[playerid][spawnchange],sInfo[playerid][perso],sInfo[playerid][palter],sInfo[playerid][pjob],sInfo[playerid][PTot],sInfo[playerid][kGeld],sInfo[playerid][dx],sInfo[playerid][dy],sInfo[playerid][dz],sInfo[playerid][db_id]);
    mysql_function_query(dbhandle,query,false,"","");
    }
    return 1;
    }


    public OnPlayerDeath(playerid, killerid, reason)
    {
    sInfo[playerid][PTot] = 1;
    new Float:ptx,Float:pty,Float:ptz,string[80];
    sInfo[playerid][dx] = ptx;
    sInfo[playerid][dy] = pty;
    sInfo[playerid][dz] = ptz;
    GetPlayerPos(playerid, ptx,pty,ptz);
    TotenKopf[playerid] = CreatePickup(1254,1,ptx,pty,ptz);
    format(string,sizeof(string),"Leichen Name\nvon %s",getPlayerName(playerid));
    TotenName[playerid] = Create3DTextLabel(string,GRAU,ptx,pty,ptz,10,GetPlayerVirtualWorld(playerid),0);
    format(string, sizeof(string),"Der Spieler %s ID %i ist soeben gestorben!",getPlayerName(playerid),playerid);
    SendOndutyMedicMessage(GELB,string);
    if(sInfo[playerid][kGeld] > 0)
    {
    if(isPlayerInFrakt(killerid,15))
    {
    GivePlayerMoney(killerid, sInfo[playerid][kGeld]);
    GameTextForPlayer(playerid,"~r~Du warst ein auftrag der Hitmans",2000,0);
    GameTextForPlayer(killerid,"~r~Auftrag Erledigt",2000,0);
    format(string,sizeof(string),"Der Spieler %s hat den auftrag erledigt und %s gekillt.",getPlayerName(killerid),getPlayerName(playerid));
    SendHitmanMessage(BRAUN,string);
    format(string,sizeof(string),"Er erhät nun das ausgesetzte Kopfgeld in Höhe von %i$.",sInfo[playerid][kGeld]);
    SendHitmanMessage(BRAUN,string);
    sInfo[playerid][kGeld] = 0;
    }
    }
    return 1;
    }


    ocmd:tfind(playerid,params[])
    {
    new pID,Float:x,Float:y,Float:z;
    if(!isPlayerInFrakt(playerid,3)) return SendClientMessage(playerid,ROT,"Du bist Kein Meidc");
    if(sInfo[playerid][mduty] == 0) return SendClientMessage(playerid,ROT,"Du bist nicht als Medic Onduty");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,ROT,"Benutze: {D6D6D6}/tfind [ID]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,ROT,"Ein Spieler mit dieser ID ist nicht online!");
    if(sInfo[pID][PTot] == 0) return SendClientMessage(playerid,ROT,"Der gesuchte Spieler ist nicht Tot!");
    sInfo[pID][dx] = x;
    sInfo[pID][dy] = y;
    sInfo[pID][dz] = z;
    SetPlayerCheckpoint(playerid, x,y,z, 3.5);
    printf("Der Spieler %s hat nach dem Toten Spieler %s gesucht)",getPlayerName(playerid),getPlayerName(pID));
    return 1;
    }

  • Problem 1:
    sInfo[pID][dx] = x;
    sInfo[pID][dy] = y;
    sInfo[pID][dz] = z;


    zu:
    x = sInfo[pID][dx];
    y = sInfo[pID][dy];
    z = sInfo[pID][dz];



    Problem 2:
    new query[256];
    zu:
    new query[512];


    PS: Für solche riesen-Codes lieber einen neuen Thread auf machen, das ist (schon von der Größe her) keine "kleine" Frage mehr. ;)

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