Merge branch 'develop' into online
This commit is contained in:
commit
55f2eff714
@ -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
|
||||
}
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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")
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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,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
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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")
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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
Loading…
Reference in New Issue
Block a user