Beiträge von IPrototypeI

    zu deiner ersten frage ja musst du schau dir den synatx von mysql funktion query mal an dazu zaehlen auch die jeweilige threaded querys. die man jedoch auch nach belieben nutzen kann.


    zum zweiten thema die anfuehrungszeichen sind wichtig sie werden je nach dem unterschiedlich genannt
    wir haben die einfachen anfuehrungszeichrn ' die doppelten " und die backtricks ` die bachtricks sind wichtig bei den jeweiligen tabellennamen oder spaltennamen um reservierte woerter von mysql zu benutzen und um keinen befehl anstelle des strings aufzurufen. Bei den einfachen anfuehrungszeiche. ist dies so oder bei den doppelte. das diese benutzt werden um primitive werte , statische oder nicht numeeische werte.zu maskieren.Also wenn man ein datum , string oder set uebergibt.


    Man Chris hauptsache den String gesplittet oder wie ich hoffe dir ist bewusst das du dies zwei mal tust
    und zur info mysql_fetch_field tut es auch.Ich geh davon aus das er damit probleme hat einen string zu splitten der nicht "existiert"(ein string existiert schon nur hat er nix zum splitten).
    Da du ja so auf deine geschwindigkeit achten willst auch benutzt du wenigstens Threaded Queries und vergesse doch nicht den string zu escapen
    :D.

    beim zweiten ist der txdnamefalsch diese sollte crackdrive_sfse sein
    zu dem gibst du mit materialindex nummer die texture eines objektes an welche ersetzt werden soll.
    beispiel bei dem objekt 3095 kannst du die zwei verschiedene materialindexe ändern also die vorderseite und die rückseite.


    beim ersten darfst du selbst suchen :D

    Also der Callback ist vorhanden
    public WBB_OnInitialize ( State ) {
    return 1;
    }


    PS: Das ist das System hier -> [ FILTERSCRIPT ] WBB Connect 1.4.1 - Verbinde Server und Forum


    ließt du auch die beiträge durch oder siehst du nur den code und interpretierst ?

    Zitat


    Existiert eine verbindung zwischen dem Server und dem Forum die du mit WBB_Initialize erstellst
    du kannst ja überprüfen ob eine verbindung mit dem callback Da mir jetzt bei der verwendung kein Fehler auffällt

    Existiert eine verbindung zwischen dem Server und dem Forum


    die du mit WBB_Initialize erstellst du kannst ja überprüfen ob eine verbindung mit dem callback


    public WBB_OnInitialize(State) existiert.


    Da mir jetzt bei der verwendung kein Fehler auffällt

    wie wäre es wenn du den wert(Unix Timestamp) der gettime zurück gibt in einer variabel speicherst dort eine stunde hinzurechnest und dies abfrägst
    ob die momentane zeit dem entspricht .


    also
    new var = (gettime()+Zeit in Sekunden);
    if(var > gettime())return SendClientMessage(playerid,-1,"Du kannst momentan nix ausrauben");

    Ich ermittel die Zeit aber nicht per GetTickCount sondern per Timer:


    SetTimer("TimerBC", 1000, false);


    geht es nicht so wie ich es gemacht habe? ich will ja nur wissen wie man die Zeit hinterher auslesen kann^^


    du kannst eine variabel hochzählen un den wert dann durch die funktion convertieren lassen aber ich würde gettickcount verwenden jedoch ist das
    doch die falsche funktion da diese nur sekunden in umwandelt in minuten ich schau mal das ich dazu noch was schreib


    //edit


    so nun aber


    stock minutes (sec) {
    return printf("%02d:%02d:%02d", ((sec / (1000*60)) % 60), (sec / 1000) % 60,sec %1000);
    }


    dies berechnet die minuten , sekunden und die milisekunden einer zeit die in millisekunden hinzugefügt wurde


    //edit ein kleiner rechnung fehler


    wie wäre es erstmal die Zeit die du per gettickcount ermittelst umzurechnen hier findest du ein kleine funktion von mir
    um dies zu tun besser gesagt eine rechnung


    http://forum.sa-mp.de/san-andreas-multiplayer/scripting-base/18-nützliche-codeschnipsel-40


    zu dem kannst du bei der stock-funktion auch einen string zurück geben lassen daher kannst du beim formatieren des strings
    %s als plathalter verwenden
    und um dies hier zu erklären (%02d:%02d) hier werden zweimal zwei plätze frei gehalten also ohne einen wert würde die zeit zu ausgegeb werden
    00:00

    Ihrgend wie scheint das objekt nicht zu gehen da hast du recht


    jedoch nimm einfach den ARGB code


    SetObjectMaterial(myobject, 0, 19133, "matarrows", "arrowtype4", 0xFFFF0000);


    daher nochmal richtig fett


    Zitat

    Würde es ja noch gehen aber ich finde keinen Farbcode für Rot bzw


    ARGB Farbcodes und keine RGBA Farbcodes


    Zitat

    Important Note: You MUST use ARGB color format, not RGBA like used in client messages etc.

    pack das ganze doch in ein array

    enum payday
    {
    rpoints,
    prpoints,
    lprice,
    plprice,
    nlevel,
    }
    new PayDayInfo[7][payday] = {
    {6,6,-6000,-6000,2},
    {12,12,-12000,-12000,3},
    {18,18,-12000,-18000,4},
    {24,24,-30000,-30000,5},
    {30,24,-36000,-36000,6},
    {36,24,-42000,-42000,7},
    {42,24,-48000,-48000,8}
    };



    ocmd:buylevel(playerid, params[])
    {
    new i=0, bool:no;
    for(; i < sizeof(PayDayInfo); ++i){
    if(GetPlayerScore(playerid) < PayDayInfo[i][nlevel] && PlayerInfo[playerid][pRespektPunkte] >= PayDayInfo[i][rpoints]){
    if(PlayerInfo[playerid][pPremium] == 1 && GetPlayerMoney(playerid) >= PayDayInfo[i][plprice]){
    SetPlayerScore(playerid,PayDayInfo[i][nlevel]);
    GivePlayerMoney(playerid,PayDayInfo[i][plprice]);
    PlayerInfo[playerid][pRespektPunkte]-= PayDayInfo[i][prpoints];
    }
    if(PlayerInfo[playerid][pPremium] == 0 && GetPlayerMoney(playerid) >= PayDayInfo[i][lprice]){
    SetPlayerScore(playerid,PayDayInfo[i][nlevel]);
    GivePlayerMoney(playerid,PayDayInfo[i][lprice]);
    PlayerInfo[playerid][pRespektPunkte] = 0;
    }
    no = false;
    break;
    }else no = true;
    }
    if(no)return SendClientMessage(playerid,-1,"Du kannst dir kein Level kaufen");
    return 1;
    }

    hmm mir fällt gerade auf das geht in ner Tabelle garnicht also ist schon gut :P


    was willst du machen ^^ schreibs doch einfach du kannst den unix-timestamp speichern als integer wert oder auch im datum format
    nicht das es hier wieder heißt "Die Leute helfen nur bei kleinen Problemen blablabla"

    new string[128],sendername[24];
    GetPlayerName(playerid,sendername,24);
    format(string,sizeof(string),"/Accounts/%s.ini",sendername));
    dini_Set(string,"Waffe",GetPlayerWeapons(playerid));



    dir ist schon bewusst das es GetPlayerWeapons nicht gibt und GetPlayerWeapon gibt nur die momentane waffe aus welcher er besitzt also in der hand hält
    am besten ist es wenn du die ganzen werte die du mit GetPlayerWeaponData ausließt in einen string konvertierst das auch speicherst und den string bei auslesen
    mit sscanf splittest


    Das ist korrekt. Ein wenig Vorkenntnis über Pawno und MySQL sollte bereits vorhanden sein, dennoch ist es trotzdem für jeden geeignet, der sich mal Gedanken über ein Haussystem machen möchte (auch Anfänger, damit diese sich ein Bild machen können). Denn im Tutorial wird das Handhaben von Queries und der einzelnen Funktionen erklärt. Weiterhin werden alle Funktionen in den Kommentaren angesprochen und zu mindest am Rande erklärt. Für Anfänger wird es einfach etwas länger dauern, da diese sich die Funktionen evt. genauer im Wiki anschauen möchten. Aber dieses Tutorial ist ja auch nicht dazu gedacht, die Basics des Scriptens zu erläutern. Wenn man bisher keine Ahnung vom Scripten hat, sollte man sich auch nicht mit Haussystemen befassen, sondern mit kleineren Bausteinen, die evt. Teil eines Haussystems sind.


    Ich muss auch sagen das dein Tutorial gut gelungen ist wie deine anderen davor auch
    vor allem finde ich es auch sehr gut das du mal das R7 Plugin mit ein gebracht hast da die verwendung davon hier im
    Forum ziemlich gering ist. Vielleicht werden sich auch paar mehr danach umsehen da dieses Plugin im Bereich MySQL fast nicht zu toppen ist.

    Ok ich checke nichts mehr wie gesagt bin nen noob im gebiet mysql o.o


    ganz einfach du benutz ein query um die werte zu updaten.


    ein beispiel:
    ich benutze immer mysql_format jedoch kannst du auch eine normale formatierung benutzen.
    bei mysql_format musst du jedoch die verbindung angeben die du einer variabel zugeordnet hast


    new verbindung = mysql_connect(...);
    bei OnGameModeInit

    new query[256];
    mysql_format(verbindung,query,"UPDATE `tabelle` SET `Int` = '%d', `String` = '%s', `Float` = '%f' WHERE `Ort` = '%s'",2,"test",1.2345,"ort angeben");
    mysql_query(query,verbindung);


    UPDATE , SELECT , INSERT , sind befehle welche dan ausgeführt werden mit dem senden des querys also über mysql_query
    dabei kommt zuerst die tabelle und danach werden den jeweiligen spalten beispiel Int den wert zugeordnet wo der Ort jetzt in dem fall den string ort angeben enthält
    Daher sind
    tabelle = die tabelle
    und
    Int, String, Float Ort Spalten der Tabelle "tabelle "


    es würde auch so gut
    format(query,256,"UPDATE `tabelle` SET `Int` = '%d', `String` = '%s', `Float` = '%f' WHERE `Ort` = '%s'",2,"test",1.2345,"ort angeben");
    gehen


    das worüber hier diskutiert wurde ist sicherheits bedingt gegen sql injections also das du kein Opfer dieser injection wirst.
    Dabei können daten wie das passwort ( allgemein strings) abgefangen werden und dementsprechent verwendest werden.
    Beispiel das jemand die daten von deinem Account hat und sich damit einloggt. ( Um dies mal grob zu erklären) Um nun sich gegen sowas zu schützen
    kann man das per mysql_format machen in dem man für den platzhalter bei strings '%s' '%e' verwendet oder
    mysql_real_escape_string zum beispiel für das MySQL plugin von BlueG dabei wird der string auch gesichert.


    Das ist keine Alternative, man escaped nur mit einer anderen Funktion. Trotzdem wird es so, wie es oben beschrieben ist nicht gut funktionieren, da eben Zahlen, SQL-Begriffe, Tabellen, Felder etc. eben mal nicht escaped werden sollen.


    Da hast du voll und ganz recht jedoch hab ich es falls du es nicht gesehen hast noch den kleinen teil hinzu editiert

    Zitat

    für die wie schon oben genannt strings


    jedoch ist es so das mysql_format wenn du den platzhalter %e bei einem string verwendest dieser automatisch escaped wird.
    ich hatte es nur noch extra nochmal hinzugefügt besser gesagt erwähnt
    kannst ja im wiki eintrag nach lesen


    http://wiki.sa-mp.com/wiki/MySQL#mysql_format


    Zitat


    Important Note: This function was added in version R6-2 and will not work in earlier versions!
    %e Escapes data directly without the need to call mysql_escape_string() before


    :D

    Eine alternative zum escapen ist direkt mysql_format zu verwenden um dies noch hinzuzufügen da
    mysql_format das escapen schon beinhaltet jedoch muss man dazu den Platzhalter %e verwenden
    für die wie schon oben genannt strings