生成Go语言的背包/容器初始代码。当用户想要创建具有特定容器类型的新背包类型时调用。
此技能用于生成遵循项目规范的背包/容器初始代码。
向用户询问以下信息:
*pb.Equip、*pb.HeroData)根据背包名称生成:
<BagName>Bag(例如:"Equip" → "EquipBag")ContainerType_ContainerType_<BagName>ContainerType_ContainerType_EquipItemType_ItemType_<BagName>(例如:"Equip" → ItemType_ItemType_Equip)Bag<BagName>(例如:"Equip" → BagEquip)检查以下proto文件(位于proto/文件夹):
proto/bags.proto - 检查enum ContainerType:
ContainerType_<BagName> = <next_value>proto/cfg.proto - 检查enum ItemType:
ItemType_<BagName> = <next_value>proto/bags.proto - 检查message BagsSync:
使用适当的模板创建game/bag_<bagname>.go。
向Bags结构体添加背包字段:
Bag<BagName> *<BagName>Bag `child:"<BagName>"`
在init()函数中初始化背包:
bags.Bag<BagName> = New<BagName>Bag(bags)
在GetBagByArg()中添加case:
case int32(pb.ItemType_ItemType_<BagName>):
return b.Bag<BagName>
将背包添加到SyncDataToClient():
<BagName>: b.Bag<BagName>.Data,
package game
import "github.com/fish-tennis/gserver/pb"
type <BagName>Bag struct {
*CountContainer `db:""`
}
func New<BagName>Bag(bags *Bags) *<BagName>Bag {
bag := &<BagName>Bag{
CountContainer: NewBagCountItem(bags),
}
return bag
}
package game
import (
"github.com/fish-tennis/gentity/util"
"github.com/fish-tennis/gserver/pb"
)
type <BagName>Bag struct {
*UniqueContainer[*pb.<DataType>] `db:""`
}
func New<BagName>Bag(bags *Bags) *<BagName>Bag {
bag := &<BagName>Bag{
UniqueContainer: NewBagUnique[*pb.<DataType>](bags, pb.ContainerType_ContainerType_<BagName>, func(arg *pb.AddElemArg) *pb.<DataType> {
return &pb.<DataType>{
Id: arg.GetId(),
UniqueId: util.GenUniqueId(),
// TODO: 初始化其他字段
}
}),
}
return bag
}
package game
import "github.com/fish-tennis/gserver/pb"
type <BagName>Bag struct {
*CfgContainer[*pb.<DataType>] `db:""`
}
func New<BagName>Bag(bags *Bags) *<BagName>Bag {
bag := &<BagName>Bag{
CfgContainer: NewBagCfg[*pb.<DataType>](bags, pb.ContainerType_ContainerType_<BagName>, func(arg *pb.AddElemArg) *pb.<DataType> {
return &pb.<DataType>{
Id: arg.GetId(),
// TODO: 初始化其他字段
}
}),
}
return bag
}
对于使用CfgContainer和*pb.PetData的"Pet"背包:
proto/bags.proto - 添加ContainerType_Pet = 6proto/cfg.proto - 添加ItemType_Pet = 4proto/bags.proto - 向BagsSync添加Pet map[int32]*PetDatagame/bag_pet.gogame/bags.go:
BagPet *PetBag \child:"Pet"``bags.BagPet = NewPetBag(bags)ItemType_ItemType_Pet添加casePet: b.BagPet.Dataproto/目录protoc重新生成Go代码game/bag_equip.go中的现有模式