Merge branch 'develop' into online

This commit is contained in:
hahwu 2024-12-26 17:34:33 +08:00
commit 55f2eff714
12 changed files with 3131 additions and 2611 deletions

View File

@ -7,6 +7,7 @@ import (
"math/rand"
"reflect"
"strconv"
"strings"
"time"
)
@ -207,3 +208,11 @@ func PlayroomTrigger(Time int64, Num int) (int64, int) {
}
}
}
func SplitInt(str, sep string) []int {
var ret []int
for _, v := range strings.Split(str, sep) {
ret = append(ret, Int(v))
}
return ret
}

View File

@ -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,46 @@ 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, Num 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 {
OrderNumStr := gamedata.GetStringValue(v, "OrderNum")
OrderNum := GoUtil.SplitInt(OrderNumStr, ",")
if Num >= len(OrderNum) {
return OrderNum[len(OrderNum)-1]
} else {
return OrderNum[Num]
}
}
}
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 +185,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 +193,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 +226,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 {

View File

@ -30,7 +30,7 @@ func init() {
func GetEmitTypeProduce(EmitType string) []string {
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT_TYPE, EmitType)
if err != nil {
log.Debug("GetEmitTypeProduce GetOne EmitType:%s not found", EmitType)
// log.Debug("GetEmitTypeProduce GetOne EmitType:%s not found", EmitType)
return []string{}
}
return strings.Split(gamedata.GetStringValue(data, "Produce"), ",")
@ -39,7 +39,7 @@ func GetEmitTypeProduce(EmitType string) []string {
func GetEmitType2(EmitType string) int {
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT_TYPE, EmitType)
if err != nil {
log.Debug("GetEmitTypeProduce GetOne EmitType:%s not found", EmitType)
// log.Debug("GetEmitTypeProduce GetOne EmitType:%s not found", EmitType)
return 0
}
return gamedata.GetIntValue(data, "Type2")

View File

@ -640,7 +640,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
//Gm命令
RegisterMsgProcessFunc("ReqGmCommand", ReqGmCommand) // Gm命令
//卡牌
// #region 卡牌
RegisterMsgProcessFunc("ReqCardInfo", ReqCardInfo) // 请求卡牌信息
RegisterMsgProcessFunc("ReqCardCollectReward", ReqCardCollectReward) //领取卡牌系列收集奖励
RegisterMsgProcessFunc("ReqExStarReward", ReqExStarReward) // 兑换收集星星奖励
@ -657,6 +657,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqCardSend", ReqCardSend) // 直接赠送卡牌
RegisterMsgProcessFunc("ReqGetFriendCard", ReqGetFriendCard) // 领取好友赠送的卡牌
RegisterMsgProcessFunc("ReqMasterCard", ReqMasterCard) // 万能卡兑换
RegisterMsgProcessFunc("ReqCardHandbookReward", ReqCardHandbookReward) // 卡牌图鉴
// 日常任务
RegisterMsgProcessFunc("ReqGetDailyTaskReward", ReqGetDailyTaskReward) // 领取日常任务奖励
@ -757,15 +758,20 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
RegisterMsgProcessFunc("ReqPlayroomWork", ReqPlayroomWork) // 宠物工作
RegisterMsgProcessFunc("ReqPlayroomRest", ReqPlayroomRest) // 宠物休息
RegisterMsgProcessFunc("ReqPlayroomDraw", ReqPlayroomDraw) // 转盘
RegisterMsgProcessFunc("ReqPlayroomFlip", ReqPlayroomFlip) // 翻牌
RegisterMsgProcessFunc("ReqPlayroomFlipReward", ReqPlayroomFlipReward) // 翻牌奖励
RegisterMsgProcessFunc("ReqPlayroomChip", ReqPlayroomChip) // 消除碎片
RegisterMsgProcessFunc("ReqPlayroomOutline", ReqPlayroomOutline) // 打工离线
RegisterMsgProcessFunc("ReqPlayroomWrokOutline", ReqPlayroomWrokOutline) // 打工离线完成
// 宠物宝藏
RegisterMsgProcessFunc("ReqFriendTreasure", ReqFriendTreasure) // 请求好友宝藏数据
RegisterMsgProcessFunc("ReqFriendTreasureStart", ReqFriendTreasureStart) // 开始挖宝
RegisterMsgProcessFunc("ReqFriendTreasureFilp", ReqFriendTreasureFilp) // 挖宝
RegisterMsgProcessFunc("ReqFriendTreasureEnd", ReqFriendTreasureEnd) // 挖宝
RegisterMsgProcessFunc("ReqFriendTreasureStart", ReqFriendTreasureStart) // 开始游戏
RegisterMsgProcessFunc("ReqFriendTreasureFilp", ReqFriendTreasureFilp) // 翻牌
RegisterMsgProcessFunc("ReqFriendTreasureEnd", ReqFriendTreasureEnd) // 结束游戏
RegisterMsgProcessFunc("ReqKafkaLog", ReqKafkaLog) // 客户端日志
}
func (ad *GameLogic) CreateHttpManager() {

View File

@ -292,7 +292,7 @@ func (p *Player) ZeroUpdate(a []interface{}) {
// 宠物宝箱
p.PlayMod.getFriendTreasureMod().ZeroUpdate()
p.PushClientRes(p.PlayMod.getFriendTreasureMod().BackData())
// p.PushClientRes(p.PlayMod.getFriendTreasureMod().BackData())
p.PlayMod.getChampshipMod().ZeroUpdate()
p.initAcitivity()

View File

@ -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()

View File

@ -2701,35 +2701,35 @@ 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)
Star := min(500, max(PlayerData.Star/10, 10))
ChessMod := player.PlayMod.getChessMod()
EmitList := ChessMod.GetOrderEmit()
ColorList := make([]string, 0)
for _, v := range EmitList {
Color := mergeDataCfg.GetEmitProduceChessType(v)
ColorList = append(ColorList, Color...)
}
RandList := make([]int, 0)
for _, v := range PlayerData.Chess {
Color := mergeDataCfg.GetColorById(v)
Lv := mergeDataCfg.GetLvById(v)
if GoUtil.InStringArray(Color, ColorList) && Lv <= 8 {
RandList = append(RandList, v)
}
}
if len(RandList) == 0 {
PlayroomMod.SetGameReward(0, 0, Star)
} else if len(RandList) == 1 {
PlayroomMod.SetGameReward(0, RandList[0], Star)
} else {
ChessList := GoUtil.RandSliceNum(RandList, 2)
PlayroomMod.SetGameReward(ChessList[0], ChessList[1], Star)
}
} else {
PlayroomMod.SetGameId(2)
}
Star := min(500, max(PlayerData.Star/10, 10))
ChessMod := player.PlayMod.getChessMod()
EmitList := ChessMod.GetOrderEmit()
ColorList := make([]string, 0)
for _, v := range EmitList {
Color := mergeDataCfg.GetEmitProduceChessType(v)
ColorList = append(ColorList, Color...)
}
RandList := make([]int, 0)
for _, v := range PlayerData.Chess {
Color := mergeDataCfg.GetColorById(v)
Lv := mergeDataCfg.GetLvById(v)
if GoUtil.InStringArray(Color, ColorList) && Lv <= 8 {
RandList = append(RandList, v)
}
}
if len(RandList) == 0 {
PlayroomMod.SetGameReward(0, 0, Star)
} else if len(RandList) == 1 {
PlayroomMod.SetGameReward(0, RandList[0], Star)
} else {
ChessList := GoUtil.RandSliceNum(RandList, 2)
PlayroomMod.SetGameReward(ChessList[0], ChessList[1], Star)
PlayroomMod.SetGameRewardFlip(int(float64(PlayerData.Star)*0.03), int(float64(PlayerData.Star)*0.05), int(float64(PlayerData.Star)*0.1))
}
PlayroomVisit(player, Targer)
@ -2988,9 +2988,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 +2997,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 +3037,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 +3047,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
}
@ -3251,3 +3276,42 @@ func ReqFriendTreasureEnd(args []interface{}) error {
})
return nil
}
func ReqKafkaLog(args []interface{}) error {
_, player, buf := ParseArgs(args)
req := &msg.ReqKafkaLog{}
proto.Unmarshal(buf, req)
player.Kafka(req.Event, map[string]interface{}{
"data": req.Data,
})
return nil
}
func ReqCardHandbookReward(args []interface{}) error {
_, player, buf := ParseArgs(args)
req := &msg.ReqCardHandbookReward{}
proto.Unmarshal(buf, req)
CardMod := player.PlayMod.getCardMod()
Items, err := CardMod.GetHandbookReward(int(req.CardId))
if err != nil {
player.SendErrClienRes(&msg.ResCardHandbookReward{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_CardHandbookReward.String())
if err != nil {
player.SendErrClienRes(&msg.ResCardHandbookReward{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.PlayMod.save()
player.PushClientRes(&msg.ResCardHandbookReward{
Code: msg.RES_CODE_SUCCESS,
CardId: req.CardId,
})
return nil
}

View File

@ -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 = 5
LimitedTimeEventMod.ZeroUpdate(7)
LimitedTimeEventMod.AddProgress(6)
return nil
}

View File

@ -23,12 +23,14 @@ type CardMod struct {
ExCard map[int]*CardInfo // 交换卡牌
Cache Cache // 缓存卡牌
Round int // 轮次
Handbook map[int]int // 图鉴
}
type Cache struct {
Card map[int]int
Master map[int]int
ExStar int
Card map[int]int
Master map[int]int
Handbook map[int]int
ExStar int
}
const (
@ -83,12 +85,18 @@ func (c *CardMod) InitData() {
if c.ExCard == nil {
c.ExCard = make(map[int]*CardInfo)
}
if c.Handbook == nil {
c.Handbook = make(map[int]int)
}
if c.Cache.Card == nil {
c.Cache.Card = make(map[int]int)
}
if c.Cache.Master == nil {
c.Cache.Master = make(map[int]int)
}
if c.Cache.Handbook == nil {
c.Cache.Handbook = make(map[int]int)
}
}
func (c *CardMod) Login(ServerOpenTime int64) {
@ -124,6 +132,11 @@ func (c *CardMod) AddCard(Id int) {
} else {
c.CardList[Id] = 1
}
_, ok = c.Handbook[Id]
if !ok {
c.Handbook[Id] = 1
c.Cache.Handbook[Id] = 1
}
c.Cache.Card[Id]++
}
@ -182,21 +195,21 @@ func (c *CardMod) BackData() *msg.ResCardInfo {
}
cardList = append(cardList, &msg.Card{Id: int32(k), Count: int32(v)})
}
ReqUid := make([]int32, 0)
ReqUid := make([]int64, 0)
for _, v := range c.ReqFriend {
if v.EndTime < GoUtil.Now() {
delete(c.ReqFriend, v.BUid)
continue
}
ReqUid = append(ReqUid, int32(v.BUid))
ReqUid = append(ReqUid, int64(v.BUid))
}
ExUid := make([]int32, 0)
ExUid := make([]int64, 0)
for k, v := range c.ExCard {
if v.EndTime < GoUtil.Now() {
delete(c.ExCard, k)
continue
}
ExUid = append(ExUid, int32(k))
ExUid = append(ExUid, int64(k))
}
return &msg.ResCardInfo{
CardList: cardList,
@ -437,35 +450,37 @@ func (c *CardMod) MasterCardEx(Id, CardId int) error {
func (c *CardMod) NotifyCard() *msg.ResNotifyCard {
m := &msg.ResNotifyCard{
Card: GoUtil.MapIntToInt32(c.Cache.Card),
Master: GoUtil.MapIntToInt32(c.Cache.Master),
ExStar: int32(c.Cache.ExStar),
Card: GoUtil.MapIntToInt32(c.Cache.Card),
Master: GoUtil.MapIntToInt32(c.Cache.Master),
Handbook: GoUtil.MapIntToInt32(c.Cache.Handbook),
ExStar: int32(c.Cache.ExStar),
}
// log.Debug("NotifyCard %v", c.Cache.Card)
c.Cache = Cache{
Card: make(map[int]int),
Master: make(map[int]int),
ExStar: 0,
Card: make(map[int]int),
Master: make(map[int]int),
Handbook: make(map[int]int),
ExStar: 0,
}
return m
}
func (c *CardMod) NotifyTimes() *msg.ResNotifyCardTimes {
ReqUid := make([]int32, 0)
ReqUid := make([]int64, 0)
for k, v := range c.ReqFriend {
if v.EndTime < GoUtil.Now() {
delete(c.ReqFriend, k)
continue
}
ReqUid = append(ReqUid, int32(k))
ReqUid = append(ReqUid, int64(k))
}
ExUid := make([]int32, 0)
ExUid := make([]int64, 0)
for k, v := range c.ExCard {
if v.EndTime < GoUtil.Now() {
delete(c.ExCard, k)
continue
}
ExUid = append(ExUid, int32(k))
ExUid = append(ExUid, int64(k))
}
m := &msg.ResNotifyCardTimes{
ExTimes: int32(c.ExTimes),
@ -500,3 +515,16 @@ func (c *CardMod) AddGoldTimes() {
c.GoldTimes++
c.GoldTimes = min(2, c.GoldTimes)
}
func (c *CardMod) GetHandbookReward(CardId int) ([]*item.Item, error) {
if v, ok := c.Handbook[CardId]; ok {
if v == 2 {
return nil, fmt.Errorf("GetHandbookReward already get")
}
Star := cardCfg.GetStarById(CardId)
c.Handbook[CardId] = 2
c.Cache.Handbook[CardId] = 2
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, Star)}, nil
}
return nil, fmt.Errorf("GetHandbookReward not find card")
}

View File

@ -33,6 +33,10 @@ type LimitedTimeEventMod struct {
Progress int
ProgressReward map[int]int
LastSelect int
Lv int // 玩家等级 零点更新
ProgressMax int
LastOption []int
BounsNum int
}
type LTEInfo struct {
@ -41,7 +45,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 +55,16 @@ 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, l.BounsNum)
}
}
func (l *LimitedTimeEventMod) ZeroUpdate(Lv int) {
l.Lv = Lv
l.BounsNum = 0
l.ProgressMax = limitedTimeEventCfg.GetProgressMax(Lv, l.BounsNum)
}
// 判断限时事件是否存在
@ -155,6 +169,7 @@ func (l *LimitedTimeEventMod) ProgressBackData() *msg.ResLimitEventProgress {
return &msg.ResLimitEventProgress{
Progress: int32(l.Progress),
ProgressReward: r,
ProgressMax: int32(l.ProgressMax),
}
}
@ -218,17 +233,27 @@ func (l *LimitedTimeEventMod) AddProgress(Lv int) {
return
}
l.Progress++
ProgressMax := limitedTimeEventCfg.GetProgressMax()
if l.Progress == 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++
if l.Progress == l.ProgressMax {
SelectNum := limitedTimeEventCfg.GetProgressSelectNum(l.Lv)
BounsLv := limitedTimeEventCfg.GetBounsLv(l.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 +267,8 @@ func (l *LimitedTimeEventMod) SelectProgressReward(Id int) ([]*item.Item, error)
l.LastSelect = RewardId
l.ProgressReward = make(map[int]int)
l.Progress = 0
l.BounsNum++
l.ProgressMax = limitedTimeEventCfg.GetProgressMax(l.Lv, l.BounsNum)
return Item, nil
}

View File

@ -13,7 +13,7 @@ import (
type PlayroomMod struct {
Collect map[int]int // 装饰
Room map[int]int // 房间
Status int // 0: 未开始 1: 进行中 2: 结束
Status int // 0: 未拜访 1: 拜访
Endtime int64 // 结束时间
Starttime int64 // 开始时间
WorkStatus int // 0: 未开始 1: 进行中 2: 结束
@ -32,7 +32,11 @@ type PlayroomMod struct {
LoseItem []*item.Item // 失去的物品
Chip int // 碎片
Flip map[int]int // 翻牌
FlipReward []*item.Item // 翻牌奖励
WorkOutline int // 是否离线
LastFlip int // 上次翻牌奖励档次
NoFlip int // 连续未获取最高翻牌奖励次数
TodayFlip bool // 今日是否已获得最高档奖励
}
const (
@ -97,6 +101,11 @@ func (p *PlayroomMod) InitData() {
}
}
func (p *PlayroomMod) ZeroUpdate() {
p.TodayFlip = false
p.LastFlip = 0
}
func (p *PlayroomMod) GetVisitor() map[int]*Info {
return p.Visitor
}
@ -275,6 +284,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 +394,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,
@ -389,26 +404,54 @@ func (p *PlayroomMod) FlipCard(Pos int, Star int) ([]*item.Item, int, error) {
FLIP_TYPE_GOLD: 20,
}
Prob := GoUtil.RandMap(RandMap)
p.Flip[Pos] = Prob
/**
若玩家同一天内上一次游玩猫猫小金库未能获得金币档位奖励且当天还未获得过金币档位奖励
或玩家已连续三次未能获得金币档位奖励则启用以下保底逻辑
玩家已翻出两个银币或铜币图案的情况下后续翻牌必然为金币
*/
check := make(map[int]int)
for _, v := range p.Flip {
check[v]++
}
if check[FLIP_TYPE_COPPER] == 2 || check[FLIP_TYPE_SILVER] == 2 {
if p.LastFlip != FLIP_TYPE_GOLD && !p.TodayFlip {
Prob = FLIP_TYPE_GOLD
}
if p.NoFlip == 3 {
Prob = FLIP_TYPE_GOLD
}
}
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)
p.NoFlip++
Items = append(Items, p.GameReward[FLIP_TYPE_COPPER])
case FLIP_TYPE_SILVER:
GainStar = int(float64(Star) * 0.05)
p.NoFlip++
Items = append(Items, p.GameReward[FLIP_TYPE_SILVER])
case FLIP_TYPE_GOLD:
GainStar = int(float64(Star) * 0.1)
p.NoFlip = 0
p.TodayFlip = true
Items = append(Items, p.GameReward[FLIP_TYPE_GOLD])
}
p.LastFlip = v
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