[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
  • Tag,


    hab hier ein kleines Problemchen mit nem Dialog;


    Listitem 0 wird erfolgreich aufgerufen, 1 erscheint jedoch kein Dialog.
    Keine Ahnung woran das liegt. Kann mir kurz wer helfen :D^^ ?



    if (dialogid == DIALOG_PLAYERS && response)
    {
    PickedID[playerid] = Listitem[playerid][listitem];
    ShowPlayerDialog(playerid, DIALOG_PLAYERS_OV, DIALOG_STYLE_LIST, "Informationen", "K/D Rate\nSchussgenauigkeit", "Weiter", "Abbruch");
    }
    if (dialogid == DIALOG_PLAYERS_OV && response)
    {
    if (listitem == 0)
    {
    new dialog[360];
    format(dialog, sizeof(dialog), "\
    {FFFFFF}Kill / Death Ratio von %s:\n\n\
    {FFFFFF}Morde:\t\t\t{FF8800}%d\n\
    {FFFFFF}Tode:\t\t\t{FF8800}%d\n\
    {FFFFFF}K/D:\t\t\t{FF8800}%0.2f\n\n\
    {FFFFFF}Morde (Anteil):\t{FF8800}%d%%\n\
    {FFFFFF}Tode (Anteil):\t\t{FF8800}%d%%\n\n\
    {FFFFFF}Gelandete Treffer:\t{FF8800}%d",
    FullName(PickedID[playerid]),
    GetPlayerKills(PickedID[playerid]),
    GetPlayerDeaths(PickedID[playerid]),
    ((GetPlayerKills(PickedID[playerid]) * 1.0) / (GetPlayerDeaths(PickedID[playerid]) * 1.0)),
    floatround((100.0 / (GetPlayerKills(PickedID[playerid]) + GetPlayerDeaths(PickedID[playerid]))) * GetPlayerKills(PickedID[playerid]) * 1.0),
    floatround((100.0 / (GetPlayerKills(PickedID[playerid]) + GetPlayerDeaths(PickedID[playerid]))) * GetPlayerDeaths(PickedID[playerid])),
    Player[playerid][landedhits]);
    ShowPlayerDialog(playerid, DIALOG_PLAYERS_OV + 1, DIALOG_STYLE_MSGBOX, "K/D Ratio", dialog, "Ok", "Schließen");
    }
    else if (listitem == 1)
    {
    new dialog[360];
    format(dialog, sizeof(dialog), "\
    {FFFFFF}Genauigkeit von %s:\n\n\
    {FFFFFF}Kopftreffer:\t\t{FF8800}%.1f%%\n\
    {FFFFFF}Körpertreffer:\t\t{FF8800}%.1f%%\n\
    {FFFFFF}Beintreffer:\t\t{FF8800}%.1f%%",
    FullName(PickedID[playerid]),
    Player[PickedID[playerid]][headhits] / ((Player[PickedID[playerid]][headhits] + Player[PickedID[playerid]][bodyhits] + Player[PickedID[playerid]][leghits]) / 100),
    Player[PickedID[playerid]][bodyhits] / ((Player[PickedID[playerid]][headhits] + Player[PickedID[playerid]][bodyhits] + Player[PickedID[playerid]][leghits]) / 100),
    Player[PickedID[playerid]][leghits] / ((Player[PickedID[playerid]][headhits] + Player[PickedID[playerid]][bodyhits] + Player[PickedID[playerid]][leghits]) / 100));
    ShowPlayerDialog(playerid, DIALOG_PLAYERS_OV + 2, DIALOG_STYLE_MSGBOX, "Trefferquote", dialog, "Ok", "Schließen");
    }
    }

  • Schau mal, du Speicherst den Listitem im: PickedID[playerid] = Listitem[playerid];
    Aber fragst ab: if (listitem == 0)


    Nutze also: if(PickedID[playerid] == 0)


    Mfg.


    // Edit:


    Im Wiki ist aber es aber auch so zufinden:

    if(dialogid == DIALOG_WEAPONS)
    {
    if(response) // If they clicked 'Select' or double-clicked a weapon
    {
    // Give them the weapon
    switch(listitem)
    {
    case 0: GivePlayerWeapon(playerid, WEAPON_DEAGLE, 14); // Give them a desert eagle
    case 1: GivePlayerWeapon(playerid, WEAPON_AK47, 120); // Give them an AK-47
    case 2: GivePlayerWeapon(playerid, WEAPON_SHOTGSPA, 28); // Give them a Combat Shotgun
    }
    }
    return 1; // We handled a dialog, so return 1. Just like OnPlayerCommandText.
    }

    Die Missglückte Persönlichkeit, Ciao!

  • In PickedID speichere ich die ID des Spielers, von welchem ich die Informationen aufrufen möchte.
    Diese ID ziehe ich aus den listitem des ersten Dialoges (der Namen halt).


    Anschließen kann ich von diesem Spieler entweder die KD aufrufen, oder die Treffgenauigkeit.


    Würde ich da etwas falsch haben, würde sich die KD nicht öffnen. Aber das tut sie. Lediglich listitem 1 (Treffgenauigkeit) öffnet sich nicht.





  • Stehe auf'm Schlauch... Wieso gibt er mir "tag mismatch" aus? :D


    stock GetServerHealth(playerid) { return PlayerInfo[playerid][pHealth]; // Hier gibt er mir auch den Fehler aus... In der Funktion.}}
    Aufrufen tue ich wie folgt:
    new Float:sHealth = GetServerHealth(playerid);


    pHealth in meinem Array hat den Typen Float.
    Wahrscheinlich ein simpler Fehler, der mich hier schon 1 Stunde beschäftigt. Jemand eine Idee? :D

  • Hallo,
    ich möchte gerne via Spectate Abfragen ob der Spieler von "Zu Fuß" in "Fahrzeug" gegangen ist, OnPlayerStateChange.
    Mein Problem ist jetzt aber, OnPlayerStateChange fragt es ja nur bei sich selbst ab, nicht per "pID" die ich Spectaten möchte, wie ich kann es dies nun anpassen?


    Code:

    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
    if(oldstate == PLAYER_STATE_ONFOOT && newstate == PLAYER_STATE_DRIVER)
    {
    if(sInfo[playerid][sSpectate])
    {
    new pID = sInfo[playerid][sSpecPlayer];
    new vID = GetPlayerVehicleID(pID);
    new Float:carHP, string[144];


    GetVehicleHealth(vID, carHP);


    GetVehicleHealth(vID, carHP);
    format(string, sizeof(string), "~y~Fahrzeug:_~w~%d_(~b~%0.1f_~w~DL)", GetVehicleModel(vID), carHP);
    PlayerTextDrawSetString(playerid, SpectateMode[playerid][2], string); // GetVehicleSpeed


    format(string, sizeof(string), "~y~Geschwindigkeit:_~w~%d", GetVehicleSpeed(vID));
    PlayerTextDrawSetString(playerid, SpectateMode[playerid][3], string);


    PlayerSpectateVehicle(playerid, pID, SPECTATE_MODE_NORMAL);
    }
    }
    return 1;
    }

    Die Missglückte Persönlichkeit, Ciao!

  • Mein Problem ist jetzt aber, OnPlayerStateChange fragt es ja nur bei sich selbst ab, nicht per "pID" die ich Spectaten möchte, wie ich kann es dies nun anpassen?

    Da wo du den Spectate Befehl startest, musst du so eine Zeile machen:


    PS: Unter OnPlayerConnect solltest du sInfo[playerid][sSpectate] = -1; machen, damit da nichts passiert oder INVALID_PLAYER_ID.


    sInfo[playerid][sSpectate] = pID; //pID = Die Person die du spectaten willst


    Dann kannst du unter OnPlayerStateChange abfragen:


    C
    for(new i=GetPlayerPoolSize(); i!=-1; i--) //Loopst durch alle Spieler
    {
        if(IsPlayerConnected(i) && sInfo[i][sSpectate] == playerid)
        {
            //Hier entspricht i=der playerid, die den Spieler spectatet und playerid entspricht der pID, also der, der spectatet wird :)
        }
    }

    ast2ufdyxkb1.png


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

  • Hab da noch mal eine Frage,
    ich bekomme Dauerhaft die Fehlermeldung das ich in keinem Fahrzeug sei, aber im Chat wird gesagt dass das Fahrzeug die ID: 1 hat und auch die richtige Model-ID wird mir ausgegeben.



    ocmd:lock(playerid, params[])
    {
    if(!sInfo[playerid][sEingeloggt])return SendClientMessage(playerid, COLOR_RED, "Du bist nicht eingeloggt!");


    new veh = GetPlayerVehicleID(playerid), string[144];
    format(string, sizeof(string), "Bike-ID: %d - Model-ID: %d", veh, GetVehicleModel(veh));
    SendClientMessage(playerid, COLOR_RED, string);
    if(!IsPlayerInAnyVehicle(playerid))return SendClientMessage(playerid, COLOR_RED, "Du bist in keinem Fahrzeug!");


    if(veh == sInfo[playerid][sRentBike])
    {
    if(IsValidVehicle(sInfo[playerid][sRentBike]))
    {
    GetVehicleParamsEx(sInfo[playerid][sRentBike], engine, lights, alarm, doors, bonnet, boot, objective);
    if(doors == VEHICLE_PARAMS_OFF || doors == VEHICLE_PARAMS_UNSET)
    {
    LockVehicle(sInfo[playerid][sRentBike]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Du hast das Fahrzeug abgeschlossen.");
    return 1;
    }
    else if(doors == VEHICLE_PARAMS_ON)
    {
    UnlockVehicle(sInfo[playerid][sRentBike]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Du hast das Fahrzeug aufgeschlossen.");
    return 1;
    }
    }
    }
    return 1;
    }


    Weißt vielleicht jemand wo das Problem liegt? Model-ID ist 509 (Fahrrad)


    Mit freundlichen Grüßen.

    Die Missglückte Persönlichkeit, Ciao!

  • Ok, habe das ganze nun so, und das klappt nun auch, wieso weshalb auch immer. :D


    Nun habe ich das nächste Problem, ich kann das Fahrzeug nicht Aufschließen, immer nur "Abschließen.



    ocmd:lock(playerid, params[])
    {
    if(!sInfo[playerid][sEingeloggt])return SendClientMessage(playerid, COLOR_RED, "Du bist nicht eingeloggt!");


    new veh = GetPlayerVehicleID(playerid), string[144];
    format(string, sizeof(string), "Bike-ID: %d - Model-ID: %d", veh, GetVehicleModel(veh));
    SendClientMessage(playerid, COLOR_RED, string);
    if(!veh)return SendClientMessage(playerid, COLOR_RED, "Du bist in keinem Fahrzeug!");


    if(veh == sInfo[playerid][sRentBike])
    {
    if(IsValidVehicle(sInfo[playerid][sRentBike]))
    {
    GetVehicleParamsEx(sInfo[playerid][sRentBike], engine, lights, alarm, doors, bonnet, boot, objective);
    if(doors == VEHICLE_PARAMS_OFF || doors == VEHICLE_PARAMS_UNSET)
    {
    LockVehicle(sInfo[playerid][sRentBike]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Du hast das Fahrzeug abgeschlossen.");
    return 1;
    }
    else if(doors == VEHICLE_PARAMS_ON)
    {
    UnlockVehicle(sInfo[playerid][sRentBike]);
    SendClientMessage(playerid, COLOR_LIGHTBLUE, "Du hast das Fahrzeug aufgeschlossen.");
    return 1;
    }
    }
    }
    return 1;
    }



    stock LockVehicle(vehicleid)
    {
    if(IsValidVehicle(vehicleid))
    {
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vehicleid, engine, lights, alarm, VEHICLE_PARAMS_ON, bonnet, boot, objective);
    }
    return 1;
    }


    stock UnlockVehicle(vehicleid)
    {
    if(IsValidVehicle(vehicleid))
    {
    GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    SetVehicleParamsEx(vehicleid, engine, lights, alarm, VEHICLE_PARAMS_OFF, bonnet, boot, objective);
    }
    return 1;
    }


    Mit freundlichen Grüßen.

    Die Missglückte Persönlichkeit, Ciao!

  • @WriteMeDude


    versuch es mal so:

  • "new engine, lights, alarm, doors, bonnet, boot, objective;"


    Ist mir bei im Script sehr weit oben Definiert, und hätte ich es nicht Definiert, dann würde ich Warnings erhalten.


    Mit freundlichen Grüßen.

    Die Missglückte Persönlichkeit, Ciao!

  • Mh,


    hier haste mal meinen Code, meins funktioniert einwandfrei, kannst ja mal schauen:


  • Hat denn schon jemand nen Plan, wie man bei 0.3.8 die VC oder LC Map installiert ?

    Danke, jedoch erhalte ich nirgendwo die .dff dateien, welche er beim Laden, laden will.

    Code
    [artwork:crc] vc2sa/dff/golfroad5.dff CRC = 0x0
    [artwork:error] Bad file: vc2sa/dff/golfroad5.dff
    [artwork:crc] vc2sa/dff/LODpedbridge3.dff CRC = 0x0
    [artwork:error] Bad file: vc2sa/dff/LODpedbridge3.dff
    [artwork:crc] vc2sa/dff/golfroad3.dff CRC = 0x0
    [artwork:error] Bad file: vc2sa/dff/golfroad3.dff

    kann es dir gerne fertig machen ich habe selber die map auf mein Server :)








  • Ich finde den fehler nicht ich dachte man kann oben die schleife machen das reicht :/

  • Das ist zwar in der Java Welt ganz nett, aber wirklich zu empfehlen ist das in Pawn nicht.


    Man kann sowas basteln, aber Performanz technisch betrachtet ist das nicht so dolle, da ja immer der String erst aufgelöst werden müsste und je nachdem wie lang der ist...dauert das ein bisschen :rolleyes:


    Allerdings funktionieren die PVar Variablen so ;)


    [wiki]SetPVarInt[/wiki]

    ast2ufdyxkb1.png


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