diff --git a/src/server/game/mod/chess/Chess.go b/src/server/game/mod/chess/Chess.go index c5502a94..dd9880ac 100644 --- a/src/server/game/mod/chess/Chess.go +++ b/src/server/game/mod/chess/Chess.go @@ -339,14 +339,37 @@ func (cb *ChessBorad) GetEmitList() []int { // 完成订单 移除棋子 func (cb *ChessBorad) FinishOrder(ChessId []int) error { + unlockChessList := cb.GetUnlockChessList() + unlockChessMap := make(map[int]int) + for _, v := range unlockChessList { + unlockChessMap[v]++ + } + + boardChess := []int{} + BagChess := []int{} for _, v := range ChessId { + if unlockChessMap[v] > 0 { + unlockChessMap[v]-- + boardChess = append(boardChess, v) + } else { + BagChess = append(BagChess, v) + } + } + for _, v := range boardChess { err := cb.FinishOrderChess(v) if err != nil { return err } } + for _, v := range BagChess { + err := cb.FinishOrderChessByBag(v) + if err != nil { + return err + } + } return nil } + func (cb *ChessBorad) FinishOrderChess(Chess int) error { for k, v := range cb.ChessList { if v == Chess { @@ -354,13 +377,17 @@ func (cb *ChessBorad) FinishOrderChess(Chess int) error { return nil } } + return fmt.Errorf("order finish board chess id:%d not exist", Chess) +} + +func (cb *ChessBorad) FinishOrderChessByBag(Chess int) error { for k, v := range cb.ChessBag.List { if v.ChessId == Chess { cb.ChessBag.List[k] = ChessBagGrid{} return nil } } - return errors.New("order finish chess id not exist") + return fmt.Errorf("order finish bag chess id:%d not exist", Chess) } // 棋子转换 diff --git a/src/server/test/order_test.go b/src/server/test/order_test.go index 456bc06d..ff7a89f7 100644 --- a/src/server/test/order_test.go +++ b/src/server/test/order_test.go @@ -20,3 +20,14 @@ func TestOrderStart(t *testing.T) { star = int(float64(star)*float64(order_facotry)/1000+0.5) * 10 fmt.Printf("star is %d", star) } + +func TestOrderFinish(t *testing.T) { + p1 := new(game.Player) + p1.InitPlayer("3625212") + game.G_GameLogicPtr.SetPlayer(p1) + ChessMod := p1.GetChessMod() + err := ChessMod.FinishOrder([]int{1, 2, 3}) + if err != nil { + t.Errorf("finish order failed:%v", err) + } +}