Beiträge von Templer

    welchen Sound willst du abspielen? Wenn es keine Musik ist brauchst du das StopSound nicht. Ansonsten kannst vom GF abschauen wie die Funktion FixPlayerRadio funktioniert. Der stoppt sozusagen den Sound und Co ^^

    new Float:VehiclePos[MAX_VEHICLES][4];


    public OnGameModeExit()
    {
    for(new vehicleid=0;vehicleid!=MAX_VEHICLES;vehicleid++)
    {
    GetVehiclePos(vehicleid,VehiclePos[vehicleid][0],VehiclePos[vehicleid][1],VehiclePos[vehicleid][2]);
    //Hier eine Funktion welche die abgeschleppten Fahrzeuge mit den Koordinaten abspeichert.
    }
    }


    public OnGameModeInit()
    {
    for(new vehicleid=0;vehicleid!=MAX_VEHICLES;vehicleid++)
    {
    //Hier eine Funktion welche die abgeschleppten Fahrzeuginformationen ausliest.
    //und die X, Y und Z Koordinate wieder ins Array abspeichern lässt ^^
    }
    }

    new Float:VehiclePos[3];
    GetVehiclePos(vehicleid,VehiclePos[0],VehiclePos[1],VehiclePos[2]);
    if(IsPlayerInRangeOfPoint(playerid,3.5,VehiclePos[0],VehiclePos[1],VehiclePos[2])) PlayerPlaySound(playerid,SOUND_ID,0.0,0.0,0.0);


    hm? ^^

    Schauen wir uns mal die Abfrage genauer an.


    Legende:
    KORREKT ... Teambalance wird durchgeführt
    FALSCH ... Teambalance wird ignoriert

    return 1; ... Spieler wird ins Team zugelassen
    return 0; ... Spieler wird nicht ins Team zugelassen


    Gegeben: 2 SWAT Spieler und 3 Mafia Spieler


    if(swatb < mafiab) return 1; //2 ist kleiner als 3 ==> KORREKT
    if(swatb > mafiab) return 0; //2 ist größer als 3 ==> FALSCH


    Gegeben: 3 SWAT Spieler und 2 Mafia Spieler


    if(swatb < mafiab) return 0; //3 ist kleiner als 2 ==> FALSCH
    if(swatb > mafiab) return 1; //3 ist größer als 2 ==> KORREKT

    Gegeben: 2 SWAT Spieler und 2 Mafia Spieler


    if(swatb < mafiab) return 0; //2 ist kleiner als 2 ==> FALSCH
    if(swatb > mafiab) return 0; //2 ist größer als 2 ==> FALSCH


    ---------------------------------------Lösung zu deiner Frage------------------------------------
    Gegeben: 2 SWAT Spieler und 2 Mafia Spieler


    if(swatb <= mafiab) return 1; //2 ist kleiner oder gleich als 2 ==> KORREKT
    if(swatb > mafiab) return 0; //2 ist größer als 2 ==> FALSCH


    ODER


    Gegeben: 2 SWAT Spieler und 2 Mafia Spieler


    if(swatb < mafiab) return 0; //2 ist kleiner als 2 ==> FALSCH
    if(swatb >= mafiab) return 1; //2 ist größer oder gleich als 2 ==> KORREKT


    Also du musst eine Abfrage umändern ^^ Hoffe du hast es verstanden.


    //EDIT: Hier noch zur Lösung eine umändern, die ein Zufallsprinzip daraus macht:
    Gegeben: 2 SWAT Spieler und 2 Mafia Spieler


    if(swatb < mafiab) return 1; //2 ist kleiner als 2 ==> FALSCH, bedeutet der Spieler darf ins Team
    else if(swatb > mafiab) return 1; //2 ist größer als 2 ==> FALSCH, beduetet der Spieler darf ins Team
    else if(swatb == mafiab) return random(1); //2 ist gleich wie 2 ==> RICHTIG und entscheidet durch kleines Zufallsprinzip ob Teambalancing eingeschalten werden soll oder nicht ^^


    //EDIT 2: Genauer Erklärt und return Beispiele hinzugefügt

    Nach den erhaltenen Daten von dir ist dies herusgekommen, auch wenn ich damit ned so zufrieden bin wie du es vorgezeigt hast, also deine Methode aber bitte ^^ Hier die 1zu1 Kopie zu deinem else if Beispiel:


    new control=-1;
    if(TopKillerKills[0] < kills) control=0;
    else if(TopKillerKills[1] < kills) control=1;
    else if(TopKillerKills[2] < kills) control=2;
    if(control!=-1)
    {
    for(new i = 0;i!=4;i++)
    {
    if(i==control)
    {
    TopKillerName[i] = name;
    TopKillerKills[i] = kills;
    TopKillerTode[i] = tode;
    continue;
    }
    TopKillerName[i+1] = TopKillerName[i];
    TopKillerKills[i+1] = TopKillerKills[i];
    TopKillerTode[i+1] = TopKillerTode[i];
    }
    }

    Was ich neu hinzugefügt habe ist mit den Zeichen "//" kommentiert:


    public OnPlayerConnect(playerid)
    {
    new Spielerdatei[64];
    new Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Name,sizeof(Name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",Name);
    if(dini_Exists(Spielerdatei))
    {
    SetPVarInt(playerid,"SpielerRegistriert",1); //Wenn Spieler Registriert ist, setze Wert '1'
    ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"Login","Dein Account wurde gefunden. Gib bitte das Passwort ein","Login","Abbrechen");
    }
    else
    {
    SetPVarInt(playerid,"SpielerRegistriert",2); //Wenn Spieler Nicht Registriert ist, setze Wert '2'
    ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrieren","Gib bitte das gewünschte Passwort ein:","Register","Abbrechen");
    }
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    new account=GetPVarInt(playerid,"SpielerRegistriert"); //Welcher Wert hat SpielerRegistriert für Spieler.
    if(account!=0) //Ist Spieler "sozusagen" noch nicht eingeloggt.
    {
    /*
    Wie vorhin schon kommentiert wird dem Spieler angezeigt, wenn...
    ...er Registriert ist (SpielerRegistriert Wert auf '1') den Loginvorgang
    ...er nicht registriert ist (SpielerRegistriert Wert auf '2') den Registrierungsvorgang
    */
    if(account==1) ShowPlayerDialog(playerid,3,DIALOG_STYLE_INPUT,"Login","Dein Account wurde gefunden. Gib bitte das Passwort ein","Login","Abbrechen");
    else if(account==2) ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Registrieren","Gib bitte das gewünschte Passwort ein:","Register","Abbrechen");
    return 1; //Hindert Spieler am Spawnen, oder wie man es in dem Fall nennen würde ^^...
    }
    //Restlicher Code wenn er bereits eingeloggt ist...
    return 1;
    }

    Das return ist in diesem Fall sehr wichtig! Beispiel:


    new SpielerDatei[64];
    new Name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Name,sizeof(Name));
    format(SpielerDatei,sizeof(SpielerDatei),"/Accounts/%s.txt",Name);
    if(dini_Exists(SpielerDatei))
    {
    //Code Wenn Spieler registriert ist.
    SpawnPlayer(playerid);
    return 1;
    }
    //Code Wenn Spieler nicht registriert ist.
    return 1;

    Hallo Leute,


    Ich habe ein problem, dass ich fast meine Genital Haare ausgerissen habe. Der Text, welcher in der Datenbank ordentlich abgespeichert wird, kann ich ned abfragen lassen, wenn er benötigt wird. Unten ist die Funktion in der der String eigentlich ausgelesen werden sollte, unterbei der Log und ganz unten ein Ausschnitt aus meiner Datenbank. Ich hoffe jemand kann mir dieses Problem beheben bzw. zeigen, was ich vergessen habe... Danke im Voraus!


    /*
    Legende:
    index ... Was der Spieler ausgewählt hat im Dialog
    count ... Da ja die mysql_fetch_row_format einen internen Zähler hat, wird dieser "nachgemacht"
    */


    stock GetEMailInformationIN(playerid,category,index)
    {
    new cache[3][32],count=-1,owner[MAX_PLAYER_NAME];
    GetPVarString(playerid,"LaptopBesitzer",owner,MAX_PLAYER_NAME);
    format(CacheString,sizeof(CacheString),"SELECT eMailText FROM eMail WHERE (eMailReceiver = '%s') ORDER BY eMailTag ASC;",owner);
    mysql_query(CacheString);
    strdel(CacheString,0,strlen(CacheString));
    mysql_store_result();
    while(mysql_fetch_row_format(CacheString," "))
    {
    count++;
    printf("Count: %d Index: %d CacheString: %s",count,index,CacheString);
    if(index!=count) continue;
    format(CacheString,sizeof(CacheString),ReplaceCharacterInText(CacheString,"|n",'\\',strlen(CacheString)));
    mysql_free_result();
    return CacheString;
    }
    format(CacheString,sizeof(CacheString),"<Empty File>!");
    mysql_free_result();
    return CacheString;
    }


    [17:44:51] Count: 0 Index: 3 String: Wi
    [17:44:51] Count: 1 Index: 3 String: -h
    [17:44:51] Count: 2 Index: 3 String: Schrei
    [17:44:51] Count: 3 Index: 3 String: Hall


    Ehm Michael, das bringt sich gar nichts was du machst. In diesem Fall ist ein switch total unnötig und warum du die Variable engine auch noch änderst ist mir auch schleierhaft ^^ Man muss unter OnVehicleSpawn den Motor ausschalten, damit beim Befehl zuerst der Motor eingeschalten wird. Bzw beim Befehl überprüfen, ob das Auto zum ersten mal verwendet wird, wenn das vorherige nicht klappt.

    if(!strcmp(strget(cmdtext,0), "/kill", true))
    {
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,ROT,"Du bist kein Admin und kannst den befehl nicht ausführen!");
    if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid,ROT,"Benutze: /kill [ID]");
    new ziel = strval(strget(cmdtext,1)),zielname[MAX_PLAYER_NAME],playername[MAX_PLAYER_NAME],string[128];
    SetPlayerHealth(ziel, 0);
    GetPlayerName(playerid,playername,sizeof(playername));
    GetPlayerName((ziel), zielname, sizeof(zielname));
    format(string,sizeof(string),"Du hast %s`s getötet.", zielname);
    SendClientMessage(playerid,ROT,string);
    format(string,sizeof(string),"Du wurdest soeben von Admin %s getötet!", playername);
    SendClientMessage(ziel,ROT,string);
    return 1;
    }

    Also es ist überhaupt kein Fehler vorhanden, was für einen Kompiler verwendest du eigentlich? Weil es deutsch gezeigt wird..


    public IsAtClothShop(playerid)
    {
    if(!IsPlayerConnected(playerid)) return false;
    else if(IsPlayerInRangeOfPoint(playerid,30.0,207.5627,-103.7291,1005.2578) || IsPlayerInRangeOfPoint(playerid,30.0,203.9068,-41.0728,1001.8047)) return true;
    else if(IsPlayerInRangeOfPoint(playerid,30.0,203.9068,-41.0728,1001.8047) return true;
    else if(IsPlayerInRangeOfPoint(playerid,30.0,214.4470,-7.6471,1001.2109) || IsPlayerInRangeOfPoint(playerid,30.0,161.3765,-83.8416,1001.8047)) return true;
    return false;
    }

    Super RottenApple, er schaltet den Motor ein, wenn er aus ist oder er schaltet den Motor aus, wenn er aus ist. Genau so hast du es geschrieben ^^ Nebenbei Intrepidus empfehle ich hierführ keine unnötigen 2000er Arrays, da es eh eine Abfrage gibt, ob der motor an oder ausgeschalten ist...


    Hier Korrektur:


    public OnPlayerCommandText(playerid,cmdtext[])
    {
    if(!strcmp(cmdtext,"/motor",true))
    {
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,Rot,"Du musst dafür in einem Auto sitzen.");
    new vid = GetPlayerVehicleID(playerid),engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vid,engine,lights,alarm,doors,bonnet,boot,objective);
    if(engine)
    {
    SetVehicleParamsEx(vid,false,lights,alarm,doors,bonnet,boot,objective);
    SendClientMessage(playerid,0xFFFFFFAA," Motor ausgeschalten...");
    }
    else
    {
    SetVehicleParamsEx(vid,true,lights,alarm,doors,bonnet,boot,objective);
    SendClientMessage(playerid,0xFFFFFFAA," Motor eingeschalten...");
    }
    return 1;
    }
    return 0;
    }


    public OnVehicleDeath(vehicleid) //Bin mir dabei nicht sicher, ob SAMP dies automatisch ausführt, aber sicher ist sicher
    {
    new engine,lights,alarm,doors,bonnet,boot,objective;
    GetVehicleParamsEx(vehicleid,engine,lights,alarm,doors,bonnet,boot,objective);
    if(engine) SetVehicleParamsEx(vid,false,lights,alarm,doors,bonnet,boot,objective);
    }

    public OnPlayerSpawn(playerid)
    {
    clock(); // Lässt die Uhr erscheinen.
    new name[128], save[128];
    GetPlayerName(playerid,name,sizeof(name));
    format(save,sizeof(save),"/Spieler/%s.ini",name);
    if(loggedin[playerid] == false) //Ist die Variable Loggedin auch ein Bool?
    {
    SendClientMessage(playerid, COLOR_RED, "Da du dich nicht eingeloggt hast wurdest du gekickt");
    Kick(playerid);
    }
    if(Spieler[playerid][gTeam] == 0) //Zivilist
    {
    SetPlayerPos(playerid, 1193.1997,-1265.8030,23.6099);
    SetPlayerFacingAngel(playerid, 2.9239);
    SetCameraBehindPlayer(playerid); //Playerid hat gefehlt..
    SetPlayerInterior(playerid, 0);
    }