[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
  • Hey, habe eben gemerkt das sich die PickUps nicht nach 30 Sekunden löschen wenn keiner sie aufhebt. Alles andere funktioniert.


    Code schaut nach wie vor so aus:



    forward RespawnPickUp(playerid);
    public RespawnPickUp(playerid)
    {
    if(hPickup[playerid] != -1) DestroyPickup(hPickup[playerid]);
    hPickup[playerid] = -1;
    return 1;
    }



    public OnPlayerDeath(playerid, killerid, reason)
    {
    //Health System
    new Float:hPos[3];
    GetPlayerPos(playerid, hPos[0], hPos[1], hPos[2]); //24
    if(hPickup[playerid] != -1) DestroyPickup(hPickup[playerid]);
    hPickup[playerid] = CreatePickup(1240, 2, hPos[0], hPos[1], hPos[2]);
    SetTimerEx("Respawnpickup", 30000, false, "d",playerid);



    Mit freundlichen Grüßen
    JustMe.77 8)

  • Beitrag von Jeffry ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: SynonymousZ war schneller ().
  • @Jeffry

    Code
    new testString[32];
    	testString = "ich|20|20.0";
    	new testSInt,
    	    Float:testSFloat,
    	    testSString[10];
    	sscanf(testString,"P<|>s[3]if",
    	    testSString,
    	    testSInt,
    	    testSFloat
    	);

    Wenn ich meine TestObjekte ausgeben lasse, sprich: testSString, testSInt, testSFloat, so steht alles direkt nur im testSString, aber im int sowie float steht einfach mal nichts drin.
    Ich Erkenne den Fehler nicht.
    Ich verwende sscanf2 sowie auch die neuste Plugin Version.
    Ich habe auch danach eine größere Abfrage, die mein Datenbank resultat, was ich pro Zeile erhalte, auf die gleiche weiße wieder aufteilen, aber versage hierbei ebenso sehr.
    Help :/

  • Versuche es mit einem kleinen p anstatt dem großen P in sscanf.

    Nope, hat nichts gebracht. Ich habe es nun erstmal anders gemacht. War in meinem extremfall zum glück mysql - direkt zugriff auf die Felder.
    Oder ist es mit sscanf inperformanter, als mysql eigene funktionen und dann nachträglich mit a_samp funktionen konventieren, sprich string zu float/int/boolean?

  • Was performanter ist weiß ich nicht genau, ich würde mal schätzen die MySQL Funktionen direkt zu nutzen ist besser. Aber davon abgesehen ist es vom Coding her wesentlich übersichtlicher, wenn man die MySQL Funktionen nutzt, für mich ist das ein besserer Stil, daher würde ich dir das empfehlen, anstatt es mit sscanf zu splitten.

  • Hi, wie muss ich den Code umstruktieren damit wenn man den Befehl nochmal eingibt andere Funktionen aufgerufen werden?



    CMD:afk(playerid, params[]) {
    new playerID, cQuery[38 + (MAX_PLAYER_NAME * 2)];
    new Float:hp;
    GetPlayerHealth(playerid,hp);
    if (hp < 70.0)
    {
    SendClientMessage(playerid, -1,"You need at least {FF0000}70 HP{FFFFFF} to go AFK.");
    return 1;
    }
    if(BlockAFKSpam[playerid] > gettime()) return SendClientMessage(playerid,-1, "{FF1717}ERROR:{FFFFFF} Wait {FF1717}60{FFFFFF} seconds till you can go out of {FF0000}AFK{FFFFFF} Mode.");
    BlockAFKSpam[playerid] = gettime() + 60;
    TogglePlayerAllDynamicAreas(playerid, 1);
    TogglePlayerDynamicArea(playerid, ZoneInfo[Area][z_Ids], 0);
    GangZoneHideForPlayer(playerID, ZoneInfo[Area][z_id]);
    format(cQuery, sizeof(cQuery), "{%06x}%s{FFFFFF} is now{FF0000} AFK.", GetPlayerColor(playerid) >>> 8, GetName(playerid));
    SendClientMessageToAll(-1, cQuery);
    SendClientMessage(playerid, -1,"You're now {FF0000}AFK{FFFFFF}. Type again{00FF00} /afk{FFFFFF} to get out of the AFK Mode.");
    if(zaehler >= sizeof(AFKSpawns)) zaehler = 0;
    SetPlayerPos(playerid, AFKSpawns[zaehler][0], AFKSpawns[zaehler][1], AFKSpawns[zaehler][2]);
    SetPlayerInterior(playerid, 10);
    zaehler++;
    return 1;
    }



    Mit freundlichen Grüßen
    JustMe.77 8)

  • Du musst global eine Variable (mit MAX_PLAYERS) deklarieren. Im Befehl fragst du dann ab, ob die Variable 0 (=false) ist und führst dann diesen Code aus:

    Nach der Abfrage fragst du ab, ob die Variable 1 (=true) ist, und lässt dann was anderes ausführen. (wahrscheinlich zurück aus dem AFK-Modus gehen).
    Achte aber darauf, das du jedes mal in dem Block der Abfrage (=zwischen den beiden geschweiften Klammern) jeweils die Variable dem Wert zu weist.

  • Wo liegt der Fehler?
    Ich kann nämlich leider nichts mit der Error-Meldung anfangen.

    Code
    [ERROR] CMySQLQuery::Execute - (error #1068) Multiple primary key defined


  • Hi, habe ein kleines Problem. Habe ein System erstellt womit eine Nachicht ausgegeben wird die zeigt wer ein Headshot gemacht hat. Nur kommen da irgendwie falsche Namen hin.




    public OnPlayerDamage(&playerid, &Float:amount, &issuerid, &weapon, &bodypart) {


    if (IsBulletWeapon(weapon) && bodypart == 9) { //Headshot Message with Deagle and Sniper



    format(cQuery, sizeof(cQuery),"{%06x}%s {FFFFFF}gave {%06x}%s {FFFFFF}a Headshot", GetPlayerColor(playerid) >>> 8, GetName(playerid), GetPlayerColor(playerID) >>> 8, GetName(playerID));
    SendClientMessageToAll(-1, cQuery);
    }
    return 1;
    }


    Mit freundlichen Grüßen
    JustMe.77 8)

  • Ich weiß nicht in welche Spalte das Problem sein soll, eigentlich ist alles in der Tabelle.


    Error-Meldung

    SQL
    [17:51:21] [DEBUG] CMySQLQuery::Execute[OnHausCreate] - starting query execution
    [17:51:21] [ERROR] CMySQLQuery::Execute[OnHausCreate] - (error #1054) Unknown column 'Villa' in 'field list'
    [17:51:21] [DEBUG] CMySQLQuery::Execute[OnHausCreate] - error will be triggered in OnQueryError

    Print


    Code
    [17:51:21] INSERT INTO hauser ( x, y, z, preis, beschreibung, kasse, upgrade1, upgrade2, schloss ) VALUES ( -2027.900024, -41.041000, 38.804687, 10, Villa, 0, 0, 0, 1 )
  • Villa = Text = String bzgl. INSERT Values %e []

    KleineHilfe 2.0

  • YaBroo ich kann damit nichts anfangen.
    // Edit:
    Doch ich habe Values, es ist doch nur ein Print-Abschnitt.
    Hier mein format

    Code
    format(query, sizeof(query), "INSERT INTO hauser ( x, y, z, preis, beschreibung, kasse, upgrade1, upgrade2, schloss ) VALUES ( %f, %f, %f, %d, %s, %d, %d, %d, %d )",
    			x, y, z, preis, besch, HausInfo[i][h_Kasse], HausInfo[i][h_Upgrade1], HausInfo[i][h_Upgrade2], HausInfo[i][h_Schloss]);
  • @Jeffry


    Es funktioniert, aber ich verstehe nicht wieso es nicht auf meine Art funktioniert, denn bei meinem Explode Befehl ist das eigentlich ziemlich gleich und dort funktioniert es problemlos.


    [hide]


    CMD:explode(playerid, params[]) {
    new playerID, cQuery[38 + (MAX_PLAYER_NAME * 2)], Float:ePos[3];



    if(pData[playerid][P_Admin] < 3) return
    SendClientMessage(playerid, COLOR_RED, LV_Fail);



    if(sscanf(params,"u", playerID)) return
    SendClientMessage(playerid, COLOR_RED, "Use: /explode <playerid>");



    if(!IsPlayerConnected(playerID)) return
    SendClientMessage(playerid, COLOR_RED, ID_Fail);



    GetPlayerPos(playerID, ePos[0], ePos[1], ePos[2]);
    CreateExplosion(ePos[0], ePos[1], ePos[2], 7, 10.0);



    format(cQuery, sizeof(cQuery),"{%06x}%s {FFFFFF}has exploded {%06x}%s", GetPlayerColor(playerid) >>> 8, GetName(playerid), GetPlayerColor(playerID) >>> 8, GetName(playerID));
    SendClientMessageToAll(-1, cQuery);
    return 1;
    }
    [/hide]


    Mit freundlichen Grüßen
    JustMe.77 8)