Beiträge von Goldkiller

    Was hat
    CreateObject(2942, 1504.5009765625, -1699.6123046875, 13.714774131775, 0, 359.74731445313, 90.499877929688);//beim LSPD atm
    CreateObject(2942, 1192.9504394531, -916.55194091797, 42.814529418945, 0, 0, 5.4959716796875); //burger atm
    mit den Automaten bzw mit dem Aufruf von Geldautomat() zu tun? Du müsstest doch irgendwo SetTimer() haben o0.

    stock ReturnFormat(line)
    {
    new frm[24];
    format(frm, sizeof(frm), "Zeile%d", line);
    return frm;
    }
    Die Funktion gibt doch ganz klar ein String / Array zurück.

    Zitat

    TextDrawSetString(ChatControl[playerid][ReturnFormat(dest)], ChatControl[playerid][ReturnFormat(line)]);


    Die Fehler hab ich markiert.An dieser Stelle wird von dir durch die Funktion ein String / Array zurückgegeben, aber du musst dort entweder direkt den Variablennamen ( Falls enum ) oder eine Zahl eintragen.


    TextDrawSetString(ChatControl[playerid][ReturnFormat(dest)], ChatControl[playerid][ReturnFormat(line)]);

    Der Erste Parameter muss doch der Textdraw sein,glaube du hast dort auch etwas falsch eingetragen.
    Falls du willst das dort bspw sowas steht.

    Zitat

    TextDrawSetString(ChatControl[playerid][Zeile14], ChatControl[playerid][Zeile15);


    Müsstest du es anders machen,ein einfacher Weg fällt mir gerade auf die schnelle nicht ein.
    Trotzdem noch eine kurze zwischenfragen,

    Wollt ihr nicht verstehen,dass die Funktion GetPlayerHealth eine Andere Syntax hat ?
    Kein Wunder das ihr immer Warnings bekommt.
    // Sets players health to 50 if it was lower than
    // 50 before, as soon as he typed /doctor

    if(strcmp(cmdtext, "/doctor", true) == 0)
    {
    new Float:health;
    GetPlayerHealth(playerid,health);
    if (health < 50.0)
    {
    SetPlayerHealth(playerid, 50.0);
    }
    return 1;
    }
    Das Gleiche gilt auch für GetPlayerAmor(),da wird ebenfalls ein 2 Parameter benötigt.


    >> GetPlayerHealth
    >> GetPlayerArmour



    CMD:duty(playerid,params[] )
    {
    if(PlayerInfo[playerid][AdminLevel]>=2)
    {
    new //
    Float:fArmour; //
    SetPlayerColor(playerid,0x950000FF);
    SendClientMessageToAll(0x800000FF,"__________________________________");
    SendClientMessageToAll(0x800000FF," Ein Admin ist nun on Duty!!! ");
    SendClientMessageToAll(0x800000FF,"__________________________________");
    SetPlayerHealth(playerid,100);
    SetPlayerArmour(playerid,100);
    GetPlayerArmour(playerid,fArmour); //
    if(fArmour < 100) //
    {
    SetPlayerArmour(playerid,100);
    }
    }
    }


    Mit dem Include aus dem Anhang ist es möglich.
    new Bit: Blabla[MAX_PLAYERS][5]; // 5 * 32 Flags können dann theoretisch gesetzt werden.


    Zitat

    was ist denn ~ ?


    Ehm, mit double schon versucht?


    Bitmanipulation
    Hab das schon mal hier im Forum ansatzweise erklärt gehabt --> Klick

    Ich verstehe was du meinst,vor der gleiche Frage stand Ich auch schon mal.
    Du arbeitest also auch direkt mit Bits,richtig?
    Ich weiss da auch keinen einfachen Weg, wie man es direkt verarbeiten könnte mit mehr als 32 Teams o.Ä. . Das Einzige was mir damals dazu einviel war, ein eine weitere Variable zu erstellen um dort alle Bits zu setzen die über 32 sind bzw FRAKTION_XYZ - 32.
    Würde mich aber auch interessieren ob jemand dafür eine einfachere Lösung hat.

    Bist du dir sicher dass du BIGINT überhaupt in deiner Database brauchst?
    Wäre vielleicht Hilfreich wenn du den Zweck für dein BIGINT angibst.

    Zitat

    ja ein normaler int geht nur bis 2,1 mrd


    Quatsch.
    −2.147.483.648 bis 2.147.483.647
    //Edit: Sorry,Hab Millionen gelesen,nicht Milliarden :pinch:

    Ich hab das Script jetzt nicht ausprobiert, scheint aber Probleme mit der Serverauslastung zu geben.


    Ich hab mal das Script überflogen,kein Wunder das die Auslastung hoch sein soll.
    Was allein schon alles bei "public GlobalTimer()" abgearbeitet wird ist doch ein riesen haufen.

    if (settime[0] < 10)
    {
    format(outputcl,sizeof(outputcl),"0%d:",settime[0]);
    } else {
    format(outputcl,sizeof(outputcl),"%d:",settime[0]);
    }



    Das kann man auch einfacher formatieren.

    format(outputcl,sizeof(outputcl),"%02d:",settime[0]);



    //public speedcontrol()


    if (GetVehicleModel(GetPlayerVehicleID(i)) == 509||
    GetVehicleModel(GetPlayerVehicleID(i)) == 481||
    GetVehicleModel(GetPlayerVehicleID(i)) == 510)
    {

    Das lässt sich auch Resourcenschonender scripten.

    new
    vehicleid = GetPlayerVehicleID(i),
    modelid = GetVehicleModel(vehicleid);
    if(modelid == 509 || modelid == 481 || modelid == 510) { }

    Sowas gibt es auch öfters bei dir im Script.

    enum waffeninfo
    {
    wischein,
    wimunition,
    wipreis,
    wipreis2,
    wisellatdeal,
    wiwaffenname[256]
    }

    Selbstverständlich wird der Waffenname niemals auch nur annähernt 256Zeichen lang.Das gleiche gilt für carname.
    Du hast sehr oft strings erstellt die 256 Zeichen erfassen können,du nutzt die Größe aber nirgendwo auch nur Ansatzweise aus.

    SetTimer("speedcontrol",500, true);

    Ist es wirklich nötig so häufig die Geschwindigkeit zu überprüfen?Ich würde es eher auf +- 1000ms stellen.


    Ich könnte noch viele weitere Stellen zeigen, wo du nicht wirklich Ressourcen schonend gescriptet hast, doch Ich
    warte erstmal ein Update ab.Das sind jetzt aber nur die kleineren Probleme.


    Ich empfehle dir ganz stark diesen Thread: http://forum.sa-mp.com/index.php?topic=79810.0
    Da steht alles wichtige drin.Es gibt auch irgendwo einen Thread dazu hier im Forum,den find ich aber gerade nicht :p.

    new rand[MAX_PLAYERS]; //new rand steht für random
    new rand = random(sizeof(gRandomPlayerCP));

    Spätestens hier hättest du mindestens eine Warnung vom Script.

    Schonmal statt


    SetTimerEx("autokickplayer", 30000, 0, "us", playerid, "Login fehlgeschlagen"); // statt i ein u


    Da verwechselst du wohl etwas.u gibt es nur bei sscanf() ;-).


    Wenn du das wirklich so im Script hast,müsste der Fehler irgendwo Anderes liegen,nur nicht bei SetTimerEx() ;).
    Ich seh jetzt auch nicht wirklich einen Fehler ( :pinch: ),versuch es trotzdem mal mit Debug Notes.
    print("SetTimerEx()");
    SetTimerEx("autokickplayer", 30000, 0, "is", playerid, "Login fehlgeschlagen");


    public autokickplayer(pID, grund[])
    {
    print("-- Debug #1");
    KillTimer(logintimer[pID]);
    print("-- Debug #2");
    new string[100];
    print("-- Debug #3");
    new File:ban=fopen(BanLog, io_append);
    print("-- Debug #4");
    getdate(Jahr, Monat, Tag);
    print("-- Debug #5");
    gettime(Stunde, Minute, Sekunde);
    print("-- Debug #6");
    format(string, sizeof(string2), "[%d/%d/%d][%d:%d:%d] [Kick] Name: %s, IP: %s, Admin: Server, Grund: %s\r\n", Tag, Monat, Jahr, Stunde, Minute, Sekunde, gPlayerInfo[pID][PLAYER_NAME], gPlayerInfo[pID][PLAYER_IP], grund[0] ? grund : "<kein Grund>");
    print("-- Debug #7");
    fwrite(ban, string);
    print("-- Debug #8");
    fclose(ban);
    print("-- Debug #9");
    format(string, sizeof(string), "\"%s\" wurde vom Server gekickt. (Grund: %s)", gPlayerInfo[pID][PLAYER_NAME], grund[0] ? grund : "-");
    print("-- Debug #10");
    SendClientMessageToAll(COLOR_YELLOW, string);
    print("-- Debug #11");
    Kick(pID);
    print("-- Debug #12");
    return 1;
    }

    Ich frag mich eher wieso es funktioniert,denn
    if(strcmp(Firma[f][fBesitzer],PlayerName(playerid), false ) != 0)
    ist glaub ich nicht was du willst.Die Abfrage prüft ob der Besitzer nicht der Spielername ist.
    if(!strcmp(Firma[f][fBesitzer],PlayerName(playerid), false ))


    Anstatt dir kannst du auch cmdtext[12] nehmen, das müsste auch funktionieren ( Falls ich mich nicht verzählt habe ).
    Dennoch würde ich dir lieber dcmd + sscanf empfehlen, damit hättest du das Problem bestimmt schon längst gelöst ;).


    Kurze Erklärung zur 12.
    /firmenname hat 11 Zeichen + 1 Leerzeichen macht 12.Man nimmt den text der nach "/firmenname " folgt.
    if (!strlen(cmdtext[12]))
    {
    SendClientMessage(playerid, COLOR_WHITE, "Benutze: /firmenname [Name]");
    return 1;
    }
    else
    {
    strmid(Firma[f][fName], dir, 0, cmdtext[12], 128);
    format(str, sizeof(str), "Firmen Name wurde geändert: %s",Firma[f][fName]);
    OnFirmaUpdate(f);
    SendClientMessage(playerid, COLOR_WHITE, str);
    return 1;
    }

    Unnötiger Beitrag,xivo.


    Es scheint tatsächlich Probleme mit CreatePlayer3DTextLabel zu geben.Genau sagen wieso es so ist kann Ich nicht, mir ist nur aufgefallen, dass nach einem GMX mir nix angezeigt wurde.
    public OnPlayerConnect(playerid)
    {
    CreatePlayer3DTextLabel(playerid,"[/Adminsperre(weg)] Für die Adminsperre,\nDamit niemand in die Adminbase einbrechen kann.",0x008080FF,1427.1691,2792.6880,14.8203,50.0);
    return 1;
    }

    Wenn ich den Server starte und dann connecte, zeigt er mir hier aber was an ... Komisch :wacko:

    http://www.virustotal.com/de/
    Lad die *.EXE mal dort hoch und poste den Link der Auswertung hier hin.


    Was soll man dazu sagen, noch naiver kann man doch nicht sein? Da hast Du einfach nur Pech gehabt, ich lass mir doch keine .exe per ICQ andrehen... vielleicht wenn ich denjengen sehr gut kenne und jeden Tag mit ihm zutun habe.


    Genau, dann kommt es erst gar nicht zu solchen Zwischenfällen.

    Wäre nicht richtig.
    Ich hab das schon öfters erklärt, aber irgendwie hat es nix gebracht.


    public OnPlayerSpawn(playerid)
    {
    //if(IsPlayerAdmin(playerid)) {
    //if(PlayerInfo[playerid][pAdmin] >= 2) {
    if(AdminLevel[playerid] >= 2) {
    CreatePlayer3DTextLabel(playerid,"Für das admintor /Admintor",0x008080FF,x,y,z,drawdistance);
    }
    return 1;
    }