Beiträge von IPrototypeI

    Ja das ist richtig. Du kannst ja noch zusätzlich dein querys posten welches ausgeführt wird wenn der spieler dne Server verlässt und der SQL Befehl UPDATE verwendet wird.
    weil wenn SpielerInfo[pID][Banngrund] genauso gespeichert wird wie SpielerInfo[pID][pBann] dann passt dies so.

    Das Callback wird immer aufgerufen daher bietet sich da eher an was du als zweites query gepostet hast und dahinter halt noch einen wert setzen
    weil dann kannst du direkt das abprüfen




    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert2",-1);
    public OnMysqlQuery(resultid, spareid, MySQL:handle)
    {
    if(resultid == -1)return 1;
    return 1;
    }
    ahja benutz switch das ist schneller in pawn als else if


    //edit


    normal dürfte er nicht deswegen meckern
    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert2",-1);


    falls doch musst du das dahinter ausfüllen


    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert2",-1,-1,connection);


    oder via #define
    #define NONE -1,-1,connection


    mysql_query("Update Tabelle SET spalte = Wert Where Spalte = Wert2",NONE);

    Falls du eine Spalte mit dem Namen Banngrund schon besitzt und du auch einer variabel hast mit dem namen
    SpielerInfo[pID][pBann] was in deinem Update query wahrscheinlich verwendet wird wirst du bestimmt auch einen string deklariert haben im jeweiligen enum
    was SpielerInfo als index dient.


    Das brauchst du nur noch strcat verwenden und den grund welchen du eingibst zusammenfügen
    strcat(SpielerInfo[pID][UNKNOWN],reason);

    1. Lese dir das durch
    [ SCRIPTING ] [MySQL] OnQueryFinish - Performance verbessern!


    2. Beispiel:




    enum {
    MYSQL_RESULT_LOGIN = 0,
    MYSQL_RESULT_CARS = 1,
    }


    Das ganze verbraucht kein speicher enthält jedoch zahlen die sich automatisch erhöhen.
    Das = 0 und = 1 ist zur verdeutlichung daher beim einfügen nicht beachten.



    Query:
    mysql_query("SELECT * FROM `accounts` WHERE `name` = 'Simon' LIMIT 1", MYSQL_RESULT_LOGIN, playerid, connection);

    Absenden eines Querys der erste wert danach ist die resultid danach die spareid hier wird der wert hinter playerid genutzt und die verbindungsid


    public OnMysqlQuery(resultid, spareid, MySQL:handle) {
    mysql_store_result(handle);
    new buffer[64];
    switch(resultid){
    case MYSQL_RESULT_LOGIN:{
    mysql_fetch_row(buffer, "|", handle);
    sscanf(buffer,"p<|>e<s[128]dliff>",PlayerInfo[spareid]);
    }
    case MYSQL_RESULT_LOGIN:{


    ....
    }
    return mysql_free_result(handle);
    }



    Jetzt gibt es dazu noch OnMysqlQueryArray


    mysql_query("SELECT * FROM `accounts` WHERE `name` = 'Simon' LIMIT 1", MYSQL_RESULT_LOGIN, {playerid,pID,pID2}, connection);



    public OnMysqlQueryArray(resultid, extravars[], MySQL:handle)
    {
    mysql_store_result(handle);
    new buffer[64];
    switch(resultid){
    case MYSQL_RESULT_LOGIN:{
    mysql_fetch_row(buffer, "|", handle);
    sscanf(buffer,"p<|>e<s[128]dliff>",PlayerInfo[extravars[0]]);
    sscanf(buffer,"p<|>e<s[128]dliff>",PlayerInfo[extravars[1]]);
    sscanf(buffer,"p<|>e<s[128]dliff>",PlayerInfo[extravars[2]]);
    }
    case MYSQL_RESULT_LOGIN:{


    ....
    }
    return mysql_free_result(handle);
    }

    Mit Md5 kommst du nicht weit solang du das nicht umstellst.
    WBB benutz einen double-salted-sha1-hash
    die Verschlüsslung also besser gesagt die .php datei die dafür verantwortlich istfindest du unter
    wcf => lib =>util => StringUtil.class.php.



    mysql_query("INSERT INTO `DTuser` (`Name`,`Passwort`) VALUES ('Johannes',sha1(CONCAT(SALT, sha1(CONCAT(SALT,sha1( 'MD5Key')))));", (-1), (0), SQL);
    2 mal gehasht mit sha1 und 2 mal gesalted

    Hm Fail, lag tatsächlich daran :o


    Noch ne andere Frage, wie kann ich es machen, wenn der Spieler aus dem Rage draußen ist,
    dass er dann die Musik nicht mehr hört? :o


    Wenn ich das richtig verstanden habe streamst du die music beim login ein oder wie dann musst du nur den stream abspielen


    sollte das doch so gemeint sein wie es dem code entspricht



    benötigst du noch eine spielervariabel
    new bool:ListenMusic[MAX_PLAYERS char];



    new Float:Pos[3],i;
    GetPlayerPos(playerid, Pos[0],Pos[1],Pos[2]);
    for(; i < MAX_PLAYERS; ++i) {
    if(!IsPlayerConnected(i))continue;
    if(IsPlayerInRangeOfPoint(i, 5, Pos[0],Pos[1],Pos[2])) {
    if(ListenMusic{i})continue;
    ListenMusic{i} = true;
    StopAudioStreamForPlayer(i);
    PlayAudioStreamForPlayer(i, "http://listen.technobase.fm/dsl.pls");
    SendClientMessage(playerid,0x00FFFAFF,"Du hast TechnoBase.FM eingeschaltet!");
    }else if(ListenMusic{i}) {
    ListenMusic{i} = false;
    StopAudioStreamForPlayer(i);
    }
    }


    damit kannst du zuzüglich abprüfen ob der spieler in der nähe ist wenn ja wird das ganze nur einmal eingestreamt und du bekommst nur einmal die message
    sonst überspringt er immer die id in der for-schleife sollte er in der nähe sein. sollte er nicht mehr in der nähe sein bleibt die id noch auf 1 das kann man abfragen und diese zurück setzen und den audiostream abschalten.

    GetVehicleHealth(PlayerCar[playerid][x][CarId], Speedo_HP) returnt auch noch die hp anzahl des fahrzeuges es wird an das zweite argument zurück gegeben hier
    Speedo_HP

    die mysql_connect Verbindungen lasse ich natürlich in OnGameModeExit mit mysql_close beenden. Mein Problem ist nur, dass seitdem ich Threaded-Queries nutze, dass er wegen diesen er unnötig weitere Verbindungen aufmacht, aber diese nicht wieder schließt.


    Oder wie kann ich von einer Threaded-Query die VerbindungsID erhalten?


    Ich geh eher davon aus das dieses MySQL Plugin Version von BlueG nicht mit mehreren verbindungen klar kommt du kannst ja mal testen ob dies auch bei nur einer erstellten Verbindung weitere Aufbaut und auch die Version mal ändern / die alte r7 version nutzen. Da es umgewöhnlich ist das er die nicht wieder schließt

    Du kannst die anderen verbindungen wieder schließen mit
    mysql_close(verbindungsid);
    Ich denk mal das er neue verbindungen wieder erstellt wenn du den server restartest da kannst überprüfen ob die verbindung besteht mit mysql_ping() wenn ja passt es wenn nicht einfach eine neue verbindung aufbauen oder verbindet er permanent neu.

    mit dem Slashzeichen sollte man vorsichtig sein in PAWN


    format(string2, sizeof string2, "{00FF00}*Projektleiter:{FFFFFF}\
    \t\t\tLegend.\
    \n{00FF00}*Scripter:{FFFFFF}\t\t\t Legend\
    \n{00FF00}*Mapper:{FFFFFF}\t\t\t\t -");


    fehler womit er nicht zurecht kommt \- \t\

    Das soll ja in dem sinne auch nix wirkliches bringen außer das dir ausgegeben wird warum dein Bot vom sevrer gekickt wird.
    [rRP]Jack danke für die Ergänzung hab das vergessen noch dazu zu schreiben

    new Keys,up,down;
    GetPlayerKeys(playerid,Keys,up,down);
    new Float:x,Float:y,Float:z;
    if(Keys & 8)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
    {


    GetPlayerVelocity(playerid,x,y,z);
    SetPlayerVelocity(playerid,x*1.2,y*1.2,z*1.2);
    }
    }
    else if(Keys & 128)
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z);
    SetVehicleVelocity(GetPlayerVehicleID(playerid),x*1.2,y*1.2,z*1.2);
    }
    }


    Es gibt kein kombinierten bitoperator mit &. & soll AND heißen und sind die bitwerte gleich so wird 1 zurück gegeben wenn nicht 0.

    Da stellt sich immer zuerst die Fragen . Recordfile vorhanden , maxnpc gesetzt in der server.cfg.


    Du kannst dir ja zusätzlich noch den grund ausgeben lassen warum er vom server unten ist

    public OnNPCDisconnect(reason[])
    {
    printf("%s", reason);
    }