MCPcopy Index your code
hub / github.com/Ayin-a/hk4e

github.com/Ayin-a/hk4e @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
1,777 symbols 5,798 edges 223 files 567 documented · 32%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

hk4e

简介

『原神』 Game Server But Golang Ver.

本项目的目标为构建一个高性能高可用的ARPG游戏服务端,并非以完整还原游戏内原本功能点为目的

项目的客户端协议、配置表主要基于3.2版本修改而来,因此请尽量使用3.2版本的客户端,但不是必须的

3.2.0国际服客户端下载链接

客户端需要本地https代理和打破解补丁才能正常使用,详情请参考目前主流私服连接方法

可以使用新版补丁避免https代理,支持自定义密钥和连接任意地址的服务器,感谢Jx2f/mhypbase

特性

  • 原生的高可用集群架构,任意节点宕机不会影响到整个系统,可大量水平扩展
  • 玩家级无状态游戏服务器,无锁单线程模型,开发省时省力,完善的玩家数据交换机制(内存-缓存-数据库),拒绝同步阻塞的数据库访问
  • 新颖的玩家在线跨服无缝迁移功能
  • 独创的网关服务器侧客户端协议代理转换功能,拒绝因协议号消息号混淆而带来代码改动的烦恼
  • 完整的密钥交换机制实现,安全性++,拒绝一个写死的随机数种子和XOR密钥文件用到天荒地老

编译和运行环境

  • Go >= 1.18
  • Protoc >= 3.21
  • Protoc Gen Go >= 1.28
  • Docker >= 20.10
  • Docker Compose >= 1.29

本项目未使用CGO构建,理论上Windows、Linux、macOS系统都可以编译运行

快速启动

  • 首次需要安装工具
make dev_tool
  • 生成协议
make gen_natsrpc      # 生成natsrpc协议
make gen_proto        # 生成客户端协议
make gen_client_proto # 生成客户端协议代理(非必要 详见gate/client_proto/README.md)
  • 构建
make build         # 构建服务器二进制文件
make docker_config # 复制配置模板等文件
make docker_build  # 构建镜像
  • 启动
cd docker
# 启动前请先确保各服务器的配置文件正确(如docker/node/bin/application.toml)
docker-compose up -d # 启动服务器

第三方组件

  • mongodb
  • nats-server
  • redis

服务器组件

  • node 节点服务器 (仅单节点 有状态)
  • dispatch 登录服务器 (可多节点 无状态)
  • gate 网关服务器 (可多节点 有状态)
  • anticheat 反作弊服务器 (可多节点 有状态 尚不完善非必要启动)
  • pathfinding 寻路服务器 (可多节点 无状态 尚不完善非必要启动)
  • gs 游戏服务器 (可多节点 有状态)
  • gm 游戏管理服务器 (仅单节点 无状态)

其它

  • 独立运行需要配置环境变量
GOLANG_PROTOBUF_REGISTRATION_CONFLICT=ignore

代码提交规范

  • 提交前必须进行go fmt(GoLand可在commit窗口的设置里勾选,默认是启用的)
  • 进行全局格式化时,请跳过gdconf目录,这是配置表数据,包含大量的json、lua、txt等文件
  • 单行注释的注释符与注释内容之间需要加一个空格(GoLand可在设置Editor/CodeStyle/Go/Other里打开)
  • 导入包时需要将标准库、本地包、第三方包用空行分开(GoLand可在设置Editor/CodeStyle/Go/Imports里打开)

Extension points exported contracts — how you extend this code

RegionShape (Interface)
RegionShape 形状抽象接口
pkg/alg/shape.go
HandlerFunc (FuncType)
接口路由管理器
gs/game/game_route_manager.go
InvokeEntryType (Interface)
多人世界网络同步包转发器
gs/model/player.go
UniqueID (Interface)
(no doc)
pkg/alg/snowflake_test.go
CommandFunc (FuncType)
CommandFunc 命令执行函数
gs/game/game_command_manager.go
GameObject (Interface)
(no doc)
gs/model/player.go

Core symbols most depended-on inside this repo

Error
called by 629
pkg/logger/logger.go
regMsg
called by 300
protocol/cmd/cmd_id_proto_obj_map.go
SendMsg
called by 204
gs/game/game.go
n
called by 117
cmd/dispatch/static/geetest/static/js/slide.7.8.6.js
SendError
called by 115
gs/game/game.go
Info
called by 114
pkg/logger/logger.go
Debug
called by 99
pkg/logger/logger.go
registerRouter
called by 96
gs/game/game_route_manager.go

Shape

Method 1,031
Function 483
Struct 240
TypeAlias 12
Interface 8
FuncType 3

Languages

Go95%
TypeScript5%

Modules by API surface

gs/game/game_world_scene.go92 symbols
gs/game/game_world_manager.go75 symbols
cmd/dispatch/static/geetest/static/js/slide.7.8.6.js72 symbols
gate/kcp/session.go68 symbols
gs/game/game_gcg_manager.go64 symbols
gate/kcp/kcp.go43 symbols
gs/game/player_scene.go38 symbols
gs/game/game_user_manager.go34 symbols
gdconf/scene_lua_config.go27 symbols
pkg/email/email_test.go24 symbols
gs/game/game_command_gm.go24 symbols
pkg/email/email.go23 symbols

Datastores touched

accountCollection · 1 repos
chat_msgCollection · 1 repos
client_logCollection · 1 repos
playerCollection · 1 repos
(mongodb)Database · 1 repos
dispatch_hk4eDatabase · 1 repos
gs_hk4eDatabase · 1 repos

For agents

$ claude mcp add hk4e \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact