Beiträge von IPrototypeI

    Habe ich beides versucht, klappt jedoch nicht..
    Hier nochmal Codeausschnitt:


    Ich glaube genau lesen ist nicht so deine Stärke ?


    Das wird wohl an deiner if-abfrage liegen
    zum einen vergleicht man die bit-werte daher nutze den Bitoperator &.


    Aber darin besteht nicht das Problem

    Daher kannst du ja ein printf rein setzen in das Callback und dir newkeys ausgeben. Dann kennst du den Tastenwert vom Numpad 2 dieses kannst du ja nutzen zum vergleichen.

    ErikSon
    Das wird wohl an deiner if-abfrage liegen
    zum einen vergleicht man die bit-werte daher nutze den Bitoperator &.


    Aber darin besteht nicht das Problem sondern der wert mit dem KEY_ANALOG_DOWN definiert wurde ist eventuell nicht richtig oder das Callback wird nicht aufgerufen.


    Daher kannst du ja ein printf rein setzen in das Callback und dir newkeys ausgeben. Dann kennst du den Tastenwert vom Numpad 2 dieses kannst du ja nutzen zum vergleichen.



    ahja


    if(sscanf(params,"dD",color[0],color[1]))


    D ist ein optionaler Specifer bedeutet du kannst color[1] angeben oder nicht es fehlt dort lediglich die Setzung eines Defaultwertes


    if(sscanf(params,"dD(-1)",color[0],color[1]))

    ocmd:me(playerid,params[]) { new name[MAX_PLAYER_NAME],text[128],string[128]; GetPlayerName(playerid,name,MAX_PLAYER_NAME); format(string,128,"* %s %i.",name,text); SendClientMessage(playerid,LILA,string); }



    ocmd:me(playerid,params[])
    {
    new name[MAX_PLAYER_NAME],string[128];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    format(string,128,"* %s %s.",name,params);
    SendClientMessage(playerid,LILA,string);
    return 1;
    }


    Du musst hier 3 Dinge beachten.


    1. %i steht für Integer und eine Zahl ist keine Zeichenkette, daher musst du wie bei name %s verwenden.
    2. Du benötigst normal ein Return das ocmd eine Funktionen erstellt mit dem Namen ocmd_me.
    3. Der String text enthält nix, den brauchst du nicht da params[] als Funktionsparameter alles nachfolgende was nach /me eingeben wird enthält.

    Mit einem FTP account hast du begrenzten Zugriff auf einen Ordner auf einem Server von einem hoster (Bsp: Samp4You).
    Da php auf die Files zugreifen muss um die Daten auszulesen muss natürlich eine Verbindung dafür erstellt werden und dazu benötigt man Verbindungsdaten,
    die sind oben angeben in dem php skript als defines . Diese Daten solltest du anpassen mit den Daten , welche du von deinem Hoster bekommen hast um auf
    diesen genannten Ordner wo die Samp-Server.exe , scriptfiles, skript (hoffentlich nur die .amx) etc... liegt zuzugreifen.



    Die Daten anpassen:

    define('FTP_HOST', '31.170.165.245');
    define('FTP_USER', 'u530988236');
    define('FTP_PASS', '');

    Das heißt für mich, das ich keine Nachteile habe?
    Danke dir Beavis.


    Mit CPU vs Memory in dem zusammenhang ist gemeint das PVars weniger Memory verbrauchen jedoch in der Verarbeitung langsamer sind und andersrum.
    Zum Thema Memory stimmt das nur soweit das nicht für jeden Spieler was gespeichert wird da die PVars wenn sie erstellt werden sich den Memory nehmen und wenn diese zurück gesetzt werden geben sie das ganze wieder frei. Bei Integer , Floats oder Arrays ist das ganze so das die den memory nicht wieder freigeben und reservieren sich somit den Speicherplatz.


    Pvars nutzen dynamischen Speicher, arbeiten jedoch langsamer, dies ist bei globalen Arrays generel Variablen nicht so , diese arbeiten wesentlich schneller auch als local definierte Arrays/Varaiblen, da diese den Speicher ebenfalls dynamisch beanspruchen.


    Globale variablen werden vom memory nicht freigeben und reservieren somit den Speicherplatz, daher wird deine .amx auch bei größeren globalen Arrays extrem größer.

    Ist cache_get_field ein define von dir da dieses funktion standartmäßig nicht in der include enthalten ist


    native cache_get_field_content(row, const field_name[], destination[], connectionHandle = 1, max_len = sizeof(destination));


    schon eher nur für strings zum auslesen um integer auszulesen verwendet man


    native cache_get_field_content_int(row, const field_name[], connectionHandle = 1);


    oder native cache_get_row_int(row, field_idx, connectionHandle = 1);


    und bei Floats:


    native Float:cache_get_field_content_float(row, const field_name[], connectionHandle = 1);


    oder


    native Float:cache_get_row_float(row, field_idx, connectionHandle = 1);



    Ahja falls du eine neuer Version verwendest von dem Plugin
    cache_get_data(num_rows,num_fields,SQLCONNECTION);


    kann man durch cache_get_row_count() ersetzten, so
    als Nebeninfo

    Lasst das unnötige Spaming, was bringt euch das diskutieren? Mehr Beiträge? Lässt es doch einfach sein. Wozu unnötige Timer die Ressourcen ziehen? Einfach Include rein hauen. Weniger Ressourcen und weniger Arbeit.


    Da packt wieder einer sein wissen aus was gequirlter Scheiße gleich kommt.


    Schon einmal daran gedacht das Includes( zu deutsch Einbindungen) nur den Code einbindet, welcher in ihr enthalten ist und der Kompiler das ganze letztendlich übersetzt zur .amx zusammenfügt.


    Nun mal zu der Include, welche nur die Funktion Kick(playerid) hooked, wobei nach deiner Meinungen einen unnötigen Timer ausführt der sich 1 mal wiederholt,
    {ironie} dass ist ja sowas von Ressourcen ziehend {ironie}. So nun kannst du dich nochmal auf deiner Aussage berufen, weniger Arbeit ja, beim Rest jedoch ein FETTES NEIN

    Zitat

    Wozu unnötige Timer die Ressourcen ziehen? Einfach Include rein hauen. Weniger Ressourcen und weniger Arbeit.



    stock _Kick(playerid)
    {
    SetTimerEx("kickplayer",100,0,"d",playerid);
    return 1;
    }

    Frage 1 wozu if(!strcmp(cmdtext,"/desk", true ))---dort das ! bei (!strcmp


    Frage 2 wie leite ich zusätzlich die Spielerid/Spielernamen weiter also einzeln oder am besten beides


    Danke für den bisherigen support



    Wenn du diesen wiki Eintrag anschaust


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


    wirst du sehen welche werte strcmp zurück gibt


    Zitat

    -1 if string1 comes before string2
    1 if string1 comes after string2
    0 if the strings are the same (for the matched length).


    Wie man hier sehen kann wird 0 zurück gegeben wenn der string gleich ist
    daher bedeutet "(!strcmp" wenn strcmp alles außer 1 zurück gibt trifft die Bedingung zu, du kannst beide möglichkeiten verwenden du wo ich dir gepostet habe
    und was du nutzt. Im übertragenen ist dies, dass selbe.


    2. du formatierst den string einfach mit format

    new str[64], pName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName,MAX_PLAYER_NAME);
    format(str,64,"[%d] %s ist nun wieder da",playerid,pName);

    Entweder nutzt du dcmd oder ocmd aber nicht beides.


    Der Fehler mit ocmdOnPlayerCommandText kommt wahrscheinlich davon das du das Callback OnPlayerCommandText nun mehr als nur 1 mal enthalten hast in deinem skript
    weil du den code eifnach kopiert hast

    stock SendMessageToAdmins(color,string[])
    {
    new i;
    for(; i != MAX_PLAYERS; ++i)if(PlayerInfo[i][pAdmin])SendClientMessage(i,color,string);
    return 1;
    }


    if(!strcmp(cmdtext,"/desk", true ))
    {
    SendClientMessage(playerid,GREEN,"Du hast das Desktop-freeze verlassen .");
    TogglePlayerControllable(playerid,0);
    return SendMessageToAdmins(-1,"Ein Spieler hat den Desktop-freeze verlassen");
    }



    Was ihr da oben schreibt hat nix mit seiner Problemstellung zu tun. Er möchte, dass eine Nachricht an die Admins kommt, wenn der Spieler den Befehl eingibt.

    Ok du verwendest das Plugin von strickenkid



    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:value;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s' LIMIT 1;", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    value = mysql_fetch_float();
    mysql_free_result();
    return value;
    }



    und beim der zweiten wie beim ersten hast du ein fehler bei den Plathaltern gehabt.



    format(query, 128, "SELECT `%s` FROM `%f` WHERE `%s` = '%s' LIMIT 1;", Field, Table, Where, Is);


    %f zu %s da Table ein string ist


    format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s' LIMIT 1;", Field, Table, Where, Is);

    und anstatt ein return Get; ein return floatstr(Get); richtig?


    habe ich jetzt übersehen , aber ja genau
    entweder so:
    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Get[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%f` WHERE `%s` = '%s' LIMIT 1;", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return floatstr(Get);
    }


    oder du nutzt mysql_fetch_float


    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Float:value;
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%f` WHERE `%s` = '%s' LIMIT 1;", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_float(value);
    mysql_free_result();
    return value;
    }

    Ok danke weil das kann mir helfen ich Brauche halt was wo ich auch gucken kann weil wen man das so schreibt dann kann ich das nocht nicht so gut weil ich noch kein richtiger Scripter bin Ich lerne aber trz danke euch beiden :D



    new IsOnDuty[MAX_PLAYERS]; <= oben ins Skript ist ein global deklariertes Array
    dcmd_duty(playerid,params[])
    {
    #pragma unused params
    new aname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, aname, sizeof(aname));
    if(SInfo[playerid][pAdmin] >= 1)
    {
    new string[128];
    if(IsOnDuty[playerid] == 1) <= Abfrage ob der Spieler schon Duty ist wenn ja wird die variable wieder auf 0 gesetzt und der Spieler geht aus dem Dienst
    {
    format(string,sizeof(string),"Administrator %s ist nun außer Dienst!",aname);
    SendClientMessageToAll(0xFF6E00FF,string);
    SetPlayerColor(playerid, 0xAAAAAA00);
    Delete3DTextLabel(Spielerlabel[playerid]);
    IsOnDuty[playerid] = 0;
    }
    else <= Wenn die Bedingung oben nicht zutrifft geht der Spieler in den Dienst
    {
    format(string,sizeof(string),"Administrator %s ist nun im Dienst!",aname);
    SendClientMessageToAll(0xFF00E1FF,string);
    SetPlayerColor(playerid,0xFF00E1FF);
    Spielerlabel[playerid] = Create3DTextLabel("Supporter OnDuty", 0xEB0000FF, 0, 0, 1.0, 20.0,-1,0);
    Attach3DTextLabelToPlayer(Spielerlabel[playerid], playerid, 0.0, 0.0, 0.7);
    IsOnDuty[playerid] = 1;
    }
    }
    return 1;
    }

    Meist funktioniert das ganze nicht so wie man will , wenn man die Funktion unterhalb der Verwendung hat.


    Beispiel:


    main()
    {
    new playerid;
    mysql_GetFloat("autos", "AutoX", "Name", sCarInfo[playerid][sName]);


    }


    stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
    {
    new query[128], Get[128];
    mysql_real_escape_string(Table, Table);
    mysql_real_escape_string(Field, Field);
    mysql_real_escape_string(Where, Where);
    mysql_real_escape_string(Is, Is);
    format(query, 128, "SELECT `%s` FROM `%f` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    mysql_fetch_row(Get);
    mysql_free_result();
    return Get;
    }


    da kannst du entweder die funktion nach ganz oben verschieben oder du nutzt forward


    forward Float:mysql_GetFloat(Table[], Field[], Where[], Is[]);


    ganz oben