Merge branch 'develop' into sdk

This commit is contained in:
hahwu 2026-03-10 18:50:55 +08:00
commit 4f984125c5
36 changed files with 550 additions and 106 deletions

View File

@ -1,6 +1,7 @@
package avatarCfg package avatarCfg
import ( import (
"math/rand"
"server/gamedata" "server/gamedata"
"server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/log"
"strconv" "strconv"
@ -31,6 +32,15 @@ func GetInitList() []int {
return r return r
} }
func GetRandInitId() int {
list := GetInitList()
if len(list) == 0 {
return 0
}
index := rand.Intn(len(list))
return list[index]
}
func CheckExist(Id int) bool { func CheckExist(Id int) bool {
data, err := gamedata.GetData(CFG_AVATAR) data, err := gamedata.GetData(CFG_AVATAR)
if err != nil { if err != nil {

View File

@ -47,7 +47,7 @@ func GetChessScore(ChessLv int) int {
return gamedata.GetIntValue(data, "Score") return gamedata.GetIntValue(data, "Score")
} }
func GetReward(Reward, Score, activityId int) (int, []*item.Item) { func GetReward(Reward, Score, activityId, orderFactor int) (int, []*item.Item) {
data, err := gamedata.GetData(CFG_CHAMPSHIP_JACKPOT) data, err := gamedata.GetData(CFG_CHAMPSHIP_JACKPOT)
if err != nil { if err != nil {
log.Debug("GetReward err:%v, Reward=%d, Score=%d", err, Reward, Score) log.Debug("GetReward err:%v, Reward=%d, Score=%d", err, Reward, Score)
@ -64,10 +64,18 @@ func GetReward(Reward, Score, activityId int) (int, []*item.Item) {
if Reward >= Id { if Reward >= Id {
continue continue
} }
if Score >= gamedata.GetIntValue(v, "Total") { if Score < gamedata.GetIntValue(v, "Total") {
Items := item.ParseItem(gamedata.GetValue(v, "Items")) continue
r = item.Merge(r, Items) }
NewReward = max(NewReward, Id) Items := item.ParseItem(gamedata.GetValue(v, "Items"))
r = item.Merge(r, Items)
NewReward = max(NewReward, Id)
starReward := gamedata.GetIntValue(v, "StarReward")
if starReward > 0 {
starnum := int((float64(starReward) * float64(orderFactor) / 500)) * 5
if starnum > 0 {
r = append(r, item.NewItem(item.ITEM_STAR_ID, starnum))
}
} }
} }
return NewReward, r return NewReward, r

View File

@ -36,6 +36,21 @@ func GetStarCost(AreaId, SortId int) int {
return 0 return 0
} }
func GetStarCostByAreaId(AreaId int) int {
data, err := gamedata.GetData(DECORATE_COST)
if err != nil {
log.Debug("GetStarCost err:%v, AreaId=%d", err, AreaId)
return 0
}
var total int
for _, v := range data {
if gamedata.GetIntValue(v, "AreaId") == AreaId {
total += gamedata.GetIntValue(v, "CostCount")
}
}
return total
}
func GetAreaId(id int) int { func GetAreaId(id int) int {
value, err := gamedata.GetDataByIntKey("DecorateCost", id) value, err := gamedata.GetDataByIntKey("DecorateCost", id)
if err != nil { if err != nil {

View File

@ -1,6 +1,7 @@
package faceCfg package faceCfg
import ( import (
"math/rand"
"server/gamedata" "server/gamedata"
"server/pkg/github.com/name5566/leaf/log" "server/pkg/github.com/name5566/leaf/log"
"strconv" "strconv"
@ -35,6 +36,15 @@ func GetInitList() []int {
return r return r
} }
func GetRandInitId() int {
list := GetInitList()
if len(list) == 0 {
return 0
}
index := rand.Intn(len(list))
return list[index]
}
func CheckExist(Id int) bool { func CheckExist(Id int) bool {
data, err := gamedata.GetData(CFG_FACE) data, err := gamedata.GetData(CFG_FACE)
if err != nil { if err != nil {

View File

@ -46,6 +46,14 @@ func GetLoseItem(Id int) []*item.Item {
return gamedata.GetItemList(data, "ItemCost") return gamedata.GetItemList(data, "ItemCost")
} }
func GetStartItemNum(Id int) int {
data, err := gamedata.GetDataByIntKey(CFG_MINING_TEMPLATE, Id)
if err != nil {
return 0
}
return gamedata.GetIntValue(data, "StartItemNum")
}
func GetPassArea(Id int) int { func GetPassArea(Id int) int {
data, err := gamedata.GetDataByIntKey(CFG_MINING_PASS, Id) data, err := gamedata.GetDataByIntKey(CFG_MINING_PASS, Id)
if err != nil { if err != nil {
@ -88,7 +96,7 @@ func GetRandItem() []*item.Item {
return gamedata.GetItemList(Info, "Items") return gamedata.GetItemList(Info, "Items")
} }
func GetPassItem(Id int, needStar int) []*item.Item { func GetPassItem(Id int, orderFactor int) []*item.Item {
data, err := gamedata.GetDataByIntKey(CFG_MINING_PASS, Id) data, err := gamedata.GetDataByIntKey(CFG_MINING_PASS, Id)
if err != nil { if err != nil {
return nil return nil
@ -97,7 +105,7 @@ func GetPassItem(Id int, needStar int) []*item.Item {
starReward := gamedata.GetIntValue(data, "StarReward") starReward := gamedata.GetIntValue(data, "StarReward")
var starnum int var starnum int
if starReward > 0 { if starReward > 0 {
starnum = int(needStar * starReward / 100) starnum = int((float64(starReward) * float64(orderFactor) / 500)) * 5
if starnum > 0 { if starnum > 0 {
items = append(items, &item.Item{ items = append(items, &item.Item{
Id: item.ITEM_STAR_ID, Id: item.ITEM_STAR_ID,
@ -108,7 +116,7 @@ func GetPassItem(Id int, needStar int) []*item.Item {
return items return items
} }
func GetPassItemList(needStar int) map[int][]*item.Item { func GetPassItemList(orderFactor int) map[int][]*item.Item {
data, err := gamedata.GetData(CFG_MINING_PASS) data, err := gamedata.GetData(CFG_MINING_PASS)
if err != nil { if err != nil {
return nil return nil
@ -116,7 +124,7 @@ func GetPassItemList(needStar int) map[int][]*item.Item {
result := make(map[int][]*item.Item) result := make(map[int][]*item.Item)
for k := range data { for k := range data {
Id := GoUtil.Int(k) Id := GoUtil.Int(k)
result[Id] = GetPassItem(Id, needStar) result[Id] = GetPassItem(Id, orderFactor)
} }
return result return result
} }

View File

@ -1,6 +1,7 @@
package orderCfg package orderCfg
import ( import (
"math"
"server/gamedata" "server/gamedata"
"sort" "sort"
"strconv" "strconv"
@ -33,8 +34,7 @@ func GetOrderK(Lv int) int {
} }
Energy := gamedata.GetIntValue(data, "Energy") Energy := gamedata.GetIntValue(data, "Energy")
K := gamedata.GetFloatValue(data, "K") K := gamedata.GetFloatValue(data, "K")
a := float64(Energy)*K/10 + 0.5 return int(math.Round(float64(Energy)*K/10) * 10)
return int(a) * 10
} }
func GetOrderFactor(Scene int) int { func GetOrderFactor(Scene int) int {

View File

@ -219,6 +219,20 @@ func RedisZRevRangeWithScores(key string, start, stop int64) ([]redis.Z, error)
return val, nil return val, nil
} }
func RedisZGetByIndexWithScore(key string, index int64) (*redis.Z, error) {
if RdbRead == nil {
return nil, nil
}
val, err := RdbRead.ZRangeWithScores(ctx, key, index, index).Result()
if err != nil {
return nil, err
}
if len(val) == 0 {
return nil, nil
}
return &val[0], nil
}
func RedisZRankWithScores(key, member string) (int64, float64, error) { func RedisZRankWithScores(key, member string) (int64, float64, error) {
if RdbRead == nil { if RdbRead == nil {
return 0, 0, nil return 0, 0, nil
@ -234,6 +248,17 @@ func RedisZRankWithScores(key, member string) (int64, float64, error) {
return val, score, nil return val, score, nil
} }
func RedisZCard(key string) (int64, error) {
if RdbRead == nil {
return 0, nil
}
val, err := RdbRead.ZCard(ctx, key).Result()
if err != nil {
return 0, err
}
return val, nil
}
func RedisDel(key string) { func RedisDel(key string) {
if RdbWrite == nil { if RdbWrite == nil {
log.Debug("redis write client is nil") log.Debug("redis write client is nil")

View File

@ -9,6 +9,7 @@ import (
guesscolorCfg "server/conf/guess_color" guesscolorCfg "server/conf/guess_color"
languageCfg "server/conf/language" languageCfg "server/conf/language"
miningCfg "server/conf/mining" miningCfg "server/conf/mining"
orderCfg "server/conf/order"
passCfg "server/conf/pass" passCfg "server/conf/pass"
raceCfg "server/conf/race" raceCfg "server/conf/race"
"server/game/mod/activity" "server/game/mod/activity"
@ -16,6 +17,7 @@ import (
"server/game/mod/mail" "server/game/mod/mail"
GoUtil "server/game_util" GoUtil "server/game_util"
"server/msg" "server/msg"
"server/pkg/github.com/name5566/leaf/log"
) )
// 活动模块 登录 // 活动模块 登录
@ -77,6 +79,16 @@ func (p *Player) ActivityLogin() {
p.SendActivityMail(ItemId, ItemNum, PassActivityId, RewardItems) p.SendActivityMail(ItemId, ItemNum, PassActivityId, RewardItems)
} }
} }
// 初始化活动道具
initItem := p.GetMiningMod().GetInitItem()
if len(initItem) > 0 {
err := p.HandleItem(initItem, "")
if err != nil {
log.Debug("ActivityLogin initItem err : %s", err)
}
}
} }
// 发送活动邮件 // 发送活动邮件
@ -188,8 +200,8 @@ func (p *Player) MiningBackData() {
Status := p.GetActivityStatus(activity.ACT_TYPE_MINING) Status := p.GetActivityStatus(activity.ACT_TYPE_MINING)
Template := miningCfg.GetTemplate(ActivityInfo.Id) Template := miningCfg.GetTemplate(ActivityInfo.Id)
DecorateMod := p.PlayMod.getDecorateMod() DecorateMod := p.PlayMod.getDecorateMod()
needStar := DecorateMod.GetNextNeedStar() orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId())
passRewardList := miningCfg.GetPassItemList(needStar) passRewardList := miningCfg.GetPassItemList(orderFactor)
resPassRewardList := make(map[int32]*msg.ItemList) resPassRewardList := make(map[int32]*msg.ItemList)
for k, v := range passRewardList { for k, v := range passRewardList {
resPassRewardList[int32(k)] = item.ItemListToMsg(v) resPassRewardList[int32(k)] = item.ItemListToMsg(v)

View File

@ -3,9 +3,14 @@ package game
import ( import (
"fmt" "fmt"
"math" "math"
"math/rand"
avatarCfg "server/conf/avatar"
champshipCfg "server/conf/champship" champshipCfg "server/conf/champship"
faceCfg "server/conf/face"
randnameCfg "server/conf/randname" randnameCfg "server/conf/randname"
"server/db" "server/db"
"server/game/mod/friend"
"server/game/mod/msg" "server/game/mod/msg"
GoUtil "server/game_util" GoUtil "server/game_util"
proto "server/msg" proto "server/msg"
@ -55,6 +60,11 @@ type ChampshipRobot struct {
Time int64 Time int64
Score float64 Score float64
PerScore float64 PerScore float64
Playroom map[int]int
DressSet map[int]int
FurSet int
ActLog *friend.ActLogInfo
PetName string
} }
type GroupInfo struct { type GroupInfo struct {
@ -276,28 +286,54 @@ func (c *ChampshipMgr) GetPreRankMsg(Uid int) *proto.ResChampshipPreRank {
if Robot == nil { if Robot == nil {
continue continue
} }
last := &proto.ActLog{}
if Robot.ActLog != nil {
last = &proto.ActLog{
Type: int32(Robot.ActLog.Type),
Time: Robot.ActLog.Time,
Param: Robot.ActLog.Param,
}
}
RL[int32(k+1)] = &proto.ResPlayerRank{ RL[int32(k+1)] = &proto.ResPlayerRank{
Uid: int64(v.Uid), Uid: int64(v.Uid),
Score: float32(v.Score), Score: float32(v.Score),
Name: Robot.Name, Name: Robot.Name,
Avatar: int32(Robot.Avatar), Avatar: int32(Robot.Avatar),
Face: int32(Robot.Face), Face: int32(Robot.Face),
Level: int32(Robot.Level), Level: int32(Robot.Level),
Type: int32(v.Type), Type: int32(v.Type),
PlayroomSet: GoUtil.MapIntToInt32(Robot.Playroom),
DressSet: GoUtil.MapIntToInt32(Robot.DressSet),
FurSet: int32(Robot.FurSet),
PetName: Robot.PetName,
Last: last,
} }
} else { } else {
SimplePlayer := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid) SimplePlayer := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
if SimplePlayer == nil { if SimplePlayer == nil {
continue continue
} }
last := &proto.ActLog{}
if SimplePlayer.ActLog != nil {
last = &proto.ActLog{
Type: int32(SimplePlayer.ActLog.Type),
Time: SimplePlayer.ActLog.Time,
Param: SimplePlayer.ActLog.Param,
}
}
RL[int32(k+1)] = &proto.ResPlayerRank{ RL[int32(k+1)] = &proto.ResPlayerRank{
Uid: int64(v.Uid), Uid: int64(v.Uid),
Score: float32(v.Score), Score: float32(v.Score),
Name: SimplePlayer.Name, Name: SimplePlayer.Name,
Avatar: int32(SimplePlayer.Avatar), Avatar: int32(SimplePlayer.Avatar),
Face: int32(SimplePlayer.Face), Face: int32(SimplePlayer.Face),
Level: int32(SimplePlayer.Level), Level: int32(SimplePlayer.Level),
Type: int32(v.Type), Type: int32(v.Type),
PlayroomSet: GoUtil.MapIntToInt32(SimplePlayer.Playroom),
DressSet: GoUtil.MapIntToInt32(SimplePlayer.DressSet),
FurSet: int32(SimplePlayer.PetFur),
PetName: SimplePlayer.PetName,
Last: last,
} }
} }
} }
@ -335,28 +371,54 @@ func (c *ChampshipMgr) GetRankMsg(Uid int) *proto.ResChampshipRank {
if Robot == nil { if Robot == nil {
continue continue
} }
last := &proto.ActLog{}
if Robot.ActLog != nil {
last = &proto.ActLog{
Type: int32(Robot.ActLog.Type),
Time: Robot.ActLog.Time,
Param: Robot.ActLog.Param,
}
}
RL[int32(k+1)] = &proto.ResPlayerRank{ RL[int32(k+1)] = &proto.ResPlayerRank{
Uid: int64(v.Uid), Uid: int64(v.Uid),
Score: float32(v.Score), Score: float32(v.Score),
Name: Robot.Name, Name: Robot.Name,
Avatar: int32(Robot.Avatar), Avatar: int32(Robot.Avatar),
Face: int32(Robot.Face), Face: int32(Robot.Face),
Level: int32(Robot.Level), Level: int32(Robot.Level),
Type: int32(v.Type), Type: int32(v.Type),
PlayroomSet: GoUtil.MapIntToInt32(Robot.Playroom),
DressSet: GoUtil.MapIntToInt32(Robot.DressSet),
FurSet: int32(Robot.FurSet),
PetName: Robot.PetName,
Last: last,
} }
} else { } else {
SimplePlayer := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid) SimplePlayer := G_GameLogicPtr.GetSimplePlayerByUid(v.Uid)
if SimplePlayer == nil { if SimplePlayer == nil {
continue continue
} }
last := &proto.ActLog{}
if SimplePlayer.ActLog != nil {
last = &proto.ActLog{
Type: int32(SimplePlayer.ActLog.Type),
Time: SimplePlayer.ActLog.Time,
Param: SimplePlayer.ActLog.Param,
}
}
RL[int32(k+1)] = &proto.ResPlayerRank{ RL[int32(k+1)] = &proto.ResPlayerRank{
Uid: int64(v.Uid), Uid: int64(v.Uid),
Score: float32(v.Score), Score: float32(v.Score),
Name: SimplePlayer.Name, Name: SimplePlayer.Name,
Avatar: int32(SimplePlayer.Avatar), Avatar: int32(SimplePlayer.Avatar),
Face: int32(SimplePlayer.Face), Face: int32(SimplePlayer.Face),
Level: int32(SimplePlayer.Level), Level: int32(SimplePlayer.Level),
Type: int32(v.Type), Type: int32(v.Type),
PlayroomSet: GoUtil.MapIntToInt32(SimplePlayer.Playroom),
DressSet: GoUtil.MapIntToInt32(SimplePlayer.DressSet),
FurSet: int32(SimplePlayer.PetFur),
PetName: SimplePlayer.PetName,
Last: last,
} }
} }
} }
@ -434,6 +496,9 @@ func (c *ChampshipMgr) group(iszero bool) (interface{}, error) {
for j := StartId; j <= ChampshipData.AutoId; j++ { // 填充机器人 for j := StartId; j <= ChampshipData.AutoId; j++ { // 填充机器人
RobotNum := 30 - len(ChampshipData.Rank[j]) RobotNum := 30 - len(ChampshipData.Rank[j])
RobotList := CreateRobotList(i, RobotNum, j) RobotList := CreateRobotList(i, RobotNum, j)
for i := 0; i < RobotNum; i++ {
FormatRobotInfo(RobotList[i], i+1)
}
for _, v := range RobotList { for _, v := range RobotList {
ChampshipData.Robot[ChampshipData.RobotId] = v ChampshipData.Robot[ChampshipData.RobotId] = v
ChampshipData.Rank[j] = append(ChampshipData.Rank[j], &ChampshipRank{ ChampshipData.Rank[j] = append(ChampshipData.Rank[j], &ChampshipRank{
@ -837,21 +902,68 @@ func CreateRobot(M float64, GroupId int) *ChampshipRobot {
PerScore = math.Round((M/10*0.34)/(float64(GoUtil.NextZeroTimestampDuration())/1800)*100) / 100 PerScore = math.Round((M/10*0.34)/(float64(GoUtil.NextZeroTimestampDuration())/1800)*100) / 100
Score = 2 Score = 2
} }
num, err := db.RedisZCard(RANK_USER)
if err != nil {
num = 0
}
id := rand.Intn(int(num)) + 1
rinfo, err := db.RedisZGetByIndexWithScore(RANK_USER, int64(id))
playerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(GoUtil.Int(rinfo.Member))
return &ChampshipRobot{ return &ChampshipRobot{
Max: M / 10, Max: M / 10,
Type: Type, Type: Type,
Name: randnameCfg.GetRandName(), Name: randnameCfg.GetRandName(),
Avatar: GoUtil.RandNum(1, 10), Avatar: avatarCfg.GetRandInitId(),
Face: GoUtil.RandNum(1, 10), Face: faceCfg.GetRandInitId(),
Level: GoUtil.RandNum(1, 10), Level: GoUtil.RandNum(1, 10),
GroupId: GroupId, GroupId: GroupId,
Time: GoUtil.Now(), Time: GoUtil.Now(),
Score: Score, Score: Score,
PerScore: PerScore, PerScore: PerScore,
Playroom: playerSimpleData.Playroom,
DressSet: playerSimpleData.DressSet,
FurSet: playerSimpleData.PetFur,
} }
} }
func FormatRobotInfo(Robot *ChampshipRobot, index int) {
num, err := db.RedisZCard(RANK_USER)
if err != nil {
num = 0
}
x := int(num) / 30
if index > int(x) {
index = int(x)
}
start := int64((index - 1) * x)
end := int64(index*x - 1)
rinfo, err := db.RedisZRevRangeWithScores(RANK_USER, start, end)
if err != nil {
log.Error("FormatRobotInfo RedisZRevRangeWithScores error: %v, start %d, end %d", err, start, end)
return
}
if len(rinfo) == 0 {
log.Error("FormatRobotInfo RedisZRevRangeWithScores no data, start %d, end %d", start, end)
return
}
id := rand.Intn(len(rinfo))
if id >= len(rinfo) {
id = len(rinfo) - 1
}
playerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(GoUtil.Int(rinfo[id].Member))
if playerSimpleData == nil {
return
}
Robot.Level = playerSimpleData.Level
Robot.Avatar = playerSimpleData.Avatar
Robot.Face = playerSimpleData.Face
Robot.Playroom = playerSimpleData.Playroom
Robot.DressSet = playerSimpleData.DressSet
Robot.FurSet = playerSimpleData.PetFur
Robot.ActLog = playerSimpleData.ActLog
Robot.PetName = playerSimpleData.PetName
}
func (c *ChampshipMgr) SetRankCache(Uid int) { func (c *ChampshipMgr) SetRankCache(Uid int) {
PreRank := c.unsafe_getLastMyRank(Uid) PreRank := c.unsafe_getLastMyRank(Uid)
Rank := c.unsafe_getMyRank(Uid) Rank := c.unsafe_getMyRank(Uid)

View File

@ -80,7 +80,7 @@ func (p *Player) ActivityFire(ChargeId int) {
return return
} }
p.PlayMod.save() p.PlayMod.save()
p.initAcitivity() p.initActivity()
p.BackDataActivity() p.BackDataActivity()
} }

View File

@ -101,7 +101,7 @@ func ReqGmCommand_(player *Player, Command string) error {
player.PlayMod.getBaseMod().Level = num player.PlayMod.getBaseMod().Level = num
player.PlayMod.getBaseMod().Exp = 0 player.PlayMod.getBaseMod().Exp = 0
player.PushClientRes(player.PlayerBaseMod.BackAsset()) player.PushClientRes(player.PlayerBaseMod.BackAsset())
player.initAcitivity() player.initActivity()
player.PlayMod.getGuideTaskMod().Unlock(num) player.PlayMod.getGuideTaskMod().Unlock(num)
player.PlayMod.getOrderMod().TriggerOrder(num, order.TRIGGER_TYPE_LV, nil, 1) player.PlayMod.getOrderMod().TriggerOrder(num, order.TRIGGER_TYPE_LV, nil, 1)
player.PushClientRes(player.PlayMod.getOrderMod().BackData()) player.PushClientRes(player.PlayMod.getOrderMod().BackData())
@ -124,7 +124,7 @@ func ReqGmCommand_(player *Player, Command string) error {
ActivityMod.Var = nil ActivityMod.Var = nil
ActivityMod.InitData() ActivityMod.InitData()
player.PlayMod.save() player.PlayMod.save()
player.initAcitivity() player.initActivity()
player.BackDataActivity() player.BackDataActivity()
case "weekUpdate": case "weekUpdate":
VarMod := player.PlayMod.getVarMod() VarMod := player.PlayMod.getVarMod()
@ -417,7 +417,7 @@ func ReqGmCommand_(player *Player, Command string) error {
FriendMod.Npc = nil FriendMod.Npc = nil
FriendMod.Id = 0 FriendMod.Id = 0
FriendMod.Log = nil FriendMod.Log = nil
FriendMod.InitData() FriendMod.InitData(player.M_DwUin)
player.FriendListBackData() player.FriendListBackData()
player.FriendLogBackData() player.FriendLogBackData()
case "addFriend": case "addFriend":

View File

@ -553,6 +553,7 @@ func (p *Player) handle(m *msg.Msg) error {
Face: GoUtil.IntToInt32(faceList), Face: GoUtil.IntToInt32(faceList),
Count: GoUtil.Int32(info["apply_count"]), Count: GoUtil.Int32(info["apply_count"]),
FacebookPic: facebookPic, FacebookPic: facebookPic,
Uids: applyUids,
}) })
} }
otherUids, ok := info["other_uids"].([]int64) otherUids, ok := info["other_uids"].([]int64)
@ -574,6 +575,7 @@ func (p *Player) handle(m *msg.Msg) error {
Face: GoUtil.IntToInt32(faceList), Face: GoUtil.IntToInt32(faceList),
Count: GoUtil.Int32(info["other_count"]), Count: GoUtil.Int32(info["other_count"]),
FacebookPic: facebookPic, FacebookPic: facebookPic,
Uids: otherUids,
}) })
} }
default: default:
@ -631,7 +633,7 @@ func ClusterSendMsg(ServerId int, m *msg.Msg) {
func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard { func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard {
Uid := 0 Uid := 0
if CardInfo.Type == card.TYPE_CARD_SEND { if CardInfo.Type == card.TYPE_CARD_SEND {
Uid = CardInfo.BUid Uid = CardInfo.AUid
} }
if CardInfo.Type == card.TYPE_CARD_GIVE { if CardInfo.Type == card.TYPE_CARD_GIVE {
@ -1133,7 +1135,7 @@ func (player *Player) InitOrderItem() {
continue continue
} }
Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList()) Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList())
Star = int(float64(Star)*float64(OrderFactor)/1000+0.5) * 10 Star = int(float64(Star)*float64(OrderFactor)/1000) * 10
v.Items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: Star}} v.Items = []*item.Item{{Id: item.ITEM_STAR_ID, Num: Star}}
OrderMod.OrderList[k] = v OrderMod.OrderList[k] = v
} }
@ -1273,13 +1275,18 @@ func (p *Player) AddHighOrder() {
ChessMap[Color] = v ChessMap[Color] = v
} }
} }
RetireProduceColor := ChessMod.GetRetireProduceColor()
for Color, ChessId := range ChessMap { for Color, ChessId := range ChessMap {
EmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), Color) EmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), Color)
_, ChessMaxLv := getChesslvRange(EmitId, BaseMod.GetEnergyMul(), OrderMod.IsCharge) _, ChessMaxLv := getChesslvRange(EmitId, BaseMod.GetEnergyMul(), OrderMod.IsCharge)
NewLev2 := mergeDataCfg.DynamicLev(ChessMaxLv, EmitId, Color) NewLev2 := mergeDataCfg.DynamicLev(ChessMaxLv, EmitId, Color)
NewLev3 := order.AdjustLev(NewLev2, BaseMod.GetEnergyMul()) NewLev3 := order.AdjustLev(NewLev2, BaseMod.GetEnergyMul())
ChessLv := mergeDataCfg.GetLvById(ChessId) ChessLv := mergeDataCfg.GetLvById(ChessId)
chessColor := mergeDataCfg.GetColorById(ChessId)
// 退役产物不生成订单
if GoUtil.InStringArray(chessColor, RetireProduceColor) {
continue
}
if NewLev3 >= ChessLv { if NewLev3 >= ChessLv {
continue continue
} }
@ -1318,10 +1325,16 @@ func (p *Player) AddHighOrder2() {
} }
ChessMap[v]++ ChessMap[v]++
} }
RetireProduceColor := ChessMod.GetRetireProduceColor()
for ChessId, Num := range ChessMap { for ChessId, Num := range ChessMap {
if Num < 2 { if Num < 2 {
continue continue
} }
chessColor := mergeDataCfg.GetColorById(ChessId)
// 退役产物不生成订单
if GoUtil.InStringArray(chessColor, RetireProduceColor) {
continue
}
add := true add := true
for _, v := range OrderMod.GetOrderList() { for _, v := range OrderMod.GetOrderList() {
if GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId}) || GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId, ChessId}) { if GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId}) || GoUtil.SliceEqual(v.MergeId, []int{ChessId, ChessId, ChessId}) {

View File

@ -1,20 +1,18 @@
package activity package activity
import ( import (
"fmt"
activityCfg "server/conf/activity" activityCfg "server/conf/activity"
"server/game/mod/item" "server/game/mod/item"
GoUtil "server/game_util"
) )
// 活动礼包 // 活动礼包
func (a *Activity) Fire(Id int) ([]*item.Item, error) { func (a *Activity) Fire(Id int) ([]*item.Item, error) {
AId := activityCfg.GetActivityGiftId(Id) // AId := activityCfg.GetActivityGiftId(Id)
Var := a.getGiftVar(AId) // Var := a.getGiftVar(AId)
if Var.Buy { // if Var.Buy {
return nil, fmt.Errorf("Id%d已购买", Id) // return nil, fmt.Errorf("Id%d已购买", Id)
} // }
Var.Buy = true // Var.Buy = true
Var.Time = GoUtil.Now() // Var.Time = GoUtil.Now()
return activityCfg.GetActivityGiftItems(Id), nil return activityCfg.GetActivityGiftItems(Id), nil
} }

View File

@ -56,8 +56,8 @@ func (c *ChampshipMod) AddScore(Chess []int) {
c.Score += score c.Score += score
} }
func (c *ChampshipMod) GetReward(activityId int) []*item.Item { func (c *ChampshipMod) GetReward(activityId, orderFactor int) []*item.Item {
Reward, Items := champshipCfg.GetReward(c.Reward, c.Score, activityId) Reward, Items := champshipCfg.GetReward(c.Reward, c.Score, activityId, orderFactor)
c.Reward = Reward c.Reward = Reward
c.Max = max(c.Max, c.Reward) c.Max = max(c.Max, c.Reward)
return Items return Items

View File

@ -288,6 +288,26 @@ func (c *ChargeMod) FireAdReward(ChargeId int) []*item.Item {
return Items return Items
} }
func (c *ChargeMod) AddAdTime(PetWorkDay int) {
if PetWorkDay > 0 {
Now := GoUtil.Now()
if c.AdEndTime < Now {
c.AdEndTime = Now + int64(PetWorkDay*secondsIn1Day)
} else {
c.AdEndTime += int64(PetWorkDay * secondsIn1Day)
}
c.PetWorkTime += int64(PetWorkDay * secondsIn1Day)
c.Ad = true
}
}
func (c *ChargeMod) CheckAd() bool {
if !c.Ad {
return false
}
return true
}
// 免费商店 // 免费商店
func (c *ChargeMod) FireFreeShop() ([]*item.Item, error) { func (c *ChargeMod) FireFreeShop() ([]*item.Item, error) {
if c.FreeShop >= 2 { if c.FreeShop >= 2 {

View File

@ -725,3 +725,13 @@ func (cb *ChessBorad) GetRetireReward(Id string) ([]*item.Item, error) {
cb.RetireReward[Id] = true cb.RetireReward[Id] = true
return mergeDataCfg.GetRetireReward(), nil return mergeDataCfg.GetRetireReward(), nil
} }
func (cb *ChessBorad) GetRetireProduceColor() []string {
color := make([]string, 0, len(cb.Retire))
for k, v := range cb.Retire {
if v == EMIT_RETIRE_ING {
color = append(color, mergeDataCfg.GetEmitTypeByColor(k))
}
}
return color
}

View File

@ -132,6 +132,10 @@ func (d *Decorate) GetNextNeedStar() int {
return 0 return 0
} }
func (d *Decorate) GetAreaCost() int {
return decorateCfg.GetStarCostByAreaId(d.AreaId)
}
// 一键装饰 // 一键装饰
func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) { func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) {
DecorateAll := decorateCfg.GetAllSortIdByAreaId(d.AreaId) DecorateAll := decorateCfg.GetAllSortIdByAreaId(d.AreaId)

View File

@ -189,7 +189,7 @@ type LogInfo struct {
} }
// 初始化数据 // 初始化数据
func (f *FriendMod) InitData() { func (f *FriendMod) InitData(M_DwUin int64) {
if f.FriendList == nil { if f.FriendList == nil {
f.FriendList = make(map[int]struct{}) f.FriendList = make(map[int]struct{})
} }
@ -224,6 +224,26 @@ func (f *FriendMod) InitData() {
if f.NewApplyList == nil { if f.NewApplyList == nil {
f.NewApplyList = make(map[int]*ApplyInfo) f.NewApplyList = make(map[int]*ApplyInfo)
} }
for k, v := range f.Card {
if v.AUid != 0 && !f.CheckFriend(v.AUid) && v.AUid != int(M_DwUin) {
delete(f.Card, k)
continue
}
if v.BUid != 0 && !f.CheckFriend(v.BUid) && v.BUid != int(M_DwUin) {
delete(f.Card, k)
continue
}
}
if len(f.ReplyList) > 0 {
validReplyList := make([]*ReplyInfo, 0, len(f.ReplyList))
for _, v := range f.ReplyList {
if f.CheckFriend(v.Uid) {
validReplyList = append(validReplyList, v)
}
}
f.ReplyList = validReplyList
}
f.version() f.version()
} }
@ -302,6 +322,9 @@ func (f *FriendMod) Interact(id, t int, T int64) {
VisitTime: T, VisitTime: T,
Type: t, Type: t,
}) })
if len(f.NewFriendList[id].Interact) > 30 {
f.NewFriendList[id].Interact = f.NewFriendList[id].Interact[len(f.NewFriendList[id].Interact)-30:]
}
} }
// 获取好友交互时间 // 获取好友交互时间

View File

@ -59,6 +59,7 @@ const (
ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱 ITEM_TYPE_PLAYROOM_BOX = 115 // playroom宝箱
ITEM_TYPE_ACT_PASS = 116 // 通行证活动道具 ITEM_TYPE_ACT_PASS = 116 // 通行证活动道具
ITEM_TYPE_PET_FUR = 117 // 宠物毛皮 ITEM_TYPE_PET_FUR = 117 // 宠物毛皮
ITEM_TYPE_AD_CARD = 118 // 免广告卡
) )
func (i *Item) String() string { func (i *Item) String() string {

View File

@ -274,7 +274,19 @@ func (l *LimitedTimeEventMod) GetChestReward(MergeList, EmitList []int) []*item.
} }
// 获取场景冲刺奖励 // 获取场景冲刺奖励
func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item) { func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item, error) {
limitInfo, ok := l.EventList[EVENT_TYPE_SENCE_DASH]
if !ok {
return 0, nil, fmt.Errorf("sence dash not active")
}
if limitInfo.Info == nil {
return 0, nil, fmt.Errorf("sence dash info error")
}
times := GoUtil.Int(limitInfo.Info["Times"])
if times <= 0 {
return 0, nil, fmt.Errorf("no dash times")
}
limitInfo.Info["Times"] = times - 1
ProbList := limitedTimeEventCfg.GetSenceJackpotProb() ProbList := limitedTimeEventCfg.GetSenceJackpotProb()
Id := GoUtil.RandMap(ProbList) Id := GoUtil.RandMap(ProbList)
Items := limitedTimeEventCfg.GetSenceJackpotReward(Id) Items := limitedTimeEventCfg.GetSenceJackpotReward(Id)
@ -282,7 +294,7 @@ func (l *LimitedTimeEventMod) GetSceneDashReward() (int, []*item.Item) {
// 多个奖励时,随机选择一个 // 多个奖励时,随机选择一个
Items = []*item.Item{GoUtil.RandItem(Items)} Items = []*item.Item{GoUtil.RandItem(Items)}
} }
return Id, Items return Id, Items, nil
} }
// 获取连击快手奖励 // 获取连击快手奖励
@ -434,6 +446,10 @@ func (l *LimitedTimeEventMod) GetCatTrickReward() ([]*item.Item, error) {
// #region 事件信息初始化 // #region 事件信息初始化
func initEventInfo(E *LTEInfo, EventType int) { func initEventInfo(E *LTEInfo, EventType int) {
switch EventType { switch EventType {
case EVENT_TYPE_SENCE_DASH:
E.Info = map[string]interface{}{
"Times": 0,
}
case EVENT_TYPE_FAST_PRODUCE: case EVENT_TYPE_FAST_PRODUCE:
E.Info = map[string]interface{}{ E.Info = map[string]interface{}{
"Times": 0, "Times": 0,
@ -515,6 +531,9 @@ func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent {
case EVENT_TYPE_PAYBACK_DAY: case EVENT_TYPE_PAYBACK_DAY:
d := e.D.(*PaybackDay) d := e.D.(*PaybackDay)
Param[msg.LimitEventParam_PAYBACK_DAY_COUNT.String()] = int32(d.Count) Param[msg.LimitEventParam_PAYBACK_DAY_COUNT.String()] = int32(d.Count)
case EVENT_TYPE_SENCE_DASH:
Times := GoUtil.Int(e.Info["Times"])
Param[msg.LimitEventParam_SENCE_DASH_TIMES.String()] = int32(Times)
} }
return &msg.LimitEvent{ return &msg.LimitEvent{
EndTime: EndTime, EndTime: EndTime,
@ -537,3 +556,15 @@ func (l *LimitedTimeEventMod) GetCatDaySaleEndTime() int64 {
} }
return v.StartT + v.Remian return v.StartT + v.Remian
} }
func (l *LimitedTimeEventMod) AddSenceDashTimes() bool {
SenceInfo, ok := l.EventList[EVENT_TYPE_SENCE_DASH]
if !ok {
return false
}
if SenceInfo.Info == nil {
return false
}
SenceInfo.Info["Times"] = GoUtil.Int(SenceInfo.Info["Times"]) + 1
return true
}

View File

@ -7,11 +7,12 @@ import (
) )
type MiningMod struct { type MiningMod struct {
Id int Id int
Map map[int32]string Map map[int32]string
Gem []int Gem []int
Pass int Pass int
Mining int Mining int
InitItem bool
} }
func (m *MiningMod) InitData() { func (m *MiningMod) InitData() {
@ -34,9 +35,26 @@ func (m *MiningMod) Login(Id int) int {
m.Gem = nil m.Gem = nil
m.Pass = 1 m.Pass = 1
m.Mining = 0 m.Mining = 0
m.InitItem = false
return OldId return OldId
} }
func (m *MiningMod) GetInitItem() []*item.Item {
if m.InitItem {
return nil
}
if m.Id == 0 {
return nil
}
initItemNum := miningCfg.GetStartItemNum(m.Id)
initItemId := miningCfg.GetActivityItemId(m.Id)
if initItemNum > 0 && initItemId > 0 {
m.InitItem = true
return []*item.Item{item.NewItem(initItemId, initItemNum)}
}
return nil
}
func (m *MiningMod) ZeroUpdate(Id int) { func (m *MiningMod) ZeroUpdate(Id int) {
m.Login(Id) m.Login(Id)
} }
@ -81,12 +99,12 @@ func (m *MiningMod) Take(Map map[int32]string, Gem int) ([]*item.Item, error) {
return Items, nil return Items, nil
} }
func (m *MiningMod) GetReward(needStar int) ([]*item.Item, int, error) { func (m *MiningMod) GetReward(orderFactor int) ([]*item.Item, int, error) {
GemList := miningCfg.GetPassGem(m.Pass) GemList := miningCfg.GetPassGem(m.Pass)
if len(m.Gem) < len(GemList) { if len(m.Gem) < len(GemList) {
return nil, 0, fmt.Errorf("gem is not full") return nil, 0, fmt.Errorf("gem is not full")
} }
Items := miningCfg.GetPassItem(m.Pass, needStar) Items := miningCfg.GetPassItem(m.Pass, orderFactor)
m.Pass++ m.Pass++
Ming := m.Mining Ming := m.Mining
m.Mining = 0 m.Mining = 0

View File

@ -564,22 +564,22 @@ func (o *OrderMod) CreateExtraOrder(AddChess, AddNewEmit, ChessList []int, Energ
} }
b3 := false b3 := false
//额外订单补充2当玩家的棋盘中出现2个相同的满级产物时立刻生成一个对应的收购订单 //额外订单补充2当玩家的棋盘中出现2个相同的满级产物时立刻生成一个对应的收购订单
for k := range MaxLvChess { // for k := range MaxLvChess {
ChessNum := GoUtil.GetElemNum(ChessList, k) // ChessNum := GoUtil.GetElemNum(ChessList, k)
if ChessNum >= 2 && Level >= 12 { // if ChessNum >= 2 && Level >= 12 {
b2 := true // b2 := true
for _, v := range o.OrderList { // for _, v := range o.OrderList {
if GoUtil.SliceEqual(v.MergeId, []int{k, k}) { // if GoUtil.SliceEqual(v.MergeId, []int{k, k}) {
b2 = false // b2 = false
break // break
} // }
} // }
if b2 { // if b2 {
b3 = true // b3 = true
o.addOrder([]int{k, k}, DIFF_LOW, Extra_type) // o.addOrder([]int{k, k}, DIFF_LOW, Extra_type)
} // }
} // }
} // }
//额外订单补充1CDEG发射器首次合成时生成其对应2及棋子订单完成后生成3及再完成生成4及的 //额外订单补充1CDEG发射器首次合成时生成其对应2及棋子订单完成后生成3及再完成生成4及的
if b1 { if b1 {
ChessColor := mergeDataCfg.GetEmitProduceChessType(OrderEmit) ChessColor := mergeDataCfg.GetEmitProduceChessType(OrderEmit)

View File

@ -12,6 +12,7 @@ import (
"server/game/mod/face" "server/game/mod/face"
"server/game/mod/friend" "server/game/mod/friend"
"server/game/mod/fur" "server/game/mod/fur"
"server/game/mod/item"
limitedTimeEvent "server/game/mod/limited_time_event" limitedTimeEvent "server/game/mod/limited_time_event"
"server/game/mod/mail" "server/game/mod/mail"
"server/game/mod/mining" "server/game/mod/mining"
@ -90,3 +91,7 @@ func (p *Player) GetMiningMod() *mining.MiningMod {
func (p *Player) GetDailyTaskMod() *dailyTask.DailyTaskMod { func (p *Player) GetDailyTaskMod() *dailyTask.DailyTaskMod {
return p.PlayMod.getDailyTaskMod() return p.PlayMod.getDailyTaskMod()
} }
func (p *Player) GetItemMod() *item.ItemMod {
return p.PlayMod.getItemMod()
}

View File

@ -394,6 +394,9 @@ func (p *Player) FriendLogBackData() {
Uid: int64(v.Uid), Uid: int64(v.Uid),
} }
} }
if !FriendMod.CheckFriend(v.Uid) && v.Uid > 10000 {
continue
}
reply = append(reply, &proto.ResFriendReply{ reply = append(reply, &proto.ResFriendReply{
Player: ps, Player: ps,
Type: int32(v.Type), Type: int32(v.Type),
@ -414,6 +417,12 @@ func (p *Player) FriendCardBackData() {
FriendMod := p.PlayMod.getFriendMod() FriendMod := p.PlayMod.getFriendMod()
msgList := make([]*proto.ResFriendCard, 0, len(FriendMod.Card)) msgList := make([]*proto.ResFriendCard, 0, len(FriendMod.Card))
for _, v := range FriendMod.Card { for _, v := range FriendMod.Card {
if !FriendMod.CheckFriend(v.AUid) && v.AUid != int(p.M_DwUin) {
continue
}
if !FriendMod.CheckFriend(v.BUid) && v.BUid != int(p.M_DwUin) {
continue
}
msgList = append(msgList, GetCardInfoMsg(v)) msgList = append(msgList, GetCardInfoMsg(v))
} }
p.PushClientRes(&proto.ResFriendCardMsg{ p.PushClientRes(&proto.ResFriendCardMsg{

View File

@ -561,7 +561,7 @@ func (p *PlayerBaseData) AddExp(player *Player, exp int, pexp int) (int, error)
player.TriggerOrder(BaseMod.Level, order.TRIGGER_TYPE_LV, ChessMod.GetOrderEmit(), player.PlayMod.getBaseMod().GetEnergyMul()) player.TriggerOrder(BaseMod.Level, order.TRIGGER_TYPE_LV, ChessMod.GetOrderEmit(), player.PlayMod.getBaseMod().GetEnergyMul())
player.PushClientRes(OrderMod.BackData()) player.PushClientRes(OrderMod.BackData())
// 重载活动 // 重载活动
player.initAcitivity() player.initActivity()
player.BackDataActivity() player.BackDataActivity()
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV}) player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_UPLV})
player.TeLog("level_up", map[string]interface{}{ player.TeLog("level_up", map[string]interface{}{

View File

@ -248,7 +248,7 @@ func (p *Player) InitPlayer(UserName string) error {
log.Debug("AddFunc failed:", err) log.Debug("AddFunc failed:", err)
} }
p.McronSave.Start() p.McronSave.Start()
p.initAcitivity() p.initActivity()
p.ZeroUpdate(nil) p.ZeroUpdate(nil)
p.NoonUpdate(nil) p.NoonUpdate(nil)
p.Login() p.Login()
@ -307,7 +307,7 @@ func (p *Player) InitPlayerByUid(Uid int) error {
log.Debug("AddFunc failed:", err) log.Debug("AddFunc failed:", err)
} }
p.McronSave.Start() p.McronSave.Start()
p.initAcitivity() p.initActivity()
p.ZeroUpdate(nil) p.ZeroUpdate(nil)
p.NoonUpdate(nil) p.NoonUpdate(nil)
p.Login() p.Login()
@ -384,7 +384,7 @@ func (p *Player) ZeroUpdate(a []interface{}) {
} }
p.PlayroomBackData() p.PlayroomBackData()
p.PlayMod.getChampshipMod().ZeroUpdate() p.PlayMod.getChampshipMod().ZeroUpdate()
p.initAcitivity() p.initActivity()
p.ActivityZeroUpdate() p.ActivityZeroUpdate()
// 每日任务 // 每日任务
@ -907,6 +907,11 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
"fur_coin_cost": fur_cfg.GetFurShopCostNum(v.Id), "fur_coin_cost": fur_cfg.GetFurShopCostNum(v.Id),
"pet_fur_get_type": Label, "pet_fur_get_type": Label,
}) })
case item.ITEM_TYPE_AD_CARD: // 广告卡
ChargeMod := p.PlayMod.getChargeMod()
Effect := itemCfg.GetItemEffect(v.Id)
ChargeMod.AddAdTime(Effect)
BackDataType[item.ITEM_TYPE_AD_CARD] = struct{}{}
default: default:
err := ItemMod.AddItem(v.Id, v.Num) err := ItemMod.AddItem(v.Id, v.Num)
p.TeLog("asset_change", map[string]interface{}{ p.TeLog("asset_change", map[string]interface{}{
@ -949,6 +954,8 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
case item.ITEM_TYPE_PET_FUR: case item.ITEM_TYPE_PET_FUR:
FurMod := p.PlayMod.getFurMod() FurMod := p.PlayMod.getFurMod()
p.PushClientRes(FurMod.BackData()) p.PushClientRes(FurMod.BackData())
case item.ITEM_TYPE_AD_CARD:
p.ChargeBackData()
} }
} }
p.PetItemUseLog(itemList) p.PetItemUseLog(itemList)
@ -1164,7 +1171,7 @@ func (p *Player) TeLog(Type string, Param map[string]interface{}) {
} }
// 初始化活动 // 初始化活动
func (p *Player) initAcitivity() { func (p *Player) initActivity() {
p.activity = make(map[int]*ActivityInfo) p.activity = make(map[int]*ActivityInfo)
ActivityList := activityCfg.GetActivityList() ActivityList := activityCfg.GetActivityList()
Level := p.GetPlayerBaseMod().GetLevel() Level := p.GetPlayerBaseMod().GetLevel()
@ -1186,6 +1193,7 @@ func (p *Player) initAcitivity() {
Title: v.Title, Title: v.Title,
} }
} }
p.ActivityLogin()
} }
func (p *Player) BackDataActivity() { func (p *Player) BackDataActivity() {

View File

@ -206,7 +206,7 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) {
p.ModList.Base.InitData(int(p.Data.DwUin), Ip) p.ModList.Base.InitData(int(p.Data.DwUin), Ip)
p.ModList.SevenLogin.InitData() p.ModList.SevenLogin.InitData()
p.ModList.LimitedTimeEvent.InitData(BaseMod.GetLevel()) p.ModList.LimitedTimeEvent.InitData(BaseMod.GetLevel())
p.ModList.Friend.InitData() p.ModList.Friend.InitData(p.ModList.Base.Uid)
p.ModList.Mail.InitData() p.ModList.Mail.InitData()
p.ModList.Charge.InitData() p.ModList.Charge.InitData()
p.ModList.Endless.InitData() p.ModList.Endless.InitData()

View File

@ -539,7 +539,12 @@ func ReqDecorate(player *Player, buf []byte) error {
"item_list": AddItem, "item_list": AddItem,
}) })
} }
// 跨越场景
if DecorateMod.GetAreaId() != AreaId { // 解锁上报 if DecorateMod.GetAreaId() != AreaId { // 解锁上报
LimitEventMod := player.PlayMod.getLimitedTimeEventMod()
if LimitEventMod.AddSenceDashTimes() {
player.PushClientRes(LimitEventMod.BackData())
}
player.TeLog("plot_unlock", map[string]interface{}{ player.TeLog("plot_unlock", map[string]interface{}{
"plot_id": DecorateMod.GetAreaId(), "plot_id": DecorateMod.GetAreaId(),
}) })
@ -636,6 +641,15 @@ func ReqDecorateAll(player *Player, buf []byte) error {
player.TeLog("scene_reward", v.(map[string]interface{})) player.TeLog("scene_reward", v.(map[string]interface{}))
} }
} }
if DecorateMod.GetAreaId() != AreaId { // 解锁上报
LimitEventMod := player.PlayMod.getLimitedTimeEventMod()
if LimitEventMod.AddSenceDashTimes() {
player.PushClientRes(LimitEventMod.BackData())
}
player.TeLog("plot_unlock", map[string]interface{}{
"plot_id": DecorateMod.GetAreaId(),
})
}
player.PlayMod.save() player.PlayMod.save()
player.PushClientRes(DecorateMod.BackData()) player.PushClientRes(DecorateMod.BackData())
@ -1755,9 +1769,16 @@ func ReqLimitSenceReward(player *Player, buf []byte) error {
return fmt.Errorf("not exist") return fmt.Errorf("not exist")
} }
Id, Items := limitedTimeEventMod.GetSceneDashReward() Id, Items, err := limitedTimeEventMod.GetSceneDashReward()
if err != nil {
player.SendErrClienRes(&msg.ResLimitSenceReward{
Code: msg.RES_CODE_FAIL,
Msg: err.Error(),
})
return err
}
player.args["ResItemPopId"] = Id player.args["ResItemPopId"] = Id
err := player.HandleItem(Items, msg.ITEM_POP_LABEL_LimitSenceReward.String()) err = player.HandleItem(Items, msg.ITEM_POP_LABEL_LimitSenceReward.String())
if err != nil { if err != nil {
player.SendErrClienRes(&msg.ResLimitSenceReward{ player.SendErrClienRes(&msg.ResLimitSenceReward{
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
@ -2739,8 +2760,10 @@ func ReqShippingOrder(player *Player, buf []byte) error {
func ReqChampshipReward(player *Player, buf []byte) error { func ReqChampshipReward(player *Player, buf []byte) error {
ChampshipMod := player.PlayMod.getChampshipMod() ChampshipMod := player.PlayMod.getChampshipMod()
todayActivityId, _ := player.GetChampshipActivityId() todayActivityId, _ := player.GetChampshipActivityId()
DecorateMod := player.PlayMod.getDecorateMod()
orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId())
RewardId := ChampshipMod.Reward RewardId := ChampshipMod.Reward
itemList := ChampshipMod.GetReward(todayActivityId) itemList := ChampshipMod.GetReward(todayActivityId, orderFactor)
err := player.HandleItem(itemList, msg.ITEM_POP_LABEL_ChampshipReward.String()) err := player.HandleItem(itemList, msg.ITEM_POP_LABEL_ChampshipReward.String())
if err != nil { if err != nil {
player.SendErrClienRes(&msg.ResChampshipReward{ player.SendErrClienRes(&msg.ResChampshipReward{
@ -3165,8 +3188,8 @@ func ReqMiningReward(player *Player, buf []byte) error {
return fmt.Errorf("activity not start") return fmt.Errorf("activity not start")
} }
DecorateMod := player.PlayMod.getDecorateMod() DecorateMod := player.PlayMod.getDecorateMod()
needStar := DecorateMod.GetNextNeedStar() orderFactor := orderCfg.GetOrderFactor(DecorateMod.GetAreaId())
itemList, Mining, err := MiningMod.GetReward(needStar) itemList, Mining, err := MiningMod.GetReward(orderFactor)
if err != nil { if err != nil {
player.SendErrClienRes(&msg.ResMiningReward{ player.SendErrClienRes(&msg.ResMiningReward{
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
@ -3417,12 +3440,12 @@ func ReqPlayroomInfo(player *Player, buf []byte) error {
} else { } else {
PlayroomMod.SetGameId(playroom.GAME_TYPE_FILP) PlayroomMod.SetGameId(playroom.GAME_TYPE_FILP)
DecorateMod := player.PlayMod.getDecorateMod() DecorateMod := player.PlayMod.getDecorateMod()
needStar := DecorateMod.GetNextNeedStar() needStar := DecorateMod.GetAreaCost()
highReward := int(float64(needStar) * 0.75) highReward := int(float64(needStar) * 0.75)
if highReward < PlayerData.Star { if highReward < PlayerData.Star {
PlayroomMod.SetGameRewardFlip(max(int(float64(needStar)*0.1), 10), max(int(float64(needStar)*0.3), 10), max(int(float64(needStar)*0.75), 10)) PlayroomMod.SetGameRewardFlip(max(int(float64(needStar)*0.1), 10), max(int(float64(needStar)*0.3), 50), max(int(float64(needStar)*0.75), 100))
} else { } else {
PlayroomMod.SetGameRewardFlip(max(10, int(float64(PlayerData.Star)*0.1)), max(10, int(float64(PlayerData.Star)*0.5)), max(PlayerData.Star, 10)) PlayroomMod.SetGameRewardFlip(max(10, int(float64(PlayerData.Star)*0.1)), max(50, int(float64(PlayerData.Star)*0.5)), max(PlayerData.Star, 100))
} }
} }
player.PlayMod.save() player.PlayMod.save()
@ -4622,7 +4645,7 @@ func ReqActivityReward(player *Player, buf []byte) error {
"Items": Items, "Items": Items,
}) })
player.PlayMod.save() player.PlayMod.save()
player.initAcitivity() player.initActivity()
player.BackDataActivity() player.BackDataActivity()
player.PushClientRes(&msg.ResActivityReward{ player.PushClientRes(&msg.ResActivityReward{
Code: msg.RES_CODE_SUCCESS, Code: msg.RES_CODE_SUCCESS,

View File

@ -1,6 +1,7 @@
package test package test
import ( import (
"fmt"
champshipCfg "server/conf/champship" champshipCfg "server/conf/champship"
"server/game" "server/game"
"testing" "testing"
@ -35,3 +36,14 @@ func TestReqChampshipReward(t *testing.T) {
ChampshipMod.Score = 1000 ChampshipMod.Score = 1000
game.ReqChampshipReward(p1, nil) game.ReqChampshipReward(p1, nil)
} }
func TestChampionshipCreateRobot(t *testing.T) {
RobotNum := 30
i := 5
j := 1
RobotList := game.CreateRobotList(i, RobotNum, j)
for i := 0; i < RobotNum; i++ {
game.FormatRobotInfo(RobotList[i], i+1)
}
fmt.Print("success")
}

View File

@ -15,7 +15,7 @@ func TestGetStarEmitList(t *testing.T) {
OrderMod := p1.GetOrderMod() OrderMod := p1.GetOrderMod()
OrderMod.OrderList = map[int]order.Order{ OrderMod.OrderList = map[int]order.Order{
1: { 1: {
MergeId: []int{25, 25}, MergeId: []int{15, 15},
}, },
} }
p1.InitOrderItem() p1.InitOrderItem()

View File

@ -3,7 +3,9 @@ package test
import ( import (
"fmt" "fmt"
"server/backend" "server/backend"
avatarCfg "server/conf/avatar"
decorateCfg "server/conf/decorate" decorateCfg "server/conf/decorate"
faceCfg "server/conf/face"
languageCfg "server/conf/language" languageCfg "server/conf/language"
notification_cfg "server/conf/notification" notification_cfg "server/conf/notification"
"server/db" "server/db"
@ -256,3 +258,14 @@ func TestMsgFormat(t *testing.T) {
} }
fmt.Printf("Msg: %v\n", m) fmt.Printf("Msg: %v\n", m)
} }
func TestRandFace(t *testing.T) {
face := faceCfg.GetRandInitId()
avatar := avatarCfg.GetRandInitId()
fmt.Printf("Random Face ID: %d, Random Avatar ID: %d\n", face, avatar)
}
func TestChampionShipCreateRobot(t *testing.T) {
robot := game.CreateRobot(1.0, 1)
fmt.Printf("Created Robot: %v\n", robot)
}

View File

@ -46,3 +46,11 @@ func TestReqApplyFriend(t *testing.T) {
game.ReqApplyFriend(p1, buf) game.ReqApplyFriend(p1, buf)
p1.FriendListBackData() p1.FriendListBackData()
} }
func TestFriendBackData(t *testing.T) {
p1 := new(game.Player)
p1.InitPlayerByUid(100001)
p1.M_DwUin = 100100129
p1.FriendLogBackData()
p1.FriendCardBackData()
}

View File

@ -28,3 +28,17 @@ func TestFast(t *testing.T) {
} }
t.Logf("Fast produce items: %v", items) t.Logf("Fast produce items: %v", items)
} }
func TestSenceDash(t *testing.T) {
p := new(game.Player)
p.InitPlayer("3625212")
LimitEventMod := p.GetLimitEventMod()
LimitEventMod.AddEvent(limitedTimeEvent.EVENT_TYPE_SENCE_DASH, 60)
LimitEventMod.AddSenceDashTimes() // 模拟一次场景冲刺
Id, items, err := LimitEventMod.GetSceneDashReward()
if err != nil {
t.Errorf("GetSceneDashReward error: %v", err)
return
}
t.Logf("Scene dash reward: Id=%d, items=%v", Id, items)
}

View File

@ -18,3 +18,9 @@ func TestGetPassReward(t *testing.T) {
} }
player.MiningBackData() player.MiningBackData()
} }
func TestInitActivityItem(t *testing.T) {
player := new(game.Player)
player.GetBaseMod().Level = 15
player.Login()
}

View File

@ -40,3 +40,15 @@ func TestChestRain(t *testing.T) {
f := LimitEventMod.GetMeteorReward([]int{226}, ChessMod.GetStarEmitList()) f := LimitEventMod.GetMeteorReward([]int{226}, ChessMod.GetStarEmitList())
fmt.Printf("chest rain reward:%v", f) fmt.Printf("chest rain reward:%v", f)
} }
func TestInitOrderItem(t *testing.T) {
p1 := new(game.Player)
p1.InitPlayer("3625212")
OrderMod := p1.GetOrderMod()
OrderMod.OrderList = make(map[int]order.Order)
OrderMod.OrderList[1] = order.Order{
MergeId: []int{15, 15},
}
p1.InitOrderItem()
fmt.Printf("order item:%v", OrderMod.OrderList[1].Items)
}

View File

@ -0,0 +1,16 @@
package test
import (
"fmt"
"server/game"
"testing"
)
func TestPlayroomFlipGame(t *testing.T) {
p1 := new(game.Player)
p1.InitPlayerByUid(100001)
DecorateMod := p1.GetDecorateMod()
needStar := DecorateMod.GetAreaCost()
highReward := int(float64(needStar) * 0.75)
fmt.Printf("needStar: %d, highReward: %d\n", needStar, highReward)
}