diff --git a/src/server/GoUtil/sliceUtil.go b/src/server/GoUtil/sliceUtil.go index 09ac9938..68b8b0e3 100644 --- a/src/server/GoUtil/sliceUtil.go +++ b/src/server/GoUtil/sliceUtil.go @@ -52,7 +52,9 @@ func RandSlice(slice []int) int { return slice[Id] } -func RandSliceNum(slice []int, num int) []int { +func RandSliceNum(s []int, num int) []int { + slice := make([]int, len(s)) + copy(slice, s) r := make([]int, 0, num) if num <= 0 || len(slice) < num { return slice @@ -82,7 +84,9 @@ func RandSliceNum2(s []interface{}, num int) []interface{} { return r } -func RandSliceNumNonAdjacent(slice []int, num int) []int { +func RandSliceNumNonAdjacent(s []int, num int) []int { + slice := make([]int, len(s)) + copy(slice, s) if len(slice) < 2*num { return nil } diff --git a/src/server/db/Redis.go b/src/server/db/Redis.go index f1ad5716..850f2ec0 100644 --- a/src/server/db/Redis.go +++ b/src/server/db/Redis.go @@ -93,6 +93,14 @@ func RedisZRangeWithScores(key string, start, stop int64) ([]redis.Z, error) { return val, nil } +func RedisZRevRangeWithScores(key string, start, stop int64) ([]redis.Z, error) { + val, err := Rdb.ZRevRangeWithScores(ctx, key, start, stop).Result() + if err != nil { + return nil, err + } + return val, nil +} + func RedisZRankWithScores(key, member string) (int64, float64, error) { val, err := Rdb.ZRank(ctx, key, member).Result() if err != nil { diff --git a/src/server/game/Player.go b/src/server/game/Player.go index 7d639822..7a7ae56d 100644 --- a/src/server/game/Player.go +++ b/src/server/game/Player.go @@ -474,7 +474,10 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { ResCard := make([]*msg.CardPack, 0) ResItem := make([]*msg.ItemInfo, 0) ItemMod := p.PlayMod.getItemMod() - + AvatarMod := p.PlayMod.getAvatarMod() + EmojiMod := p.PlayMod.getEmojiMod() + FaceMod := p.PlayMod.getFaceMod() + BackDataType := map[int]struct{}{} for _, v := range itemList { if v.Num == 0 { continue @@ -625,14 +628,30 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { "piggy_bank_id": Effect, "income_from": Label, }) - case item.ITEM_TYPE_AVATAR: + case item.ITEM_TYPE_AVATAR: // 头像框 Effect := itemCfg.GetItemEffectList(v.Id) - AvatarMod := p.PlayMod.getAvatarMod() AvatarMod.Unlock(Effect[0], Effect[1]) p.TeLog("avatarIcon_income", map[string]interface{}{ "avatar_id": Effect[0], "income_from": Label, }) + BackDataType[item.ITEM_TYPE_AVATAR] = struct{}{} + case item.ITEM_TYPE_EMOJI: // 表情 + Effect := itemCfg.GetItemEffectList(v.Id) + EmojiMod.Unlock(Effect[0], Effect[1]) + p.TeLog("emoji_income", map[string]interface{}{ + "emoji_id": Effect[0], + "income_from": Label, + }) + BackDataType[item.ITEM_TYPE_EMOJI] = struct{}{} + case item.ITEM_TYPE_FACE: // 头像 + Effect := itemCfg.GetItemEffectList(v.Id) + FaceMod.Unlock(Effect[0], Effect[1]) + p.TeLog("face_income", map[string]interface{}{ + "face_id": Effect[0], + "income_from": Label, + }) + BackDataType[item.ITEM_TYPE_FACE] = struct{}{} case item.ITEM_TYPE_ACTIVITY_RACE: // 活动竞速 RaceMod := p.PlayMod.getRaceMod() RaceMod.AddCoin(v.Num) @@ -662,6 +681,14 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error { Lable: Label, }) } + for k := range BackDataType { + switch k { + case item.ITEM_TYPE_AVATAR: + case item.ITEM_TYPE_EMOJI: + case item.ITEM_TYPE_FACE: + BackUserInfo(p) + } + } CardMod := p.PlayMod.getCardMod() p.PushClientRes(CardMod.NotifyCard()) p.PushClientRes(ItemMod.NotifyItem()) diff --git a/src/server/game/PlayerChessMod.go b/src/server/game/PlayerChessMod.go index 5091c7c3..d7f92e6a 100644 --- a/src/server/game/PlayerChessMod.go +++ b/src/server/game/PlayerChessMod.go @@ -281,7 +281,7 @@ func getChesslvRange(Emit int, EnergyMul int) (int, int) { func triggerComposeChess(player *Player, ChessId, EnergyMul int, Emit []int) { OrderMod := player.PlayMod.getOrderMod() - if OrderMod.Step != 12 { + if OrderMod.Step < 12 { return } if !checkChess(ChessId, EnergyMul, Emit) { diff --git a/src/server/game/RankMgr.go b/src/server/game/RankMgr.go index 26f1839c..df44cfc1 100644 --- a/src/server/game/RankMgr.go +++ b/src/server/game/RankMgr.go @@ -117,7 +117,7 @@ func (r *RankMgr) getRankInfo(m *msg.Msg) (interface{}, error) { } func (r *RankMgr) getRedisRankInfo(m *msg.Msg) (interface{}, error) { - RedisList, err := db.RedisZRangeWithScores(RANK_USER, 0, 100) + RedisList, err := db.RedisZRevRangeWithScores(RANK_USER, 0, 100) if err != nil { return &RankInfo{}, nil } diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 5ce9927d..351f14fe 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -364,7 +364,7 @@ func ReqDelOrder(player *Player, buf []byte) error { req := &msg.ReqDelOrder{} proto.Unmarshal(buf, req) OrderMod := player.PlayMod.getOrderMod() - err := OrderMod.DelOrder(int(req.OrderId)) + DelOrder, err := OrderMod.DelOrder(int(req.OrderId)) if err != nil { player.SendErrClienRes(&msg.ResDelOrder{ Code: msg.RES_CODE_FAIL, @@ -375,6 +375,10 @@ func ReqDelOrder(player *Player, buf []byte) error { player.PushAndSendClienRes(&msg.ResDelOrder{ Code: msg.RES_CODE_SUCCESS, }) + player.TeLog("order_delete", map[string]interface{}{ + "order_id": int(req.OrderId), + "order": DelOrder, + }) player.PushClientRes(OrderMod.BackData()) return nil } @@ -741,9 +745,12 @@ func ReqUpgradeChess(player *Player, buf []byte) error { }) return err } + Handbook := player.PlayMod.getHandbookMod() + Handbook.SetHandbook(NewChess) triggerComposeChess(player, NewChess, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList()) player.PlayMod.save() player.PushClientRes(ChessMod.BackData()) + player.PushClientRes(Handbook.BackData()) player.PushClientRes(&msg.ResUpgradeChess{ Code: msg.RES_CODE_SUCCESS, }) diff --git a/src/server/game/UnitTest.go b/src/server/game/UnitTest.go index 477e3cd2..47bc2c05 100644 --- a/src/server/game/UnitTest.go +++ b/src/server/game/UnitTest.go @@ -196,15 +196,26 @@ func UnitOrder2(p *Player, Lv, EnergyMul int) float64 { return Energy / float64(5000) } -func UnitOrder3(player *Player) error { - triggerComposeChess(player, 15, player.PlayMod.getBaseMod().EnergyMul, player.PlayMod.getChessMod().GetEmitList()) +func UnitChess1(p *Player) error { + ChessMod := p.PlayMod.getChessMod() + p.PushClientRes(ChessMod.BackData()) + EmitRetireTrigger1(p) + DailyTaskMod := p.PlayMod.getDailyTaskMod() + p.PushClientRes(DailyTaskMod.BackData()) return nil } func UnitPlayroom(p *Player) error { PlayroomMod := p.PlayMod.getPlayroomMod() - PlayroomMod.Physiology[1].Num = 10 - PlayroomMod.Physiology[1].Time = 1738978968 - LimitedTimePlayroomTrigger(p) + PlayroomMod.UnLock(15) + PlayroomBackData(p) + return nil +} + +func UnitDailyTask(p *Player) error { + DailyTaskMod := p.PlayMod.getDailyTaskMod() + for i := 0; i < 1000; i++ { + DailyTaskMod.WeekUpdate() + } return nil } diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index 58c438f1..0d977e31 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -29,6 +29,12 @@ const ( CHESS_UPGRADE = 708 // 升级器 ) +const ( + EMIT_RETIRE_START = 1 + EMIT_RETIRE_ING = 2 + EMIT_RETIRE_END = 3 +) + type ChessBorad struct { ChessList []int EmitList map[int]int @@ -254,7 +260,7 @@ func (cb *ChessBorad) GetEmitList() []int { if EmitID == "" { continue } - if cb.Retire[EmitID] == 2 { + if cb.Retire[EmitID] == EMIT_RETIRE_END { continue } EmitType := mergeDataCfg.GetEmitType(k) @@ -473,7 +479,7 @@ func (cb *ChessBorad) BeginRetire(EmitType string) error { if ok { return errors.New("chess has been retired") } - cb.Retire[EmitType] = 1 + cb.Retire[EmitType] = EMIT_RETIRE_START return nil } @@ -493,7 +499,7 @@ func (cb *ChessBorad) RetireOrder(EmitType string) error { sort.Sort(sort.Reverse(sort.IntSlice(chess))) cb.RetireChessMap[EmitType] = chess - cb.Retire[EmitType] = 2 + cb.Retire[EmitType] = EMIT_RETIRE_ING return nil } @@ -502,7 +508,7 @@ func (cb *ChessBorad) FinishRetire(EmitType string) error { if !ok { return errors.New("chess has not been retired") } - cb.Retire[EmitType] = 3 + cb.Retire[EmitType] = EMIT_RETIRE_END return nil } diff --git a/src/server/game/mod/item/Item.go b/src/server/game/mod/item/Item.go index 01fd26d6..8ce5d555 100644 --- a/src/server/game/mod/item/Item.go +++ b/src/server/game/mod/item/Item.go @@ -40,6 +40,8 @@ const ( ITEM_TYPE_ACTIVITY = 106 // 活动道具 ITEM_TYPE_ACTIVITY_RACE = 107 // 竞赛活动道具 ITEM_TYPE_PLAYROOM_VISIT = 108 // playroom拜访道具 + ITEM_TYPE_EMOJI = 109 // 表情 + ITEM_TYPE_FACE = 110 // 头像 ) func (i *ItemMod) InitData() { diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index 92bdd5a8..a6a1737c 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -658,16 +658,16 @@ func (o *OrderMod) Retire(EmitId string) { o.EmitShuffle = nil } -func (o *OrderMod) DelOrder(OrderId int) error { +func (o *OrderMod) DelOrder(OrderId int) (*Order, error) { Order, ok := o.OrderList[OrderId] if !ok { - return fmt.Errorf("order not exist") + return nil, fmt.Errorf("order not exist") } if Order.Type != Clean_Order_type { - return fmt.Errorf("order type wrong") + return nil, fmt.Errorf("order type wrong") } delete(o.OrderList, OrderId) - return nil + return &Order, nil } func (o *OrderMod) CreateComfortOrder(lv int, Emit []int, EnergyMul, Diff, ChessNum int) error {