[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
  • Mein Leude,


    ich habe diesmal ein kleines Problem mit meinen Actors sie werden erstellt alles gut aber sie führen die Anumationen nicht aus woran könnte es liegen?


    Das Problem ist mir auch aufgefallen, ich habe bei mir z.B eine ganz einfache ActorSync Funktion eingeführt.

    Erstell einen Timer und setz jeden Actor die Animation die er hat mit ApplyActorAnimation. Habe das einfach gelöst indem ich jeden Actor in Gruppen u. Untergruppen eingeteilt habe um es dynamischer zu machen.


    Tatsächlich ist mir aufgefallen, dass solche Actor Bugs im Interior viel häufiger auffallen, warum auch immer ^^

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Tatsächlich ist mir aufgefallen, dass solche Actor Bugs im Interior viel häufiger auffallen, warum auch immer ^^

    Weiiil, und das kann für einige vllt ganz interessant sein, die Actors sich im selben Interior befinden, wie der User.


    Deshalb sollte man sie auch immer noch in eine virtuelle Welt setzen. Sobald der Spieler nämlich im Interior 0 ist, ist das auch der Actor und da für den Actor quasi kein Interior mehr existiert fällt er durch die Welt :D Am 0 Punkt stehen dann oft die ganzen Actor für einen, wenn man da mal lang fährt xD


    Also immer, wenn ein Actor im Interior ist, in eine Virtuelle Welt setzen lassen, damit das nicht passiert und natürlich neu laden, weil er meist ewig weit weg ist sonst.

    ast2ufdyxkb1.png


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

  • Ahoi, ich hoffe einer von euch kann mir helfen.

    Und zwar will ich mich am GodFather probieren und bin gerade dabei die Userdaten in eine DB zu speichern.

    Allerdings ist mir dabei aufgefallen dass der Spieler sehr viele Variablen hat die man speichern muss.

    Ich habe es so gemacht:

    Code
    public saveone(playerid)
    {
        new savequery[2048];
        format(savequery,sizeof(savequery),"UPDATE user SET pName='%s',pLevel='%i',pAdmin='%i',pDonateRank='%i',gPupgrade='%i',pConnectTime='%i',pReg='%i',pSex='%i',pAge='%i' WHERE db_id='%i'",PlayerInfo[playerid][pName],PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][pDonateRank],PlayerInfo[playerid][gPupgrade],PlayerInfo[playerid][pConnectTime],PlayerInfo[playerid][pReg],PlayerInfo[playerid][pSex],PlayerInfo[playerid][pAge],PlayerInfo[playerid][db_id]);
        mysql_function_query(dbhandle,savequery,false,"","");
        return 1;
    }

    Aber nach einer Zeit lang sagt der Compiler dass die Zeile zu lang sei.

    Und jetzt wollte ich fragen ob jemand weiß wie man das am besten macht.

  • Falls du das System gerade am schreiben bist schau in folgende Beispiele: https://github.com/pBlueG/SA-M…ee/master/example_scripts

    Dein aktueller weg ist viel zu fehleranfällig - dazu nicht mehr aktuell, es lohnt sich aufjedenfall das System auf ORM umzuschreiben.

  • Code
    public saveone(playerid)
    {
        new savequery[2048];
        format(savequery,sizeof(savequery),"UPDATE user SET pName='%s',pLevel='%i',pAdmin='%i',pDonateRank='%i',gPupgrade='%i',pConnectTime='%i',pReg='%i',pSex='%i',pAge='%i' WHERE db_id='%i'",PlayerInfo[playerid][pName],PlayerInfo[playerid][pLevel],PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][pDonateRank],PlayerInfo[playerid][gPupgrade],PlayerInfo[playerid][pConnectTime],PlayerInfo[playerid][pReg],PlayerInfo[playerid][pSex],PlayerInfo[playerid][pAge],PlayerInfo[playerid][db_id]);
        mysql_function_query(dbhandle,savequery,false,"","");
        return 1;
    }



    Ich vermute du verwendest auch eine veraltete Version von MySQL. Ich empfehle: [jTuT] MySQL R41-4 (Installation, XAMPP, Verwendung, Bedienung & Registrations-System)


    Falls du zu viele lines hast, kannste es so machen:


    Code
        new query[256];
        mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
        PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);
        mysql_pquery(handle, query);
    // neue Reihe
        mysql_format(handle, query, sizeof(query), "UPDATE users SET admin WHERE id = '%d'",
        PlayerInfo[playerid][pAdmin], PlayerInfo[playerid][p_id]);
        mysql_pquery(handle, query);



    myu Dein Beitrag ist an der Stelle auch leider nicht sehr hilfreich. Einem Anfänger zuzutrauen sich durch irgendein Script ohne Zeilenangabe zu wuseln, und erwarten, dass er weiß was ORM ist, geschweige denn wie man es in PAWN umsetzt.

  • MyU Dein Beitrag ist an der Stelle auch leider nicht sehr hilfreich. Einem Anfänger zuzutrauen sich durch irgendein Script ohne Zeilenangabe zu wuseln, und erwarten, dass er weiß was ORM ist, geschweige denn wie man es in PAWN umsetzt.

    Ich sehe jetzt kein Problem dabei einen Vorschlag zu äußern wenn eine mögliche Antwort bereits über mir geäußert wurde.

    Faktisch wird er sich früher oder später darüber Ärgern wenn er nun so weiterführend sein Gamemode im jetzigen Zeitalter aufbaut, womal die alte Version offiziell nicht mehr Unterstützt wird.

    Dazu ist es als "unerfahrener" Benutzer weitaus schlimmer mal einen String bei einer Benutzer Interaktion nicht zu escapen (was übrigens sehr oft passierte) als sich ein paar Stunden oder Minuten hinzusetzen.


    Daher finde ich es schon hilfreich das erwähnt zu haben und auch dafür zu Argumentieren.

  • 1. Das Geld in einer persönlichen Variable Speichern lassen, wenn GetPlayerMoney>SpielerMoney=evtl. Cheat

    2. Doch klar geht das

  • Beitrag von Ioannis20x ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Anstatt dort "return 1" zu printen, lieber den Frakwert..

    Probier das mal aus

  • Anstatt dort "return 1" zu printen, lieber den Frakwert..

    Probier das mal aus

    Jo hatte ich auch drüber schon geprintet ;) war korrekt und so funktioniert es wie gewollt danke dir bester mann

  • Abend , hätte mal eine kleine Frage und zwar wollte ich ein Equipment System erstellen mit einen 3DTextLabel für Fraktionen jedoch wird mir in jeder Fraktion das gleiche angezeigt jemand eine Idee ?

    sprich LCN hat 100 Armour Pakete dann bleibe ich in der Fraktion LCN gehe in die GS base die haben auch 100 dann

    Code:


    vielen dank schonmal im voraus


    liebe grüße

    Since 2012

  • if(sInfo[pID][fraktion] == 1 || 2 || 3)

    Der Fehler hier ist die Abfrage, so geht das nicht.


    So kannst du das z.B. machen:


    C
    new frak = sInfo[pID][fraktion];
    if(frak == 1 || frak == 2 || frak == 3)
    
    //Oder alternativ auch einfach:
    if(frak <= 3)


    jedoch wird mir in jeder Fraktion das gleiche angezeigt jemand eine Idee ?

    Das ist etwas zu unspezifisch, wie du es beschreibst.


    UpdateHealundArmourLabel(i);

    Das ist Zeile 7 in deinem Code. Da übergibst du ja keine playerid, sondern eine FraktionsBaseID.


    So verwirrst du dich glaube selbst beim Skripten.

    Wieso du in der Funktion selbst auch nochmal durch alle FraktionsBases loopst ist mir ein Rätsel.


    Theoretisch brauchst du ja nur die übergebene FraktionsBase aktualisieren.


    Quasi so schreiben:


    C
    stock UpdateHealundArmourLabel(fvr)
    {
        new string[128];
        format(string,sizeof(string),""#GELB_HEX"Equipment Lager"WEISS_HEX"\n %i von %i \n zum benutzen Taste 'Z'", fInfo[fvr][fArmour],MAX_ARMOURPAKETE);
        UpdateDynamic3DTextLabelText(FraktionsArmour3DText[fvr][0],WEISS,string);
        return 1;
    }

    Wenn du das speziell für einen Spieler aufrufen magst, dementsprechend dann einfach nur:


    C
    UpdateHealundArmourLabel(Spieler[playerid][Fraktion]);

    nutzen.

    ast2ufdyxkb1.png


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

  • Hey danke erstmal für deine Hilfe also ich habe es so vor

    jede Fraktion hat ein Armour/Equipment Punkt wo man sich ausrüsten kann MAX_ARMOURPAKETE sind die Maximale Anzahl die man besitzen kann.

    je nach verbrauch geht es um einen Runter sprich

    zum Beispiel

    LCN hat noch 112 von MAX_ARMOURPAKETE

    dann GS z.B 5 von MAX_ARMOURPAKETE

    jedoch habe ich das Problem das wenn man in einer Fraktion ist wie z.B LCN das es dann in jeder Base egal ob ich in der LCN oder in der GS bin immer das gleiche angezeigt wird. Und ich möchte es halt so machen das jeder es sieht und bei jeder Fraktion der richtige Wert angezeigt wird.

    Since 2012

  • Ja, dann sollte das so gehen, wie ich es dir abgeändert habe.


    Musst es halt immer als letztes zum Aktualisieren aufrufen, also erst fArmour ändern und dann für diese fvr aktualisieren :)

    ast2ufdyxkb1.png


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

  • Setzt du den Wert denn unter OnGameModeInit oder beim Initialisieren der Variable auch auf MAX_ARMOURPAKETE?


    Ansonsten schreib mal oben in die Schleife bei OnGameModeInit:

    C
    fInfo[i][fArmour] = MAX_ARMOURPAKETE;

    #Handy

    ast2ufdyxkb1.png


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

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