[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 Kali, finde deine Posts immer wieder super :D



    Habe eine Frage:


    Kann ich eine Hexzahl so shiften, dass ich am Ende immer 00 rauskriege? Also von 0xFF00FFAA zu 0xFF00FF00 ?


    Habe aktuell folgendes


    C
    stock GetPlayerNameID(playerid)
    {
    	new name[MAX_PLAYER_NAME+24];
    	GetPlayerName(playerid,name,sizeof(name));
    	format(name,sizeof(name),"{%06x}%s (%d){FFFFFF}", GetPlayerColor(playerid) >>> 8,name,playerid);
    	return name;
    }

    Wuerde aber gerne eine Funktion machen, mit der ich die Spielerfarbe des Spielers nehmen kann, und dann setzen, jedoch mit 00 am Ende, also unsichtbar auf der Minimap

  • Kann ich eine Hexzahl so shiften, dass ich am Ende immer 00 rauskriege?

    Joa mit einem kleinen Trick wäre das machbar:


    C
    //Beispiel:
    new hex = 0xFF00FFAA;
    printf("0x%08x",(hex>>8)<<8 );
    //Output: 0xFF00FF00

    ast2ufdyxkb1.png


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

  • Vielen Dank :D Auch wenn ich das Shiften irgendwie nie raffe mit mehreren >>>, vorallem nicht bei Hex :D


    Habe es jetzt so


    C
    stock SetPlayerInvisible(playerid)
    {
    	new hexstring[32];
    	new hex = GetPlayerColor(playerid);
    	format(hexstring,sizeof(hexstring),"0x%08x",(hex>>8)<<8 );
    	sscanf(hexstring, "x", hex);
    	SetPlayerColor(playerid,hex);
    }
  • Nein, kannst das einfach so machen:


    C
    #define getInv(%0) (((%0)>>8)<<8)
    
    
    //Direkte Nutzung:
    SetPlayerColor(playerid, getInv(GetPlayerColor(playerid)));

    ast2ufdyxkb1.png


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

  • Super :D
    Das heisst ich kann statt das hier


    #define COLOR_TEAM_ONE 0x8B451355 //Brown




    #define COLOR_TEAM_ONE_STEALTH 0x8B451300 //Brown


    Das hier machen?


    #define COLOR_TEAM_ONE 0x8B451355 //Brown



    #define COLOR_TEAM_ONE_STEALTH getInv(COLOR_TEAM_ONE) (((COLOR_TEAM_ONE)>>8)<<8) //Brown

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Gibt es die Moeglichkeit die Anzahl der Elemente in einem enum zu bestimmen?


    Ich muss ein Array erstellen als Zaehler fuer erstellte Pickups, und habe in einem enum die Pickuptypen.
    Dann will ich das Array CreatedPickups[Anzahl der Elemente aus dem enum] mit Index den entsprechenden Pickuptyp aus dem enum haben.


    Gibts da irgendwelche Tricks?

  • Schonmal vielen Dank dafuer :D


    Habe jetzt mein enum was ich noch auf ca. 40 Elemente ausdehnen werde


    C
    enum PickupTypes
    {
    	INVALID_PICKUP_TYPE,
    	MONEY_TYPE,
    	ACTOR_TYPE,
    	INFO_TYPE,
    	WEAPONTYPE_M4
    };


    Jedoch das Problem dass ich nun tag mismatchs bekomme wo ich die Inhalte wie MONEY_TYPE vorher eingesetzt habe




    C
    new mres = binarysearch(MoneyPickups,pickupid,0,sizeof(MoneyPickups)-1);
    	if(mres > -1 && MoneyPickups[mres] == pickupid) return index=mres,MONEY_TYPE;
    	new ares = binarysearch(ActorPickups,pickupid,0,sizeof(ActorPickups)-1);
    	if(ares > -1 && ActorPickups[ares] == pickupid) return index=ares,ACTOR_TYPE;
    	new ires = binarysearch(InfoPickups,pickupid,0,sizeof(InfoPickups)-1);
    	if(ires > -1 && InfoPickups[ires] == pickupid) return index=ires,INFO_TYPE;

    Ist es weiterhin einfacher moeglich zu verhindern dass die MAX_PICKUPS Grenze nicht ueberschritten wird?


    Aktuell habe ich dieses komische Konstrukt hier


    C
    new ActorPickups[sizeof(GlobalActors)];
    new InfoPickups[sizeof(PlayerInfoPickups)];
    new MoneyPickups[MAX_PICKUPS-sizeof(ActorPickups)-sizeof(InfoPickups)-1];
  • Achso, nein dann einfach so machen:



    enum
    {
    a,
    b,
    c,
    max_pickups
    };


    Und max_pickups muss immer unten stehen und sagt dir dann, wie viele pickups du hast :)


    #Handy

    ast2ufdyxkb1.png


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

  • Das 1. Element (sofern man nix geändert hat) ist immer 0.


    Also:



    enum
    {
    a,b,c
    };



    new x = a; //Name spielt hier keine Rolle
    //ist das selbe wie
    new x = 0;

    ast2ufdyxkb1.png


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

  • Guten Abend,


    Ich wollte fragen wie man es anstellt, dass wenn man stirbt die crack animation bekommt und für 3 Minuten da liegt.
    Ich hab schon dass ein und andere probiert. Bloß immer wurde der Spieler direkt gespawnt

  • Füg z.B. ein Boolean ein, dass der Spieler gerade gestorben ist..und unter OnPlayerSpawn prüfst dann, ob das true ist und wenn ja, setzt das alles in Ruhe :)

    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