Beiträge von IPrototypeI

    Was ist dies für eine commandprozessor ?


    zu dem da es auf


    command(aduty, playerid, params[])
    {
    #pragma unused params
    return cmd_Adminduty(playerid, params);
    }


    verweisst würde ich es mal test halber raus nehmen es kann gut dran liegen das er nicht mit
    dem aufruf klar kommt von Adminduty

    Das geht auch so nicht!


    Du musst das mit ApplyAnimation machen, gucke dazu im Wiki nach den du brauchst den Animations name!


    Würde ich nicht behaupten es gibt unterschiedliche dinge einmal


    SetPlayerSpecialAction um bestimmt Action abzurufen


    und wie du schon geschrieben hast ApplyAnimationum die ganzen animation zu benutzen

    Ok, jetzt lädt er die Daten aus. Dankeschön.


    Ich weiß auch nicht was du mit deinem mysql_free_result(); hast


    Jedes mal wo ich dir dne code geschrieben habe stand jedesmal mysql_store_result();
    drinne und du selbst hast es verwendet. Also du solltest dir mal mehr im klaren darüber sein
    wann man mysql_free_result(); verwendet und für was.
    Und zwar verwendet man dies am ende eines mysqlbefehl wenn auch die weitere verarbeitungsschritt die mit mysql zu tun haben
    abgeschlossen sind. Da du damit die vorher von MySQL temporär gespeicherten Daten löscht. Also die MySQL Befehle
    Beispiel hier:
    SELECT * FROM `accounts` WHERE `Name` = '%s'


    Noch eine kleine Anmerkung gewöhne dir auch an Threaded Querys zu nutzen über OnQueryFinish
    zu dem ist das MySQL Plugin von strickenkid schneller als das R5 und R6 plugin von BlueG .
    Daher kann man das ganze nur noch mit dem R7 plugin von BlueG toppen welches zum einen schneller ist (cache funktion)
    und die Threaded Querys schon beinhaltet zu dem werden die Befehle von selbst gelöscht.


    du kannst IsPlayerInRangeOfPoint hooken und dort dein code einfügen.


    Jedoch was du genau willst weiß ich jetzt immer noch nicht.
    wenn du es dir vermeinden willst immer bei einem command


    if(IsPlayerInRangeOfPoint(blabla,blabla,blabla,blabla));
    else
    if(IsPlayerInRangeOfPoint(blabla,blabla,blabla,blabla));


    else
    if(IsPlayerInRangeOfPoint(blabla,blabla,blabla,blabla));
    .....


    zu benutzen um den dialog aufzurufen mach dir doch eine array und geh mit einer forschleife durch
    somit kannst du auch ganz einfach atms mit einer zeile hinzufügen


    ein ausschnitt aus meinem einen skript

    enum ATM
    {
    Float:X,
    Float:Y,
    Float:Z,
    Float:Rz,
    }
    new ATMInfo[MAX_ATMS][ATM] ={
    {158.7676, -1949.1267,3.3820,120.0061}
    };

    CMD:atm(playerid, params[])
    {
    new bool:no;
    for(new i; i < MAX_ATMS; ++i){
    if(IsPlayerInRangeOfPoint(playerid,4.0,ATMInfo[i][X], ATMInfo[i][Y], ATMInfo[i][Z])){
    ShowPlayerDialog(playerid, DIALOG_ATM, DIALOG_STYLE_LIST,"ATM", "Kontostand\nEinzahlen\nAuszahlen\nÜberweisen", "Auswählen", "Beenden");
    no=false;
    break;
    }
    else no=true;
    }
    if(no)return SendClientMessage(playerid,-1,"Du bist nicht in der nähe eines Atms");
    return 1;
    }

    mysql_free_result();


    Also ich weiß ja nicht aber du hast es ja ihrgend wie mit mysql_free_result(); :D es reicht wenn es einmal vorhandne ist
    solang kein return da ist wird auch nix abgebrochen daher kannst es aus der if abfrage raus nehmen zu dem kannst du nochmal den inhalt der
    mysqllog posten was nun so drinne steht

    new string {1024]; // test format(string, sizeof(string), "SELECT * FROM `accounts` WHERE `Name` = '%s'", PlayerInfo[playerid][pSpielername]); mysql_query(string); mysql_free_result(); while(mysql_fetch_row_format(string)) { sscanf(string, "p<|>e", PlayerInfo[playerid]); mysql_free_result(); print(string); } mysql_query(string); mysql_free_result();


    Er zeigt ja kein Error an garnix in der log ?(


    The result is already empty.

    CMySQLHandler::FetchRow() - You cannot call this function now. (Reason: Empty Result)


    An error has occured. (Error ID: 2014, Commands out of sync; you can't run this command now)


    Das ist die folge der sinnlosen benutzung von mysql_free_result();
    zu dem benutz keine unterschiedliche Klammern diese haben unterschiedliche funktionen habe ich gehört


    dahernew string [1024];
    da es unterschiede zwischen {playerid} und [playerid] gibt zum beispiel und schau dir die obere verbesserung an .


    und warum zum teufel
    mysql_query(string);
    am ende nochmal ?

    IPrototypeI Ja dort haste recht, ich dachte eher an Häuser/Bizes/Fahrzeuge etc. Mann kann sich aber natürlich auch den höchsten ID Wert returnen lassen


    Ja das wusste ich das du dies meinst ^^ da hast du in der variante auch völlig recht da unterstell ich dir nix.
    Ich wollte es nur hinzufügen und
    @BlackAce-Junier poste mal dein enum da macht man auch gerne fehler.


    format(string, sizeof(string), "SELECT * FROM `accounts` WHERE `Name` = '%s'", PlayerInfo[playerid][pSpielername]);
    mysql_query(string);
    mysql_store_result();
    if(mysql_fetch_row_format(string)){
    sscanf(string, "p<|>e<{i}iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis[30]s[30]s[30]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii>", PlayerInfo[playerid]);
    print(string);
    }
    mysql_free_result();


    um den code nochmal richtig zu stellen zu dem wie groß ist dein string und wie sieht diese aus in der log gibt print
    was zurück wenn nicht liegt es an sscanf

    Er sollte seine abfragen drausen haben



    if(ispassenger == 0){
    if(vehicleid == PDVehs[1] || vehicleid == BVehs[1]){
    new Cops,Bloods,i=0;
    for(; i < MAX_PLAYERS; i++){
    if(IsPlayerConnected(i)){
    switch(sSpieler[i][Gang]){
    case 1:Cops++;
    case 2:Bloods++;
    }
    }
    }
    switch(sSpieler[playerid][Gang){
    case 1:{
    if(Bloods == 0){
    SendClientMessage(playerid,COLOR_RED,"Es sind keine Gegner online");
    TogglePlayerControllable(playerid,0);
    TogglePlayerControllable(playerid,1);
    return 1;
    }
    }
    case 2:{
    if(Cops == 0){
    SendClientMessage(playerid,COLOR_RED,"Es sind keine Gegner online");
    TogglePlayerControllable(playerid,0);
    TogglePlayerControllable(playerid,1);
    return 1;
    }
    }
    }
    }
    }


    und bei deinen zwei abfragen
    if(sSpieler[i][Gang] == 1)


    if(sSpieler[i][Gang] == 2)


    kannst du else if verwenden oder case


    das gilt auch für die unteren

    Du kannst alternativ auch eine for Schleife nehmen und wenn mysql_num_rows nicht mehr passt breaken

    Es ist beim auslesen des accounts nichtmal nötig


    if(mysql_fetch_row_format(string))das würde ganz reichen


    zu dem musst du nicht mysql_fetch_row_format
    verwenden sondern kannst auch mysql_fetch_row(string[]); nehmen

    Auf Linux buggt die enum Funktion :S


    MFG Arendium


    Hm es kommt natürlich auch drauf an , was man für eine Linuxbetriebsystem benutzt Debian, ubuntu, CentOS etc... .
    Ich hab auch schon öfters mal gehört das dies buggen sollte mit dem auslesen , jedoch nicht bei jedem ^^


    zu einen da p ein spezieler specifier darf diese nicht innerhalb des e specifier benutzt werden.
    zu dem poste einfach mal dein enum da es bei sowas auch zu problemen kommen kan.


    format(string, sizeof(string), "SELECT * FROM `accounts` WHERE `Name` = '%s'", PlayerInfo[playerid][pSpielername]);
    mysql_query(string);
    mysql_store_result();
    while(mysql_fetch_row_format(string))
    {
    sscanf(string, "p<|>e<{i}iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiis[30]s[30]s[30]iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii>", PlayerInfo[playerid]);
    print(string);
    }
    mysql_free_result();
    mysql_query(string);


    zu dem benutzt man mysql_free_result(); nicht nach dem ausfürhen eines querys wenn man den inhalt weiter nutzt.

    Huhu,


    ich wollte meine Werte aus MySQL auslesen klappt alles wunderbar, will aber jetzt auf sscanf umsteigen. (Schneller besser etc)
    Aber woher weis scanff das er jetzt der Variable X den wert Y geben soll.


    an den parametern die man angibt in was er es splitten soll und beim delimiter wann er es soll


    so um das näher zu verdeutlichen ein beispiel aus meinem autohaus


    enum BuyCar
    {
    ID,
    Model,
    Float:X,
    Float:Y,
    Float:Z,
    Float:R,
    Color1,
    Color2,
    Preis,
    Edit,
    Autohaus,
    }
    sscanf(Query, "p<|>e<iiffffiiiii>", BuyInfo[i]);


    Query ist hier ein definierter string der zum beispiel das beinhaltet.


    0|560|1953.37|1325.35|8.92012|175.621|2|2|5000|0|1


    So nun bearbeitet sscanf den string p<|> bedeutet das er den string splittet ab dem delimiter |
    also
    in

    0
    560
    1953.37
    1325.35
    8.92012
    175.621
    2
    2
    5000
    0
    1


    was danach den werten welche im enum aufgelistet sind zugeordnet werden.


    BuyCar[i][ID]= 0
    BuyCar[i][Model]= 560
    BuyCar[i][X]= 1953.37
    BuyCar[i][Y]= 1325.35
    BuyCar[i][Z]= 8.92012
    BuyCar[i][R]= 175.621
    BuyCar[i][Color1]= 2
    BuyCar[i][Color2]= 2
    BuyCar[i][Preis]= 5000
    BuyCar[i][Edit]= 0
    BuyCar[i][Autohaus]= 1


    Zu dem kannst du den delimiter beliebig ändern sei es ein | , / usw es ist alles möglich.


    du musst das ganze nichtmal einem enum dann zuordnen normale werte gehen auch


    sscanf(Query, "p<|>iiffffiiiii", BuyInfo[i][ID],BuyInfo[i][Model],BuyInfo[i][X],BuyInfo[i][Y]...);


    du kannst auch das in arrays splitten ist auch möglich

    new arr[5];
    sscanf("1,2,3,4,5", "p<|>a<i>[5]", arr);


    Ich hoffe mal deine Frage ist damit geklärt :D
    weite infos findest auch hier


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


    //edit


    @ huGGy
    dein code sagt eindeutig aus das


    while(mysql_fetch_row(_string,"|"))
    unnötig ist
    "|"


    oder sollte man es gleich über mysql_fetch_row splitten
    so ist p<|> unnötig


    Kannst ja gleich noch hinzufügen das es auch auf die größe ankommt was auch die meisten vergessen
    und sollte diese negative sein oder eine achse auf 0 so ist das textdraw auch nicht anklickbar

    SenTiZz


    hatte doch schon dein problem gepostet die geschwindigkeit fehlt dir
    //edit
    beziehungsweise die hast du auch 0


    siehe Syntax
    MoveObject(objectid, Float:X, Float:Y, Float:Z, Float:Speed, Float:RotX = -1000.0, Float:RotY = -1000.0, Float:RotZ = -1000.0);

    Mal eine Frage.
    Bin gerade drüber ein Rücken Mod System für jeweilige Waffen zu erstellen (wie bei dem Rücken Mod).
    Bisher werden die Waffen auch am Rücken angezeigt.
    Wie bekomme ich aber die Position für die Hüfte des Spielers raus ?
    Bzw. hat das sogar jemand diese Position?


    kannst du auch selbst raus bekommen


    EditAttachedObject


    http://wiki.sa-mp.com/wiki/EditAttachedObject


    in den editormodus gehen das ganze anpassen
    und die daten per printf über OnPlayerEditAttachedObject ausgeben lassen


    http://wiki.sa-mp.com/wiki/OnPlayerEditAttachedObject



    Jedoch hat SetPlayerAttachedObject als parameter die knochen
    http://wiki.sa-mp.com/wiki/SetPlayerAttachedObject


    http://wiki.sa-mp.com/wiki/Bone_IDs

    entferne dein mysql_free_result();
    aus der while schleife zu dem



    sscanf(query, "p<|>e<{i}s[24]s[64]iiiiis[64]s[24]i>", SpielerInfo[playerid]);


    da p ein spezieler specifier ist und dieser kan nicht im enum verwendet werden

    dan kannst du dir sicher sein das es an der deliver abfrage liegt
    das dort ihrgend eine abfrage nicht erfüllt wird



    new bool:no;
    if(!strcmp(Parameter, "Deliver", true)){
    for(new b = 1; b < MAX_ANZAHL_AN_BIZZ; b++){
    if(IstSpielerBeiBiz(playerid) && BizInfo[b][bKasse] >= (Anzahl * 750) && BizInfo[b][bProds] < 500 && (Anzahl + BizInfo[b][bProds]) <= 500){
    GivePlayerMoney(playerid, Anzahl * 750);
    format(MSG, 200, "Du hast die Produkte abgeliefert. Dein Lohn: %i$.", Anzahl * 750);
    SendClientMessage(playerid, FARBE_HELLBLAU, MSG);
    BizInfo[b][bKasse] -= Anzahl * 750;
    BizInfo[b][bProds] += Anzahl;
    IstBeladenMitProds[playerid] = 0;
    no =false;
    break;
    }else no =true;
    }
    }
    if(no)return SendClientMessage(playerid,-1,"Das bist erfüllt nicht die Vorraussetzungen!");


    ich hab es mal umstrukturiert und die for schleife ausserhalb der abfrage !. Dafür gehörst du eingeknastet für die vergwaltigst
    deines skriptes.


    Ps: benutz auch nicht so riesige strings du kannst maximal nur 144 Zeichen mit SendClientMessage nutzen


    Jedoch sollte man dazu beachten das man den Spieler danach mit SetSpawnInfo spawnt sonst kommt es zu komplikationen
    das man crasht.
    Eine andere möglichkeit