七日签到奖励优化
This commit is contained in:
parent
630064912a
commit
b1b22e06d8
@ -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 {
|
||||
@ -83,7 +83,7 @@ func GetSevenLoginJackpot(IsMonth int) []*gamedata.SevenLoginJackpotData {
|
||||
Items := item.ParseItem(ItemMap)
|
||||
result = append(result, &gamedata.SevenLoginJackpotData{
|
||||
Id: Id,
|
||||
Diamond: Diamond,
|
||||
Energy: Energy,
|
||||
Items: Items,
|
||||
Type: Type,
|
||||
Month: Month,
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -31,13 +31,13 @@ type StartOrderData struct {
|
||||
|
||||
type SevenLoginRewardData struct {
|
||||
Id int
|
||||
Diamond int
|
||||
Energy float64
|
||||
RewardNum int
|
||||
}
|
||||
|
||||
type SevenLoginJackpotData struct {
|
||||
Id int
|
||||
Diamond int
|
||||
Energy float64
|
||||
Items []*item.Item
|
||||
Type int
|
||||
Month int
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user