Jump to content


Photo

39dll V2.5


  • Please log in to reply
2525 replies to this topic

#1 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 22 December 2004 - 12:09 PM

39DLL version 2.5

39DLL is a poweful dll which gives you access to windows sockets using game maker. Make fast multiplayer games or connect to protocols like http, irc, ftp, etc.

Download: 39dllV25.zip
Tutorials:
Http tutorial: http://host-a.net/39ster/http.rtf
Terms of use:
Credit is good.

Some popular games that use this dll:
Cubes Online
Stick online
Hover tank3D
Trix!
Slime Online
If you think your game is popular and it uses the dll then pm me.

Edited by 39ster, 23 July 2007 - 01:31 PM.

  • 30

#2 manther

manther

    The crazy monkey

  • New Member
  • 116 posts

Posted 22 December 2004 - 08:20 PM

Hmm, Seems good. The example doesnt really show much about the how good it is as you can very easily do that with the m_play functions, However there was no lag when i ran it twice on my computer :D

Like i said seems good, but how will it do against the other dlls like GMsock?
  • 0
Posted Image

#3 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 22 December 2004 - 08:30 PM

Thanks. The demo was just to show how to make a little mini game with it.

I dont know how it will go against gmsock because i havnt used it but i did see the gml code for the functions and it uses alot of GML which is quite slower than compiled code. My dll doesnt have much gml so it may or may not run faster.

I may make a better example and an example of the file compression. You can use this one dll to make a mmorpg and use the binary functions to save files. The binary functions are better than gms cause you can read/write strings and integers.

EDIT:
New version coming out soon fixed alot of bugs...practically flawless and faster. This time it will come with a Unlimited player example (shows you how to make a game where there is no limit on the players using player id's..massively multiplayer basically). I may also make a bunch of scripts where it simplifies the use of the dll and a much easier way of using both udp and tcp.

Edited by Luke Graham, 25 December 2004 - 03:23 PM.

  • 0

#4 jolley small

jolley small

    GMC Member

  • New Member
  • 72 posts

Posted 25 December 2004 - 06:02 PM

Could you please release a better example on making a game with this
  • 0

Registered User of Gamemaker

My Portfolio & web design blog

#5 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 25 December 2004 - 06:09 PM

Hey. yea i have just uploaded an example on how to make unlimited player game. I need people to test cause theres this weird problem where when more than 2 people are playing it like recieves data a block at a time or something...like the playing will be moving in all the right positions then stop for like 5 seconds then start going in all the places it should of went and so on..
Just run the server and then run the client and connect to urself then run another client and connect and hopefully u will see u and the other u and can move around

My ip is 202.93.97.133 and im hosting on port 14804 if you want to test it with me.

BTW im on 56k.

Edited by Luke Graham, 25 December 2004 - 06:17 PM.

  • 0

#6 Catclone

Catclone

    GMC Member

  • New Member
  • 4 posts

Posted 23 January 2005 - 05:29 PM

This thing owns. I really needed lagless bin functions >:blink:
  • 0

#7 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 25 January 2005 - 03:36 PM

Thanks for the reply. Thought this dll died lol.
  • 0

#8 Cubiso

Cubiso

    Previously dragonsoft

  • New Member
  • 81 posts

Posted 09 June 2005 - 10:50 AM

How do you send binary through udp?
  • 0

#9 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 09 June 2005 - 11:18 AM

Back from the dead again...lol wtf? Just send UdpSend with no data but set the message id to the binary value you want to send! You cant use 255 but because this is so old i probably wont update it so you can..
  • 0

#10 Smarttart62

Smarttart62

    designFUSIONô

  • New Member
  • 2619 posts

Posted 09 June 2005 - 11:38 AM

whats with you people... (dragonsoft) well stop doing this!
-Steve
  • 0

#11 Cubiso

Cubiso

    Previously dragonsoft

  • New Member
  • 81 posts

Posted 09 June 2005 - 01:09 PM

What's wrong with asking a question?
  • 0

#12 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 29 June 2005 - 06:30 AM

MAJOR UPDATE! Look and please download and give it a try.
*Ignore the posts above this message because this dll is pretty much rewritten*

Edited by 39ster, 29 June 2005 - 12:23 PM.

  • 0

#13 Timmo

Timmo

    GMC Member

  • New Member
  • 558 posts
  • Version:GM:HTML5

Posted 29 June 2005 - 07:16 AM

Is it faster than GMsocket?
  • 0

Posted Image Posted Image


#14 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 29 June 2005 - 07:23 AM

Is it faster than GMsocket?

<{POST_SNAPBACK}>

Yes! Its easier on your cpu because it doesnt use any gml and its faster at sending messages if you write in binary form and send in binary mode!

Edited by 39ster, 29 June 2005 - 07:23 AM.

  • 0

#15 Timmo

Timmo

    GMC Member

  • New Member
  • 558 posts
  • Version:GM:HTML5

Posted 29 June 2005 - 09:32 AM

Can you make example of that infinite peole can join and they can talk and move.
  • 0

Posted Image Posted Image


#16 bobby2guns2003

bobby2guns2003

    Whateva!

  • New Member
  • 149 posts

Posted 30 June 2005 - 12:41 AM

was messin around with it... and it seems to be easy to use, propz ;)
  • 0

#17 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 30 June 2005 - 01:02 AM

Yes once people understand the internal memory buffer and writing in different data types its very easy to use. Ill show you how to know which data type to use.

Alright say i want to send my x and y co-ordinate in 1 packet. I would write this:

clearbuffer();            //Make sure their is nothing in the buffer.
writebyte(1);            //This can be used as a message id system.
writeshort(x);          //Write 2 bytes representing the x.
writeshort(y);          //Write 2 bytes representing the y.
sendmessage(socket);  //Now send all the data in the buffer!


Alright tthe first line "clearbuffer()" is just used in case their is already data in the internal buffer. The second line writes the message id. I made it a byte because you probably wont need more than 255 different message id's. The second line says write the x position. The reason i wrote it as a short is because if i wrote it as a byte then the maximum x position could only be 255. A short can be anywhere from -32500 to +32500. As long as your room width is smaller than 32500 than you should use a short for the x and y position. This is also the case for the y position. Now i just use the script sendmessage() which will work on a tcp socket and udp sockets (no seperate scripts for the 2 protocols).

To recieve that message i just wrote i would put in the step event of the person to recieve it:
while(1)  //make a loop because we might recieve multiple messages a step
{
  size = recievemessage(socket);
  if(size <= 0) break;                  //If no message
  mid = readbyte();                    //Get the message id
  switch(mid)
  {
    case 1:                     //If the message id is for the players x, y pos.
      x = readshort();
      y = readshort();
    break;
  }
}

  • 1

#18 Ravotus

Ravotus

    GMC Member

  • GMC Member
  • 327 posts

Posted 30 June 2005 - 11:46 AM

Wow, very interesting idea for the buffer. You should make it like a stack where you push values then pop them off in the opposite order. ;)
  • 0

#19 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 30 June 2005 - 01:10 PM

Yes! Its easier on your cpu because it doesnt use any gml


while(1)  //make a loop because we might recieve multiple messages a step
{
 size = recievemessage(socket);
 if(size <= 0) break;                  //If no message
 mid = readbyte();                    //Get the message id
 switch(mid)
 {
   case 1:                     //If the message id is for the players x, y pos.
     x = readshort();
     y = readshort();
   break;
 }
}


Looks like GML to me.
  • 0

#20 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 30 June 2005 - 01:25 PM

Yes! Its easier on your cpu because it doesnt use any gml


while(1)  //make a loop because we might recieve multiple messages a step
{
 size = recievemessage(socket);
 if(size <= 0) break;                  //If no message
 mid = readbyte();                    //Get the message id
 switch(mid)
 {
   case 1:                     //If the message id is for the players x, y pos.
     x = readshort();
     y = readshort();
   break;
 }
}


Looks like GML to me.

<{POST_SNAPBACK}>

Errr, i think its pretty obvious i meant the scripts contain no gml..

Edited by 39ster, 30 June 2005 - 01:30 PM.

  • 0

#21 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 30 June 2005 - 02:00 PM

You wrote scripts in GM without using any GML? That's pretty impressive.
  • 1

#22 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 30 June 2005 - 02:07 PM

You wrote scripts in GM without using any GML?  That's pretty impressive.

<{POST_SNAPBACK}>

Ahem, quote from myself in the first post:

Speed:
With an exception to the splitstrings script, the only gml used in the scripts are the
external_call functions.

Why the hell are we even talking about this? Why did you bring this up?

Edited by 39ster, 30 June 2005 - 02:08 PM.

  • 0

#23 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 30 June 2005 - 02:10 PM

Well then you used GML. Besides, how much GML does GMSock actually use? Sure it has many scripts, but are each of those scripts very large? And also, even if your scripts are faster, aren't you just leaving more work to the programmer? All the GML you left out will probably end up being put back in by the programmer anyway, won't it?
  • 0

#24 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 30 June 2005 - 02:11 PM

Well then you used GML.  Besides, how much GML does GMSock actually use?  Sure it has many scripts, but are each of those scripts very large?  And also, even if your scripts are faster, aren't you just leaving more work to the programmer?  All the GML you left out will probably end up being put back in by the programmer anyway, won't it?

<{POST_SNAPBACK}>

No. Maybe you should actually try the dll and see for yourself, Yourself. I said its handled by the dll.

Edited by 39ster, 30 June 2005 - 02:12 PM.

  • 0

#25 Yourself

Yourself

    The Ultimate Pronoun

  • GMC Elder
  • 7352 posts
  • Version:Unknown

Posted 30 June 2005 - 02:28 PM

I could, but there's no way I could compare it to GMSock as I don't have that (and the site's bandwidth exceeded, so I can't get it). I just think it's a bit silly of you to advertise this as faster when you said yourself you didn't actually use GMSock.
  • 0

#26 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 30 June 2005 - 02:32 PM

I could, but there's no way I could compare it to GMSock as I don't have that (and the site's bandwidth exceeded, so I can't get it).  I just think it's a bit silly of you to advertise this as faster when you said yourself you didn't actually use GMSock.

<{POST_SNAPBACK}>

Yeah i did say that, but then again look at the date when i posted that. I could of used gmsock within 7 months. I also said in that post (the one that i made before i ever used gmsock) "My dll doesnt have much gml so it may or may not run faster." Never actually saying it IS faster.

Edited by 39ster, 30 June 2005 - 02:33 PM.

  • 0

#27 yourjustconfused

yourjustconfused

    GMC Member

  • New Member
  • 11 posts

Posted 30 June 2005 - 05:32 PM

Is there a max to how large the message your sending is?
  • 0

#28 darkmage

darkmage

    GMC Member

  • New Member
  • 518 posts

Posted 01 July 2005 - 07:29 PM

i tried to connect to eachother through lan but nothin was recieved maybe a better example would help

becuase i think i am doing somethin wrong with connecing so can you maybe make an example just that a few people can connect and walk or sometihng

it would really help out other people and me ofcourse to :angry:
for so far i have see it looks good but are u shure the irc works because when 2 are connected they cant chat with eachother only with them selves :S:S
  • 0

#29 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 02 July 2005 - 02:12 AM

i tried to connect to eachother through lan but nothin was recieved maybe a better example would help

becuase i think i am doing somethin wrong with connecing so can you maybe make an example just that a few people can connect and walk or sometihng

it would really help out other people and me ofcourse to :D
for so far i have see it looks good but are u shure the irc works because when 2 are connected they cant chat with eachother only with them selves :S:S

<{POST_SNAPBACK}>

The irc program is very simple and i forgot to add a way to recieve messages from other people when i released it. Im making a much more advanced online game example right now.
  • 0

#30 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 03 July 2005 - 02:51 AM

Hey iv made a mmorpg engine for you guys to use. http://forums.gamema...howtopic=136369
  • 0

#31 GM6_Dude

GM6_Dude

    I am mikesgm6

  • New Member
  • 167 posts

Posted 04 July 2005 - 02:04 AM

Hey iv made a mmorpg engine for you guys to use. http://forums.gamema...howtopic=136369

<{POST_SNAPBACK}>


OMG THIS IS NEAT!!!!!!1

i needed this to make my new ...........
wait better keep it a secret

but when u see the best online game :huh: j/k
just remember u gave that project its life
  • 0

#32 Rebound->

Rebound->

    GMC Member

  • New Member
  • 152 posts

Posted 04 July 2005 - 05:17 AM

LMAO Yourself, you're so stupid :-P
Nice DLL 39ster, i'm actually going to try and test this against GMsock. Good job.
  • 0

Inforticle - The Free Informative Article Directory
Bullfee - The New and Innovative Online Store

#33 GM6_Dude

GM6_Dude

    I am mikesgm6

  • New Member
  • 167 posts

Posted 04 July 2005 - 06:20 PM

Hey iv made a mmorpg engine for you guys to use. http://forums.gamema...howtopic=136369

<{POST_SNAPBACK}>


OMG THIS IS NEAT!!!!!!1

i needed this to make my new ...........
wait better keep it a secret

but when u see the best online game :) j/k
just remember u gave that project its life

<{POST_SNAPBACK}>

:huh: <ME
  • 0

#34 DJ Gman

DJ Gman

    GMC Member

  • New Member
  • 685 posts

Posted 04 July 2005 - 11:06 PM

this dll is a bit confusing could use a more in depth help file :huh:
  • 0

#35 Zaltron

Zaltron

    GMC Member

  • New Member
  • 14 posts

Posted 05 July 2005 - 03:05 AM

Hey, I think this thing is great! I have seen one bug with 2 people though. When p1 and p2 and gone in and and of both maps then p1 was in the house map and p2 was outside of the house map, p1 could see p2 at the top of the house map except that p2 looks like he was stuck in the black on the outside of the house in the house map even though he wasn't on that map. Hope that helps :\. Also, I looked through your scripts and couldn't figure where and when you sent your x and y data to the server, I was just wondering, where in your scripts are you doing that?

Edited by Zaltron, 06 July 2005 - 03:06 AM.

  • 0

#36 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 05 July 2005 - 08:59 AM

I have now made a tutorial for the dll! Its in the zip and its called tutorial.rtf.

I also updated the dll and scripts so if you have already started making your game using the old scripts then to use the new ones do this:
Under scripts, remove the folder the dll scripts are in
Go to File->Merge game and select the DllScripts.gm6

Updates:
The only real update to it is writestring() and readstring() are more extensive and now requires less programming to use.
This is the old way you could of used writestring() and readstring() (you can still do it this way in the new update):
writestring("hello");
readstring(bytesleft()); //had to put how much letters to recieve.

Thats all well and good if your only sending one string over winsock, but what if you want to something like x, y, user and password in one message? How are you going to know how long the username string is and the password string? The new update makes strings alot easier to use because you can use them like readshort() or readint() where you dont have to give an argument.
//Write the data
writeshort(x);
writeshort(y);
writestring("39ster", true);
writestring("123456", true);

//Reading the data
x = readshort();
y = readshort();
username = readstring();
password = readstring();

How does it work? Simple. If you set the second argument in writestring() to
true then that means to add a Null (ascii code 0) terminator character after the string. Now when you dont set argument0 or if argument0 is 0 in readstring() then it tells the dll to read until it reaches the null terminator.

What if i want to send a string over a text based protocol..Text bases protocols dont allow the ascii code 0.
You can define your own seperator string other than the ascii code 0!
Example:
//Writing the data
writestring(username + ":" + password + ":");

//Reading the data
username = readstring(0, ":");
password = readstring(0, ":");

Warning: Do not write a string with a null terminator if your going to read it using your own seperating string! This will crash the game.

Also i have removed the splitstring() function because its not needed anymore!

Edited by 39ster, 05 July 2005 - 09:24 AM.

  • 0

#37 DJ Gman

DJ Gman

    GMC Member

  • New Member
  • 685 posts

Posted 06 July 2005 - 03:51 PM

thanks the tutorial helps a lot
  • 0

#38 Stryke

Stryke

    fcuκô

  • GMC Member
  • 606 posts

Posted 07 July 2005 - 12:13 AM

I made an .gm6 for everyone that wants a online example that is less advanced. It only works with 2 players so if you want to work with unlimited players you gotta edit it. http://www.rocketsof...s/RPGClient.gm6
This example is probably good for a pong game.

Edited by Stryke, 07 July 2005 - 12:13 AM.

  • 0

#39 Timmo

Timmo

    GMC Member

  • New Member
  • 558 posts
  • Version:GM:HTML5

Posted 07 July 2005 - 12:18 AM

God dammit, this dll is so good. But why not there are much posts about it? This is much better than Gm's mplay functions and more simple too.
  • 0

Posted Image Posted Image


#40 Stryke

Stryke

    fcuκô

  • GMC Member
  • 606 posts

Posted 07 July 2005 - 05:53 PM

Yeah, only 2 pages from December 2004 - July 2005.. sad :D
  • 0

#41 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 09 July 2005 - 06:35 AM

Ok guys let this topic die if you want but what im about to say isnt just because i made this dll. This is the only dll on these forums that you can make professional lagless multiplayer games. MPLAY and no other winsock dll supports binary mode and the use of reading/writing in different data types. All professional online games you see use this method and if anyone here wants to make anything professional involving multiplayer then this is the only dll.
To understand why this dll is important read http://www.gamedev.n.../article712.asp in the section: "Birth of Lag: Building the Packet". This dll can do everything mentioned in that section.
  • 0

#42 Timmo

Timmo

    GMC Member

  • New Member
  • 558 posts
  • Version:GM:HTML5

Posted 09 July 2005 - 07:35 AM

"MPLAY and no other winsock dll supports binary mode and the use of reading/writing in different data types."

Wht does it mean?

Edited by Timmo, 09 July 2005 - 07:37 AM.

  • 0

Posted Image Posted Image


#43 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 09 July 2005 - 08:25 AM

When im talking about different data types i mean these scripts:
writebyte() - Utilizes 1 byte
writeshort() - Utilizes 2 bytes and can be a number between -32000 to +32000
writeint() - utilizes 4 bytes and can be a number between -2000000 to + 2000000
writefloat() - utilizes 4 bytes and can store numbers with a floating point (e.g 4.2)
writedouble() - Utilizes 8 bytes and is the same as writefloat but the number can be much much larger!
  • 0

#44 Jochem

Jochem

    Pagoe Lord

  • New Member
  • 232 posts

Posted 09 July 2005 - 01:19 PM

I was wondering something.
Is it necessary to send a string and the numeric values in different packets (when the numeric values are being packed with writebyte())?

I've made a string_split() script (how original!), which uses a character from the ASCII-table (like '|') to split different values from each other. Since some strings depend their size on their user, like names and passwords.
For example, I send the packet: "LG|Jochem|mypassword|5600" to log myself in. I could easily halve the size of bytes for 5600, but that isn't possible, because there is already used a ASCII-character for the strings, and the whole packet will be messed up when readed, thus leading to errors.

I did though of giving a name and password a fixed size, but that would be a waste of bandwith, wouldn't it?

Does anyone have any suggestions?
  • 0

#45 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 09 July 2005 - 02:10 PM

I was wondering something.
Is it necessary to send a string and the numeric values in different packets (when the numeric values are being packed with writebyte())?

I've made a string_split() script (how original!), which uses a character from the ASCII-table (like '|') to split different values from each other. Since some strings depend their size on their user, like names and passwords.
For example, I send the packet: "LG|Jochem|mypassword|5600" to log myself in. I could easily halve the size of bytes for 5600, but that isn't possible, because there is already used a ASCII-character for the strings, and the whole packet will be messed up when readed, thus leading to errors.

I did though of giving a name and password a fixed size, but that would be a waste of bandwith, wouldn't it?

Does anyone have any suggestions?

<{POST_SNAPBACK}>

You do not need to have the packet seperated with "|".
Just do:
//Building the packet
writestring("LG", true);
writestrng("Jochem", true);
writestring("mypassword", true);
writeshort(5600);

//Reading the packet
lg = readstring();
username = readstring();
password = readstring();
short = readshort();

See when you set argument1 in writestring() to True then this adds a NULL terminator character at the end of it. This Null terminator will now be used to find when the string ends. Setting argument0 in readstring() to 0 (or leaving it blank) means to extract the string by finding the NULL terminator. This is also alot faster then a split_string() script written in gml.
Null terminator character is the ascii code 0 btw and is very rarely used in strings..apart from telling the app when the string finishes.

Edited by 39ster, 10 July 2005 - 08:20 AM.

  • 0

#46 Jochem

Jochem

    Pagoe Lord

  • New Member
  • 232 posts

Posted 09 July 2005 - 02:51 PM

Ah, now this makes sense. Thanks. I will be playing a little around with the DLL and see how it works. :D
  • 0

#47 39ster

39ster

    GMC Member

  • GMC Member
  • 898 posts

Posted 11 July 2005 - 08:07 AM

Ok iv made a new update. It now includes the zlib library so you can compress and decrompress the internal memory buffer. You can also create a checksum of the data inside the buffer!
  • 0

#48 Jochem

Jochem

    Pagoe Lord

  • New Member
  • 232 posts

Posted 11 July 2005 - 11:04 AM

"You can also create a checksum of the data inside the buffer!"

What do you mean with that? :/

"It now includes the zlib library so you can compress and decrompress the internal memory buffer."

Err.. since most of the data is already expressed as small as it could be, how could it be any smaller?
  • 0

#49 RiChArD_fLoOd

RiChArD_fLoOd

    GMC Member

  • New Member
  • 395 posts

Posted 11 July 2005 - 11:07 AM

is this better than gmsock cos i'm kinda in the middle of makin a game with gmsock
  • 0

#50 Jochem

Jochem

    Pagoe Lord

  • New Member
  • 232 posts

Posted 11 July 2005 - 11:12 AM

Well, it depends more on the way you work around with it, but that's already explained a million times by other people. Though, if you use both DLL's at their best, I think this DLL would win, but pretty close, though.
  • 0




2 user(s) are reading this topic

0 members, 2 guests, 0 anonymous users