Valhalla v28 Server Source (Golang) Source 

Newbie Spellweaver
Joined
Jan 21, 2019
Messages
16
Reaction score
13
Hey everyone,

I’m finally releasing Valhalla, a MapleStory v28 private server source written from the ground up in Golang. Some people in the scene may remember older versions of the project, but it was never really in a condition where someone could run a full server on it. After a lot of work, that’s no longer the case.

Over the past several months we’ve added a huge number of features, fixed long-standing issues, and reached a point where the entire project is stable enough for real use. At this point, Valhalla is a complete v28 server that people can actually build on or run as-is.

Credit goes to Hucaru for starting the project and laying the groundwork. None of this would exist without his initial effort, and he’s still involved today.

Here’s a quick overview of the meaningful gameplay features that are already finished:

Skills and combat:
  • Most job skills fully implemented, including buffs, summons, and skill-specific logic
  • Bosses with proper HP bars
  • Monsters with working skills, status effects, and on-death summons
  • Proper drop tables and item behaviors
  • Cash items fully functional (AP/SP resets, smegas, teleport rocks, style items, pets, etc.)
NPCs and world interactions:
  • Shops, storage, stylist NPCs
  • Scripted NPCs with hot-reloading for development
  • Working cash shop including purchases with multiple currencies
Party and social systems:
  • Party system including invites, exp split, party HP bars, and party chat
  • Buddy list with online/offline sync, map find, and whisper routing
  • Guild system including ranks, emblem, notices, and proper member sync
  • Communication window for party invites, trade requests, whispers, and more
Content:
  • Working Boats(with CRog Invasion)
  • Reactors
  • Quest system fully working, including quest requirements, progression, and rewards
  • Minigames
Player-to-player:
  • Fully working trade system
  • Pets with item pickup and functionality
  • Cash items like super megaphones and pet commands


If you want to set it up, the project supports three different deployment approaches: pre-built binaries, docker compose, and Kubernetes. Instructions can be found here:


The source is available here:


If you find bugs or want features added, feel free to open issues or pull requests. I’ve put a lot of time into getting this into a usable state, and I’d like to see the community build on it.
 
First of all, thank you SO MUCH for the release! I can't imagine how much work you put into this project. Thank you!
As a beginner, I faced couple obstacles following the instruction(for the local set up guide).
Here are some of beginner's struggles:

1. Converting data.wz to data.nx:

After installing the GMS V28(I found it here: ) and downloading the pre-built binary 'go-wztonx-converter' for windows, the instruction was to run "go-wztonx-converter.exe --server Data.wz". However, '--server' option didn't work. I tried couple of different ways, and what worked was:
wztonx-converter.exe -server Data.wz
A single '-' worked, instead of '--', and I'm not sure why there's 'go-' prefix.

2. SQL file and scripts folder:

After downloading the pre-built binary for Valhalla v0.0.24 Release(Valhalla_0.0.24_Windows_x86_64.zip), I tried to set up the database. But there was no SQL file in it. Also, 'scripts' folder wasn't in the pre-built binary release.
Both can be easily found in the source file, which was obvious, but I went blank for a sec.

3. Starting the Server:

After editing the configuration files, I started each server component, using separate terminal windows; login, world, channel, and cash shop.
However, there was an error running a cash shop config.
04 CashShop error - Valhalla v28 Server Source (Golang) - RaGEZONE Forums

And I couldn't figure it out how to solve the problem.
Also, when I tried to run for the 2nd channel, it didn't work either. The same issue.

If anyone can share how to solve this problem, it would be greatly appreciated!

However, after setting up this far, the game actually works great with a single channel without the cash shop.
05 working - Valhalla v28 Server Source (Golang) - RaGEZONE Forums


I just love old Maplestory and being able to play older versions like this one, brings me such a joy. Thank you so much!
 
First of all, thank you SO MUCH for the release! I can't imagine how much work you put into this project. Thank you!
As a beginner, I faced couple obstacles following the instruction(for the local set up guide).
Here are some of beginner's struggles:

