Register for your free account! | Forgot your password?

Go Back   elitepvpers > Popular Games > Silkroad Online
You last visited: Today at 03:41

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Silkroad development tools in demand?

Discussion on Silkroad development tools in demand? within the Silkroad Online forum part of the Popular Games category.

View Poll Results: I would be most interested in...
Client based dev tools 27 18.24%
Clientless based dev tools 37 25.00%
Silkroad dev knowledge 84 56.76%
Voters: 148. You may not vote on this poll

Reply
 
Old 06/25/2009, 23:49   #16
 
axzelx's Avatar
 
elite*gold: 0
Join Date: Jun 2009
Posts: 2
Received Thanks: 0
hi master, nice articles, i was searching tutarials like that, and i will save them, try to understand that code stuff.
may you also add some finished projects codes for download ?
btw again thanks for articles.
axzelx is offline  
Old 06/28/2009, 04:22   #17
 
xxbrentonxx's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 277
Received Thanks: 103
Hey i know this is kind of very simple to do, but could you make a program which acts as a loader for sro and captures all packets for sro, including the handshake packets without having to have a lot of programs open or sifting through wireshark?

Also do you have anything left from edxEmu? Id like to have a look.

If your interested in helping newbie programmers make packet bots then i also have an idea.

If you look around the sro section most programmers are using autoit for keypress bots. So why not make a program using simple syntax which can send/recieve packets from sro and do stuff, kind of like a scriptable bot. You could make it AutoIT style syntax, but probably the easiest would be pascal based - its so **** easy to understand.

There is a simple pascal-based colour clicking program for Runescape and other browsers games called SCAR (**** Compared To Auto Rune - AutoRune was the first/last packet bot for rs before it was all patched, so developed made SCAR) I suggest you look it up.
xxbrentonxx is offline  
Old 06/28/2009, 05:54   #18

 
elite*gold: 260
Join Date: Aug 2008
Posts: 560
Received Thanks: 3,753
Quote:
Originally Posted by brent01 View Post
Hey i know this is kind of very simple to do, but could you make a program which acts as a loader for sro and captures all packets for sro, including the handshake packets without having to have a lot of programs open or sifting through wireshark?
Something like this was already done in the past and released (just not with source because it was part of a larger project), but I do plan on making a more simple version that is more inline with the guides that I've been writing.

Quote:
Also do you have anything left from edxEmu? Id like to have a look.
Nothing was published for that project. The basic code for it thought was released as part of my last release before I left, the ClientlessPrototype (which was god awful I mist admit now. So many problems with that code design and it was just horrible overall). I'll be rewriting pretty much all of my released network code from sr33, edx33, as well as that program later on.

There was only one thing special about edxEmu that was not even fully completed, but is something that I still have in my plans and it had to do with how it would be possible to prototype and design the server rapidly so you traded initial performance at the expense of being able to develop faster. Such designs are being used in another project I've not talked about that I finished at the end of 2008 (not related to sro directly).

Quote:
If your interested in helping newbie programmers make packet bots then i also have an idea.
Well, I've already tried this through my sr33/edx33 programs which came with full source as well as the first article on the Silkroad security design. The main problem is that the topic isn't simple so while I try my best to write guides that help people learn, I can only do so much before everyone else just had to try doing it on their own in order to succeed.

I do plan on writing a guide showing more detail how I came about my sr33/edx33 projects, but it's quite a bit of code and theory and actually making a bot is not something you can just write a guide on since there is so much to it. I could write bits and pieces of writing a bot using the client and packets, which I plan to get started on, but overall, I've already given everyone the tools they need to have done such a long time ago with my packet analyzer and injectors + all my code for that stuff.

Quote:
If you look around the sro section most programmers are using autoit for keypress bots. So why not make a program using simple syntax which can send/recieve packets from sro and do stuff, kind of like a scriptable bot. You could make it AutoIT style syntax, but probably the easiest would be pascal based - its so damn easy to understand.
This too is something I have thought about and planned for before I made my first return post here. The problem I saw with my previous programs was that it required C++ programming and understanding how to make DLLs and programming using a set API for plugins. I figured if I instead made everything script based, I would greatly increase the ease of use and be able to get more people interested and using the stuff I made rather than the extremely low turnout for my other programs.

