Fahrzeug nur ab bestimmter Kill Score

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
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
  • Hallo Leute Ich habe mal eine frage und zwar möchte ich bei meinem DM GM autos einbauen die aber erst ab eineer bestimmten Kill Score gefahren werden können zbs ab 200 Kills wenn einer nicht soviele kills hat sollte er rausgeschmiessen werden und im chat stehen du hast noch zu wenige kills für dieses Fahrzeug wie geht sowas am einfachsten ? hoffe einer kann mir helfen :thumbup:

    2 Mal editiert, zuletzt von Manuel20 ()

  • Es gibt kompletzirte art und die leichte. Die leichte wäre:



    if(GetVehicleModel(vehicleid) == 432)
    {
    if(Kill[playerid] < 2)
    {
    GameTextForPlayer(i, "~w~ Es werde 2 Kills Benötigt~w~!", 2000, 3);
    RemovePlayerFromVehicle(playerid);
    }
    }


    Das ist ein Beispiel in leicht

  • new Kills[MAX_PLAYERS];


    OnPlayerDeath:


    Kills[killerid]+=1;


    Dann musst du die Kills halt in dem Account speichern.



    Und dann bei OnPlayerStateChange speziell - if(newstate == PLAYER_STATE_DRIVER)


    musst du das einfügen:


    new vehicleid = GetPlayerVehicleID(playerid);


    if(GetVehicleModel(vehicleid) == 400 && Kills[playerid] < 200) // 400 zur Model ID ändern die du abfragen willst, und bei 200 die Kills.
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,COLOR_GRAD2,"Für dieses Fahrzeug brauchst zu 200 Kills!");
    }

  • Gibt zwei arten:


    else if(GetVehicleModel(vehicleid) == 401 && Kills[playerid] < 150) // 401 zur Model ID ändern die du abfragen willst, und bei 150 die Kills.
    {
    RemovePlayerFromVehicle(playerid);
    SendClientMessage(playerid,COLOR_GRAD2,"Für dieses Fahrzeug brauchst zu 150 Kills!");
    }


    Oder aber du machst das so: (dynamisch)


    #define KILL_CARS 4 // 4 = Anzahl der Autos


    new KillInfo[KILL_CARS][2] = {
    {400,200},// Nach dem Schema Model-ID, Kills
    {401,150},
    {402,125},
    {403,100}
    };


    forward CheckKillCars(playerid,vehicleid);


    Den Scheiß bei if(newstate == PLAYER_STATE_DRIVER) was ihr dir vorgeschlagen habe, wieder entfernen und das einfügen.


    new vehicleid = GetPlayerVehicleID(playerid);
    CheckKillCars(playerid,vehicleid);


    Und dann irgendwo im Script:



    public CheckKillCars(playerid,vehicleid)
    {
    new string[128];
    for(new i = 0; i <= KILL_CARS; i++)
    {
    if(GetVehicleModel(vehicleid) == KillInfo[i][0])
    {
    if(Kills[playerid] < KillInfo[i][1])
    {
    RemovePlayerFromVehicle(playerid);
    format(string,128,"Nicht genügend Kills! Benötigt %d!",KillInfo[i][1]);
    SendClientMessage(playerid,COLOR_GRAD2,string);
    return 1;
    }
    }
    }
    return 1;
    }


    Ist ungetestet, sollte aber funktionern.
    Es ist bei weitem einfacher Autos hinzuzufügen, einfach die #define Variable erhöhen immer und dann das Auto nach dem Schema Model-ID, Kills einfügen.

  • leider noch errors :S


    C:\pwn(7051) : error 017: undefined symbol "Kills"
    C:\pwn(7051) : warning 215: expression has no effect
    C:\pwn(7051) : error 001: expected token: ";", but found "]"
    C:\pwn(7051) : error 029: invalid expression, assumed zero
    C:\pwn(7051) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    alles in dieser zeile:


    if(Kills[playerid] < KillInfo[i][1])


    und wo kommt jetzt genau das rein :


    new vehicleid = GetPlayerVehicleID(playerid);
    CheckKillCars(playerid,vehicleid);


    hier oder ? public OnPlayerStateChange(playerid, newstate, oldstate)


    da habe ich aber schon das drin wie kann ich das noch dazu fügern also das habe ich im mom schon drin :


    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if (newstate == PLAYER_STATE_DRIVER)
    {
    if(GetPlayerVehicleID(playerid) == 416) {
    new rand = random(3), Float:Health;
    if(rand == 1) {
    SendClientMessage(playerid,COLOR_RED,"- blabla");
    if(GetPlayerHealth(playerid, Health) > 60) SetPlayerHealth(playerid,100);
    else SetPlayerHealth(playerid,Health+(rand*13));
    }
    }
    if (newstate == 2) KillTimer(dbtime);
    if (newstate == PLAYER_STATE_ONFOOT) AntiDriveBy(playerid);
    }
    return 1;
    }

  • Das für das Kills Problem ;)


    Und zum rest:
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if (newstate == PLAYER_STATE_DRIVER)
    {
    new vehicleid = GetPlayerVehicleID(playerid);
    new vehiclemodel = GetVehicleModel(vehicleid);
    CheckKillCars(playerid,vehiclemodel);


    if(vehiclemodel == 416)
    {
    new rand = random(3), Float:Health;
    if(rand == 1)
    {
    SendClientMessage(playerid,COLOR_RED,"- blabla");
    if(GetPlayerHealth(playerid, Health) > 60) SetPlayerHealth(playerid,100);
    else SetPlayerHealth(playerid,Health+(rand*13));
    }
    }
    }
    if (newstate == 2) KillTimer(dbtime);
    if (newstate == PLAYER_STATE_ONFOOT) AntiDriveBy(playerid);
    return 1;
    }



    Wir haben uns beide vertan.
    Wir sprechen die ganze Zeit von der MODEL-ID aber haben die vehicleid benutzt :D

  • Jo ich weiß auch warum, ich habe doch keinen Fehler gemacht ^^ Also ist das jetzt doppelt gemoppelt mit der ID bei mir :D Kann also nicht funzen.
    Ersetz wieder:


    CheckKillCars(playerid,vehiclemodel);


    mit


    CheckKillCars(playerid,vehicleid);


    bei OnPlayerstatechange.


    Dann geht das.

  • okay nun ich habe ja im scriot bei mir schon kills drin als score also player wird so geladen :


    PlayerInfo[playerid][kills] = dini_Int(String, "kills");


    wenn ich aber bei deinem public das so mache


    public CheckKillCars(playerid,vehicleid)
    {
    new string[128];
    for(new i = 0; i <= KILL_CARS; i++)
    {
    if(GetVehicleModel(vehicleid) == KillInfo[i][0])
    {
    if(kills[playerid] < KillInfo[i][1])
    {
    RemovePlayerFromVehicle(playerid);
    format(string,148,"Du hast nicht genügend Kills für dieses Fahrzeug, Benötigt werden: %d Kills !",KillInfo[i][1]);
    SendClientMessage(playerid,COLOR_GREY,string);
    return 1;
    }
    }
    }
    return 1;
    }


    kommt hier wieder in dieser zeile der error wie oben schon erwähnt:


    if(kills[playerid] < KillInfo[i][1])



    Error: C:\pwn(7057) : error 028: invalid subscript (not an array or too many subscripts): "kills"
    C:\pwn(7057) : warning 215: expression has no effect
    C:\pwn(7057) : error 001: expected token: ";", but found "]"
    C:\pwn(7057) : error 029: invalid expression, assumed zero
    C:\pwn(7057) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.

    Einmal editiert, zuletzt von Manuel20 ()