Beiträge von Jeffry

    IPrototypeI:
    In deiner Funktion ist ein Klammerfehler. So wäre es richtig:
    CountPlayerInMode(string[],len = sizeof(string)){
    new i, count[2];
    for(; i != MAX_PLAYERS; ++i){
    switch(PlayerInfo[i][pMode]){
    case 1: ++count[0];
    case 2: ++count[1];
    }
    }
    format(string,len ,"Cops'n Robbers: %d Spieler | Freeroam: %d Spieler",count[0],count[1]);
    return 1;
    }


    1) Kann man "RemoveBuildingForPlayer" auch nur in einer bestimmten Interior-World ID benutzen? Also, sodass das Objekt nur entfernt wird, wenn man in der entsprechenden Interior-World ID ist.
    Falls nicht, gibt es trotzdem irgendeinen Trick dann z.B. das entsprechende Objekt zwar doch überall zu removen, aber dann in der Interior-ID zu erstellen?


    Nein, aber den Trick kannst du mit dem Streamer Plugin von Incognito anwenden, indem du ein Objekt in ein Interior definierst. (http://forum.sa-mp.com/showthread.php?t=102865)



    2) Wie kann ich einen "PlayerPlaySound" beenden? Ich habe ihn an bestimmten Koordinaten erstellt und möchte ihn auf Befehl beenden, allerdings ist der Sound an sich eine Endlosschleife.


    PlayerPlaySound mit einer Nummer höher aufrufen, also wenn z.B. 1037 dein Sound ist, dann nimm 1038 um es zu beenden (das geht aber nur bei den endlosen Musik-Teilen (z.B. Bumblebee-Spiel-Musik).

    Also an diesem Code liegt es definitiv nicht, den kann ich ohne Probleme kompilieren.
    Der Fehler muss irgendwo darüber liegen.

    Der Script sagt doch schon aus, dass du einen RP-Namen verwenden musst.
    Also nimm eben Highscore_Test als Name.


    Und so nebenbei: Es wäre wesentlich sinnvoller, wenn du erst einmal PAWN-Scripten lernen würdest anstatt dir einen Code runterzuladen den du nicht mal verstehst. ;)

    Das heißt dass die Variable i bereits definiert ist. Ersetze einfach alle i's in meinem Code mit j's dann tut's.


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(ispassenger)
    {
    //Passagier = Ja
    if(GetVehicleModel(vehicleid) == 431)
    {
    //Bus = Ja
    new bool:fahrer = false;
    for(new j=0; j<MAX_PLAYERS; j++)
    {
    if(IsPlayerInAnyVehicle(j))
    {
    if(GetPlayerState(j) == PLAYER_STATE_DRIVER && GetPlayerVehicleID(j) == vehicleid)
    {
    //Es ist ein Fahrer im Bus
    fahrer = true;
    }
    }
    }
    if(!fahrer)
    {
    //Es ist kein Fahrer im Bus
    TogglePlayerControllable(playerid, false);
    TogglePlayerControllable(playerid, true);
    SendClientMessage(playerid, 0xFF0000FF, "Achtung: Es ist kein Busfahrer vorhanden, du kannst nicht einsteigen.");
    }
    }
    }
    return 1;
    }

    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(ispassenger)
    {
    //Passagier = Ja
    if(GetVehicleModel(vehicleid) == 431)
    {
    //Bus = Ja
    new bool:fahrer = false;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerInAnyVehicle(i))
    {
    if(GetPlayerState(i) == PLAYER_STATE_DRIVER && GetPlayerVehicleID(i) == vehicleid)
    {
    //Es ist ein Fahrer im Bus
    fahrer = true;
    }
    }
    }
    if(!fahrer)
    {
    //Es ist kein Fahrer im Bus
    TogglePlayerControllable(playerid, false);
    TogglePlayerControllable(playerid, true);
    SendClientMessage(playerid, 0xFF0000FF, "Achtung: Es ist kein Busfahrer vorhanden, du kannst nicht einsteigen.");
    }
    }
    }
    return 1;
    }


    Ist zwar nicht getestet aber sollte eigentlich funktionieren.
    Falls nicht, bitte sagen.

    Das kommt auf dein Admin System an.
    Generell sähe das so aus:


    if(PlayerInfo{playerid][Level] == 5) //Geld geben, da Level 5
    else //kein Geld geben


    oder:
    if(PlayerInfo{playerid][Level] != 5) //Spieler ist NICHT Level 5, kann aber Level 215421 sein, oder -1454 oder 4272, oder 24242574, oder sonstwas.

    Das liegt ganz einfach daran, dass INSERT INTO eine neue Zeile erstellt, daher eine neue ID.
    Beispiel:
    10 Telefonzellen vorhanden (0..9).


    DELETE 5
    INSERT INTO
    => Neue ID in der Datenbank: 10.
    => 5 existiert nicht mehr.


    Was kannst du machen?
    Mach eine neue Spalte, die "deleted" heißt, in deiner Datenbank. Anstatt die Telefonzelle zu DELETE'n setzt du einfach "deleted" zu 1, und die anderen Werte leer/null.
    Anstatt INSERT INTO beim Erstellen der Telefonzelle anhand der GetPVar nimmst du UPDATE und setzt die Werte, sowie "deleted" wieder zu 0.


    Verstanden?

    public OnPlayerCommandText(playerid, cmdtext[])// das sind Befehle
    {
    if (strcmp("/help", cmdtext, true, 10) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_HELP, DIALOG_STYLE_LIST,"Befehle:","/help\n/cheats\n/tele","Aktzeptieren","Abbrechen");
    return 1; //Return 1 gehört in die Klammer
    }
    if (strcmp("/cheat", cmdtext, true, 10) == 0)
    {
    ShowPlayerDialog(playerid,DIALOG_CHEAT, DIALOG_STYLE_LIST,"Cheats:","M4\nHeal","Aktzeptieren","Abbrechen");
    return 1; //Return 1 gehört in die Klammer
    }
    if (strcmp("/teleport", cmdtext, true, 10) == 0)
    {
    SetPlayerPos(playerid,1542.5127,-1676.4347,13.5546); //Facing angle: siehe Zeile unten
    SetPlayerFacingAngle(playerid, 73.3714);
    return 1; //Return 1 gehört in die Klammer
    }
    return 0; //Return 0 GANZ am Ende von OnPlayerCommandText
    }


    Erklärungen im Code. ;)