Beiträge von Pille

    new bool:VehSpawned[MAX_VEHICLES];


    ocmd:veh(playerid,params[]){
    new carid,colid1,colid2;
    if(sscanf(params,"iii",carid,colid1,colid2)) return SendClientMessage(playerid,COLOR_GREY,"Benutzung: /veh [carid][color1][color2]");
    if(PlayerInfo[playerid][pAdminLevel] >= 3){
    new Float:pos[4];
    GetPlayerPos(playerid,pos[0],pos[1],pos[2]);
    GetPlayerFacingAngle(playerid,pos[3]);
    new car = CreateVehicle(carid,pos[0],pos[1],pos[2],pos[3],colid1,colid2,13337);
    VehSpawned[car]=true;
    PutPlayerInVehicle(playerid,car,0);
    }else{
    SendClientMessage(playerid,COLOR_GREY, "Dies ist ein Adminbefehl, du bist kein Admin.");
    }
    return 1;
    }


    ocmd:dest(playerid,params[])
    {
    for(new i=0;i<MAX_VEHICLES;i++)
    {
    if(VehSpawned[i]==false) continue;
    DestroyVehicle(i);
    }
    }

    In 'SetPVarInt' steckt das Wort Int drin, was die Abkürzung für 'Integer' ist.
    Ein Integer ist ein Variablentyp, der ganze Zahlen abspeichern kann.
    Koordinaten sind aber keine ganzen Zahlen sondern Kommazahlen, sogenannte Floats.


    Also bist du mit GetPVarInt falsch, ich glaube du musst GetPVarFloat benutzen.

    if(!strcmp("/admins",cmdtext,true))
    {
    new bool:found;
    for(new i = 0; MAX_PLAYERS > i;i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(PlayerInfo[i][pAdminLevel]<1) continue;
    if(found==false)
    {
    found=true;
    SendClientMessage(playerid,COLOR_WHITE,"Administratoren online:");
    }
    format(text,sizeof(text),"%s %s [%d]",AdminRang[PlayerInfo[i][pAdminLevel]],PlayerName(i),i);
    SendClientMessage(playerid,COLOR_ADMINS,text);
    }
    if(found==true) return SendClientMessage(playerid,COLOR_WHITE,"===========================");
    SendClientMessage(playerid,COLOR_RED,"Keine Admins online!");
    return 1;
    }


    Dein Fehler:


    Du musst engine auf 1 bzw 0 setzen, wenn du den Motor an bzw. aus gemacht hast.

    Wie würde das den gehen, bitte erkläre das mal.
    Er will Accounts von Offline spielern löschen...
    D.h.:
    Das Script müsste alle dateien der spieler nacheinander öffnen (da ist das Problem, in samp kannst du nicht herausfinden welche dateien es alle in einem Ordner gibt) und nach dem rang suchen wenn dieser 0 ist file schliessen und löschen.


    Ist eigentlich ganz einfach:


    Wenn eine Datei erstellt wird, schreibst du diesen Dateinamen in eine neue Datei, z.B. 'Accounts.lst'.
    Dann kannst du diese auslesen und die Ränge überprüfen!

    public IstSpielerAnATM(playerid)
    {
    if(!IsPlayerConnected(playerid)) return 0;
    if(IsPlayerInRangeOfPoint(playerid,3.0,1807.3879,-1883.2388,13.5813)) return 1;
    if(IsPlayerInRangeOfPoint(playerid,3.0,1465.4390,-1749.0569,15.4453)) return 1;
    if(IsPlayerInRangeOfPoint(playerid,3.0,1366.1569,-1292.1830,13.5469)) return 1;
    if(IsPlayerInRangeOfPoint(playerid,3.0,2126.2576,-1154.0265,23.9997)) return 1;
    if(IsPlayerInRangeOfPoint(playerid,3.0,-2029.4968,156.4366,28.9498)) return 1;
    return 0;
    }


    So? ^^

    if(dini_Int(pfad,"bought") == 1)


    Versuchs mal mit folgendem:


    FirmInfo[Firma][fbought]=dini_Int(pfad,"bought")
    if(FirmenInfo[Firma][fbought]==1)
    {


    }
    else
    {


    }


    //edit:
    Warum dein Compailer einen Warning ausspuckt findest du hier ;)
    //edit2:
    Mist, findest du nicht. Du musst die 3DTextLabel Variable mit "new Text3D:name" deklarieren.
    Glaube dass das so war ^^

    Versuchs so:


    new string[100],count,AdminName[20][MAX_PLAYER_NAME],AdminLevel[20];
    format(string,sizeof(string),"SELECT Name,Admin FROM accounts WHERE Admin > 0");
    mysql_query();
    mysql_store_result();
    count=mysql_num_rows();
    for(new i=0;i<count;i++)
    {
    new lvl[10];
    mysql_fetch_row(string);
    strmid(AdminName[i],string,0,strfind(string,"|",false));
    strmid(lvl,string,strfind(string,"|",false)+1,strlen(string));
    AdminLevel[i]=strval(lvl);
    }
    mysql_free_result();

    Tround:


    Das senkt zwar die Prozessorenarbeit doch deutlich,
    aber im Endeffekt bleibt das Hauptroblem:


    Forschleife in Forschleife. 2000 * MAX_PLAYERS, und dann noch die Abfragen dazwischen.


    Das ist das, was viel Rechenarbeit erfordert.

    Natürlich geht das rasend schnell.
    Prozessoren rechnen mit immer mehr Kernen und Hertz, aber man sollte trotzdem
    seine Zeilen so programmieren, dass sie möglichst wenig Prozessorenarbeit verursachen.


    Was ist ein Script für ein Script, wenn es 50% langsamer ist?

    Danke so funktioniert es einwandfrei.


    funktionieren tut es... aber überleg mal:


    a) Die schleife geht durch alle Autos (2000x)
    b) Jeder Schleifenabruf geht jeden Spieler durch (=2000 * MAX_PLAYERS (100-500)) = 200000 (bei 100))
    c) Bei jedem Durchgang wird überprüft ob der Spieler verbunden ist, ob sein Auto mit dem des aktuellen Autos übereinstimmt, und ob er der Fahrer ist oder nicht.
    d) Das macht dann 200000*3 Abfragen = 600000


    Das überlastet ganz gewiss den Server nicht,
    aber man sollte sich Gedanken machen wie das zu lösen ist ohne den großen Rechenaufwand.


    Wozu sie dinnlosen Deklairungen?


    Um Ressourcen zu sparen! Das ist zwar im Endeffekt mehr Schreibarbeit, mehr Zeilen,
    der Prozessor kann das aber deutlich schneller ausrechnen.


    Wahrscheinlich habe ich irgendwo einen Denkfehler drin, müsste man halt testen.

    new car[MAX_PLAYERS],count;
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(GetPlayerState(i)!=PLAYER_STATE_DRIVER) continue;
    car[count]=GetPlayerVehicleID(i);
    count;
    }


    for(new i=0;i<MAX_VEHICLES;i++)
    {
    new bool:found;
    for(new j=0;j<count;j++)
    {
    if(i==car[j])
    {
    found=true;
    continue;
    }
    }
    if(found==true) continue;
    SetVehicleToRespawn(i);
    }


    So würd ichs machen.

    stock CreateFirma(Float:x, Float:y, Float:z, preis, besitzer[32])


    stock CreateFirma(Float:x, Float:y, Float:z, preis, besitzer[])

    mysql_SetFloat("Firmen", "Skin", "Name", FirmInfo[i][fX]);


    new string[100];
    format(string,sizeof(string),"SELECT ... FROM ... WHERE ... = ...");
    mysql_query();
    mysql_store_result();


    etc..