feat(map): 更新地图配置和物品数据,优化XML文件结构
This commit is contained in:
20
common/data/xml/item/1_test.go
Normal file
20
common/data/xml/item/1_test.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package xml
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/ECUST-XX/xml"
|
||||
)
|
||||
|
||||
func Test_main(t *testing.T) {
|
||||
|
||||
// 解析XML到结构体
|
||||
var maps Items
|
||||
t1, _ := getItemsXML()
|
||||
xml.Unmarshal(t1, &maps)
|
||||
|
||||
//tf, _ := xml.MarshalIndentShortForm(tt, " ", " ")
|
||||
fmt.Println(maps)
|
||||
|
||||
}
|
||||
106
common/data/xml/item/item.go
Normal file
106
common/data/xml/item/item.go
Normal file
@@ -0,0 +1,106 @@
|
||||
package xml
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/ECUST-XX/xml" // 保持与之前一致的XML库
|
||||
)
|
||||
|
||||
// Items 根节点,对应<Items>标签
|
||||
type Items struct {
|
||||
XMLName xml.Name `xml:"Items"`
|
||||
Items []Item `xml:"Item"` // 包含所有物品配置
|
||||
}
|
||||
|
||||
// Item 单个物品配置,对应<Item>标签
|
||||
type Item struct {
|
||||
ID int `xml:"ID,attr"` // 物品ID(与items.xml一致)
|
||||
Name string `xml:"Name,attr"` // 物品名称
|
||||
Rarity int `xml:"Rarity,attr,omitempty"` // 稀有度(可选)
|
||||
Price int `xml:"Price,attr"` // 价格
|
||||
Tradability int `xml:"Tradability,attr"` // 可交易性(0/1)
|
||||
VipTradability int `xml:"VipTradability,attr"` // VIP可交易性(0/1)
|
||||
DailyKey int `xml:"DailyKey,attr,omitempty"` // 每日限制键值(可选)
|
||||
DailyOutMax int `xml:"DailyOutMax,attr,omitempty"` // 每日最大产出(可选)
|
||||
Wd int `xml:"wd,attr"` // 未知属性(根据原XML保留)
|
||||
UseMax int `xml:"UseMax,attr"` // 最大使用次数
|
||||
LifeTime int `xml:"LifeTime,attr"` // 生命周期(0为永久)
|
||||
Purpose int `xml:"purpose,attr"` // 用途标识
|
||||
Bean int `xml:"Bean,attr,omitempty"` // 豆子数量(可选)
|
||||
Hide int `xml:"Hide,attr"` // 是否隐藏(0/1)
|
||||
Sort int `xml:"Sort,attr,omitempty"` // 排序序号(可选)
|
||||
Des string `xml:"des,attr"` // 物品用途(根据说明补充)
|
||||
Color string `xml:"color,attr,omitempty"` // 装备名字颜色(可选)
|
||||
Level int `xml:"level,attr,omitempty"` // 装备等级(星星,可选)
|
||||
|
||||
Pet *Pet `xml:"pet,omitempty"` // 精灵属性子节点(可选)
|
||||
TeamPK *TeamPK `xml:"teamPK,omitempty"` // 要塞保卫战子节点(可选)
|
||||
}
|
||||
|
||||
// Pet 精灵属性子节点,对应<pet>标签
|
||||
// 注:根据实际需求补充字段,这里以常见属性为例
|
||||
type Pet struct {
|
||||
Attack int `xml:"attack,attr,omitempty"` // 攻击加成
|
||||
Defense int `xml:"defense,attr,omitempty"` // 防御加成
|
||||
HP int `xml:"hp,attr,omitempty"` // 生命值加成
|
||||
Speed int `xml:"speed,attr,omitempty"` // 速度加成
|
||||
}
|
||||
|
||||
// TeamPK 要塞保卫战子节点,对应<teamPK>标签
|
||||
// 注:根据实际需求补充字段,这里以常见属性为例
|
||||
type TeamPK struct {
|
||||
FortBonus int `xml:"fortBonus,attr,omitempty"` // 要塞加成
|
||||
DefenseBonus int `xml:"defenseBonus,attr,omitempty"` // 防御加成
|
||||
AttackBonus int `xml:"attackBonus,attr,omitempty"` // 攻击加成
|
||||
}
|
||||
|
||||
// 复用HTTP文件读取函数
|
||||
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内容
|
||||
func getItemsXML() ([]byte, error) {
|
||||
// 替换为实际的Items XML文件URL
|
||||
content, err := ReadHTTPFile("http://127.0.0.1:8080/assets/43.xml")
|
||||
if err != nil {
|
||||
log.Fatalf("无法读取物品文件: %v", err)
|
||||
}
|
||||
return content, nil
|
||||
}
|
||||
|
||||
// 解析XML到结构体
|
||||
func getItems() Items {
|
||||
var items Items
|
||||
content, _ := getItemsXML()
|
||||
if err := xml.Unmarshal(content, &items); err != nil {
|
||||
log.Fatalf("物品XML解析失败: %v", err)
|
||||
}
|
||||
return items
|
||||
}
|
||||
|
||||
// 全局物品配置变量
|
||||
var ItemsConfig = getItems()
|
||||
@@ -101,7 +101,7 @@ func ReadHTTPFile(url string) ([]byte, error) {
|
||||
func getxml() ([]byte, error) {
|
||||
|
||||
// 读取整个文件内容,返回字节切片和错误
|
||||
content, err := ReadHTTPFile("http://127.0.0.1:8080/assets/map_info.xml")
|
||||
content, err := ReadHTTPFile("http://127.0.0.1:8080/assets/210.xml")
|
||||
if err != nil {
|
||||
// 处理错误(文件不存在、权限问题等)
|
||||
log.Fatalf("无法读取文件: %v", err)
|
||||
|
||||
@@ -7,44 +7,6 @@ import (
|
||||
"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到结构体
|
||||
|
||||
Reference in New Issue
Block a user