Merge branch 'develop' into audit

This commit is contained in:
hahwu 2025-09-16 19:04:42 +08:00
commit 0ef1abefcd
8 changed files with 209 additions and 74 deletions

View File

@ -45,10 +45,10 @@ func GetEmitTypeByColor(Color string) string {
if err != nil {
return ""
}
for _, v := range data {
ColorList := strings.Split(gamedata.GetStringValue(data, "Order_Type"), ",")
for k, v := range data {
ColorList := strings.Split(gamedata.GetStringValue(v, "Order_Type"), ",")
if GoUtil.InStringArray(Color, ColorList) {
return gamedata.GetStringValue(v, "Type")
return k
}
}
return ""

View File

@ -264,6 +264,7 @@ func handle(p *Player, m *msg.Msg) error {
if m.Extra != nil {
Items = m.Extra.([]*item.Item)
}
p.AddLog(m.From, friend.LOG_TYPE_TREASURE_HELP, "", m.SendT)
p.HandleItem(Items, proto.ITEM_POP_LABEL_Friendtreasure.String())
case msg.HANDLE_TYPE_HANDBOOK_COLLECTION: // 图鉴收集奖励
data := m.Extra.(msg.HandbookMsg)

View File

@ -4170,15 +4170,16 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error {
return err
}
for _, v := range FriendTreasureMod.List {
if v.Status != 1 {
continue
ItemNum := 0
if v.Status == 1 {
ItemNum = FriendItemNum
}
G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{
From: int(player.M_DwUin),
To: int(v.Uid),
Type: MsqMod.FRIEND_TREASURE_HANDLE,
SendT: GoUtil.Now(),
Extra: []*item.Item{item.NewItem(item.ITEM_STAR_ID, FriendItemNum)},
Extra: []*item.Item{item.NewItem(item.ITEM_STAR_ID, ItemNum)},
})
}
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_FriendtreasureEnd.String())

View File

@ -2,6 +2,7 @@ package game
import (
"encoding/json"
"fmt"
"math"
"server/GoUtil"
"server/MergeConst"
@ -110,6 +111,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
}
}
if OrderData == nil {
GoUtil.SendFeishuFatal(int(player.M_DwUin), "GoogleVerify支付校验异常", fmt.Sprintf("GoogleVerify parmas OrderSn%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token))
log.Debug("[order data nil] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderSn, req.ProduceId)
return
}

View File

@ -44,16 +44,71 @@ func UnitOrder(p *Player) error {
OrderMod := p.PlayMod.getOrderMod()
ChessMod := p.PlayMod.getChessMod()
BaseMod := p.PlayMod.getBaseMod()
OrderMod.OrderList = make(map[int]order.Order)
for i := 0; i < 1000; i++ {
OrderMod.ChessPool = nil
OrderMod.EmitShuffle = nil
//OrderMod.OrderList = make(map[int]order.Order)
for i := 0; i < 5000; i++ {
//OrderMod.ChessPool = nil
//OrderMod.EmitShuffle = nil
err := OrderMod.CreateNormalOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul())
if err != nil {
return err
}
}
p.FormatOrderReward()
NumMap := make(map[int]int)
for _, v := range OrderMod.OrderList {
NumMap[len(v.MergeId)]++
}
sum0 := 0
for _, v := range NumMap {
sum0 += v
}
for k, v := range NumMap {
fmt.Printf("棋子数量: %d, 占比: %.2f%% \n", k, float64(v)/float64(sum0)*100)
}
DiffMap := make(map[int]int)
for _, v := range OrderMod.OrderList {
DiffMap[v.Diff]++
}
sum := 0
for _, v := range DiffMap {
sum += v
}
for k, v := range DiffMap {
fmt.Printf("难度等级: %d, 占比: %.2f%% \n", k, float64(v)/float64(sum)*100)
}
AP := make(map[string]int, 0)
BP := make(map[string]int, 0)
for _, v := range OrderMod.OrderList {
for _, id := range v.MergeId {
Color := mergeDataCfg.GetColorById(id)
if Color == "Bath Toys" {
AP["Bath Toys"] += 1
}
if Color == "Cleaning Tools" {
AP["Cleaning Tools"] += 1
}
if Color == "Baby Toy" {
BP["Baby Toy"] += 1
}
if Color == "Books And Picture Books" {
BP["Books And Picture Books"] += 1
}
}
}
sum1 := 0
for _, v := range AP {
sum1 += v
}
sum2 := 0
for _, v := range BP {
sum2 += v
}
for k, v := range AP {
fmt.Printf("%s %.2f\n", k, float64(v)/float64(sum1)*100)
}
for k, v := range BP {
fmt.Printf("%s %.2f\n", k, float64(v)/float64(sum2)*100)
}
return nil
}

View File

@ -82,6 +82,7 @@ const (
LOG_TYPE_PLAYROOM_CAT_LOSE = 27 // 小猫游戏,装箱小猫未成功
LOG_TYPE_CARD_GIVE_ACCEPT = 28 // 接受卡牌请求
LOG_TYPE_FRIEND_INVITE = 29 // 邀请注册
LOG_TYPE_TREASURE_HELP = 30 // 好友宝藏帮助
)
const (
@ -274,6 +275,8 @@ func (f *FriendMod) AddLog(Uid, Type int, Param string) int {
f.AddBubble(f.AutoId, Type)
case LOG_TYPE_PLAYROOM_UPVOTE:
f.AddBubble(f.AutoId, Type)
case LOG_TYPE_TREASURE_HELP:
f.AddBubble(f.AutoId, Type)
}
if len(f.Log) > 30 {
f.Log = f.Log[len(f.Log)-30:]

View File

@ -2,7 +2,6 @@ package order
import (
"fmt"
"log"
"server/GoUtil"
limitedTimeEventCfg "server/conf/limitedTimeEvent"
mergeDataCfg "server/conf/mergeData"
@ -23,11 +22,14 @@ type OrderMod struct {
EimtOrder map[string]struct{}
PreheatStep map[string]int // 预热订单步骤
EmitShuffle []string // 发射器乱序
ColorShuffle []string // 棋子系列乱序
LastColor string // 上次生成订单的棋子系列
ChessPool []int // 棋子池
OrderPool map[int]*Order // 订单池
FinishOrder []int // 已完成订单
IsCharge bool // 是否充值
AutoEmit []string // 自动发射器
LastChess int // 上次生成订单的棋子
}
type Order struct {
@ -431,7 +433,18 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error {
}
break
}
log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err)
// if len(mergeList) == 2 {
// ColorMap := make(map[string]int)
// for _, v := range mergeList {
// Color := mergeDataCfg.GetColorById(v)
// ColorMap[Color]++
// if ColorMap[Color] > 1 {
// log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err)
// return fmt.Errorf("订单生成失败,重复颜色")
// }
// }
// }
o.addOrder(mergeList, OrderDiff, Common_type)
return nil
}
@ -671,7 +684,7 @@ func (o *OrderMod) Retire(EmitId string) {
ChessPool = append(ChessPool, v)
}
o.ChessPool = ChessPool
o.EmitShuffle = nil
o.ColorShuffle = nil
}
func (o *OrderMod) DelOrder(OrderId int) (*Order, error) {
@ -710,8 +723,8 @@ func (o *OrderMod) CreateComfortOrder(lv int, Emit []int, EnergyMul, Diff, Chess
}
func (o *OrderMod) ResetChessPool() {
o.ChessPool = make([]int, 0)
o.EmitShuffle = nil
// o.ChessPool = make([]int, 0)
// o.EmitShuffle = nil
}
func (o *OrderMod) SetIsCharge() {

View File

@ -145,15 +145,46 @@ func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int {
func getChessLv(Min, Max, Diff int) int {
Start := Min
End := Max
switch Diff {
case DIFF_LOW:
End = Min + (Max-Min+1)/3 - 1
case DIFF_MID:
Start = Min + (Max-Min+1)/3
End = Min + (Max-Min+1)/3*2 - 1
case DIFF_HIGH:
Start = Min + (Max-Min+1)/3*2
if Max-Min >= 5 {
switch Diff {
case DIFF_LOW:
End = Min + (Max-Min+1)/3 - 1
case DIFF_MID:
Start = Min + (Max-Min+1)/3
End = Min + (Max-Min+1)/3*2 - 1
case DIFF_HIGH:
Start = Min + (Max-Min+1)/3*2
}
}
if Max-Min == 2 {
Start = Max - Diff + 1
End = Start
}
if Max-Min == 3 {
switch Diff {
case DIFF_LOW:
End = Min + 1
case DIFF_MID:
Start = Min + 2
End = Min + 2
case DIFF_HIGH:
Start = Min + 3
End = Min + 3
}
}
if Max-Min == 4 {
switch Diff {
case DIFF_LOW:
End = Min + 1
case DIFF_MID:
Start = Min + 2
End = Min + 3
case DIFF_HIGH:
Start = Min + 4
End = Min + 4
}
}
Start = max(Min, Start)
End = max(Start, End)
End = min(Max, End)
@ -386,10 +417,61 @@ func filterPool(o *OrderMod) {
o.ChessPool = NewPool
}
func ShuffleColor(List []string, Last string) []string {
Break := 0
for {
Break++
if Break > 1000 {
break
}
Same := false
NewList := GoUtil.ShuffleStringArray(List)
if NewList[0] == Last {
continue
}
for i := 1; i < len(NewList); i++ {
BeforeSries := mergeDataCfg.GetEmitTypeByColor(NewList[i-1])
NowSries := mergeDataCfg.GetEmitTypeByColor(NewList[i])
if BeforeSries == NowSries {
Same = true
break
}
}
if !Same {
return NewList
}
}
L1 := make(map[string][]string, 0)
for _, v := range List {
Sries := mergeDataCfg.GetEmitTypeByColor(v)
L1[Sries] = append(L1[Sries], v)
}
List = make([]string, 0)
for _, v := range L1 {
List = append(List, v[0])
}
for _, v := range L1 {
if len(v) > 1 {
List = append(List, v[1])
}
}
for _, v := range L1 {
if len(v) > 2 {
List = append(List, v[2])
}
}
if List[0] == Last {
List[0], List[1] = List[1], List[0]
}
return List
}
// 获取发射器系列
func getEmitSeries(o *OrderMod, Emit []int) string {
if o.EmitShuffle == nil {
o.EmitShuffle = make([]string, 0)
if o.ColorShuffle == nil {
ColorShuffle := make([]string, 0)
for _, v := range Emit {
EmitId := mergeDataCfg.GetEmitId(v)
if GoUtil.InStringArray(EmitId, o.AutoEmit) {
@ -399,47 +481,27 @@ func getEmitSeries(o *OrderMod, Emit []int) string {
if len(EmitProduct) == 0 || EmitProduct[0] == "" {
continue
}
EmitSerie := mergeDataCfg.GetEmitId(v)
if GoUtil.InStringArray(EmitSerie, o.EmitShuffle) {
ColorShuffle = append(ColorShuffle, EmitProduct...)
}
o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor)
}
PopEmitId, NewSlice := GoUtil.PopStringArray(o.ColorShuffle)
o.ColorShuffle = NewSlice
o.LastColor = PopEmitId
if len(o.ColorShuffle) == 0 {
ColorShuffle := make([]string, 0)
for _, v := range Emit {
EmitId := mergeDataCfg.GetEmitId(v)
if GoUtil.InStringArray(EmitId, o.AutoEmit) {
continue
}
for i := 0; i < len(EmitProduct); i++ {
o.EmitShuffle = append(o.EmitShuffle, EmitSerie)
}
}
o.EmitShuffle = GoUtil.ShuffleStringArray(o.EmitShuffle)
}
PopEmitId, NewSlice := GoUtil.PopStringArray(o.EmitShuffle)
o.EmitShuffle = NewSlice
if len(o.EmitShuffle) == 0 {
o.EmitShuffle = make([]string, 0)
for _, v := range Emit {
EmitProduct := mergeDataCfg.GetEmitProduceType(v)
if len(EmitProduct) == 0 || EmitProduct[0] == "" {
continue
}
EmitSerie := mergeDataCfg.GetEmitId(v)
if GoUtil.InStringArray(EmitSerie, o.EmitShuffle) {
continue
}
for i := 0; i < len(EmitProduct); i++ {
o.EmitShuffle = append(o.EmitShuffle, EmitSerie)
}
}
Num := 1
for {
if len(o.EmitShuffle) == 1 {
break
}
o.EmitShuffle = GoUtil.ShuffleStringArray(o.EmitShuffle)
if o.EmitShuffle[0] != PopEmitId {
break
}
Num++
if Num > 100 {
break
}
ColorShuffle = append(ColorShuffle, EmitProduct...)
}
o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor)
}
return PopEmitId
}
@ -469,19 +531,20 @@ func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int {
// 从棋子池中获取棋子
func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int {
EmitSeries := getEmitSeries(o, Emit)
EmitChessId := getEmitBySeries(Emit, EmitSeries)
ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId)
Color := getEmitSeries(o, Emit)
EmitChessId := getEmitBySeries(Emit, Color)
//ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId)
// 从棋子池中获取棋子
MinChessId := 0
for i, chess := range o.ChessPool {
chessColor := mergeDataCfg.GetColorById(chess)
if Color != chessColor {
continue
}
if reflectChess[chess] > Diff {
MinChessId = chess
}
if !GoUtil.InStringArray(chessColor, ColorRand) {
continue
}
ChessLv := mergeDataCfg.GetLvById(chess)
if reflectChess[chess] == Diff && ChessLv >= EnergyMul+1 && ChessLv <= EnergyMul+12 {
o.ChessPool = append(o.ChessPool[:i], o.ChessPool[i+1:]...)
@ -492,25 +555,22 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in
* 1. 选取最接近的棋子
*/
if MinChessId != 0 {
MinChessColor := mergeDataCfg.GetColorById(MinChessId)
NewEmitChessId := GetEmitByColor(Emit, MinChessColor)
ColorRand := mergeDataCfg.GetEmitProduceType(NewEmitChessId)
ChessMinLv, ChessMaxLv := getChesslvRange(NewEmitChessId, EnergyMul, o.IsCharge)
ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId)
ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge)
NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff)
MinChessLv := mergeDataCfg.GetLvById(MinChessId)
NewLev2 := mergeDataCfg.DynamicLev2(NewLev, NewEmitChessId, ColorRand[0], MinChessColor)
NewLev2 := mergeDataCfg.DynamicLev2(NewLev, EmitChessId, ColorRand[0], Color)
NewLev3 := adjustLev(NewLev2, EnergyMul)
o.ChessPool = GoUtil.DeleteEleByValue(o.ChessPool, MinChessId)
for i := NewLev3; i < MinChessLv; i++ {
ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(i, MinChessColor)
ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(i, Color)
if ChessId2 != 0 {
o.ChessPool = append(o.ChessPool, ChessId2)
}
}
Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, MinChessColor)
Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, Color)
return Chess
}
Color := GoUtil.RandStringSlice(ColorRand)
ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge)
NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff)
NewLev1 := mergeDataCfg.DynamicLev(NewLev, EmitChessId, Color)
@ -593,7 +653,7 @@ func getEmitBySeries(EmitList []int, EmitId string) int {
if len(ProduceColor) == 0 || ProduceColor[0] == "" {
continue
}
if mergeDataCfg.GetEmitId(v) == EmitId {
if GoUtil.InStringArray(EmitId, ProduceColor) {
return v
}
}