feat(model): 新增地图配置、BOSS数据和怪物刷新模块

This commit is contained in:
1
2025-08-16 02:39:25 +00:00
parent d34ec2eed1
commit caa901d208
9 changed files with 389 additions and 2 deletions

View File

@@ -0,0 +1,58 @@
package xml
import (
"fmt"
"testing"
"github.com/ECUST-XX/xml"
)
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 TalkCount
t1, _ := getxml()
xml.Unmarshal(t1, &maps)
//tf, _ := xml.MarshalIndentShortForm(tt, " ", " ")
fmt.Println(maps)
}

View File

@@ -0,0 +1,89 @@
package xml
import (
"fmt"
"io"
"log"
"net/http"
"time"
"github.com/ECUST-XX/xml" // 注意需确保该xml库与示例中使用的一致
)
func getxml() ([]byte, error) {
// 读取整个文件内容,返回字节切片和错误
content, err := ReadHTTPFile("http://127.0.0.1:8080/assets/talk_count.xml")
if err != nil {
// 处理错误(文件不存在、权限问题等)
log.Fatalf("无法读取文件: %v", err)
}
return content, nil
}
// TalkCount 根节点,对应<talk_count>标签
// 注意xml.Name需指定命名空间与XML中的xmlns保持一致
type TalkCount struct {
XMLName xml.Name `xml:"nieo.seer.org.talk-count talk_count"`
Entries []Entry `xml:"entry"` // 包含所有entry节点
}
// Entry 单个条目配置,对应<entry>标签
type Entry struct {
ID int `xml:"id,attr"` // 条目ID
ItemID int `xml:"item_id,attr"` // 物品ID
ItemMinCount int `xml:"item_min_count,attr"` // 物品最小数量
ItemMaxCount int `xml:"item_max_count,attr"` // 物品最大数量
Desc string `xml:"desc,attr"` // 描述信息
Count int `xml:"count,attr"` // 计数
Policy string `xml:"policy,attr,omitempty"` // 策略可选如week
}
// 复用示例中的ReadHTTPFile函数读取远程文件
func ReadHTTPFile(url string) ([]byte, error) {
client := &http.Client{
Timeout: 30 * time.Second,
}
resp, err := client.Get(url)
if err != nil {
return nil, fmt.Errorf("请求失败: %w", err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("请求返回非成功状态码: %d", resp.StatusCode)
}
content, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("读取内容失败: %w", err)
}
return content, nil
}
// 获取XML内容可根据实际URL修改
func getTalkCountXML() ([]byte, error) {
// 注意此处URL需替换为实际的talk_count.xml文件地址
content, err := ReadHTTPFile("http://127.0.0.1:8080/assets/talk_count.xml")
if err != nil {
log.Fatalf("无法读取文件: %v", err)
}
return content, nil
}
// 解析XML到结构体
func getTalkCount() TalkCount {
var talkCount TalkCount
content, _ := getTalkCountXML()
// 解析XML时需注意命名空间匹配
if err := xml.Unmarshal(content, &talkCount); err != nil {
log.Fatalf("XML解析失败: %v", err)
}
return talkCount
}
// 全局配置变量,用于存储解析后的结果
var TalkCountConfig = getTalkCount()