Beiträge von Kaliber

    Ist es möglich abzufragen, ob eine Textdraw momentan geklickt wird, praktisch, eine Funktion die aufgerufen wird, solange die Textdraw geklickt wird^^


    Das könnte man sogar tun 8o


    Also es ist zwar etwas kompliziert aber du kannst folgendes machen:


    1. Sobald er 1x darauf klickt setzt du eine Variable (boolean) auf true.


    2. Gleichzeitig wird der Callback OnPlayerKeyStateChange aufgerufen, da LMB (Left Mouse Button) gedrückt wurde.


    3. In diesem Callback kannst du nun durch das Holding Makro prüfen, wie lange er die Mouse hält und halt prüfen über das boolean ob er überhaupt auf das TextDraw geklickt hat.


    So könnte man es realisieren ;)


    mfg. :thumbup:

    Habe alles jetzt mehrfach überprüft, aber egal was ich mache immer das gleiche.


    ...Entweder du postest mal diesen Command hier im Forum oder du schickst mir deine TeamViewer Daten per PN und ich schaue mal drüber ;)


    mfg. :thumbup:

    war das nicht die Geschichte, das er zB. 4 Sachen im Array angegeben hat, aber 5 Angaben in Rangname verwendet?


    Genau er hat eine Variable deklariert:


    new test[3];
    //Man hat hier einen Bereich von: 0-2 (Entspricht 3 Feldern, 0 und 1 und 2)


    //macht aber folgendes:
    test[3] = 1; //Fehler, da Feld 3 nicht mehr verfügbar ist
    //Da taucht dann so ein Fehler auf "Array index out of bounds"


    mfg. :thumbup:

    Immer diese lange unnötige "GF-Schreibweise" :wacko:


    Deshalb will dir da auch keiner helfen, weil das viel zu viel Code immer ist um das neu zu schreiben.


    Ich kann dir jetzt auch nicht direkt sagen, wo der Fehler liegt, da mir das immer zu doof ist diesen langen Code durchzugehen.


    Nutze am besten einen print-Debug um den Fehler zu finden ;)



    versuch mal so:


    Macht wirklich gar keinen Unterschied, außer das die Funktion jetzt public ist :whistling:


    mfg. :thumbup:

    Schonmal daran gedacht, dass der Datenbank User samp**** nicht die notwendigen Rechte hat um auf die Datenbank zuzugreifen? :huh:


    PS: Das stellst du da ein, wo du den MySQL User erstellt hast in der PHPMyAdmin Übersicht ^^


    mfg. :whistling:

    Nur noch ein /giverank befehl und damit kann ich nichts anfangen ich weis das ich eine Abfrage ob spieler Leader ist dann eine Abfrage welche Fraktion etc. aber ich weis nicht wie ich das schreibe.


    So zum Beispiel:


    ocmd:giverank(playerid,params[]) {
    if(!GetPVarInt(playerid,"Fraktion") || GetPVarInt(playerid,"Rank") != 6) return SendClientMessage(playerid,-1,"Du bist nicht der Leader einer Fraktion!");
    new pID,rang,string[144],name[2][MAX_PLAYER_NAME];
    if(sscanf(params,"ud",pID,rang)) return SendClientMessage(playerid,-1,"Verwendung: /giverank [spielerid] [Rang]");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,-1,"Ein Spieler mit dieser ID ist nicht online!");
    if(GetPVarInt(pID,"Fraktion") != GetPVarInt(playerid,"Fraktion")) return SendClientMessage(playerid,-1,"Dieser Spieler ist nicht in deiner Fraktion!");
    if(rang <= 0 || rang > 6) return SendClientMessage(playerid,-1,"Dies ist ein ungültiger Rang!");
    GetPlayerName(playerid,name[0],MAX_PLAYER_NAME),GetPlayerName(pID,name[1],MAX_PLAYER_NAME);
    format(string,sizeof string,"* Leader %s hat %s zum Rang %s (%d) ernannt!",name[0],name[1],rang_name[GetPVarInt(pID,"Fraktion")-1][rang-1],rang);
    return SetPVarInt(pID,"Rank",rang),SendClientMessage(playerid,-1,string),SendClientMessage(pID,-1,string);
    }


    mfg. :thumbup:

    Ist das so richtig?


    Schreib den Command von mir so, dann klappt es:


    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,"Rank")-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:

    Es funktioniert irgendwie nicht keine Ahnung warum da sthet nur Server unknow command.


    Besitzt du eine PVar auch, die den Namen "Rang" trägt?


    Du musst bei deinem Fraktions Befehlen, wenn er invitet wird folgendes schreiben:


    SetPVarInt(playerid,"Rang",1);


    Und auch einen GiveRank Befehl wo du dieses PVar nutzt ;)


    mfg. :thumbup:

    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: