diff --git a/src/server/conf/seven_login/seven_login_cfg.go b/src/server/conf/seven_login/seven_login_cfg.go index 8b464349..2b4d7ec9 100644 --- a/src/server/conf/seven_login/seven_login_cfg.go +++ b/src/server/conf/seven_login/seven_login_cfg.go @@ -29,11 +29,11 @@ func GetSevenLoginReward() []*gamedata.SevenLoginRewardData { var result []*gamedata.SevenLoginRewardData for k, v := range data { Id, _ := strconv.Atoi(k) - Diamond := gamedata.GetIntValue(v, "Diamond") + Energy := gamedata.GetFloatValue(v, "Energy") RewardNum := gamedata.GetIntValue(v, "RewardNum") result = append(result, &gamedata.SevenLoginRewardData{ Id: Id, - Diamond: Diamond, + Energy: Energy, RewardNum: RewardNum, }) } @@ -53,11 +53,11 @@ func GetSevenLoginMonthReward(nowMonth int) []*gamedata.SevenLoginRewardData { continue } Id, _ := strconv.Atoi(k) - Diamond := gamedata.GetIntValue(v, "Diamond") + Energy := gamedata.GetFloatValue(v, "Energy") RewardNum := gamedata.GetIntValue(v, "RewardNum") result = append(result, &gamedata.SevenLoginRewardData{ Id: Id, - Diamond: Diamond, + Energy: Energy, RewardNum: RewardNum, }) } @@ -73,7 +73,7 @@ func GetSevenLoginJackpot(IsMonth int) []*gamedata.SevenLoginJackpotData { var result []*gamedata.SevenLoginJackpotData for k, v := range data { Id, _ := strconv.Atoi(k) - Diamond := gamedata.GetIntValue(v, "Diamond") + Energy := gamedata.GetFloatValue(v, "Energy") Type := gamedata.GetIntValue(v, "Type") Month := gamedata.GetIntValue(v, "Month") if IsMonth != Month && IsMonth != 0 { @@ -82,11 +82,11 @@ func GetSevenLoginJackpot(IsMonth int) []*gamedata.SevenLoginJackpotData { ItemMap := gamedata.GetValue(v, "Item") Items := item.ParseItem(ItemMap) result = append(result, &gamedata.SevenLoginJackpotData{ - Id: Id, - Diamond: Diamond, - Items: Items, - Type: Type, - Month: Month, + Id: Id, + Energy: Energy, + Items: Items, + Type: Type, + Month: Month, }) } return result diff --git a/src/server/game/gm_handler.go b/src/server/game/gm_handler.go index 82644c82..b069da3e 100644 --- a/src/server/game/gm_handler.go +++ b/src/server/game/gm_handler.go @@ -645,7 +645,7 @@ func ReqGmCommand_(player *Player, Command string) error { SevenMod := player.PlayMod.getSevenLoginMod() SevenMod.MonthResetTime = 0 PlayerBaseMod := player.GetPlayerBaseMod() - SevenMod.ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime()) + SevenMod.ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime(), player.GetOrderFactor()) case "debugLogoutMsg": ToUid, _ := strconv.Atoi(arg[1]) uidList, err := db.GetDebugPlayer(ToUid) diff --git a/src/server/game/mod/seven_login/seven_login.go b/src/server/game/mod/seven_login/seven_login.go index a8d09277..59361c61 100644 --- a/src/server/game/mod/seven_login/seven_login.go +++ b/src/server/game/mod/seven_login/seven_login.go @@ -2,6 +2,7 @@ package sevenLogin import ( "fmt" + "math" sevenLoginCfg "server/conf/seven_login" "server/game/mod/item" GoUtil "server/game_util" @@ -30,19 +31,21 @@ func (s *SevenLoginMod) InitData() { } -func (s *SevenLoginMod) ZeroUpdate(Add, LastLoginTime int) { +func (s *SevenLoginMod) ZeroUpdate(Add, LastLoginTime, factor int) { WeekZeroTimestamp := GoUtil.WeekZeroTimestamp() Now := GoUtil.Now() if WeekZeroTimestamp > s.WeekResetTime { RewardType := GoUtil.IfTrue(Now-int64(LastLoginTime) > GoUtil.SEVENDAYS && LastLoginTime > 0, BACK_REWARD, DEFAULT_REWARD).(int) s.IsBack = RewardType == BACK_REWARD s.LoginReward = randWeekReward(Add, RewardType) + s.LoginReward = formatSevenReward(s.LoginReward, factor) s.WeekResetTime = WeekZeroTimestamp s.DayR = 0 } monthZeroTimestamp := GoUtil.MonthZeroTimestamp() if monthZeroTimestamp > s.MonthResetTime { s.MonthReward = randMonthReward() + s.MonthReward = formatSevenReward(s.MonthReward, factor) s.Active = 0 s.MonthResetTime = monthZeroTimestamp } @@ -124,3 +127,28 @@ func (s *SevenLoginMod) BackData() *msg.ResSevenLogin { IsBack: s.IsBack, } } + +func formatSevenReward(reward map[int]Reward, factor int) map[int]Reward { + for k, v := range reward { + for _, v := range v.Item1 { + if v.Id == item.ITEM_STAR_ID { + Num := math.Round(float64(v.Num) * float64(factor) / 100) + v.Num = int(Num) / 5 * 5 + } + } + for _, v := range v.Item2 { + if v.Id == item.ITEM_STAR_ID { + Num := math.Round(float64(v.Num) * float64(factor) / 100) + v.Num = int(Num) / 5 * 5 + } + } + for _, v := range v.Item3 { + if v.Id == item.ITEM_STAR_ID { + Num := math.Round(float64(v.Num) * float64(factor) / 100) + v.Num = int(Num) / 5 * 5 + } + } + reward[k] = v + } + return reward +} diff --git a/src/server/game/mod/seven_login/seven_login_func.go b/src/server/game/mod/seven_login/seven_login_func.go index 5eec7e73..81d205e7 100644 --- a/src/server/game/mod/seven_login/seven_login_func.go +++ b/src/server/game/mod/seven_login/seven_login_func.go @@ -1,6 +1,7 @@ package sevenLogin import ( + "math" "math/rand/v2" sevenLoginCfg "server/conf/seven_login" "server/game/mod/item" @@ -23,7 +24,7 @@ func randWeekReward(Add, Type int) map[int]Reward { }) jackpot := sevenLoginCfg.GetSevenLoginJackpot(0) sort.Slice(jackpot, func(i, j int) bool { - return jackpot[i].Diamond < jackpot[j].Diamond + return jackpot[i].Energy < jackpot[j].Energy }) RI := make([]int, 0, len(RewardList)) for _, v := range RewardList { @@ -37,7 +38,7 @@ func randWeekReward(Add, Type int) map[int]Reward { EnergyMul = 2.0 } for _, v := range RewardList { - v.Diamond = int(float64(v.Diamond) * (1 + float64(Add)/100)) + v.Energy = float64(v.Energy) * (1 + float64(Add)/100) Reward := randReward(v, LastType, jackpot, CardPackIds, 0.5, EnergyMul) result[v.Id] = Reward } @@ -46,16 +47,16 @@ func randWeekReward(Add, Type int) map[int]Reward { func randReward(RewardData *gamedata.SevenLoginRewardData, LastType int, jackpot []*gamedata.SevenLoginJackpotData, CardPackIds []int, EnergyPer, EnergyMul float64) Reward { // 奖励1 体力 体力等价钻石占总价值的50%,且1钻≈2.5体力;体力值四舍五入,需以0或5结尾 - Num := float64(RewardData.Diamond) * EnergyPer * 2.5 - Num = float64(int(Num/5+0.5)) * 5 - RemainDiamond := RewardData.Diamond - int(Num/2.5) - Num = Num * EnergyMul - Item1 := []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(Num))} + Num := math.Round(float64(RewardData.Energy) * 0.5) + energyNum := float64(int(Num/5)) * 5 + RemainEnergy := RewardData.Energy - energyNum + // 召回玩家 每日体力数*2 + energyNum = energyNum * EnergyMul + Item1 := []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(energyNum))} // 奖励2 - NewJackpot := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot)) for _, v := range jackpot { - if v.Diamond <= RemainDiamond && v.Type != LastType && v.Type != JACKPOT_CARD_TYPE { + if v.Energy <= RemainEnergy && v.Type != LastType && v.Type != JACKPOT_CARD_TYPE { NewJackpot = append(NewJackpot, v) } } @@ -65,38 +66,46 @@ func randReward(RewardData *gamedata.SevenLoginRewardData, LastType int, jackpot var Item2 []*item.Item Item2Type := 0 if RewardData.RewardNum == 3 { - RemainDiamond -= 5 + RemainEnergy -= 5 } if GoUtil.InArray(RewardData.Id, CardPackIds) { CardJackpot := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot)) for _, v := range jackpot { - if v.Diamond <= RemainDiamond && v.Type == JACKPOT_CARD_TYPE { + if v.Energy <= RemainEnergy && v.Type == JACKPOT_CARD_TYPE { CardJackpot = append(CardJackpot, v) } } if len(CardJackpot) == 0 { - Item2 = []*item.Item{item.NewItem(item.ITEM_DIAMOND_ID, RemainDiamond)} + Item2 = []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(RemainEnergy))} } else { Index := rand.IntN(len(CardJackpot)) Item2Type = CardJackpot[Index].Type Item2 = CardJackpot[Index].Items - RemainDiamond -= CardJackpot[Index].Diamond + RemainEnergy -= CardJackpot[Index].Energy } } else { Index := rand.IntN(len(NewJackpot)) Item2Type = NewJackpot[Index].Type Item2 = NewJackpot[Index].Items - RemainDiamond -= NewJackpot[Index].Diamond + RemainEnergy -= NewJackpot[Index].Energy } var Item3 []*item.Item if RewardData.RewardNum == 3 { - RemainDiamond += 5 + RemainEnergy += 5 NewJackpot3 := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot)) for _, v := range jackpot { - if v.Diamond <= RemainDiamond && v.Type != LastType && v.Type != Item2Type { + if v.Energy <= RemainEnergy && v.Type != LastType && v.Type != Item2Type { NewJackpot3 = append(NewJackpot3, v) } } + if len(NewJackpot3) == 0 { + Item3 = []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, int(RemainEnergy))} + return Reward{ + Item1: Item1, + Item2: Item2, + Item3: Item3, + } + } Index := rand.IntN(len(NewJackpot3)) Item3 = NewJackpot3[Index].Items } @@ -116,7 +125,7 @@ func randMonthReward() map[int]Reward { }) jackpot := sevenLoginCfg.GetSevenLoginJackpot(1) sort.Slice(jackpot, func(i, j int) bool { - return jackpot[i].Diamond < jackpot[j].Diamond + return jackpot[i].Energy < jackpot[j].Energy }) result := make(map[int]Reward) for _, v := range RewardList { diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index 3434b743..1bb2e196 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -16,6 +16,7 @@ import ( limitedTimeEventCfg "server/conf/limited_time_event" mergeDataCfg "server/conf/merge_data" miningCfg "server/conf/mining" + orderCfg "server/conf/order" playroomCfg "server/conf/playroom" "server/db" "server/ga" @@ -368,7 +369,7 @@ func (p *Player) ZeroUpdate(a []interface{}) { p.PushClientRes(p.PlayMod.getBaseMod().BackData()) // 七日签到 - p.PlayMod.getSevenLoginMod().ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime()) + p.PlayMod.getSevenLoginMod().ZeroUpdate(PlayerBaseMod.GetSevenLoginAdd(), PlayerBaseMod.GetLastLoginTime(), p.GetOrderFactor()) p.PushClientRes(p.PlayMod.getSevenLoginMod().BackData()) // 礼包充值 @@ -1418,3 +1419,7 @@ func (p *Player) FixPlayroomPyhical() { } } } + +func (p *Player) GetOrderFactor() int { + return orderCfg.GetOrderFactor(p.GetDecorateMod().AreaId) +} diff --git a/src/server/gamedata/type.go b/src/server/gamedata/type.go index 2bb48771..099762d7 100644 --- a/src/server/gamedata/type.go +++ b/src/server/gamedata/type.go @@ -31,16 +31,16 @@ type StartOrderData struct { type SevenLoginRewardData struct { Id int - Diamond int + Energy float64 RewardNum int } type SevenLoginJackpotData struct { - Id int - Diamond int - Items []*item.Item - Type int - Month int + Id int + Energy float64 + Items []*item.Item + Type int + Month int } type ActivityData struct { diff --git a/src/server/test/seven_test.go b/src/server/test/seven_test.go index 792e5114..b0cdf9b0 100644 --- a/src/server/test/seven_test.go +++ b/src/server/test/seven_test.go @@ -1,6 +1,7 @@ package test import ( + "fmt" sevenLoginCfg "server/conf/seven_login" "server/game" GoUtil "server/game_util" @@ -17,7 +18,13 @@ func TestSevenLoginZeroUpdate(t *testing.T) { p1 := new(game.Player) p1.InitPlayer("3625212") SevenLoginMod := p1.GetSevenLoginMod() - SevenLoginMod.ZeroUpdate(0, 0) + SevenLoginMod.WeekResetTime = 0 + SevenLoginMod.ZeroUpdate(0, 0, p1.GetOrderFactor()) SevenLoginMod.BackData() + fmt.Printf("order factor:%v\n", p1.GetOrderFactor()) + for _, v := range SevenLoginMod.LoginReward { + t.Logf("Reward:%v", v) + fmt.Printf("Reward:%v\n", v) + } t.Logf("SevenLoginMod:%v", SevenLoginMod) }