However, rather than working on the tools and ideas you are mentioning, I've instead started writing the guides on Silkroad development because that was the poll option in my thread that seemed to generate the most interest, so the other things are on hold.

Thanks for the feedback though! It's appreicated.
pushedx is offline  
Old 06/28/2009, 08:48   #19
 
InvincibleNoOB's Avatar
 
elite*gold: 20
Join Date: Mar 2007
Posts: 4,277
Received Thanks: 2,990
I also can't believe the real Drew Benton appeared over here,for which I'm thankful.I like any of your tutorials,because you expand everything out of anything in several parts.

I'd love to read more tutorials on reversing from you!

One thing I'd like to know is the character speed calculation in silkroad.In B323 we get three speed values,but how do we use them?
InvincibleNoOB is offline  
Old 06/28/2009, 12:36   #20
 
elite*gold: 0
Join Date: Mar 2007
Posts: 77
Received Thanks: 111
nice to see you back drew!
and awesome work till now! really good written guides. cant wait to see more because evrything by now was very intresting.

there is something i'd like to know about silkroad: the terrain. or better: how it is stored.
there is something in the media.pk2 that tells the client where you can walk on and where a wall or tree is (well...i think it was the media.pk2 but it's been a while since i researched on this topic)
maybe you could cover this topic in one of the next guides?
would be great!

and again: awesome work!
hack0r89 is offline  
Old 06/29/2009, 02:20   #21

 
elite*gold: 260
Join Date: Aug 2008
Posts: 560
Received Thanks: 3,753
Quote:
Originally Posted by InvincibleNoOB View Post
One thing I'd like to know is the character speed calculation in silkroad.In B323 we get three speed values,but how do we use them?
The three speed values are the Walking Speed, Running Speed, and the Berserk Speed in that order. If you read the values as floats rather than DWORDs, you should see meaningful numbers.

For example my noob char's speeds are the default:
00 00 80 41 = 16.0f
00 00 48 42 = 50.0f
00 00 C8 42 = 100.0f

So here is example code showing the wrong and right ways to get the values:
Code:
#include <windows.h>
#include <stdio.h>

int main(int argc, char * argv[])
{
	BYTE walkSpeed[] = {0x00, 0x00, 0x80, 0x41};
	BYTE runSpeed[] = {0x00, 0x00, 0x48, 0x42};
	BYTE zerkSpeed[] = {0x00, 0x00, 0xC8, 0x42};

	DWORD dwWalkSpeed = *((LPDWORD)(walkSpeed));
	DWORD dwRunSpeed = *((LPDWORD)(runSpeed));
	DWORD dwZerkSpeed = *((LPDWORD)(zerkSpeed));

	float fWalkSpeed = *((float*)(walkSpeed));
	float fRunSpeed = *((float*)(runSpeed));
	float fZerkSpeed = *((float*)(zerkSpeed));

	// The values in hex
	printf("%X %X %X\n", dwWalkSpeed, dwRunSpeed, dwZerkSpeed);
	
	// Wrong, byte ordering is incorrect
	printf("%f %f %f\n", dwWalkSpeed, dwRunSpeed, dwZerkSpeed);

	// Right, byte ordering is correct due to the initial float type cast
	printf("%f %f %f\n", fWalkSpeed, fRunSpeed, fZerkSpeed);

	printf("\n\n");

	// Alternatively, we can perform a memcpy to float values

	float fWalkSpeed2 = 0;
	float fRunSpeed2 = 0;
	float fZerkSpeed2 = 0;

	memcpy(&fWalkSpeed2, &dwWalkSpeed, 4);
	memcpy(&fRunSpeed2, &dwRunSpeed, 4);
	memcpy(&fZerkSpeed2, &dwZerkSpeed, 4);

	// Right, byte order is correct
	printf("%f %f %f\n", fWalkSpeed2, fRunSpeed2, fZerkSpeed2);

	return 0;
}
Now, once you have the new values, comes the tricky part. The reason there are three speed values is because there are three player only moving states. The player can be in a walk moving state, a run moving state, or a zerk moving state. Based on what their current state is, that is the velocity that you use in order to calculate their position at any given time.

However, the velocity values are not enough because you need to know which direction the character is facing to come up with a movement vector. The orientation flag is 2 bytes for the character and comes in a few different packets based on what the player is doing. If the player uses the left and right arrow keys, the new direction the character is facing arrives in its own packet I believe.

If the player spawns in your view, the orientation is part of the spawn packet. Also, if the player spawns in your view, it has a flag if the player is already moving or not as well as the location it is going to.

I don't have a function or anything that models how Silkroad handles movements, but the basic theory is pretty simple. Trying to reimplement it yourself for an emu or clientless is rather tricky though and hence why I don't think anyone hsa published the algorithms for it (anyone really good at math could probably come up with it though.)

Let's say your character is currently facing 0 degrees, which I think is East/Right, but let's just make it that for the example. Assuming the current player state is Walk and that has a current speed value of 16.0f, we know the player moves 16 units for some time reference. What an accurate conversion is I don't know, but doing simple timing, it took about 13s to travel 16 units at that speed. That means it can travel about 1.23 units per sec at that rate.

So, if we start at (0, 0) and were moving with a rotation of 0 (to the right) at a velocity of 16.0f in sro units, we know each second we would be traveling 1.23 units further in game. So after 5 seconds we would be at (6.15, 0). After 10 seconds we would be at (12.3, 0).

That's the simple stuff for when moving in a straight line on one axis. However, most game movements are going to have both X and Y movements, so that's where the current rotation comes in. Using a unit circle, we can get a movement vector. If we were facing 45 degrees, north east let's say, then for each second that passes, we will be moving some factor of our speed in the X direction and Y direction.

In order to simulate movements ourselves outside of the client, we have to take all these things into consideration as well as run our simulation loop at the same frequency the client does (I don't know what it is). and we can then know the instantaneous position of any entity.

Things get slightly more complicated as you have to factor in when players are on a transport as the speed is now the transports speed. Likewise, you have to consider dismounting and mounting. You also have to take into account knockback skills or the phantom skill that allows a rapid change in position without the players velocity being taken into account.

It's kind of a big mess when considering all the things to factor in. That's why most programs just "cheat" at the estimate and use the movement packets position and do a coarse calculation of how long it should take to get here and delay that long.

I don't really know if you can make the problem any simpler than that though. I understand all the concepts of how it works, but I'm not really sure about accurately replicating the logic myself. Due to all that work, it might just be good to "estimate" where the player might be and go from there.

That's just my take on the issue so far, I've only recently messed with pulling the clients final position data for any entity from memory, but not so much trying to calculate it myself outside of the client.

Quote:
Originally Posted by hack0r89 View Post
there is something i'd like to know about silkroad: the terrain. or better: how it is stored.
there is something in the media.pk2 that tells the client where you can walk on and where a wall or tree is (well...i think it was the media.pk2 but it's been a while since i researched on this topic)
maybe you could cover this topic in one of the next guides?
I've had some limited experience with the game's map files. However, I don't know enough to write a guide on it telling anything too useful at this time. I might look again into the files later on but for now I still have a bit of learning to do before being able to release anything useful in that regards. I only know of a few developers that actually understand it all but as far as I know, that information was never released.

I know there is some useful information regarding the models posted on SRF by cruor. That information is important because the last I remember, I found the location of some obstacles, but had no idea of the size or direction they were facing. But anyways, I'll have to check that out later sometime.
pushedx is offline  
Thanks
4 Users
Old 07/14/2009, 21:01   #22
 
elite*gold: 0
Join Date: Nov 2008
Posts: 24
Received Thanks: 4
Talking about edxEmu what do you think about doing the same with Python?
Is it going to run at good speed?
foxtrotxx is offline  
Old 07/17/2009, 09:51   #23

 
elite*gold: 260
Join Date: Aug 2008
Posts: 560
Received Thanks: 3,753
Quote:
Originally Posted by foxtrotxx View Post
Talking about edxEmu what do you think about doing the same with Python?
Is it going to run at good speed?
Well, Eve is the game that is always referenced to Stackless Python as being a full blown MMO possible in the language, so it's certainly possible. What people fail to understand though is, Eve is one large game made me a team of professionals who know the language well enough to pull off such a task. just because one group of talented people can do something, doesn't make the task generalizable for everyone else.

My opinion though, would be that if you had strong python skills and understood the language and how it works, then sure, you could make an emulator in it and assuming you know how to do it right, it should work out beautifully. However, I don't have those types of skills, so I myself would not consider starting project using Python.

It's not even a matter of "speed" when you talk about MMOs, there's a lot of things to factor in. MMOs don't work like a game like diablo 2 would run, where you have 8 players on one unique map and that's it. MMOs are really complex and a game like Silkroad is designed to run on multiple systems, not one. If you tried to run on one system and serve 1000s of connections, any language you are going to use is going to be "slow" because of the nature of the problem at hand; it needs to be parallelized.

Making an emulator is more in line with a programming project more so than just a reverse engineering project. Yes, you do need to reverse engineer a lot of stuff to be able to make an emulator and you do need a good understanding of how the client works, but that's not enough. There are a lot of programming aspects to the task that if you don't have strong programming skills and are familiar with game programming, then the task is going to be a lot harder than it should be.

I believe the trick to success does not lie in the reversing side, but the programming side. That's why I stopped the edxEmu project and switched back to doing more client based work rather than the packet work I was doing before I left. It's also why I've not joined any emu teams in the past (sremu didn't really count since I didn't do anything with them really except share some code).

My theory is that if you can design Silkroad from a higher level without taking into consideration any of the packet structure or the obvious client-server interactions you see in game, and just do it from a game programming perspective, then you will be able to accomplish a lot more and have a higher chance of success as compared to everyone else who takes the same approach of simply reversing packets and emulating them. The game is more than just the packets it uses to communicate with and until people really understand that, we aren't going to see something that just works and is comparable to a private server like ecsro, sunworld, sjsro, mysro, etc....

A lot of people point out to me other games that have private servers coded and what not, but those games aren't Silkroad and Silkroad isn't those games. If you look at Wow, there are millions of players and a huge fan base compromised of a lot of programmers and reversers. Blizzard has a large following so there is a lot of expertise in the area. Joymax has nothing of a following and Silkroad is so much smaller.

So, I'll eventually have my project going when I think I'm ready for it, but right now I know I'm not. I'm still missing a few important pieces of the puzzle, and that's why I'm spending more time with the client understanding how things work first that I didn't understand before.
pushedx is offline  
Old 08/12/2009, 01:30   #24
 
elite*gold: 0
Join Date: May 2008
Posts: 259
Received Thanks: 94
u dont have to write guides. all of your posts are already a guide lol xD
soadmania is offline  
Reply


Similar Threads Similar Threads
[Guide] Silkroad Development Series
08/02/2011 - SRO Coding Corner - 22 Replies
In order to help organize the guides I release, I am making this additional thread to point to all of the individual guides so everything can be accessed from one convenient location. As more guides are released I will edit this thread to link to them. Please leave guide specific comments in the respective guide. Thank you and enjoy. :) Silkroad Development Series: 1. Locating Silkroad’s Direct3D Objects 2. Creating a Simple Loader with Injected DLL for Silkroad 3. Integrating...
.EDF Editor/ rfonline development tools
05/07/2008 - RF Online - 2 Replies
does anyone know where i could find a .edf editor if so either post it here or pm it to me
On demand.
06/20/2006 - Conquer Online 2 - 2 Replies
I really dont know how to do all the programming involved with making hacks/bots, but I can still provide you talented people with ideas. 1: Something that would be of much use to alt lvlers, clan helpers, and friends is a multi-stigger. By multi-stigger, I mean a program that one could use in TG to give stigma to all surrounding players instead of just one while they are AFK. 2: Epvp Autobus- A program that uses macros to take your player to other zones automatically (ex: get out of...



All times are GMT +2. The time now is 03:41.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.