Beiträge von [DT]midomen

    Hallo, wir arbeiten derzeit an ein RolePlay Script welches in LV spielt, nun würden wir gerne eine Straßenbahn dort Legen wo auch eine Straßenbahn drauf färt. Ist das möglich..? Wenn ja wie...?

    Ja es ist definitiv möglich. Man könnte auch neue Routen für Straßenbahnen Scripten, wäre jedoch deutlich umständlicher.
    Ich weiß nicht ob die "Schienen" der Straßenbahn bei entsprechendem Vehicle auch automatisch erkannt werden wie bei den Zügen aber falls nicht könnte man auch das Fahrzeug entsprechend moven. Hier müsste man jedoch routen speichern voallem müsste man das Fahrzeug auf die Z Koordinate anpassen auch berg auf/berg ab ansonsten würde es grauenhaft enden. Fazit, ja ist möglich.

    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];