1. Converting data.wz to data.nx:

After installing the GMS V28(I found it here: ) and downloading the pre-built binary 'go-wztonx-converter' for windows, the instruction was to run "go-wztonx-converter.exe --server Data.wz". However, '--server' option didn't work. I tried couple of different ways, and what worked was:
wztonx-converter.exe -server Data.wz
A single '-' worked, instead of '--', and I'm not sure why there's 'go-' prefix.

2. SQL file and scripts folder:

After downloading the pre-built binary for Valhalla v0.0.24 Release(Valhalla_0.0.24_Windows_x86_64.zip), I tried to set up the database. But there was no SQL file in it. Also, 'scripts' folder wasn't in the pre-built binary release.
Both can be easily found in the source file, which was obvious, but I went blank for a sec.

3. Starting the Server:

After editing the configuration files, I started each server component, using separate terminal windows; login, world, channel, and cash shop.
However, there was an error running a cash shop config.
View attachment 292200
And I couldn't figure it out how to solve the problem.
Also, when I tried to run for the 2nd channel, it didn't work either. The same issue.

If anyone can share how to solve this problem, it would be greatly appreciated!

However, after setting up this far, the game actually works great with a single channel without the cash shop.
View attachment 292201

I just love old Maplestory and being able to play older versions like this one, brings me such a joy. Thank you so much!


Thank you a ton for this feedback! It's super helpful.

Luckily, the issue you are facing with the CS, and additional channels is super easy to move past. By default, the binary uses port 9000 for prometheus(metrics) and when you run it locally, you need to specify different ports for each so it doesn't try to bind to the same port.

so you could do like:
ch1: -metrics-port 9000
ch2: -metrics-port 9001
cs: -metrics-port 9002

That's also in the configuration page if you want something to reference:

I'll definitely get those updated with those instructions, and I'm thinking maybe even moving it to the config files might be a good approach too.

Also, thank you for the info on the other instructions. I will adjust those too.
 
Thank you for the quick response!

To be honest, even with the instruction, I went through trials and errors to get it right.. :D
Now I see how it works, but at the beginning I didn't know where to put "-metrics-port 9001"

For the Cash Shop Server, I put it like this:

Valhalla.exe -type cashshop -metrics-port 9001 -config config_cashshop.toml

04b CashShop working - Valhalla v28 Server Source (Golang) - RaGEZONE Forums


and it works! :D

04c CashShop working - Valhalla v28 Server Source (Golang) - RaGEZONE Forums


So for those who struggle like me,

# Windows
Valhalla.exe -type channel -config config_channel_1.toml

For Additional Channels
Valhalla.exe -type channel -metrics-port 9001 -config config_channel_2.toml
Valhalla.exe -type channel -metrics-port 9002 -config config_channel_3.toml

For Cash Shop
Valhalla.exe -type cashshop -metrics-port 9003 -config config_cashshop.toml


And it was easier to make a '.bat' file, instead of typing it out. I kept making mistakes :D

Thank you again for the instruction!
 
I have a question regarding quest rewards.

When you have a random reward from finishing a quest, instead of getting 'one' of many possible items, it seems like you get 'all' possible items for that quest.

The earliest example is quest #1006.
When you return Lucas' Letter(04031001) back to Maria(0002103), instead of getting one of 7 different hats, you get all 7 of them.
06 quest reward error - Valhalla v28 Server Source (Golang) - RaGEZONE Forums


The item reward part in the Data.wz(Quest/Act.img/1006/1/item) has prop=1, which means a random reward.
Not sure if I did something wrong, or the function for quest random reward is not implemented?
Also, it does not show what kind of item you received on the chat section.

And it feels like some dialogues are missing, especially when the quest is done from one NPC to another.
(dialogues are not popping up when I click on the Next NPC..)

May I did something wrong... Can you please check?
 
I have a question regarding quest rewards.

