[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
  • @Jeffry


    Wenn ich Dynamische Pickups erstelle spawnt das Pickup nicht oder es ist komplett an der falschen Position bzw falsche höhe.
    Die Koordinaten stimmen aber.


    public CreateGameModePickup(Float:pickupX, Float:pickupY, Float:pickupZ, value_ID)
    {
    new string[128];


    for (new i = 0; i < MAX_SPHERES; i++) {


    if (strlen(SphereDM[i][sphere_idx]) > 0) continue;


    SphereDM[i][sphere_idx] = CreateDynamicPickupEx(1273, 14, pickupX, pickupY, pickupZ+1.0, 100.0, {sizeof(worldsDM)}, {-1}, {-1}, {-1}, 0, 89, -1, -1, -1);



    SphereDM[i][sphere_model] = 1273;
    SphereDM[i][sphere_x] = pickupX;
    SphereDM[i][sphere_y] = pickupY;
    SphereDM[i][sphere_z] = pickupZ+1.0;
    SphereDM[i][sphere_value] = value_ID;


    format(string, sizeof(string), "%i: X = %f | Y = %f | Z = %f | VALUE = %i", sIndexDM, pickupX, pickupY, pickupZ+1.0, value_ID);
    printf(string);


    sIndexDM++;
    break;


    }
    return true;
    }


    Denn das Textlabel ist auch an der richten Position.

  • So hab ich es damals gemacht, vielleicht hilft dir das ja weiter:
    https://pastebin.com/raw/YNrb4dXF


    Danke :)


    Mit "CreateDynamicSphere" hatte ich es auch schon aber da ist das Problem wenn zwei Spieler gleichzeitig in diesen Sphere fahren bzw drin sind kriegt nur einer das Nitro/Repair etc... Deshalb wollte ich auf Pickups wechseln aber wenn Pickups wohl nicht funktionieren muss ich das über OnPlayerUpdate machen ._.

  • Problem wenn zwei Spieler gleichzeitig in diesen Sphere fahren bzw drin sind kriegt nur einer das Nitro/Repair

    Warum eigentlich? Das Callback sollte doch für beide Spieler aufgerufen werden, oder löschst du die Sphere direkt, wenn der erste rein gefahren ist?


    Pickups kannst du außerhalb der genannten Zonen auf jeden Fall nicht erstellen.
    Du kannst aber einen Checkpoint dort erstellen, so habe ich es bei mir auf dem Server damals gelöst. Dieser wird dann auf dem Meeresspiegel angezeigt, erkannt wird er aber dort wo du ihn gesetzt hast, sprich auf Maps, wird er nicht angezeigt, funktioniert aber trotzdem. Das wäre ja sogar genau das, was du haben möchtest.

  • Das ist komisch, sollte eigentlich nicht passieren.
    Aber versuche es wie gesagt mal mit Checkpoints, vor allem dort, wo Pickups nicht gehen.


    Alternativ eben OnPlayerUpdate, das geht auch. Du hast ja immer separate Modes, somit halten sich die zu prüfenden Zonen ja im Rahmen.

  • heißt jetzt was genau ?
    das ist aus mein script Pawn da wahr voher was anderes


    hier der ganze code



    }
    }else{
    if(DeathIcon[playerid][dActive]==1){
    DestroyDynamicPickup(DeathIcon[playerid][dPickup]);
    DestroyDynamic3DTextLabel(DeathIcon[playerid][dLabel]);
    KillTimer(DeathIcon[playerid][dTimer]);
    DeathIcon[playerid][dPickup]=CreateDynamicPickup(1254,1,pos[0],pos[1],pos[2],GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
    new text[32];
    format(text,sizeof(text),"�\n%s",name);
    DeathIcon[playerid][dLabel]=CreateDynamic3DTextLabel(text,GRAU,pos[0],pos[1],pos[2],7.5,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
    DeathIcon[playerid][dTimer]=SetTimerEx("deathicontimer",15000,0,"i",playerid);
    }else{
    DeathIcon[playerid][dActive]=1;
    DeathIcon[playerid][dPickup]=CreateDynamicPickup(1254,1,pos[0],pos[1],pos[2],GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
    new text[32];
    format(text,sizeof(text),"�\n%s",name);
    DeathIcon[playerid][dLabel]=CreateDynamic3DTextLabel(text,GRAU,pos[0],pos[1],pos[2],7.5,INVALID_PLAYER_ID,INVALID_VEHICLE_ID,1,GetPlayerVirtualWorld(playerid),GetPlayerInterior(playerid));
    DeathIcon[playerid][dTimer]=SetTimerEx("deathicontimer",15000,0,"i",playerid);
    }
    }

  • Moin Leute ... Ich steh gerade mal (wie so oft) auf dem schlauch ...


    ich schreibe gerade mein Motor & Tanksystem um ... Ich möchte, den Tank des jeweiligen Fahrzeugs aus der Datenbank auslesen... Leider funktioniert das nicht so wie ich das will...


    Was ich habe:


    Code
    new tank[MAX_VEHICLES];
    
    
    cache_get_value_name_int(i, "color2", cInfo[id][c_color2]);
    ZEILE 996: cache_get_value_name_float(i, "tank", tank[cInfo[id][id_x]]);

    Leider kommt beim Compilen folgender Warning:



    Code
    ...selfmade.pwn(996) : warning 213: tag mismatch
    Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase
    
    
    
    
    1 Warning.

    MfG
    XonarZ

  • Du liest es als Float aus aber erstellst es nicht als Float.


    new Float:tank[MAX_VEHICLES];

    Ich hab mal eine weitere frage dazu ... Warum erkennt er dann allerdings tank als 0.00 an obwohl in der Datenbank 3.00 (3) steht...



    Code
    cache_get_value_name_float(i, "tank", cInfo[id][c_tank]);
    cache_get_value_name_float(i, "lpm", cInfo[id][lpm]);
    cache_get_value_name_float(i, "kmstand", cInfo[id][kmstand]);
    cInfo[id][id_x] = CreateVehicle(cInfo[id][model], cInfo[id][c_x], cInfo[id][c_y], cInfo[id][c_z], cInfo[id][c_r], cInfo[id][c_color1], cInfo[id][c_color2], -1);
    tank[cInfo[id][id_x]] = cInfo[id][c_tank];
    printf("VehicleID: %i hat %0.2f Liter", cInfo[id][id_x], tank[cInfo[id][id_x]]);

    Da kommt dann als VehicleID die ID raus, in der ich gerade sitze (2) aber dann steht 0.00 liter... Obwohl in der Datenbank 3 Liter stehen.


    MfG
    XonarZ

  • cache_get_value_name_float(i, "tank", cInfo[id][c_tank]);

    Dort speicherst du den Tank in der Float "cInfo[id][c_tank]" aber in der Abfrage verwendest du "tank[cInfo[id][id_x]]"
    Ich denke mal das im Vehicleenum ist das richtige, also ersetz einfach das "tank[cInfo[id][id_x]]" mit "cInfo[id][c_tank]"


    EDIT:
    Hab Zeile 5 übersehen, ist denn "cInfo[id][c_tank]" auch als Float deklariert?

  • Dort speicherst du den Tank in der Float "cInfo[id][c_tank]" aber in der Abfrage verwendest du "tank[cInfo[id][id_x]]"Ich denke mal das im Vehicleenum ist das richtige, also ersetz einfach das "tank[cInfo[id][id_x]]" mit "cInfo[id][c_tank]"

    Okay also das mit dem tank habe ich gefixxt ... Ich lasse es erst in c_tank auslesen, damit ich die variable habe weil ich für tank ja die FahrzeugID brauche (wegen MAX_VEHICLES) und weise dann dem tank[MAX_VEHICLES] den wert zu der in c_tank steht...


    Mein /motor befehl:


    Als erstes print bekomme ich die ID in der ich sitze und als motorwert -1 raus ... Warum kann er dann aber nicht motor[vID]; auf 1 setzen bzw. warum geht der motor nicht an? das Textdraw wird auch grün.


    //EDIT Der Print mit dem motorvar kommt auch nicht ... also joa ... ich steh aufm schlauch


    //EDIT2 @Jeffry ja ist. wie gesagt das mit dem Tank auslesen hat nun funktioniert


    MfG
    XonarZ

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