Skocz do zawartości

Utermiko

Użytkownicy
  • Postów

    796
  • Dołączył

  • Ostatnia wizyta

Odpowiedzi opublikowane przez Utermiko

  1. To nie bug. To ficzer.

     

     

    A tak na serio to sprawdzaj alarmy.

     

    GML
    if (distance_to_object(obj_hero) < 40) && (otwarte == false) && alarm[1]<=0

    {

    y -= 4;

    if (ruch == true)

    {

    alarm[0] = 10;

    ruch = false;

    }

    }

     

     

     

    if (distance_to_object(obj_hero) > 40) && (otwarte == true) && alarm[0]<=0

    {

    y += 4;

    if (ruch == true)

    {

    alarm[1] = 10;

    ruch = false;

    }

    }

  2. Bo to jest technologia .Not

    Tyle, że to nie jest nawet w najmniejszym stopniu śmieszne :P

    Nie musisz publicznie przedstawiać swojego wstrętu do MS. (w następnym poście fervi napisze M$).

     

    Ja tam nie wiem co Compi chce, ale z tego co wiem to planuje port na Linuksa, a tam Mono

    W jaki sposób chcesz to osiągnąć? Pod Mono da się odpalić binarki C++/CLI?

  3. Ja proponuję, byś napisał to w .Not 2.0, bo:

    - Większość ma Not 2.0

    - Kopatybilny z Mono

    - .Not 4.0 / 4.5 to 8'ka lub update 7'ki

     

    Fervi

    Tyle, że .NET 2 w porównaniu do .NET 4 ma bardzo małe możliwości. To nie tylko rozszerzenie o kilka klas.

    Do tego po co używać przestarzałego oprogramowania skoro i tak nieliczne osoby używają win 2000 i starsze systemy.

     

    .NET 4 to xp, vista, 7 i 8.

    .NET 4.5 to 7 i 8 (i vista jeszcze chyba)

     

    .NET 4.5 jest i tak tylko rozszerzeniem 4 o parę przydatnych klas i innych dupereli. CLR dalej jest ten sam.

     

     

    To jest napisane w C++/CLI, a Mono chyba tego nie obsługuje.

    Jak chcesz to się baw w portowanie na Mono. Dołączyłem source przecież.

     

    PS. Jak piszesz "Not" to nie jesteś fajny.

     

    @EDIT Compi, tak z ciekawości. Po co Ci LPVOID? Jakieś specyficzne zastosowanie?

    Na językach zarządzanych wskaźniki przydają się wg. mnie tylko przy importowaniu natywnych dlli.

  4. @Utermiko

     

    Chociażby BSD.

     

    Fervi

    Raczej chodziło mi o klony windowsowych aplikacji.

     

     

    Pamiętaj, że EnigmaGM w pewnym momencie może zrównać się z GM'em i opracowywać własne funkcje (np. lepszy MultiPlayer czy multiplatformowe biblioteki)

     

    Fervi

    Wtedy to już będzie oddzielny produkt. Klony zazwyczaj są zgodne z oryginałami.

  5. Najlepiej integer.

    Jeśli to będzie string to niech zwraca wskaźnik

     

    @EDIT:

     

     

     

    Ten argument w dotnet_method to string?

    char*

    gm to traktuje jako string

    źle zrozumiałem.

    gml sprawdza czy dałeś tam ty_real czy ty_string i wywołuje odpowiednią funkcję z dll'a

    Po prostu wpisujesz ty_real bądź ty_string, w zależności jaki typ jest zwracany, tak jak przy definiowaniu zwykłych dll (external_define) w gm.

    Obczaj zresztą skrypt ;p

     

    @EDIT Tak wgl to sprawdzałeś czy działa w slapie ten dla GM'a?

    @@EDIT:

     

    Stary, nawet nie wiesz jak ci dziękuję. Teraz Slap będzie mógł korzystać z .NET Frameworka :)

    Czyli działa? :)

     

     

    @EDIT Skończyłem :D

     

    Link: https://gmclan.org/up8194_3_DotNetSlapCrossover1_0.html

    W środku binarki dla .NET 4 oraz 4.5, source oraz przykłady. Testowałem importowanie funkcji przez P/Invoke w c# bo już mnie denerwowało cpp ;p (czyli zarządzany program odwoływał się do mieszanej biblioteki która z kolei odwoływała się do dynamicznie ładowanego, zarządzanego dll)

     

    Dodałem więcej typów do wykorzystania(kwestia dopisania paru linijek). Poniżej lista typów oraz ich odpowiedników w .NET.

    Nie zapomniałem oczywiście o LPVOID. W .NET to System.IntPtr.

    char* to System.String.(tego też nie ma w tej tabelce)

    w7ekj5.png

     

    Tutaj taka lista co możesz zaimportować (wycinek z kodu):

    //#########################
    //AUTHOR OF DLL: Utermiko #
    //#########################
    
    #define EXPORT extern "C" __declspec(dllexport)
    
    EXPORT int LoadDll(char* path);
    EXPORT int CreateObject(int assemblyId, char* namespaceAndClass);
    EXPORT int RemoveObject(int objectId);
    
    EXPORT int ClearArguments();
    EXPORT int AddStringArgument(char* value);//System.String
    EXPORT int AddCharArgument(char value);//System.SByte
    EXPORT int AddUCharArgument(unsigned char value);//System.Byte
    EXPORT int AddDoubleArgument(double value);//System.Double
    EXPORT int AddFloatArgument(float value);//System.Float
    EXPORT int AddIntArgument(int value);//System.Int32
    EXPORT int AddUIntArgument(unsigned int value);//System.UInt32
    EXPORT int AddShortArgument(short value);//System.Int16
    EXPORT int AddUShortArgument(unsigned short value);//System.UInt16
    EXPORT int AddLongArgument(long value);//System.Int64
    EXPORT int AddULongArgument(unsigned long value);//System.UInt64
    EXPORT int AddLPVOIDArgument(LPVOID value);//System.IntPtr
    
    EXPORT char* InvokeStringMethod(int objectId, char* methodName);//System.String
    EXPORT char InvokeCharMethod(int objectId, char* methodName);//System.SByte
    EXPORT unsigned char InvokeUCharMethod(int objectId, char* methodName);//System.Byte
    EXPORT double InvokeDoubleMethod(int objectId, char* methodName);//System.Double
    EXPORT float InvokeFloatMethod(int objectId, char* methodName);//System.Float
    EXPORT int InvokeIntMethod(int objectId, char* methodName);//System.Int32
    EXPORT unsigned int InvokeUIntMethod(int objectId, char* methodName);//System.UInt32
    EXPORT short InvokeShortMethod(int objectId, char* methodName);//System.Int16
    EXPORT unsigned short InvokeUShortMethod(int objectId, char* methodName);//System.UInt16
    EXPORT long InvokeLongMethod(int objectId, char* methodName);//System.Int64
    EXPORT unsigned long InvokeULongMethod(int objectId, char* methodName);//System.UInt64
    EXPORT LPVOID InvokeLPVOIDMethod(int objectId, char* methodName);//System.IntPtr

     

     

    @EDIT Nie zapomnij użyć "ClearArguments" przed dodawaniem argumentów do wywołania innej metody. Najczęściej na tym można się złapać :P

    @EDIT2 Jeszcze jedno. Przy "LoadDll" trzeba podawać PEŁNĄ ścieżkę.

    @EDIT3 Nie testowałem wszystkich funkcji Invoke... i Add... , ale powinny działać.

  6. Nie ma nic w stylu Canvasa w HTML5?

     

    Jeżeli chodzi o twoją dllkę, to powiedz mi, czy argumenty są układane na stosie w stylu stdcall?

    Jeśli tak to nic nie trzeba przerabiać :)

    Źródła są dołączone. Zresztą spójrz na skrypty w gml jak wywoływana jest funkcja i spokojnie przeniesiesz to na Slapa.

    Gdybyś potrzebował innych typów niż char* i double to pisz.

    Jak chcesz mogę już od razu skompilować binarkę na .NET 4, bo 4.5 nie ma na XP.

     

    Konkretnie to najpierw czyścisz listę z argumentami (ClearArguments), wrzucasz po kolei argumenty funkcjami "AddStringArgument" i "AddRealArgument", później wywołujesz "StringMethod" lub "RealMethod" (w zależności co zwraca) i voila.

  7. Rozwiązanie Threefa jest chyba bardziej precyzyjne. Przecież są funkcje takie jak point_direction i point_distance.

     

    W dodatku trafienie w sam środek jest nie możliwe (zawsze trafiam na obrzeża czerwonego kółka). Zwiększ room_speed zamiast większej ilości przeskakiwanych pixeli przez tą kreskę.

×
×
  • Dodaj nową pozycję...