[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
  • So bin gerade dabei eine C Header Datei so umzuschreiben so dass ich Sie als Include fuer PAWN nutzen kann.
    Jedoch finde ich kein PAWN Aequivalent fuer "extern"


    Kennt da jemand was?


    Habe weiterhin vor double durch float zu ersetzen

  • wie frage ich ab was der spieler im befehl eingegeben hat? also ich möchte das so machen, das wenn der spieler /testbefehl 1 spielerid eingibt, das Typ 1 ausgeführt wird und bei 0 Typ 0.



    CMD:testbefehl(playerid,params[])
    {
    new target, str[64], type;
    if(sscanf(params,"iu",type,target)) return
    SendClientMessage(playerid, rot,"Benutz: /testbefehl <Type> <ID/Name>");


    //Typ 0:
    SetPlayerHealth(playerid, 100);


    //Typ 1:
    SetPlayerArmour(playerid, 100);

    return 1;
    }

  • Da gibt es mehrere Möglichkeiten:


    1. Möglichkeit if-Abfrage:


    C
    CMD:testbefehl(playerid,params[])
    {
        new target, str[64], type;
        if(sscanf(params,"iu",type,target)) return SendClientMessage(playerid, rot,"Benutz: /testbefehl <Type> <ID/Name>");
        if(type==0) SetPlayerHealth(playerid, 100);
        else if(type==1) SetPlayerArmour(playerid, 100);
        else SendClientMessage(playerid,rot,"Ungültiger Type!");
        return 1;
    }


    2. Möglichkeit switch (das wäre schneller wenn noch mehr Types hinzu kommen):



    ast2ufdyxkb1.png


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

  • Yo, hab mal 2 kleine Fragen:


    Ich frage Informationen von Spieler ab, doch es treten folgende Probleme auf:



    forward GetTargetSpecData(playerid, target);
    public GetTargetSpecData(playerid, target)
    {



    new str[128], Float:pHealth, Float:pArmour, Float:vehiclehealth, model;
    // new veh = GetPlayerVehicleID(target);



    format(str, sizeof(str),"%s (%d)", GetName(target), target);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][4], str);



    format(str, sizeof(str),"%.1f", GetPlayerHealth(target, pHealth));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][6], str);



    format(str, sizeof(str),"%.1f", GetPlayerArmour(target, pArmour));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][7], str);



    // format(str, sizeof(str),"%s (%d)", VehicleNames[model - 400], GetVehicleHealth(veh, vehiclehealth));
    // PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], str);



    format(str, sizeof(str),"%s (%d)", GetWeaponNameEx(GetPlayerWeapon(target)), GetPlayerAmmo(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][11], str);



    format(str, sizeof(str),"%d", GetPlayerPing(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][13], str);



    format(str, sizeof(str),"%d", GetPlayerPing(target)); //REPLACE WITH YOUR FPS FUNCTION!!!!!!!!!!!!!!!!!!!!!!!!
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][14], str);



    format(str, sizeof(str),"%0.2f", GetPlayerPacketLoss(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][15], str);




    }


    1) Armour und Health gibt immer 0.0 zurück, obwohl ich beispielsweise 100 HP habe.
    2) Ich krieg folgende Error wenn ich den Teil von VehicleNames auskommentiere:


    [05:11:32] [debug] Run time error 4: "Array index out of bounds"
    [05:11:32] [debug] Accessing element at negative index -400
    [05:11:32] [debug] AMX backtrace:
    [05:11:32] [debug] #0 000077e8 in public GetTargetSpecData (playerid=0, target=0) at C:\Users\David\Desktop\BattleArena\filterscripts\spectate.pwn:88


    Wenn ich mein Fahrzeug mit der Funktion erstelle, funktioniert das problemlos..


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Yo, hab mal 2 kleine Fragen

    GetPlayerArmour und GetPlayerHealth geben an sich nicht den Wert zurück den du suchst, dafür speicherst du ja die Werte in
    "Float:pHealth, Float:pArmour".


    Heißt: GetPlayerArmour an den Anfang setzen und dann bei format die Variable einfügen in der du den Wert gespeichert hast.


    Und was den Fehler mitm Array angeht, du kannst ja mal versuchen das Projekt einfach neu zu laden. Vlt liegts ja am Editor.

    Einmal editiert, zuletzt von Zim30 ()

  • @Zim30 das hat absolut nichts mit dem Editor zu tun. Es wird schlichtweg einfach nicht Abgefragt ob die Vehicle ID überhaupt valide ist. Zumal auch model keinen Wert zugewiesen bekommt. Bei [wiki]GetVehicleHealth[/wiki] wieder das selbe Problem wie über mir beschrieben.

  • @Zim30 das hat absolut nichts mit dem Editor zu tun

    Ich hab ja auch nicht behauptet dass es daran liegt oder? Ich habe gesagt "Vielleicht". Bin auch nicht allwissend aber helfe gerne und was Health und Armour angeht hatte ich schon recht, man kann den Rückgabewert dieser Funktion nicht als Float anwenden.


    //Edit: Und er hat auch ganz ausdrücklich geschrieben


    2) Ich krieg folgende Error wenn ich den Teil von VehicleNames auskommentiere:

    2 Mal editiert, zuletzt von Zim30 ()


  • C:\Users\Max\Desktop\Scriptordner\Server\gamemodes\Script.pwn : fatal error 100: cannot read from file: "mysql"Compilation aborted.
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase1 Error.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Das Problem mit der Health / Armour Anzeige ist nun behoben, danke.


    Wie genau soll ich denn Abfragen ob die Vehicle ID valid ist, @XeroX ?


    Bei meinem Car Befehl mache ich folgendes um das Problem zu umgehen:



    if(model < 400 || model > 611) return SendClientMessage(playerid, COLOR_RED, "ERROR: Fahrzeug ID nur von 400-611 verfügbar..");


    So geht's aber bei meinen TextDraws nicht, muss das irgendwie anders schreiben :/


    Mit freundlichen Grüßen
    JustMe.77 8)

  • muss das irgendwie anders schreiben

    Hier, so:


    ast2ufdyxkb1.png


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

  • Das mit dem Heal / Armour hatte ich schon, egal :P


    Das scheint sich irgendwie nicht zu aktuallisieren bzw. es zeigt immer On Foot an, woran liegt's ?


    Aktuelle Code




    forward GetTargetSpecData(playerid, target);
    public GetTargetSpecData(playerid, target)
    {



    new str[128], Float:pHealth, Float:pArmour, Float:vehiclehealth, model;

    new veh = GetPlayerVehicleID(target);
    GetVehicleHealth(veh, vehiclehealth);
    GetPlayerHealth(target, pHealth);
    GetPlayerArmour(target, pArmour);




    format(str, sizeof(str),"%s (%d)", GetName(target), target);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][4], str);



    format(str, sizeof(str),"%.1f", pHealth);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][6], str);



    format(str, sizeof(str),"%.1f", pArmour);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][7], str);




    if(400 <= model <= 611)
    {
    GetVehicleHealth(veh, vehiclehealth);
    format(str, sizeof(str),"%s (%d)", VehicleNames[model - 400], vehiclehealth);
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], str);
    print("in vehicle");
    }
    else
    {
    print("on foot");
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][9], " On foot");
    }




    format(str, sizeof(str),"%s (%d)", GetWeaponNameEx(GetPlayerWeapon(target)), GetPlayerAmmo(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][11], str);



    format(str, sizeof(str),"%d", GetPlayerPing(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][13], str);



    format(str, sizeof(str),"%d", GetPlayerPing(target)); //REPLACE WITH YOUR FPS FUNCTION!!!!!!!!!!!!!!!!!!!!!!!!
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][14], str);



    format(str, sizeof(str),"%0.2f", GetPlayerPacketLoss(target));
    PlayerTextDrawSetString(playerid, SpecTextDraw[playerid][15], str);



    return 1;
    }


    Habe mal prints gesetzt, es wird nur on foot aufgerufen. Muss ich das ganze per OnPlayerEnterVehicle lösen oder geht's auch anders?


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Edit:


    Habe noch eine Frage:


    Ich muss die Spieler ID und den Namen auch außerhalb der Funktionen benutzen, wie soll ich das am besten machen?
    Benötige da einmal ein kleines Beispiel, aber bitte ohne PVars, die möchte ich vermeiden :)


    Beispiel:



    CMD:startspec(playerid,params[])
    {
    new target;
    if(sscanf(params,"u",target))
    return SendClientMessage(playerid, -1,"Use: /spectest {FF0000}<ID/Name>");



    if(!IsPlayerConnected(target)) return
    SendClientMessage(playerid, -1, "The player is not connected");



    if(textdrawscreated[playerid] == 0)
    {
    CreateSpectateTextDraws(playerid);
    textdrawscreated[playerid] = 1;
    }



    ShowSpectateTextDraws(playerid);
    SelectTextDraw(playerid, 0x00FF00FF);
    updatetargetinfo[playerid] = SetTimerEx("GetTargetSpecData", 500, 1, "i", playerid);
    SendClientMessage(playerid, -1, "Started spectating");
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

    Einmal editiert, zuletzt von JustMe.77 ()

  • ich suche ein Script der es erlaubt nach dem kauf von ein auto 3 keys zu vergeben + 1 denn man selber hat da man ja besitzer ist heißt also man kauft ein auto auf sein namen und kann denn key denn x1 x2 x3 geben auch bei belieben wieder löschen kann

  • ich suche ein Script der es erlaubt nach dem kauf von ein auto 3 keys zu vergeben + 1 denn man selber hat da man ja besitzer ist heißt also man kauft ein auto auf sein namen und kann denn key denn x1 x2 x3 geben auch bei belieben wieder löschen kann

    Du bist hier bei den "Kleinen Scripting Fragen" falls es dir noch nicht aufgefallen ist, dein System erfordert etwas mehr als ein kleines Script.

  • Brauch mal eben einen kleinen Rat


    Bei MySQL kann ich ja im query per Timestamp ein Datum ausgeben
    Wie kann ich das mit SQLite machen?


    Der Aktuelle query:

    SQL
    SELECT *, DATE_FORMAT (`timeban`, '%%d.%%m.%%Y um %%H:%%i:%%s Uhr') AS `unbandate` FROM `player_ban` WHERE `userid`='%d' LIMIT 1;

    All in all it's just another brick in the wall