Beiträge von Kaliber

    der stock ist doch eigentlich sinloss oder nicht er kann doch direct im Befehl die for schleife erstelln und die if abfrage machen ...


    Natürlich kann er das machen.


    Man brauch eigentlich gar keine Funktionen, man kann auch alles direkt in den Code klatschen.


    Allerdings fände ich diese Funktion nützlich und übersichtlicher, er muss sie natürlich nicht nutzen.


    Ich habe ihm lediglich das Beispiel gegeben, wie so eine Abfrage aussehen kann :rolleyes:


    mfg. :thumbup:

    es war schon Public aber egal


    Oh stimmt ^^


    Bin nur drüber gescrollt, dachte da steht stock.


    Aber dann macht dein Beispiel ja eigentlich noch weniger Sinn...da du nur die Klammern entfernt hast :D


    mfg. :thumbup:

    Ich habe 3 Tankstellen in LV zum Beispiel, doch damit ich nicht tausend mal /tanken machen muss oder den Befehl vollspamme,
    will ich sie vorher definieren, das /tanken alle diese Koordinaten erreicht und abruft, verstehst du, dass so gesehen an all diesen Punkten /tanken geht.


    Ja, dazu brauchst du aber kein MAX_PLAYERS und auch kein Enum ;)


    Nimm mein 1. Codebeispiel und dann kannst du so eine Funktion schreiben:


    stock IsInRangeOfTankstelle(playerid) {
    for(new i; i<sizeof TankKords; i++) {
    if(IsPlayerInRangeOfPoint(playerid,7.5,TankKords[i][0],TankKords[i][1],TankKords[i][2])) return 1;
    }
    return 0;
    }


    //Nutzung:
    if(!IsInRangeOfTankstelle(playerid)) return SendClientMessage(playerid,-1,"Du befindest dich an keiner Tankstelle!");


    mfg. :thumbup:

    Ich will die Tankstellen Punkte zum tanken abspeichern damit ich sie leicht abrufen kann, geht das nicht über enum?


    Ein Enum definiert nur den Typ für die Variablen, es initialisiert nichts ^^


    Zudem funktioniert das so nicht mit MAX_PLAYERS, was willst du da überhaupt machen? :huh:


    Sinnvoll wäre so etwas:


    //Ohne Enum:
    new Float:TankKords[][3] = {
    {2114.4126,928.6173,10.5474},
    {2115.1919,922.9832,10.5474},
    {2114.7725,917.8232,10.5474},
    {2115.0771,911.6562,10.5474},
    {2639.7839,1098.0349,10.5474},
    {2639.5811,1103.5743,10.5474},
    {2639.9871,1108.9187,10.5474},
    {2639.6855,1114.6630,10.5474},
    {2194.1582,2474.6921,11.0082},
    {2199.8157,2475.2302,11.0145},
    {2205.0735,2474.8633,11.0137},
    {2210.7324,2475.4531,11.0077}
    };
    //Abfragen machst du so:
    TankKords[0][0] //-> Gibt dir die X Koordinate von der 1. Reihe


    Wenn du das unbedingt mit einem Enum lösen willst, was in diesem Fall nicht erforderlich ist, kannst du es auch so machen:


    enum TankKoordinaten {
    Float:t_X,
    Float:t_Y,
    Float:t_Z
    };


    new TankKords[][TankKoordinaten] = {
    {2114.4126,928.6173,10.5474},
    {2115.1919,922.9832,10.5474},
    {2114.7725,917.8232,10.5474},
    {2115.0771,911.6562,10.5474},
    {2639.7839,1098.0349,10.5474},
    {2639.5811,1103.5743,10.5474},
    {2639.9871,1108.9187,10.5474},
    {2639.6855,1114.6630,10.5474},
    {2194.1582,2474.6921,11.0082},
    {2199.8157,2475.2302,11.0145},
    {2205.0735,2474.8633,11.0137},
    {2210.7324,2475.4531,11.0077}
    };
    //Abfragen machst du so:
    TankKords[0][t_X] //-> Gibt dir die X Koordinate von der 1. Reihe


    //Edit: Ups hatte was vergessen ^^


    mfg. :thumbup:

    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: