Beiträge von root

    Kannst es auch direkt so schreiben :)

    C
    char buffer[1024] = {'\0'};
    DWORD numBytesRead = 0;
    BOOL Success = ReadFile(
    	PipeIn,
    	buffer,
    	sizeof(buffer) * sizeof(char),
    	&numBytesRead,
    	NULL
    );
    if (Success) {

    Da mehrere Messages gleichzeitig Nacheinander kommen können hab ich es nun so:


    Von C# Testweiser aus:

    C
    StreamOut.WriteLine("Test");
    StreamOut.WriteLine("Test");
    StreamOut.Flush();

    In C++

    C
    char *line = strtok(buffer, "\n");
    while (line != NULL)
    {
    	cout << "[OK] Line: " << line << endl;
    	line = strtok(NULL, "\n");
    }

    Nur leider kommt am ende einfach noch ein ☺ raus:
    Hat das jetzt einen Speziellen Grund?
    Ist es sinnvoller nach jedem WriteLine direkt zu Flushen? @Kaliber

    Ämm weil Copy-Paste? :D

    C
    wchar_t buffer[1024 * 32];
    DWORD numBytesRead = 0;
    BOOL Success = ReadFile(
    	PipeIn,
    	buffer,
    	1024 * 32,
    	&numBytesRead,
    	NULL
    );
    if (Success) { ...

    Buffer Size kannst mal noch ignorieren, die wird noch angepasst.
    Von C# aus wird es via


    C
    StreamOut.WriteLine("Test");
    StreamOut.Flush();

    gesendet.

    Jemand Erfahrung mit Daten über Pipes von C# nach C++ zu senden?
    Will bei mir irgendwie nicht so.
    Wenn ich zb. in C# "Test" in die Pipe schreibe und dann mittels ReadFile in C++ auslese, dann kommt wenn ich es als wchar_t lasse nur HEX raus und wenn ich es mittels


    C
    char *str = (char *)malloc(numBytesRead + 1);
    wcstombs(str, buffer, numBytesRead);

    in eine char umwandle wird aus dem Test (bzw dem HEX) ein "&"

    Du kannst die Query schneller machen:
    Es ist nicht sinnvoll einen Count auf * zu machen. Schaue eher in der Datenbank nach zb. der ID Zeile und mache nur darauf einen Count. Auch ist ein Limit 1 hier passend da es hierbei sowieso nur darum geht ob 0 oder mehr.

    SQL
    SELECT COUNT(ID_Benutzer) as Counter FROM benutzer WHERE Benutzername= :User AND Passwort= :Password LIMIT 1;

    Es geht hier lediglich darum das OnObjectMoved hier das Problem nicht löst.
    Wenn ich ein Tor sagen wir mit einer Zeit von 1 Sekunde aufmache, dann wird nach 1 Sekunde OnObjectMoved aufgerufen und das Tor wieder geschlossen. Welchen Zweck hat das nun? Genau, keinen.


    Ich werfe dir hier nicht vor. Das ist lediglich für Leute die später vielleicht über diesen Beitrag stolpern.


    Aber wir müssen hier nun wirklich nicht lange darüber Diskutieren.

    Zb so:


    Nach dem MoveObject folgendes:

    Code
    SetTimerEx("CloseGate", 5000, false, "i", i);


    Das Public dazu


    Code
    forward CloseGate(torid);
    public CloseGate(torid)
    {
    	MoveObject(Tor[torid][Tor], Tor[torid][Tor_X], Tor[torid][Tor_Y], Tor[torid][Tor_Z]-3, Tor[torid][Tor_Speed], 0.0,0,.0);
    }

    Die for schleife soll dir ersparen das du jedes mal selber Tor[0][TorID] = BundeswehrTor[0]; machen musst.
    Das setzt aber wie gesagt voraus das sich die Reihenfolge des Objekt erstellen sich mit den Koordinaten übereinstimmen. Wenn das der Fall ist kannst du alle Tor[0][TorID] = BundeswehrTor[0]; weglassen und nur die Schleife am Ende, wenn alle Objekte erstellt sind, durchlaufen lassen;

    Zum Zeitpunkt des Compilen hat BundeswehrTor[0] noch keinen Wert.
    Musst es zb. wie folgt abändern:


    Dann beim Objekt erstellen:



    Code
    BundeswehrTor[0] = CreateObject(19906, 193.41330, 1923.53125, 19.92830,   0.00000, 0.00000, 360.21191);
    	Tor[0][TorID] = BundeswehrTor[0];
    	//Das setzt vorrraus das sich die reihenfolge der Positionen der tore und die erstellung der Object übereinstimmen
    	for(new i = 0; i < sizeof(Tor); i++) {
    		Tor[i][TorID] = BundeswehrTor[i];
    	}

    MoveObject will die Objekt ID, nicht einen String.
    Versuch es folgendermaßen:


    Definitionen:



    Befehl:



    Du könntest es auch noch Intelligenter machen, denn im Moment Speicherst du die ID immer Doppelt. Und zwar direkt so:



    Code
    new Tor[][Toree] =
    {
        {2, CreateObject(19906, 193.41330, 1923.53125, 19.92830,   0.00000, 0.00000, 360.21191), 193.41330, 1923.53125, 19.92830, 193.41330, 1923.53125, 16.64330}, //Tor 1, müsstest du halt für alle anderen auch machen

    Alle Tore ( & Koordinaten) in ein Array Packen und dann mit einer for-schleife durch loopen und in der Schleife das IsPlayerInRangeOfPoint ausführen um das Tor das am nächsten ist zu ermitteln.