When you have a random reward from finishing a quest, instead of getting 'one' of many possible items, it seems like you get 'all' possible items for that quest.

The earliest example is quest #1006.
When you return Lucas' Letter(04031001) back to Maria(0002103), instead of getting one of 7 different hats, you get all 7 of them.
View attachment 292466

The item reward part in the Data.wz(Quest/Act.img/1006/1/item) has prop=1, which means a random reward.
Not sure if I did something wrong, or the function for quest random reward is not implemented?
Also, it does not show what kind of item you received on the chat section.

And it feels like some dialogues are missing, especially when the quest is done from one NPC to another.
(dialogues are not popping up when I click on the Next NPC..)

May I did something wrong... Can you please check?

Ahh, I forgot all about this bug! I just submitted a PR to fix this, sorry about that.
 
Hello!
I have a question regarding reactor drops this time :D (and I'll add more later)

For the drops from defeating a monster for a particular quest, I think you can assign a "questID" so that the quest item can be dropped only if you are doing that quest.(I assume)

But for the reactor drops, it seems like the quest item drops even before you start the quest and still drops even after you finish it.
For example, for the quest #1008, "Pio's Collecting Recycled Goods", if I remember correctly from my old days, "Rusty Screw(04031161)" and "Old Wooden Board(04031162)" only dropped when you are doing the quest.

But it still drops after I finished the quest
Is it possible to assign quest ID to reactor drops, so it only drops when you are doing the quest?

07 reactor drops - Valhalla v28 Server Source (Golang) - RaGEZONE Forums



Also, these items are 'tradeBlock'
04031161-Rusty Screw(Item/Etc/0403.img/04031161/info/tradeBlock/1)
04031162-Old Wooden Board
and so on.

But does not show on the item info in game.
Is it possible to indicate like 'quest item','tradeBlock item' in item info? Maybe it's a feature added on later version?

And it gives you a warning when you try to drop them. But when you drop them, they do not disappear.
I think tradeBlock items and quest items are supposed to disappear when you drop them.


In addition, the reactor drops "everything" instead of dropping randomly.

In reactor_drops.json, the reactor 0002000.img has following drop items.
{
"2000": {
"0": {
"money": "10"
},
"1": {
"item": "4031161"
},
"2": {
"item": "4031162"
},
"3": {
"item": "2000000"
},
"4": {
"item": "2000001"
},
"5": {
"item": "2010000"
}
},

And it drops 'everything' at 100% rate every time I break the box.(I got rich by selling those potions :D)

So the quest items like 'Witchgrass Leaf(04031165)' and 'Plant Sample(04031150)' for Icarus Cape and Leaf Earrings, they also drop 100% every time when you break the reactor, and even before and after you finish the quest.
(reactor ID: 1072000, 1012000)

18 reactor drop 02 - Valhalla v28 Server Source (Golang) - RaGEZONE Forums


18 reactor drop 04 - Valhalla v28 Server Source (Golang) - RaGEZONE Forums


Is it possible to make the reactor drops as a random drop and limited to a particular quest?
 
More Questions!
I had time to play little longer today :D
Here are some observations and issues I encountered.

1. The first time you come to the Victoria Island(to Lith Harbor), the character is spawned in random spawn point(I think).
Is it possible to assign the character's spawn point on the ship instead of a random one?

2. For taxi(or any transportation NPC), any discount for beginner?

3. When I did 1st job advancement as a warrior at level 10, I got 6 skill points..(maybe it was combined with beginner's skill point?)

09 skill point - Valhalla v28 Server Source (Golang) - RaGEZONE Forums



4. The warrior's skill 'Improving MaxHP Increase' doesn't seem like working properly.


-before level up, HP: 407
-after level up, HP: 433
10 HP increase 03c - Valhalla v28 Server Source (Golang) - RaGEZONE Forums


I was supposed to get 40+a HP on level up after mastering the 'Improving MaxHP Increase' skill, but I got only 26 HP increase.
(I didn't check the magician skill for MP increase. Maybe it has an issue, too?)


5. I didn't get HP increase at 2nd job advance as a warrior(I forgot to check on 1st job advance, but I don't think I got HP increase, either)



6. EXP reduction at death works somewhat weird

I have 5 LUK stats, and at character's death, I lost 6.92% of EXP (69.36 - 62.44 = 6.92%)
But I think it should be close to 10% of EXP reduction at death if you have less LUK (or is it how the old version worked?)



7. I don't know how I got a sword with 17 attack and 17 magic defense(MDD)... I think it was the sword I got when I made the character.
And it has the same ID number like a normal sword(01302000) on the SQL Database..

12 MDD17 sword 01302000 c - Valhalla v28 Server Source (Golang) - RaGEZONE Forums



8. In the inventory, the way the same items are added together works somewhat weird.
For example, when you have 104 blue potions(which has slotMax 200), and buy 100 more, then it should be added up 200 in one slot and 4 in another.
But it becomes 104 in one slot and 100 in another
And if you buy another 100, it becomes 104, 100, 100 in each slot, and etc

It only happens if what you are buying exceeds the slotMax of that item, in this case 200.
If you buy 50 blue potions, for example, it adds up 154 in one slot porperly.

It also happens when you pick up arrows [The arrows are supposed to have slotMax 1000 (Item/Consume/0206.img/02060000/info/slotMax/1000), but somehow it has 200 max]
For example, if you have 198 arrows, and try to pick up 15 arrows, it becoms 198 in one slot and 15 in another, not 200 in one slot and 13 in another
And if you pick up another 16 arrows, it becomes 198 in one slot, 15 in one slot, and 16 in another slot.

15 items not being combined properly ut2 - Valhalla v28 Server Source (Golang) - RaGEZONE Forums



9. For some quests, when you have several choices, I think it's missing '\n'

17 quest error n missing c - Valhalla v28 Server Source (Golang) - RaGEZONE Forums



10. when you are equipped with an one-handed weapon and a shield, you can't equip two-handed weapon by clicking the item.
you have to un-equip them first in order to equip the two-handed wp.



11. Monsters drop the quest item beyond the amount necessary for the quest. Is it possible to stop dropping the quest item once you have reached the required amount for that quest?



12. Is the full screen mode available?


Thank you!!
 
dsrgz those issues look like an easy fix, and an opportunity to learn. Considering that this is a developers' forum, and the source is open source, why not try and tackle it yourself?
 
dsrgz those issues look like an easy fix, and an opportunity to learn. Considering that this is a developers' forum, and the source is open source, why not try and tackle it yourself?

Maybe you are right. I should take time to learn Go language and look into the source.
But to be honest, I find myself overwhelmed every time I try to learn, and usually get lost not knowing what to do.
So mostly I just stick with wz editing. It's like an ongoing cycle; trying to learn, overwhelmed, and going back to wz editing...

My apologies if my post bothered you somehow.
I'll just post it in their git page next time.
 
Maybe you are right. I should take time to learn Go language and look into the source.
But to be honest, I find myself overwhelmed every time I try to learn, and usually get lost not knowing what to do.
So mostly I just stick with wz editing. It's like an ongoing cycle; trying to learn, overwhelmed, and going back to wz editing...

My apologies if my post bothered you somehow.
I'll just post it in their git page next time.
Opening issues in GitHub is definitely preferable. It’s 100x easier to track and coordinate than the forum.
 
Maybe you are right. I should take time to learn Go language and look into the source.
But to be honest, I find myself overwhelmed every time I try to learn, and usually get lost not knowing what to do.
So mostly I just stick with wz editing. It's like an ongoing cycle; trying to learn, overwhelmed, and going back to wz editing...

My apologies if my post bothered you somehow.
I'll just post it in their git page next time.

With ChatGPT, Claude, Gemini, it should be pretty easy.
 
Back