-
Postów
717 -
Dołączył
-
Ostatnia wizyta
Typ zawartości
Profile
Forum
Wydarzenia
Treść opublikowana przez Mentoss
-
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?
-
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.
-
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.
-
@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.
-
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++ ?
-
Tekst ten przez Yodę pisany był. Opis rozwiń, a do ściągnięcia możesz mnie skłonić.
-
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.
-
Mądre to.
-
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ć.
-
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.
-
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.
-
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?
-
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.
-
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"
-
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.
-
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.
-
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.
-
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.
-
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 ?
-
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...
-
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.
-
Problem w tym, że nie mogę go otworzyć, bo nie jest jeszcze do końca stworzony.
-
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.
-
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.
-
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.