Beiträge von Sub Royal

    Moin


    Habe eine Funktion CreateGlobalActor welche einen Actor und ein Pickup vor ihm erstellt.



    Ich generiere in OnGameModeInit Actors, abhaengig davon wie gross das Eingangsarray ist.
    CreateGlobalActor(actorid,modelid,Float:ax,Float:ay,Float:az,Float:angle,Float:distance,pickupid)


    C
    for(new g=0;g<sizeof(GlobalActors);g++)
    	{
    	CreateGlobalActor(g+1,274,GlobalActors[g][0],GlobalActors[g][1],GlobalActors[g][2],GlobalActors[g][3],3.0,g+4000);		
    	SetActorInvulnerable(g+1, true);
    	}

    Ich habe jedoch das Problem damit.
    Ich erwarte wenn ich hinten mit g+4000 eine Pickupid fuer das zu erstellende Pickup waehle, diese Beispielsweise bei 4000, 4001 usw. liegt.
    Jedoch ist das leider nicht der Fall, nach dem Erstellen hat das Ding eine Pickupid von 1..2..3


    Wie kann ich innerhalb einer for Schleife einzigartige Pickupids erstellen mit denen ich auch nachher was in OnPlayerPickUpPickup anstellen kann?


    Sowas habe ich versucht, hat jedoch nicht geklappt.
    Das Problem ist, wenn ich eine Pickupid zwischen 1-5 z.B. habe, nehmen scheinbar neu generierte Pickups auch einer dieser IDs an, so dass irgendwann nurnoch der else Teil zutrifft



    Habe mir eventuell ueberlegt ob enum helfen kann, aber ich finde keinen Ansatz


    Bitte um Rat


    Ist es ausserdem Moeglich, irgendwie aus einem Array immer die letzte Zeile im Array auszulesen?

    Ohje danke dir dass du mich auf den Leim gebracht hast :D habe die ganze nicht gerafft dass das bei Textdraws nicht geht.


    Habe daher nun 2 Textdraws gemacht, einer wo Team: Steht, in weiss, und einer mit der Teambezeichnung und diese mit PlayerTextDrawColor dann gesetzt :D Jetzt ist es so wie ich wollte.


    Achso wegen dem Violett danke Kaliber :D Habe gedacht dass es auch im deutschen immer Violet gewesen sei :D




    So eine weitere Frage, oder vielleicht mache ich deswegen lieber ein neues Thema auf


    Habe leider wegen der Farbcodes (Fuer Spieler, Textdraws., Client Messages) verdammt viele #defines drin.
    Kann ich die irgendwie kuerzen? Bzw. ist es moeglich beispielweise Funktionen in #defines einzubauen, durch die ich aus einer Hexfarbe alle anderen Farben ableiten kann?




    Das ist das was ich habe



    Rein logisch gedacht kann man ja aus den Codes in den Zeilen 11-14 alles andere zusammenzimmern, hat jemand dazu einen Ansatz?

    So


    Habe mal als Bilder wie es sein sollte, und wie es jetzt ist:


    Damals habe ich die Farbe direkt im Textdrawstring drin gehabt.


    Jetzt will ich das ganze aber nicht mehr statisch drin haben, sondern dynamisch per Makro einbauen koennen.



    Der komplette Codeblock:




    Damals als alles noch "statisch" war habe ich den string fuer den Textdraw wie folgt formatiert:


    format(astring,sizeof(astring),"Team: {610D96}VIOLET");


    Da sah es so aus


    sa-mp-052.png


    Alles super, so wie es sein sollte.


    Nun habe ich folgende Konstrukte probiert um das gleiche Ergebnis wie oben zu erhalten


    format(astring,sizeof(astring),"Team: "#FIRST_TEAM_COLOR_TAG);





    format(astring,sizeof(astring),"Team:");


    und/oder strcat(astring,FIRST_TEAM_COLOR_TAG);


    Erschien mir logisch da sogesehen beides einfache Strings sind, jedoch war das Ergebnis bei allen meinen Versuchen folgendes


    sa-mp-058.png


    Der String scheint zwar drin zu sein, aber das mit der Farbe haut irgendwie nicht hin.
    Einzigen workaround den ich sehe, welcher aber nicht wirklich das gelbe vom Ei ist, ist das erstellen von 2 Textdraws, 1 Textdraw nur mit dem Inhalt "Team:" und ein 2ter der direkt daneben ist mit dem Inalt FIRST_COLOR_TEAM_TAG

    Habe es hingekriegt, danke an euch


    Habe es gerade mal mit Textdraws probiert, da kommt es immernoch auf dieses ? FF00FF YELLOW heraus.


    Bei SendClientMessage interessanterweise kein Problem.
    Kann es eventuell sein, dass das ganze mit Textdraws nicht moeglich ist?


    Habe auch mal strcat(string,FIRST_TEAM_COLOR_TAG); probiert, klappt bei SendClientMessage aber nicht bei TextDraws

    Ich gruesse euch liebe Community,


    Ich will mein Script schoen dynamisch gestalten damit man alles veraendern kann ohne das ganze Skript neuaufzubauen.


    Ich habe einen Textdraw welcher den Namen des Teams anzeigt, hier mal Beispiel:



    In der Teamauswahl wurde es wie folgt dargestellt:


    Team: VIOLET


    Dabei habe ich wie folgt formatiert:



    format(astring,sizeof(astring),"Team: {610D96}VIOLET");


    Also alles in Ordnung.



    Nun wollte ich das ganze jedoch so machen, so dass ich die Farbe und den Teamnamen am Anfang des Skripts definiere.[/b]


    #define FIRST_TEAM_COLOR_TAG "{610D96}VIOLET"




    format(astring,sizeof(astring),"Team: "#FIRST_TEAM_COLOR_TAG);



    Jedoch wird es dann falsch dargestellt, undzwar ingame als:


    Team: ? 610D96 VIOLET


    Wie kann ich das so machen, so dass es wie im ersten Beispiel, korrekt mit Farbe dargestellt wird?



    so soll es am Ende aussehen Team: VIOLET


    Moin



    Habe ein kleines Programm geschrieben um solche Zeilen: CreateDynamicObject(3361,3487.77929688,3228.35913086,189.82043457,0.00000000,0.00000000,183.98803711); // object(cxref_woodstair) (168)
    In folgendes Format umzuwandeln <object id="object (Konvert)(0)" breakable="true" interior="0" collisions="true" alpha="255" model="3361" doublesided="false" scale="1" dimension="0" posX="3487.779" posY="3228.359" posZ="189.8204" rotX="0" rotY="0" rotZ="183.988"></object>



    und umgekehrt.



    Jedoch habe ich das Problem, wenn ich Daten so umwandle funktioniert das ganze problemlos, aber wenn ich grosse Mengen an Daten nehme, das heisst mehr als 21000 Zeilen terminiert das Programm nicht.



    Woran kann das liegen?



    Hier mal mein gesamter Quellcode




    bzw. der Block bei Zeile 78 und 104 auf Pastebin http://pastebin.com/LAMxv5hi



    Der Block bei Zeile 130, also das ueberfuehren von dem XML Format mit <object> etc. in CreateObject wie oben angegeben funktioniert problemlos, auch mit grossen Dateien, nur der andere Weg, CreateObject in XML fuehrt zu Fehlern, da wie gesagt das Programm nicht terminiert.



    Irgendwann bricht in der Output Datei, immer ab Zeile 20264 der Output so ab:
    <object id="object (Konvert)(20263)" breakable="true" interior="0" collisions="true obwohl es weitergehen sollte.

    Moin



    Ich habe mir mal einen kleinen Objektkonverter zusammengebaut, aus dem einfachen Grund, da mein Lieblingsonlinekonverter convertffs.com seit einiger Zeit offline ist, und ich super oft reichlich Objekte konvertieren muss.


    Da ich gerne minimalistisch Programmiere ist das ganze als Commandline Programm erschienen.


    Weiterhin hat mich gestoert dass bei grossen Maps, das Hochladen von grossen Maps ab 5000 Objekten nicht moeglich war, und auch darunter ewigst lange gedauert habe.
    Habe mir fuer meine Zwecke daher einen kleinen C basierten Konverter gebastelt, welcher mithilfe von fscanf und sscanf die Werte parst und letztendlich einfach wieder in ein anderes Format bringt, und dann printet.



    Aktuell gibt es das ganze als Linux und Windows Version, weiterhin will ich darauf hinweisen dass das Programm Bugs enthalten kann.
    Wenn Bugs gefunden werden, bitte eine E-Mail an webmaster@knogleinsi.de verfassen, oder in diesem Thread hier schreiben.


    Auf Effizienz wurde bisher nicht geachtet, da selbst bei knapp 100000 Objekten das Konvertieren im Worst Case, d.h. MTA:SA zu SA:MP CreateObject nur ca. 1.6 Sekunden dauert.


    Die Laufzeit des Programs ist nach O-Notation im Best Case ne Laufzeit von O(3n) , und im Worst Case (MTA:SA zu SA:MP) ca. O(6n)



    Ziel ist es, neben reinem Objekte Konvertieren, auch das Konvertieren von Fahrzeugen, Peds/Actors, Pickups etc. zu ermoegliche, wie im SA-MP MapConverter Plugin im englischen SA-MP Forum.


    Aktuell werden Zeilen, welche Vehicle, Peds oder Pickups enthalten uebersprungen!


    Readme








    Ein Beispiel Ablauf


    Datei ist converter.exe und wird mit der Inputdatei als Parameter ausgefuehrt.


    (Geht auch per Batch datei, z.B. mit Inhalt:
    converter.exe input.txt)


    converter.exe objects.txt
    Ausgabe wird in der Datei output.txt erstellt, das ganze funktioniert zumindest bei mir aktuell zuverlaessig.



    Dannach spezifiziert man mit einer Zahl von 1-3 den Inputtyp der Objekte, und dannach wieder mit 1-3 den gewuenschten Output.
    Fertig!


    converter.png


    XML Parser wurde bisher nicht genutzt, ist wahrscheinlich fuer die Anforderungen overkill.
    Weiterhin waere das Programm allein durch die Implementierung eines solchen, locker doppelt so lang.



    Beispielinput:


    XML
    <object id="object (des_ebrigroad07) (1)" breakable="true" interior="0" alpha="255" model="16358" doublesided="false" scale="1" dimension="0" posX="-1135.2" posY="-866.29999" posZ="62.5" rotX="0" rotY="0" rotZ="314"></object>
        <object id="object (des_ebrigroad07) (2)" breakable="true" interior="0" alpha="255" model="16358" doublesided="false" scale="1" dimension="0" posX="-1135.3" posY="-866.20001" posZ="72.7" rotX="0" rotY="0" rotZ="313.995"></object>
        <object id="object (des_ebrigroad07) (3)" breakable="true" interior="0" alpha="255" model="16358" doublesided="false" scale="1" dimension="0" posX="-1140.6" posY="-871.40002" posZ="66.1" rotX="90" rotY="0" rotZ="313.995"></object>


    Output:


    C
    CreateObject(16358,-1135.199951,-866.299988,62.500000,0.000000,0.000000,314.000000);// (des_ebrigroad07)
    CreateObject(16358,-1135.300049,-866.200012,72.699997,0.000000,0.000000,313.994995);// (des_ebrigroad07)
    CreateObject(16358,-1140.599976,-871.400024,66.099998,90.000000,0.000000,313.994995);// (des_ebrigroad07)


    Ich hoffe es ist fuer jemanden, wie in der Lizenz bereits erwaehnt, useful ;) Updates folgen woechentlich
    Weiterhin habe ich vor auch andere Objektformate abzudecken.


    Download:


    https://github.com/Knogle/SimpleConverter


    Oder Source only:


    http://pastebin.com/LAMxv5hi

    Habe leider nie herausbekommen von wem die entwickelt worden ist weil die 100 fach im englischen Forum drin war :D


    Warum haben die denn dann damals nicht diese Variante genommen wenn sie einfacher ist? :D

    Kaliber: Das werde ich mal probieren und mich nachher zurueckmelden.


    Ich will ja meinen Gamemode dahingehend dynamisch gestalten, so dass man alles von einer extra Datei aus steuern kann die einfach eingebunden wird, so dass man viele Sachen machen kann und das nicht so starr ist.


    Nun habe ich eine Teamanzahl definiert, faelschlicherweise habe ich das jetzt hier TEAMSIZE genannt, mache ich nachher zu AMOUNT_OF_TEAMS der sowas.
    Naja aufjedenfall will ich dass alles in Abhaengigkeit von TEAMSIZE angepasst wird.
    TEAMSIZE soll einen gueltigen Wert haben von 2-6 mit #assert TEAMSIZE >= 2 && <= 6



    Habe daher nun vor das ganze umzuschreiben.
    Als Beispiel nehme ich folgende Funktion welche ich bisher 1:1 aus Grand Larceny uebernommen habe, welche von 3 Teams ausgeht





    Habe ich, damit ich diese Wiederholungen von gleichem Code vermeide so geschrieben



    Ist das sinvoll bzw. funktionsfaehig? Oder gibt es eine einfachere Variante? Sind switch case strukturen guter Programmierstil?


    Und warum ist das hier falsch? :D


    Jo


    Gehen wir mal davon aus dein Ding ist ein Pickup


    Dann kann man ne Reihe von Pickup Modellen in einem Array zusammenfassen, und das Ding dann random an einer deiner Positionen spawnen lassen


    So etwa