1
This commit is contained in:
@@ -1,41 +1,41 @@
|
|||||||
module blazing/contrib/drivers/mysql
|
module blazing/contrib/drivers/mysql
|
||||||
|
|
||||||
go 1.18
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.6.3
|
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.6.3
|
||||||
github.com/gogf/gf/v2 v2.6.3
|
github.com/gogf/gf/v2 v2.6.3
|
||||||
gorm.io/driver/mysql v1.5.4
|
gorm.io/driver/mysql v1.5.4
|
||||||
gorm.io/gorm v1.25.7
|
gorm.io/gorm v1.25.7
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/BurntSushi/toml v1.3.2 // indirect
|
github.com/BurntSushi/toml v1.3.2 // indirect
|
||||||
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
||||||
github.com/fatih/color v1.16.0 // indirect
|
github.com/fatih/color v1.16.0 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
github.com/fsnotify/fsnotify v1.7.0 // indirect
|
||||||
github.com/go-logr/logr v1.4.1 // indirect
|
github.com/go-logr/logr v1.4.1 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.7.1 // indirect
|
github.com/go-sql-driver/mysql v1.7.1 // indirect
|
||||||
github.com/gorilla/websocket v1.5.1 // indirect
|
github.com/gorilla/websocket v1.5.1 // indirect
|
||||||
github.com/grokify/html-strip-tags-go v0.1.0 // indirect
|
github.com/grokify/html-strip-tags-go v0.1.0 // indirect
|
||||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
github.com/jinzhu/now v1.1.5 // indirect
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
github.com/kr/pretty v0.1.0 // indirect
|
github.com/kr/pretty v0.1.0 // indirect
|
||||||
github.com/kr/text v0.2.0 // indirect
|
github.com/kr/text v0.2.0 // indirect
|
||||||
github.com/magiconair/properties v1.8.7 // indirect
|
github.com/magiconair/properties v1.8.7 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.15 // indirect
|
github.com/mattn/go-runewidth v0.0.15 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||||
github.com/rivo/uniseg v0.4.7 // indirect
|
github.com/rivo/uniseg v0.4.7 // indirect
|
||||||
go.opentelemetry.io/otel v1.24.0 // indirect
|
go.opentelemetry.io/otel v1.14.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.24.0 // indirect
|
go.opentelemetry.io/otel/metric v1.24.0 // indirect
|
||||||
go.opentelemetry.io/otel/sdk v1.24.0 // indirect
|
go.opentelemetry.io/otel/sdk v1.24.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.24.0 // indirect
|
go.opentelemetry.io/otel/trace v1.24.0 // indirect
|
||||||
golang.org/x/net v0.21.0 // indirect
|
golang.org/x/net v0.21.0 // indirect
|
||||||
golang.org/x/sys v0.17.0 // indirect
|
golang.org/x/sys v0.17.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,16 +2,19 @@ package login
|
|||||||
|
|
||||||
// CommendSvrInfo 初始连接请求信息结构体
|
// CommendSvrInfo 初始连接请求信息结构体
|
||||||
type CommendSvrInfo struct {
|
type CommendSvrInfo struct {
|
||||||
MaxOnlineID uint32 // 最大连接数
|
MaxOnlineID uint32 // 最大连接数
|
||||||
IsVip uint32 // 建议为0
|
IsVip uint32 // 建议为0
|
||||||
ServerList []ServerInfo // 服务器具体信息
|
ServerInfoLen uint32 `struc:"sizeof=ServerList"` // 服务器信息长度 ServerInfo
|
||||||
Reversed uint32 // 保留字段
|
ServerList []ServerInfo // 服务器具体信息
|
||||||
|
Reversed uint32 // 保留字段
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCommendSvrInfo() *CommendSvrInfo {
|
func NewCommendSvrInfo() *CommendSvrInfo {
|
||||||
return &CommendSvrInfo{
|
return &CommendSvrInfo{
|
||||||
IsVip: 0,
|
MaxOnlineID: 100,
|
||||||
ServerList: make([]ServerInfo, 0),
|
IsVip: 0,
|
||||||
Reversed: 0,
|
ServerInfoLen: 0,
|
||||||
|
ServerList: make([]ServerInfo, 0),
|
||||||
|
Reversed: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
47
common/core/info/login/CommendSvrInfo_test.go
Normal file
47
common/core/info/login/CommendSvrInfo_test.go
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
package login
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
"github.com/lunixbochs/struc"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestNewCommendSvrInfo(t *testing.T) {
|
||||||
|
|
||||||
|
ret := NewCommendSvrInfo()
|
||||||
|
|
||||||
|
lofin := NewServerInfo()
|
||||||
|
lofin.OnlineID = 1
|
||||||
|
lofin.UserCnt = 77
|
||||||
|
lofin.IP = "127.0.0.1"
|
||||||
|
lofin.Port = 27777
|
||||||
|
lofin.Friends = 1
|
||||||
|
|
||||||
|
ret.ServerList = append(ret.ServerList, *lofin)
|
||||||
|
|
||||||
|
// bytt := bytearray.CreateByteArray()
|
||||||
|
// bytt.WriteUInt32(100)
|
||||||
|
// bytt.WriteUInt32(0)
|
||||||
|
|
||||||
|
// //ret.ServerList = append(ret.ServerList, *lofin)
|
||||||
|
var trr bytes.Buffer
|
||||||
|
// err := struc.Pack(&trr, lofin)
|
||||||
|
// bytt.WriteUInt32(1) //长度
|
||||||
|
// bytt.Write(trr.Bytes())
|
||||||
|
// bytt.WriteUInt32(1)
|
||||||
|
// //err:=Println(trr.Bytes())
|
||||||
|
/// 00 00 00 64 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 4d 31 32 37 2e 30 2e 30 2e 31 00 00 00 00 00 00 00 6c 81 00 00 00 01 00 00 00 00
|
||||||
|
|
||||||
|
err := struc.Pack(&trr, ret)
|
||||||
|
fmt.Println(err)
|
||||||
|
fmt.Println(trr.Bytes())
|
||||||
|
g.Dump(ret)
|
||||||
|
fmt.Println("000000640000000000000001000000010000004d3132372e302e302e31000000000000006c810000000100000000")
|
||||||
|
fmt.Println("000000640000000000000001000000010000004d3132372e302e302e31000000000000006c810000000100000000")
|
||||||
|
fmt.Println(hex.EncodeToString(trr.Bytes()))
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,58 @@
|
|||||||
package entity
|
package entity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"blazing/common/socket/cmd"
|
||||||
|
"blazing/common/socket/handler"
|
||||||
|
"bytes"
|
||||||
|
|
||||||
|
"github.com/lunixbochs/struc"
|
||||||
|
"github.com/panjf2000/gnet/v2"
|
||||||
|
)
|
||||||
|
|
||||||
type Player struct {
|
type Player struct {
|
||||||
|
UserID uint32 //用户ID
|
||||||
|
Conn gnet.Conn
|
||||||
|
}
|
||||||
|
|
||||||
|
// PlayerOption 定义配置 Player 的函数类型
|
||||||
|
type PlayerOption func(*Player)
|
||||||
|
|
||||||
|
// WithUserID 设置用户ID的选项函数
|
||||||
|
func WithUserID(userID uint32) PlayerOption {
|
||||||
|
return func(p *Player) {
|
||||||
|
p.UserID = userID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func WithConn(Conn gnet.Conn) PlayerOption {
|
||||||
|
return func(p *Player) {
|
||||||
|
p.Conn = Conn
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewPlayer 使用 Options 模式创建 Player 实例
|
||||||
|
func NewPlayer(opts ...PlayerOption) *Player {
|
||||||
|
p := &Player{}
|
||||||
|
for _, opt := range opts {
|
||||||
|
opt(p)
|
||||||
|
}
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Player) GetUserID() uint32 {
|
||||||
|
return p.UserID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *Player) SendPackBytes(cmd cmd.EnumCommandID, data []byte) { //组包
|
||||||
|
|
||||||
|
head1 := handler.TomeeHeader{}
|
||||||
|
head1.CMDID = uint32(cmd)
|
||||||
|
head1.Len = uint32(len(data) + 17)
|
||||||
|
head1.Version = "7"
|
||||||
|
head1.UserID = p.UserID
|
||||||
|
head1.Result = 0
|
||||||
|
var data1 bytes.Buffer
|
||||||
|
struc.Pack(&data1, head1)
|
||||||
|
p.Conn.Write(data1.Bytes()) //写入头部
|
||||||
|
p.Conn.Write(data) //写入数据
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,12 @@ require (
|
|||||||
github.com/gogf/gf/v2 v2.6.3
|
github.com/gogf/gf/v2 v2.6.3
|
||||||
)
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/antchfx/xmlquery v1.4.4 // indirect
|
||||||
|
github.com/antchfx/xpath v1.3.3 // indirect
|
||||||
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/BurntSushi/toml v1.2.0 // indirect
|
github.com/BurntSushi/toml v1.2.0 // indirect
|
||||||
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
github.com/clbanning/mxj/v2 v2.7.0 // indirect
|
||||||
@@ -34,10 +40,10 @@ require (
|
|||||||
go.opentelemetry.io/otel/trace v1.14.0 // indirect
|
go.opentelemetry.io/otel/trace v1.14.0 // indirect
|
||||||
go.uber.org/multierr v1.11.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
go.uber.org/zap v1.27.0 // indirect
|
go.uber.org/zap v1.27.0 // indirect
|
||||||
golang.org/x/net v0.17.0 // indirect
|
golang.org/x/net v0.33.0 // indirect
|
||||||
golang.org/x/sync v0.11.0 // indirect
|
golang.org/x/sync v0.11.0 // indirect
|
||||||
golang.org/x/sys v0.30.0 // indirect
|
golang.org/x/sys v0.30.0 // indirect
|
||||||
golang.org/x/text v0.13.0 // indirect
|
golang.org/x/text v0.21.0 // indirect
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
|
github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0=
|
||||||
github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||||
|
github.com/antchfx/xmlquery v1.4.4 h1:mxMEkdYP3pjKSftxss4nUHfjBhnMk4imGoR96FRY2dg=
|
||||||
|
github.com/antchfx/xmlquery v1.4.4/go.mod h1:AEPEEPYE9GnA2mj5Ur2L5Q5/2PycJ0N9Fusrx9b12fc=
|
||||||
|
github.com/antchfx/xpath v1.3.3 h1:tmuPQa1Uye0Ym1Zn65vxPgfltWb/Lxu2jeqIGteJSRs=
|
||||||
|
github.com/antchfx/xpath v1.3.3/go.mod h1:i54GszH55fYfBmoZXapTHN8T8tkcHfRgLyVwwqzXNcs=
|
||||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||||
github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
|
github.com/clbanning/mxj/v2 v2.7.0 h1:WA/La7UGCanFe5NpHF0Q3DNtnCsVoxbPKuyBNHWRyME=
|
||||||
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
|
github.com/clbanning/mxj/v2 v2.7.0/go.mod h1:hNiWqW14h+kc+MdF9C6/YoRfjEJoR3ou6tn/Qo+ve2s=
|
||||||
@@ -19,7 +23,10 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre
|
|||||||
github.com/gogf/gf/contrib/nosql/redis/v2 v2.6.3/go.mod h1:2+evGu1xAlamaYuDdSqa7QCiwPTm1RrGsUFSMc8PyLc=
|
github.com/gogf/gf/contrib/nosql/redis/v2 v2.6.3/go.mod h1:2+evGu1xAlamaYuDdSqa7QCiwPTm1RrGsUFSMc8PyLc=
|
||||||
github.com/gogf/gf/v2 v2.6.3 h1:DoqeuwU98wotpFoDSQEx8RZbmJdK8KdGiJtzJeqpyIo=
|
github.com/gogf/gf/v2 v2.6.3 h1:DoqeuwU98wotpFoDSQEx8RZbmJdK8KdGiJtzJeqpyIo=
|
||||||
github.com/gogf/gf/v2 v2.6.3/go.mod h1:x2XONYcI4hRQ/4gMNbWHmZrNzSEIg20s2NULbzom5k0=
|
github.com/gogf/gf/v2 v2.6.3/go.mod h1:x2XONYcI4hRQ/4gMNbWHmZrNzSEIg20s2NULbzom5k0=
|
||||||
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||||
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
|
||||||
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
|
||||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
|
||||||
@@ -66,6 +73,7 @@ github.com/tnnmigga/enum v1.0.2/go.mod h1:QaBFBwGJi/2GAM34b2pz6UL2NRtl2TRZ8lXp4v
|
|||||||
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM=
|
go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM=
|
||||||
go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU=
|
go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU=
|
||||||
go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY=
|
go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY=
|
||||||
@@ -85,16 +93,41 @@ go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
|||||||
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
|
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
|
||||||
|
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
||||||
|
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
|
||||||
|
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
|
||||||
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
|
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
|
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
|
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
|
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||||
|
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
|
||||||
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
|
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
|
||||||
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
||||||
|
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||||
|
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
|
||||||
|
golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I=
|
||||||
|
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
|
||||||
|
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
|
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
|
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||||
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@@ -102,20 +135,48 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211204120058-94396e421777/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211204120058-94396e421777/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||||
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
|
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||||
|
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
|
||||||
|
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
|
||||||
|
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
|
||||||
|
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
|
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
|
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
|
||||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
|
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
|
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||||
|
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
|
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
|
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
|
||||||
|
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ func (f Fields) Pack(buf []byte, val reflect.Value, options *Options) (int, erro
|
|||||||
return n, err
|
return n, err
|
||||||
} else {
|
} else {
|
||||||
pos += n
|
pos += n
|
||||||
|
//g.Dump(v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pos, nil
|
return pos, nil
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package socket
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"log"
|
||||||
|
|
||||||
"blazing/common/data/entity"
|
"blazing/common/data/entity"
|
||||||
|
|
||||||
@@ -48,7 +49,9 @@ func (s *Server) OnTraffic(conn gnet.Conn) (action gnet.Action) {
|
|||||||
func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
|
func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
if !s.discorse {
|
||||||
|
handle(conn)
|
||||||
|
}
|
||||||
data, err := s.codec.Decode(conn)
|
data, err := s.codec.Decode(conn)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
break
|
break
|
||||||
@@ -56,7 +59,7 @@ func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
|
|||||||
|
|
||||||
//client := conn.RemoteAddr().String()
|
//client := conn.RemoteAddr().String()
|
||||||
_ = s.workerPool.Submit(func() {
|
_ = s.workerPool.Submit(func() {
|
||||||
s.parser(data)
|
s.parser(conn, data)
|
||||||
})
|
})
|
||||||
|
|
||||||
return gnet.None
|
return gnet.None
|
||||||
@@ -73,12 +76,44 @@ func (s *Server) handleTcp(conn gnet.Conn) (action gnet.Action) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) parser(line []byte) {
|
func (s *Server) parser(c gnet.Conn, line []byte) {
|
||||||
//todo 这里待实现注入player实体
|
//todo 这里待实现注入player实体
|
||||||
s.handler.Handle(line)
|
s.handler.Handle(c, line)
|
||||||
}
|
}
|
||||||
func (s *Server) Start() {
|
func (s *Server) Start() {
|
||||||
|
|
||||||
err := gnet.Run(s, s.network+"://"+s.addr, gnet.WithMulticore(s.multicore))
|
err := gnet.Run(s, s.network+"://"+s.addr, gnet.WithMulticore(s.multicore))
|
||||||
logging.Infof("server exits with error: %v", err)
|
logging.Infof("server exits with error: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CROSS_DOMAIN 定义跨域策略文件内容
|
||||||
|
const CROSS_DOMAIN = "<?xml version=\"1.0\"?><!DOCTYPE cross-domain-policy><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>\x00"
|
||||||
|
|
||||||
|
// TEXT 定义跨域请求的文本格式
|
||||||
|
const TEXT = "<policy-file-request/>\x00"
|
||||||
|
|
||||||
|
func handle(c gnet.Conn) {
|
||||||
|
clientdata := c.Context().(*entity.ClientData)
|
||||||
|
if clientdata.IsCrossDomain {
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
// 读取数据并检查是否为跨域请求
|
||||||
|
data, err := c.Peek(len(TEXT))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error reading cross-domain request: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if string(data) == TEXT { //判断是否是跨域请求
|
||||||
|
log.Printf("Received cross-domain request from %s", c.RemoteAddr())
|
||||||
|
// 处理跨域请求
|
||||||
|
c.Write([]byte(CROSS_DOMAIN))
|
||||||
|
c.Discard(len(TEXT))
|
||||||
|
|
||||||
|
clientdata.IsCrossDomain = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//return
|
||||||
|
}
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ type Server struct {
|
|||||||
workerPool *goroutine.Pool
|
workerPool *goroutine.Pool
|
||||||
codec codec.SocketCodec
|
codec codec.SocketCodec
|
||||||
handler handler.Handler
|
handler handler.Handler
|
||||||
|
discorse bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type Option func(*Server)
|
type Option func(*Server)
|
||||||
@@ -31,6 +32,7 @@ func NewServer(options ...Option) *Server {
|
|||||||
workerPool: goroutine.Default(),
|
workerPool: goroutine.Default(),
|
||||||
bufferSize: 4096, //默认缓冲区大小
|
bufferSize: 4096, //默认缓冲区大小
|
||||||
multicore: true,
|
multicore: true,
|
||||||
|
discorse: true,
|
||||||
}
|
}
|
||||||
for _, option := range options {
|
for _, option := range options {
|
||||||
option(server)
|
option(server)
|
||||||
@@ -43,7 +45,11 @@ func WithSocketCodec(codec codec.SocketCodec) Option {
|
|||||||
u.codec = codec
|
u.codec = codec
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func WithCORS() Option {
|
||||||
|
return func(u *Server) {
|
||||||
|
u.discorse = false
|
||||||
|
}
|
||||||
|
}
|
||||||
func WithSocketHandler(handler handler.Handler) Option {
|
func WithSocketHandler(handler handler.Handler) Option {
|
||||||
return func(u *Server) {
|
return func(u *Server) {
|
||||||
u.handler = handler
|
u.handler = handler
|
||||||
|
|||||||
@@ -1,21 +1,13 @@
|
|||||||
package codec
|
package codec
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/common/data/entity"
|
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"errors"
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
|
||||||
|
|
||||||
"github.com/panjf2000/gnet/v2"
|
"github.com/panjf2000/gnet/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CROSS_DOMAIN 定义跨域策略文件内容
|
|
||||||
const CROSS_DOMAIN = "<?xml version=\"1.0\"?><!DOCTYPE cross-domain-policy><cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>\x00"
|
|
||||||
|
|
||||||
// TEXT 定义跨域请求的文本格式
|
|
||||||
const TEXT = "<policy-file-request/>\x00"
|
|
||||||
|
|
||||||
var ErrIncompletePacket = errors.New("incomplete packet")
|
var ErrIncompletePacket = errors.New("incomplete packet")
|
||||||
|
|
||||||
// TomeeSocketCodec 协议格式:
|
// TomeeSocketCodec 协议格式:
|
||||||
@@ -39,31 +31,6 @@ func NewTomeeSocketCodec() *TomeeSocketCodec {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func handle(c gnet.Conn) {
|
|
||||||
clientdata := c.Context().(*entity.ClientData)
|
|
||||||
if clientdata.IsCrossDomain {
|
|
||||||
return
|
|
||||||
|
|
||||||
}
|
|
||||||
// 读取数据并检查是否为跨域请求
|
|
||||||
data, err := c.Peek(len(TEXT))
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("Error reading cross-domain request: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if string(data) == TEXT { //判断是否是跨域请求
|
|
||||||
log.Printf("Received cross-domain request from %s", c.RemoteAddr())
|
|
||||||
// 处理跨域请求
|
|
||||||
c.Write([]byte(CROSS_DOMAIN))
|
|
||||||
c.Discard(len(TEXT))
|
|
||||||
|
|
||||||
clientdata.IsCrossDomain = true
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
//return
|
|
||||||
}
|
|
||||||
func (codec TomeeSocketCodec) Encode(buf []byte) ([]byte, error) {
|
func (codec TomeeSocketCodec) Encode(buf []byte) ([]byte, error) {
|
||||||
bodyLen := len(buf)
|
bodyLen := len(buf)
|
||||||
data := make([]byte, 4+bodyLen)
|
data := make([]byte, 4+bodyLen)
|
||||||
@@ -78,7 +45,7 @@ func (codec TomeeSocketCodec) Encode(buf []byte) ([]byte, error) {
|
|||||||
|
|
||||||
func (codec TomeeSocketCodec) Decode(c gnet.Conn) ([]byte, error) {
|
func (codec TomeeSocketCodec) Decode(c gnet.Conn) ([]byte, error) {
|
||||||
|
|
||||||
handle(c)
|
// handle(c)
|
||||||
// 先读取4字节的包长度
|
// 先读取4字节的包长度
|
||||||
lenBuf, err := c.Peek(4)
|
lenBuf, err := c.Peek(4)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package handler
|
package handler
|
||||||
|
|
||||||
|
import "github.com/panjf2000/gnet/v2"
|
||||||
|
|
||||||
// Handler The handler receive every syslog entry at Handle method
|
// Handler The handler receive every syslog entry at Handle method
|
||||||
type Handler interface {
|
type Handler interface {
|
||||||
Handle([]byte)
|
Handle(gnet.Conn, []byte)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,20 +2,23 @@ package handler
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/common/serialize/bytearray"
|
"blazing/common/serialize/bytearray"
|
||||||
|
|
||||||
|
"github.com/panjf2000/gnet/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
// TomeeHeader 结构体字段定义
|
// TomeeHeader 结构体字段定义
|
||||||
type TomeeHeader struct {
|
type TomeeHeader struct {
|
||||||
Len uint32 `json:"len"`
|
Len uint32 `json:"len"`
|
||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
UserID uint32 `json:"userId"`
|
|
||||||
Error uint32 `json:"error"`
|
|
||||||
CMDID uint32 `json:"cmdId"`
|
CMDID uint32 `json:"cmdId"`
|
||||||
Result uint32 `json:"result"`
|
UserID uint32 `json:"userId"`
|
||||||
Data []byte `json:"data"`
|
//Error uint32 `json:"error" struc:"[0]pad"`
|
||||||
|
|
||||||
|
Result uint32 `json:"result"`
|
||||||
|
Data []byte `json:"data" struc:"[0]pad"` //组包忽略此字段
|
||||||
}
|
}
|
||||||
type TomeeHandler struct {
|
type TomeeHandler struct {
|
||||||
Callback func(data TomeeHeader)
|
Callback func(conn gnet.Conn, data TomeeHeader)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTomeeHandler() *TomeeHandler {
|
func NewTomeeHandler() *TomeeHandler {
|
||||||
@@ -23,7 +26,7 @@ func NewTomeeHandler() *TomeeHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handle entry receiver
|
// Handle entry receiver
|
||||||
func (h *TomeeHandler) Handle(data []byte) { //处理接收到的数据 ,
|
func (h *TomeeHandler) Handle(c gnet.Conn, data []byte) { //处理接收到的数据 ,
|
||||||
//fmt.Println("接收数据", data)
|
//fmt.Println("接收数据", data)
|
||||||
|
|
||||||
header := TomeeHeader{}
|
header := TomeeHeader{}
|
||||||
@@ -37,6 +40,6 @@ func (h *TomeeHandler) Handle(data []byte) { //处理接收到的数据 ,
|
|||||||
header.Result, _ = tempdata.ReadUInt32()
|
header.Result, _ = tempdata.ReadUInt32()
|
||||||
header.Data = tempdata.BytesAvailable()
|
header.Data = tempdata.BytesAvailable()
|
||||||
//fmt.Println("接收封包", header)
|
//fmt.Println("接收封包", header)
|
||||||
h.Callback(header)
|
h.Callback(c, header)
|
||||||
//return header
|
//return header
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,27 +4,19 @@ import (
|
|||||||
"blazing/common/core/info"
|
"blazing/common/core/info"
|
||||||
"blazing/common/data/entity"
|
"blazing/common/data/entity"
|
||||||
"blazing/logic/service/login"
|
"blazing/logic/service/login"
|
||||||
"bytes"
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
"github.com/lunixbochs/struc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// todo 待实现自动编解码Recv_1001
|
// todo 待实现自动编解码Recv_1001
|
||||||
// 处理命令: 1001
|
// 处理命令: 1001
|
||||||
func (h Controller) Recv_1001(data []byte, player entity.Player) {
|
func (h Controller) Recv_1001(data []byte, player *entity.Player, res chan interface{}) {
|
||||||
pinfo := info.NewLoginSidInfo()
|
pinfo := info.NewLoginSidInfo()
|
||||||
struc.Unpack(bytes.NewBuffer(data), &pinfo)
|
t := parseCmd[info.LoginSidInfo](pinfo, data)
|
||||||
|
//login.CheakSession(t, player)
|
||||||
|
// login.OnData_1001(pinfo, player)
|
||||||
|
fmt.Println(login.CheakSession(t, player))
|
||||||
|
|
||||||
//fmt.Println(pinfo)
|
t1, _ := hex.DecodeString("0000045D37000003E9000186A600000000000186A6683F89CF6E69656F0000000000000000000000000008000F00000000000000000000000000000000000000000000000000000001000001DB0000018B000000000000A8C000000000000000000000000000000000000000080001388000000001000000017FFFFFFF00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030000000000000000000000000000000000000064000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001FFFFFFFF000000004E4F4E4F0000000000000000000000000000000000000001000000010000000100000001000000010000000100000001000000000003030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030000000100000064000000000000000000000000000000000000001F000000000000006400000000000093F4000093F4000000D5000000F7000000AD00000088000000920000008C0000009C00000000000000000000000000000000000000000000000000000004000027900000001B00004E6200000014000028380000002800004E3E0000002368493DC60000000000000000000000000000000000000000000100000000000000A937000007D1000186A600000000000186A66E69656F00000000000000000000000000000000000000000000000F0000000000000000000001DB0000018B0000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FFFFFFFF0000000000000001000000000000000000000000000000000000000000000000000000000000000000000000")
|
||||||
login.OnData_1001(pinfo, player)
|
res <- t1
|
||||||
//fmt.Println(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h Controller) Recv_105(data []byte, player entity.Player) {
|
|
||||||
pinfo := info.NewLoginSidInfo()
|
|
||||||
struc.Unpack(bytes.NewBuffer(data), &pinfo)
|
|
||||||
|
|
||||||
//fmt.Println(pinfo)
|
|
||||||
login.OnData_105(pinfo, player)
|
|
||||||
//fmt.Println(data)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,24 @@
|
|||||||
package controller
|
package controller
|
||||||
|
|
||||||
//分发cmd逻辑实现Controller
|
import (
|
||||||
|
"bytes"
|
||||||
|
|
||||||
|
"github.com/lunixbochs/struc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 分发cmd逻辑实现Controller
|
||||||
type Controller struct {
|
type Controller struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewController() *Controller {
|
func NewController() *Controller {
|
||||||
return &Controller{}
|
return &Controller{}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseCmd[T any](a T, data []byte) T {
|
||||||
|
// := info.NewLoginSidInfo()
|
||||||
|
struc.Unpack(bytes.NewBuffer(data), &a)
|
||||||
|
return a
|
||||||
|
//fmt.Println(pinfo)
|
||||||
|
//login.OnData_1001(pinfo, player)
|
||||||
|
//fmt.Println(data)
|
||||||
|
}
|
||||||
|
|||||||
26
logic/go.mod
26
logic/go.mod
@@ -1,5 +1,21 @@
|
|||||||
module blazing/logic
|
module blazing/logic
|
||||||
|
|
||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
require github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543
|
require github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/panjf2000/ants/v2 v2.11.3 // indirect
|
||||||
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
|
go.uber.org/zap v1.27.0 // indirect
|
||||||
|
golang.org/x/sync v0.11.0 // indirect
|
||||||
|
golang.org/x/sys v0.30.0 // indirect
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/gogf/gf/v2 v2.6.3
|
||||||
|
github.com/panjf2000/gnet/v2 v2.9.1
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
)
|
||||||
|
|||||||
21
logic/go.sum
21
logic/go.sum
@@ -1,2 +1,23 @@
|
|||||||
|
github.com/gogf/gf/v2 v2.9.0 h1:semN5Q5qGjDQEv4620VzxcJzJlSD07gmyJ9Sy9zfbHk=
|
||||||
|
github.com/gogf/gf/v2 v2.9.0/go.mod h1:sWGQw+pLILtuHmbOxoe0D+0DdaXxbleT57axOLH2vKI=
|
||||||
github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543 h1:GxMuVb9tJajC1QpbQwYNY1ZAo1EIE8I+UclBjOfjz/M=
|
github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543 h1:GxMuVb9tJajC1QpbQwYNY1ZAo1EIE8I+UclBjOfjz/M=
|
||||||
github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg=
|
github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg=
|
||||||
|
github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg=
|
||||||
|
github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek=
|
||||||
|
github.com/panjf2000/gnet/v2 v2.9.1 h1:bKewICy/0xnQ9PMzNaswpe/Ah14w1TrRk91LHTcbIlA=
|
||||||
|
github.com/panjf2000/gnet/v2 v2.9.1/go.mod h1:WQTxDWYuQ/hz3eccH0FN32IVuvZ19HewEWx0l62fx7E=
|
||||||
|
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
|
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||||
|
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||||
|
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||||
|
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||||
|
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||||
|
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
|
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||||
|
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|||||||
153
logic/main.go
153
logic/main.go
@@ -1,6 +1,12 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
|
||||||
|
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
|
||||||
|
"github.com/lunixbochs/struc"
|
||||||
|
"github.com/panjf2000/gnet/v2"
|
||||||
|
|
||||||
"blazing/common/core/info"
|
"blazing/common/core/info"
|
||||||
"blazing/common/data/entity"
|
"blazing/common/data/entity"
|
||||||
"blazing/common/socket"
|
"blazing/common/socket"
|
||||||
@@ -20,6 +26,7 @@ var (
|
|||||||
maininfocodec = info.NewInfoCodec() //创建一个InfoCodec实例
|
maininfocodec = info.NewInfoCodec() //创建一个InfoCodec实例
|
||||||
maincontroller = controller.NewController() //注入service
|
maincontroller = controller.NewController() //注入service
|
||||||
mainplayer sync.Map //玩家数据
|
mainplayer sync.Map //玩家数据
|
||||||
|
maincmdcache sync.Map //命令缓存
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -34,72 +41,118 @@ func Start(port string) {
|
|||||||
head.Callback = recv
|
head.Callback = recv
|
||||||
socket.NewServer(socket.WithPort(port), socket.WithSocketHandler(head)).Start()
|
socket.NewServer(socket.WithPort(port), socket.WithSocketHandler(head)).Start()
|
||||||
}
|
}
|
||||||
func recv(data handler.TomeeHeader) {
|
func recv(c gnet.Conn, data handler.TomeeHeader) {
|
||||||
// 处理接收到的TomeeHeader数据
|
// 处理接收到的TomeeHeader数据
|
||||||
// fmt.Println("收到数据:", data)
|
// fmt.Println("收到数据:", data)
|
||||||
processWithReflection(data)
|
processWithReflection(c, data)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getplayer(c gnet.Conn, userid uint32) *entity.Player { //TODO 这里待优化,可能存在内存泄漏问题
|
||||||
|
|
||||||
|
clientdata := c.Context().(*entity.ClientData)
|
||||||
|
if clientdata != nil && clientdata.Player != nil {
|
||||||
|
return clientdata.Player
|
||||||
|
}
|
||||||
|
var player *entity.Player
|
||||||
|
if player1, ok := mainplayer.Load((userid)); !ok {
|
||||||
|
player = entity.NewPlayer(
|
||||||
|
entity.WithUserID(userid), //注入ID
|
||||||
|
entity.WithConn(c), //注入conn
|
||||||
|
)
|
||||||
|
mainplayer.Store(userid, player)
|
||||||
|
} else {
|
||||||
|
player = player1.(*entity.Player) //取成功,否则创建
|
||||||
|
}
|
||||||
|
clientdata.Player = player
|
||||||
|
return player
|
||||||
|
}
|
||||||
|
|
||||||
// 遍历结构体方法并执行RECV_cmd
|
// 遍历结构体方法并执行RECV_cmd
|
||||||
func processWithReflection(pp handler.TomeeHeader) {
|
func processWithReflection(c gnet.Conn, pp handler.TomeeHeader) {
|
||||||
// 获取对象的反射值和类型
|
data := pp.Data
|
||||||
value := reflect.ValueOf(maincontroller)
|
player := getplayer(c, pp.UserID) //获取player实例
|
||||||
|
cmdlister, ok := maincmdcache.Load(pp.CMDID) //TODO 待实现对不同用户初始化方法以取消全局cmdcache
|
||||||
|
|
||||||
// 如果传入的是指针,获取其指向的值
|
if ok {
|
||||||
if value.Kind() == reflect.Ptr {
|
|
||||||
if value.IsNil() {
|
|
||||||
fmt.Println("错误: 传入的是nil指针")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
value = value.Elem()
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取类型
|
callhandler(cmdlister.(reflect.Value), data, player, cmd.EnumCommandID(pp.CMDID))
|
||||||
typ := value.Type()
|
|
||||||
|
|
||||||
// 遍历所有方法
|
// return
|
||||||
fmt.Printf("检查结构体 %s 的方法...\n", typ.Name(), typ.NumMethod())
|
} else {
|
||||||
for i := 0; i < typ.NumMethod(); i++ {
|
// 获取对象的反射值和类型
|
||||||
method := typ.Method(i)
|
value := reflect.ValueOf(maincontroller)
|
||||||
|
|
||||||
if method.Type.NumIn() == 3 { //&& // TODO 接收者 + 2个参数 一个是类型,一个是player
|
// 如果传入的是指针,获取其指向的值
|
||||||
//method.Type.In(1) == reflect.TypeOf([]byte{}
|
if value.Kind() == reflect.Ptr {
|
||||||
|
if value.IsNil() {
|
||||||
// 获取方法值
|
fmt.Println("错误: 传入的是nil指针")
|
||||||
methodValue := value.MethodByName(method.Name)
|
return
|
||||||
|
|
||||||
// 准备参数
|
|
||||||
cmd1 := method.Name[len("Recv_"):len(method.Name)]
|
|
||||||
cmdint, _ := strconv.Atoi(cmd1)
|
|
||||||
if cmdint == int(pp.CMDID) {
|
|
||||||
if !cmd.Isexist(cmd.CommandID, cmd.EnumCommandID(pp.CMDID)) {
|
|
||||||
fmt.Println("ID方法存在cmd未注册", pp.CMDID, cmd.CommandID)
|
|
||||||
}
|
|
||||||
// fmt.Println(" 找到匹配的RECV_cmd方法,准备调用...", pp.Cmdid, Command.ID)
|
|
||||||
data := pp.Data
|
|
||||||
// trmp := getincodec(cmd.EnumCommandID(pp.CMDID), data)
|
|
||||||
//fmt.Println(trmp)
|
|
||||||
// serializer := serialize.NewFixedVarDeserializer(nil)
|
|
||||||
|
|
||||||
// tt1 := serializer.Deserialize(data, trmp)
|
|
||||||
// g.Dump(trmp)
|
|
||||||
// g.Dump(tt1)
|
|
||||||
// 调用方法
|
|
||||||
methodValue.Call([]reflect.Value{
|
|
||||||
// reflect.ValueOf(cmdint),
|
|
||||||
reflect.ValueOf(data),
|
|
||||||
reflect.ValueOf(entity.Player{}),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
value = value.Elem()
|
||||||
//return
|
|
||||||
}
|
}
|
||||||
//}
|
|
||||||
|
// 获取类型
|
||||||
|
typ := value.Type()
|
||||||
|
|
||||||
|
// 遍历所有方法
|
||||||
|
fmt.Printf("检查结构体 %s 的方法...\n", typ.Name(), typ.NumMethod())
|
||||||
|
for i := 0; i < typ.NumMethod(); i++ {
|
||||||
|
method := typ.Method(i)
|
||||||
|
|
||||||
|
if method.Type.NumIn() == 4 { //&& // TODO 接收者 + 2个参数 一个是类型,一个是player
|
||||||
|
//method.Type.In(1) == reflect.TypeOf([]byte{}
|
||||||
|
|
||||||
|
// 获取方法值
|
||||||
|
methodValue := value.MethodByName(method.Name)
|
||||||
|
|
||||||
|
// 准备参数
|
||||||
|
cmd1 := method.Name[len("Recv_"):len(method.Name)]
|
||||||
|
cmdint, _ := strconv.Atoi(cmd1)
|
||||||
|
if cmdint == int(pp.CMDID) {
|
||||||
|
if !cmd.Isexist(cmd.CommandID, cmd.EnumCommandID(pp.CMDID)) {
|
||||||
|
fmt.Println("ID方法存在cmd未注册", pp.CMDID, cmd.CommandID)
|
||||||
|
}
|
||||||
|
maincmdcache.Store(pp.CMDID, methodValue) //TODO 待实现对不同用户初始化方法以取消全局cmdcache
|
||||||
|
callhandler(methodValue, data, player, cmd.EnumCommandID(pp.CMDID))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//return
|
||||||
|
}
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func callhandler(cmdlister reflect.Value, data []byte, player *entity.Player, cmd cmd.EnumCommandID) {
|
||||||
|
//TODO 待实现返回参数返回客户端???实现直接返回对象进行序列化 传递chan待返回
|
||||||
|
//TODO 已实现,待测试
|
||||||
|
recvchan := make(chan any, 1) //传递自定义chan
|
||||||
|
go func() {
|
||||||
|
retv := <-recvchan
|
||||||
|
|
||||||
|
switch ttt := retv.(type) {
|
||||||
|
case []byte:
|
||||||
|
player.SendPackBytes(cmd, ttt)
|
||||||
|
|
||||||
|
default:
|
||||||
|
var data1 bytes.Buffer
|
||||||
|
struc.Unpack(&data1, &ttt)
|
||||||
|
player.SendPackBytes(cmd, data1.Bytes())
|
||||||
|
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
cmdlister.Call([]reflect.Value{
|
||||||
|
reflect.ValueOf(data),
|
||||||
|
reflect.ValueOf(player),
|
||||||
|
reflect.ValueOf(recvchan),
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func getincodec(cmdid cmd.EnumCommandID, data []byte) reflect.Value {
|
func getincodec(cmdid cmd.EnumCommandID, data []byte) reflect.Value {
|
||||||
// 获取对象的反射值和类型
|
// 获取对象的反射值和类型
|
||||||
value := reflect.ValueOf(maininfocodec)
|
value := reflect.ValueOf(maininfocodec)
|
||||||
|
|||||||
@@ -3,10 +3,24 @@ package login
|
|||||||
import (
|
import (
|
||||||
"blazing/common/core/info"
|
"blazing/common/core/info"
|
||||||
"blazing/common/data/entity"
|
"blazing/common/data/entity"
|
||||||
|
"blazing/cool"
|
||||||
|
"context"
|
||||||
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func OnData_1001(c info.LoginSidInfo, p entity.Player) {
|
func CheakSession(c info.LoginSidInfo, p *entity.Player) bool {
|
||||||
fmt.Println(c.Sid)
|
// tt, _ := cool.CacheManager.Keys(context.Background())
|
||||||
|
//g.Dump(tt)
|
||||||
|
t1 := hex.EncodeToString(c.Sid)
|
||||||
|
|
||||||
|
t2 := strings.Trim(t1, " ")
|
||||||
|
t, err := cool.CacheManager.Get(context.Background(), t2)
|
||||||
|
fmt.Println("后端获取", string(c.Sid), t, err)
|
||||||
|
if t.Uint32() == p.UserID {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ import (
|
|||||||
"blazing/common/data/entity"
|
"blazing/common/data/entity"
|
||||||
)
|
)
|
||||||
|
|
||||||
func OnData_105(c info.LoginSidInfo, p entity.Player) {
|
func OnData_105(c info.LoginSidInfo, p *entity.Player) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
11
login/go.mod
11
login/go.mod
@@ -13,10 +13,15 @@ require (
|
|||||||
github.com/jackc/puddle/v2 v2.2.1 // indirect
|
github.com/jackc/puddle/v2 v2.2.1 // indirect
|
||||||
github.com/kr/pretty v0.3.0 // indirect
|
github.com/kr/pretty v0.3.0 // indirect
|
||||||
github.com/kr/text v0.2.0 // indirect
|
github.com/kr/text v0.2.0 // indirect
|
||||||
|
github.com/panjf2000/ants/v2 v2.11.3 // indirect
|
||||||
github.com/redis/go-redis/v9 v9.5.1 // indirect
|
github.com/redis/go-redis/v9 v9.5.1 // indirect
|
||||||
github.com/rogpeppe/go-internal v1.6.1 // indirect
|
github.com/rogpeppe/go-internal v1.6.1 // indirect
|
||||||
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.24.0 // indirect
|
go.opentelemetry.io/otel/metric v1.24.0 // indirect
|
||||||
golang.org/x/sync v0.6.0 // indirect
|
go.uber.org/multierr v1.11.0 // indirect
|
||||||
|
go.uber.org/zap v1.27.0 // indirect
|
||||||
|
golang.org/x/sync v0.11.0 // indirect
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
@@ -38,11 +43,13 @@ require (
|
|||||||
github.com/jinzhu/inflection v1.0.0 // indirect
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
github.com/jinzhu/now v1.1.5 // indirect
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
github.com/lib/pq v1.10.9 // indirect
|
github.com/lib/pq v1.10.9 // indirect
|
||||||
|
github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543
|
||||||
github.com/magiconair/properties v1.8.7 // indirect
|
github.com/magiconair/properties v1.8.7 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.15 // indirect
|
github.com/mattn/go-runewidth v0.0.15 // indirect
|
||||||
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
github.com/olekukonko/tablewriter v0.0.5 // indirect
|
||||||
|
github.com/panjf2000/gnet/v2 v2.9.1
|
||||||
github.com/rivo/uniseg v0.4.7 // indirect
|
github.com/rivo/uniseg v0.4.7 // indirect
|
||||||
github.com/robfig/cron v1.2.0 // indirect
|
github.com/robfig/cron v1.2.0 // indirect
|
||||||
go.opentelemetry.io/otel v1.24.0 // indirect
|
go.opentelemetry.io/otel v1.24.0 // indirect
|
||||||
@@ -50,7 +57,7 @@ require (
|
|||||||
go.opentelemetry.io/otel/trace v1.24.0 // indirect
|
go.opentelemetry.io/otel/trace v1.24.0 // indirect
|
||||||
golang.org/x/crypto v0.19.0 // indirect
|
golang.org/x/crypto v0.19.0 // indirect
|
||||||
golang.org/x/net v0.21.0 // indirect
|
golang.org/x/net v0.21.0 // indirect
|
||||||
golang.org/x/sys v0.17.0 // indirect
|
golang.org/x/sys v0.30.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.14.0 // indirect
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
|||||||
18
login/go.sum
18
login/go.sum
@@ -56,6 +56,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
|||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||||
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
|
github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543 h1:GxMuVb9tJajC1QpbQwYNY1ZAo1EIE8I+UclBjOfjz/M=
|
||||||
|
github.com/lunixbochs/struc v0.0.0-20241101090106-8d528fa2c543/go.mod h1:vy1vK6wD6j7xX6O6hXe621WabdtNkou2h7uRtTfRMyg=
|
||||||
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||||
github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
|
github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
|
||||||
github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||||
@@ -70,6 +72,10 @@ github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6T
|
|||||||
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||||
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
|
||||||
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
|
||||||
|
github.com/panjf2000/ants/v2 v2.11.3 h1:AfI0ngBoXJmYOpDh9m516vjqoUu2sLrIVgppI9TZVpg=
|
||||||
|
github.com/panjf2000/ants/v2 v2.11.3/go.mod h1:8u92CYMUc6gyvTIw8Ru7Mt7+/ESnJahz5EVtqfrilek=
|
||||||
|
github.com/panjf2000/gnet/v2 v2.9.1 h1:bKewICy/0xnQ9PMzNaswpe/Ah14w1TrRk91LHTcbIlA=
|
||||||
|
github.com/panjf2000/gnet/v2 v2.9.1/go.mod h1:WQTxDWYuQ/hz3eccH0FN32IVuvZ19HewEWx0l62fx7E=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
|
github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
|
||||||
@@ -85,6 +91,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
|
|||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||||
|
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
|
||||||
|
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
|
||||||
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
|
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
|
||||||
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
|
go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U=
|
||||||
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
|
go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg=
|
||||||
@@ -97,16 +105,24 @@ go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJC
|
|||||||
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
|
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
|
||||||
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
|
go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM=
|
||||||
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
|
go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8=
|
||||||
|
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||||
|
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||||
|
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
|
||||||
|
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||||
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
|
||||||
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
|
||||||
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
|
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
|
||||||
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
|
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
|
||||||
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
|
golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
|
||||||
|
golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
|
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
|
||||||
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
|
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
|
||||||
|
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
|
||||||
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
|
||||||
@@ -116,6 +132,8 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8
|
|||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
|
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
|
||||||
|
"github.com/lunixbochs/struc"
|
||||||
|
"github.com/panjf2000/gnet/v2"
|
||||||
|
|
||||||
|
"blazing/common/core/info/login"
|
||||||
"blazing/common/socket"
|
"blazing/common/socket"
|
||||||
"blazing/common/socket/handler"
|
"blazing/common/socket/handler"
|
||||||
_ "blazing/contrib/files/local"
|
_ "blazing/contrib/files/local"
|
||||||
@@ -38,14 +44,61 @@ func Start(port string) {
|
|||||||
|
|
||||||
head := handler.NewTomeeHandler()
|
head := handler.NewTomeeHandler()
|
||||||
head.Callback = recv
|
head.Callback = recv
|
||||||
socket.NewServer(socket.WithPort(port), socket.WithSocketHandler(head)).Start()
|
socket.NewServer(socket.WithPort(port), socket.WithCORS(), socket.WithSocketHandler(head)).Start()
|
||||||
}
|
}
|
||||||
func recv(data handler.TomeeHeader) {
|
|
||||||
|
func recv(c gnet.Conn, data handler.TomeeHeader) {
|
||||||
|
|
||||||
fmt.Println(data)
|
fmt.Println(data)
|
||||||
|
t, _ := cool.CacheManager.Get(context.Background(), data.Data)
|
||||||
|
fmt.Println(t.String())
|
||||||
|
ret := login.NewCommendSvrInfo()
|
||||||
|
|
||||||
|
lofin := login.NewServerInfo()
|
||||||
|
lofin.OnlineID = 1
|
||||||
|
lofin.UserCnt = 77
|
||||||
|
lofin.IP = "127.0.0.1"
|
||||||
|
lofin.Port = 27777
|
||||||
|
lofin.Friends = 1
|
||||||
|
|
||||||
|
ret.ServerList = append(ret.ServerList, *lofin)
|
||||||
|
|
||||||
|
var trr bytes.Buffer
|
||||||
|
|
||||||
|
err := struc.Pack(&trr, ret)
|
||||||
|
fmt.Println(err)
|
||||||
|
t11, _ := struc.Sizeof(ret)
|
||||||
|
t1 := handler.TomeeHeader{
|
||||||
|
Len: uint32(t11 + 17),
|
||||||
|
CMDID: 105,
|
||||||
|
Version: "7",
|
||||||
|
UserID: 1,
|
||||||
|
// Data: bytt.Bytes(),
|
||||||
|
}
|
||||||
|
var trr1 bytes.Buffer
|
||||||
|
err = struc.Pack(&trr1, &t1)
|
||||||
|
fmt.Println(hex.EncodeToString(trr1.Bytes()))
|
||||||
|
//0000003f3700000001000000000000006900000000
|
||||||
|
//0000003f37000000690000000100000000
|
||||||
|
//0000003F3700000069000186A600000000
|
||||||
|
fmt.Println(hex.EncodeToString(trr.Bytes()))
|
||||||
|
c.Write(trr1.Bytes())
|
||||||
|
|
||||||
|
c.Write(trr.Bytes())
|
||||||
|
|
||||||
// 处理接收到的TomeeHeader数据
|
// 处理接收到的TomeeHeader数据
|
||||||
// fmt.Println("收到数据:", data)
|
// fmt.Println("收到数据:", data)
|
||||||
//processWithReflection(data)
|
//processWithReflection(data)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func packheader(cmd, userid uint32, data []byte) *handler.TomeeHeader {
|
||||||
|
|
||||||
|
return &handler.TomeeHeader{
|
||||||
|
Len: uint32(63),
|
||||||
|
CMDID: 105,
|
||||||
|
Version: "7",
|
||||||
|
UserID: 1,
|
||||||
|
//Data: bytt.Bytes(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package middleware
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/modules/base/config"
|
"blazing/modules/base/config"
|
||||||
"fmt"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
@@ -22,7 +21,7 @@ func MiddlewareCORS(r *ghttp.Request) {
|
|||||||
r.Response.WriteStatus(http.StatusOK)
|
r.Response.WriteStatus(http.StatusOK)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
fmt.Println(r.Response.Header())
|
// fmt.Println(r.Response.Header())
|
||||||
//g.Dump(r.Response.Server.SetConfig(gtt))
|
//g.Dump(r.Response.Server.SetConfig(gtt))
|
||||||
//r.Response.Header().Del("Server") // 删除Server头
|
//r.Response.Header().Del("Server") // 删除Server头
|
||||||
// r.Response.Header().Set("Server", "blazing")
|
// r.Response.Header().Set("Server", "blazing")
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ func (c *BlazingController) GetSession(ctx context.Context, req *SessionReq) (re
|
|||||||
|
|
||||||
// 保存后端校验的SID
|
// 保存后端校验的SID
|
||||||
backendSID := res.Session[8 : len(res.Session)-8]
|
backendSID := res.Session[8 : len(res.Session)-8]
|
||||||
|
fmt.Println("存储sid", backendSID)
|
||||||
if err := service.NewLoginServiceService().SaveSessionId(backendSID, gconv.String(accountID)); err != nil {
|
if err := service.NewLoginServiceService().SaveSessionId(backendSID, gconv.String(accountID)); err != nil {
|
||||||
res.Code = 400
|
res.Code = 400
|
||||||
res.Msg = err.Error()
|
res.Msg = err.Error()
|
||||||
|
|||||||
@@ -2,6 +2,12 @@ package service
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"blazing/cool"
|
"blazing/cool"
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/gogf/gf/v2/os/gctx"
|
||||||
)
|
)
|
||||||
|
|
||||||
type LoginService struct {
|
type LoginService struct {
|
||||||
@@ -14,8 +20,13 @@ func NewLoginServiceService() *LoginService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *LoginService) SaveSessionId(session, userid string) error {
|
func (s *LoginService) SaveSessionId(session string, userid string) error {
|
||||||
|
|
||||||
|
cool.CacheManager.Set(gctx.New(), strings.Trim(session, " "), userid, time.Hour*24)
|
||||||
// gsvc.SetRegistry(etcd.New(`127.0.0.1:2379`))
|
// gsvc.SetRegistry(etcd.New(`127.0.0.1:2379`))
|
||||||
|
t, err := cool.CacheManager.Contains(context.Background(), strings.Trim(session, " "))
|
||||||
|
|
||||||
|
fmt.Println("前端获取", session, t, err)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
9232
public/xml/item_info.xml
Normal file
9232
public/xml/item_info.xml
Normal file
File diff suppressed because it is too large
Load Diff
103
public/xml/level_exp_info.xml
Normal file
103
public/xml/level_exp_info.xml
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
<experience_list>
|
||||||
|
<level exp="0">0</level>
|
||||||
|
<level exp="10">1</level>
|
||||||
|
<level exp="23">2</level>
|
||||||
|
<level exp="47">3</level>
|
||||||
|
<level exp="76">4</level>
|
||||||
|
<level exp="114">5</level>
|
||||||
|
<level exp="158">6</level>
|
||||||
|
<level exp="212">7</level>
|
||||||
|
<level exp="271">8</level>
|
||||||
|
<level exp="339">9</level>
|
||||||
|
<level exp="413">10</level>
|
||||||
|
<level exp="497">11</level>
|
||||||
|
<level exp="586">12</level>
|
||||||
|
<level exp="684">13</level>
|
||||||
|
<level exp="788">14</level>
|
||||||
|
<level exp="902">15</level>
|
||||||
|
<level exp="1021">16</level>
|
||||||
|
<level exp="1149">17</level>
|
||||||
|
<level exp="1283">18</level>
|
||||||
|
<level exp="1427">19</level>
|
||||||
|
<level exp="1576">20</level>
|
||||||
|
<level exp="1734">21</level>
|
||||||
|
<level exp="1898">22</level>
|
||||||
|
<level exp="2072">23</level>
|
||||||
|
<level exp="2251">24</level>
|
||||||
|
<level exp="2439">25</level>
|
||||||
|
<level exp="2633">26</level>
|
||||||
|
<level exp="2837">27</level>
|
||||||
|
<level exp="3046">28</level>
|
||||||
|
<level exp="3264">29</level>
|
||||||
|
<level exp="3488">30</level>
|
||||||
|
<level exp="3721">31</level>
|
||||||
|
<level exp="3961">32</level>
|
||||||
|
<level exp="4209">33</level>
|
||||||
|
<level exp="4463">34</level>
|
||||||
|
<level exp="4727">35</level>
|
||||||
|
<level exp="4996">36</level>
|
||||||
|
<level exp="5274">37</level>
|
||||||
|
<level exp="5558">38</level>
|
||||||
|
<level exp="5852">39</level>
|
||||||
|
<level exp="6151">40</level>
|
||||||
|
<level exp="6459">41</level>
|
||||||
|
<level exp="6773">42</level>
|
||||||
|
<level exp="7097">43</level>
|
||||||
|
<level exp="7426">44</level>
|
||||||
|
<level exp="7764">45</level>
|
||||||
|
<level exp="8108">46</level>
|
||||||
|
<level exp="8462">47</level>
|
||||||
|
<level exp="8821">48</level>
|
||||||
|
<level exp="9189">49</level>
|
||||||
|
<level exp="9563">50</level>
|
||||||
|
<level exp="9947">51</level>
|
||||||
|
<level exp="10336">52</level>
|
||||||
|
<level exp="10734">53</level>
|
||||||
|
<level exp="11138">54</level>
|
||||||
|
<level exp="11552">55</level>
|
||||||
|
<level exp="11971">56</level>
|
||||||
|
<level exp="12399">57</level>
|
||||||
|
<level exp="12833">58</level>
|
||||||
|
<level exp="13277">59</level>
|
||||||
|
<level exp="13726">60</level>
|
||||||
|
<level exp="14184">61</level>
|
||||||
|
<level exp="14648">62</level>
|
||||||
|
<level exp="15122">63</level>
|
||||||
|
<level exp="15601">64</level>
|
||||||
|
<level exp="16089">65</level>
|
||||||
|
<level exp="16583">66</level>
|
||||||
|
<level exp="17087">67</level>
|
||||||
|
<level exp="17596">68</level>
|
||||||
|
<level exp="18114">69</level>
|
||||||
|
<level exp="18638">70</level>
|
||||||
|
<level exp="19172">71</level>
|
||||||
|
<level exp="19711">72</level>
|
||||||
|
<level exp="20259">73</level>
|
||||||
|
<level exp="20813">74</level>
|
||||||
|
<level exp="21377">75</level>
|
||||||
|
<level exp="21946">76</level>
|
||||||
|
<level exp="22524">77</level>
|
||||||
|
<level exp="23108">78</level>
|
||||||
|
<level exp="23702">79</level>
|
||||||
|
<level exp="24301">80</level>
|
||||||
|
<level exp="24909">81</level>
|
||||||
|
<level exp="25523">82</level>
|
||||||
|
<level exp="26147">83</level>
|
||||||
|
<level exp="26776">84</level>
|
||||||
|
<level exp="27414">85</level>
|
||||||
|
<level exp="28058">86</level>
|
||||||
|
<level exp="28712">87</level>
|
||||||
|
<level exp="29371">88</level>
|
||||||
|
<level exp="30039">89</level>
|
||||||
|
<level exp="30713">90</level>
|
||||||
|
<level exp="31397">91</level>
|
||||||
|
<level exp="32086">92</level>
|
||||||
|
<level exp="32784">93</level>
|
||||||
|
<level exp="33488">94</level>
|
||||||
|
<level exp="34202">95</level>
|
||||||
|
<level exp="34921">96</level>
|
||||||
|
<level exp="35650">97</level>
|
||||||
|
<level exp="36383">98</level>
|
||||||
|
<level exp="37127">99</level>
|
||||||
|
<level exp="37876">100</level>
|
||||||
|
</experience_list>
|
||||||
36
public/xml/map_hot_info.xml
Normal file
36
public/xml/map_hot_info.xml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!--
|
||||||
|
多个地图ID归属于一个星球
|
||||||
|
此XML表主要配置一些各个星球有可能需要用到的共用信息, 比如目前在世界地图上显示玩家所在位置
|
||||||
|
-->
|
||||||
|
<superMaps>
|
||||||
|
<maps id="1" name="传送舱" x="" y=""/>
|
||||||
|
<maps id="4" name="船长室" x="" y=""/>
|
||||||
|
<maps id="5" name="实验室" x="" y=""/>
|
||||||
|
<maps id="6" name="动力室" x="" y=""/>
|
||||||
|
<maps id="7" name="瞭望舱" x="" y=""/>
|
||||||
|
<maps id="8" name="机械室" x="" y=""/>
|
||||||
|
<maps id="9" name="资料室" x="" y=""/>
|
||||||
|
<maps id="19" name="太空站" x="" y=""/>
|
||||||
|
<maps id="101" name="教官办公室" x="" y=""/>
|
||||||
|
<maps id="103" name="瞭望露台" x="" y=""/>
|
||||||
|
<maps id="107" name="发明室" x="" y=""/>
|
||||||
|
<!--星球-->
|
||||||
|
<maps id="10 11 12 13" name="克洛斯星" galaxy="1" x="358" y="46"/>
|
||||||
|
<maps id="15 16 17" name="火山星" galaxy="1" x="533" y="46"/>
|
||||||
|
<maps id="20 21 22" name="海洋星" galaxy="1" x="190" y="11"/>
|
||||||
|
<maps id="25 26 27" name="云霄星" galaxy="1" x="652" y="24"/>
|
||||||
|
<maps id="30 31 32 33 34 35 36" name="赫尔卡星" galaxy="1" x="45" y="34"/>
|
||||||
|
<maps id="40 41 42 43" name="塞西利亚星" galaxy="1" x="1012" y="30"/>
|
||||||
|
<maps id="17" name="双子阿尔法星" galaxy="1" x="822" y="96"/>
|
||||||
|
<maps id="47 49" name="双子贝塔星" galaxy="1" x="883" y="63"/>
|
||||||
|
<maps id="51 52 53" name="斯诺星" galaxy="1" x="1290" y="15"/>
|
||||||
|
<maps id="54 55 56" name="露西欧星" galaxy="1" x="1405" y="120"/>
|
||||||
|
<maps id="57 58 59" name="尼古尔星" galaxy="2" x="30" y="50"/>
|
||||||
|
<maps id="60 61 62 63 64" name="塔克星" galaxy="2" x="135" y="44"/>
|
||||||
|
<maps id="325 326 327" name="艾迪星" galaxy="2" x="250" y="30"/>
|
||||||
|
<maps id="328" name="斯科尔星" galaxy="2" x="375" y="40"/>
|
||||||
|
<maps id="333 334" name="普雷空间站" galaxy="2" x="500" y="50"/>
|
||||||
|
<maps id="338 339" name="哈默星" galaxy="2" x="590" y="70"/>
|
||||||
|
<maps id="314" name="拜伦号" galaxy="1" x="1160" y="55"/>
|
||||||
|
</superMaps>
|
||||||
1488
public/xml/map_info.xml
Normal file
1488
public/xml/map_info.xml
Normal file
File diff suppressed because it is too large
Load Diff
58
public/xml/materal_traits_list_info.xml
Normal file
58
public/xml/materal_traits_list_info.xml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
<!--以Group为单位, ItemGroup表示特性组所需要的材料清单, Idx表示材料的提交顺序, material-->
|
||||||
|
<MaterialTraitsList>
|
||||||
|
<Group>
|
||||||
|
<ItemGroup>
|
||||||
|
<Item ID="400030" Idx="1"/>
|
||||||
|
<Item ID="400030" Idx="2"/>
|
||||||
|
<Item ID="400030" Idx="3"/>
|
||||||
|
<Item ID="400028" Idx="4"/>
|
||||||
|
</ItemGroup>
|
||||||
|
<MaterialGroup>
|
||||||
|
<Material ID="1008" />
|
||||||
|
<Material ID="1018" />
|
||||||
|
<Material ID="1023" />
|
||||||
|
<Material ID="1031" />
|
||||||
|
</MaterialGroup>
|
||||||
|
</Group>
|
||||||
|
</MaterialTraitsList>
|
||||||
|
|
||||||
|
|
||||||
|
<!--Idx="1006" Desc="叶绿" Desc2="草属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1007" Desc="流水" Desc2="水属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1008" Desc="炎火" Desc2="火属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1009" Desc="飞空" Desc2="飞行属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1010" Desc="蓄电" Desc2="电属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1011" Desc="机能" Desc2="机械属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1012" Desc="碎裂" Desc2="地面属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1013" Desc="平衡" Desc2="普通属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1014" Desc="冰霜" Desc2="冰属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1015" Desc="魔幻" Desc2="超能属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1016" Desc="战意" Desc2="战斗属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1017" Desc="光环" Desc2="光属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1018" Desc="黑夜" Desc2="暗影属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1019" Desc="奇异" Desc2="神秘属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1020" Desc="威严" Desc2="龙属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1021" Desc="圣灵?" Desc2="圣灵属性技能伤害增加5%"-->
|
||||||
|
<!--Idx="1022" Desc="精准" Desc2="所有技能命中率增加5%"-->
|
||||||
|
<!--Idx="1023" Desc="会心" Desc2="所有技能的致命一击率增加1/16"-->
|
||||||
|
<!--Idx="1024" Desc="坚硬" Desc2="受到的伤害减少5%"-->
|
||||||
|
<!--Idx="1025" Desc="回避" Desc2="被技能命中的几率减少5%"-->
|
||||||
|
<!--Idx="1026" Desc="顽强" Desc2="受到致死攻击时有3%几率余下1点体力"-->
|
||||||
|
<!--Idx="1027" Desc="瞬杀" Desc2="进攻类技能有3%几率秒杀对方"-->
|
||||||
|
<!--Idx="1028" Desc="回神" Desc2="精灵体力降低到1/8时有3%几率体力回满"-->
|
||||||
|
<!--Idx="1029" Desc="带电" Desc2="受到普通攻击时有3%几率使对方麻痹"-->
|
||||||
|
<!--Idx="1030" Desc="中毒" Desc2="受到普通攻击时有3%几率使对方中毒"-->
|
||||||
|
<!--Idx="1031" Desc="高热" Desc2="受到普通攻击时有3%几率使对方烧伤"-->
|
||||||
|
<!--Idx="1032" Desc="冰冷" Desc2="受到普通攻击时有3%几率使对方冻伤"-->
|
||||||
|
<!--Idx="1033" Desc="阴森" Desc2="受到普通攻击时有3%几率使对方害怕"-->
|
||||||
|
<!--Idx="1034" Desc="睡眠" Desc2="受到普通攻击时有3%几率使对方睡眠"-->
|
||||||
|
<!--Idx="1035" Desc="反抗" Desc2="受到特殊攻击时有5%概率使对面攻击降低1个等级"-->
|
||||||
|
<!--Idx="1036" Desc="反驳" Desc2="受到特殊攻击时有5%概率使对面防御降低1个等级"-->
|
||||||
|
<!--Idx="1037" Desc="忽略" Desc2="受到特殊攻击时有5%概率使对面特攻降低1个等级"-->
|
||||||
|
<!--Idx="1038" Desc="草率" Desc2="受到特殊攻击时有5%概率使对面特防降低1个等级"-->
|
||||||
|
<!--Idx="1040" Desc="慌张" Desc2="受到特殊攻击时有5%概率使对面速度降低1个等级"-->
|
||||||
|
<!--Idx="1041" Desc="反击" Desc2="受到任何攻击时有5%概率使自身攻击提升1个等级"-->
|
||||||
|
<!--Idx="1042" Desc="抵抗" Desc2="受到任何攻击时有5%概率使自身防御提升1个等级"-->
|
||||||
|
<!--Idx="1043" Desc="反攻" Desc2="受到任何攻击时有5%概率使自身特攻提升1个等级"-->
|
||||||
|
<!--Idx="1044" Desc="坚韧" Desc2="受到任何攻击时有5%概率使自身特防提升1个等级"-->
|
||||||
|
<!--Idx="1045" Desc="借风" Desc2="受到任何攻击时有5%概率使自身速度提升1个等级"-->
|
||||||
121
public/xml/monster_refresh.xml
Normal file
121
public/xml/monster_refresh.xml
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<monsters xmlns="nieo.seer.org.monster-refresh">
|
||||||
|
<map id="10" desc="克洛斯星">
|
||||||
|
<monster id="10" desc="皮皮" min_level="1" max_level="2" capturable="true" rate="0.97"/>
|
||||||
|
<monster id="164" desc="闪光皮皮" min_level="1" max_level="2" capturable="true" rate="0.02"/>
|
||||||
|
<monster id="1" desc="布布种子" min_level="1" max_level="2" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="11" desc="克洛斯星沼泽">
|
||||||
|
<monster id="16" desc="仙人球" min_level="11" max_level="12" capturable="true" rate="0.97"/>
|
||||||
|
<monster id="27" desc="小豆芽" min_level="11" max_level="12" capturable="true" rate="0.03"/>
|
||||||
|
<monster id="122" desc="达尔" min_level="1" max_level="1" capturable="true" rate="0.00024">
|
||||||
|
<restrictions type="timePolicy" value="19:00-24:00"/>
|
||||||
|
</monster>
|
||||||
|
</map>
|
||||||
|
<map id="15" desc="火山星">
|
||||||
|
<monster id="38" desc="火炎贝" min_level="7" max_level="8" capturable="true" rate="0.99"/>
|
||||||
|
<monster id="7" desc="小火猴" min_level="12" max_level="12" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="16" desc="火山星山洞">
|
||||||
|
<monster id="35" desc="吉尔" min_level="11" max_level="12" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="37" desc="洛吉拉斯" min_level="46" max_level="46" capturable="false" rate="0.39"/>
|
||||||
|
<monster id="133" desc="巴多" min_level="14" max_level="14" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="17" desc="火山星山洞深处">
|
||||||
|
<monster id="335" desc="赤甲虫" min_level="15" max_level="16" capturable="true" rate="0.59"/>
|
||||||
|
<monster id="337" desc="赤西西比" min_level="40" max_level="40" capturable="false" rate="0.4"/>
|
||||||
|
<monster id="62" desc="格林" min_level="16" max_level="16" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="20" desc="海洋星">
|
||||||
|
<monster id="30" desc="贝尔" min_level="5" max_level="6" capturable="true" rate="0.99"/>
|
||||||
|
<monster id="4" desc="伊优" min_level="11" max_level="12" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="21" desc="海洋星深水区">
|
||||||
|
<monster id="33" desc="利牙鱼" min_level="15" max_level="16" capturable="true" rate="0.99"/>
|
||||||
|
<monster id="108" desc="布鲁" min_level="12" max_level="13" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="22" desc="海洋星海底">
|
||||||
|
<monster id="198" desc="小鳍鱼" min_level="14" max_level="15" capturable="true" rate="0.59"/>
|
||||||
|
<monster id="199" desc="贝壳鱼" min_level="26" max_level="26" capturable="false" rate="0.40"/>
|
||||||
|
<monster id="108" desc="布鲁" min_level="12" max_level="13" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="25" desc="云霄星">
|
||||||
|
<monster id="22" desc="毛毛" min_level="3" max_level="4" capturable="true" rate="0.99"/>
|
||||||
|
<monster id="53" desc="莫比" min_level="3" max_level="4" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="26" desc="云霄星高空层">
|
||||||
|
<monster id="25" desc="幽浮" min_level="3" max_level="14" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="26" desc="哈尔浮" min_level="26" max_level="26" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="27" desc="云霄星最高层">
|
||||||
|
<monster id="249" desc="浮空苗" min_level="13" max_level="14" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="251" desc="萨洛姆斯" min_level="36" max_level="36" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="30" desc="赫尔卡星">
|
||||||
|
<monster id="13" desc="比比鼠" min_level="13" max_level="14" capturable="true" rate="0.99"/>
|
||||||
|
<monster id="59" desc="西塔" min_level="5" max_level="5" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="31" desc="赫尔卡星遗迹">
|
||||||
|
<monster id="43" desc="罗奇" min_level="19" max_level="20" capturable="true" rate="0.58"/>
|
||||||
|
<monster id="45" desc="西萨琉拉" min_level="31" max_level="31" capturable="false" rate="0.4"/>
|
||||||
|
<monster id="19" desc="利利" min_level="5" max_level="5" capturable="true" rate="0.01"/>
|
||||||
|
<monster id="284" desc="闪光利利" min_level="5" max_level="5" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="33" desc="神秘通道">
|
||||||
|
<monster id="145" desc="吉斯" min_level="15" max_level="20" capturable="true" rate="1"/>
|
||||||
|
</map>
|
||||||
|
<map id="40" desc="塞西莉亚星">
|
||||||
|
<monster id="116" desc="卡卡" min_level="14" max_level="15" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="117" desc="利兹" min_level="40" max_level="40" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="41" desc="寒冰溶洞">
|
||||||
|
<monster id="67" desc="布林克斯" min_level="40" max_level="40" capturable="false" rate="0.99"/>
|
||||||
|
<monster id="65" desc="林克" min_level="14" max_level="14" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="43" desc="赫尔卡飞船">
|
||||||
|
<monster id="51" desc="玄冰兽" min_level="25" max_level="26" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="52" desc="急冻兽" min_level="45" max_level="45" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="105" desc="双子阿尔法星">
|
||||||
|
<monster id="89" desc="迪达" min_level="16" max_level="17" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="90" desc="迪尔克" min_level="36" max_level="36" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="106" desc="阿尔法星岩地">
|
||||||
|
<monster id="188" desc="加格" min_level="17" max_level="18" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="189" desc="加格尔" min_level="36" max_level="36" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="46" desc="海盗能源站">
|
||||||
|
<monster id="97" desc="鲁克" min_level="25" max_level="26" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="98" desc="卡鲁加" min_level="40" max_level="40" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="47" desc="双子贝塔星">
|
||||||
|
<monster id="119" desc="莱尼" min_level="15" max_level="16" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="120" desc="特鲁尼" min_level="40" max_level="40" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="48" desc="海盗要塞废墟">
|
||||||
|
<monster id="184" desc="古鲁" min_level="17" max_level="18" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="185" desc="梅鲁" min_level="40" max_level="40" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="49" desc="贝塔星荒原">
|
||||||
|
<monster id="105" desc="丁格" min_level="15" max_level="16" capturable="true" rate="0.2"/>
|
||||||
|
<monster id="106" desc="丁加鲁" min_level="26" max_level="26" capturable="false" rate="0.3"/>
|
||||||
|
<monster id="107" desc="丁鲁特" min_level="41" max_level="41" capturable="false" rate="0.5"/>
|
||||||
|
</map>
|
||||||
|
<map id="54" desc="露希欧星">
|
||||||
|
<monster id="205" desc="阿兹" min_level="16" max_level="17" capturable="true" rate="0.6"/>
|
||||||
|
<monster id="206" desc="科利" min_level="36" max_level="36" capturable="false" rate="0.4"/>
|
||||||
|
</map>
|
||||||
|
<map id="55" desc="露希欧泥潭">
|
||||||
|
<monster id="208" desc="火晶兽" min_level="16" max_level="17" capturable="true" rate="0.69"/>
|
||||||
|
<monster id="210" desc="多鲁姆" min_level="36" max_level="36" capturable="false" rate="0.3"/>
|
||||||
|
<monster id="203" desc="晶岩兽" min_level="17" max_level="18" capturable="true" rate="0.01"/>
|
||||||
|
</map>
|
||||||
|
<map id="56" desc="露希欧之洋">
|
||||||
|
<monster id="211" desc="水草蛙" min_level="11" max_level="12" capturable="true" rate="1"/>
|
||||||
|
</map>
|
||||||
|
<map id="316" desc="精灵舱">
|
||||||
|
<monster id="136" desc="卢比" min_level="11" max_level="12" capturable="true" rate="0.8"/>
|
||||||
|
<monster id="172" desc="黑火贝" min_level="11" max_level="12" capturable="true" rate="0.2"/>
|
||||||
|
</map>
|
||||||
|
</monsters>
|
||||||
244
public/xml/monster_refresh.xsd
Normal file
244
public/xml/monster_refresh.xsd
Normal file
@@ -0,0 +1,244 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="nieo.seer.org.monster-refresh"
|
||||||
|
xmlns="nieo.seer.org.monster-refresh"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
<xs:element name="monster">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
怪物刷新规范, 其中:
|
||||||
|
- id: 要刷新的精灵ID
|
||||||
|
- desc: 精灵描述
|
||||||
|
- min_level: 允许出现的最低等级
|
||||||
|
- max_level: 允许出现的最高等级
|
||||||
|
- rate: 刷新概率
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:choice minOccurs="0">
|
||||||
|
<xs:element ref="restrictions" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xs:choice>
|
||||||
|
<xs:attributeGroup ref="monsterAttributeGroup"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
<xs:simpleType name="location_id">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
位置ID, 允许输入范围为1-9
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:restriction base="xs:integer">
|
||||||
|
<xs:enumeration value="1">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
1号刷新位置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="2">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
2号刷新位置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="3">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
3号刷新位置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="4">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
4号刷新位置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="5">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
5号刷新位置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="6">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
6号刷新位置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="7">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
7号刷新位置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="8">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
8号刷新位置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="9">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
9号刷新位置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:element name="location">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
在指定ID的位置特定的刷新规范, 将与默认的组合, 全部的概率之和作为总概率
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element ref="monster" maxOccurs="unbounded"/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute id="location_id" name="id" type="location_id" use="required">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此位置的ID, 允许范围[1, 9]
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="location_combined" name="combined" type="xs:boolean" default="true">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
是否将此特定位置下的精灵刷新规则与默认规则合并计算, 默认为true
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
<xs:element id="monster_restrictions" name="restrictions">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此精灵刷新的限制条件
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute id="monster_restrictions_type" name="type" type="type" use="required"/>
|
||||||
|
<xs:attribute id="monster_restrictions_value" name="value" type="xs:string" use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
<xs:simpleType id="monster_restrictions_type_enum" name="type">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
限制条件的类型
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="timePolicy"/>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:attributeGroup name="monsterAttributeGroup">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
怪物刷新属性组
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:attribute id="monster_id" name="id" type="xs:integer" use="required">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此精灵的ID
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="monster_desc" name="desc" type="xs:string" use="required">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此精灵的描述信息
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="monster_min_level" name="min_level" type="xs:integer" use="required">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此精灵可能出现的最低等级
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="monster_max_level" name="max_level" type="xs:integer" use="required">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此精灵可能出现的最高等级
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="monster_capturable" name="capturable" type="xs:boolean" use="required">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此精灵是否允许捕捉
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="monster_rate" name="rate" type="xs:float" use="required">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此精灵刷新的概率
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
</xs:attributeGroup>
|
||||||
|
|
||||||
|
<xs:element name="map">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
地图刷新精灵的相关配置, 其中
|
||||||
|
- id: 地图ID
|
||||||
|
- desc: 地图描述信息
|
||||||
|
此标签下允许出现若干monster标签, 用作默认刷新配置, 此外,
|
||||||
|
还允许额外出现location标签, 代表只会在某个位置进行额外的概率计算.
|
||||||
|
通常情况下, 为了减少重复输入的内容, location标签下的概率会结合默认内容进行合并计算,
|
||||||
|
但是可以通过设置属性combined=false单独使用location下内容计算.
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element ref="monster" maxOccurs="unbounded"/>
|
||||||
|
<xs:element ref="location" minOccurs="0" maxOccurs="9"/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute id="map_id" name="id" type="xs:integer" use="required">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
地图ID, 类型为数字类型
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="map_desc" name="desc" type="xs:string" use="required">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
地图的描述信息
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
<xs:element name="monsters">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
精灵刷新的配置信息
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element ref="map" maxOccurs="unbounded"/>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
28
public/xml/nature_info.xml
Normal file
28
public/xml/nature_info.xml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<!-- 性格修正 -->
|
||||||
|
<root>
|
||||||
|
<item id="0" name="孤独" m_attack="1.1" m_defence="0.9" m_SA="1" m_SD="1" m_speed="1" desc="攻击+ 防御-"/>
|
||||||
|
<item id="1" name="固执" m_attack="1.1" m_defence="1" m_SA="0.9" m_SD="1" m_speed="1" desc="攻击+ 特攻-"/>
|
||||||
|
<item id="2" name="调皮" m_attack="1.1" m_defence="1" m_SA="1" m_SD="0.9" m_speed="1" desc="攻击+ 特防-"/>
|
||||||
|
<item id="3" name="勇敢" m_attack="1.1" m_defence="1" m_SA="1" m_SD="1" m_speed="0.9" desc="攻击+ 速度-"/>
|
||||||
|
<item id="4" name="大胆" m_attack="0.9" m_defence="1.1" m_SA="1" m_SD="1" m_speed="1" desc="防御+ 攻击-"/>
|
||||||
|
<item id="5" name="顽皮" m_attack="1" m_defence="1.1" m_SA="0.9" m_SD="1" m_speed="1" desc="防御+ 特攻-"/>
|
||||||
|
<item id="6" name="无虑" m_attack="1" m_defence="1.1" m_SA="1" m_SD="0.9" m_speed="1" desc="防御+ 特防-"/>
|
||||||
|
<item id="7" name="悠闲" m_attack="1" m_defence="1.1" m_SA="1" m_SD="1" m_speed="0.9" desc="防御+ 速度-"/>
|
||||||
|
<item id="8" name="保守" m_attack="0.9" m_defence="1" m_SA="1.1" m_SD="1" m_speed="1" desc="特攻+ 攻击-"/>
|
||||||
|
<item id="9" name="稳重" m_attack="1" m_defence="0.9" m_SA="1.1" m_SD="1" m_speed="1" desc="特攻+ 防御-"/>
|
||||||
|
<item id="10" name="马虎" m_attack="1" m_defence="1" m_SA="1.1" m_SD="0.9" m_speed="1" desc="特攻+ 特防-"/>
|
||||||
|
<item id="11" name="冷静" m_attack="1" m_defence="1" m_SA="1.1" m_SD="1" m_speed="0.9" desc="特攻+ 速度-"/>
|
||||||
|
<item id="12" name="沉着" m_attack="0.9" m_defence="1" m_SA="1" m_SD="1.1" m_speed="1" desc="特防+ 攻击-"/>
|
||||||
|
<item id="13" name="温顺" m_attack="1" m_defence="0.9" m_SA="1" m_SD="1.1" m_speed="1" desc="特防+ 防御-"/>
|
||||||
|
<item id="14" name="慎重" m_attack="1" m_defence="1" m_SA="0.9" m_SD="1.1" m_speed="1" desc="特防+ 特攻-"/>
|
||||||
|
<item id="15" name="狂妄" m_attack="1" m_defence="1" m_SA="1" m_SD="1.1" m_speed="0.9" desc="特防+ 速度-"/>
|
||||||
|
<item id="16" name="胆小" m_attack="0.9" m_defence="1" m_SA="1" m_SD="1" m_speed="1.1" desc="速度+ 攻击-"/>
|
||||||
|
<item id="17" name="急躁" m_attack="1" m_defence="0.9" m_SA="1" m_SD="1" m_speed="1.1" desc="速度+ 防御-"/>
|
||||||
|
<item id="18" name="开朗" m_attack="1" m_defence="1" m_SA="0.9" m_SD="1" m_speed="1.1" desc="速度+ 特攻-"/>
|
||||||
|
<item id="19" name="天真" m_attack="1" m_defence="1" m_SA="1" m_SD="0.9" m_speed="1.1" desc="速度+ 特防-"/>
|
||||||
|
<item id="20" name="害羞" m_attack="1" m_defence="1" m_SA="1" m_SD="1" m_speed="1" desc="平衡发展"/>
|
||||||
|
<item id="21" name="实干" m_attack="1" m_defence="1" m_SA="1" m_SD="1" m_speed="1" desc="平衡发展"/>
|
||||||
|
<item id="22" name="坦率" m_attack="1" m_defence="1" m_SA="1" m_SD="1" m_speed="1" desc="平衡发展"/>
|
||||||
|
<item id="23" name="浮躁" m_attack="1" m_defence="1" m_SA="1" m_SD="1" m_speed="1" desc="平衡发展"/>
|
||||||
|
<item id="24" name="认真" m_attack="1" m_defence="1" m_SA="1" m_SD="1" m_speed="1" desc="平衡发展"/>
|
||||||
|
</root>
|
||||||
9
public/xml/pet_fusion_info.xml
Normal file
9
public/xml/pet_fusion_info.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<!--FusionTable表示融合组, MainPetId是融合主精灵的typeId, SubPetId表示融合副精灵的typeId-->
|
||||||
|
<!--Group对应融合的结果组, prop表示取得随机数的区间下限, 以闪光尼尔和卡鲁为例, 若概率取值为0-79则为闪光尼尔, 若为80-100则为卡鲁-->
|
||||||
|
<!--Group的值对应的是融合出来的typeId, ItemId表示融合成功后发送的元神珠物品的id-->
|
||||||
|
<PetFusions>
|
||||||
|
<FusionTable MainPetId="79" SubPetId="164 165 166">
|
||||||
|
<Group prop="0" ItemId="1000009">312</Group>
|
||||||
|
<Group prop="80" ItemId="1000008">315</Group>
|
||||||
|
</FusionTable>
|
||||||
|
</PetFusions>
|
||||||
24293
public/xml/pet_info.xml
Normal file
24293
public/xml/pet_info.xml
Normal file
File diff suppressed because it is too large
Load Diff
6645
public/xml/pet_skill_info.xml
Normal file
6645
public/xml/pet_skill_info.xml
Normal file
File diff suppressed because it is too large
Load Diff
43
public/xml/talk_count.xml
Normal file
43
public/xml/talk_count.xml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<talk_count xmlns="nieo.seer.org.talk-count">
|
||||||
|
<entry id="1" item_id="400001" item_min_count="1" item_max_count="10" desc="克罗斯星黄晶矿" count="5"/>
|
||||||
|
<entry id="2" item_id="400001" item_min_count="1" item_max_count="10" desc="海洋星黄晶矿" count="5"/>
|
||||||
|
<entry id="3" item_id="400001" item_min_count="1" item_max_count="10" desc="火山星黄晶矿" count="5"/>
|
||||||
|
<entry id="4" item_id="400002" item_min_count="1" item_max_count="10" desc="海洋星甲烷燃气" count="2"/>
|
||||||
|
<entry id="5" item_id="400002" item_min_count="1" item_max_count="10" desc="云霄星甲烷燃气" count="2"/>
|
||||||
|
<entry id="6" item_id="400002" item_min_count="1" item_max_count="10" desc="火山星甲烷燃气" count="2"/>
|
||||||
|
<entry id="7" item_id="400009" item_min_count="1" item_max_count="10" desc="藤结晶" count="1"/>
|
||||||
|
<entry id="8" item_id="3" item_min_count="1000" item_max_count="1000" desc="累积经验1000" count="1"/>
|
||||||
|
<entry id="9" item_id="400010" item_min_count="1" item_max_count="10" desc="蘑菇结晶" count="3"/>
|
||||||
|
<entry id="10" item_id="400011" item_min_count="1" item_max_count="10" desc="纳格晶体" count="3"/>
|
||||||
|
<entry id="11" item_id="400012" item_min_count="1" item_max_count="10" desc="豆豆果实" count="1"/>
|
||||||
|
<entry id="12" item_id="400016" item_min_count="1" item_max_count="10" desc="电能石" count="3"/>
|
||||||
|
<entry id="13" item_id="400018" item_min_count="1" item_max_count="10" desc="绿斯诺豌豆" count="5"/>
|
||||||
|
<entry id="14" item_id="400023" item_min_count="1" item_max_count="10" desc="露尼亚矿石" count="1"/>
|
||||||
|
<entry id="15" item_id="400024" item_min_count="1" item_max_count="10" desc="希罗里矿石" count="1"/>
|
||||||
|
<entry id="16" item_id="400025" item_min_count="1" item_max_count="10" desc="欧古德矿石" count="1"/>
|
||||||
|
<entry id="17" item_id="400001" item_min_count="1" item_max_count="10" desc="黄晶矿" count="5"/>
|
||||||
|
<entry id="18" item_id="400035" item_min_count="1" item_max_count="10" desc="露希欧坚钢" count="6"/>
|
||||||
|
<entry id="19" item_id="400036" item_min_count="1" item_max_count="10" desc="尼古滴露" count="5"/>
|
||||||
|
<entry id="20" item_id="300002" item_min_count="1" item_max_count="1" desc="中级精灵胶囊" count="1"/>
|
||||||
|
<entry id="21" item_id="300012" item_min_count="1" item_max_count="1" desc="中级体力药剂" count="1"/>
|
||||||
|
<entry id="22" item_id="600001" item_min_count="1" item_max_count="1" desc="烟花" count="5"/>
|
||||||
|
<entry id="23" item_id="600004" item_min_count="1" item_max_count="1" desc="周年庆烟花" count="5"/>
|
||||||
|
<entry id="24" item_id="300002" item_min_count="1" item_max_count="1" desc="中级精灵胶囊" count="1"/>
|
||||||
|
<entry id="25" item_id="300012" item_min_count="1" item_max_count="1" desc="中级体力药剂" count="1"/>
|
||||||
|
<entry id="27" item_id="400001" item_min_count="1" item_max_count="10" desc="黄晶矿" count="5"/>
|
||||||
|
<entry id="28" item_id="400001" item_min_count="1" item_max_count="10" desc="黄晶矿" count="5"/>
|
||||||
|
<entry id="29" item_id="400001" item_min_count="1" item_max_count="10" desc="黄晶矿" count="5"/>
|
||||||
|
<entry id="30" item_id="400002" item_min_count="1" item_max_count="10" desc="甲烷燃气" count="5"/>
|
||||||
|
<entry id="31" item_id="400001" item_min_count="1" item_max_count="10" desc="黄晶矿" count="5"/>
|
||||||
|
<entry id="32" item_id="400001" item_min_count="1" item_max_count="10" desc="黄晶矿" count="5"/>
|
||||||
|
<entry id="33" item_id="400002" item_min_count="1" item_max_count="10" desc="甲烷燃气" count="5"/>
|
||||||
|
<entry id="34" item_id="400001" item_min_count="1" item_max_count="10" desc="黄晶矿" count="5"/>
|
||||||
|
<entry id="35" item_id="400002" item_min_count="1" item_max_count="10" desc="甲烷燃气" count="5"/>
|
||||||
|
<entry id="36" item_id="400002" item_min_count="1" item_max_count="10" desc="甲烷燃气" count="2"/>
|
||||||
|
<entry id="37" item_id="400002" item_min_count="1" item_max_count="10" desc="甲烷燃气" count="2"/>
|
||||||
|
|
||||||
|
<entry id="2051" item_id="400501" item_min_count="1" item_max_count="1" desc="神奇扭蛋牌" count="1" policy="week"/>
|
||||||
|
<entry id="2054" item_id="400026" item_min_count="1" item_max_count="2" desc="水草蛙处希欧珊瑚" count="1"/>
|
||||||
|
</talk_count>
|
||||||
115
public/xml/talk_count.xsd
Normal file
115
public/xml/talk_count.xsd
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||||
|
targetNamespace="nieo.seer.org.talk-count"
|
||||||
|
xmlns="nieo.seer.org.talk-count"
|
||||||
|
elementFormDefault="qualified">
|
||||||
|
<xs:element id="entry" name="entry">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
具体奖励领取的设置信息
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:attribute id="id" name="id" use="required" type="xs:integer">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此奖励项的ID
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="item_id" name="item_id" use="required" type="xs:integer">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此奖励项所对应的物品ID
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="item_min_count" name="item_min_count" use="required" type="xs:nonNegativeInteger">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此奖励物品的最少数量
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="item_max_count" name="item_max_count" use="required" type="xs:nonNegativeInteger">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此奖励物品的最大数量
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="desc" name="desc" use="required" type="xs:string">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此ID的描述信息
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="count" name="count" use="required" type="xs:nonNegativeInteger">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此奖励每日可领取的次数
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
<xs:attribute id="policy" name="policy" type="policy-type" default="day">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
此奖励次数的刷新策略
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:attribute>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
<xs:simpleType name="policy-type">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
刷新策略
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:restriction>
|
||||||
|
<xs:enumeration value="day">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
每日刷新奖励领取次数
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="week">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
每周刷新奖励领取次数
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="month">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
每月刷新奖励领取次数
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
<xs:enumeration value="once">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
不会刷新奖励领取次数
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:enumeration>
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:element id="talk_count" name="talk_count">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation><![CDATA[
|
||||||
|
全部奖励领取次数的配置
|
||||||
|
]]></xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element ref="entry" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
Reference in New Issue
Block a user