限时事件,playroom优化
This commit is contained in:
parent
7dff488a44
commit
7e03391514
@ -5,8 +5,6 @@ import (
|
||||
"server/game/mod/item"
|
||||
"server/gamedata"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -19,6 +17,7 @@ const (
|
||||
CFG_LIMITED_TIME_EVENT_FAST = "LimitedTimeEventFast"
|
||||
CFG_LIMITED_TIME_EVENT_JACKPOT = "LimitedTimeEventJackpot"
|
||||
CFG_LIMITED_TIME_EVENT_CONST = "LimitedTimeEventConst"
|
||||
CFG_LIMITED_TIME_EVENT_BOUNS = "LimitedTimeEventBouns"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -31,31 +30,12 @@ func init() {
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_FAST)
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_JACKPOT)
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_CONST)
|
||||
gamedata.InitCfg(CFG_LIMITED_TIME_EVENT_BOUNS)
|
||||
}
|
||||
|
||||
// 获取限时事件触发列表
|
||||
func GetLimitedTimeEventCfg() []*gamedata.LimitedTimeEventData {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT)
|
||||
if err != nil {
|
||||
log.Debug("GetLimitedTimeEventCfg err:%v", err)
|
||||
return nil
|
||||
}
|
||||
var res []*gamedata.LimitedTimeEventData
|
||||
Day, Hour := GoUtil.GetWeekdayAndHour()
|
||||
for k, v := range data {
|
||||
weekDay := gamedata.GetIntValue(v, "WeekDay")
|
||||
startTime := gamedata.GetIntValue(v, "StartTime")
|
||||
endTime := gamedata.GetIntValue(v, "EndTime")
|
||||
if weekDay == Day && Hour >= startTime && Hour < endTime {
|
||||
Id, _ := strconv.Atoi(k)
|
||||
res = append(res, &gamedata.LimitedTimeEventData{
|
||||
Id: Id,
|
||||
EventId: gamedata.GetIntValue(v, "EventId"),
|
||||
Duration: int64(gamedata.GetIntValue(v, "Duration")),
|
||||
})
|
||||
}
|
||||
}
|
||||
return res
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取流星雨加成
|
||||
@ -117,6 +97,7 @@ func GetSceneDashReward(Sence, Progress int) (int, []*item.Item) {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
// 获取场景冲刺奖池
|
||||
func GetSenceJackpotProb() map[int]int {
|
||||
r := make(map[int]int)
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_SENCE_JACKPOT)
|
||||
@ -131,6 +112,7 @@ func GetSenceJackpotProb() map[int]int {
|
||||
return r
|
||||
}
|
||||
|
||||
// 获取场景冲刺奖励
|
||||
func GetSenceJackpotReward(Id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_SENCE_JACKPOT, Id)
|
||||
if err != nil {
|
||||
@ -155,15 +137,40 @@ func GetFastProduceReward(Times, Energy int) []*item.Item {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetProgressMax() int {
|
||||
data, err := gamedata.GetDataByKey(CFG_LIMITED_TIME_EVENT_CONST, "Progress_max")
|
||||
// 获取进度最大值
|
||||
func GetProgressMax(Lv int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_BOUNS)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressMax err:%v", err)
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Value")
|
||||
for _, v := range data {
|
||||
Min := gamedata.GetIntValue(v, "Min")
|
||||
Max := gamedata.GetIntValue(v, "Max")
|
||||
if Lv >= Min && Lv <= Max {
|
||||
return gamedata.GetIntValue(v, "OrderNum")
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func GetBounsLv(Lv int) int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_BOUNS)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressMax err:%v", err)
|
||||
return 0
|
||||
}
|
||||
for k, v := range data {
|
||||
Min := gamedata.GetIntValue(v, "Min")
|
||||
Max := gamedata.GetIntValue(v, "Max")
|
||||
if Lv >= Min && Lv <= Max {
|
||||
return GoUtil.Int(k)
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// 获取进度奖励随机
|
||||
func GetProgressRewardRand(Lv int) map[int]int {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_JACKPOT)
|
||||
if err != nil {
|
||||
@ -172,7 +179,7 @@ func GetProgressRewardRand(Lv int) map[int]int {
|
||||
}
|
||||
r := make(map[int]int)
|
||||
for k, v := range data {
|
||||
if Lv >= gamedata.GetIntValue(v, "Min") && Lv <= gamedata.GetIntValue(v, "Max") {
|
||||
if Lv >= gamedata.GetIntValue(v, "BounsLv") {
|
||||
Id := GoUtil.Int(k)
|
||||
r[Id] = gamedata.GetIntValue(v, "Prob")
|
||||
}
|
||||
@ -180,29 +187,24 @@ func GetProgressRewardRand(Lv int) map[int]int {
|
||||
return r
|
||||
}
|
||||
|
||||
// 获取进度选择数量
|
||||
func GetProgressSelectNum(Lv int) int {
|
||||
data, err := gamedata.GetDataByKey(CFG_LIMITED_TIME_EVENT_CONST, "Progress_lv_num")
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_BOUNS)
|
||||
if err != nil {
|
||||
log.Debug("GetProgressSelectNum err:%v", err)
|
||||
log.Debug("GetProgressMax err:%v", err)
|
||||
return 0
|
||||
}
|
||||
Str := gamedata.GetStringValue(data, "Value")
|
||||
Strarr := strings.Split(Str, "|")
|
||||
for _, v := range Strarr {
|
||||
a := strings.Split(v, ",")
|
||||
if len(a) != 3 {
|
||||
continue
|
||||
}
|
||||
Min, _ := strconv.Atoi(a[0])
|
||||
Max, _ := strconv.Atoi(a[1])
|
||||
for _, v := range data {
|
||||
Min := gamedata.GetIntValue(v, "Min")
|
||||
Max := gamedata.GetIntValue(v, "Max")
|
||||
if Lv >= Min && Lv <= Max {
|
||||
Num, _ := strconv.Atoi(a[2])
|
||||
return Num
|
||||
return gamedata.GetIntValue(v, "Option")
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// 获取进度奖励
|
||||
func GetProgressReward(RewardId int) []*item.Item {
|
||||
data, err := gamedata.GetData(CFG_LIMITED_TIME_EVENT_JACKPOT)
|
||||
if err != nil {
|
||||
@ -218,6 +220,7 @@ func GetProgressReward(RewardId int) []*item.Item {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取进度奖励类型
|
||||
func GetProgressRewardType(RewardId int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_LIMITED_TIME_EVENT_JACKPOT, RewardId)
|
||||
if err != nil {
|
||||
|
||||
@ -129,7 +129,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
|
||||
p.ModList.Chess = chessMod
|
||||
is_update = true
|
||||
}
|
||||
BaseMod := p.ModList.Base
|
||||
BaseMod := &p.ModList.Base
|
||||
if BaseMod.Uid == 0 {
|
||||
PlayerBaseMod := player.GetPlayerBaseMod()
|
||||
BaseMod.Uid = PlayerBaseMod.Data.DwUin
|
||||
@ -143,7 +143,6 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
|
||||
BaseMod.FackBookId = PlayerBaseMod.Data.FaceBookId
|
||||
BaseMod.SetLoginTime(int64(PlayerBaseMod.Data.LoginTime))
|
||||
BaseMod.SetLogoutTime(int64(PlayerBaseMod.Data.LogoutTime))
|
||||
p.ModList.Base = BaseMod
|
||||
is_update = true
|
||||
}
|
||||
|
||||
@ -158,7 +157,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
|
||||
p.ModList.Avatar.InitData()
|
||||
p.ModList.Base.InitData(int(p.Data.DwUin))
|
||||
p.ModList.SevenLogin.InitData()
|
||||
p.ModList.LimitedTimeEvent.InitData()
|
||||
p.ModList.LimitedTimeEvent.InitData(BaseMod.GetLevel())
|
||||
p.ModList.Friend.InitData()
|
||||
p.ModList.Mail.InitData()
|
||||
p.ModList.Charge.InitData()
|
||||
|
||||
@ -2701,10 +2701,11 @@ func ReqPlayroomInfo(args []interface{}) error {
|
||||
}
|
||||
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Targer)
|
||||
PlayroomMod.SetTarget(Targer)
|
||||
if PlayerData.Loginout < GoUtil.Now()-300 {
|
||||
if PlayerData.Loginout < GoUtil.Now()-100000000300 { // todo DEBUG
|
||||
PlayroomMod.SetGameId(1)
|
||||
} else {
|
||||
PlayroomMod.SetGameId(2)
|
||||
PlayroomMod.SetGameRewardFlip(int(float64(PlayerData.Star)*0.03), int(float64(PlayerData.Star)*0.05), int(float64(PlayerData.Star)*0.1))
|
||||
}
|
||||
|
||||
Star := min(500, max(PlayerData.Star/10, 10))
|
||||
@ -2988,9 +2989,8 @@ func ReqPlayroomFlip(args []interface{}) error {
|
||||
req := &msg.ReqPlayroomFlip{}
|
||||
proto.Unmarshal(buf, req)
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
Target := PlayroomMod.GetTarget()
|
||||
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Target)
|
||||
Items, CardId, err := PlayroomMod.FlipCard(int(req.Id), PlayerData.Star)
|
||||
|
||||
CardId, err := PlayroomMod.FlipCard(int(req.Id))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResPlayroomFlip{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -2998,6 +2998,33 @@ func ReqPlayroomFlip(args []interface{}) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.Kafka("playroom_flip", map[string]interface{}{
|
||||
"CardID": CardId,
|
||||
"Id": req.Id,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
PlayroomBackData(player)
|
||||
player.PushClientRes(&msg.ResPlayroomFlip{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: req.Id,
|
||||
CardId: int32(CardId),
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqPlayroomFlipReward(args []interface{}) error {
|
||||
_, player, buf := ParseArgs(args)
|
||||
req := &msg.ReqPlayroomFlipReward{}
|
||||
proto.Unmarshal(buf, req)
|
||||
PlayroomMod := player.PlayMod.getPlayroomMod()
|
||||
Items, err := PlayroomMod.GetFlipReward()
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResPlayroomFlipReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
Items1 := Items
|
||||
LimitedTimeEventMod := player.PlayMod.getLimitedTimeEventMod()
|
||||
if LimitedTimeEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_PET_THIEF) {
|
||||
@ -3011,6 +3038,7 @@ func ReqPlayroomFlip(args []interface{}) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
Target := PlayroomMod.GetTarget()
|
||||
G_GameLogicPtr.FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: Target,
|
||||
@ -3020,10 +3048,8 @@ func ReqPlayroomFlip(args []interface{}) error {
|
||||
})
|
||||
player.PlayMod.save()
|
||||
PlayroomBackData(player)
|
||||
player.PushClientRes(&msg.ResPlayroomFlip{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: req.Id,
|
||||
CardId: int32(CardId),
|
||||
player.PushClientRes(&msg.ResPlayroomFlipReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -90,3 +90,11 @@ func UnitAllCard(p *Player) error {
|
||||
fmt.Print(Item)
|
||||
return nil
|
||||
}
|
||||
|
||||
func UnitLimitProgress(p *Player) error {
|
||||
LimitedTimeEventMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
LimitedTimeEventMod.Progress = 7
|
||||
LimitedTimeEventMod.ZeroUpdate(7)
|
||||
LimitedTimeEventMod.AddProgress(4)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -33,6 +33,9 @@ type LimitedTimeEventMod struct {
|
||||
Progress int
|
||||
ProgressReward map[int]int
|
||||
LastSelect int
|
||||
Lv int
|
||||
ProgressMax int
|
||||
LastOption []int
|
||||
}
|
||||
|
||||
type LTEInfo struct {
|
||||
@ -41,7 +44,7 @@ type LTEInfo struct {
|
||||
Info map[string]interface{} // 事件信息
|
||||
}
|
||||
|
||||
func (l *LimitedTimeEventMod) InitData() {
|
||||
func (l *LimitedTimeEventMod) InitData(Lv int) {
|
||||
if l.EventList == nil {
|
||||
l.EventList = make(map[int]*LTEInfo)
|
||||
}
|
||||
@ -51,6 +54,15 @@ func (l *LimitedTimeEventMod) InitData() {
|
||||
if l.ProgressReward == nil {
|
||||
l.ProgressReward = make(map[int]int)
|
||||
}
|
||||
if l.ProgressMax == 0 {
|
||||
l.Lv = Lv
|
||||
l.ProgressMax = limitedTimeEventCfg.GetProgressMax(Lv)
|
||||
}
|
||||
}
|
||||
|
||||
func (l *LimitedTimeEventMod) ZeroUpdate(Lv int) {
|
||||
l.Lv = Lv
|
||||
l.ProgressMax = limitedTimeEventCfg.GetProgressMax(Lv)
|
||||
}
|
||||
|
||||
// 判断限时事件是否存在
|
||||
@ -218,17 +230,27 @@ func (l *LimitedTimeEventMod) AddProgress(Lv int) {
|
||||
return
|
||||
}
|
||||
l.Progress++
|
||||
ProgressMax := limitedTimeEventCfg.GetProgressMax()
|
||||
if l.Progress == ProgressMax {
|
||||
if l.Progress == l.ProgressMax {
|
||||
SelectNum := limitedTimeEventCfg.GetProgressSelectNum(Lv)
|
||||
RandMap := limitedTimeEventCfg.GetProgressRewardRand(Lv)
|
||||
delete(RandMap, l.LastSelect)
|
||||
r := GoUtil.RandMapNum(RandMap, SelectNum)
|
||||
Id := 1
|
||||
for _, v := range r {
|
||||
l.ProgressReward[Id] = v
|
||||
Id++
|
||||
BounsLv := limitedTimeEventCfg.GetBounsLv(Lv)
|
||||
RandMap := limitedTimeEventCfg.GetProgressRewardRand(BounsLv)
|
||||
n := 0
|
||||
r := make([]int, 0)
|
||||
LastOption := l.LastOption
|
||||
for n < 10 {
|
||||
n++
|
||||
r = GoUtil.RandMapNum(RandMap, SelectNum)
|
||||
Id := 1
|
||||
for _, v := range r {
|
||||
l.ProgressReward[Id] = v
|
||||
Id++
|
||||
}
|
||||
|
||||
if !GoUtil.SliceEqual(LastOption, r) {
|
||||
break
|
||||
}
|
||||
}
|
||||
l.LastOption = r
|
||||
}
|
||||
}
|
||||
|
||||
@ -242,6 +264,7 @@ func (l *LimitedTimeEventMod) SelectProgressReward(Id int) ([]*item.Item, error)
|
||||
l.LastSelect = RewardId
|
||||
l.ProgressReward = make(map[int]int)
|
||||
l.Progress = 0
|
||||
l.ProgressMax = limitedTimeEventCfg.GetProgressMax(l.Lv)
|
||||
return Item, nil
|
||||
}
|
||||
|
||||
|
||||
@ -32,6 +32,7 @@ type PlayroomMod struct {
|
||||
LoseItem []*item.Item // 失去的物品
|
||||
Chip int // 碎片
|
||||
Flip map[int]int // 翻牌
|
||||
FlipReward []*item.Item // 翻牌奖励
|
||||
WorkOutline int // 是否离线
|
||||
}
|
||||
|
||||
@ -275,6 +276,12 @@ func (p *PlayroomMod) SetGameReward(Chess1, Chess2, Star int) {
|
||||
p.GameReward[3] = &item.Item{Id: item.ITEM_STAR_ID, Num: Star}
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) SetGameRewardFlip(N1, N2, N3 int) {
|
||||
p.GameReward[1] = &item.Item{Id: item.ITEM_STAR_ID, Num: N1}
|
||||
p.GameReward[2] = &item.Item{Id: item.ITEM_STAR_ID, Num: N2}
|
||||
p.GameReward[3] = &item.Item{Id: item.ITEM_STAR_ID, Num: N3}
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) SelectReward(Id int) []*item.Item {
|
||||
v, ok := p.GameReward[Id]
|
||||
if !ok {
|
||||
@ -379,9 +386,9 @@ func (p *PlayroomMod) RemoveChip(Num int) []*item.Item {
|
||||
return []*item.Item{item.NewItem(item.ITEM_STAR_ID, Num*50)}
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) FlipCard(Pos int, Star int) ([]*item.Item, int, error) {
|
||||
func (p *PlayroomMod) FlipCard(Pos int) (int, error) {
|
||||
if p.Status != STATUS_VISIT {
|
||||
return nil, 0, fmt.Errorf("FlipCard Status is not STATUS_VISIT")
|
||||
return 0, fmt.Errorf("FlipCard Status is not STATUS_VISIT")
|
||||
}
|
||||
RandMap := map[int]int{
|
||||
FLIP_TYPE_COPPER: 35,
|
||||
@ -390,25 +397,30 @@ func (p *PlayroomMod) FlipCard(Pos int, Star int) ([]*item.Item, int, error) {
|
||||
}
|
||||
Prob := GoUtil.RandMap(RandMap)
|
||||
p.Flip[Pos] = Prob
|
||||
|
||||
return Prob, nil
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) GetFlipReward() ([]*item.Item, error) {
|
||||
check := make(map[int]int)
|
||||
Items := make([]*item.Item, 0)
|
||||
for _, v := range p.Flip {
|
||||
check[v]++
|
||||
if check[v] == 3 {
|
||||
GainStar := 0
|
||||
switch v {
|
||||
case FLIP_TYPE_COPPER:
|
||||
GainStar = int(float64(Star) * 0.03)
|
||||
Items = append(Items, p.GameReward[FLIP_TYPE_COPPER])
|
||||
case FLIP_TYPE_SILVER:
|
||||
GainStar = int(float64(Star) * 0.05)
|
||||
Items = append(Items, p.GameReward[FLIP_TYPE_SILVER])
|
||||
case FLIP_TYPE_GOLD:
|
||||
GainStar = int(float64(Star) * 0.1)
|
||||
Items = append(Items, p.GameReward[FLIP_TYPE_GOLD])
|
||||
}
|
||||
p.Status = STATUS_IDLE
|
||||
p.GameId = 0
|
||||
p.Flip = make(map[int]int)
|
||||
p.Target = 0
|
||||
return []*item.Item{item.NewItem(item.ITEM_STAR_ID, GainStar)}, Prob, nil
|
||||
return Items, nil
|
||||
}
|
||||
}
|
||||
return nil, Prob, nil
|
||||
return Items, fmt.Errorf("GetFlipReward check is not 3")
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user