Commit c2791869a590be1194c76ea3640d5f3dcdaeb815

Authored by zhangqijia
1 parent e448498a

fix: gm增加删除装备删除物品接口

cmd/gameserver/action/GmAction.go
1 1 package action
2 2  
3 3 import (
  4 + "github.com/golang/protobuf/proto"
  5 + "pro2d/common/db/mongoproxy"
4 6 "pro2d/common/logger"
5 7 "pro2d/models"
6 8 "pro2d/pb"
... ... @@ -10,28 +12,51 @@ import (
10 12 type GmAction struct {
11 13 }
12 14  
13   -func (gm *GmAction) AddExp(role *models.RoleModel, properties map[string]interface{}) int {
14   - logger.Debug(properties)
15   - exp, _ := strconv.Atoi(properties["exp"].(string))
16   - role.IncrPropertyChan("exp", int64(exp), true)
17   - return 0
  15 +func (gm *GmAction) AddExp(role *models.RoleModel, params ...interface{}) {
  16 + logger.Debug(params)
  17 + expIncrease, _ := strconv.Atoi(params[0].(string))
  18 + exp := role.IncrProperty("exp", int64(expIncrease))
  19 + role.UpdateProperty("exp", exp, true)
18 20 }
19 21  
20   -func (gm *GmAction) AddEquip(role *models.RoleModel, properties map[string]interface{}) int {
21   - logger.Debug(properties)
  22 +func (gm *GmAction) AddEquip(role *models.RoleModel, params ...interface{}) {
  23 + logger.Debug(params)
  24 + //TODO 验证装备是否存在
  25 +
22 26 equip := &pb.Equipment{
23   - Id: role.IncreEquipByKey(1),
24   - RoleId: role.Role.Id,
25   - Type: properties["id"].(string),
  27 + Id: role.IncreEquipByKey(1),
  28 + RoleId: role.Role.Id,
  29 + Type: params[0].(string),
  30 + Quality: 1,
26 31 }
27   - //TODO 验证装备是否存在
  32 + role.AddEquip(equip)
  33 +}
28 34  
29   - if role.GetConn() != nil {
30   - role.GetConn().CustomChan() <- func() {
31   - role.AddEquip(equip)
32   - }
  35 +func (gm *GmAction) DelEquip(role *models.RoleModel, params ...interface{}) {
  36 + logger.Debug(params)
  37 + id := params[0].(string)
  38 + if err := mongoproxy.DelOne("equip", "id", id); err != nil {
  39 + logger.Error(err.Error())
  40 + return
  41 + }
  42 + delete(role.Equipments, id)
  43 + update := &pb.EquipmentDelRsp{Id: id}
  44 + if rsp, err := proto.Marshal(update); err != nil {
  45 + logger.Error(" err:", err.Error())
  46 + return
33 47 } else {
34   - role.AddEquip(equip)
  48 + if role.GetConn() != nil {
  49 + role.GetConn().SendSuccess(uint32(pb.ProtoCode_EquipmentDelRsp), rsp)
  50 + }
  51 + }
  52 +}
  53 +
  54 +func (gm *GmAction) DelItem(role *models.RoleModel, params ...interface{}) {
  55 + logger.Debug(params)
  56 + id := params[0].(string)
  57 + count := params[1].(int32)
  58 +
  59 + if !role.CostItem(id, count) {
  60 + logger.Error("item cost error: ", id)
35 61 }
36   - return 0
37 62 }
... ...
cmd/gameserver/service/gm.go
... ... @@ -25,19 +25,19 @@ func (s *GmServer) HandlerFuncObj(tvl, obj reflect.Value) gin.HandlerFunc {
25 25 return func(c *gin.Context) {
26 26 var roleId string
27 27 var ok bool
28   - properties := make(map[string]interface{})
  28 + properties := make([]interface{}, 2)
29 29 //请求类型,以及 format 参数
30 30 if c.Request.Method == "POST" {
31 31 c.Request.ParseForm()
32   - for k, v := range c.Request.PostForm {
33   - properties[k] = v[0]
  32 + for _, v := range c.Request.PostForm {
  33 + properties = append(properties, v[0])
34 34 }
35 35 roleId, ok = c.GetPostForm("role_id")
36 36  
37 37 } else if c.Request.Method == "GET" {
38 38 roleId, ok = c.GetQuery("role_id")
39   - for k, v := range c.Request.URL.Query() {
40   - properties[k] = v[0]
  39 + for _, v := range c.Request.URL.Query() {
  40 + properties = append(properties, v[0])
41 41 }
42 42 } else {
43 43 c.JSON(http.StatusOK, gin.H{"code": -101, "message": "not support method"})
... ... @@ -52,9 +52,14 @@ func (s *GmServer) HandlerFuncObj(tvl, obj reflect.Value) gin.HandlerFunc {
52 52 //role start
53 53 conn := s.Server.GetConnManage().GetConnByRID(roleId)
54 54 var role *models.RoleModel
  55 + callback := func() {
  56 + tvl.Call([]reflect.Value{obj, reflect.ValueOf(role), reflect.ValueOf(properties)})
  57 + role.SaveRoleData(0)
  58 + }
55 59 if conn != nil {
56 60 //在线
57 61 role = conn.(*Agent).Role
  62 + conn.CustomChan() <- callback
58 63 } else {
59 64 //离线
60 65 role = models.NewRole(roleId)
... ... @@ -63,17 +68,9 @@ func (s *GmServer) HandlerFuncObj(tvl, obj reflect.Value) gin.HandlerFunc {
63 68 return
64 69 }
65 70 role.LoadAll()
  71 + callback()
66 72 }
67   -
68   - //func start
69   - v := tvl.Call([]reflect.Value{obj, reflect.ValueOf(role), reflect.ValueOf(properties)})
70   - role.SaveRoleDataChan(0)
71   -
72   - if len(v) != 1 {
73   - c.JSON(http.StatusNotFound, gin.H{"code": -100, "message": "request param len is error"})
74   - return
75   - }
76   - c.JSON(http.StatusOK, gin.H{"code": v[0].Interface()})
  73 + c.JSON(http.StatusOK, gin.H{"code": 0})
77 74 }
78 75 }
79 76  
... ...
common/db/mongoproxy/mongoplugin.go
... ... @@ -79,6 +79,12 @@ func FindMany(coll string, key string, val interface{}, schema interface{}) erro
79 79 return r.All(context.TODO(), schema)
80 80 }
81 81  
  82 +func DelOne(coll string, key string, value interface{}) error {
  83 + filter := bson.D{{key, value}}
  84 + _, err := mongoDatabase.Collection(coll).DeleteOne(context.TODO(), filter, nil)
  85 + return err
  86 +}
  87 +
82 88 func GetBsonD(key string, value interface{}) interface{} {
83 89 return bson.D{{key, value}}
84 90 }
... ...
models/rolePlugin.go
... ... @@ -51,7 +51,10 @@ func (m *RoleModel) AddItem(key string, count int32) bool {
51 51 logger.Error(err.Error())
52 52 return true
53 53 }
54   - m.GetConn().Send(0, uint32(pb.ProtoCode_RoleUpdateItemsRsp), rsp)
  54 +
  55 + if m.GetConn() != nil {
  56 + m.GetConn().Send(0, uint32(pb.ProtoCode_RoleUpdateItemsRsp), rsp)
  57 + }
55 58 return true
56 59 }
57 60  
... ...
pb/game.pb.go
... ... @@ -562,6 +562,53 @@ func (x *EquipmentAddRsp) GetEquip() *Equipment {
562 562 return nil
563 563 }
564 564  
  565 +type EquipmentDelRsp struct {
  566 + state protoimpl.MessageState
  567 + sizeCache protoimpl.SizeCache
  568 + unknownFields protoimpl.UnknownFields
  569 +
  570 + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
  571 +}
  572 +
  573 +func (x *EquipmentDelRsp) Reset() {
  574 + *x = EquipmentDelRsp{}
  575 + if protoimpl.UnsafeEnabled {
  576 + mi := &file_game_proto_msgTypes[10]
  577 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  578 + ms.StoreMessageInfo(mi)
  579 + }
  580 +}
  581 +
  582 +func (x *EquipmentDelRsp) String() string {
  583 + return protoimpl.X.MessageStringOf(x)
  584 +}
  585 +
  586 +func (*EquipmentDelRsp) ProtoMessage() {}
  587 +
  588 +func (x *EquipmentDelRsp) ProtoReflect() protoreflect.Message {
  589 + mi := &file_game_proto_msgTypes[10]
  590 + if protoimpl.UnsafeEnabled && x != nil {
  591 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
  592 + if ms.LoadMessageInfo() == nil {
  593 + ms.StoreMessageInfo(mi)
  594 + }
  595 + return ms
  596 + }
  597 + return mi.MessageOf(x)
  598 +}
  599 +
  600 +// Deprecated: Use EquipmentDelRsp.ProtoReflect.Descriptor instead.
  601 +func (*EquipmentDelRsp) Descriptor() ([]byte, []int) {
  602 + return file_game_proto_rawDescGZIP(), []int{10}
  603 +}
  604 +
  605 +func (x *EquipmentDelRsp) GetId() string {
  606 + if x != nil {
  607 + return x.Id
  608 + }
  609 + return ""
  610 +}
  611 +
565 612 var File_game_proto protoreflect.FileDescriptor
566 613  
567 614 var file_game_proto_rawDesc = []byte{
... ... @@ -608,9 +655,11 @@ var file_game_proto_rawDesc = []byte{
608 655 0x6d, 0x73, 0x22, 0x3a, 0x0a, 0x0f, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x41,
609 656 0x64, 0x64, 0x52, 0x73, 0x70, 0x12, 0x27, 0x0a, 0x05, 0x65, 0x71, 0x75, 0x69, 0x70, 0x18, 0x01,
610 657 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x73, 0x2e, 0x45, 0x71,
611   - 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x71, 0x75, 0x69, 0x70, 0x42, 0x0a,
612   - 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
613   - 0x6f, 0x33,
  658 + 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x71, 0x75, 0x69, 0x70, 0x22, 0x21,
  659 + 0x0a, 0x0f, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x52, 0x73,
  660 + 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
  661 + 0x64, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70,
  662 + 0x72, 0x6f, 0x74, 0x6f, 0x33,
614 663 }
615 664  
616 665 var (
... ... @@ -625,7 +674,7 @@ func file_game_proto_rawDescGZIP() []byte {
625 674 return file_game_proto_rawDescData
626 675 }
627 676  
628   -var file_game_proto_msgTypes = make([]protoimpl.MessageInfo, 10)
  677 +var file_game_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
629 678 var file_game_proto_goTypes = []interface{}{
630 679 (*HeartReq)(nil), // 0: game.HeartReq
631 680 (*HeartRsp)(nil), // 1: game.HeartRsp
... ... @@ -637,19 +686,20 @@ var file_game_proto_goTypes = []interface{}{
637 686 (*RoleUpdatePropertyRsp)(nil), // 7: game.RoleUpdatePropertyRsp
638 687 (*RoleUpdateItemsRsp)(nil), // 8: game.RoleUpdateItemsRsp
639 688 (*EquipmentAddRsp)(nil), // 9: game.EquipmentAddRsp
640   - (*Team)(nil), // 10: models.Team
641   - (*Role)(nil), // 11: models.Role
642   - (*Hero)(nil), // 12: models.Hero
643   - (*Equipment)(nil), // 13: models.Equipment
  689 + (*EquipmentDelRsp)(nil), // 10: game.EquipmentDelRsp
  690 + (*Team)(nil), // 11: models.Team
  691 + (*Role)(nil), // 12: models.Role
  692 + (*Hero)(nil), // 13: models.Hero
  693 + (*Equipment)(nil), // 14: models.Equipment
644 694 }
645 695 var file_game_proto_depIdxs = []int32{
646   - 10, // 0: game.ChangeTeamReq.team:type_name -> models.Team
647   - 11, // 1: game.RoleRsp.role:type_name -> models.Role
648   - 12, // 2: game.RoleRsp.hero:type_name -> models.Hero
649   - 10, // 3: game.RoleRsp.team:type_name -> models.Team
650   - 13, // 4: game.RoleRsp.equipments:type_name -> models.Equipment
651   - 11, // 5: game.RoleUpdatePropertyRsp.role:type_name -> models.Role
652   - 13, // 6: game.EquipmentAddRsp.equip:type_name -> models.Equipment
  696 + 11, // 0: game.ChangeTeamReq.team:type_name -> models.Team
  697 + 12, // 1: game.RoleRsp.role:type_name -> models.Role
  698 + 13, // 2: game.RoleRsp.hero:type_name -> models.Hero
  699 + 11, // 3: game.RoleRsp.team:type_name -> models.Team
  700 + 14, // 4: game.RoleRsp.equipments:type_name -> models.Equipment
  701 + 12, // 5: game.RoleUpdatePropertyRsp.role:type_name -> models.Role
  702 + 14, // 6: game.EquipmentAddRsp.equip:type_name -> models.Equipment
653 703 7, // [7:7] is the sub-list for method output_type
654 704 7, // [7:7] is the sub-list for method input_type
655 705 7, // [7:7] is the sub-list for extension type_name
... ... @@ -784,6 +834,18 @@ func file_game_proto_init() {
784 834 return nil
785 835 }
786 836 }
  837 + file_game_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
  838 + switch v := v.(*EquipmentDelRsp); i {
  839 + case 0:
  840 + return &v.state
  841 + case 1:
  842 + return &v.sizeCache
  843 + case 2:
  844 + return &v.unknownFields
  845 + default:
  846 + return nil
  847 + }
  848 + }
787 849 }
788 850 type x struct{}
789 851 out := protoimpl.TypeBuilder{
... ... @@ -791,7 +853,7 @@ func file_game_proto_init() {
791 853 GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
792 854 RawDescriptor: file_game_proto_rawDesc,
793 855 NumEnums: 0,
794   - NumMessages: 10,
  856 + NumMessages: 11,
795 857 NumExtensions: 0,
796 858 NumServices: 0,
797 859 },
... ...
pb/protocode.pb.go
... ... @@ -35,6 +35,7 @@ const (
35 35 ProtoCode_RoleUpdatePropertyRsp ProtoCode = 9
36 36 ProtoCode_RoleUpdateItemsRsp ProtoCode = 10
37 37 ProtoCode_EquipmentAddRsp ProtoCode = 11
  38 + ProtoCode_EquipmentDelRsp ProtoCode = 12
38 39 )
39 40  
40 41 // Enum value maps for ProtoCode.
... ... @@ -52,6 +53,7 @@ var (
52 53 9: "RoleUpdatePropertyRsp",
53 54 10: "RoleUpdateItemsRsp",
54 55 11: "EquipmentAddRsp",
  56 + 12: "EquipmentDelRsp",
55 57 }
56 58 ProtoCode_value = map[string]int32{
57 59 "UNKNOWN": 0,
... ... @@ -66,6 +68,7 @@ var (
66 68 "RoleUpdatePropertyRsp": 9,
67 69 "RoleUpdateItemsRsp": 10,
68 70 "EquipmentAddRsp": 11,
  71 + "EquipmentDelRsp": 12,
69 72 }
70 73 )
71 74  
... ... @@ -100,7 +103,7 @@ var File_protocode_proto protoreflect.FileDescriptor
100 103  
101 104 var file_protocode_proto_rawDesc = []byte{
102 105 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
103   - 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x2a, 0xde, 0x01, 0x0a,
  106 + 0x6f, 0x12, 0x09, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x2a, 0xf3, 0x01, 0x0a,
104 107 0x09, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e,
105 108 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
106 109 0x52, 0x73, 0x70, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x48, 0x65, 0x61, 0x72, 0x74, 0x52, 0x65,
... ... @@ -114,9 +117,10 @@ var file_protocode_proto_rawDesc = []byte{
114 117 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x52, 0x73, 0x70, 0x10, 0x09,
115 118 0x12, 0x16, 0x0a, 0x12, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x49, 0x74,
116 119 0x65, 0x6d, 0x73, 0x52, 0x73, 0x70, 0x10, 0x0a, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x71, 0x75, 0x69,
117   - 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x52, 0x73, 0x70, 0x10, 0x0b, 0x42, 0x0a, 0x5a,
118   - 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
119   - 0x33,
  120 + 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x41, 0x64, 0x64, 0x52, 0x73, 0x70, 0x10, 0x0b, 0x12, 0x13, 0x0a,
  121 + 0x0f, 0x45, 0x71, 0x75, 0x69, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x6c, 0x52, 0x73, 0x70,
  122 + 0x10, 0x0c, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x2e, 0x2f, 0x70, 0x62, 0x3b, 0x70, 0x62, 0x62, 0x06,
  123 + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
120 124 }
121 125  
122 126 var (
... ...