Anti Vehicle Surfing

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
  • Halo Liebe Mitglieder.
    Kann mir einer vielleicht helfen, Anti-Vehicle Surfing ungefähr so zu scripten?
    Das System sollte so laufen, wenn der Spieler, der auf einem Auto drauf geht (surft) bekommt ganze Zeit eine Nachricht (solange er auf dem Car ist) "* Du verletzt dich auf Fahrzeugen!" und dass sein HP immer -10 wird.
    mfG, Nighthawk.

  • Wenn du bis morgen 14 Uhr warten könntest , kann ich es dir dann per PN zuschicken. Meld dich wenn du es dann morgen haben möchtest.

  • forward VehicleSurfCheck()


    Unter OnGameModeInit:
    SetTimer("VehicleSurfCheck",5000,1); //5000 = 5 Sekunden = Pro 5 sekunden bekommt der Spieler -10 HP


    public VehicleSurfCheck()
    {
    for(new i=0,gmp=GetMaxPlayers(); i<gmp; i++)
    {
    if(IsPlayerConnected(i) && (GetPlayerSurfingVehicleID(i)!=INVALID_VEHICLE_ID))
    {
    new Float:pHealth;
    GetPlayerHealth(playerid,pHealth);
    SendClientMessage(i,0xFFFFFFFF,"* Du verletzt dich auf Fahrzeugen!");
    SetPlayerHealth(i,pHealth-10.0); //-10.0 = wieviel hp vom spieler abgezogen wird
    }
    }
    return 1;
    }


    Müsste funktionieren ^^

  • Mein Code:


    for(new i=0,gmp=GetMaxPlayers(); i<gmp; i++)
    {
    if(IsPlayerConnected(i) && (GetPlayerSurfingVehicleID(i)!=INVALID_VEHICLE_ID))
    {
    new Float:pHealth;
    GetPlayerHealth(i, pHealth);
    SendClientMessage(i, 0xFFFFFFFF, "* Du verletzt dich auf Fahrzeugen!");
    SetPlayerHealth(i, pHealth-5.0);
    }
    }


    Fehler:


    C:\Users\Gürkan\Desktop\Redside German Roleplay\gamemodes\RRL.pwn(11372) : warning 219: local variable "i" shadows a variable at a preceding level
    C:\Users\Gürkan\Desktop\Redside German Roleplay\gamemodes\RRL.pwn(11376) : warning 219: local variable "pHealth" shadows a variable at a preceding level
    C:\Users\Gürkan\Desktop\Redside German Roleplay\gamemodes\RRL.pwn(11377) : error 035: argument type mismatch (argument 2)
    C:\Users\Gürkan\Desktop\Redside German Roleplay\gamemodes\RRL.pwn(11379) : warning 213: tag mismatch
    C:\Users\Gürkan\Desktop\Redside German Roleplay\gamemodes\RRL.pwn(11379) : warning 213: tag mismatch
    C:\Users\Gürkan\Desktop\Redside German Roleplay\gamemodes\RRL.pwn(11376) : warning 203: symbol is never used: "pHealth"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    mfG, Nighthawk.


    //edit: Habe das ganze umgescriptet, nun kommt die Nachricht aber immer 2x, weiß einer vielleicht warum?
    Hier ist mein Code:


    for(new = k=0; k<MAX_PLAYERS; k++)
    {
    if(IsPlayerConnected(k))
    {
    if(GetPlayerSurfingVehicleID(k) != INVALID_VEHICLE_ID))
    {
    new Float:health;
    GetPlayerHealth(k, health);
    SendClientMessage(k, COLOR_GRAD1, "* Du verletzt dich auf Fahrzeugen!");
    SetPlayerHealth(k, health-5.0);
    }
    }
    }


    mfG, Nighthawk.

    Einmal editiert, zuletzt von Nighthawk ()

  • ...du hattest geschrieben das es die ganze Zeit kommen sollsolange der Spieler auf dem Wagen ist? Hab' ich recht?


    Ausserdem warum soll es denn 500 mal loopen wenn es auch die Slotzahl nehmen kann und z.B. wenn du 10 slots offen hast, nur 10 mal loopen kann?
    Das ist doch völlig unnötig MAX_PLAYERS hinzuschreiben, mit GetMaxPlayers ist es sinnvoller.
    Naja ist aber dein Script ;)

  • Ich habe das ganze einfach in OtherTimer (jede Sekunde) reingepackt und dein Timer nicht mitgenommen.
    Nun kommt die Nachricht aber immer 2x und HP wird dann auch wohl 2x abgezogen in einer Sekunde.
    Ich möchte es aber jede Sekunde nur 1x + 1x HP abziehen.
    mfG, Nighthawk.


    //edit: Und wieso 500x loopen? Ich habe oben MAX_PLAYERS definiert
    (#undef MAX_PLAYERS
    #define MAX_PLAYERS 100)

  • Tja. dann wird halt dein OtherTimer vllt 2 mal aufgerufen?
    Vielleicht weil du 2 mal loopst? kp, lösch mal den ganzen surf-code mit dem loop, und mach nur das rein:
    if(IsPlayerConnected(i))
    {
    if(GetPlayerSurfingVehicleID(i) != INVALID_VEHICLE_ID))
    {
    new Float:health;
    GetPlayerHealth(i, health);
    SendClientMessage(i, COLOR_GRAD1, "* Du verletzt dich auf Fahrzeugen!");
    SetPlayerHealth(i, health-5.0);
    }
    }
    ich denke dann wird's klappen.


    €dit://
    Achso.
    Naja GetMaxPlayers finde ich trotzdem immernoch sinnvoller, aber ist dein Script, wie gesagt ^^

  • Ok, ich wollte dich nurnoch über was informieren ^^
    Die beiden tun nicht so ganz das gleiche, MAX_PLAYERS nimmt eine bestimmte Zahl, GetMaxPlayers hingegen nimmt die Zahl die im server.cfg steht.
    z.B. wenn du 100 slots nicht brauchst und es zu 50 gemacht hast, musst du nicht dein Script nochmal kompilieren um ressourcen zu schonen.

  • Aber nachdem du es geändert hast musst du das Script neu compilen, und das dauert bei großen Scripts wie GF sehr lange, warum Zeit verschwenden, wenn man es direkt im server.cfg ändern und abspeichern kann, ohne ca. 1 minute lang warten zu müssen. ^^
    Naja war ja nur ein Rat von mir ^^