Beiträge von Hagi

    Ich habe zumindest noch nie was von so einem disable Befehl gehört. Man möge mich korrigieren wenn ich falsch liege.


    Also was ich machen würde wäre:


    Einen Public via Timer alle, 5 Sekunden aufrufen
    Wenn ein Spieler als Fahrer in einem Pay N Spray ist (IsPlayerInRangeOfPoint) abfragen ob anderen Spieler im Auto sind. (for-loop und Vehicleid des Fahrers == vehicleid der Passagiere).
    Dann dem Passagieren 100 $ geben. Eventuell vorher abfragen ob diese überhaupt Geld zahlen mussten.

    Wär mir jetzt nicht bekannt. Jedoch könntest du ein System baun, dass dem Spieler (Beifahrer) 100 $ gibt, wenn der Fahrer in einen PNS fährt. Jedoch müssteste erstmal alle PNS Positionen rausfinden, da es keinen Callback gibt wenn jemand in einen PNS fährt.

    Wie gesagt mit for durch.

    for(new i = 0;i<MAX_PLAYERS;i++)
    {
    if(PlayerInfo[i][pMember] == 1 || PlayerInfo[i][pLeader] == 1)
    {
    SetPlayerMarkerForPlayer( i, 1, 0xFF0000FF ); // Id 1 würde also in der Farbe allen Spielern angezeigt werden, deren Job = 1 ist // also in den meisten fällen cop
    }
    }

    Ist es möglich, und wenn ja wie, die Streaminfo zu verschieben.
    Mit Streaminfo meine ich die Information über Titel und Stream der unten links eingeblendet wird, wenn man einen Stream für einen Spieler startet.

    Also folgendes Problem.
    Wenn ich ein Filterscript per server.cfg lade, kann ich es InGame per Rcon nicht unloaden. Ich kann höchstens das Filterscript ein zweites mal laden und diesen zweiten Load unloaden.


    Kennt das Problem jemand oder hat jemand eine Lösung ?

    Den Namen kannst du theoretisch mit SetPlayerName ändern. Jedoch könnte das Probleme mit der Speicherung von Userdaten geben, da der Spieler ja jetzt anders heißt. Du könntest allerdings auf den Tag den Namen überprüfen und dann beim Speichern den Tag rausschneiden.


    strfind zum überprüfen ob der Tag drin ist:
    new pname[20];
    GetPlayerName(playerid,pname,sizeof(pname));
    if(strfind(pname,"[Admin]",true,0) != 1) // Wenn er den Tag vorm Namen hat


    strdel um den Tag rauszuschneiden:
    strdel(pname,0,7);

    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pname,MAX_PLAYER_NAME);


    if(classid == 167 && !strcmp(pname,"Atze_Cj",true)) // false, wenn groß und kleinschreibung beachtet werden soll
    {
    return SendClientMessage(playerid,0xFFFFFFFF,"Du bist nicht Atze_Cj!");
    }


    if(dialogid==DIALOG_WORTCHECK)
    {
    if(response==1)
    {
    if(!strcmp(inputtext,"yeahthatsmoney",false))
    {
    SendClientMessage(playerid,HELLGRÜN,"Herzlichen Glückwunsch. {FFFFFF}du hast das Tutorial überstanden, Viel Spaß noch!");
    SetPlayerPos(playerid,608.7551,-1458.3931,14.3765);
    SetPlayerFacingAngle(playerid,274.0303);
    }
    else
    {
    return Kick(playerid);
    }
    }
    }


    Vllt funktionierts, wenn man das ordentlich mit If Else aufschreibt.

    ICh würd aber noch was entscheidendes ändern. Und zwar solltest du den Parameter playerid auch übergeben. Sonst bekommt immer nur der Spieler mit ID 0 (sofern der Bug sich noch so ausprägt) die Punkte wenn andere Spieler ne Stunde gespielt haben.


    forward stunde(playerid);



    SetTimerEx("stunde", 3 600 000 ,1,"i",playerid); // Dann bei OnPlayerConnect



    public stunde(playerid);
    {
    SetPlayerScore(playerid,GetPlayerScore(playerid)+100);


    }


    Eventuell sollte jeder Spieler auch seinen eigenen Timer bekommen. Könnte sein, bin mir grad aber net sicher, dass ein Timer nicht mehrmals parallel laufen kann.

    Und wo haste den SetTimer reingebaut ? Also der Public.
    Vllt wird der Public Wetter ja gar nicht erst aufterufen.


    Aber das lässt sich ganz einfach durch nen logeintrag festestellen.


    public Wetter()
    {
    print("Wetter Public aufgerufen"); // Den hier reinbaun und dann in der server log nach dem Eintrag 'Wetter Public aufgerufen' suchen.
    new rand = random(7);
    switch(rand)
    {
    case 0:
    {
    SetWeather(1);
    }
    case 1:
    {
    SetWeather(9);
    }
    case 2:
    {
    SetWeather(19);
    }
    case 3:
    {
    SetWeather(22);
    }
    case 4:
    {
    SetWeather(8);
    }
    case 5:
    {
    SetWeather(5);
    }
    case 6:
    {
    SetWeather(2);
    }
    }
    SendClientMessageToAll(0x33AA33AA,"Das Wetter hat sich Verändert.");
    return 1;
    }

    Einerseits musst du die random erhöhen, da random eine Zahl von 0 bis max-1 liefert. Also wenn du random 6 machst 0-5.
    Dann kannst du den SendClient auch einmal unten rein posten, dann haste schonmal wieder weniger Byte in deinem Code.


    public Wetter()
    {
    new rand = random(7);
    switch(rand)
    {
    case 0:
    {
    SetWeather(1);
    }
    case 1:
    {
    SetWeather(9);
    }
    case 2:
    {
    SetWeather(19);
    }
    case 3:
    {
    SetWeather(22);
    }
    case 4:
    {
    SetWeather(8);
    }
    case 5:
    {
    SetWeather(5);
    }
    case 6:
    {
    SetWeather(2);
    }
    }
    SendClientMessageToAll(0x33AA33AA,"Das Wetter hat sich Verändert.");
    return 1;
    }


    Soweit sollte der Code funktionieren. Ein Fehler, den ich mir vorstellen könnte ist, dass du den SetTimer in den falschen Public gesetzt hast. Wo istn der SetTimer drin?

    Du musst zwei Dinge machen.
    Einmal musst du ein Pickup erstellen. Das hat aber unter OnPlayerPickUpPickup keine funktion. Es ist praktisch nur als Markierung da.


    Das zweite ist unter OnPlayerKeyStateChange auf einen Enterdruck überprüfen und die Position überprüfen und evt neu setten.

    public OnPlayerText(playerid, text[])
    {
    if(strcmp(text[0],"!",true) == 0)
    {
    //Teamchat
    }
    }


    Das erste Zeichen also im Array text die Nullte Zelle muss ja den Char ! ethalten. Also die erste Zelle auf das Zeichen ! überprüfen.