XxMichałxX Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 Wiem, że jest już dużo takich kursów, ale niektórzy nie potrafią znaleźć, więc dodam jeszcze jeden dla zwiększenia szans odnalezienia :P No to tak: 1. Ściągamy 39dll.dll. 2. Importujemy skrypty do gm. 3. Zapisujemy gdzieś projekt i do tego folderu wkładamy 39dll.dll. 4. Inicjujemy bibliotekę: GML //create: dllinit(0,1,0) /* Argument0: Jeżeli mamy w folderze z projektem 39dll.dll to dajemy 0, jak nie to ścieżkę do niego. Argument1: True, jeżeli chcemy załadować funkcje socketów. Argument2: True, jeżeli chcemy załadować "utilities". No i ogółem to nam ładuje bibliotekę - inicjuje ją. */ 5. Tworzenie serwera: GML //create: socket=tcplisten(12000,30,1) //tworzymy socketa /* Argument0: Port, na którym chcemy założyć serwer Argument1: Maksymalna ilość ludzi na serwerze Argument2: Tryb blokowania (zazwyczaj daje się true) */ //step: nowygracz=tcpaccept(socket,1) //sprawdzamy czy ktoś doszedł /* Argument0: Id socketa, na którym nasłuchujemy. Argument1: Tryb blokowania. */ if nowygracz //jezeli ktos doszedl { show_message('Ktos doszedl do gry!') } 6. Podłączanie się do serwera: GML //create: serwer=tcpconnect('127.0.0.1',12000,1) /* Argument0: Adres ip serwera. Argument1: Port serwera. Argument2: Tryb blokowania. */ if serwer { show_message('Polaczyles sie!') } else { show_message('Nie udalo sie!') game_end() } 7. Funkcje transferu i inne: writebyte() - wysyła bajt - uzywa sie przewaznie do naglowkow. - jest to liczba od 0 do 255 writeint() lub writeshort() - wysyla sie jakąś liczbe writestring() - wysyla stringa readbyte() - odbiera bajt itd itp. tak jak powyzej tylko write na read zamienic. w tej kolejnosci co sie wysyla to w tej sie odbiera np. writestring('ziomek') writestring('lolek') to jak odbieramy: readstring() readstring() najpierw odbierzemy ziomek potem lolek. Przed wysłaniem trzeba wyczyścić bufor czyli: clearbuffer() A po wysyłaniu: sendmessage(uchwyt) w naszym przypadku jak byśmy wysyłali w kliencie to uchwyt byłby zmienną serwer. Jak odbieramy to najlepiej sprawdzic czy w ogole ktos cos wyslal czyli: var size; size=receivemessage(uchwyt) <- w naszym przypadku w serwerze uchwyt to zmienna nowygracz if size { //odbieramy np: zmienna=readstring() } inaczej jak damy samo receivemessage i readstring() to bedzie zmienna pusta bo jak nikt nic nie wysle to pusto odbierze. Teraz np jak chcemy zamknąć serwer to piszemy: closesocket(uchwyt/idsocketa) No i jest jeszcze baardzo duzo funkcji ale przeciez wszystkich nie będe wymienial :) A teraz czas na przyklad: Serwer: Create: GML socket=tcplisten(12000,2,1) if socket<=0 { show_message('Nie udalo zalozyc sie serwera!') game_end() exit; } show_message('Udalo sie zalozyc serwer! Czekam na drugiego gracza..') other=0 juzdoszedl=0 Step: GML if juzdoszedl=0 { var new; new=tcpaccept(socket,1) if new { other=new show_message('Ktos doszedl do gry!') juzdoszedl=1 } } else { if keyboard_check_pressed(vk_enter) { clearbuffer() writestring(get_string('Podaj wiadomosc',0)) sendmessage(other) } var size; size=receivemessage(other) if size=0 { show_message('Klient wyszedl z gry!') game_end() } } Klient: Create: GML serwer=tcpconnect('127.0.0.1',12000,1) if serwer<=0 { show_message('Nie moge sie polaczyc!') game_end() exit; } show_message('Polaczylem sie i czekam na wiadomosc od serwera...') Step: GML var size; size=receivemessage(serwer) if size<0 exit; if size=0 { show_message('Serwer został wyłączony!') game_end() exit; } show_message(readstring()) No i to by było na tyle. Jak ktoś zauważy błędy bo pewnie są to piszcie zaraz poprawię :P I jak czegos brakuje dodam. Pozdro! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Crackkk-GM Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 Daj przykład :) chcę to wypróbować xO Po przeczytaniu artykułu masz ok... 4/5 xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MarioGteen Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 fajny super dalem5/5 tylko ze blad jest: (przynajmniej u mnie jak zrobilem wedlug przykladu ktury tu podales :D FATAL ERROR in action number 1 of Create Event for object serwer: COMPILATION ERROR in code action Error in code at line 9: other=0 at position 7: Variable name expected. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 22 Kwietnia 2009 Administratorzy Udostępnij Opublikowano 22 Kwietnia 2009 other jest zarezerwowaną zmienną Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MarioGteen Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 czyli co mam z nia zrobic zeby dzialalo? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 eeee... może zmienić nazwe zmiennej? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Roki Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 Ale może daj przykład z tego poradnika :P Potem wytestuje, ale wydaje sie fajne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 Właśnie do mnie doszło info od Nesyra(ja tego nie testuje). Sporo błędów: 1. ERROR in action number 1 of Step Event for object object0: Error in code at line 2: size=receivemessage(serwer) at position 22: Unknown variable serwer 2. ERROR in action number 1 of Create Event for object object0: In script tcpconnect: Error in code at line 1: /* creates a socket and connects to the ip and port Argument0 = Ip to connect to. Argument1 = Port to connect to. Argument2 = Blocking(0)/Non-blocking(1)/Non-blocking++(2) mode. Set argument2 to 2 if you want it to be non-blocking and also not freeze the game while it is connecting. Use tcpconnected() to find out when it has connected*/return external_call(global._SokA, argument0, argument1, argument2); at position 386: Unknown variable _SokA 3. FATAL ERROR in action number 1 of Create Event for object object0: COMPILATION ERROR in code action Error in code at line 9: other=0 at position 7: Variable name expected. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matthew Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 Mam dziwne wrażenie, że gdzieś to już widziałem... Zaraz poszukam. E: Jednak nie. Myślałem, że stąd gwizdnął: https://forum.gmclan.org/index.php?showtopic=10194&hl= Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Roki Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 Ja coś znalazłem, ale angielskie :/ Więc użyje tego, a potem może tamto przetłumacze :D @UP:A ktore lepsze? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pieter Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 var size; size=receivemessage(serwer) if size<0 exit; if size=0 { show_message('Serwer został wyłączony!') game_end() exit; } show_message(readstring()) tak to jest jak osoba która nie zna się na socketach pisze kurs... daj to w pętli aż size = 0 bo jak byś nie wiedział czasami sockety odczytują kawałek pakietu a nie cały i połowa pakietu jest stracona, poza tym to jest wtedy szybsze... odemnie 2/5 bo po pierwsze słabo napisany, po drugie zero pojęcia o czym piszesz i jak to działa ;p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Hunter Opublikowano 22 Kwietnia 2009 Udostępnij Opublikowano 22 Kwietnia 2009 hmm, fajnie ze ktos wziol sie za edukacje w 39dll, ale miałem nadzieje ze przez to ze yoda napisał juz taki tutek to w tym pojawi sie wiecej rozszezonych funkcji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 23 Kwietnia 2009 Udostępnij Opublikowano 23 Kwietnia 2009 Spokojnie, on się uczy i powoli rozszerza horyzonty... Fakt faktem że spamował kiedyś na maksa, ale teraz bynajmniej coś umie i się stara jak może. Pewnie to poprawi i ulepszy jak wychwyci błędy. Nikt się pro nie urodził. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 23 Kwietnia 2009 Udostępnij Opublikowano 23 Kwietnia 2009 To, że jest lepszy, niż kiedyś, nie usprawiedliwia go od zasypywania nas masą badziewnych przykładów/kursów. Uwierz Michał, jeszcze nie wiesz tyle, by kogoś czegoś uczyć... To co opisałeś to kompletne podstawy, jak dla mnie lepiej wziąć przykład ponga (a trochę takowych jest...), i z niego się czegoś nauczyć... ;| Lepiej zrób kurs jak zrobić trojana w GMie, przynajmniej będzie to pierwszy takowy kurs dotyczący Gma... ^_^ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MarioGteen Opublikowano 23 Kwietnia 2009 Udostępnij Opublikowano 23 Kwietnia 2009 tu jest pelno bledow :/ :] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XxMichałxX Opublikowano 23 Kwietnia 2009 Autor Udostępnij Opublikowano 23 Kwietnia 2009 Mario no widzisz. Nie rozumiesz podstaw to gadasz ze pelno bledow, a głównie dla ciebie zrobilem ten kurs bo chciałes sie za 39dll zabrac. Łatwo je poprawić. Lepiej zrób kurs jak zrobić trojana w GMie, przynajmniej będzie to pierwszy takowy kurs dotyczący Gma... happy.gif Dobry pomysł, tylko że to banalnie proste ;] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 24 Kwietnia 2009 Udostępnij Opublikowano 24 Kwietnia 2009 Dobry pomysł, tylko że to banalnie proste ;]-.- Nie nie mogę z takich ludzi, jak Ty, drogi Michałku. Najpierw zadaje w "Pytaniach początkujących" masę tematów dotyczących pisania wirusów - od zwykłego keyloggera, przez połączenie internetem z własną siostrzyczką, kończąc na pobieraniu pliku od niej. A jak go o to spytać, to odpowiada "ale to jest banalnie proste ;]"... :| Inna sprawa, Michał - jak ty chcesz kogoś czegoś nauczyć, jak kiedy twój kod się chociaż skopiuje do GMa to wyskakują błędy ;/ ? Pierwsze, co przeciętny user robi z kursem, to kopiuje to, co w nim pisze do GMa, i sprawdza efekt. A później dopiero czyta treść, jeśli to, co dałeś działa i jest "fajne". Już nie mówiąc o tym, że aby się nie kapnąć, że [other] jest wbudowaną stałą, to trzeba mieć naprawdę niezłe doświadczenie... :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się