Beiträge von Kristik47

    Tut mir Leid, mach es bitte so beim "Put-Befehl" Case 1


    if(sSpieler[playerid][DDrogen] < savethings)


    zu


    if(sSpieler[playerid][DDrogen] >= savethings)


    Gleiches bei "Put-Befehl" Case 2:


    if(sSpieler[playerid][Materials] < savethings)


    zu


    if(sSpieler[playerid][Materials] >= savethings)


    Weiterhin bitte beim gtake Befehl bei Case 1 und 2 folgendes ersetzen:


    savethings zu takethings bei diesen Abfragen hier:



    if(savethings <= sSpieler[playerid][SBDrogen]) //Case 1
    if(savethings <= sSpieler[playerid][SBMats]) //Case 2


    zu



    if(takethings<= sSpieler[playerid][SBDrogen]) //Case 1
    if(takethings<= sSpieler[playerid][SBMats]) //Case 2


    Entschuldige bitte für die Fehler.


    @KinGRaPTiiC

    Habe dir mal auf die schnelle das komplette System zusammengemeistert. Versuchs mal so:

    enum SpielerDaten
    {
    Adminlevel,
    Suplvl,
    level,
    Fraktion,
    Alter,
    Geschlecht,
    Skin,
    slogin,
    Rang,
    PaydayZeit,
    Bargeld,
    DDrogen,
    Materials,//Änderung
    SBDrogen,//Änderung
    SBMats,//Änderung
    Bankguthaben,
    Festgeld,
    FestgeldTime,
    Gangjailticket,
    Bauerticket,
    Pilotticket
    };


    ocmd:put(playerid,params[])
    {
    //Safebox Koordinaten hier einfügen!!
    new savethings, putid, putstring[128];
    if(sscanf(params, "dd", putid, savethings))return SendClientMessage(playerid,GELB,"Verwendung: /put [1 Drogen | 2 Materials] [Anzahl an Drogen/Mats]");
    switch(putid)
    {
    case 1:
    {
    if(sSpieler[playerid][DDrogen] < savethings)
    {
    sSpieler[playerid][DDrogen] -= savethings;
    sSpieler[playerid][SBDrogen] += savethings;
    format(putstring, sizeof(putstring),"Du hast %d Drogen in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
    SendClientMessage(playerid, -1, string);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht auf bei dir.");
    }


    }
    case 2:
    {
    if(sSpieler[playerid][Materials] < savethings)
    {
    sSpieler[playerid][Materials] -= savethings;
    sSpieler[playerid][SBMats] += savethings;
    format(putstring, sizeof(putstring),"Du hast %d Materials in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
    SendClientMessage(playerid, -1, string);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf bei dir.");
    }
    }
    }
    return 1;
    }


    ocmd:gtake(playerid,params[])
    {
    //Safebox Koordinaten hier einfügen!!
    new takethings, putid, putstring[128];
    if(sscanf(params, "dd", putid, takethings))return SendClientMessage(playerid,GELB,"Verwendung: /gtake [1 Drogen | 2 Materials] [Anzahl an Drogen/Mats]");
    switch(putid)
    {
    case 1:
    {
    if(savethings <= sSpieler[playerid][SBDrogen])
    {
    sSpieler[playerid][DDrogen] += savethings;
    sSpieler[playerid][SBDrogen] -= savethings;
    format(putstring, sizeof(putstring),"Du hast %d Drogen aus der Safebox entnommen. Benutze /put um sie wieder einzulagern.",takethings);
    SendClientMessage(playerid, -1, string);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht in deiner Safebox.");
    }


    }
    case 2:
    {
    if(savethings <= sSpieler[playerid][SBMats)
    {
    sSpieler[playerid][Materials] += savethings;
    sSpieler[playerid][SBMats] -= savethings;
    format(putstring, sizeof(putstring),"Du hast %d Materials in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.",takethings);
    SendClientMessage(playerid, -1, string);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf deienr Safebox.");
    }
    }
    }
    return 1;
    }


    stock SpielerSpeichern(playerid)
    {
    new Spieler[64];
    new Sname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Sname,sizeof(Sname));
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Sname);
    if(dini_Exists(Spieler))
    {
    dini_IntSet(Spieler,"Adminlevel",sSpieler[playerid][Adminlevel]);
    dini_IntSet(Spieler,"Suplvl",sSpieler[playerid][Suplvl]);
    dini_IntSet(Spieler,"level",sSpieler[playerid][level]);
    dini_IntSet(Spieler,"Rang",sSpieler[playerid][Rang]);
    dini_IntSet(Spieler,"Fraktion",sSpieler[playerid][Fraktion]);
    dini_IntSet(Spieler,"Alter",sSpieler[playerid][Alter]);
    dini_IntSet(Spieler,"Geschlecht",sSpieler[playerid][Geschlecht]);
    dini_IntSet(Spieler,"Skin",sSpieler[playerid][Skin]);
    dini_IntSet(Spieler,"PaydayZeit",sSpieler[playerid][PaydayZeit]);
    dini_IntSet(Spieler,"Gangjailticket",sSpieler[playerid][Gangjailticket]);
    dini_IntSet(Spieler,"Bauerticket",sSpieler[playerid][Bauerticket]);
    dini_IntSet(Spieler,"Bankguthaben",sSpieler[playerid][Bankguthaben]);
    dini_IntSet(Spieler,"Bargeld",GetPlayerMoney(playerid));
    dini_IntSet(Spieler,"Materials",GetPlayerMoney(playerid)); //Änderung
    dini_IntSet(Spieler,"DDrogen",sSpieler[playerid][DDrogen]);
    dini_IntSet(Spieler,"SBDrogen",sSpieler[playerid][SBDrogen]); //Änderung
    dini_IntSet(Spieler,"SBMats",sSpieler[playerid][SBMats]); //Änderung
    dini_IntSet(Spieler,"FestgeldTime",sSpieler[playerid][FestgeldTime]);
    }
    return 1;
    }



    PAWN-Quellcode
    stock SpielerLaden(playerid)
    {
    new Spieler[64];
    new Sname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,Sname,sizeof(Sname));
    format(Spieler,sizeof(Spieler),"/Spieler/%s.txt",Sname);
    if(dini_Exists(Spieler))
    {
    SetPlayerScore(playerid,dini_Int(Spieler,"level"));
    sSpieler[playerid][Adminlevel] = dini_Int(Spieler,"Adminlevel");
    sSpieler[playerid][level] = dini_Int(Spieler,"level");
    sSpieler[playerid][Rang] = dini_Int(Spieler,"Rang");
    sSpieler[playerid][Suplvl] = dini_Int(Spieler,"Suplvl");
    sSpieler[playerid][Alter] = dini_Int(Spieler,"Alter");
    sSpieler[playerid][Geschlecht] = dini_Int(Spieler,"Geschlecht");
    sSpieler[playerid][Skin] = dini_Int(Spieler,"Skin");
    sSpieler[playerid][Fraktion] = dini_Int(Spieler,"Fraktion");
    sSpieler[playerid][PaydayZeit] = dini_Int(Spieler,"PaydayZeit");
    sSpieler[playerid][Gangjailticket] = dini_Int(Spieler,"Gangjailticket");
    sSpieler[playerid][Bauerticket] = dini_Int(Spieler,"Bauerticket");
    sSpieler[playerid][Bankguthaben] = dini_Int(Spieler,"Bankguthaben");
    sSpieler[playerid][FestgeldTime] = dini_Int(Spieler,"FestgeldTime");
    sSpieler[playerid][Bargeld] = dini_Int(Spieler,"Bargeld");
    sSpieler[playerid][DDrogen] = dini_Int(Spieler,"DDrogen"); //Änderung
    sSpieler[playerid][DDrogen] = dini_Int(Spieler,"DDrogen");
    sSpieler[playerid][SBDrogen] = dini_Int(Spieler,"SBDrogen"); //Änderung
    sSpieler[playerid][SBMats] = dini_Int(Spieler,"SBMats"); //Änderung
    sSpieler[playerid][slogin] = 1;
    GivePlayerMoney(playerid,sSpieler[playerid][Bargeld]);
    }
    return 1;
    }

    Allerdings kommt dann folgendes in der Console


    Run time error 19: "File or function is not found"


    Wie würde der befehl denn bei meiner Methode Funktionieren?

    Wenn das bei dir kommt, wenn du die Console startest bzw. den Server, dann hast du wahrscheinlich
    1) in deinem "plugins"-Ordner sscanf.dll nicht drinne hast, wenn du Linux hast sscanf.so - mach am besten alle beiden Dateien da rein ^^
    2) in der Server.cfg vergessen ganz unten ein "plugins sscanf" hinzuschreiben, denn somit weiß die Konsole "Ah ja, das Plugin sscanf muss geladen werden"
    und dadurch gibts auch kein Problem mehr.
    3) im pawno -> include Ordner -> sscanf2.inc nicht drinne und diese auch in deinem Skript via

    Code
    #include <sscanf2>


    includiert.


    Nach diesen ganzen Vorgängen, sollte der Runtime Error weg sein. und ocmd, was du auch bitte im include Ordner von pawno hast,
    auch im Skript inkludieren via

    Code
    #include <ocmd>


    //Kannst auch ganz unten diesen Stock erstellen und dann diesen bei name = '%s' immer benutzen. Hier so würde es aussehen:


    stock sName(playerid)
    {
    new name[MAX_PLAYER_NAME]
    GetPlayerName(playerid, name, sizeof(name));
    return name;
    }


    //und dann halt wie gesagt immer statt die new's zu erstellen, um dann am Ende des Formats ein "name" reinzupacken
    //sName(playerid); schreiben statt name. sName ist dann so gesagt global definiert und immer nutzbar. Bei einer Schleife
    //zum Beispiel bei der hier:
    for(new i = 0; i < MAX_PLAYERS; i++)
    {


    }
    benutzt du sName(i); , wenns dazu kommt.

    Unsere Meinung wird wahrscheinlich niemanden erreichen, aber dennoch: Die machen doch sowieso was die wollen.
    Ob es jemandem Schaden zurichtet oder nicht, interessiert keinen. Sicherheit hin oder her, aber woher weiß man, dass
    sie mal nicht einfach so zum Zwecke des Eigens beim Konkurrenten oder Personen die stören vorbeischaut, sich reinhackt
    und Daten stiehlt, entfernt, um sich sauber zu halten. Menschenrechte sind heutzutage irgendwie von zweiseitiger
    Wichtigkeit gespalten.

    Danke Jeffry, es hat geklappt, aber woran hast du gesehen, dass ich mein Plugin aktualisieren muss?

    Das kommt entweder durch Jeffry's Erfahrung, da er nicht den ersten Tag in dieser Branche hilft oder
    er ist einfach nur der Code-Gott, was man nicht ausschließen kann, und er weiß halt über alles Bescheid.
    Wahrscheinlich am sinnvollsten wäre meine 1. Variante, aber die 2. ist auch nicht unmöglich.


    Zudem: Wenn dort steht: "File or Function not found" kann man, wenn man in dem Skripting-Bereich
    eine Weile tätig ist, durch eigenes Denken drauf kommen, dass irgendwas aktualisiert ist/nicht ist/werden muss, denn alles was
    im Skript vorhanden ist samt der ganzen Funktionen und so weiter muss compiled werden und wenn der Compiler
    eine Funktion findet, die weder im Skript noch im Include definiert ist, so spuckt er einen Fehler aus - so stelle
    ich es mir zumindest von der Logik her vor.


    @Smoot

    @Kristik47 Kann ja nicht hab das selbe Problem auch und Wenn Ich das Touchpad vom Laptop benutze funktioniert es nicht.

    Ich spreche explizit von einer Maus, denn dieses Problem ist nicht wirklich spezifiziert, weshalb ich der
    Meinung bin, alles was möglich ist durchzuprobieren und vielleicht kommt man irgendwie zu einer Lösung.
    Ich hatte das Problem wie gesagt auch schon mal; ich habe zwar keine neue Maus probiert, da meine Maus
    neu war, aber vielleicht kann man ja einen Wert auf den Versuch legen und es mal tun. Vielleicht könnte
    das ja sogar was bringen.


    Wenns nicht an der Maus liegt, es also bei beiden "Mäusen" gleich problematisch bleibt, dann sollte man vielleicht
    versuchen eine ältere Version des Programms runterzuladen und schauen, ob dann irgendwas anders ist. Klappt es
    nicht, dann vielleicht über einen anderen PC, Laptop, wenn es die Gelegenheit Zuhause gibt, probieren und wenn es
    auf den anderen Geräten genauso ist, dann würde ich behaupten, dass die das gleiche Windows haben, wie dein Laptop
    und das Problem am Windows liegt und es irgendwie an der Kompatibilität zwischen Windows und dem Programm
    liegt.


    Kann dir da in professioneller Sicht nichts raten, da ich kein Experte bin, aber vielleicht hilft ja irgendwas davon.
    Wenn es nicht der Fall ist, dann bin ich da echt ideenlos was das Weitere angeht.

    Konstruier den Dialog doch so. Außerdem sehe ich nirgends einen Kick(playerid); Befehl. Weder im stock noch in diesem Case.
    Somit kann das Kick(playerid); von wo anders ausgeführt werden. Ich würde auf OnUserSave(playerid); tippen.


    Zeige doch mal bitte OnUserSave(playerid);


    Und versichere uns bitte, dass es denn wirklich nur ein Kick und kein Servercrash ist, also die Konsole schließt.

    Das Problem kenne ich sehr gut. Habe ich auch manchmal. Es kommt einfach mal
    beim Mappen ganz plötzlich zum Schein und ich werde direkt hektisch, sodass ich
    alles verstelle und sich irgendwas verändert. Einmal habe ich einfach, während
    ich im Map-Editor bin, auf die Windows-Taste gedrückt, bin auf Desktop gegangen
    und dann wieder rein in den Map-Editor und das Problem ist verschwunden.


    Also wie gesagt: Kommt plötzlich, schwindet genauso plötzlich nach irgendeiner bestimmten Umschaltung oder Interaktion.
    Ich kann nicht bekräftigen, dass es bei dir genauso sein wird, aber kannst ja mal bisschen "hektisch" dran rumspielen :D

    Zieh diesen Zaun in die grünen Büsche rein, mach ihn ein bisschen tiefer, sodass er bei den grünen Büschen
    nicht zusehen ist und es sollte deinem Wunsch entsprechen. Kann aber auch passieren, dass es zu tief ist,
    denn dann kannst du wie gesagt eine andere Wahl bezüglich der Zäune treffen. Gibt genug Variationen.

    Also der Server ist aufjedenfall der Hit, auch sehr konkrete sowie seriöse Bangründe.


    Interessant, dass du uns zeigst, wie du gebannt wirst, aber den Chat zwischen dir und Tim aka AIDS_Qualle nicht
    zeigst. Vielleicht warst du zu aufdringlich, wirktest beleidigend, hast beleidigt und außerdem: Wieso nimmst du dir das Recht raus,
    ohne irgendwelche Beweisbilder oder sonstiges anzukommen und zu sagen: "Jo... hatten mehrere Servernamen -> wechseln
    die wie Unterhosen -> Jo war auf meinem Testserver hat Namen geklaut." Wer hat dir erlaubt, den Ruf anderer
    zu schaden. Meine Fresse; sowas sollte in diesem Forum mal sanktioniert werden, wenn keine Beweise vorliegen.
    Dein Bild hier kann man ja nicht mal als Beweis nehmen, weil du davor einen Chat mit Tim hattest und niemand
    weiß, wieso du gebannt wurdest.


    Werbung ist nicht die schlechteste, aber auch nicht die beste, die man jemals sah. Ist auf jeden Fall noch
    sehr ausbaufähig. Zudem sehe ich auch leider keine Bilder bzw. diese laden bei mir nicht. Vielleicht
    sollte mal noch ein wenig am Skript arbeiten, denn nur "das Feeling von früher" wird keine Abwechslung
    und Spaß an einzigartigen Sachen/Funktionen bringen.


    Viel Erfolg.


    stock GetFracName(playerid)
    {
    new fname[32];
    if(PlayerInfo[playerid][pLeader] == 0)
    {
    switch(PlayerInfo[playerid][pMember])
    {
    case 0:{fname="Zivilist";}
    case 1:{fname="Los Santos Police Department";}
    case 2:{fname="Federal Bureau of Investigation";}
    case 3:{fname="United States of Army";}
    case 4:{fname="Notdienst";}
    case 5:{fname="La Cosa Nostra";}
    case 6:{fname="Yakuza";}
    case 7:{fname="Regierung";}
    case 8:{fname="Hitman Agency";}
    case 9:{fname="Center News Network";}
    case 10:{fname="Taxi Company";}
    case 11:{fname="Fahrschule";}
    case 12:{fname="Triaden";}
    case 13:{fname="Grove Street Family";}
    case 14:{fname="Front Yard Ballas";}
    case 15:{fname="Biker Club";}
    case 16:{fname="Vagos";}
    case 17:{fname="Atzecas";}
    case 18:{fname="Rifas";}
    case 19:{fname="Red Soldiers";}
    case 20:{fname="Terrorist";}
    case 21:{fname="Wheelman Agency";}
    case 22:{fname="SWAT";}
    case 23:{fname="Ordnungsamt";}
    }
    }
    return fname;
    }


    So sollte es funktionieren.


    public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
    {
    if(issuerid == INVALID_PLAYER_ID) return 1;
    PlayerPlaySound(issuerid,17802,0.0,0.0,0.0);
    if(weaponid == 34 && bodypart == 9) //Headshot System
    {
    GameTextForPlayer(playerid,!"~r~~h~~h~] Boom Headshot ]",5000,5);
    GameTextForPlayer(issuerid,!"~g~~h~~h~] Boom Headshot ]",5000,5);
    SetPlayerHealth(playerid, 0.0);
    return 1;
    }//diese Klammer hat gefehlt
    }

    Ja, habe ich eingefügt. Ein Fehler hat sich gelöst. nun kam der hier:
    Also man sieht unten, dass 'morde' = '85' gesetzt wird. Keine Ahnung
    weshalb. Eigentlich sterbe ich im Spiel nach 30 Sekunden keine 85 Male.
    Hatte davor eine Sache entfernt. Davor war dort "Klasse". Da zeigte
    sich auch einen 85 an.


    @Jeffry


    SQL
    [21:31:07] [DEBUG] mysql_format - connection: 1, len: 500, format: "UPDATE users SET registriert = '%d', anfangsskin = '%d', skin = '%d', level = '%d', money = '%d', adminlevel = '%d', fraktion = ..."
    [21:31:07] [DEBUG] mysql_format - connection: 1, len: 500, format: "morde = '%d', tode = '%d', verbrechen = '%d', ap = '%d', premium = '%d', donator = '%d', contractgeld = '%d', changeteamzeit = '..."
    [21:31:07] [DEBUG] mysql_pquery - connection: 1, query: "morde = '85', tode = '0', verbrechen = '0', ap = '0', premium = ", callback: "(null)", format: "(null)"
    [21:31:07] [DEBUG] CMySQLQuery::Execute[] - starting query execution
    [21:31:07] [ERROR] CMySQLQuery::Execute[] - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'morde = '85', tode = '0', verbrechen = '0', ap = '0', premium = '0', donator = '' at line 1
    [21:31:07] [DEBUG] CMySQLQuery::Execute[] - error will be triggered in OnQueryError


    Wenn ich mir einen neuen Account im Spiel erstelle, geschieht alles problemlos, kommts aber zur Speicherung
    macht MySQL Faxen. Die Frage ist warum? Ich habe mal die MySQL_LOG beobachtet und konnte nichts
    fehlerhaftes finden. Habe auch meinen SaveUserStats Stock mehrmals überarbeitet und einen Backup eingefügt,
    aber zeigt dennoch Errors an.


    So sieht mein SaveUserStats-Stock aus:



    So sieht meine MySQL Log aus:


    Ich bedanke mich schon mal im Voraus.


    Mit freundlichen Grüßen
    Kristik47

    Nein nicht ganz, aber ich hatte eine Vermutung bezüglich dem, dass dem Spieler nach "OnPlayerDeath" bzw. während OnPlayerDeath in
    Ereignis tritt das Leben per SetPlayerHealth(playerid, 100); wieder mit sofortiger Wirkung hergestellt wird. Was ich damit sagen will,, ist, dass
    ich so eine Funktion im Skript habe ^^ Mal schauen, ob sich das Problem löst. Danke.