- 在 Player 结构中添加 MapId 字段,用于记录当前所在地图 ID - 新增地图配置解析功能,支持从 XML 文件中读取地图信息 - 实现玩家进入地图的逻辑,包括设置玩家位置和广播通知 - 更新登录逻辑,在玩家登录时自动进入默认地图 - 重构地图相关的数据结构和接口,为后续地图功能扩展做准备
149 lines
5.2 KiB
Go
149 lines
5.2 KiB
Go
package xml
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/ECUST-XX/xml"
|
|
"github.com/antchfx/xmlquery"
|
|
)
|
|
|
|
var s = `
|
|
<?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>`
|
|
|
|
func Test_main(t *testing.T) {
|
|
|
|
// 解析XML到结构体
|
|
var maps Maps
|
|
t1, _ := getxml()
|
|
xml.Unmarshal(t1, &maps)
|
|
|
|
//tf, _ := xml.MarshalIndentShortForm(tt, " ", " ")
|
|
fmt.Println(maps)
|
|
|
|
}
|
|
|
|
func main1() {
|
|
s := `
|
|
<?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>`
|
|
|
|
doc, err := xmlquery.Parse(strings.NewReader(s))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
//channel := xmlquery.FindOne(doc, "//superMaps")
|
|
// if n := channel.SelectElement("maps"); n != nil {
|
|
// fmt.Printf("title: %s\n", n.InnerText())
|
|
// }
|
|
if l := xmlquery.Find(doc, "//maps[@id='9']"); l != nil {
|
|
t := l[0].Attr
|
|
fmt.Printf("%v", t[1])
|
|
}
|
|
// for i, n := range xmlquery.Find(doc, "//maps/@id") {
|
|
// fmt.Printf("#%d %s\n", i, n.InnerText())
|
|
// }
|
|
}
|
|
|
|
func TestMMMs(t *testing.T) {
|
|
|
|
decoder := xml.NewDecoder(strings.NewReader(s))
|
|
var rootComments []string
|
|
rootFound := false
|
|
|
|
for {
|
|
token, err := decoder.Token()
|
|
if err != nil {
|
|
break
|
|
}
|
|
|
|
switch t := token.(type) {
|
|
case xml.StartElement:
|
|
// 遇到根元素开始标签后停止收集注释
|
|
rootFound = true
|
|
fmt.Printf("找到根元素: %s\n", t.Name.Local)
|
|
case xml.Comment:
|
|
if !rootFound {
|
|
// 保存根元素前的注释
|
|
rootComments = append(rootComments, string(t))
|
|
}
|
|
}
|
|
}
|
|
|
|
// 输出捕获的根注释
|
|
fmt.Println("\n根注释内容:")
|
|
for _, comment := range rootComments {
|
|
fmt.Println(strings.TrimSpace(comment))
|
|
}
|
|
}
|