Search Unity

  1. Unity 2017.2 beta is now available for download.
    Dismiss Notice
  2. Unity 2017.1 is now released.
    Dismiss Notice
  3. Introducing the Unity Essentials Packs! Find out more.
    Dismiss Notice
  4. Check out all the fixes for 5.6 on the patch releases page.
    Dismiss Notice
  5. Help us improve the editor usability and artist workflows. Join our discussion to provide your feedback.
    Dismiss Notice

DarkRift Plugin Sharing Area!

Discussion in 'Multiplayer Networking' started by Jamster, Apr 12, 2015.

  1. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    This is a place to put any plugins for DarkRift Networking so that others can find them. I'll try to keep a list up here so that they can be easily found :)

    Submission Guidelines
    If you're adding a plugin to the list here please make sure you try and do these:
    1. Keep it as generic as possible. If your plugin is only ever going to be useful to your game then others are unlikely to need it. Try and make sure that as many different people can use it as possble.
    2. Describe it! Make sure people know what your plugin does! Try to be fairly specific but keep it short, tell people how your plugin will benefit them!
    3. Include instructions. No one likes to be in the dark so make sure that your plugin is well documented with how to set it up, how to use it, what stuff does and what all the public functions do!
    4. Make it flexible. Make sure that people can use it in as many games as possible, that means making sure tags and subjects can be easily adjusted and that it isn't too specialised.
    Plugins
    Database Connectors
    Other

    Thank you to everyone that publishes their plugins,
    Jamie
     
    Last edited: May 6, 2015
    muzz155 and jpthek9 like this.
  2. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    MySQL Connector

    This is the official connector for MySQL databases. It allows your plugins and games to communicate with a MySQL server using the builtin database integration in DarkRift.

    Requires a MySQL server running somewhere and DarkRift V1.2

    GitHub Link
     
    Last edited: Nov 22, 2015
  3. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Login Plugin

    This is a basic login plugin for DarkRift, it allows players to create accounts, login and logout. There's a simple client interface for your games that handles all the calls to the server and hosts events for your games to use. This isn't 100% secure as it's more of a starting point/demonstration but it's probably suitable for a lot of games. :)

    Requires a database plugin and DarkRift V1.2

    GitHub Link
     
    Last edited: Nov 22, 2015
    jpthek9 likes this.
  4. jpthek9

    jpthek9

    Joined:
    Nov 28, 2013
    Posts:
    943
    This one is set up for lockstep games. It is kind of specific but if you're making a game that needs aggregated data (i.e. server distributing data 10 times a second), this will work. It receives packets from all players then distributes it to everyone. Read more about it here, how to implement the client-side part. Note that in a lockstep game using a server, confirmation is not needed. Just don't advance a frame if there is no packet for the frame.

    Tags
    0: Reserved; later on will be used for logins, data retrieval, etc. (Note: Not implemented yet)
    1: Room data; after a player joins a room, data sent with tag 1 will be distributed throughout the room. The subject must be the room number for the server to recognize which room the player is in (I'll probably make this more efficient later on and store the player's corresponding room on the server rather than have the player send the room's ID).
    2: Meta; with subject 0 and object a byte defining how many players are in the room, the server tries to find a room. If no available rooms are found, create a new room with the maximum players defined by the object.

    Once a room is full, it will start sending out packets for every frame, starting with frame 0, with the subject as the room number and tag of 1 (Room Data). The first 4 bytes in the object (which is a byte[]) is an int32 representing the frame count. All data after that is any data you distributed from clients. It's recommended to store the room number in a variable on step 0 so you can send messages back to the correct room.

    Download Link: https://www.dropbox.com/s/rddsrr3kw8mvdob/Lockstep.zip?dl=0

    Right now I'm focusing on the local side of the game but I'm definitely going to keep working on this plugin later on.
     
  5. GraphXCreations

    GraphXCreations

    Joined:
    Jul 6, 2014
    Posts:
    121
    Awesome, thank you,

    one plugin that can be really useful for most games can be a db manager plugin.
    something that will ease the pain to allow persistent data to the game.

    since you already have the db connection plugin and login plugin the persistent
    dbmanager can be created genericly

    something as easy as ie:
    Saving players info
    dbManager.writetoDb(dbName, dbTable, playerId, arg1,arg2,arg3........);


    or loading player info
    dbManager.loadfromDb(dbName, dbTable, playerId, arg1,arg2,arg3........);

    or updating etc.......

    now this can come really handy and can be use pretty much to any games


    BTW
    @Jamster Istill havent hear from you since when i pm you with my info to join the beta testers group.
    let me know.
    thanks
     
    Last edited: Apr 12, 2015
  6. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Hey sorry about that,
    Can you send the email again? I emailed someone a beta package but maybe that wasn't you :)

    Jamie
     
  7. muzz155

    muzz155

    Joined:
    Jul 27, 2014
    Posts:
    8
    Dark Rift Essentials Plugin 1.1
    Essentials improves functionality of the server console by adding very important commands that are very useful when developing games like "help" which lists all the commands including others from different plugins. It also offers "findip" which allows you find your public IP to allow others to connect. The list of rest of the commands and up coming features are included in the download
    For more information please check out my thread here.

    Download link:
    Essentials 1.1
     
    Last edited: May 6, 2015
  8. Casper_Stougaard

    Casper_Stougaard

    Joined:
    Jul 18, 2013
    Posts:
    60
    Any chance you can fix the download link? :)
     
  9. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    I'm trying to contact the author for you! I'll hopefully get you a different link! :)
     
  10. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Their website's back online now :)
     
  11. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    MySqlConnector and LoginPlugin now open source!

    Yup! I finally got round to putting them on GitHub (and also learning how to use GitHub at the same time!) so everyone can now add their own upgrades and bugfixes to them :) Go for it!
     
  12. TobiasKullblikk

    TobiasKullblikk

    Joined:
    Sep 26, 2014
    Posts:
    5
  13. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
  14. GD.Darren

    GD.Darren

    Joined:
    Jan 12, 2013
    Posts:
    53
    Hi is this still being developed on? And I'm interested in the lockstep plugin too if someone can give me a link/message, thanks in advance.
     
  15. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    DarkRift is still maintained yup! Plus DarkRift 2 is also on the way :)

    I haven't seen JP around recently, the lockstep framework is included in his DPhysics asset store pack I think and he's still got a Github for it here but I don't know how much that version is integrated with DarkRift.
     
  16. jpthek9

    jpthek9

    Joined:
    Nov 28, 2013
    Posts:
    943
    Ah, yeah. Look for DarkRiftNetworkHelper on github. It's maintained for the new DarkRift as well as for LS Framework updates.
     
    Jamster likes this.
  17. KHRZ

    KHRZ

    Joined:
    Mar 2, 2013
    Posts:
    54
    I tried the MySQL plugin but I get an error:


    [Error] Plugin C:\Users\Knut\Documents\DarkRiftServer - Free\Plugins\MySQLConnector.dll failed to load:
    System.BadImageFormatException: Could not load file or assembly 'file:///C:\Users\name\Documents\DarkRiftServer - Free\Plugins\MySQLConnector.dll' or one of its dependencies. An attempt was made to load a program with an incorrect format.
    File name: 'file:///C:\Users\Knut\Documents\DarkRiftServer - Free\Plugins\MySQLConnector.dll'
    at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
    at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
    at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
    at System.Reflection.Assembly.LoadFrom(String assemblyFile)
    at DarkRift.PluginManager.LoadPluginsFromFolder()

    WRN: Assembly binding logging is turned OFF.
    To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
    Note: There is some performance penalty associated with assembly bind failure logging.
    To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].

    I put the 4 dlls it requires in the Plugins/lib folder. I also tried the root lib folder.
     
  18. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Sounds like it's to do with how it was compiled, make sure you compile for Any CPU rather than x86 or x64 :)
     
  19. KHRZ

    KHRZ

    Joined:
    Mar 2, 2013
    Posts:
    54
    OK the issue was I needed to build it. I just tried the one prebuilt:)

    Edit: Now I am just having issue with connecting from DarkRift to MySQL... I have tested creating some DBs/users, and the connection works in MySQL workbench, but always get authentication error in DarkRift. From what I've found it seems I must grant some privilege to connect? But I have the % as location to signal anywhere is fine.

    Unhandled Exception: DarkRift.DatabaseException: Authentication to host 'localhost' for user 'root' using method 'mysql_native_password' failed with message: Access denied for user 'root'@'localhost' (using password: YES) ---> MySql.Data.MySqlClient.MySqlException: Authentication to host 'localhost' for user 'root' using method 'mysql_native_password' failed with message: Access denied for user 'root'@'localhost' (using password: YES) ---> MySql.Data.MySqlClient.MySqlException: Access denied for user 'root'@'localhost' (using password: YES)
    at MySql.Data.MySqlClient.MySqlStream.ReadPacket()
    at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ReadPacket()
    --- End of inner exception stack trace ---
    at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.AuthenticationFailed(Exception ex)
    at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ReadPacket()
    at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.Authenticate(Boolean reset)
    at MySql.Data.MySqlClient.NativeDriver.Open()
    at MySql.Data.MySqlClient.Driver.Open()
    at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings)
    at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
    at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
    at MySql.Data.MySqlClient.MySqlPool.GetConnection()
    at MySql.Data.MySqlClient.MySqlConnection.Open()
    at MySQLConnector.Connector.ExecuteNonQuery(String query, QueryParameter[] parameters)
    --- End of inner exception stack trace ---
    at MySQLConnector.Connector.ExecuteNonQuery(String query, QueryParameter[] parameters)
    at LoginPlugin.LoginPlugin.AddUserToDatabase(String username, String password)
    at DarkRift.Interface.ExecuteCommand(String input)
    at DarkRift.Program.Main(String[] args)
     
    Last edited: Jun 16, 2016
  20. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Ah... if that's the case it's my fault!
     
  21. KHRZ

    KHRZ

    Joined:
    Mar 2, 2013
    Posts:
    54
    Hmmmm, looks like the authentication issue was due to my password being converted to lowercase when read from the config file.:p
     
  22. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Sorry, I didn't see you edit!

    Ah... ConfigReader will make any strings lower case... I hadn't noticed thought of that before...
     
  23. RichardM

    RichardM

    Joined:
    Apr 4, 2013
    Posts:
    50
    I have a "beginner" question.

    I have the SQLConnector working on my server. How do I access it from another plugin running on the server? I tried adding it as a reference in the project but that didn't work. I know this is something simple.

    Thanks in advance

    Richard M.
     
  24. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Off the top of my head, it should automatically be loaded under DarkRiftServer.database (or something along those lines!)
     
  25. RichardM

    RichardM

    Joined:
    Apr 4, 2013
    Posts:
    50
    Another "beginner" question. Is it possible to get access to the methods and variables in another plugin?

    For instance say I have some commands defied in Plugin XYZ and I want those same variables/methods to be available in ABC can that be done? If so how?

    Thanks in advance

    Richard M.
     
  26. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    PluginManager.plugins["<name>"].YourMethod() :)
     
  27. RichardM

    RichardM

    Joined:
    Apr 4, 2013
    Posts:
    50
    I am lost. I have that following in my code.

    Code (CSharp):
    1. Query = "SELECT CharacterGUID, CharacterLocation from Game.Characters where UserID ='1234567';"
    2.  
    3. DatabaseRow[] Results = DarkRiftServer.database.ExecuteQuery (Query);
    4.  
    5. Interface.Log ("Records = " + Results.Length);

    I see that it works because Interface.log is showing "Record = 1"

    But how do I get to the data that has been returned? So that I can set "Location = returned location"

    Thanks
    Richard M.
     
  28. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    It's just an array of dictionaries where each row of the array is a row in your database. As an example, to access the first row's "ID" column you'd do
    Code (csharp):
    1. results[0]["ID"]
     
  29. RichardM

    RichardM

    Joined:
    Apr 4, 2013
    Posts:
    50
    Thanks Jamie now I get it...

    Richard M.
     
    Last edited: Sep 1, 2016
  30. RichardM

    RichardM

    Joined:
    Apr 4, 2013
    Posts:
    50
    Code from my ServerCommands Plugin. It is just a public bool that can be toggled (like "log" in the tutorial).

    Code (CSharp):
    1. public bool getShowData(){
    2.             return ShowData;
    3.         }
    Here is the code from another of my plugins.
    Code (CSharp):
    1. ShowData = PluginManager.plugins ["ServerCommands"].getShowData ();
    there is no getshow after I put in the "." but I put it in anyway to try it. All I see after get is "GetHashCode", "GetSubdirrectory" and "GetType", When I added the getShowData I just get
    I have tried changing it to
    ["ServerCommands"].getShowData;
    ["ServerCommands.getShowData ()"]
    ["ServerCommands.getShowData"]
    ["<ServerCommands>"].getShowData;


    and a few other combinations ... I did add it as a reference but that did nothing. What did I forget this time:oops:

    Richard M.
     
  31. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    PluginManager.plugins ["ServerCommands"] will return a Plugin object which doesn't have the method getShowData only ServerCommands has that, therefore you need to cast it as such
    Code (csharp):
    1. ServerCommands serverCommands = PluginManager.plugins ["ServerCommands"] as ServerCommands
    2.  
    3. serverCommands.getShowData()
     
  32. Megaphone_

    Megaphone_

    Joined:
    Mar 23, 2016
    Posts:
    41
    Hello DarkRifters! Im nearly finished in implementing authoritative server side movement with Dark Rift embedded in a unity instance. I am wondering if anyone else has accomplished this?

    The reason I am asking is because I want to release my plugin in a bare bones form with the basic unity standard third person controller but I want to make sure im handling everything in an efficient manner.

    Just curious if you all send messages for each individual move action or if any of you have gone with the method of the server sending a "snapshot" of all of the current active move actions (i am using the first described method right now but I feel like the latter will be tricky to implement but much more efficient).

    Edit - Spelling cause its 445am and im tired
     
    DarkFlameX1 likes this.
  33. z_orochii

    z_orochii

    Joined:
    Mar 8, 2013
    Posts:
    4
    Hi! I'm just recently starting with multiplayer stuff in Unity (well maybe around 1-2 weeks), following tutorials and such, and stumbled upon DarkRift and actually think it's pretty cool. Right now I'm just experimenting and stuff (doing MMOs is the worst thing you can do all by yourself).
    Now the thing is, I've been having some problems with setting up the server to connect to MySQL by using the plugin, since the server I wanted to use is behind SSH. Didn't want to, I'm stubborn as hell maybe, but since I wanted to move on with experimentation had to do it the easy way and actually install MySQL on my PC and localhost thing.

    I've been reading that C# MySQL implementation lacks some of that, connecting through SSH, though I read too that there are some external libraries around (dunno if they're finished) that do it for you. Because I've been 4 hours trying to open a SSH tunnel and accomplished nothing heh (I was actually scared of breaking my webpage on the process). Did open some but didn't seemed to work, unlike MySQL workbench which works well. Anyway.

    Question is. Is there some interest at developing a SSH enabled version of the MySQL Connector plugin? Is it a bad idea? What would it need to be done? (if I can help with something... I could at least try).

    Thanks again for this.
     
  34. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Hey! Glad you like DarkRift!

    There's no plans to implement the MySQL connector to work over SSH because unfortunately it's going to be obsolete with DarkRift 2!

    I've not tried tunnelling with SSH (I didn't actually know you could do it!) so I'm afraid I'm probably not much help on that though...

    Jamie
     
  35. z_orochii

    z_orochii

    Joined:
    Mar 8, 2013
    Posts:
    4
    Well that's sad. Hope DR2 has SSH integration then :D. Wouldn't mind about making the change. Actually will embrace it

    Speaking of DR2... I know DR2 is still in development, but how different are things going to be? Like, if I continue learning with DR1, will some of that help me out with DR2? Like, the workflow and stuff, the static API vs multi-connections and all that for example.

    Anyway keep up the good work!
     
  36. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    I'm still not sure about databasing in DarkRift 2, there is support for saving plugin settings but I think I will leave larger databasing up to you. Databases are a big topic and a wrapper will never cover everything!

    Things aren't different in terms of how things work, it's mainly just API changes. Tag-Subject messages are still used so if you design your game around those they'll still be applicable! I would definitely recommend learning DarkRift 1 still :)

    Jamie
     
    z_orochii likes this.
  37. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    487
    I don't think I'm installing the SQL Connector plugin correctly for the embedded server. What is the typeof for the forceLoadPlugins? Is that step even necessary?
     
  38. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Sorry for the delayed response, you absolutely need the typeof. What's the problem with the installation?
     
  39. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    487
    I don't know what typeof it is. Not really even sure how to work with the connector even if I did get the typeof
     
  40. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    typeof takes a class and returns the associated Type object for that class which DarkRift needs to be able to instantiate your plugin or the connector.

    Have a look at the Database class in the reference manual and that should give you an idea of what you need to call, you'll have access to the connector through the DarkRiftServer.database shortcut once it's loaded :)
     
  41. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    487
    I still don't quite understand how to get the plugin loaded. The only class I see associated with the connector plugin is Connector.cs, but I can't get it to be listed. Do I need to write my own class that uses the plugin?
     
  42. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    In Server.cs you should just have to change the line
    Code (csharp):
    1. Type[] forceLoadPlugins = new Type[0];
    to
    Code (csharp):
    1. Type[] forceLoadPlugins = new Type[] {typeof(MySQLConnector.Connector)};
    And it should work...
    If it doesn't then there's an issue :/
     
  43. Vedrit

    Vedrit

    Joined:
    Feb 8, 2013
    Posts:
    487
    Alright, I think I've got it now. For some reason, MySQLConnector wasn't showing in the autocomplete, and I had to make Connector a public class.
    But this brings me to another problem I've been having, though not specifically with DarkRift or any plugin. Certain dll's (MySQL.Data and System.Data, in this case) don't seem to...agree with Unity. If the dll's are in any folder except the Assets folder, the editor won't recognize them and keeps throwing errors about how a there's an assembly reference missing. Putting the MySQL.Data dll in the Assets folder solves it's issue, but if I do the same for System.Data, then the reference in Visual Studio is broken whenever scripts are reimported, and I have to manually re-add the reference.
    I don't suppose you know what might be going on there?
     
  44. Megaphone_

    Megaphone_

    Joined:
    Mar 23, 2016
    Posts:
    41
    You need to use the non subset version to get rid of that, and the System.Data you should use the one bundled with unity in the main unity directory. Also put all .dll 's in Plugins folder =)
     
    Jamster likes this.
  45. DarkFlameX1

    DarkFlameX1

    Joined:
    Mar 14, 2015
    Posts:
    13
    Hey, Did you ever finish or release your plugin? Cause I just want to have an example on how you would go about implementing authoritative movement! Also I am working on a Room Plugin which is done on the server sort of like Photon's room system. I have it up on Github but it is not ready for use yet! Here's the link https://github.com/DarkFlamex1/RoomPlugin. Also if you guys have any suggestions for improvement drop a pull request. I plan to finish the whole thing with actual documentation by this Sunday :)

    Edit: Check out the develop branch not the master ;)
     
  46. DarkFlameX1

    DarkFlameX1

    Joined:
    Mar 14, 2015
    Posts:
    13
    Oh yeah is there any way to pass on a network message to a certain id so that the senderId is not the server but is actually the original sender?

    Edit: I solved thanks for your help ;)
     
    Last edited: Feb 28, 2017
  47. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    Hey, sorry about the slow reply I've been away!

    I'm afraid I didn't, there is one in DarkRift 2 but I can't give you the source for that! Your plugin looks really good, well done. I'm glad there is something out there for people to use since I didn't mange to release mine!

    If your question still stands, lookup the client by ID using ConnectionManager and then call send NetworkMessage or SendReply on it :)

    Jamie
     
    DarkFlameX1 likes this.
  48. myasovik

    myasovik

    Joined:
    Feb 4, 2016
    Posts:
    1
    Hi Jamster,
    Do you have or possible to create a plugin that logs messages if server limit reached?
     
  49. Jamster

    Jamster

    Joined:
    Apr 28, 2012
    Posts:
    811
    I don't have one but it's certainly possible! Have a look at some of the properties/methods in DarkRiftServer and you should be able to get something working quite easily!
     
  50. BadUncleGames

    BadUncleGames

    Joined:
    Aug 10, 2015
    Posts:
    22
    Hi folks,
    First off, loving the Darkrift server and the potential of the plugins.
    I have added the MySQL connector plugin and seemed to have no issues there. I am now doing a login plugin (based on Yasil's tutorials) and getting the error below. (If @YasilNS happens to peruse these threads I have subscribed and waiting on login to get your code to double check my work) In the meantime as I am at a bit of a standstill I thought I would reach out to the community here and see if anyone can shed light on what I may be doing wrong.

    The offending piece of my login plugin is as follows:
    DarkRiftServer.database.ExecuteNonQuery(
    "CREATE TABLE IF NOT EXISTS tblPlayer("+
    "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "+
    "username VARCHAR(50) NOT NULL, "+
    "password VARCHAR(50) NOT NULL ) ", new QueryParameter[0]
    );

    Which then results in the following error:
    12/6/2017 16:17:18 PM [Trace] #### Server boot ####
    12/6/2017 16:17:18 PM [Trace] #### Server boot ####
    12/6/2017 16:17:18 PM [Log] Server mounted, listening on port 4296
    12/6/2017 16:17:18 PM [Trace] Found plugin: D:\darks\Documents\Unity Projects\AlbaServer\Plugins\LoginPlugin.dll, type of LoginPlugin.LoginPlugin
    12/6/2017 16:17:18 PM [Trace] Found plugin: D:\darks\Documents\Unity Projects\AlbaServer\Plugins\MySQLConnector.dll, type of MySQLConnector.Connector
    12/6/2017 16:17:18 PM [Trace] Found a total of 2 plugins.
    12/6/2017 16:17:18 PM [Log] Loaded database connector: MySQLConnector Version: 1.0
    12/6/2017 16:17:18 PM [Error] Plugin LoginPlugin.LoginPlugin failed to instantiate:
    System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.IO.FileNotFoundException: Could not load file or assembly 'MySql.Data, Version=6.9.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d' or one of its dependencies. The system cannot find the file specified.
    at MySQLConnector.Connector.ExecuteNonQuery(String query, QueryParameter[] parameters)
    at LoginPlugin.LoginPlugin..ctor()
    --- End of inner exception stack trace ---

    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
    at System.Activator.CreateInstance(Type type, Boolean nonPublic)
    at System.Activator.CreateInstance(Type type)
    at DarkRift.PluginManager.LoadPlugins(Type[] forceLoadPlugins)

    Cheers in advance folks.
     
    Last edited: Jun 12, 2017