Beiträge von Klemmlampe

    Ein Break zum unterbrechen der Schleife, dann sollte es gehen.


    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(pInfo[i][Nummer] == number)
    {
    format(string,sizeof(string),"[SMS] %s: %s, Nummer: %d ))",SpielerName[playerid],text,pInfo[playerid][Nummer]);
    SendClientMessage(playerid,0xFFFA00FF,string);
    SendClientMessage(pID,0xFFFA00FF,string);
    break;
    }
    }

    Nachdem so viel (zum Teil berechtigtes) Lob kam, will ich auch mal negative Kritik verteilen.
    Es ist ein GameMode für Anfänger, gut, aber dann sollte man es auch richtig bzw. auf die beste Art "beibringen".


    1) Wieso nutzt du public, welche um ein vielfaches langsamer sind, wenn du auch simple Funktionen (stocks) nutzen kannst/könntest? Sinnfrei!


    2) Wieso nutzt du das veraltete PlayerToPoint wenn es auch eine Native von SAMP gibt (IsPlayerInRangeOfPoint)?


    3) Wieso hast du einige unnötige Schleifen im Script?


    4) Wieso befinden sich unnötige Case bei Switches im Script?


    5) Warum nutzt du sscanf (+ ocmd) und strtok (+ strcmp)? Lege dich auf eines fest, ich rate zu ersterem.


    6) Warum nutzt du englische und deutsche Funktionsnamen (isPlayerAnAdmin/hateinjob)? Ist zwar möglich und jedem freigestellt, jedoch auf dauer eher verwirrend.


    7) Wieso machst du unnötig else-Abfragen?
    if (pInfo[playerid][Fraktion] == 1)
    {}
    else
    {}
    // kürzer
    if(!pInfo[playerid][Fraktion]) {}
    // oder
    if(pInfo[playerid][Fraktion] != 1) {}


    Ansonsten sind noch einige typische Anfängerfehler drin, die ich allerdings nicht auflisten möchte.


    Zum Schluss noch Positives: Du nutzt Switch und Case, mir kommt es inzwischen so vor als ob es ausgestorben sei, endlich jemand der es nutz!

    Meinen Tests zu Folge ist meine eigene Variante die schnellste (sogar minimal schneller als ZCMD), wenn du es auch testen willst:
    #include <sscanf2>


    #define MAX_COMMAND_LEN 31
    #define MAX_PARAMS_LEN 128


    #define fcmd|%1(%2) forward fcmd_%1(%2); public fcmd_%1(%2)


    forward fcmdCommandText(playerid, cmdtext[]);


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    new fcmdcommand[MAX_COMMAND_LEN], fcmdparams[MAX_PARAMS_LEN];
    cmdtext[0]=' ';
    if(sscanf(cmdtext, "s[" #MAX_COMMAND_LEN "]s[" #MAX_PARAMS_LEN "]", fcmdcommand, fcmdparams)) fcmdparams[0]=' ';
    format(fcmdcommand, MAX_COMMAND_LEN, "fcmd_%s", fcmdcommand);
    if(CallLocalFunction(fcmdcommand, "ds", playerid, fcmdparams)) return 1;
    cmdtext[0]='/';
    return CallLocalFunction("fcmdCommandText", "ds", playerid, cmdtext);
    }


    #define OnPlayerCommandText fcmdCommandText


    //E: sscanf Plugin wird benötigt, außerdem ist das nur eine Lösung wenn man sscanf so oder so zur Weiterverarbeitung nutzen möchte.

    Oben im Script statt deinen Defines den Array und bei deinem alten Case-Teil einfach wie ich es angewendet habe verwenden (SetPlayerPos(playerid, Spawn[0][0], Spawn[0][1], Spawn[0][2]), SetPlayerPos(playerid, Spawn[1][0], Spawn[1][1], Spawn[1][2]), usw.). Außerdem würde ich nicht case 0 verwenden, wenn es keine Verwendung hat, einfach weg lassen oder durch default ersetzen.

    @Flummi: Wie soll das denn funktionieren?
    @PsYcH0999: Mach' es einfach, wie EvilToastBroat meinte.
    new Float:Spawn[][3] =
    {
    {1571.9734,-1694.7366,5.4608},
    {1531.4615,-1478.8479,9.5432},
    {2772.4231,-2354.1746,15.3014}
    // usw.
    };
    // Anwendung
    case 1:
    {
    SetPlayerPos(playerid, Spawn[0][0], Spawn[0][1], Spawn[0][2]);
    GivePlayerWeapon(playerid,18,10);
    }

    Warum zur Hölle lässt man CE auf einem (normalen) PC laufen? Schwachsinn und für Server nur noch schlimmer.
    Aber b2t: Im normalfall sollten UNIX-Systeme, somit Linux, auch bei MIPS-CPUs laufen, allerdings ist mir fragwürdig warum du einen solchen nutzen willst, obwohl sie nicht für Server/Computer vorgesehen sind.


    ACHTUNG: Halbwissen meinerseits.

    DIALOG_STYLE_LIST ist wie der Name sagt nur das Aussehen des Dialoges, du könntest stattdessen auch eine 2 schreiben. Wichtig ist, dass du den Dialogstyle nicht mit der DialogID verwechselst und dass sich keine IDs überschneiden (Logindialog hat ID 1, Spawn Dialog muss dann eine andere ID haben).

    #define DIALOG_SPAWN 1 // beliebige Nummer
    // Dialog anzeigen
    ShowPlayerDialog(playerid, DIALOG_STYLE_LIST, DIALOG_SPAWN, "Titel...", "Text...", "Button 1", "Button 2");
    // Dialog abfragen
    if(dialogid == DIALOG_SPAWN) // ID prüfen
    {
    // Weitere Abfrage(n)


    {
    PutPlayerInVehicle(playerid,CreateVehicle(435,X,Y,Z,0,-1,-1,-1),0);
    }


    }


    //E: RS

    Code
    C:\Users\*\Desktop\Scripting Base\GTA SA Server\gamemodes\GFF.pwn(8535) : warning 202: number of arguments does not match definition


    Bedeutet, dass du mehr oder weniger Argumente/Parameter verwendest, als die Funktion besitzt/erwartet.

    Code
    C:\Users\*\Desktop\Scripting Base\GTA SA Server\gamemodes\GFF.pwn(8509) : warning 217: loose indentation


    Einfach nur ein Einrückfehler, kann ignoriert werden, nervt aber. Entweder#pragma tabsize 0 oder richtig einrücken (lernen).

    public joinl(playerid)
    {
    new Text:joinleave;
    new Text:joinleave1;
    TextDrawHideForPlayer(playerid,joinleave1); // Ist kein Texdraw
    TextDrawShowForPlayer(playerid,joinleave); // Ist kein TextDraw
    }
    Du versuchst einen nicht vorhandenen Textdraw anzuzeigen/zu verstecken? Das kann nicht funktionieren, du musst einen Textdraw dort erstellen, den du dann anzeigen kannst, oder in OnGameModeInit und dann den Text (TexDrawSetString) ändern und dann anzeigen, so sollte es gehen.