[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
  • Der Meinung bin ich auch.
    In jeglicher Variable, steht nirgendswo mein Name als Inteilhaber / Besitzer.
    GetName zeigt nur meinem Namen an.
    #define GetName(%0) PlayerInfo[%0][p_Name]
    Bild meiner aktuellen Tabelle

    Bild der Business Informationen


    Edit:
    Komischer Weise, als ich die GetName() Funktion durch PlayerInfo[playerid][p_Name] ersetzt habe, wird mir der Dialog nicht mehr angezeigt, also es scheint nun zu funktionieren.
    Vielen Dank Jeffry, dass du mich indirekt auf die Idee gebracht hast. ^^

    Einmal editiert, zuletzt von malE ()

  • Tag liebe leuts,
    ich habe mal wieder bzw. immer noch ein Problem mit meinem Death-System. Diesmal liegt es nicht am Timer sondern an dem TextLabel und dem Pickup.
    Das Problem hierbei ist: Dass wenn ich sterbe, soll ein Pickup sowie TextLabel erstellt werden, dies erfolgt auch nur leider werden diese beiden Sachen an der Position vom Krankenhaus gespawnt hier der code:
    Wird übrigens unter OnPlayerDeath aufgerufen.

  • Ah, bei dir war das, dass es doppelt aufgerufen wird.
    Dann sollte es so passen:
    stock MedicalSpawn(playerid)
    {
    static lastSpawn[MAX_PLAYERS];
    new h,m,s,str[168],t;
    new Float:x,Float:y,Float:z;
    GetPlayerPos(playerid,x,y,z);
    t = gettime(h,m,s);
    if(lastSpawn[playerid]+1 < t)
    {
    lastSpawn[playerid] = t;
    PickupInfo[playerid][pu_x] = x;
    PickupInfo[playerid][pu_y] = y;
    PickupInfo[playerid][pu_z] = z;
    PickupInfo[playerid][pu_hour] = h;
    PickupInfo[playerid][pu_minute] = m;
    PickupInfo[playerid][pu_seconds] = s;
    PickupInfo[playerid][pu_pickup] = CreatePickup(1313,0,PickupInfo[playerid][pu_x],PickupInfo[playerid][pu_y],PickupInfo[playerid][pu_z]);
    format(str,sizeof(str),"Deathpoint of %s\nTime of Death: %02d:%02d:%02d\n%i Seconds left until respawn.",getPlayerName(playerid),h,m,s,SpielerInfo[playerid][pDeathtime]);
    PickupInfo[playerid][pu_label] = Create3DTextLabel(str,Weiß,PickupInfo[playerid][pu_x],PickupInfo[playerid][pu_y],PickupInfo[playerid][pu_z],15.00,0,0);
    if(MedicalTimerID[playerid] != -1) KillTimer(MedicalTimerID[playerid]);
    MedicalTimerID[playerid] = SetTimerEx("MedicalTimer",1000,true,"i",playerid);
    }
    SetSpawnInfo(playerid,0,SpielerInfo[playerid][pSkin],1171.4297, -1323.3737, 15.5000,90.000,0,0,0,0,0,0);
    SetPlayerVirtualWorld(playerid,0);
    SetPlayerInterior(playerid,0);
    SpawnPlayer(playerid);
    TogglePlayerControllable(playerid,0);
    SetPlayerCameraPos(playerid, 1233.3835, -1325.5378, 28.5698);
    SetPlayerCameraLookAt(playerid, 1232.3846, -1325.5327, 28.4548);
    return 1;
    }

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


    ast2ufdyxkb1.png


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

  • 40% kannst du so festlegen:
    if(random(100) < 40)
    {
    //40% Chance hier zu landen
    }


    Du kannst auch 10 und 4 nehmen, ich habe es nur so zur Veranschaulichung gemacht.


    EDIT: Ein Switch lohnt sich da meiner Meinung nach nicht, da es nur eine Abfrage ist, die ist in dem Fall performanter.

  • EDIT: Ein Switch lohnt sich da meiner Meinung nach nicht, da es nur eine Abfrage ist, die ist in dem Fall performanter.

    Weißte ja nicht...


    Vielleicht will er das verschiedene Dinge passieren, zu 10%..20%...30%...


    Zudem ist ein switch immer schneller als eine if-Abfrage..da per jumptable direkt an die Stelle gesprungen wird..

    ast2ufdyxkb1.png


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

  • Dein Freund sollte den materialindex mal wechseln, also einfach mal so zwischen 0-4 (vielleicht auch mehr) durch gehen, und schauen welcher Index der richtige war, damit das vorne auf das richtige "Brett" steht.
    Damit der Text da nur einmal steht, müsst ihr eine größere Schrift wählen. ;)

  • Zudem ist ein switch immer schneller als eine if-Abfrage..da per jumptable direkt an die Stelle gesprungen wird..

    Nein, nicht immer. Bei einer Abfrage ist die if-Variante - da korrigiere ich mich - zum Teil schneller, auch nicht immer. Es kommt drauf an, wie man die Abfrage macht. Interessanterweise, das ist mir grade aufgefallen, ist eine Abfrage if(x < 10) langsamer als if(x < 1).
    Hier aber zum Beispiel ist die if-Abfrage schneller:
    new a;
    a = 1;
    new t = GetTickCount();
    for(new i = 0; i < 10000000; i++)
    {
    if(a == 0) { }
    else { }
    }
    printf("if: %dms", GetTickCount()-t);
    t = GetTickCount();
    for(new i = 0; i < 10000000; i++)
    {
    switch(a)
    {
    case 0: { }
    default: { }
    }
    }
    printf("switch: %dms", GetTickCount()-t);


    Tatsächlich kommt es aber dann darauf an, wie viel Prozent Differenz er nimmt, ob es performanter ist oder nicht, daher würde ich sagen beide Varianten sind in Ordnung, wobei ich trotzdem die if-Variante bevorzuge, da sie schneller zu schreiben ist und der Performanceunterschied irrelevent gering ist.