Performance first, universal Fortnite private server backend written in Go.
Go to file
2023-11-03 23:48:50 +00:00
aid Added Basic API! Can now get into lobby (C1S2) 2023-11-03 23:48:50 +00:00
handlers Added Basic API! Can now get into lobby (C1S2) 2023-11-03 23:48:50 +00:00
person Added Basic API! Can now get into lobby (C1S2) 2023-11-03 23:48:50 +00:00
storage Added Basic API! Can now get into lobby (C1S2) 2023-11-03 23:48:50 +00:00
.air.toml Refactor how config is used. 2023-11-01 21:51:14 +00:00
.gitignore Hello, World! 2023-10-31 22:40:14 +00:00
default.config.ini Added Basic API! Can now get into lobby (C1S2) 2023-11-03 23:48:50 +00:00
go.mod Added Basic API! Can now get into lobby (C1S2) 2023-11-03 23:48:50 +00:00
go.sum Added Basic API! Can now get into lobby (C1S2) 2023-11-03 23:48:50 +00:00
main.go Added Basic API! Can now get into lobby (C1S2) 2023-11-03 23:48:50 +00:00
makefile Hello, World! 2023-10-31 22:40:14 +00:00
readme.md Better fitting art! 2023-11-02 21:09:45 +00:00

1

Snow

Performance first, universal Fortnite backend written in Go.

Features

  • Blazing Fast Written in Go, snow is extremely fast and can handle any profile action in milliseconds.
  • Profile Changes Snow keeps track of profile changes exactly like Fortnite does, meaning it is one-to-one with the game.

Examples

Quests

schedule := person.NewItem("ChallengeBundleSchedule:Paid_1", 1)
user.AthenaProfile.Items.AddItem(schedule)

bundle := person.NewItem("ChallengeBundle:Daily_1", 1)
user.AthenaProfile.Items.AddItem(bundle)

quest := person.NewQuest("Quest:Quest_2", bundle.ID, schedule.ID)
quest.AddObjective("quest_objective_eliminateplayers", 0)
user.AthenaProfile.Quests.AddQuest(quest)

daily := person.NewDailyQuest("Quest:Quest_3")
daily.AddObjective("quest_objective_place_top10", 0)
user.AthenaProfile.Quests.AddQuest(daily)

Profile Changes

snapshot := user.CommonCoreProfile.Snapshot()
{
  vbucks := user.CommonCoreProfile.Items.GetItemByTemplateID("Currency:MtxPurchased")
  vbucks.Quantity = 200
  vbucks.Favorite = true

  user.CommonCoreProfile.Items.DeleteItem(user.CommonCoreProfile.Items.GetItemByTemplateID("Token:CampaignAccess").ID)
  user.CommonCoreProfile.Items.AddItem(person.NewItem("Token:ReceiveMtxCurrency", 1))
}
user.CommonCoreProfile.Diff(snapshot)

What's next?

  • Implement the HTTP API for the game to communicate with the backend. This is the most important part of the project as it needs to handle thousands of requests per second. Should I use Fiber?
  • Person Authentication for the game to determine if the person is valid or not. Fortnite uses JWT tokens for this which makes it easy to implement.
  • Embed game assets into the backend e.g. Game XP Curve, Quest Data etc. This would mean a single binary that can be run anywhere without the need of external files.
  • Interact with external Buckets to save player data externally.
  • A way to interact with persons outside of the game. This is mainly for a web app and other services to interact with the backend.
  • Game Server Communication. This would mean a websocket server that communicates with the game servers to send and receive data.

Contributing

Contributions are welcome! Please open an issue or pull request if you would like to contribute.