[Release] Experimental 6090 project : Throne

12/13/2014 16:10 .Ocularis#1
I've been working on Throne since October 10th, that's 10 months I've been DAILY working and reworking.. Learning and unlearning..

I've decided to release my current work and take development totally private.
I'm starting to develop new ideas that I want to be proprietary to my server for a while, some are already included in this copy I'm releasing today.

This project is written in C# and currently supports patch 6090.

Things I'm aware of that suck hard atm:
  • Fluent NHibernate (needs to be properly implemented)
  • Improper implementation of async/await in actor threading
  • No thread pooling (besides tasks)
  • lots of things were implemented lazily and with a lack of knowledge.
Things I'm somewhat proud of:
  • a few working implementations of Conquer logic

Thanks to...
If I left you out let me know.
  • Encore (github project)
    • Source of fluent nhibernate implementation
    • Source of the actor threading model
    • Source of the WCF IPC implementations
  • Aura
    • Source of most implementations of the C# scripting system
    • Lots of inspirations
  • CSV3 (InfamousNoone)
    • Lots of Conquer documentation came from this project, was a great reference.
  • Fusion Origins (Korvacs)
    • You'll find a DMap viewer in Throne that originally came from Korvacs, developed further.
  • Project Phoenix (Fang)
    • Some cipher classes were ripped from here
  • CptSky (CO2_CORE)
    • Ciphers and documentation
  • ntl3fty
    • Documentation and criticism :D
  • Impulse
    • Documentation and lots of help over the years
  • Anthrax
    • Packet structure assistance


[DISCLAIMER]
Don't use this, develop this, or anything else unless you're prepared to run into serious problems.
As it is, this project is not for use as a public server. It's for testing and research.
Don't expect me to help.

[Only registered and activated users can see links. Click Here To Register...]
Type createdb on both server consoles. (no sql backup needed)
Log in using InfamousNoone's loader on a 6090 client.
12/14/2014 07:25 Super Aids#2
Good to see something new around these corners.
12/14/2014 21:34 InfamousNoone#3
o...
12/15/2014 10:47 InsomniacPro#4
I almost forgot there were people here who actually knew what the fuck they were doing.
12/15/2014 17:08 KraHen#5
Great job, reminded me why I still even visit the forums.
12/16/2014 05:25 pro4never#6
So... pretty...
12/16/2014 21:44 .Ocularis#7
Thanks everyone.
There has been a cool change in the player character class with a player's vision..
Please don't check the file history, it is an embarrassment:p

I'm doing my best to avoid locks completely since the project is designed to run 1 thread per logical processor (though, I don't know how that will affect for high persistence volumes).. Using the projects actor model, you post messages to change values of another object should be done only on that object's actor. In theory, unless there's some deep dark C# secret about threading, locks are no longer necessary for a player's vision and were replaced with messages posted to the target object. Check out the latest commit for code.

[Only registered and activated users can see links. Click Here To Register...]

Edit:
Deleted the file history for Character.Vision to save my pride
12/16/2014 22:34 Namikos#8
i wish u can make a video how to make it work
12/19/2014 17:20 tkblackbelt#9
Very sexy code :)
12/21/2014 19:01 .Ocularis#10
Thanks everyone.
Not sure there will be a video any time soon unless someone else makes one.

I'm still active on the project though there's been no commits lately. I'm researching C# 5's async/await and non-blocking awaitable tasks (and could use it for non-blocking locks too). It's essential that no thread's execution context is blocked while running an expensive action on the actors. But that's a "gotcha" with C#'s async/await. I've been unable to find out how to execute a Task solely on unmanaged threading. Now, I can make a Task post it's message to the actor that called the Task, but the Task still runs on the System.Threading.ThreadPool to do so.. Which in a high load server environment will most likely load tons and tons of threads, because the ThreadPool is nucking futs.

Still investigating.
Anyone have any experience with this?

Edit:
Seems there is no way around managed threading with async/await.
12/23/2014 02:12 pandomankoko#11
in the name of God
i can make this work? walah can keep you in help... :( :(
12/23/2014 02:45 .Ocularis#12
Quote:
Originally Posted by pandomankoko View Post
in the name of God
i can make this work? walah can keep you in help... :( :(
I'm not sure. Wait for someone to rename this project and release it on the Egyptian forums with 50 screenshots and a guide made just for you.


Update
  • Added the base for NPC scripting support. Dialog with NPC using regular options (no inputs) is currently supported. NPCs interact with the user asynchronously using C#5's async/await. The implementation is smart enough for me and I'm happy with it so far. An example NPC script is included with the latest commit.
  • Created a separate library for services, since not all future projects of Throne will require the entire framework. More splits to come in the future I'm sure.. there are lots of things in the world server that need to be split into a portable library.
  • December 24th: Updated example NPC to use text input and multilevel dialog, made some minor field changes.

Edit(Dec. 28th):
Big thanks to those who submitted pull requests over the holidays.
I'll begin working on Throne again some time after the 31st. The biggest thing on my todo list is to revisit the entire project, mending corners I've cut in early development. After that, plans are to have a dedicated public development server. It can be expected in the next month.
01/07/2015 23:45 nurarihyon25#13
muy buen proyecto eres el maestro del codigo
01/12/2015 04:19 .Ocularis#14
test server online, see original post.
01/13/2015 01:19 Gamer Online#15
[Only registered and activated users can see links. Click Here To Register...]

Wanted to show everyone its open for beta

Nice job Scotty!