Beiträge von IPrototypeI

    Ich habe das Problem das man das Textdraw sieht aber nicht die Zahl, also ich sehe die Zahl auch etc aber wenn ein anderer drauf kommt und ich ihn Frage ob er es sieht meinen die nein!
    Ist PlayerTextDraw nur für einen Spieler oder wie? :S
    z.b bei der FPS Anzeige


    mfg


    Ein PlayerTextdraw ist nicht für eine person sondern für alle. Die besonderheit ist halt der eingebaute streamer was einem ermöglicht um das limit der textdraws herrum zu schippern. Wie verwendest du das PlayerTextdraw.


    Du musst es erstellen lassen bei OnPlayerConnect , entfernt werden diese automatisch bei OnPlayerDisconnect.
    Kann es sein das du wie ich e soben schon geschrieben habe es nicht unter OnPlayerConnect erstellst oder es nicht anzeigst.
    per PlayerTextdrawShow.

    Hallo,
    Wen einer Stirbt erscheint ein Totenkopf, aber wen eine andere Person den Server verlässt, verschwindet das Totenkopf, wie kann ich machen das nur dann das Totenkopf verschwindet, wenn der toter Offline geht?


    DestroyPickup(TotenKopf[playerid]);


    Zumal heißt es der Totenkopf und nicht das aber genug zu deinem Grammatikproblem.


    Normal sollte dies nicht passieren wenn du eine Array hast.
    Bei dir wird das wahrscheinlich so aussehen.
    new TotenKopf[MAX_PLAYERS];


    Nun es kann nur sein das du die id des Totenkopfs besser gesagt die des Pickups nicht in der Array speicherst.
    Daher solltest du mal nachschauen ob sowas vorhanden ist bei OnPlayerDeath.
    TotenKopf[playerid] = CreatePickup(...

    Mann kann auch noch die methode das ergebniss was man als string abruft splitten falls alles in einer spalte rein geschrieben ist natürlich mit trennsymbolen.
    Ob das + der R7 version von BlueG noch schneller ist als das generelle auslesen kann ihr nicht bestätigen jedoch denk ich das dies schneller ist im gesamten.

    Es muss nicht am Streame rliegen hast du das skript kompilt also hast du die .amx im gamemode ordner .
    Möglicherweise fehlen files oder benutzt du deklarierte natives die es nicht gibt und lässt sie bei main oder OnGameModeInit aufrufen.


    So sollte das prima gehen wie es Tommy geschrieben hatte


    "s[20]S(Niemand)[20]"
    musst natürlich die werte der strings anpassen benutzt du das neueste sscanf plugin überhaupt ?
    weil wie schon gesagt so sollten keine Probleme Auftreten
    auch wenn du den inhalt weg lässt Also
    "s[20]S()[20]"
    so wird nix übergeben an den string nicht so wie oben Niemand.
    Testest du das direkt auf deinem Server oder erst auf deinem Homepc da mir schon aufgefallen ist das Linux generel mal schwierigkeiten macht ab und zu.


    //edit zum Thema der verwendung von Z oder z


    Zitat

    the old "z" optional string specifier is now "S" (there is still "z" and, for completeness, "Z", but both give warnings).


    Im klar text früher gab es mal den Buchstaben z für die optionale Strings als specifier nun ist es S aber es gibt noch z Z nur geben diese warnings.

    IPrototypeI: "Dabei wäre aber eine If-Abfrage noch performanter." - dabei heißt in diesem Fall. Grundsätzlich sind If-Abfragen/Else-If-Statements bis zu einer bestimmten Anzahl schneller als ein Switch-Case-Konstrukt. Der Ternary-Operator ist von alle dem aber der langsamste.


    Naja würde ich nicht behaupten case ist zweilos schneller als die if abfrage hab mal ein kleinen einfachen test gemacht.
    Zu Thema Ternärer Operator ist es so das dieser nur schneller ist bei eine zusätzlichen abfrage soll auch auch das if + else vereinfachen.
    generel ist eine normale also eine if abfrage schneller als der Operator.

    Dabei wäre aber eine If-Abfrage noch performanter.

    Code
    stock VehicleAllowed(playerid) {
    	new modelid = GetVehicleModel(Fahrzeug[playerid]);
    	if((modelid >= 585 && modelid <= 587) || modelid == 600 || modelid == 602 || modelid == 605 || modelid == 608) return 1;
    	return 0;
    }


    Nein dead mit case zu arbeiten ist in PAWN schneller also mit if oder else if nur der Ternäre Operator ist schneller.

    Mit den Operatoren


    || // oder
    && // und


    Der && Operator ist keine Gutewahl dafür ^^ oder kannst du dich zerreißen und an zwei punkten gleichzeitig sein


    ein weitere möglichkeit ist ein array mit einer for-schleife jedoch nur sinnvoll bei sehr vielen koordinaten


    Benutz wie Pille es schon geschrieben hat den Oder Operator ||

    Hey,
    bin grad dabei 1o1 Räume zu erstellen. (DM Script)
    Kann mir jemand sagen wie ich das "Limit an Spielern" auf 2 setze?
    Also das nur 2 Spieler in einen Raum können :S


    Je nach dem sonst es statische Räume also damit meine ich begrenzt auf 7 weil so könntest du eine array machen
    und den wert erhöhen kostet jedoch memory


    oder was noch besser ist falls es über die vw geht eine forschleife durchgehen lassen wer alles in dem raum ist sollte der output 2
    sein so kannst du dem spieler ein nachricht schicken


    new i,x,string[50];
    for(i < MAX_PLAYERS; ++i)if(GetPlayerVirtuelWorld(i) == "jeweilige variabel einfügen")++x;
    format(string,50,(x != 2)? "{00FF00}Du hast den Raum %d als %d betreten":"{FF0000}Dieser Raum ist schon voll","jeweilige variabel einfügen",x+1);
    if(x == 2)return SendClientMessage(playerid,-1,string);

    1. #define MAX_ZOLLGATES (19)
    schau dir die anzahl der tore mal an ich kann keine 19 Zählen bei 18 einträgen 17 +1


    2. Mögen die Arrays keine Operator in ihnen
    27.2999992-3


    zu
    24.2999992


    es ist auch bei der MoveDynamicObject function hinzurechenbar bei Z Koordinate
    und zu guter letzt



    ZollInfo[i][zID] = CreateDynamicObject(ZollInfo[i][zObject]
    ,ZollInfo[i][zCX]
    ,ZollInfo[i][zCY]
    ,ZollInfo[i][zCZ]
    ,ZollInfo[i][zCRx]
    ,ZollInfo[i[zCRy]
    ,ZollInfo[i][zCRz]);


    fällt dir jetzt was auf


    Deswegen habe ich es auch untereinander geschrieben

    Schau dir den code doch mal an und zerleg ihn in seine einzelteile ab dem error abschnitt



    for(new i; i < MAX_ZOLLGATES; ++i){
    ZollInfo[i][zID] = CreateDynamicObject(ZollInfo[i][zObject]
    ,ZollInfo[i][zCX]
    ,ZollInfo[i][zCY]
    ,ZollInfo[i][zCZ]
    ,ZollInfo[i][zCRx]
    ,ZollInfo[i[zCRy]
    ,ZollInfo[i][zCRz]
    );
    }


    Es sticht ja so gesehen schon raus oder besser gesagt rein

    Du hast dir eindeutig hier nix durchgelesen, Alles rein kopiert, deine koordinaten eingefügt und dich darauf vllt gefreut das es geht.


    1. Schau dir das define an
    #define MAX_ZOLLGATES


    - Die gehört über das Array, zu dem steht da nicht ohn egrund das wort Toranzahl dran die Anzahl der Zolltore die du in deinem array verwendest hier kommt eine Zahl rein.


    2. Schau dir mal das enum an und danach die eingetragenen Werte in das array ich hoffe dir fällt was auf



    zID,zObject,Float:zCX,Float:zCY,Float:zCZ,Float:zCRx,Float:zCRy,Float:zCRz,Float:zOX,Float:zOY,Float:zOZ,Float:zORx,Float:zORy,Float:zORz,bool:zState,
    0,973,1754.4000244,525.9000244,27.2999992,0.0000000,0.0000000,160.0000000,false


    3. Den Letzten Fehler darfst du selbst suchen die Zeile ist ja schon angegeben das war mit mutwillen gegen copy paster den man nur durch
    selbst schreiben des codes nicht macht oder durch genaues hinschauen kurz ergänzen kann.


    Schauch in meine Signatur bei Tutorials.

    war ja nur zum testen hab jetzt nen dritten namen hinzugefügt aber es geht irgendwie nicht... if(strcmp(pName,"[GMR]Deeze",true)!=0&&strcmp(pName,"Pennerinseltest",true)!=0)&&strcmp(pName,"[GMR]AkitoLetsPlay",true)!=0)Kick(playerid);
    //Edit ok hab den Fehler gefunden


    wenn du weitere nahmen hinzufügen willst mach doch ein array


    #define MAX_BAD_NAMES 3
    new BadNames[MAX_BAD_NAMES][10] ={"[GMR]Deeze","Pennerinseltest","[GMR]AkitoLetsPlay" };


    new pName[MAX_PLAYER_NAME],i;
    GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
    for(; i != MAX_BAD_NAMES; ++i)if(!strcmp(BadNames[i],pName,true))return Kick(playerid);


    dein Fehler war das du das Ausrufezeichen vergessen hast
    if(strcmp("Pennerinseltest",pName,true))


    dies was du geschrieben hast ist die kurzform von
    if(strcmp("Pennerinseltest",pName,true) == 1)


    Nun sollte man wissen das sollten die string die selben sein 0 zurück gegeben wird es können jedoch auch andere werte zurück gegeben werden jedoch das wichtigste ist dabei
    zu wissen das strcmp 1 zurück gibt sollte kein treffer vorhanden sein also sollte der Namen nicht mit dem wort übereinstimmen.
    Das hat du ja hier das bedeutet jeder spieler mit einem anderen namen als Pennerinseltest wird nun gekickt.
    um nochmal auf das Ausrufezeichen zurück zu kommen das bedeutet alles außer im zusammen hang mit der abfolge alles außer 1.
    Die Anweisung danach oder der Anweisungblock danach wird ausgeführt wenn die strings übereinstimmen

    Ja aber ich weiß grad nich genau wie. :D


    Sowas ist Spam habs mal gemeldet ^^


    __________________________________


    Du musst den Spielernamen mit GetPlayerName auslesen und kannst ihn mit strcmp vergleichen
    Bei OnPlayerConnect

    new pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
    if(!strcmp("noob",pName,true))return Kick(playerid);


    //edit du kannst es dir auch noch einfach machen und mit strfind arbeiten und nach dem wort im namen suchen

    Dann nimm doch einfach den kick befehl raus, und hau eine Animation rein


    Laut dem text den er verfasst hat kann man herraus lesen das er wahrscheinlich nicht mal weiß wie man sowas schreibt ein anti cbug.
    Nun gut Du brauchst die Animation und es gibt mehrere möglichkeiten um ein anti cbug zu machen entweder du ziehst die zeit mit GetTickCount raus wenn er schieß ob danach die taste c drück also ducken oder du frägst ab bei OnPlayerKeyStateChange ob er zwei tasten gedrückt hat je dazu kannst abfragen ob die alte taste ducken war und die
    neue Schießen also KEY_FIRE , KEY_CROUCH