[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
  • kann ich statt


    (listitem==1)


    auch abfragen


    (listitem==Keks)


    Wenn jetzt zB beim Inventar system immer je nach Reinfolge des Kaufs die Dinge anders sind, also der dialog auch jedes mal anders aussieht.


    - Tomsen


    //Edit: Noch eine Frage, wie heißt die Funktion für den /tv befehl, aber ich will nicht das die Camera des "zuschauenden" gefreezed ist sondern er sie trotzdem umrum des spielers bewegen kann.


  • ja wenn du keks definierst:
    #define keks 1


  • Versteh dich frage nicht so ganz, aber mit SetCameraBehindPlayer wird die Camera einfach sogesagen resettet du guckst halt wieder nach vorne
    http://wiki.sa-mp.com/wiki/SetCameraBehindPlayer

  • #define MAX_PICK 100
    new Pick[MAX_PICK], PickID;
    ocmd:create(playerid,params[])
    {
    if(PickID >= MAX_PICK)return SendClientMessage(playerid,-1,"Du kannst keine Pickups mehr erstellen");
    new Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    Pick[PickID] = CreatePickup(1234,0,Pos[0],Pos[1],Pos[2],-1);
    PickID++;
    return 1;
    }


    und wie kann ich zb alle auswählen(DestroyPickup)


    15 Beiträge [X]
    50 Beiträge [X]
    75 Beiträge [_]
    100 Beiträge [_]
    115 Beiträge [_]
    150 Beiträge [_]
    175 Beiträge [_]
    200 Beiträge [_]

    Einmal editiert, zuletzt von Goech ()

  • Schleife.
    Bsp:

    Spoiler anzeigen


    ocmd:delete(playerid){
    for(; PickID<MAX_PICK; PickID++){
    PickupZerstoeren(PickID); // Gerade nicht im Sinn, wie die Funktion heißt
    }
    return 1;
    }


  • for(; PickID<MAX_PICK; PickID++)

    Das würde auch nicht klappen so.. weil wenn PickID 100 ist, funktioniert das nicht


    wenn mach es so:

    for(new i = 0; i <MAX_PICK; i++)


    erklärung:

    Code
    for ( initalisierung; bedingung ; veränderung)


    d.h du erstellst einen wert. in unserem falle eine variable names "i" ... wenn dieser wert, deine bedingung erfüllt, soll etwas verändert werden.. in diesem fall, soll die variable i sich erhöhen


    Einmal editiert, zuletzt von Sebastian. () aus folgendem Grund: Rechtschreibfehler beglichen

  • vielen Dank aber es gibt immer noch ein Problem mit dem Destroyen der Pickups,
    hier wo die Pickups erstellt werden
    public OnPlayerDeath(playerid, killerid, reason)
    {
    #define MAX_PICK 100,PickID;
    new Pick[MAX_PICK];
    new Float:Totx,Float:Toty,Float:Totz;
    GetPlayerPos(playerid,Totx,Toty,Totz);
    Pick[PickID] = CreatePickup(1254,0,Totx,Toty,Totz,-1);
    PickID++;
    return 1;
    }
    und beim Destroyen
    ocmd:destroy(playerid,params[])
    {
    SendClientMessageToAll(COLOR_BLUE,"/DestroyPickup:O");
    for(new i = 0; i <MAX_PICK; i++)
    {
    DestroyPickup(Pick[i]);
    }
    return 1;
    }
    der letz erstellte Pickups verschwinden nur :( :huh:


    15 Beiträge [X]
    50 Beiträge [X]
    75 Beiträge [_]
    100 Beiträge [_]
    115 Beiträge [_]
    150 Beiträge [_]
    175 Beiträge [_]
    200 Beiträge [_]


  • Versteh dich frage nicht so ganz, aber mit SetCameraBehindPlayer wird die Camera einfach sogesagen resettet du guckst halt wieder nach vorne
    http://wiki.sa-mp.com/wiki/SetCameraBehindPlayer


    Ne es soll sie ja hinter einen anderen Play setzen wie man es vom /tv Befehl aus Godfather Scripts kennt.
    Und wie man es von da auch kennt kann man da zB nicht die Maus bewegen um sich umzuschauen, es muss aber irgentwie ne möglichkeit geben das man sich auch umschauen kann.
    Oder Liegt es daran das bei den TV befehlen immer die Controllable weggenommen wird?


    - Tomsen

  • Hey Leute..Ich wollte mal fragen, wie ich eine andere Playerid statt meine angebe.
    Beispiel:
    GivePlayerMoney(playerid,strval(inputtext));
    dini_IntSet(Spielerdatei,"Bankkonto",dini_Int(Spielerdatei,"Bankkonto")-strval(inputtext));


    Damit bekomme ich ja das Geld, das ich vorher eingegeben habe und es wird von dem Bankkonto abgezogen. Was ist aber nun wenn ich will dass eine andere Person das Geld überwiesen bekommt?
    playerid gibt ja nur meine ID an.
    Bei "/"Befehlen geht das ja mit ocmd aber wie das in diesem Fall geht, weiß ich leider nicht. Kann mir das vllt. jemand erklären?
    Ich hoffe ihr versteht meine Frage. Ist für die Überweisungsfunktion in der Bank.



    [align=center]


  • Ne es soll sie ja hinter einen anderen Play setzen wie man es vom /tv Befehl aus Godfather Scripts kennt.
    Und wie man es von da auch kennt kann man da zB nicht die Maus bewegen um sich umzuschauen, es muss aber irgentwie ne möglichkeit geben das man sich auch umschauen kann.
    Oder Liegt es daran das bei den TV befehlen immer die Controllable weggenommen wird?


    - Tomsen


    Beim Godfather Script wird in einem Timer immer PlayerSpectatePlayer aufgerufen deswegen kannst du die Maus nicht bewegen..

  • Das funktioniert alles mit PlayerSpectatePlayer ;)
    Hier mal ein /tv Befehl.
    new TVSystem[MAX_PLAYERS];
    new Spectate[Max_PLAYERS];


    ocmd:tv(playerid,params[])
    {
    if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)
    {
    new ID;
    if(sscanf(params,"u",ID)) return SendClientMessage(playerid,-1,"Benutze: '/Tv [SpielerID/Name]'");
    if(IsPlayerConnected(ID) && ID != playerid && GetPlayerState(ID) != PLAYER_STATE_NONE)
    {
    SetPlayerVirtualWorld(playerid,GetPlayerVirtualWorld(ID));
    TogglePlayerSpectating(playerid,true);
    if(GetPlayerState(ID) == PLAYER_STATE_ONFOOT)
    {
    PlayerSpectatePlayer(playerid,ID);
    }
    else
    {
    PlayerSpectateVehicle(playerid,GetPlayerVehicleID(ID));
    Spectate[playerid] = ID;
    SetPlayerInterior(playerid,GetPlayerInterior(ID));
    TVSystem[playerid] = 1;
    }
    }
    else
    {
    SendClientMessage(playerid,-1,"Der gewählte Spieler ist nicht Online.");
    }
    }
    else
    {
    Spectate[playerid] = -255;
    TogglePlayerSpectating(playerid,false);
    SpawnPlayer(playerid);
    TVSystem[playerid] = 0;
    }
    return 1;
    }

  • Hm.. okay. Naja ich such später nochmal danach.


    Gibts ne Möglichkeit mehrere Strings in einem switch zu definieren (weil den Zahlen immer das selbe zugeordnet wird) oder muss ich da pro Item (also für Item1, Item2... Item5 jedes mal ein switch machen)


    Also so:


    switch (SpielerInfo[playerid][pItem1]) //wenn pItem
    {
    case 0: format... // 0 ist...
    case 1: format... // 1 ist
    }


    Jetzt brauch ich das noch für pItem2 bis 5.


    Muss ich das jetzt noch 4 mal reinkopieren oder gibts nen anderen weg ? zB. ein || also "oder" Bedingung oder so?


    - Tomsen



    Einmal editiert, zuletzt von Tomsen ()


  • klappt nicht