diff --git a/src/server/conf/catnip/CatnipCfg.go b/src/server/conf/catnip/CatnipCfg.go index fe242583..769f0460 100644 --- a/src/server/conf/catnip/CatnipCfg.go +++ b/src/server/conf/catnip/CatnipCfg.go @@ -78,19 +78,22 @@ func GetTemplateId(Id int) int { return gamedata.GetIntValue(data, "Template") } -func GetProgressReward(Id int, Progress int) []*item.Item { +func GetProgressReward(Id int, Rewards []int, Progress int) ([]*item.Item, []int) { TemplateId := GetTemplateId(Id) data, err := gamedata.GetDataByIntKey(CATNIP_GAME_CFG_NAME, Id) if err != nil { - return nil + return nil, nil } - - for _, v := range data { - if gamedata.GetIntValue(v, "Need") == Progress && gamedata.GetIntValue(v, "Template") == TemplateId { - return gamedata.GetItemList(v, "Items") + Items := []*item.Item{} + Ids := []int{} + for k, v := range data { + Id := GoUtil.Int(k) + if !GoUtil.InArray(Id, Rewards) && gamedata.GetIntValue(v, "Need") < Progress && gamedata.GetIntValue(v, "Template") == TemplateId { + Items = append(Items, gamedata.GetItemList(v, "Items")...) + Ids = append(Ids, GoUtil.Int(k)) } } - return nil + return Items, Ids } func GetItemCost(Id, Mul int) []*item.Item { diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 228f3eb6..911073fc 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -5551,7 +5551,7 @@ func ReqCatnipReward(player *Player, buf []byte) error { }) return fmt.Errorf("activity not active") } - Items, GameInfo, err := CatnipMod.Reward(int(req.Id), int(req.Progress)) + Items, GameInfo, err := CatnipMod.Reward(int(req.Id)) if err != nil { player.SendErrClienRes(&msg.ResCatnipReward{ Code: msg.RES_CODE_FAIL, diff --git a/src/server/game/mod/catnip/Catnip.go b/src/server/game/mod/catnip/Catnip.go index f77bb81b..36377005 100644 --- a/src/server/game/mod/catnip/Catnip.go +++ b/src/server/game/mod/catnip/Catnip.go @@ -179,21 +179,15 @@ func (c *CatnipMod) Play(Id int) (int, int, int, []*item.Item, []*item.Item, int return Id, Growth, GameInfo.Partner, Items, ItemCost, FriendItems, nil } -func (c *CatnipMod) Reward(Id, Progress int) ([]*item.Item, *CatnipGame, error) { +func (c *CatnipMod) Reward(Id int) ([]*item.Item, *CatnipGame, error) { GameInfo, ok := c.Game[Id] if !ok { return nil, nil, fmt.Errorf("game with Progress %d does not exist", Id) } - if GameInfo.Progress < Progress { - return nil, nil, fmt.Errorf("game with ID %d has not reached the required progress %d", Id, Progress) - } - if GoUtil.InArray(Progress, GameInfo.Reward) { - return nil, nil, fmt.Errorf("reward for progress %d has already been claimed in game ID %d", Progress, Id) - } - GameInfo.Reward = append(GameInfo.Reward, Progress) - Items := catnipCfg.GetProgressReward(c.Id, Progress) + Items, Ids := catnipCfg.GetProgressReward(c.Id, GameInfo.Reward, GameInfo.Progress) + GameInfo.Reward = append(GameInfo.Reward, Ids...) if Items == nil { - return nil, nil, fmt.Errorf("no reward found for progress %d in game ID %d", Progress, Id) + return nil, nil, fmt.Errorf("no reward found for progress %d in game ID %d", GameInfo.Progress, Id) } return Items, GameInfo, nil } diff --git a/src/server/msg/Gameapi.pb.go b/src/server/msg/Gameapi.pb.go index d292d438..7605cafd 100644 --- a/src/server/msg/Gameapi.pb.go +++ b/src/server/msg/Gameapi.pb.go @@ -26732,8 +26732,7 @@ func (x *ResCatnipPlay) GetId() int32 { // 领取阶段奖励 type ReqCatnipReward struct { state protoimpl.MessageState `protogen:"open.v1"` - Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id - Progress int32 `protobuf:"varint,2,opt,name=Progress,proto3" json:"Progress,omitempty"` // 进度 + Id int32 `protobuf:"varint,1,opt,name=Id,proto3" json:"Id,omitempty"` // 猫草id unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -26775,13 +26774,6 @@ func (x *ReqCatnipReward) GetId() int32 { return 0 } -func (x *ReqCatnipReward) GetProgress() int32 { - if x != nil { - return x.Progress - } - return 0 -} - type ResCatnipReward struct { state protoimpl.MessageState `protogen:"open.v1"` Code RES_CODE `protobuf:"varint,1,opt,name=Code,proto3,enum=tutorial.RES_CODE" json:"Code,omitempty"` @@ -29440,10 +29432,9 @@ const file_proto_Gameapi_proto_rawDesc = "" + "\rResCatnipPlay\x12&\n" + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + "\x03Msg\x18\x02 \x01(\tR\x03Msg\x12\x0e\n" + - "\x02Id\x18\x03 \x01(\x05R\x02Id\"=\n" + + "\x02Id\x18\x03 \x01(\x05R\x02Id\"!\n" + "\x0fReqCatnipReward\x12\x0e\n" + - "\x02Id\x18\x01 \x01(\x05R\x02Id\x12\x1a\n" + - "\bProgress\x18\x02 \x01(\x05R\bProgress\"K\n" + + "\x02Id\x18\x01 \x01(\x05R\x02Id\"K\n" + "\x0fResCatnipReward\x12&\n" + "\x04Code\x18\x01 \x01(\x0e2\x12.tutorial.RES_CODER\x04Code\x12\x10\n" + "\x03Msg\x18\x02 \x01(\tR\x03Msg\"\x16\n" +