Skocz do zawartości

39dll Mini-Kurs


Rekomendowane odpowiedzi

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

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

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

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

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

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

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...