Beiträge von Templer

    Mir gefehlt bei dem ocmd dieses


    cmdtext[i+1]


    nicht, daher mach von der Datei eine Sicherung und überschreibe anschließend den Inhalt damit:



    #include <a_samp>
    forward ocmdOnPlayerCommandText(playerid,cmdtext[]);
    #define ocmd:%1(%2) forward ocmd_%1(%2);\
    public ocmd_%1(%2)
    public OnPlayerCommandText(playerid,cmdtext[])
    {
    cmdtext[0]='_';
    new ocmdStr[128],ocmdParams[128],bool:ocmdAffe,ocmdFu;
    for(new i;i<128;i++)
    {
    if(cmdtext[i]=='\0')break;
    if((cmdtext[i]==' ')&&(!ocmdAffe))
    {
    ocmdAffe=true;
    continue;
    }
    if(!ocmdAffe)ocmdStr[i]=cmdtext[i];
    else
    {
    ocmdParams[ocmdFu]=cmdtext[i];
    ocmdFu++;
    }
    }
    format(ocmdStr,128,"ocmd%s",ocmdStr);
    if(!strlen(ocmdParams))format(ocmdParams,128," ");
    if(CallLocalFunction(ocmdStr,"ds",playerid,ocmdParams))return 1;
    cmdtext[0]='/';
    return CallLocalFunction("ocmdOnPlayerCommandText","ds",playerid,cmdtext);
    }
    #define OnPlayerCommandText ocmdOnPlayerCommandText

    Bezüglich sscanf: Du verstehst wohl nicht ganz ^^ Es gibt zwei Arten


    die PAWN-Code Version
    http://wiki.sa-mp.com/wiki/Sscanf_code
    und die Plugin Version
    http://forum.sa-mp.com/showthread.php?t=120356


    Aber wie es aussieht, macht sscanf alles in Ordnung, denn anscheinend wird auch tatsächlich die ID 0 eingegeben. Entweder du hast tatsächlich den Befehl wie folgt eingegeben:


    /warn 0 t


    oder in OnPlayerCommandText wird zuvor in einem anderen Include (welches vor ocmd inkludeirt ist) etwas anderes definiert. Tritt der Fehler nur bei dem Befehl auf, oder auch woanders.

    Schreibe vor der Zeile mit sscanf mal ein print
    printf("Params: %s", params);
    und gib uns das Resultat zurück, denn wahrscheinlich kann es auch an einer falschen Parameter übergabe liegen.


    Weiters fiel mir auf, dass du dem s-Specifier keine Länge angibst, weßhalb ich gern wissen würde, ob du noch den PAWN-Code sscanf nutzt oder bereits das Plugin?

    Meine Damen und Herren,


    Projekt Sunset hat nun seine Pforten geöffnet. Es erwartet euch dieses Wochenende spannendes Material an Update´s hinsichtlich eines neuen Fraktionssystem (Neuer Aufbau und mit speziellen Waffenlager), GangWarSystem (es wird 3 Modi geben "Capture the Flag, Bomb and Defuse sowie Hold the Zone) jene per Zufall ausgewählt werden um einen fairen Ausgleich für jeden GangWar zwischen Angreifer und Verteidiger zu gewährleisten) und ein spezielles DualSystem für Nebenjobs (es wird für jeden Nebenjob spezielle Singleplayer-Quests geben, damit man auch alleine Geld am Server verdienen kann).


    Weiters wird nach diesem Wochenende auch noch vieles Mehr wie ein neues FahrzeugSystem (mit spezieller Verwaltung) und einem FraktionsstufenSystem geben, welche die Möglichkeiten am Server für Neulinge und Stammspieler um einiges erhöht wird.


    Ich darf mich vorstellen als den neuen Programmierer in diesem Projekt und möchte euch eine neue Aussicht in Hinsicht auf Godfather darbieten.


    Im Namen des gesamten Teams möcht ich natürlich euch allen viel Spaß am Server wünschen :D

    Wenn Ihr schon nicht hilfreiche Inhalte posten wollt, dann bitte woanders. Macht ihr das nur wegen eurer Beitragszahl? Wenn sich manch andere beschweren und beklagen, das Filterscript anschauen zu müssen, dann sollen sies halt nicht tun und gehen. Nebenbei wurde bereits herausgefunden wie der Tank definiert ist, da er bereits hilfreiche pastebins geschickt hat in den vorherigen Beiträgen.


    Andere lernen das Programmieren durch 24/7 Support aus anderen Foren, oder durch sonstige Maßnahmen.. jeder sein eigener Lernstil/Lerntyp ^^.


    spawncar_gas[vehicleid] = 100.0;


    Zum Autor: Weil du es durch das Filterscript ersetzt, suche mal in deinem Filterscript nach sowas wie CreateVehicle, wo das Filterscript seine eigene CreateVehicle Funktion benützt. Dort müsstest du dann die Zeile oben einfügen und bei Fehler den ganzen Codeblock posten.

    Ok dieses Script kenne ich sogar ^^
    Also Fraktionsfahrzeuge müssen, wenn ich mich nicht irre, per CreateVehicleForServer erstellt werden und bei OnVehicleSpawn gehört dann folgende Zeile eingefügt:


    spawncar_gas[vehicleid] = 100.0;


    bzw müsste es auch sogar eine Funktion geben, welches Typ von Fahrzeug wieviel Tank bekommt, aber die kenne ich nicht.

    Ok wenn du wirklich so wenig Ahnung hast poste mal ein Screenshot von deinem Tacho ^^. Im Tacho können wir vielleicht einen statischen Inhalt erkennen, wonach du im Script suchen kannst zB steht im Tacho "Tankstand: " oder sowas, dann suchst du danach. Solltest du es gefunden haben schick uns aus diesem Bereich soviel Code wie du kannst per pastebin.com und den Link oder mach auch davon einen Screenshot und lade es irgendwo hoch.

    Anhand von TextDrawTextSize wird die Fläche zum anklicken generiert, jedoch hast du überall die Y-Achse auf 0 gestellt:


    TextDrawTextSize(Textdraw0, 262.000000, 0.000000);


    Theoretisch kannst du nun schätzen bzw. berechnen, wie hoch die Höhe ist oder machst es dir einfacher und nimmst den InGame TextDrawEditor her und erstellst dir überall auf die klickbaren Sachen Boxen und es werden dann auch automatisch bei jedem die Y-Achse mit generiert normalerweise.

    Keiner im deutschsprachigen Raum verwendet mph, daher vergiss es und nütz es so:



    stock Float:Tacho(playerid)
    {
    new Float:x,Float:y,Float:z,Float:rtn;
    if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z); else GetPlayerVelocity(playerid,x,y,z);
    rtn = floatsqroot(x*x+y*y+z*z);
    return rtn * 100 * 1.61;
    }



    new kmh[6];
    format(kmh,siezof(kmh),"%.2f", Tacho(playerid));
    TextDrawSetString(Text:Textdraw2,kmh);


    //EDiT: Float Datentyp bei Stock vergessen


    ocmd:getpakete(playerid,params[])
    {
    new pakete,string[128],price;
    if(isPlayerJob(playerid,1))
    {
    if(!IsPlayerInRangeOfPoint(playerid,2.0,592.9451,-1248.1293,18.1528))return SendClientMessage(playerid,ORANGE,"du bist nicht am getmats Point in SF");
    if(sscanf(params,"i",pakete)) return SendClientMessage(playerid,ORANGE,"/getpakete [Mats-Summe 1-20]");
    price = pakete * 250;
    if(GetPVarInt(playerid,"Mats Pakete") + pakete == 20) format(string, len, " Du hast bereits %d Pakete und kannst nur mehr %d Pakete dazu kaufen...", GetPVarInt(playerid,"Mats Pakete"), 20 - GetPVarInt(playerid,"Mats Pakete"));
    else if(GetPlayerMoney(playerid) < price) format(string, len, " Du hast keine %d$ für %d Pakete...", price, pakete);
    else
    {
    GivePlayerMoney(playerid, -price);
    SetPVarInt(playerid,"Mats Pakete",GetPVarInt(playerid,"Mats Pakete") +pakete);
    format(string,sizeof(string),"* Du hast dir %i Pakete für %d$ gekauft!",pakete,price);
    SendClientMessage(playerid,BLAU,string);
    SpielerSpeichern(playerid);
    }
    SendClientMessage(playerid, COLOR_GREY, string);
    }
    return 1;
    }


    Sollten Probleme damit auftreten, weil ich es nicht gänzlich überprüft habe, so sag bescheid ^^



    ocmd:gethmaterials(playerid,params[])
    {
    new pakete,mats,string[128],len=sizeof(string);
    if(isPlayerJob(playerid,1))
    {
    if(!IsPlayerInRangeOfPoint(playerid,2.0,592.9451,-1248.1293,18.1528)) format(string, len, "Du bist nicht am getmats Point in SF...");
    else if(sscanf(params,"i",pakete)) format(string, len, "VERWENDUNG: /gethmaterials [Anzahl der Pakete]");
    else if(pakete > GetPVarInt(playerid,"Mats Pakete")) format(string, len, " Du besitzt keine %d Pakete, die du zu Materialien umtauschen kannst...", pakete);
    else
    {
    new amount = pakete * 50;
    SetPVarInt(playerid,"Mats Pakete",GetPVarInt(playerid,"Mats Pakete") -pakete);
    SetPVarInt(playerid,"Materialien", amount);
    format(string,sizeof(string),"Du hast %i Pakete der Fabrik gegeben und erhältst %i Materialien",pakete,amount);
    SendClientMessage(playerid,BLAU,string);
    SpielerSpeichern(playerid);
    }
    SendClientMessage(playerid, COLOR_GREY, string);
    }
    return 1;
    }

    Ich weiß nicht ob es stimmt, aber ich vermute es gibt sogar eine Funktion die GetGangID heißt, such mal danach und wenn es so ist, dann gib deiner Variable GetGangID eine andere Bezeichnung.


    Sollte es nicht zutreffen, so bitte einfach die Definition von ganginfight und die Definition oder Parameterübergabe von getgangid.


    Lg Templer

    Nun wenn du dir die Definition von ocmd ansiehst, siehst du folgendes:



    #define ocmd:%1(%2) forward ocmd_%1(%2);\[*]
    public ocmd_%1(%2)


    Und nach deiner Schreibweise mit


    ocmd:admin(playerid, params[]) || ocmd:a(playerid, params[])



    kompiliert er dann folgendes:



    forward ocmd_admin(playerid, params[]);
    public ocmd_admin(playerid, params[]] ||
    forward ocmd_a(playerid, params[]);
    public ocmd_a(playerid, params[])


    Erst ab hier beginnt dann dein Code mit den { und }. Aus diesem Grund ersetze du einfach deine ocmd Sache mit:


    ocmd:a(playerid,params[]) return CallLocalFunction("ocmdadmin", "is", playerid, params);


    ocmd:admin(playerid,params[])
    //Dein restlicher Code mit { und } hier.