Beiträge von IPrototypeI

    %0.2f?


    Achso ja das mit dem hab ich gemekrt aber das mit+


    %0.2f wusste ich nicht...


    %f ist der Format-Operator für Ausgaben (Platzhalter) für eine Float %0.2f bedeutet das nur 2 Stellen hinter dem Koma angezeigt werden. %0.3f wären 3 stellen nach dem komma
    du hast auch die möglichkeit bei normale Zahlen Plätze zu belben beispiel %02d der output wäre bei 2 02 oder bei %03d 002.

    weil der return wert von
    GetVehicleHealth 1 ist. den wert der Lebens des Fahrzeuges gibt er an sein zweites argument zurück
    daher wohl eher
    new damage[24],Float:vH;
    GetVehicleHealth(GetPlayerVehicleID(playerid),vH)
    format(damage,24,"vHealth: %0.2f",vH);

    Funktioniert so nicht. Bekomme error das id undefiniert ist 8)


    IPrototypeI:
    Bitte was ? Das versteh ich jetzt nicht ..


    ganz einfach deine Verwendung des 2D( Zweidimensionalen) Arrays ist Falsch. Zu dem ist stock nur ein zusätzlichen tag das beeinflusst nicht den Namen einer Funktion du kannst stock auch bei variabeln benutzen es signalisiert nur das es um kompiler nicht beachtet werden soll, sofern es nicht genutzt ist. Man sieht es ja meinstes wenn man eine funktion im skript stehen hat ohne den tag stock das der warning beim kompilen kommt das die funktion nicht genutzt wird.


    sieh dir das beispiel an
    Mysql Daten laden

    ok hat sich erledigt hab mal ein Filterscript rausgenommen jetzt gehts danke


    Das brauchst du auch nicht rausnehmen nur neu kompilen. Da über die .amx gearbeitet wird. Der Server bezieht nix von incldues die du wahrscheinlich mit hochlädst.
    Der ganze Code, welchen du benutzt aus den includes wird mit kompilt das ganze wird noch durch die pawn.exe umkonvertiert letztendlich hast du nur noch byte und Pcodes in der .amx.

    Ja, da dieser als Concat für die Datenbank und die Table wirkt. Der Query wird ja auch ausgeführt, allerdings mit einem leeren Result (es steht halt noch nix in der Table). Wenn ich das ganze per Query in php My Admin ausführe, funktionierts auch perfekt.

    Der Punkt ist trotzdem der fehler
    format(query,sizeof(query),"SELECT `%s` FROM `%s.User_Stats` WHERE `Name` = '%s'",statistic,mysqldb,pName);


    tabelle.spalte
    nicht `tabelle`.`spalte`das ist falsch backticks werden benutzt damit mysql nicht die tabellennamen mit befehle durcheinander bringt
    ich geh mal davon aus das du das ganze auch so bei phpmyadmin eingegeben hast mydatabase.User_Stats


    Steht oben: Plugins: Incognito Streamer, mysql R20 threated, sscanf2, filemanager


    Also wenn es kein ersichtlichen Fehler gibt so kannst du davon ausgehen das dan wahrscheinlich das ganze von einem plugin ausgeht.
    Du hast paar möglichkeiten ich geh mal davon aus das es am mysql r7 plugin liegen wird da vorkurzem ein updates wieder gemacht wurde und auch eine crashquelle entfernt wurde oder du könntest auf das MySQL plugin von dem Dan. umschwenken , welches 4 mal schneller gegen das r20 von BlueG , welches von diesem Pain123 weiterentwickelt wird war.


    http://forum.sa-mp.com/showthread.php?t=429464


    Es gibt schon die r25 version (musst du jedoch selbst kompilen)

    Zum einen wissen wir nicht wie dein array
    FrakInfo aufgebaut ist


    zum zweiten wird zuletzt nix raus kommen da erstens dein string für solch eine datenmenge zu klein sein wird(obwohl ist grenzwertig).
    und zum zweiten du ein fehler in deiner splitt reihenfolge hast besser gesagt es fehlt ein Zeichen >.


    Am besten machst du dich erstmal mit sscanf und mysql vertraut bevor du ihrgend eine copy paste scheiße zusammen schreibst

    Wie kann ich mit Mysql und Sscanf alle Daten von den Spielern laden? Ich benutze das Plugin von Strickenkid (2.1)
    wäre cool wenn jemand ein Beispiel schreiben könnte.


    enum PlayerData {
    pName[10]
    Level,
    bool:Geschlecht,
    Float:X,
    Float:Y,
    Float:Z,
    };
    new PlayerInfo[MAX_PLAYERS][PlayerData];


    new Load_Query[100];


    mysql_query("SELECT * FROM `accounts` WHERE Name = 'xFreeze' LIMIT 1",1,playerid,handle);


    Beispiel zum auslesen von einem Eintrag
    public OnMysqlQuery(resultid, spareid, MySQL:handle)
    {
    switch (resultid){
    case 1:{
    mysql_store_result(handle);
    strdel(Load_Query,0,100);
    mysql_fetch_row(Load_Query,"|",handle);
    sscanf(Load_Query,"p<|>e<s[10]dlfff>",PlayerInfo[spareid]);
    mysql_free_result(handle);
    }
    }
    return 1;
    }


    Beispiel zum auslesen von mehreren Enträgen
    public OnMysqlQuery(resultid, spareid, MySQL:handle)
    {
    switch (resultid){
    case 1:{
    mysql_store_result(handle);
    new i;
    while(mysql_fetch_row(Load_Query,"|",handle)){
    sscanf(Load_Query,"p<|>e<s[10]dlfff>",PlayerInfo[i]);
    ++i;
    strdel(Load_Query,0,100);
    }
    mysql_free_result(handle);
    }
    }
    return 1;
    }


    Ich geh jedoch trotzdem mal davon aus das es nicht zwingend notwendig ist den string zu leeren bevor er sich den Datensatz zieht. Daher kannst du strdel auch weglassen.
    der specifer p bewirkt das der string gesplittet wird wenn das Zeichen | im string kommt. e steht emulator und in dem code oben hat dies zur folge in was der stringabschnitt konvertiert wird und dank diesem specifer wird das ganze auch direkt zugeordnet solange die reihenfolge in der tabelle auch mit dem des enums übereinstimmt.
    Sollte es sein das zum schluss nur quark raus kommt bei den floats als NaN was Not a Number bedeutet so hast du noch die möglichkeit den specifer e weg zu lassen und die abfolge nach den e in den größer/kleiner Zeichen zu übernehmen. das wäre folgt so p<|>s[10]dlfff. Dies hat jedoch den nachteil das du die jeweiligen Variabeln dahinter schreiben musst
    sscanf(Load_Query,"p<|>s[10]dlfff",PlayerInfo[i][pName],PlayerInfo[i][Level],...);

    if(model==postbike[6]&&ispassenger==1)


    wenn du willst das der spieler den checkpoint angezeigt bekommen will wenn er als fahrer einsteigt so änder dies auf 0


    zu dem ist das abrufen der vehicleid sinnlos die wird automatisch an das callback weiter gegeben


    if(vehicleid==postbike[6]&&ispassenger==0)


    wenn du jedoch möchtest das der checkpoint angezeigt wird wenn der spieler eingestiegen ist so solltest du das eher über
    OnPlayerStateChange machen da dieses Callback schon aufgerufen wird wenn der spiele drin der nähe des autos f , g drückt

    Warum funktioniert das Anhängen eines Fahrzeugs nicht? Bin nun seit
    einer Stunde drann aber egal wie ich das Problem angehe, es funktioniert
    einfach nicht...

    sollte so normal funktionieren was mir aufgefallen ist das du MAX_PLAYERS dafür benutzt ich weiß ja nicht an welchem auto du dich befindest sollte es eine höhere id hat als du auch womöglich MAX_PLAYERS definiert hast , das wäre ein grund warum es nicht geht oder das du nicht nah genug am auto ist daher den radius erhöhen.
    new i, Float:Pos[3],veh= GetPlayerVehicleID(playerid);
    for(; i < MAX_VEHICLES; ++i){
    if(!IsValidVehicle(i)) continue;
    GetVehiclePos(i,Pos[0],Pos[1],Pos[2]);
    if(IsPlayerInRangeOfPoint(playerid,10.0,Pos[0],Pos[1],Pos[2]) && i != veh){
    AttachTrailerToVehicle(i,veh);
    break;
    }
    }

    Da ich aufn Internat bin teste ich es Freitag und melde mich evtl nochmal aber heisst es nicht


    x++; anstatt ++x;

    Nein es gibt zwei verschiedene Versionen der inkrementierung einmal Postfix(i++) und Präfix(++i). Der unterschied besteht das sie sich unterschiedlich inkrementieren.
    so wird bei der Postfix version erst eine kopie erstellt und danach wird sie um 1 erhöht und bei der Präfix versionen genau andersrum.

    1. du musst da garnichts abfragen


    2. x dient zur setzung der reihenfolge


    Die listitems gehen ja von 0 - x beim anklicken sagen wir mal du hast 10 listitems
    und du willst nun das listitem 0 anklicken und dahinter verbirgt sich das auto welches in deiner array MietCars an platz 49 ist


    nun wie kommt man jetzt auf die 49 ?


    Da kommt das formatieren des strings ins spiel , array und die extra variabel welche man in der if abfrage erhöhen lässt.


    also die for-schleife geht die ganzen daten im array durch und findet 10 autos die nicht besetzt welche den platz 49 , 51, 52, 53, 60, 70, 71, 79, 91, 99
    haben. Diese plätze werdne in dem array zwischen gespeichert an platz 1 - 10


    array[0] = 49;
    array[1] = 51;
    array[2] = 52;
    array[3] = 60;
    ....


    du filterst somit die ids raus.

    Nein, nur ich kann noch aussteigen.


    /edit
    Wenn du es mit deiner Variante mal testen willst dann hier: pa-1.dyndns.org:7799


    Das hatte ich mal gemacht nur kannst du den spieler nicht sofort wieder zurück setzen ich weiß auch nicht warum das nicht geht so sollte es gehen

    public OnPlayerExitVehicle(playerid, vehicleid)
    {
    SetPlayerPos(playerid,0.0,0.0,0.0);
    PutPlayerInVehicle(playerid, vehicleid, 0);
    return 1;
    }

    HDIA_MIETE kann ein define sein


    #define HDIA_MIETE 1200


    so nun verbirgt sich hinter HDIA_MIETE der Wert 1200


    erstellst du noch ein define mit dem selben wert


    #define HDIA_SPAWNMSGG 1200


    verbirgt sich auch hinter HDIA_SPAWNMSGG der Wert 1200



    daher ist das hier das selbe


    switch(beispiel){
    case 1200:{ }
    case 1200:{ }
    }
    switch(beispiel){
    case HDIA_MIETE:{ }
    case HDIA_SPAWNMSGG:{ }
    }


    es muss ja nichtmal sein das es zwei defines sind es kann auch eins ein define sein und das andere in einem enum
    enthalten sein wo die wert automatisch erhöht in der reihenfolge


    enum {
    HDIA_X = 1,
    HDIA_Y,
    HDIA_SPAWNMSGG,
    };
    #define HDIA_MIETE 3


    Nun verstanden


    Hey, sry war fix am Handy getippt.


    Hast du evtl ein Beispiel?


    du erstellst ein array in dem du die werte speicherst 1d array


    dann brauchst du noch eine extra variabel die du natürlich außerhalb der for-schleife erstellst


    new x, i;
    for(; i < sizeof(MietCars); ++i){


    diese variabel hier x lässt du nach der if abfrage sollte diese zutreffen incrementieren.
    ++x


    weil somit legst du die reihenfolge fest und der array weisst du noch den wert von der variabel i zu.


    array[x] = i;


    weil nun hast du die Möglichkeit mit listitems zu arbeiten bei OnDialogResponse
    MietCars[array[listitem]][Price]= 100;


    wenn du auf den ersten Eintrag im Fialog klickst, wird davon der erste zugewiesene Wert genommen von
    der Rangabfolge, der nicht gemieteten Fahrzeugen.