Beiträge von FACE

    Wenn ich nicht irre, so kann ein Fahrzeug nicht beschädigt werden, wenn kein Spieler darin sitzt.
    Desweiteren ist es auch nicht möglich (es sei denn durch versenken oder aufs Dach legen) ein Fahrzeug zu beschädigen, wenn die darin sitzenden Spieler gefreezed sind.


    So gibt es jetzt zwei Möglichkeiten.
    Entweder du fragst wieder ab, ob das Fahrzeug beschädigt wird und setzt es auf einen Wert von 199 (die abfrage war ja, ob der schaden KLEINER als 200 ist ;) ),
    oder du freezed die einsteigenden Spieler oder wirfst sie direkt wieder raus =)

    Keine Ahnung was "SoL" bedeuten soll, aber ok.
    In irgendeinem Callback (wahrscheinlich ist wohl "OnVehicleDamageStatuUpdate") eine Funktion steht wie:"SetVehicleToRespawn(vehicleid)" oder RepairVehicle in Kombination mit SetVehiclePos.
    Suche einfach mal in dem Script danach ;) (STRG+F)

    Sorry, wenn das jetzt ein wenig hart klingen mag, aber das Login und Register Teil ist vollkommener Käse, sprich, das kann schon vom Aufbau her nicht funktionieren, selbst wenn es läuft.
    Schau dir am besten dazu mal das Tutorial von BlackFox an ;)

    Das ist doch wohl kein Problem, oder ?


    Du startest den Motor doch per Tastendruck, oder ? Wenn nicht, dann halt den folgenden Code im Command zum Motorstarten einfügen:



    new Float:health;
    GetVehicleHealth(GetPlayerVehicleID(playerid), health);
    if(health<200)
    {
    return SendClientMessage(playerid,0xFFAAFF,"Sorry Kolläsch, aber dein Motor will nichtmehr");
    }

    Sorry, (ist schon spät) hab mal wieder nen kleinen Dreher drin:



    if (strcmp("/Müllmann", cmdtext, true) == 0)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid))==408/*Ist der Trashmaster*/)//Die Abfrage die hier vorher stand, war total sinn los :D
    {
    if(MuellJob[playerid]==false)
    {
    new rand = random(sizeof(MuellCheckpoint));
    SetPlayerCheckpoint(playerid,MuellCheckpoint[rand][0],MuellCheckpoint[rand][1],MuellCheckpoint[rand][2],3);
    SendClientMessage(playerid, 0xFFAAFF,"Müllmission begonnen!");
    MuellJob[playerid]=true;
    }
    else
    {
    SendClientMessage(playerid, 0xFFAAFF,"Müllmission beendet!");
    MuellJob[playerid]=false;
    }
    }
    else
    {
    SendClientMessage(playerid, 0xFFAAFF,"Du bist in keinem Müllwagen!");
    }
    return 1;
    }

    Ich hätte einfach einen Timer gesetzt, welcher eine Variable allmählich hochzählt (kann ruhig bei 10 oder 20 Sekunden liegen ;) )
    Dann machst du eine Abfrage unter public OnPlayerKeyStateChange, ob der Spieler zum Beispiel die ENTER-TASTE drückt (die Taste halt, um sich zu befreien).
    Du lässt den "Zufall" entscheiden (sprich randomized), ob der Spieler seine Fesseln los wird, oder eben noch nicht.
    Die hochgezählte Variable würde ich dann als sich positiv (für den Spieler positiv) einbringenden Faktor in der Random-Funktion einbauen.

    Das ist auch relativ einfach gelöst, müsst nur mal nachdenken ;)
    also machen wir es wie folgt:
    Unter dem Callback OnPlayerStateChange:

    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
    {
    new Float:health;
    GetVehicleHealth(GetPlayerVehicleID(playerid), health);
    if(health<200)
    {
    RemovePlayerFromVehicle(playerid);//Kickt den Spieler beim Einsteigen als Fahrer direkt wieder raus!
    //Alternativ zum Remove, wäre auch "TogglePlayerControllable(playerid,0);" möglich, oder die etwas bessere Methode, die ich jetzt im Anschluss zeigen werde.
    }
    }


    Wie versprochen die ausführliche Methode:

    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
    {
    new Float:health;
    GetVehicleHealth(GetPlayerVehicleID(playerid), health);
    if(health<200)
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objective);
    SetVehicleParamsEx(GetPlayerVehicleID(playerid),0,lights,alarm,doors,bonnet,boot,objective);//Wir schalten einfach den Motor ab :D
    SendClientMessage(playerid, 0xFFAAFF,"Der Wagen hat einen Motorschaden, sorry Kumpel !");//Ja ich weiß, bei den Texten bin ich kreativ =P
    }
    }


    Notfalls ließe sich diese Funktion auch unter "OnPlayerEnterVehicle" einbinden, wäre wahrscheinlich sogar günstiger ;)

    Erstmal sind das im Array 29 Checkpoint-Koordinaten (zählen junge ^^ )
    Und da du das Array so gennant hast, kannst du das natürlich nichtmehr als Variable nutzen (als Integer jetzt).
    bitte erstelle oben im Script eine Variable : new bool:MuellJob[MAX_PLAYERS]; Ein Boolean um zwischenzuspeichern, ob der Spieler bereits in einer Mission ist, oder nicht.
    Dafür war doch die Abfrage gedacht, richtig?


    Ändere also ein paar Stellen:

    if (strcmp("/Müllmann", cmdtext, true) == 0)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid))==408/*Ist der Trashmaster*/)//Die Abfrage die hier vorher stand, war total sinn los :D
    {
    if(MuellJob[playerid]==1)
    {
    new rand = random(sizeof(MuellCheckpoint));
    SetPlayerCheckpoint(playerid,MuellCheckpoint[rand][0],MuellCheckpoint[rand][1],MuellCheckpoint[rand][2],3);
    SendClientMessage(playerid, 0xFFAAFF,"Müllmission begonnen!");
    MuellJob[playerid]=1;
    }
    else
    {
    SendClientMessage(playerid, 0xFFAAFF,"Müllmission beendet!");
    MuellJob[playerid]=0;
    }
    }
    else
    {
    SendClientMessage(playerid, 0xFFAAFF,"Du bist in keinem Müllwagen!");
    }
    return 1;
    }

    Entschuldigung, hab heute nen kleinen Dreher drin. Müsste natürlich heißen, wenn health < 200 ist und NICHT größer 200 ^^


    also insg:


    public OnVehicleDamageStatusUpdate(vehicleid, playerid)
    {
    //#pragma unused playerid


    new Float:health;
    GetVehicleHealth(vehicleid, health);
    if(health<200)
    {
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(IsPlayerInVehicle(i,vehicleid))
    {
    RemovePlayerFromVehicle(i);
    }
    }
    }
    return 1;
    }


    Kickt übrigens gleich alle Spieler aus dem Auto ;)


    Wenn du den Wagen dazu abstellen möchtest, dann stell doch einfach den Motor aus ;)


    http://wiki.sa-mp.com/wiki/SetVehicleParamsEx


    if (strcmp("/Müllmann", cmdtext, true) == 0)
    {
    if(GetVehicleModel(GetPlayerVehicleID(playerid))==408/*Ist der Trashmaster*/)//Die Abfrage die hier vorher stand, war total sinn los :D
    {
    if(MuellCheckpoint[playerid]==1)
    {
    new rand = random(sizeof(MuellCheckpoint));
    SetPlayerCheckpoint(playerid,MuellCheckpoint[rand][0],MuellCheckpoint[rand][1],MuellCheckpoint[rand][2],3);
    SendClientMessage(playerid, 0xFFAAFF,"Müllmission begonnen!");
    MuellCheckpoint[playerid]=1;
    }
    else
    {
    SendClientMessage(playerid, 0xFFAAFF,"Müllmission beendet!");
    MuellCheckpoint[playerid]=0;
    }
    }
    else
    {
    SendClientMessage(playerid, 0xFFAAFF,"Du bist in keinem Müllwagen!");
    }
    return 1;
    }


    Edit:Variable für "Checkpoint" auf 1 setzen, damit es bei der OnPlayerEnterCheckpoint Abfrage auch klappt ;)

    Entnommen aus dem Sa-mp Wiki (http://wiki.sa-mp.com/wiki/GetVehicleDamageStatus und http://wiki.sa-mp.com/wiki/OnVehicleDamageStatusUpdate):



    public OnVehicleDamageStatusUpdate(vehicleid, playerid)
    {
    //#pragma unused playerid


    new Float:health;
    GetVehicleHealth(vehicleid, health);
    if(health >200)
    {
    for(new i=0;i<GetMaxPlayers();i++)
    {
    if(IsPlayerInVehicle(i,vehicleid))
    {
    RemovePlayerFromVehicle(i);
    }
    }
    }
    return 1;
    }


    Sorry fürs miese Einrücken, habs hier direkt im Editor geschrieben ;)

    Ok....
    also, du hast grundlegende Fehler beim Erstellen des Arrays gemacht.

    new Float:gsspawn[5][4] =//Ich sehe hier nur 4 Werte, wie kommst du 6 ??
    {
    {2496.0522,-1709.9905,1014.7422,0.3636},
    {2492.1638,-1701.4113,1014.7664,339.0568},
    {2494.0767,-1704.3386,1018.3438,100.2712},
    {2499.4863,-1707.4873,1014.7422,86.8211},
    {2499.2195,-1707.3253,1018.3438,357.5203}
    };


    Nächstes Problem:



    new gsrand;
    gsrand = random(sizeof(gsspawn)); //Soweit in Ordnung.
    SetPlayerPos(playerid, gsspawn[gsrand][0],gsspawn[gsrand][1], gsspawn[gsrand][2]); //Natürlich lag hier der Error, weil die Funktion keine 5 Parameter aufweist
    SetPlayerFacingAngle(playerid, gsspawn[gsrand][3]);//Folglich war diese hier auch falsch!


    Dies bestätigt dir ja auch die Error-Beschreibung: Anzahl der Argumente (Paramter) entspricht nicht der korrekten Anzahl. Hast also entweder zu viel oder zu wenig Parameter in die Funktion gepackt. In diesem Fall vieeeeel zu vieele ;)