Beiträge von [DT]midomen

    Ja gut das ist einfach das man cmd: benutzen kann.
    Du hast vollkommen Recht, dass Neulinge das nicht verstehen können.
    Das ist aber das einzige was unverständlich ist :D


    Daran habe ich gar nicht gedacht :/


    Sorry :o

    Nein, die Hauptfunktion ist das ersetzen von Ä durch ae. Wenn ein Befehl /hälp heißen würde würde er durch dieses System

    • if(cmdStr[i] == 'ä' cmdStr[i] == 'Ä')
    • {
    • format(cmdStr2,128,"%s",cmdStr);
    • cmdStr2[i] = 'a';
    • cmdStr2[i+1] = 'e';


    Daraus ein /haelp machen.


    Was merkt man? Absolut unnötig und selbst du hast es nicht mal richtig verstanden. Keine Ahnung woher du den Code hast aber selbst erstellt bezweifel ich doch sehr.

    Schreib das um wie Max es sagte. Es gäbe zwar die alternative Text:TTTextdraw1; einen Array mit der Max Spieleranzahl zu geben, den Textdraw über eine Max Player Schleife zu erstellen und dann jeweils für den Spieler den Textdraw zu hiden/showen und den String zu ändern aber da bietet sich PlayerTextdraw viel mehr an und über diese Methode würde es unglaublich viele Slots ziehen (ich kann sowieso nicht verstehen wie man diese Methode nutzen kann).

    Normalerweise ist alles sehr Anfänger freundlich, denn wenn man sich alles anschaut ist es selbsterklärend.

    Dann erklär mal bitte einem Anfänger folgendes System:



    • //Nicht ändern
    • #define cmd:%1(%2) forward cmd_%1(%2);\
    • public cmd_%1(%2)
    • public OnPlayerCommandText(playerid,cmdtext[])
    • {
    • cmdtext[0]='_';
    • new cmdStr[128],cmdParams[128],bool:cmdAffe,cmdFu;
    • for(new i;i<128;i++)
    • {
    • if(cmdtext[i]=='\0')break;
    • if((cmdtext[i]==' ')&&(!cmdAffe))
    • {
    • cmdAffe=true;
    • continue;
    • }
    • if(!cmdAffe)cmdStr[i]=cmdtext[i];
    • else
    • {
    • cmdParams[cmdFu]=cmdtext[i];
    • cmdFu++;
    • }
    • }
    • format(cmdStr,128,"cmd%s",cmdStr);
    • if(!strlen(cmdParams))format(cmdParams,128," ");
    • new i,cmdStr2[128];
    • while(cmdStr[++i])
    • {
    • if ('A' <= cmdStr[i] <= 'Z') cmdStr[i] |= 0x20;
    • if(cmdStr[i] == 'ä' || cmdStr[i] == 'Ä')
    • {
    • format(cmdStr2,128,"%s",cmdStr);
    • cmdStr2[i] = 'a';
    • cmdStr2[i+1] = 'e';
    • for(new o = i+2; o < 128; o++)
    • {
    • cmdStr2[o] = cmdStr[o-1];
    • }
    • format(cmdStr,128,"%s",cmdStr2);
    • }
    • else if(cmdStr[i] == 'ö' || cmdStr[i] == 'Ö')
    • {
    • format(cmdStr2,128,"%s",cmdStr);
    • cmdStr2[i] = 'o';
    • cmdStr2[i+1] = 'e';
    • for(new o = i+2; o < 128; o++)
    • {
    • cmdStr2[o] = cmdStr[o-1];
    • }
    • format(cmdStr,128,"%s",cmdStr2);
    • }
    • else if(cmdStr[i] == 'ü' || cmdStr[i] == 'Ü')
    • {
    • format(cmdStr2,128,"%s",cmdStr);
    • cmdStr2[i] = 'u';
    • cmdStr2[i+1] = 'e';
    • for(new o = i+2; o < 128; o++)
    • {
    • cmdStr2[o] = cmdStr[o-1];
    • }
    • format(cmdStr,128,"%s",cmdStr2);
    • }
    • else if(cmdStr[i] == 'ß')
    • {
    • format(cmdStr2,128,"%s",cmdStr);
    • cmdStr2[i] = 's';
    • cmdStr2[i+1] = 's';
    • for(new o = i+2; o < 128; o++)
    • {
    • cmdStr2[o] = cmdStr[o-1];
    • }
    • format(cmdStr,128,"%s",cmdStr2);
    • }
    • }
    • if(CallLocalFunction(cmdStr,"ds",playerid,cmdParams)) return 1;
    • cmdtext[0]='/';
    • new string[100];
    • format(string,sizeof string,"Diesen Befehl gibt es leider nicht! (%s)",cmdtext);
    • return SendClientMessage(playerid,0xFF0000FF,string);
    • }
    • #define OnPlayerCommandText cmdOnPlayerCommandText


    Da bin ich ja mal auf eine Erklärung gespannt was es sein soll und wo der Sinn des Systems ist.
    Ich weiß wozu das System dient deswegen macht es auch absolut keinen Sinn da dieses Problem mittlerweile soweit ich weiß sowieso behoben wurde und selbst wenn nicht, wenn ich mich recht entsinne kümmert sich die ocmd Include sowieso darum und da eh alle Befehle mit ocmd geschrieben wurde klärt sich das von selbst.

    Beispiel:
    Zone Area 51 (Folgende Koordinaten werden nicht übereinstimmen und sind nur für das Beispiel Gedacht)


    Eckpunkt 1 (Südwesten): X: 100 Y: -50
    Eckpunkt 2 (Nordosten): X: -100 Y; 75
    Folglich darf jetzt das Objekt nur zwischen -100,-50 und 100,75 sein.


    Wir brauchen bei dem Objekt also zufällig generiert bei der X Koordinate den Abstand zwischen -100 und 100, bei der Y Koordinate -50 und 75.


    Was würde ich nun machen?
    Ich würde die differenz zwischen der min X und der max X berechnen und den folgenden Wert in der random Funktion verwenden. Anschließend würde ich die max X mit dem Ergebnis subtrahieren oder der min X das Ergebnis addieren.


    Wie sieht das somit in der Praxis aus?


    Max X - Min X = Differenz (100 - -100 = 200) (100 - 50 = 50)
    random(200+1)=0-200 (Ergebnis z.B. 150)


    minX (-100) + Ergebnis aus Random (150) = 50


    X wäre somit 50 und zwischen -100 und 100, random generiert.
    Das gleiche im Falle der Y Koordinate machen und schon haben wir random generierte Koordinaten innerhalb einer bestimmten Zone und können diese Koordinaten für z.B. ein Objekt nutzen das wir erstellen wollen.

    Ich habe das Script erstmal nur überflogen. Es ist natürlich sehr minimalistisch gehalten und hat somit kaum Umfang aber ich möchte vor allem da es sich an Script Anfänger richten soll und du, so scheint es mir, selbst einer bist mir zwei grundlegende Dinge aufgefallen sind, die ich nennen möchte. Es kann natürlich sein, dass ich hierbei nennenswertes übersehen habe, aber ich nenne einfach mal was mir auf den ersten Blick aufgefallen ist.


    1.
    Fangen wir mit den Befehlen an. Hier verwendest du ocmd was an sich nichts schlimmes ist.
    Wo liegt jetzt das Problem? Der Fakt dass du den Befehl immer nach diesem Schema aufbaust "ocmd:befehlsname(playerid,params[])"
    Unabhängig davon ob für den Befehl Paramater benötigt werden und man sich somit eigentlich params[] sparen könnte oder nicht.


    2.
    Dein Aufbau deiner Textdraws. Wenn ich mir das anschaue erstellst du Spielerbezogene Textdraws beim Connecten unabhängig davon ob man so viele Textdraws braucht und ob man es nicht hätte anders, Textdrawsparender mit gleichem Ergebnis gestalten können, möchte ich hier anmerken dass du temporäre Textdraws "createn" und wieder "destroyen" also löschen solltest und nicht "createn" und dann einfach Hiden solltest denn so ist immer noch ein "Slot" belegt und diese sind auch nur begrenzt. An dieser Stelle verlinke ich mal eine Liste zu allen Limits

    Sorry aber was für Informationen soll man jetzt daraus gewinnen außer dass ihr alles angeblich toll machen werdet? Ich sehe da kein Konzept, wo soll ein Konzept bewertet werden? Grafikpack, Client 6 Staatsfraktionen und dynamisches Gangssystem.


    Das ist sicher KEIN Konzept.


    Wo ist die Tiefgründigkeit? Ich bitte um deutliche Überarbeitung bevor du nach Meinungen dazu fragst.


    Das ist meine Meinung dazu, hast ja danach gefragt.

    Einfach so bei dir einfügen, sollte dann schon gehen.


    public OnGameModeInit(){AddStaticVehicle(470,197.3318,1917.2335,17.6342,179.2535,99,99); // Patriot1 AddStaticVehicle(470,207.1259,1917.0883,17.6383,180.5625,99,99); // Patriot2 AddStaticVehicle(426,153.8289,1914.9731,18.5946,359.2758,99,99); // Premier1 AddStaticVehicle(426,149.2133,1914.9010,18.6413,358.5141,99,99); // Premier2 AddStaticVehicle(426,144.5098,1915.0388,18.6472,356.1763,99,99); // Premier3 AddStaticVehicle(426,139.9722,1915.3649,18.6596,355.7698,99,99); // Premier4 AddStaticVehicle(598,126.2050,1908.2148,18.4739,359.5627,99,99); // LVPD1 AddStaticVehicle(598,126.4556,1899.5437,18.2789,0.8613,99,99); // LVPD2 AddStaticVehicle(432,209.1139,1831.2296,17.6481,181.0219,0,0); // Rhino1 AddStaticVehicle(432,250.7361,1833.4287,17.6480,178.0459,0,0); // Rhino2 AddStaticVehicle(520,308.5292,2053.7827,18.3641,179.3062,99,99); // Hydra1 AddStaticVehicle(433,126.4618,1875.5018,18.2726,359.9841,44,86); // Barracks1return 1;}

    Dann jeder damit einsteigen und fahren wie er will.


    Du musst den Index bei ArmyCar erhöhen.
    Also z.B. von new ArmyCar[20]; auf new ArmyCar[40];

    @fishy wieso Spaß bei Seite es war eigentlich geplant ein Spiel zumachen jedoch fehlen mir die Kenntnisse dafür diese hole ich mir aber in den nächsten Jahren durchs Fach-Abitur und Studium rein.

    Fachabitur Kenntnisse zum programmieren von Spielen? Kannst du vergessen.
    Ich mache es aktuell im Bereich Technik. Kann man in die Tonne hauen was das angeht. Wirst du wohl auf das spezifischere Studium warten müssen.

    @[DT]midomen oh Entschuldigung völlig überlesen wir arbeiten mit RNPC und haben viele eigene Funktionen dazu geschrieben.
    Am Montag werde ich dann das Forum eröffnen und hier auch gleich verlinken.

    Das war nicht die Frage. Bitte nochmal aufmerksam lesen und beantworten.


    "Habt ihr schon FCNPC ausprobiert?"


    Ich kann euch nur FCNPC empfehlen. Ich hatte nur Problem mit der Damage Detection wenn die NPCs schießen aber das trifft bei euch ja nicht zu.

    Ich habe ihn schon richtig verstanden. Er schrieb, das er genug Kenntnisse in Pawno hat, somit gehe ICH auch davon aus, das er PAWN ebenfalls beherrscht. Sieht aber jeder anders. ;)
    -----------------
    Das Konzept hört sich auf die Schnelle echt interessant an, bin in Zukunft mal gespannt, was bei euch noch so passiert. :)

    Das ändert nichts an der falschen Aussage. Natürlich meint er PAWN und ich wollte ihn darauf hinweisen dass es PAWN und nicht Pawno (das Programm) heißt. Aber keine Diskussion darüber verfassen, mir ging es eher um die Plugin Frage