Skocz do zawartości

Mentoss

Użytkownicy
  • Postów

    717
  • Dołączył

  • Ostatnia wizyta

Treść opublikowana przez Mentoss

  1. Mentoss

    39dll w C++

    Tak, ale zauważ różnice w poziomie zaawansowania w czymkolwiek pomiędzy Tobą, a mną. Wie ktoś może dlaczego tcpaccept zwraca -1, mimo, że klient dołącza do gry i twierdzi, że jest serwer?
  2. Mentoss

    39dll w C++

    Wow! Dodanie bibliotek do build options pomogł○o. Nie ma errorów. Nawet warningów. Serdecznie dziękuję. Stworzę mały serwer, żeby sprawdzić, czy działa.
  3. Mentoss

    39dll w C++

    Bawiłem się tym, kombinowałem... do source'ów dorzuciłem wszystkie *.cpp i *.h z wyjątkiem main.cpp, tak jak pisałeś, Konrad. W pliku głównym dałem #include i wszystkie załączone *.cpp po kolei. I nie wywala błędów. Złożę jakiś test i zobaczę, czy działa. Dzięki wielkie! Edit: Nie wywala errorów, jeśli próbuję zaincludować nieistniejący includes.cpp. W przeciwnym wypadku: Chyba, że zgodnie z oryginałem i przykładem includuję pliki *.h: Ciekawe jest to, że w przykładzie podrzuconym przez Ediego jest to samo. Nawet, jeśli nic nie zmieniam.
  4. Mentoss

    39dll w C++

    @Konrad Zaglądałem w źródła, ale chcę tylko możliwość użycia funkcji tak, jak w GMie. Nie jestem żadnym ekspertem c++. @Shocker: Taki właśnie jest plan. Serwer osobno (c++), gra osobno (GM). @Edie: Kod źródłowy jest w paczce z 39dll. Kłopot w tym, że nie da się go skompilować. Przynajmniej w Code::Block -sie.
  5. Mentoss

    39dll w C++

    Przy próbie kompilacji (w Code::Blocks) 39dll otrzymuję całe masy errorów. Co zrobić, żeby było można używać funkcji 39dll w programie napisanym w C++ ?
  6. Tekst ten przez Yodę pisany był. Opis rozwiń, a do ściągnięcia możesz mnie skłonić.
  7. no racja... nie zapisujesz tego do zmiennych globalnych, tylko wczytujesz jednym obiektem. spróbuj przez odwołanie do zmiennej innej instancji lub zapisuj do globalnych.
  8. 1. Do rozkminiania egzystencji instancji służy funkcja instance_exists(); 2. Owszem, o ile lang nie jest zmienną globalną, to potrzebuje instancji, żeby istnieć.
  9. ja z ds_'ów ogarniam listy tylko, może stacki by mi poszły w locie. grida nigdy nie używałem, ale skoro tak twierdzisz, to się nim w najbliższym czasie zainteresuję. Tablice to zwykłe zmienne, którym można tak jakby nadać kilka wartości. Taka tablica składa się z nazwy zmiennej i indeksów (wymiarów tablicy). Jest więc nazwa_zmiennej[ wartość ], gdzie wartość pozwala nam uzyskać wskazaną wartość zmiennej. Podsumowując: nazwazmiennej[0]="Tu jest pierwsza wartość zmiennej"; nazwazmiennej[1]="Druga wartość zmiennej"; (...) nazwazmiennej[152]="Sto pięćdziesiąta trzecia wartość zmiennej"; Wszystkie wartości muszą być tego samego typu. O ile dobrze pamiętam, jest ograniczenie do 32000 wartości danej tablicy.
  10. Ale dla innych nie, co utrudnia szukanie rozwiązań. Pz tym w ładnie ułożonym kodzie widać od razu zasięg klamerek i nie trzeba ich liczyć. Dla zainteresowanych: GML if hud = true { if eng = true { if(view_current == 0) { draw_text(view_xview[0]+64,view_yview[0]+4,'Weapon: '+string(o_player_1.bron)) if instance_exists(o_bomb_plant) { draw_text(view_xview[0],view_yview[0]+32,'Bomb has been planted!') draw_text(view_xview[0]+32,view_yview[0]+54,'Time : '+string(global.czas)) }; if !instance_exists(o_bomb_plant) { draw_text(view_xview[0]+32,view_yview[0]+32,'Bomb is not planted!') }; } else if(view_current == 1) { draw_text(view_xview[1]+64,view_yview[1]+4,'Weapon: '+string(o_player_2.bron)) if instance_exists(o_bomb_plant) { draw_text(view_xview[1],view_yview[1]+32,'Bomb has been planted!') draw_text(view_xview[1]+32,view_yview[1]+54,'Time : '+string(global.czas)) }; if !instance_exists(o_bomb_plant) { draw_text(view_xview[1]+32,view_yview[1]+32,'Bomb is not planted!') }; }; } if pl = true { if(view_current == 0) { draw_text(view_xview[0]+64,view_yview[0]+4,'Broń: '+string(o_player_1.bron)) if instance_exists(o_bomb_plant) { draw_text(view_xview[0],view_yview[0]+32,'Bomba jest podłożona!') draw_text(view_xview[0]+32,view_yview[0]+54,'Czas : '+string(global.czas)) }; if !instance_exists(o_bomb_plant) { draw_text(view_xview[0]+32,view_yview[0]+32,'Bomba nie jest podłożona!') }; } else if(view_current == 1) { draw_text(view_xview[1]+64,view_yview[1]+4,'Broń: '+string(o_player_2.bron)) if instance_exists(o_bomb_plant) { draw_text(view_xview[1],view_yview[1]+32,'Bomba jest podłożona!') draw_text(view_xview[1]+32,view_yview[1]+54,'Czas : '+string(global.czas)) }; if !instance_exists(o_bomb_plant) { draw_text(view_xview[1]+32,view_yview[1]+32,'Bomba nie jest podłożona!') }; }; }; }; I dwie rady ode mnie: 1. Zamiast GML if instance_exist( ... ) { //... }; if !instance_exists( ... ) { //... }; robisz:GML if instance_exists(...) { //... } else { //... }; i jest o wiele wygodniej, czytelniej itd. (możliwe nawet, że szybciej, ale o to trzeba by było zapytać ekspertów) 2. Zrób sobie jednowymiarowe tablice, a języki ponumeruj. W tablicach zapisujesz tekst w danym języku w jakiejś tam sytuacji. Przykładowo: Polski -> 0 Angielski -> 1 GML // inicjacja tablic bombajest[0]='Bomba jest podlozona.'; bombajest[1]='Bomb is planted.'; GML // użycie if instance_exists(bomba) { draw_text(0,0, bombajest[ lang ]; }; gdzie zmienna lang odpowiada za aktualnie używany język.
  11. GML (funkcja wait) instance_create(0,0,o_waiter); o_waiter.ide=id; // A o_waiter.tryb=tryb+1; // B o_waiter.alarm[0]=argument0; tryb=254; Po czym w tamtym switchu dla case 254 jest zwykły break; Taka mała operacja opóźniająca dalsze działania ze względu na problem z tego tematu. o_waiter ma natomiast w alarm[0] przywrócenie instancji zapisanej w zmiennej ide trybu (kom. A), który otrzymała przy stworzeniu (kom. B ). wait(10); daje nam więc tymczasowy skok trybu na 254, a 10 stepów dalej przejście na poprzedni tryb+1. Wpadłem na pomysł, żeby wszystkie cad() poprzesuwać na koniec case'ów, i działa, ale nie można tego tak zostawić. - - - EDIT: Nadprogramowy break/exit w kodzie dlla nie powinien przerywać switcha w GMie, prawda?
  12. Mówiąc szczerze, przez myśl by mi nie przeszło, żeby w ten sposób sprawdzić, dzięki. cad() wygląda tak: GML external_call(odkoduj,argument0,argument1);odkoduj to zmienna globalna (globalvar'em zrobiona) przechowująca ID z external_define(). W samym skrypcie dlla nie ma ani jednego breaka, i ani jednego exita.
  13. Mam taki oto kod: GML switch (tryb) { case 0: if file_exists('res\list') { bar_redraw(0,'Odczytywanie listy zasobów.'); tryb=1; } else { bar_redraw(0,'Brak ważnych plików. Ładowanie zatrzymane.'); tryb=254; wait(5*room_speed); }; break; // ten case się wykonuje. Bez problemu. case 1: show_message('B4'); // to wykonuje się setkiii razy (nie wiem, czy w tym samym stepie, czy co step.) cad('res\list','tempfiles\t0'); // to się wykonuje show_message('AftR.'); // to się już nie wykonuje wait(10); break; // (...) } wiadomość "B4" zaczyna latać, jakby była wsadzona luzem, bez żadnego warunku. Tymczasem nie widać skutków funkcji cad(); wywołującej dlla kopiującego plik, oraz wiadomości "AftR". Po prostu znikają bez wieści. Co ciekawsze, gdyby jednak usunąć linijkę z wiadomością "B4", cad(); zawiesza proces. Błędu w cad(); nie ma. Sprawdzam działanie w projekcie kontrolnym, wszystko działa, zero zwieszeń, efekt zadowalający. - - - Edit: Przeglądałem foldery raz jeszcze. I udało mi się znaleźć efekt działania dlla. Jednak się wykonuje. W dalszym ciągu jednak mamy zapętlenie i brak wiadomości "AftR"
  14. 1 - w niczym to nie przeszkadza, nie wnosi to zupełnie nic do tematu, 2 - odświeżasz temat sprzed pół roku. Wniosek: Post podwójnie bez sensu.
  15. niech room będzie większy, niż możesz po nim chodzić. Stwórz sobie takie marginesy, na których będą rysowane rzeczy tak, jakby były w innym roomie. gdy wchodzisz na margines po prawej, przenosi cię do następnego rooma, koło marginesu z lewej. Instancje możesz zapisywać do globalnej listy, albo cóś. Na pewno coś wymyślisz. EDIT: marginesy nie mogą być mniejsze, niż pół viewa.
  16. Zamykam. I nie mam pojęcia, o co może chodzić. Jeżeli mam (to z testu dlla): GML var txt; txt='C for coding,#D for decoding.'; draw_text(room_width/2-string_width(txt)/2,room_height/2-string_height(txt)/2,txt); if keyboard_check_pressed(ord('C')) { cai(get_open_filename('',''),get_save_filename('','')); } else if keyboard_check_pressed(ord('D')) { cad(get_open_filename('',''),get_save_filename('','')); } natomiast, jeżeli dam samo cad(get_open_filename('',''),get_save_filename('','')); , to już wywala błęda.
  17. Znaczy, ja Ci powiem tak: napisałem sobie dll-a, który szyfruje mi pliki. Bierze plik A i tworzy plik B, który jest odwzorowaniem pliku A po zakodowaniu/odkodowaniu. I to działa dobrze, ALE po zakończeniu działania biblioteki, jeżeli chcę ten plik od razu otworzyć do czytania, to wyskakuje error. Jeśli nie - wszystko jest dobrze. Sam sprawdziłem zawartość pliku po odszyfrowaniu i działanie programu bez natychmiastowego otwierania pliku - wszystko działa poprawnie. N mam pojęcia o co chodzi.
  18. A u mnie nie... Chyba, że nie w tym problem. Od czego może być windowsowa ramka "Unexpected error occured when running the game.", czy cóś takiego ?
  19. nn, to nie ma prawa zadziałać, jako że nie można go wgl. otworzyć. Po prostu wywala errora, i tyle - nie ma dalej czytania, czy plik sie skończył, czy nie, a bez sensu by było przy każdym pliku czekać np. dwie sekundy, żeby na pewno zdążyło się zrobić i dalej działać. Musi być przecież jakiś sposób, żeby sprawdzić, czy plik jest zdatny do otwarcia, czy odmówi współpracy...
  20. Chcę właśnie wykorzystać to, że jak nie można go otworzyć, ma 0B. Sprawdzając rozmiar pliku bez otwierania go, będę wiedział, czy można go już otworzyć, czy trzeba jeszcze czekać. W ten sposób nie wywali errora, który w tej chwili crash-uje proces.
  21. Problem w tym, że nie mogę go otworzyć, bo nie jest jeszcze do końca stworzony.
  22. Jak sprawdzić rozmiar pliku bez otwierania go? Chodzi o to, że świeżo stworzony plik przez chwilę istnieje, ale jest pusty i nie da się go otworzyć, a dopiero po chwili nabiera masy i czytelności. Ja natomiast potrzebuję otworzyć go tuż po stworzeniu tak, aby nie wywalał błędów.
  23. W evencie draw ustawiaj mu współrzędne: GML x=view_xview[0]; y=view_yview[0]; Nie zapomnij narysować obiektowi sprite'a od nowa.
  24. Mentoss

    string do tablicy

    Dzięki wszystkim, ale po wprowadzeniu kodu Arkariusa (który nie zadziałał) zacząłem drążyć w poszukiwaniu opisu .copy() ... dało to taki efekt, że znalazłem .at(), który po wkręceniu w pętlę for dał oczekiwany efekt. Działa. Dzięki raz jeszcze.
×
×
  • Dodaj nową pozycję...