diff --git a/cmd/robot/friend.go b/cmd/robot/friend.go index 23b2291b6..81935515a 100644 --- a/cmd/robot/friend.go +++ b/cmd/robot/friend.go @@ -4,209 +4,77 @@ import ( "go_dreamfactory/comm" "go_dreamfactory/modules/friend" "go_dreamfactory/pb" - "log" ) -func (r *Robot) handleFriendMsg(msg *pb.UserMessage) { - switch msg.SubType { - case friend.Friend_SubType_List: - r.handleFriendList(msg) - case friend.Friend_SubType_Apply: - r.handleFriendApply(msg) - case friend.Friend_SubType_ApplyList: - r.handleFriendApplyList(msg) - case friend.Friend_SubType_Agree: - r.handleFriendAgree(msg) - case friend.Friend_SubType_Refuse: - r.handleFriendRefuse(msg) - case friend.Friend_SubType_Blacklist: - r.handleFriendBlacklist(msg) - case friend.Friend_SubType_AddBlack: - r.handleFriendAddBlack(msg) - case friend.Friend_SubType_DelBlack: - r.handleFriendDelBlack(msg) - case friend.Friend_SubType_Search: - r.handleFriendSearch(msg) +var ( + //friend + friend_builders = []*builder{ + { + //list + mainType: string(comm.SM_FriendModule), + subType: friend.Friend_SubType_List, + req: &pb.Friend_List_Req{}, + rsp: &pb.Friend_List_Rsp{}, + enabled: true, + }, { + //blacklist + mainType: string(comm.SM_FriendModule), + subType: friend.Friend_SubType_Blacklist, + req: &pb.Friend_BlackList_Req{}, + rsp: &pb.Friend_BlackList_Rsp{}, + }, { + //search + mainType: string(comm.SM_FriendModule), + subType: friend.Friend_SubType_Search, + req: &pb.Friend_Search_Req{ + NickName: "", //设置测试参数 + }, + rsp: &pb.Friend_Search_Rsp{}, + }, { + //apply + mainType: string(comm.SM_FriendModule), + subType: friend.Friend_SubType_Apply, + req: &pb.Friend_Apply_Req{}, + rsp: &pb.Friend_Apply_Rsp{}, + enabled: true, + }, { + //applylist + mainType: string(comm.SM_FriendModule), + subType: friend.Friend_SubType_ApplyList, + req: &pb.Friend_ApplyList_Req{}, + rsp: &pb.Friend_ApplyList_Rsp{}, + }, { + //agree + mainType: string(comm.SM_FriendModule), + subType: friend.Friend_SubType_Agree, + req: &pb.Friend_Agree_Req{}, + rsp: &pb.Friend_Agree_Rsp{}, + }, { + //refuse + mainType: string(comm.SM_FriendModule), + subType: friend.Friend_SubType_Refuse, + req: &pb.Friend_Agree_Req{}, + rsp: &pb.Friend_Agree_Rsp{}, + }, { + //addblack + mainType: string(comm.SM_FriendModule), + subType: friend.Friend_SubType_AddBlack, + req: &pb.Friend_BlackAdd_Req{ + FriendId: "", + }, + rsp: &pb.Friend_BlackAdd_Rsp{}, + }, { + //delblack + mainType: string(comm.SM_FriendModule), + subType: friend.Friend_SubType_DelBlack, + req: &pb.Friend_DelBlack_Req{}, + rsp: &pb.Friend_DelBlack_Rsp{}, + }, } -} +) -//好友列表 -func (r *Robot) FriendList() { - req := &pb.Friend_List_Req{} - head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_List} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleFriendList(msg *pb.UserMessage) { - rsp := &pb.Friend_List_Rsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) -} - -//好友搜索 -func (r *Robot) FriendSearch(nickName string) { - req := &pb.Friend_Search_Req{ - NickName: nickName, - } - head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Search} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleFriendSearch(msg *pb.UserMessage) { - rsp := &pb.Friend_Search_Rsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) -} - -//好友申请 -func (r *Robot) FriendApply(friendId string) { - req := &pb.Friend_Apply_Req{ - FriendId: friendId, - } - head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Apply} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleFriendApply(msg *pb.UserMessage) { - rsp := &pb.Friend_Apply_Rsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) -} - -// 申请列表 -func (r *Robot) FriendApplyList() { - req := &pb.Friend_ApplyList_Req{} - head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_ApplyList} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleFriendApplyList(msg *pb.UserMessage) { - rsp := &pb.Friend_ApplyList_Rsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) -} - -//同意 -func (r *Robot) FriendAgree(friendIds []string) { - req := &pb.Friend_Agree_Req{ - FriendIds: friendIds, - } - head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Agree} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleFriendAgree(msg *pb.UserMessage) { - rsp := &pb.Friend_Agree_Rsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) -} - -//拒绝 -func (r *Robot) FriendRefuse(friendIds []string) { - req := &pb.Friend_Refuse_Req{ - FriendIds: friendIds, - } - head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Refuse} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleFriendRefuse(msg *pb.UserMessage) { - rsp := &pb.Friend_Refuse_Rsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) -} - -//黑名单列表 -func (r *Robot) FriendBlacklist() { - req := &pb.Friend_BlackList_Req{} - head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Blacklist} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleFriendBlacklist(msg *pb.UserMessage) { - rsp := &pb.Friend_BlackList_Rsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) -} - -//添加黑名单 -func (r *Robot) FriendAddBlack(friendId string) { - req := &pb.Friend_BlackAdd_Req{FriendId: friendId} - head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_AddBlack} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleFriendAddBlack(msg *pb.UserMessage) { - rsp := &pb.Friend_BlackAdd_Rsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) -} - -//删除黑名单 -func (r *Robot) FriendDelBlack(friendId string) { - req := &pb.Friend_DelBlack_Req{ - FriendId: friendId, - } - head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_DelBlack} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleFriendDelBlack(msg *pb.UserMessage) { - rsp := &pb.Friend_DelBlack_Rsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) +//声明加入到构建器并发起请求 +func (r *Robot) RunFriend() { + r.addBuilders(friend_builders) + r.handleReq() } diff --git a/cmd/robot/hero.go b/cmd/robot/hero.go new file mode 100644 index 000000000..a8c8fc147 --- /dev/null +++ b/cmd/robot/hero.go @@ -0,0 +1,26 @@ +package robot + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/modules/hero" + "go_dreamfactory/pb" +) + +var ( + //hero + hero_builders = []*builder{ + { + mainType: string(comm.SM_HeroModule), + subType: hero.Hero_SubType_List, + req: &pb.Hero_List_Req{}, + rsp: &pb.Hero_List_Rsp{}, + enabled: true, + }, + } +) + +//声明加入到构建器并发起请求 +func (r *Robot) RunHero() { + r.addBuilders(hero_builders) + r.handleReq() +} diff --git a/cmd/robot/items.go b/cmd/robot/items.go deleted file mode 100644 index 900c822b4..000000000 --- a/cmd/robot/items.go +++ /dev/null @@ -1,33 +0,0 @@ -package robot - -import ( - "go_dreamfactory/comm" - "go_dreamfactory/pb" - "log" -) - -func (r *Robot) handlePackMsg(msg *pb.UserMessage) { - switch msg.SubType { - case "queryuserpackresp": - r.handleQueryUserPack(msg) - } -} - -//添加好友 -func (r *Robot) QueryUserPack() { - req := &pb.Items_Getlist_Req{IType: 1} - head := &pb.UserMessage{MainType: "pack", SubType: "queryuserpackreq"} - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleQueryUserPack(msg *pb.UserMessage) { - rsp := &pb.Items_Getlist_Resp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) -} diff --git a/cmd/robot/login.go b/cmd/robot/login.go index 4c8b18820..d327ce781 100644 --- a/cmd/robot/login.go +++ b/cmd/robot/login.go @@ -2,6 +2,8 @@ package robot import ( "fmt" + "go_dreamfactory/comm" + "go_dreamfactory/modules/user" "go_dreamfactory/pb" "go_dreamfactory/utils" "log" @@ -32,23 +34,19 @@ func (r *Robot) BuildSecStr() string { //处理登录请求 func (r *Robot) AccountLogin() { - //登录 - // log.Printf("client secret key:%s", sec) - loginReg := &pb.UserLoginReq{ - Account: r.opts.Account, - Sid: r.opts.ServerId, - } - - head := &pb.UserMessage{ - MainType: "user", - SubType: "login", - Sec: r.BuildSecStr(), - } - defer traceFunc(head.MainType, head.SubType, "0", loginReg) - err := r.SendToClient(head, loginReg) - if err != nil { - log.Fatalf("send err:%v", err) - } - log.Printf("区服:[%d] 账号:[%s] login...", r.opts.ServerId, r.opts.Account) + builders := []*builder{ + { + mainType: string(comm.SM_UserModule), + subType: user.User_SubType_Login, + req: &pb.UserLoginReq{ + Account: r.opts.Account, + Sid: r.opts.ServerId, + }, + rsp: &pb.UserLoginResp{}, + enabled: true, + }, + } + r.addBuilders(builders) + r.handleReq() } diff --git a/cmd/robot/notify.go b/cmd/robot/notify.go index e1808b2a7..90558e6cc 100644 --- a/cmd/robot/notify.go +++ b/cmd/robot/notify.go @@ -1,26 +1,21 @@ package robot import ( - "fmt" "go_dreamfactory/comm" "go_dreamfactory/pb" ) -//统一通知处理 -func (r *Robot) handleNotifyMsg(msg *pb.UserMessage) { - switch msg.SubType { - case comm.SubType_ErrorNotify: - r.handleError(msg) - default: - fmt.Printf("subType: %s not define", msg.SubType) - } +var notify_builders = []*builder{ + { + //create + mainType: comm.MainType_Notify, + subType: comm.SubType_ErrorNotify, + rsp: &pb.ErrorNotify{}, + enabled: true, + }, } -//处理错误 -func (r *Robot) handleError(msg *pb.UserMessage) { - rsp := &pb.ErrorNotify{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) +//声明加入到构建器并发起请求 +func (r *Robot) RunNotify() { + r.addBuilders(notify_builders) } diff --git a/cmd/robot/pack.go b/cmd/robot/pack.go new file mode 100644 index 000000000..fc477e08a --- /dev/null +++ b/cmd/robot/pack.go @@ -0,0 +1,24 @@ +package robot + +import ( + "go_dreamfactory/comm" + "go_dreamfactory/pb" +) + +//申明测试接口及请求和响应参数 +var pack_builders = []*builder{ + { + //create + mainType: string(comm.SM_PackModule), + subType: "queryuserpackreq", + // req: &pb.Pack_Getlist_Req{IType: 1}, + rsp: &pb.UserCreateRsp{}, + enabled: true, + }, +} + +//声明加入到构建器并发起请求 +func (r *Robot) RunPack() { + r.addBuilders(pack_builders) + r.handleReq() +} diff --git a/cmd/robot/readme.md b/cmd/robot/readme.md index 1fe809ced..1f4a1ec42 100644 --- a/cmd/robot/readme.md +++ b/cmd/robot/readme.md @@ -1,6 +1,7 @@ # Robot使用 -## 命令行 +## 命令行 + ```sh #使用已存在的账号测试接口 go run cmd.go run --account yourAccount @@ -13,48 +14,39 @@ go run cmd.go run --account newAccount --create true @[TOC] - ### 添加测试接口 -* 请求的方法 +* 声明测试接口 ```go -// 好友申请,参数根据实际业务添加 -func (r *Robot) FriendApply(friendIds []string) { - ... +var user_builders = []*builder{ + { + //create + mainType: string(comm.SM_UserModule), + subType: user.User_SubType_Create, + req: &pb.UserCreateReq{ //设置请求参数 + NickName: "测试", + }, + rsp: &pb.UserCreateRsp{}, + enabled: true, + }, } ``` -* 响应的方法 +### 声明加入到构建器并发起请求 ```go -func (r *Robot) handleFriendApply(msg *pb.UserMessage) { - ... +func (r *Robot) RunUser() { + r.addBuilders(user_builders) + r.handleReq() } ``` -### 添加subType,调用响应方法 - -```go -//根据实际情况添加subtype -func (r *Robot) handleFriendMsg(msg *pb.UserMessage) { - switch msg.SubType { - case "apply": - //调用响应 - r.handleFriendApply(msg) - } -} -``` - -### 修改请求方法调用 +### 添加用户登录之后需要测试的接口 ```go func (r *Robot) onUserLoaded() { - switch msg.MainType { - case "user": - r.handleUserMsg(msg) - case "friend": - r.handleFriendMsg(msg) - ... + //添加用户登录之后需要测试的接口 + r.RunUser() } -``` \ No newline at end of file +``` diff --git a/cmd/robot/robot.go b/cmd/robot/robot.go index 8164cee38..073ecad43 100644 --- a/cmd/robot/robot.go +++ b/cmd/robot/robot.go @@ -9,6 +9,7 @@ import ( "io/ioutil" "log" "net/http" + "time" "github.com/gorilla/websocket" jsoniter "github.com/json-iterator/go" @@ -16,9 +17,10 @@ import ( ) type Robot struct { - ws *websocket.Conn - opts *Options - user *pb.DB_UserData + ws *websocket.Conn + opts *Options + user *pb.DB_UserData + builders []*builder } func NewRobot(opts *Options) *Robot { @@ -37,7 +39,6 @@ func NewRobot(opts *Options) *Robot { func (r *Robot) Run() { log.Print("Robot running...") log.Printf("websocket %s \n", r.opts.WsUrl) - if r.opts.Create { //创建新用户 r.AccountRegister(r.opts.Account, int32(r.opts.ServerId)) } else { @@ -59,48 +60,80 @@ func (r *Robot) Run() { if err = proto.Unmarshal(data, msg); err != nil { log.Fatal(err) } - r.handleMsg(msg) + r.handleRsp(msg) } }() select {} } -//模块处理 -func (r *Robot) handleMsg(msg *pb.UserMessage) { - switch msg.MainType { - case "user": - r.handleUserMsg(msg) - case "friend": - r.handleFriendMsg(msg) - case "pack": - r.handlePackMsg(msg) - case comm.MainType_Notify: - r.handleNotifyMsg(msg) - default: - log.Fatal("module route no exist") +type builder struct { + mainType string + subType string + req proto.Message + rsp proto.Message + enabled bool + start time.Time + requested bool //请求标识 true已发 +} + +func (r *Robot) addBuilders(builders []*builder) { + for _, b := range builders { + if b.enabled { + r.builders = append(r.builders, b) + } } } -//在这里添加玩家成功登录以后的测试方法 -func (r *Robot) onUserLoaded() { - //user - // r.CreateUser("乐谷6171") +//执行请求 +func (r *Robot) handleReq() { + for _, b := range r.builders { + if b.req != nil && !b.requested { + b.requested = true + b.start = time.Now() + head := &pb.UserMessage{MainType: b.mainType, SubType: b.subType} + defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), b.req) + err := r.SendToClient(head, b.req) + if err != nil { + log.Fatal(err) + } + } + } +} - //friend - // r.FriendApply("1_62aa8f30d25fb8c1a7d90b50") - // r.FriendAgree([]string{"0_62a9afd994fe03b7aaee6773"}) - // r.FriendRefuse([]string{"0_62aa9427e2979698b080ec78"}) - // r.FriendApplyList() - // r.FriendList() - // r.FriendBlacklist() - // r.FriendAddBlack("0_62b01623e4c60c3db8bfe6da") - // r.FriendDelBlack("0_62b01623e4c60c3db8bfe6da") - // r.FriendSearch("乐谷5") +//执行响应 +func (r *Robot) handleRsp(msg *pb.UserMessage) { - //pack - // r.QueryUserPack() + for i, b := range r.builders { + if b.enabled && (msg.MainType == b.mainType && + msg.SubType == b.subType) { + if !comm.ProtoUnmarshal(msg, b.rsp) { + return + } + printReply(msg, b) + if msg.MainType == "user" && msg.SubType == "login" { + r.loginCallback(b.rsp) + } else { + if b.requested { + r.builders = append(r.builders[:i], r.builders[i+1:]...) + } + } + } + } + +} + +//登录回调 +func (r *Robot) loginCallback(rsp proto.Message) { + r.builders = append(r.builders[:0], r.builders[1:]...) + lr := rsp.(*pb.UserLoginResp) + if lr.Data != nil { + r.user = lr.Data + r.onUserLoaded() + } else { + r.AccountRegister(r.opts.Account, int32(r.opts.ServerId)) //请求Http接口,模拟创建新账号 + } } func (r *Robot) SendToClient(msg *pb.UserMessage, rsp proto.Message) error { @@ -113,6 +146,24 @@ func (r *Robot) SendToClient(msg *pb.UserMessage, rsp proto.Message) error { return nil } +//在这里添加玩家成功登录以后的测试方法 +//次方法在用户登录成功后调用 +func (r *Robot) onUserLoaded() { + //notify + r.RunNotify() + //user + // r.RunUser() + + //friend + // r.RunFriend() + + //pack + // r.RunPack() + + //hero + r.RunHero() +} + //注册账号 func (r *Robot) AccountRegister(account string, sid int32) { if account == "" { @@ -160,11 +211,17 @@ func (r *Robot) AccountRegister(account string, sid int32) { } //打印响应 -func printReply(msg *pb.UserMessage, rsp interface{}) { - if m, ok := rsp.(*pb.ErrorNotify); ok { - log.Printf("rsp [%s.%s] [%v:%v]", msg.MainType, msg.SubType, int32(m.Code), m.Data) +func printReply(msg *pb.UserMessage, builder *builder) { + if m, ok := builder.rsp.(*pb.ErrorNotify); ok { + var tt time.Duration + if builder.start.IsZero() { + tt = time.Duration(0) + } else { + tt = time.Since(builder.start) + } + log.Printf("rsp [%v] [%s.%s] [%v:%v]", tt, m.ReqMainType, m.ReqSubType, int32(m.Code), m.Data) } else { - log.Printf("rsp [%s.%s] [%v]", msg.MainType, msg.SubType, rsp) + log.Printf("rsp [%v] [%s.%s] [%v]", time.Since(builder.start), msg.MainType, msg.SubType, builder.rsp) } } diff --git a/cmd/robot/user.go b/cmd/robot/user.go index c19ef4c89..b8556e2af 100644 --- a/cmd/robot/user.go +++ b/cmd/robot/user.go @@ -4,58 +4,24 @@ import ( "go_dreamfactory/comm" "go_dreamfactory/modules/user" "go_dreamfactory/pb" - "log" ) -func (r *Robot) handleUserMsg(msg *pb.UserMessage) { - switch msg.SubType { - case "login": - r.handleLogin(msg) - case "create": - r.handleCreateUser(msg) - } - +//申明测试接口及请求和响应参数 +var user_builders = []*builder{ + { + //create + mainType: string(comm.SM_UserModule), + subType: user.User_SubType_Create, + req: &pb.UserCreateReq{ //设置请求参数 + NickName: "测试", + }, + rsp: &pb.UserCreateRsp{}, + enabled: true, + }, } -//处理登录响应数据 -func (r *Robot) handleLogin(msg *pb.UserMessage) { - rsp := &pb.UserLoginResp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) - - //是否有登录数据返回 - if rsp != nil { - r.user = rsp.Data - r.onUserLoaded() - } else { - r.AccountRegister(r.opts.Account, int32(r.opts.ServerId)) //请求Http接口,模拟创建新账号 - } -} - -//创角 -func (r *Robot) CreateUser(NickName string) { - req := &pb.UserCreateReq{ - NickName: NickName, - } - - head := &pb.UserMessage{ - MainType: string(comm.SM_UserModule), - SubType: user.User_SubType_Create, - } - - defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req) - err := r.SendToClient(head, req) - if err != nil { - log.Fatal(err) - } -} - -func (r *Robot) handleCreateUser(msg *pb.UserMessage) { - rsp := &pb.UserCreateRsp{} - if !comm.ProtoUnmarshal(msg, rsp) { - return - } - printReply(msg, rsp) +//声明加入到构建器并发起请求 +func (r *Robot) RunUser() { + r.addBuilders(user_builders) + r.handleReq() } diff --git a/modules/hero/configure_comp.go b/modules/hero/configure_comp.go index cf72ca460..33612d799 100644 --- a/modules/hero/configure_comp.go +++ b/modules/hero/configure_comp.go @@ -14,7 +14,7 @@ const ( hero_levelgrow = "game_herolevelgrow.json" //英雄成长系数 hero_starup = "game_herostarup.json" // hero_levelup = "game_herolevelup.json" //英雄等级基础属性 - hero_exp = "game_exp.json" + hero_exp = "game_heroexp.json" ) ///配置管理组件 diff --git a/modules/hero/module.go b/modules/hero/module.go index 5f0927f7d..585943499 100644 --- a/modules/hero/module.go +++ b/modules/hero/module.go @@ -80,3 +80,7 @@ func (this *Hero) GetHeroList(uid string) []*pb.DB_HeroData { } return list } + +func (this *Hero) AddCard(uId string, cardId int32, add int32) (code pb.ErrorCode) { + return +}