Beiträge von Hagi

    if(!strcmp(name,"storm",false))


    Den musste auf deinem Namen angleichen


    if(!strcmp(name,"Storm941",false))


    Aber mach das ganze mal so



    public OnRconLoginAttempt(ip[], password[], success)
    {
    if(success == 1)
    {
    new name[MAX_PLAYER_NAME];
    new pip[16];
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    GetPlayerIp(i, pip, sizeof(pip));
    if(!strcmp(ip, pip, true))
    {
    GetPlayerName(i,name,sizeof(name));
    break;
    }
    }
    if(!strcmp(name,"Storm941",false))
    {
    SetPlayerColor(playerid,ROT);
    }
    else
    {
    SetPlayerColor(playerid,GRÜN);
    }
    }
    return 1;
    }


    Okai Sorry MAX_VEHICLES ist doch schon von Samp definiert. Auf 2000.


    Also müsste dein Script mit der Constante MAX_VEHICLES eigentlich arbeiten können.


    Steht include a_samp über der deklaration und initialisierung der Variable Motor ?


    also so.


    include <a_samp>
    new bool:Motor[MAX_VEHICLES]=false;

    newbcar[1] = AddStaticVehicleEx(510,1771.15393066,-1347.25085449,15.45276356,0.00000000,-1,-1,15); //Mountain Bike
    Muss da nicht ne 0 hin? Oder irr ich mich?


    Im Grunde genommen hast du Recht. Man erstellt ja kein Array damit man eine Zelle ohne Wert (Carid) lässt. Man beginnt beim Index immer bei 0. Also bei 10 Zellen die Indizes 0-9.

    MAX_VEHICLES ist nicht von Samp her definiert.
    Du musst es selber unter die defines schreiben


    #define MAX_VEHICLES amount


    Dabei ist amount die Anzahl der Schleifendurchläufe (in deinem Fall) also die Anzahl der Autos auf dem Server.


    Momentan liegt das Limit für Vehicles bei 2000 Vehicles pro Server, wobei ich nicht davon ausgehe, dass du so viele auf deinem Server hast.

    Also geh ich mal von ner Variable aus.


    Nennen wir sie einfach mal
    new wanteds[MAX_PLAYERS];


    // Problem 1: Maximale Wantedanzahl
    Beim Wantedcmd baust du noch folgende Abfrage ein:



    if((wanteds[targetid] + neuewanteds) > limit)
    {
    wanteds[targetid] = limit;
    }


    // Problem 2: Geld beim töten erhalten.
    Unter OnPlayerDeath folgendes


    if(wanteds[playerid] > 0)
    {
    GivePlayerMoney(killerid,wanteds[playerid]*1000); // Gibt dem killer pro Wanteds $1000
    }

    Probiere folgendes:


    • Deinstallieren und Neuinstallieren des Clients mit korrekter Version
    • Lösche die gta_sa.set (Hat mir oft bei einem derartigen Problem geholfen
    • Wenn alles nichts hilft einfach mal komplette Game mit Cliet löschen (Spielstände am besten sichern)

    Über den Arrest Befehl wirst du ins Gefängnis teleportiert und der Timer wird mit der Knastzeit gestartet. Gleichzeitig wird die ID des Hägtlings an den Timer übermittelt.
    Wenn die Zeit dann abgelaufen ist soll der Spieler wieder entlassen werden, was im Public Knast geschiet.


    Dort musst du dann als ID des Spielers nicht playerid sondern arrestid nutzen, das die überlieferte ID darin gespeichert ist.

    Irgentwo ist bei beiden Seiten was dran.


    Zum Einen wäre eine Neuinstallation auf Grund von buggenden Plugins usw sehr ratsam.


    Jedoch nicht zu dem Preis, dass Beiträge oder Profile verloren gehen. Würde man ganz von vorne Anfangen würde sich die Community nie wieder so aufbauen wie sie jetzt existiert. Und ja manche Leute haben echt viel Mühe hier riengesteckt mit Beiträgen und Hilfstellungen. Das zu verlieren würde meines Erachtens nach viele vertreiben.

    An sich haste hier die Zeit ja schon drin.


    SetTimer("Knast",knastzeit,0);


    Problem ist nur, dass man dann keinen zweiten Spieler verhaften kann ohne, dass es rumbuggen wird.
    Musst dann einfach nen Ex Timer nehmen und die Spielerid als parameter übergeben.



    forward Knast(arrestid);


    SetTimerEx("Knast",knastzeit,0,"i",pID);


    public Knast(arrestid)
    {
    // Spieler mit ID = arrestid entlassen
    return 1;
    }

    Also das ist meines Erachtens nach mit die bste Methode.


    Ne Kontrollvariable erstellen, alle Spieler per Schleife durchgehen und bei entsprechenden Abfragen die Variable erhöhen.
    Was man noch verändern könnte ist , wenn du nur einen einzigen Cop duty brauchst, die Schleife danach abzubrechen.
    Spart aber wenig Ressourcen und Zeit. Aber immerhin etwas.



    new cops = 0;
    for(new p = 0; p < MAX_PLAYERS; p++)
    {
    if(IsPlayerConnected(playerid))
    {
    if(IsACop(p) && OnDuty[p])
    {
    cops = 1;
    break;
    }
    }
    }
    if(cops == 0)
    {
    SendClientMessage(playerid, COLOR_RED, "* Es muss mindestens 1 Cop online sein, damit du dich in den Polizei Computer hacken kannst!");
    return 1;
    }

    Solange man Arbeit reinsteckt ist alles gut.
    Dann ist ein editiertes GF genau so gut wie ein Selfmade, wobei das natürlich von richtig viel Engagement zeugt.


    Was nicht schön ist, sind GF etc. welche ohne großartigen Veränderungen als Server aufgesetzt werden und wo man sich dann ne riesen Community ranziehen will.

    Ich glaube, er meint den Hintergrund ^^ Ich denke mal ganz simpel bei OnPlayerConnect:


    SetPlayerCameraLookAt und SetPlayerCameraPos, dann bei OnPlayerSpawn: SetCameraBehindPlayer.

    Also mit den folgenden Befehlen machts du folgendes:


    SetPlayerCameraPos() -> Die Kamera wird an die angegebenen Koordinaten gesetzt
    SetPlayerCameraLookAt() -> Die Kamera wird auf die angegebenen Koordinaten ausgerichtet


    Musst dir nur noch die entsprechenden koordinaten suchen und einsetzen.

    Die entsprechenden Antworten wurden bereits geliefert. Ich zähls hier nochmal auf:


    Das Problem ist nicht die Hp wieder hochzusetzen oder eine Message zu schicken. Das Problem liegt darin, dass man um einen Teamvergleich anstellen zu können den Schützen, dessen ID, wissen muss.
    In 0.3d Soll dies dann ja möglich werden mit dem Callback "OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid) ", wodurch man dann den Spieler issuerid (Schützen) herausbekommt.


    Ohne auf 0.3d zu wechseln muss man mit Vektoren, also verschiedenen Blickwinkeln und Winkeln rechnen und so den Schützen über Positionen herausfinden. Das ist aber an sich schon mal echt nicht leicht.


    Die beste und einfachste Alternative ohne auf 0.3d zu wechseln liegt da wirklich in den Teams, welche serverbasiert keinen Schaden nehmen können.


    Dazu kann parallel auch ein gTeam System laufen.
    Man muss lediglich zur Teamzuweisung des gTeams auch ein entsprechendes ServerTeam zuweisen.


    Also etwa so:



    gTeam[playerid] = 0;
    SetPlayerTeam(playerid,0); // alternativ: SetPlayerTeam(playerid,gTeam[playerid]);


    // oder


    gTeam[playerid] = 1;
    SetPlayerTeam(playerid,1); // alternativ: SetPlayerTeam(playerid,gTeam[playerid]);


    Wichtig ist, dass man vorher die Anzahl der Teams per



    SetTeamCount(amount) // z.B. SetTeamCount(2);


    festlegt.



    Also das sind so die möglichkeiten die man momentan hat.


    MFG
    Hagi

    Ja dann die Autos per Auto INcrement speichern, sodass die Spalte ID immer fortlaufend erhöht wird.
    Dann beim Start ne Abfrage senden wie viele Datensätze vorhanden sind und diese Anzahl als Bedingungswert für eine for-Schleife nehmen.

    In welchen Fällen willst du denn die Autos laden?


    Wenn die geladen werden sollen wenn die Spieler online kommen, dann machts kein Sinn. Dann würde ich in einer Spalte die Eigentümer aufführen und mir alle Einträge anzeigen lassen die deren Namen enthalten. Die Anzahl sollte dann gleich der Anzahl sein, welche vllt in der Userdatei als Autos eingetragen ist.


    Anschließen können die Autos dann einfach geladen werden.

    Ist ja klar, dass keine schreiben kann der nicht Admin ist


    if (SpielerInfo[playerid][pAdmin] < 1)
    {
    SendClientMessage(playerid, COLOR_GRAD2, " Der OOC channel wurde von einem Admin ausgeschaltet !");
    return 1;
    }
    if(SpielerInfo[playerid][pMuted] == 1)
    {
    SendClientMessage(playerid, TEAM_CYAN_COLOR, " Du kannst nicht sprechen, du bist gemutet !");
    return 1;
    }


    Mann muss Adminlevel 1 sein, da man ansonsten nicht schreiben kann. Ich finde auch nirgentwo deine Variable auf die Abfrage von noooc