Beiträge von Kaliber

    Kaliber: Du hattest auch Fehler Hinter der If-Abfrage müssen zwei ")" Klammern hin


    Hab auf den Rest Code nicht geschaut gehabt...


    Es muss so heißen du hast auch noch Fehler (der Speed bei MoveObject) :D


    ocmd:auf(playerid,params[]){
    if(!IsPlayerInRangeOfPoint(playerid,4.0,1583.7000000,-1637.9000000,12.4000000))return SendClientMessage(playerid,ROT,"Du bist nicht in der nähe des Tores.");
    return MoveObject(tor,1583.7000000,-1637.9000000,12.4000000-10,4.0);
    }
    ocmd:zu(playerid,params[]){
    if(!IsPlayerInRangeOfPoint(playerid,4.0,1583.7000000,-1637.9000000,12.4000000))return SendClientMessage(playerid,ROT,"Du bist nicht in der nähe des Tores.");
    return MoveObject(tor,1583.7000000,-1637.9000000,12.4000000,4.0);
    }


    mfg. :rolleyes:

    Das musst du so schreiben:


    ocmd:auf(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,1583.7000000,-1637.9000000,12.4000000) return SendClientMessage(playerid,ROT,"Du bist nicht in der nähe des Tores.");
    return MoveObject(tor,1583.7000000,-1637.9000000,12.4000000-10);
    }
    ocmd:zu(playerid,params[])
    {
    if(!IsPlayerInRangeOfPoint(playerid,1583.7000000,-1637.9000000,12.4000000) return SendClientMessage(playerid,ROT,"Du bist nicht in der nähe des Tores.");
    return MoveObject(tor,1583.7000000,-1637.9000000,12.4000000);
    }


    Es kommt kein Semikolon [;] hinter eine Abfrage ;)


    mfg. :thumbup:

    Schreib das so:


    if(strcmp(cmd, "/bank",true) == 0)
    {
    if(IsPlayerInRangeOfPoint(playerid,7.0,1432.3073,-997.6413,1639.7911)) return ShowPlayerDialog(playerid, BANK,DIALOG_STYLE_LIST,"{FAFAFA}Bank", "Kontostadt\nEinzahlen\nAuszahlen\nÜberweisen", "Auswählen", "Abbrechen");
    return SendClientMessage(playerid, COLOR_RED, "Du bist nicht in der Bank.");
    }


    PS: Doch nicht 2 if-Abfragen untereinander ohne Klammern :wacko:


    mfg. :rolleyes:

    MEIN CODE :


    Das musst du so schreiben:


    static const rang_name[][][] = {
    {"Azubi","Streifenpolizist","Polizist","Ausbilder","Sondereinsatzkomando","Sondereinsatzkomando-Leiter"},
    {"Azubi","Politesse","Abschlepper","Kontrolleur","Ausbilder","Ordnungsamt-Direktor"},
    {"Azubi","Hilfssanitäter","Sanitäter","Notartzt","Arzt","Chefarzt"},
    {"Laufbrusche","Gangster","Obergangster","Drogen-Boss","Mafia Boss","Most Wanted"},
    {"Kaikei","Shingiin","Saiko-komon","Shateigashira","Wakagashira","Oyabun"}
    };


    mfg. :thumbup:

    Stimmt jetzt Crasht der Comp. X(


    Wenn du meinen Code nutzt, hast du auch diese Variablen oben deklariert:


    //Schreib oben folgendes in dein Script
    static const lspd_skins[] = {127,28,10,122,27,181};
    new bool:IsUndercover[MAX_PLAYERS char],PlayerSkin[MAX_PLAYERS];


    mfg. :rolleyes:

    Also es passiert nichts kommt keine Textausgabe z.b. Du bist nicht an einer Umkleide sowas halt
    habe keine Error Fehler halt der Befehl wird sozusagen nicht ausgeführt.


    Dann hast du den wahrscheinlich falsch eingefügt :D


    Mal darauf geachtet, dass oberhalb alle Klammern von vorherigen Befehlen geschlossen werden? :whistling:


    mfg. :thumbup:

    Und wie bekomme ich das jetzt raus das ich immer abwechselnd Undercover Skin bekomme und dann wieder denn normalen denn ich als Cop habe ?


    Achso, jetzt weiß ich was du meinst, dann schreib es so:


    if(!strcmp(cmd,"/undercover",true)){
    if(!IsPlayerInFrac(playerid,1))return SendClientMessage(playerid,COLOR_GRAD1, "Du bist kein Cop/FBIler!");
    if(!IsPlayerInRangeOfPoint(playerid,5.0, 257.6224,77.3044,1003.6406))return SendClientMessage(playerid, COLOR_GRAD1, "Du bist nicht am LSPD/FBI Duty Point!");
    tmp = strtok(cmdtext,idx);
    if(!tmp[0] && !IsUndercover{playerid}) return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /undercover [Skin Nummer]"),SendClientMessage(playerid,COLOR_GRAD1,"*Es gibt 6 Skins (Nummer 1-6)");
    if(!tmp[0]) return SetPlayerSkin(playerid,PlayerSkin[playerid]),IsUndercover{playerid}=false,1;
    if(!IsUndercover{playerid}) PlayerSkin[playerid] = GetPlayerSkin(playerid),IsUndercover{playerid}=true;
    return (strval(tmp) > sizeof lspd_skins) ? SendClientMessage(playerid,COLOR_GRAD1,"Skin nicht vorhanden!") : SetPlayerSkin(playerid,lspd_skins[strval(tmp)-1]);
    }


    Jetzt bekommt er den normalen Skin wieder, wenn er nur /undercover eingibt, ohne Zahl ;)


    mfg. :thumbup:

    @Frosty:


    Es wäre wesentlich besser, wenn du den Befehl so schreiben würdest, zudem kannst du so Ränge machen:


    //Oben ins Script
    static const rang_name[][][] = {
    {"Azubi","Officer"}, //usw..(Fraktion 1)->LSPD
    {"Gangster","Hipster"} //usw..(Fraktion 2)->Gang oder sonst was du halt im Script hast
    }


    ocmd:f(playerid,params[]) {
    if(!params[0]) return SendClientMessage(playerid,-1,"Benutze: /f [Text]");
    if(!GetPVarInt(playerid,"Fraktion")) return SendClientMessage(playerid,-1,"Du bist in keiner Fraktion!");
    new string[144],name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME),format(string,144,"* %s %s sagt: %s",rang_name[GetPVarInt(playerid,"Fraktion")-1][GetPVarInt(playerid,"Rang")-1],name,params);
    for(new i; i<MAX_PLAYERS; i++) {
    if(!IsPlayerConnected(i) || GetPVarInt(i,"Fraktion") != GetPVarInt(playerid,"Fraktion")) continue;
    SendClientMessage(i,-1,string);
    }
    return 1;
    }


    mfg. :thumbup:

    Du kannst es noch besser schreiben:


    //Schreib oben folgendes in dein Script
    static const lspd_skins[] = {127,28,10,122,27,181};
    new bool:IsUndercover[MAX_PLAYERS char],PlayerSkin[MAX_PLAYERS];


    //Und dann den Befehl so schreiben:
    if(!strcmp(cmd,"/undercover",true)){
    if(!IsPlayerInFrac(playerid,1))return SendClientMessage(playerid,COLOR_GRAD1, "Du bist kein Cop/FBIler!");
    if(!IsPlayerInRangeOfPoint(playerid,5.0, 257.6224,77.3044,1003.6406))return SendClientMessage(playerid, COLOR_GRAD1, "Du bist nicht am LSPD/FBI Duty Point!");
    tmp = strtok(cmdtext,idx);
    if(!tmp[0])return SendClientMessage(playerid,COLOR_WHITE,"Benutze: /undercover [Skin Nummer]"),SendClientMessage(playerid,COLOR_GRAD1,"*Es gibt 6 Skins (Nummer 1-6)");
    if(!IsUndercover{playerid}){
    PlayerSkin[playerid] = GetPlayerSkin(playerid),IsUndercover{playerid}=true;
    return (strval(tmp) > sizeof lspd_skins) ? SendClientMessage(playerid,COLOR_GRAD1,"Skin nicht vorhanden!") : SetPlayerSkin(playerid,lspd_skins[strval(tmp)-1]);
    }
    return SetPlayerSkin(playerid,PlayerSkin[playerid]),IsUndercover{playerid}=false,1;
    }


    mfg. :thumbup:

    1. Du kannst nicht alle Daten von jedem Typ einfach so in ein Array klatschen. Dafür solltest du ein Enumerator verwenden, sprich schreib es so:


    enum a_Cars {
    a_Name[32],
    a_model,
    a_price
    };
    new Gangcars[21][a_Cars] ={
    // Name, Fahrzeug-ID, Preis
    {"Voodoo",412,30000}, {"Esperanto",419,30000}, {"Stallion",439,50000}, {"Glendale",466,30000},
    {"Hermes",474,30000}, {"Sabre",475,45000}, {"Buccaner",518,25000}, {"Feltzer",533,60000},
    {"Remington",534,35000}, {"Elegy",562,70000}, {"Savanna",567,30000}, {"Broadway",575,25000},
    {"Tornado",576,45000}, {"Huntley",579,50000}, {"Picador",600,20000}, {"Jester",559,55000},
    {"Perenniel",404,25000}, {"Sentinel",405,45000}, {"Bravura",401,20000}, {"Sanchez",468,50000}, {"PCJ-600",461,50000} };


    2. Ein Array mit einer Größe von 8192...bist du noch ganz dicht? :huh:


    Schreib das mal so, und ich denke du willst ShowPlayerDialog verwenden, als SendClientMessage :whistling:


    if(frakid == 13 || frakid == 14|| frakid == 16 || frakid == 17 || frakid == 19) // GS, Ballas, Vagos, Scarfo, WCC
    {
    new string[18 * sizeof Gangcars]; // Weil 9 Chars für den Namen, 5 chars für den Preis und 3 Chars für die [ ] und das Leerzeichen und 1char für '\n' -> 18
    for(new i; i < sizeof Gangcars; i++) format(string,sizeof string,"%s%s [%d]\n",string,Gangcars[i][a_Name],Gangcars[i][a_Price]);
    ShowPlayerDialog(playerid,99,DIALOG_STYLE_LIST,"{FF0000}Autohaus",string,"Kaufen","Abbrechen"); //Dialogid anpassen.
    }


    //Edit: String Größe erhöht, grad mal nachgerechnet.
    //Edit²: Ach verwende doch einfach ein mehr oder weniger "dynamisches" Array


    mfg. :thumbup:

    Naja, würde trotzdem auf ein Define zurückgreifen und nicht auf die Funktion


    Er macht es ja so:


    for(new i=0; i<GetMaxPlayers(); i++)


    Das ist natürlich sehr schlecht. So wird nämlich immer die Funktion aufgerufen und somit dauert das wesentlich länger als das Define.


    Was aber zeitgleich (fast bis auf ein paar hunderstel Nanosekunden) gleich ist, ist diese Schleife:


    for(new i,l=GetMaxPlayers(); i<l; i++)


    Dann würde man die Funktion gut nutzen und zeitlich gesehen, ist es genauso schnell :)


    mfg. :thumbup:

    Oh man...das wird sich noch ewig ziehen, wenn das so weiter geht...


    Wenn du schnelle und direkte Hilfe willst, schick mir kurz deine TeamViewer Daten per PN, dann helf ich dir schnell und hier wird nicht so gespammt ;)


    mfg. :thumbup:

    passt doch auch nicht, oder? Weil wenn 500 Leute drauf sind und dann die IDs von 100-300 z.B. offline gehen, dann werden ja nur die IDs von 0-300 Überprüft, aber die von User mit 300-500 werden ausgelassen, oder irre ich mich?


    Du irrst dich.


    GetMaxPlayers() gibt dir die Anzahl der eingestellten Server Slots aus der server.cfg wieder ;)


    Sprich wie viele Leute maximal auf den Server joinen könen sieht immer so aus (0/100...0/200) << das ist das, dieses Maximum ;)


    mfg. :thumbup:

    Schreibs mal so:


    if(GetPVarInt(playerid,"SwatDuty") || GetPVarInt(playerid,"AdminDuty") || GetPVarInt(playerid,"Maske")) {
    SetPlayerName(playerid, OldUsername[playerid]);
    }


    Wenn das nicht geht, sind die Bedingungen nicht erfüllt, teste es dann mit einem print-Debug und überprüf nochmal die Befehle ;)


    mfg. :thumbup:

    Selbst das wird nicht funktionieren, denn wenn da steht "Du Nutte" ist es nach dem System gültig


    Stimmt...Gott was heute nur los mit mir :S


    Nutze dafür strfind:


    for(new i=0;i<sizeof(Badword);i++)if(strfind(text,Badword[i]) != -1)return Kick(playerid);


    mfg. :thumbup: