Beiträge von Jeffry

    Wenn du die Handle ID an den Filterscript übergibst per CallRemoteFunction, dann dürfte das auch ohne zweite Verbindung klappen. Wie das performancetechnisch aussieht weiß ich nicht, habe das noch nie ausprobiert.
    Am besten du probierst es mal aus.


    Prinzipiell gehen aber auch zwei Verbindungen ohne Probleme.


    Allerdings gilt auch hier:
    Besser wäre es, alles in einem Code zu haben, dann hast du dieses Problem erst gar nicht.

    Das kannst du problemlos machen, allerdings möglicherweise nicht mit allen Command-Prozessoren, daher das Beispiel mit strcmp (dcmd würde auch gehen).
    FS1:
    if(!strcmp(cmdtext, "/enter", true))
    {
    for(new i = 0; i < MAX_HOUSES; i++)
    {
    if(IsPlayerInRangeOfPoint(...))
    {
    //SetPlayerPos...

    return 1;
    }
    }
    }
    FS2:
    if(!strcmp(cmdtext, "/enter", true))
    {
    for(new i = 0; i < MAX_BIZ; i++)
    {
    if(IsPlayerInRangeOfPoint(...))
    {
    //SetPlayerPos...

    return 1;
    }
    }
    }


    Wichtig ist eben, dass das return in dem Befehl nur aufgerufen wird, wenn der Spieler in der Nähe ist und die Position gesetzt wird.


    Zusätzlich muss dann im Gamemode noch vor dem return 0 (bzw. dem return zur Info, dass der Befehl nicht existiert, wenn 0 zu SendClientMessage geändert wurde):
    if(!strcmp(cmdtext, "/enter", true)) return SendClientMessage(playerid, 0xFF0000FF, "Du bist bei keinem Haus/Biz.");



    Allerdings muss ich dazu sagen, dass es wesentlich sinnvoller wäre, beide Systeme in einen Code zu packen, oder sie direkt in den Gamemode zu integrieren, letzteres ist oft am geschicktesten, da man alles in einem Code hat und nichts an Daten zwischen zwei Codes hin und her schicken muss.

    Hast du es mal mit mysql_pquery versucht, anstatt mysql_tquery?
    Wenn nicht, mache das mal.


    Zu dem Fehler findet sich nicht wirklich etwas, außer im Code vom Plugin, der Hinweis, dass der Code beendet wurde (FS unload).

    stock LoadFraktionData()
    {
    mysql_tquery(handle, "SELECT * FROM `"SQL_DTAG"fraktionen`", "LoadFraktionMySQL", "");
    return 1;
    }
    Und:
    public LoadFraktionMySQL()
    {
    new rows;
    cache_get_row_count(rows);
    for(new i = 0; i < rows; i++)
    {
    cache_get_value_name_int(i, "ID", fI[i][f_ID]);
    cache_get_value_name_int(i, "Kasse", fI[i][fKasse]);
    //...
    }
    return 1;
    }

    Wie kann ich es machen das wenn man auf irgendeine der Zeilen(Personen) klickt dass man auf einen weiteren Dialog weitergeleitet wird? Bei OnDialogResponse mit listitem?

    if(dialogid == DIALOG_HELPS)
    {
    if(!response) return 1;
    new count = -1;
    foreach(new i : Player)
    {
    if(Player[i][Level] > 0) count++;
    if(count == listitem)
    {
    //Player "i" wurde angeklickt
    //z.B. für weitere Verwendung:
    //SetPVarInt(playerid, "ClickedPlayer", i);

    return 1;
    }
    }
    return 1;
    }


    Außerdem solltest du die im Befehl das zweite "if" zu einem "else if" machen, und das letzte "if" zu einem "else", sonst kann es zu doppelten Einträgen kommen.

    else if(IsFahrschulAuto(newcar) == true)
    Zu
    else if(IsFahrschulAuto(newcar))


    Ich möchte nun gerne noch Abfragen ob die Variable "Banned" auch auf eins ist, wenn ja, dann soll er Entsperrt werden, wenn nicht, dann natürlich nicht.
    Hast da vielleicht ein Code Schnipsel für mich?


    new query[128];
    mysql_format(handle, query, sizeof(query), "SELECT banned FROM users WHERE name = '%e'", name);
    mysql_pquery(handle, query, "BannedCheck", "ds", playerid, name);
    Und:
    forward BannedCheck(playerid, name[]);
    public BannedCheck(playerid, name[])
    {
    new rows = cache_get_row_count();
    if(rows) return SendClientMessage(playerid, 0xFF0000FF, "User ist in der Datenbank.");
    new banned = cache_get_row_int(0, 0);
    if(!banned) return SendClientMessage(playerid, 0xFF0000FF, "User ist nicht gebannt.");
    new query[128];
    mysql_format(handle, query, sizeof(query), "UPDATE users SET banned = '0' WHERE name = '%e'", name);
    mysql_pquery(handle, query);
    SendClientMessage(playerid, 0xFFFFFFFF, "User wurde entbannt.");
    return 1;
    }

    Du musst das über OnPlayerSpawn regeln, sprich:
    public knast(playerid)
    {
    if(sInfo[playerid][pKnast] != 1 || !IsPlayerConnected(playerid)) return 1; //Nicht im Knast.

    if(sInfo[playerid][pTeam] == 1)
    {
    SetPlayerPos(playerid,1544.3629,-1675.3433,13.5583);//team spawn
    }
    sInfo[playerid][pKnast] = 0;
    return 1;
    }
    public OnPlayerDeath(playerid, killerid, reason)
    {
    if(GetPlayerWantedLevel(playerid) > 0)
    {
    ResetPlayerWeapons(playerid);
    sInfo[playerid][pKnast] = 1;
    SetPlayerWantedLevel(playerid,0);
    SetTimerEx("knast",30000,false,"d",playerid); //knast timer
    }
    return 1;
    }
    public OnPlayerSpawn(playerid)
    {
    //Code der beim Spawnen immer ausgeführt wird:
    //...

    if(sInfo[playerid][pKnast] == 1)
    {
    SetPlayerPos(playerid,0,0,10);// knast pos
    SetPlayerHealth(playerid,100);
    return 1;
    }

    //Code der nur ausgeführt wird, wenn man nicht im Knast ist.
    //...
    return 1;
    }


    Ich habe außerdem das SetTimer zu SetTimerEx geändert, da es sonst nur für ID 0 funktioniert hätte.


    Setze im enum von sInfo noch
    pKnast,
    ein.
    Natürlich musst du den Wert auch beim Connect auf 0 setzen, wie alle anderen Werte, damit das nicht von einem Spieler übernommen wird, der den Server verlassen hat.

    Es klappt nur halb, er gibt mir immer aus, selbst bei %.10f, dass er 0,000000 millisekunden braucht, also entweder hat es tatsächlich keine verzögerung, oder irgendwas stimmt nicht..

    Du musst %d nutzen, da GetTickCount nur mit ganzen Zahlen arbeitet.
    Da dein Befehl in unter 1ms fertig ist, kommt 0 raus.


    Du müsstest den Befehl per Schleife 10000 (oder mehr/weniger - je nach dem) mal ausführen, und dann den Wert durch 10000 Teilen, um die genaue Laufzeit zu bekommen.

    @Jeffry Gibt es eine bekannte Methode, womit ich die Fläche einer Area berechnen kann? Wobei diese via CreateDynamicPolygon (Incognito) erstellt werden, dementsprechend sind es nicht nur Rechtecke o.ä. sondern komplexere Formen.

    http://www.mathopenref.com/coordpolygonarea.html
    http://www.mathopenref.com/coordpolygonarea2.html


    Die Funktion im zweiten Link kannst du ja problemlos an PAWN anpassen.


    EDIT:
    Also so:
    forward Float:polygonArea(coord[2][], numPoints);
    stock Float:polygonArea(coord[2][], numPoints)
    {
    new Float:area = 0.0, j = numPoints-1;
    for(new i=0; i<numPoints; i++)
    {
    area += (coord[0][j]+coord[0][i]) * (coord[1][j]-coord[1][i]);
    j = i;
    }
    area = area / 2.0;
    return area;
    }

    Wie ist es möglich, von einem X-beliebigen Befehl, oder Funktion die Reaktionszeit im Chat anzeigen zu lassen?


    Beispiel:
    /testim Chat:Der Befehl hat x-millisekunden gedauert zum ausführen.


    Wichtig ist halt in Millisekunden

    new tick = GetTickCount();
    //Code...
    printf("Der Befehl hat %d Millisekunden gedauert.", GetTickCount()-tick);