[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Danke @Kaliber fuer die Loesung des Problems, wobei ich garnicht mehr weiss woran es jetzt ueberhaupt lag

    ...du hattest 2 Include Dateien..die eine hast du auf dem Desktop bearbeitet..die eigentliche lag aber im Includes Ordner ^^


    Actor werden nicht synchronisiert...das bedeutet, die können auch mal woanders stehen...du solltest den Actor erst erstellen, wenn der Spieler im Streambereich von dem Actor ist :)


    Und die Funktion ist so besser:



    C
    stock CreateGlobalActor(actorid,modelid,Float:ax,Float:ay,Float:az,Float:angle,Float:distance,pickupid)
    {
        actorid = CreateActor(modelid,ax,ay,az,angle);
        ax += distance * floatsin(-angle, degrees);
        ay += distance * floatcos(-angle, degrees);
        pickupid = CreatePickup(1210,2,ax,ay,z,-1);
        SetActorInvulnerable(actorid, true);
        printf("Actor %d created, pickupid %d",actorid,pickupid);
        return pickupid;
    }

    Und wieso returnst du pickupid wenn du es doch übergibst? :huh:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Kaliber: Das werde ich mal probieren die Teile zu erstellen wenn die im Streambereich sind.


    Naja ich habe gedacht ich returne mal irgendwas damit es nicht so langweilig ist, aber ich sehe jetzt erst dass das eigentlich keinen sinn macht :D Danke dir fuer deine Funktion damit klappts

  • Ich habe mir das Include a_zones geholt. ich wollte fragen wie ich das benutze das er die orte erkennt? z.b Name (Weiß ich wie) hat ein Timeout in Rodeo, Los Santos also das er den ort und die Stadt anzeigt

    In dem Thread steht doch ein Beispiel:



    C
    new string[145], zone[MAX_ZONE_NAME];
    GetPlayerName(playerid, string, MAX_PLAYER_NAME);
    GetPlayer2DZone(playerid, zone, MAX_ZONE_NAME);
    static const r[][] = {"Timeout","Logout","Ban/Kick"};
    format(string, sizeof(string), "Spieler %s hat den Server Verlassen. (%s) (%s)", string, zone, r[reason]);
    SendClientMessageToAll(-1, string);

    Dann sieht das zum Beispiel so aus:


    Spieler Kaliber hat den Server Verlassen. (Bone County) (Logout)

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • if(issuerid != INVALID_PLAYER_ID && (weaponid == 34 || weaponid == 33) && bodypart == 9)
    {
    SetPlayerHealth(playerid, 0.0);
    GameTextForPlayer(issuerid, "~r~Headshot", 3000, 6);
    GameTextForPlayer(playerid, "~g~Headshot", 3000, 6);
    }



    wollte was fragen undzwar wen ich jetzt als Hitman ein Spieler ein Headshot gebe sollte mir die Distanz anzeigt werden z.b ich war jetzt 50m entfernt oder so.


    heißt ~r~Headshot~n~~w~[50m]

  • Einfach so:


    C
    new string[128],Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    format(string,sizeof(string),"~r~Headshot~n~~w~[%.02fm]",GetPlayerDistanceFromPoint(issuerid,x,y,z));
    GameTextForPlayer(issuerid, string, 3000, 6);

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Einfach so:


    C
    new string[128],Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    format(string,sizeof(string),"~r~Headshot~n~~w~[%.02fm]",GetPlayerDistanceFromPoint(issuerid,x,y,z));
    GameTextForPlayer(issuerid, string, 3000, 6);


    Muss man das mit Textdraw machen oder gibts da was eigenes dafür das links und rechts diese Karten kommen?


  • if(issuerid != INVALID_PLAYER_ID && (weaponid == 34) && bodypart == 9)
    {
    if(Spieler[playerid][pFraktion] == 8)
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    format(string,sizeof(string),"~w~HEADSHOT~n~~w~[%.02f M]",GetPlayerDistanceFromPoint(issuerid,x,y,z));
    GameTextForPlayer(issuerid, string, 3000, 6);
    format(string,sizeof(string),"~w~HEADSHOT~n~~w~[%.02f M]",GetPlayerDistanceFromPoint(playerid,x,y,z));
    GameTextForPlayer(playerid, string, 3000, 6);
    SetPlayerHealth(playerid, 0.0);
    }
    }



    Hey, ich wollte fragen wen der Spieler Hitman ist soll er nur Headshots vergeben können aber leider funktioniert das nicht


  • if(issuerid != INVALID_PLAYER_ID && (weaponid == 34) && bodypart == 9 && Spieler[playerid][pFraktion] == 8)
    {
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    format(string,sizeof(string),"~w~HEADSHOT~n~~w~[%.02f M]",GetPlayerDistanceFromPoint(issuerid,x,y,z));
    GameTextForPlayer(issuerid, string, 3000, 6);
    format(string,sizeof(string),"~w~HEADSHOT~n~~w~[%.02f M]",GetPlayerDistanceFromPoint(playerid,x,y,z));
    GameTextForPlayer(playerid, string, 3000, 6);
    SetPlayerHealth(playerid, 0.0);
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Beitrag von Dr. Frauenarzt ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Fehler Gefunden :) ] zuviel :D ().
  • Moin ne Frage
    Kann ich den Teil hier alternativ mit sscanf ausdruecken?


    C
    new cmd[32], idx;
    	cmd = strtok(cmdtext, idx);


    edit:


    Habs geschafft mit


    C
    new cmd[32], idx;
    sscanf(cmdtext,"s[32]d",cmd,idx);

    Endlich kann ich strtok wegschmeissen :D


    /edit:


    Warum soll strtok eigentlich so schlecht sein?
    Habe gerade mal strtok (Das von DracoBlue), strtok(Das von Jeffry was schneller sein sollte) mit sscanf verglichen, und es kam raus dass das angebliche schnellere strtok von Jeffry langsamer war als strtok von Dracoblue und sscanf. Strtok von DracoBlue war jedoch nur extrem minimal von sscanf entfernt warum auch immer


    Das Ergebnis war verblueffend





  • Warum soll strtok eigentlich so schlecht sein?

    Für die meisten Anwendungen spielt es absolut keine Rolle.
    Ich persönlich finde strtok flexibler, sscanf ist allerdings für viele einfacher, da alles in einer Zeile steht.
    Schlecht ist strtok aber keineswegs.


    Habe gerade mal strtok (Das von DracoBlue), strtok(Das von Jeffry was schneller sein sollte) mit sscanf verglichen, und es kam raus dass das angebliche schnellere strtok von Jeffry langsamer war als strtok von Dracoblue und sscanf. Strtok von DracoBlue war jedoch nur extrem minimal von sscanf entfernt warum auch immer

    Das liegt daran, dass dein Test falsch ist.
    Du musst den idx vor jedem Durchlauf wieder auf 0 setzen, sonst wird immer nur ein leerer String zurück gegeben, da nichts gesplittet werden kann. Das gilt übrigens für beide strtok's, denn idx ist der Pointer auf das aktuelle Zeichen. Der steht sonst nach dem ersten Durchlauf immer ganz am Ende des Strings.
    Das dürfte bei meiner Funktion dazu führen, dass sie langsamer ist, da strmid in jedem Fall aufgerufen wird, und nicht durch die while-Bedingung umgangen wird. Das ließe sich natürlich zuvor abfragen, macht es aber dann in allen anderen Fällen, außer im Leer-Fall, langsamer als im aktuellen Zustand, was somit schlechter wäre.


    Anbei mein Post mit der Funktion sowie dem Test dazu:
    Nützliche Codeschnipsel

  • Ich persönlich finde strtok flexibler

    Findest du ?
    Man hat auf jedenfall am ende eine gewisse Zeichenkette


    Was ich an sscanf halt sehr mag bzw. machte, ist das man mit dem was man hatte direkt weiter arbeiten konnte ohne "umwege" bzw. Umwandlungen.
    Großartig ist mMn auch die "listen" bzw. Enum Funktion zumal es sscanf auch zulässt arrays zu füllen.


    Ob das ganze im Bezug auf commands wirklich einen vorteil bietet, sei mal so dahin gestellt,
    aber für die Verarbeitung von Arrays und Texten unersetzlich :D

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Findest du ?

    Bezogen auf Commands schon. So kann man z.B. bei mehreren Parametern unterschiedliche Nachrichten ausgeben, wenn bis zu Punkt X eingegeben wurde.
    Das geht zwar bei sscanf auch, sieht aber dann ziemlich grottig aus.


    Das sscanf mehr als strtok kann steht ja außer Frage. Die Frage ist nur, jeder alles braucht.
    Performanter ist es auch, nur eben unwesentlich, für Befehle spielt es keine Rolle welches man da nutzt.



    Habe ich mal gemacht Jetzt kommt folgendes raus

    Das sieht richtig aus. Wie du siehst in mein strtok wesentlich schneller.
    sscanf ist natürlich nochmal schneller, es kann die Vorteile des Plugins nutzen.

  • Mal ne kleine Frage hab wieder mal Angefangen nach paar Jahren bisschen rumzuspielen mit dem Scripten und fang ganz simple an aber kriege jetzt schon kleine Fehler die ich selber nicht schaff zu lösen



    GetPlayerName(playerid,name,sizeof(name));
    if(name=="ichecks") return



    C:\Users\Admin\Desktop\samp server\gamemodes\fun.pwn(113) : error 033: array must be indexed (variable "name")
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase




    1 Error.


    Hab davor natürlich eine Variable
    new name[24];

  • ist es eigentlich schneller einen command in einem Array zu suchen?

    Zum dritten mal nun...nein xD


    Am schnellsten ist es, wenn du direkt an die Adresse springst...und zwar wie mit ocmd/zcmd/ycmd/pcmd xD

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen