Beiträge von Simon

    stock IsPlayerNameOnline(PlayerName[])
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(i,pName,sizeof(pName]));
    if(!strcmp(pName, PlayerName, true)) return 1;
    }
    return 0;
    }


    Und nun einfach verwenden:
    if(IsPlayerNameOnline(playerName[])) //code

    Klappt nun :D


    Fehler war das ich abgefragt habe ob er sich ein skin ausgesucht hat, falls nein gehts nicht weiter. Aber da ich nie die variable gesetzt habe das er sich bereits ein skin ausgesucht hat konnte es auch nicht klappen.



    Trotzdem Danke :)

    Guten Tag


    habe ein Problem was mich ein wenig aufregt da ich es schon seid etwa einer Stunde versuche zu fixen. Der Fehler ist, das nicht erkannt wird das er eine bestimmte Taste drückt.
    Bisher habe ich die Tasten "c" und "n" ausprobiert, da viele anderen schon belegt oder ungeeignet sind.
    Der Spieler ist gefreezed und die camera ist 1-2m vor ihm und auf ihn gerichtet, so wie es in einer skinauswahl üblich ist.


    Der Code ist ganz einfach wird aber garnichts erst aufgerufen, was bedeutet das er gar nicht die Taste drückt, bzw es nicht erkannt wird:
    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    print("Test 1");
    if(newkeys & KEY_NO) // if(newkeys % 2) | if(newkeys & KEY_CROUCH) | if(PRESSED(2)) | if(PRESSED(KEY_CROUCH)) > funktionieren ebenso nicht
    {
    print("Test 2");
    if(GetPVarInt(playerid,"ChoosedfSkin") >= 0 || GetPVarInt(playerid,"ChoosedzSkin") >= 0)
    {
    if(GetPVarInt(playerid,"ChoosedfSkin") >= 0 && Spieler[playerid][Fraktionsskin] <= 0) return 0;
    SkinKaufen:
    SetPVarInt(playerid,"ChoosedfSkin",-1);
    SetPVarInt(playerid,"ChoosedzSkin",-1);
    j_SetPlayerInterior(playerid,Spieler[playerid][LastInt]);
    j_SetPlayerVirtualWorld(playerid,Spieler[playerid][LastVirt]);
    j_SetPlayerPos(playerid,Spieler[playerid][LastX],Spieler[playerid][LastY],Spieler[playerid][LastZ]);
    j_TogglePlayerControllable(playerid,1);
    SetCameraBehindPlayer(playerid);
    DestroyBincoInfo(playerid);
    if(Spieler[playerid][Duty] == 1) SetPlayerSkin(playerid,Spieler[playerid][Fraktionsskin]);
    //else if(Spieler[playerid][Duty] == 2) SetPlayerSkin(playerid,Nebenjobs[Spieler[playerid][Ziviljob]][jSkin]);
    else if(IsAGang(Spieler[playerid][Fraktion]))
    {
    SetPlayerSkin(playerid,Spieler[playerid][Fraktionsskin]);
    Spieler[playerid][Duty] = 1;
    }
    else SetPlayerSkin(playerid,Spieler[playerid][Zivilskin]);
    }
    }
    print("Test 3");
    return 1;
    }


    Ich frage mich echt was für ein dummer Fehler mir da unterlaufen ist. In der Serverlog wird Test 1 und Test 3 angezeigt.


    Liebe Grüße

    Eine kleine Frage bezogen auf mein Thema Standard Mysql Funktionen erweitern:


    Und zwar wurde mir dort geraten keine Stocks zu benutzen um Werte aus der Tabelle auszulesen, da dies mein Server enorm verlangsamt.
    Soll ich nun also den Code im Stock anstelle vom Stock nutzen? Das wäre übelst aufwenig aber wenns wirklich wahr ist würde ich das natürlich machen.


    Also Vergleich Vorher:
    Fraktionen[i][Drogen] = mysql_GetInt("Fraktionen", "Drogen", "Frakname", Fraktionen[i][Frakname]);


    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[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 `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }
    Nachher:
    new query[128], sqlint;
    format(query, 128, "SELECT Drogen FROM Fraktion WHERE Frakname = '%s'", Fraktionen[i][Frakname]);
    mysql_query(query);
    mysql_store_result();
    sqlint = mysql_fetch_int();
    mysql_free_result();
    Fraktionen[i][Drogen] = sqlint;


    Habe ich das so richtig verstanden?

    Das ist kompletter quatsch!


    1. benutzte ich nicht das R7 Plugin also bringen mir auch keine R7 Funktionen was.


    2. Funktioniert mein Code.
    Ich darf auf keinen fall OR benutzen!! Ich frage 2 verschiedene Spalten ab und nicht die selbe, das wäre ja dann easygoing. Es geht darum mehrere verschiedene Spalten auf verschiedene Werte abzufragen ohne dabei jedesmal für diese sonderfälle wo ich mehrere spalten abfrage eine eigene stock schreiben muss sondern eine dynamische stock schreibe in der ich optional mehrere spalten abfragen kann.


    Wenn dies nicht möglich ist hat sich die Frage erledigt, ist es jedoch möglich, was ich glaube, dann wäre es nett wenn mir da ein paar Hilfen gegeben werden könnten.


    Nochmal: Es geht hier nicht um Fehlerhafte Codes, sondern darum, es einfacher und dynamischer und eventuell sogar leistungsfähiger zu gestalten :)

    Sondern? Hier mal mein Mysql_GetInt:


    stock mysql_GetInt(Table[], Field[], Where[], Is[])
    {
    new query[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 %s WHERE %s = '%s'", Field, Table, Where, Is);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }


    Und wie ich es dann bei 2 Feldern hatte:


    stock mysql_GetIntParams(Table[], Field[], Where[], Is[], aWhere[], aIs[])
    {
    new query[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);
    mysql_real_escape_string(aWhere, aWhere);
    mysql_real_escape_string(aIs, aIs);
    format(query, 128, "SELECT %s FROM %s WHERE %s = '%s' And %s = '%s'", Field, Table, Where, Is, aWhere, aIs);
    mysql_query(query);
    mysql_store_result();
    new sqlint = mysql_fetch_int();
    mysql_free_result();
    return sqlint;
    }

    Mal eine kleine Frage bezüglich Mysql Stocks:


    Man benutzt ja die schon in vielen Tutorials angefertigten Stocks: mysql_GetInt oder mysql_GetString etc.
    Diese nutze ich selber auch. Nun würde ich gerne wissen ob es möglich ist ohne viel überlegung dies ein wenig dynamischer zu machen. Nehmen wir mal an ich brauche ein integer aus einer Datenbank, muss dazu aber 2 Felder abfragen.


    Normal:

    Code
    Query: "SELECT [INTEGER] FROM  [TABELLE] WHERE [SPALTE] = [WERT]"


    mit 2 Feldern:

    Code
    Query: "SELECT [INTEGER] FROM [TABELLE] WHERE [SPALTE 1] = [WERTx] AND [SPALTE 2] = [WERTy]"


    bzw mit mehreren Feldern:

    Code
    Query: "SELECT [INTEGER] FROM [TABELLE] WHERE [SPALTE 1] = [WERTx] AND [SPALTE 2] = [WERTy] AND ......."


    Dazu würde ich gerne eine Funktion schreiben die jedoch unabhängig davon wieviele Felder man abfragen will immer funktioniert.


    ähnlich wie beispielweise die SetTimerEx funktion wo du die Werttypen angibst "sdsasdss" und dahinter dann die Werte entsprechend auflistest. Nur ist dies nicht ganz so einfach umsetzbar wie bei diesem Beispiel.



    Wäre sehr nett wenn mir da jemand weiter helfen könnte :)


    PS Beispiel wie die Funktion aufgebaut sein kann:


    mysql_GetIntEx(Table[], Field[], Where[], Is[], Where2[], Is2[], Where3[], Is3[]) Wobei die Parameter nach Is[] dann optional wären und man somit beliebig viele Felder abfragen kann.

    1. Das


    und 2.: du brauchst das garnicht so umständlich machen:


    new Float:Variable[Anzahl der Möglichkeiten][3];
    dann liest du unter OnGameMode einmal aus:
    for(new i = 0; i < Anzahl der Möglichkeiten; i++)
    {
    Variable[i][0] = mysql_GetFloat("fraktionen","SpawnX","Id", i);
    Variable[i][1] = mysql_GetFloat("fraktionen","SpawnY","Id", i);
    Variable[i][2] = mysql_GetFloat("fraktionen","SpawnZ","Id", i);
    }

    und unter OnPlayerSpawn auch ganz einfach:


    new fID = SpielerInfo[playerid][pFraktion];
    SetPlayerPos(playerid,variable[fID][0],variable[fID][1],variable[fID][2]);


    Wenn das dann nicht klappen sollte, hast du ein Fehler beim auslesen der Tabelle, wenn alles in der Tabelle richtig drinne steht.