• Do not use Discord to host any images you post, these links expire quickly! You can learn how to add images to your posts here.
  • Reminder: AI-generated content is not allowed on the forums per the Rules and Regulations. Please contact us if you have any questions!
Voltseon's Multiplayer Solution

v21.1 Voltseon's Multiplayer Solution V2.1.0

This resource pertains to version 21.1 of Pokémon Essentials.
Pokémon Essentials Version
v21.1 ✅

Voltseon's Multiplayer Solution
An (almost) plug-n-play solution for making multiplayer Pokemon Essentials games. (now with Plug-N-Play version!!)

IjabuT8.png





What is this?


Voltseon's Multiplayer Solution or VMS for short is a solution for making multiplayer Pokemon Essentials games. It is a plugin that allows you to connect to a server and play with other people. It features both an Integrated server (default) and External Server support (enabled by a config), with a server that you can host yourself, or you can ship it with your game to let players host their own servers (not recommended since the Integrated server exists). The server is also written in Ruby and uses TCP or UDP (configurable) to connect players with a dedicated server model. It is designed to be as easy to use as possible, and it is almost plug-n-play (you still have to change some configurations for yourself and host the server if using an External Server).




What are the requirements?


In order to run the external server you will need some kind of server or cloud hosting. But for testing purposes you can also host the server locally and connect that way. A Ruby installation is provided with the Server files, together with a start script for both Windows and Linux. For the plugin all you really need is to have the correct version of Pokemon Essentials installed and a compatible version of rainefallUtils imported.




How do I use it?


All steps and other documentation about the plugin can be found in the section below. If you have any questions or issues you can ask them through the contact information on the last page.




Where can I download it?


The download link is in the top right corner of the thread at 'Go to download'.




Features


Currently the plugin is still a work in progress and more features are to be added in the future. To see what features are coming and what the current progress is, you can check out the todo list that is referenced below.

All currently available features are:

Co-op exploration
Co-op exploration seen with VMS


Interactions
Interactions seen with VMS


Trading
Trading seen with VMS


Synced real-time battles
Synced real-time battles seen with VMS


Town map visibility
Town map visibility seen with VMS


Note: The plugin is still in development and some features may not work flawlessly yet.
All footage shown in the video was recorded on a local server with my (slow) laptop.




Documentation


A fully fleshed out document containing a full guide and information surrouding the plugin can be found over here. Easier and up to date installation instructions can also be found on the Github page.




User Functions



While the Integrated Server does not require any setup on the project, it might require Port Forwarding or a VPN to work through WAN, it is 100% Plug-N-Play for LAN play, this can be frequently ignored since WAN is supposed to be ran through the External Server

This plugin goes haywires if the same save file connects to the same cluster simultaneously, it might work, it might completely break, i recommend using separate save files for testing

If you get a "Battle rule no bag does not exist" error, either install the Deluxe Battle Kit or go into VMS_Battle_Handler and delete lines 389-392

VMS.join(CLUSTER_ID) - Connects to a server with the given cluster id. The id should be a number between 10000 and 99999, meaning any 5-digit number.

VMS.leave(SHOW_MESSAGE) - Disconnects from the server. If SHOW_MESSAGE is true, it will show a message saying you disconnected, this is true by default and is optional.





VMS.get_variable(id) - Returns the online (shared) variable from the server with this id. If the variable doesn't exist, it will return nil.

VMS.set_variable(id, value) - Sets the online (shared) variable of the server with this id to the given value. If the variable doesn't exist yet, it will create it.





VMS.ping - This returns the ping between the player and the server in seconds.

VMS.sync_seed - This will try to sync the seed used for the psuedo-random number generator. This is useful for syncing random events like wild encounters for all players.

VMS.see_party(id) - This will open up a menu showing the party of the player with the given id. This is useful for testing purposes.

VMS.teleport_to(id) - This will teleport the player to the player with the given id. This is useful for testing purposes.





VMS.is_connected? - This returns true or false depending on if the player is connected to a server or not.

VMS.get_self - This returns the player object of the player from the server.

VMS.get_player(id) - This returns the player object of the player with the given id from the server.

VMS.get_players - This returns an array of all the player objects from the server (including the player).

VMS.get_player_count - This returns the amount of players connected to the server.

VMS.get_cluster_id - This returns the cluster id that the player is currently connected to.





VMS.interaction_possible? - This returns true or false depending on if other players can interact with the player or not.

VMS.get_interaction_time - This returns the amount of frames used in a loop to wait during an interaction before breaking out of it.

VMS.hash_pokemon(pokemon) - This returns a hash of the given pokemon. This is used to send pokemon over the network.

VMS.dehash_pokemon(hash) - This returns a pokemon from the given hash. This is used to receive pokemon over the network.

VMS.clean_up_basic_array(array) - This returns a cleaned up version of the given array. This is used to send arrays over the network.

VMS.scene_update - This method calls a simple scene update to make it seem as if the game is running normally. This is used to keep the game running while waiting for a response from the server.

VMS.event_deletion_possible?(player) - This method checks if the given player's event can be deleted or not.









Todo List


If you are curious about future additions or current progress with the plugin, you can check out the public trello board.



Credits
Plugin & Server by: @Voltseon
Testing by: @KennyCatches and @ENLS
rainefallUtils by: @rainefall
Author
Voltseon
Downloads
1,932
Views
13,435
First release
Last update

Ratings

5.00 star(s) 5 ratings

More resources from Voltseon

Latest updates

  1. 2.1.0

    Changelog: Unified both versions of the plugin, now the plugin supports both the Integrated...
  2. HOTFIX 2.0.1

    Changelog: Fixed crash on build due to missing VMS::HOST on the config file for the Integrated...
  3. Accidentally uploaded a build from yesterday

    i just realized i uploaded a broken build from yesterday, i'm already fixing this issue

Latest reviews

Genuinely very plug and play. Simple to do once you grab the ruby nest-egg for Pterodactyl and apply the appropriate start-up parameters.

However, battles do not appear to be fully working in the release version I got as me and my friend encountered issues.
Do not let this err to the side of unwant however, as I love this so much. Thank you Voltseon.
Voltseon
Voltseon
Just updated the plugin with various battle bugfixes!
Back
Top