Search the Community
Showing results for tags 'client/server'.
Found 1 result
Introduction I'm planning to write a guide to Ragnarok Online development that begins with the big picture of server development, and transition into more detail through a series of carefully selected newbie questions to guide our path. I'll be providing extended reading materials (other people's guides, relevant tools) relevant to the current topic. Table of Contents How is this guide different Expectations Learning RO development the best way Who are we and what do we know? What do we see in games? High-level overview of Games Mid-level overview of Hercules How is this guide different? The guide will read less like a technical document that tells you "what to do". It will read more like a novel that walks through the questions a newbie would ask, just like when a newbie is on an adventure and exploring the unknown. So don't be afraid of the unknown, or the difficult challenges ahead. That's where we're going (there's more EXP there), and we'll find treasure and grow stronger that way! Expectations This guide works with the following assumptions: The target audience is a thirteen year old who has no computer science background at all (Or at least, the guide will explain things very simply to make sure even thirteen year olds could do it). Software development terminologies will be given two things: (a) an Explain Like I'm Five years old explanation; and (b) links for deeper reading. The target audience has never coded, or scripted before. The target audience has played other games. Preferably online games and RPGs such as World of Warcraft, DotA 2. The other games will be examples I will use when explaining certain topics. Learning RO development the best way Here are a few suggestions to make your RO development experience less frustrating and much, much more pleasant: Have an interest in playing RO and wanting to have an RO of your own. Have a little bit of patience and diligence to read about how things work. Have commitment to keep your eyes on what you want to accomplish. Cherish every victory no matter how small (e.g. make this npc talk, make this item give +99 LUK instead of +1 LUK). Every victory is a victory. Be open to experiencing things that you do not know. Have the humility to acknowledge what you cannot do and what you do not know, and to ask for help when you are lost. Have the humility, respectful reverence to the forum leaders who spare some of their valuable time not only to educate and teach you what they know, but also who contribute to building RO servers for free (open source development). Who are we and what do we know? We begin with what all gamers know: we like to play games. What are games that you are actually familiar with? I know I've played RO back in 2003. I played counter strike a decade ago, I tried out Gunbound and Runescape, I played Adventure Quest (Flash game). I even enjoyed writing in Gaia Online, doing role-play in forum threads. During my stay in the university (2011-2018), I played loads of DotA 2 and it showed me what competitive/professional gaming looked like, showing me the depth of gaming that I haven't seen before. I played shooter games like Overwatch, PUBG, Destiny 2, and different kinds of games from Steam like Project Zomboid and Stardew Valley. The reason why I bring up different kinds of games is because this is our shared or common knowledge. It is what unites you and me, two strangers in the internet. Our common love for playing RO and playing games in general. So now that you've gotten to know me a little better, we now ask the question: How does a person transition from a gamer into a game developer? What do we see in games? Scenario It's 8PM and you are at your house. You just finished having dinner, and are now about to start playing in your favorite RO private server. You go to your computer, you open up the game's patcher. You find some updates. "New game content!" you think to yourself. You go to the website to read about the changes: It might be changes to the items, buffs to your favorite RO class, or changes to the map, or new NPCs and events and dungeons! Your RO finishes updating, and your game begins. What happened? We begin our journey into game and server development with terminologies. Terminologies? Why do I have to memorize these things? We have to know what we call things to make sure we understand each other. If you don't understand me, you will not learn. If you get confused, you will get lost. If you do not know the terminology for the things you are having a problem with, you won't know how to say what your problem is. Game Website - This is the website where you go to learn how to install a private RO server, read about game changes and news, and interact with other people in the community through forums. Patcher - This is the tool that you use to make sure you're updated. Otherwise, you'll encounter outdated game information, problems, and worst case scenario: crashes. Game Client - This is the runnable program that you are in when playing the game. For example TalonRO.exe, or AeRO.exe. From the perspective of a gamer, these are all the areas where they interact with a game provider: They use the website to download the installer. The patcher updates the game. They run the game to play. High-level overview of Games What is a client? Simply put, a client is an application or a program that communicates with a remote system called a server. These terminologies are used when under a system that follows a client-server architecture. Alright, so what is a client and a server architecture? Imagine the following: You go to a restaurant to eat dinner. When you sit down, the waiter comes to you. The waiter is who you talk to and interact with so that the kitchen knows what food to cook for you. The waiter who takes your order and makes sure you are having a good time is the client. He is the interface between you and the kitchen. The kitchen which deals with the inventory of goods and making sure that chefs are doing the processes to produce food is the server. You can have multiple clients (e.g. TalonRO.exe distributed to different players across the world) that connect to one server. That in a nutshell is a client and server architecture. What does a client-to-server interaction look like? The illustration below is a very simplified illustration of a client-server architecture. This means that a client The server (on the left) and the client (on the right) communicate with each other. That is how the game works. Green - When it comes to accessing a game website (which is actually a web server) requires a web client or web browser like Google Chrome or Mozilla Firefox. Orange - When your patcher is running, it asks the question "Are there any new updates?" specifically to a patch server, which has a master list of patches. It's like how a customer in a restaurant asks "What can I order?" and the client tells them "This is what the kitchen can cook". Blue - When your game connects to the server, it not only can ask questions (e.g. "What is my player's level and stats?") it can also tell the server what to do (e.g. "Move my player to prontera X and Y location). The client interfaces between you (the player) and the server. That's the high-level overview of how games work. It's a combination or orchestration of fast-paced conversations between people (players on clients) and machines (servers that allow players to play together). There are machines in between to facilitate all of these complicated processes. Keywords: Port forwarding One example of a machine that facilitates people playing together is Hercules, or rAthena. These are game servers that follows a specific set of rules or instructions that dictate what is expected when RO clients connect to RO servers. What do you mean by "follows a specific set of rules or instructions"? A protocol is a set of specific rules or instructions. Having a set of specific rules or instructions makes sure that we follow the same rules. For example, if we play the game Rock Paper Scissors (roshambo, bato bato piks), we need to know the following rules: You're supposed to make a choice of either Rock or Paper or Scissors. You only choose one. You're supposed to make a choice after counting 1, 2, and 3. Rock is represented as a closed fist. Scissors is represented with two fingers (index and middle) extended. Paper is represented with five fingers extended. Rock beats Scissors. Paper beats Rock. Scissors beats Paper. When we learn about the rules and follow them, we can play Rock Paper Scissors. Two players can then follow the rules, understand each other, and agree as to who won the game. If players did not follow the rules ("1, 2, 3 - Suddenly, a player shows Fire which he says beats Rock Paper and Scissors!") then people would be confused, feel cheated, and things will not work. There will be misunderstandings. When it comes to game servers, we need a set of rules to follow as well. The protocol is the set of rules for how the server and the client will communicate. If your game server and your client does not follow the same protocol, they will have misunderstandings and they will not work. An example of protocols in RO development is the use of the following port values: 5121, 6121, 6900. If you don't have a client that talks to the server at the expected port, your server will be confused and will not respond to any requests. An example of protocol is the agreement on which packet version to use. If you use the wrong packet version, your server will not understand the packets being sent by your client. Relevant Keywords: Packets, PACKETVER, Compiling, Ports We talked about an example of machines that facilitate processes to enable multiple people to play together (MMORPG). An example of this is Hercules, which we look into more detail below in the following post.