Merge branch 'sdk' into online
This commit is contained in:
commit
9680c706a4
@ -1,15 +1,5 @@
|
||||
package mergeCluster
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"server/game/mod/msg"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gob.Register(&msg.Msg{})
|
||||
gob.Register(&ClusterJoinData{})
|
||||
}
|
||||
|
||||
type ClusterJoinData struct {
|
||||
ServerId int
|
||||
Country int
|
||||
|
||||
43
src/server/conf/notification/notification_cfg.go
Normal file
43
src/server/conf/notification/notification_cfg.go
Normal file
@ -0,0 +1,43 @@
|
||||
package notification_cfg
|
||||
|
||||
import "server/gamedata"
|
||||
|
||||
const (
|
||||
CFG_NOTIFICATION = "Notification"
|
||||
)
|
||||
|
||||
func init() {
|
||||
gamedata.InitCfg(CFG_NOTIFICATION)
|
||||
}
|
||||
|
||||
func GetFriendApplyNotificationCooldown() int {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NOTIFICATION, 2)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Cooldown")
|
||||
}
|
||||
|
||||
func GetPetroomGameNotificationCooldown() (int, int) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NOTIFICATION, 1)
|
||||
if err != nil {
|
||||
return 0, 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Cooldown"), gamedata.GetIntValue(data, "DailyLimit")
|
||||
}
|
||||
|
||||
func GetPetroomGameNotificationMsg() (string, string) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NOTIFICATION, 1)
|
||||
if err != nil {
|
||||
return "", ""
|
||||
}
|
||||
return gamedata.GetStringValue(data, "TitleKey"), gamedata.GetStringValue(data, "InfoKey")
|
||||
}
|
||||
|
||||
func GetFriendApplyNotificationMsg() (string, string) {
|
||||
data, err := gamedata.GetDataByIntKey(CFG_NOTIFICATION, 2)
|
||||
if err != nil {
|
||||
return "", ""
|
||||
}
|
||||
return gamedata.GetStringValue(data, "TitleKey"), gamedata.GetStringValue(data, "InfoKey")
|
||||
}
|
||||
@ -473,7 +473,7 @@ func G_getGameLogic() *GameLogic {
|
||||
G_GameLogicPtr.RegisterNetWorkFunc() // 注册客户端接口
|
||||
G_GameLogicPtr.InitActivity() // 初始化活动
|
||||
if conf.Server.ServerType == "center" {
|
||||
G_GameLogicPtr.CreateFriendMgr() //创建好友管理器
|
||||
// G_GameLogicPtr.CreateFriendMgr() //创建好友管理器
|
||||
G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器
|
||||
G_GameLogicPtr.CreateVarMgr() // 创建变量管理器
|
||||
}
|
||||
@ -877,9 +877,10 @@ func (ad *GameLogic) GetStartTime() int64 {
|
||||
}
|
||||
|
||||
func NotifyPlayer(Uid int, m *MsgMod.Msg) {
|
||||
m.To = Uid
|
||||
m.HandleType = MsgMod.HANDLE_MOD_PLAYER_MSG
|
||||
NotifyPlayerMsgAsync(m)
|
||||
clone := *m
|
||||
clone.To = Uid
|
||||
clone.HandleType = MsgMod.HANDLE_MOD_PLAYER_MSG
|
||||
NotifyPlayerMsgAsync(&clone)
|
||||
}
|
||||
|
||||
func Destroy() {
|
||||
|
||||
@ -19,23 +19,14 @@ import (
|
||||
// 活动模块 登录
|
||||
func (p *Player) ActivityLogin() {
|
||||
ItemMod := p.PlayMod.getItemMod()
|
||||
// 挖矿
|
||||
ActivityId := p.GetActivityId(activity.ACT_TYPE_MINING)
|
||||
MiningMod := p.PlayMod.getMiningMod()
|
||||
OldId := MiningMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
ItemId := guesscolorCfg.GetActivityItemId(OldId)
|
||||
ItemNum := ItemMod.GetItem(ItemId)
|
||||
if ItemNum != 0 {
|
||||
ItemMod.AddItem(ItemId, -ItemNum)
|
||||
p.SendActivityMail(ItemId, ItemNum, ActivityId, nil)
|
||||
|
||||
// 通用登录处理:检查旧Activity道具并通过邮件退还
|
||||
handleSimpleLogin := func(actType int, loginFn func(int) int) {
|
||||
ActivityId := p.GetActivityId(actType)
|
||||
OldId := loginFn(ActivityId)
|
||||
if OldId == 0 {
|
||||
return
|
||||
}
|
||||
}
|
||||
// 猜颜色
|
||||
ActivityId = p.GetActivityId(activity.ACT_TYPE_GUESS_COLOR)
|
||||
GuessColorMod := p.PlayMod.getGuessColorMod()
|
||||
OldId = GuessColorMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
ItemId := guesscolorCfg.GetActivityItemId(OldId)
|
||||
ItemNum := ItemMod.GetItem(ItemId)
|
||||
if ItemNum != 0 {
|
||||
@ -44,22 +35,16 @@ func (p *Player) ActivityLogin() {
|
||||
}
|
||||
}
|
||||
|
||||
// 挖矿
|
||||
handleSimpleLogin(activity.ACT_TYPE_MINING, p.PlayMod.getMiningMod().Login)
|
||||
// 猜颜色
|
||||
handleSimpleLogin(activity.ACT_TYPE_GUESS_COLOR, p.PlayMod.getGuessColorMod().Login)
|
||||
// 赛跑
|
||||
ActivityId = p.GetActivityId(activity.ACT_TYPE_RACE)
|
||||
RaceMod := p.PlayMod.getRaceMod()
|
||||
OldId = RaceMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
ItemId := guesscolorCfg.GetActivityItemId(OldId)
|
||||
ItemNum := ItemMod.GetItem(ItemId)
|
||||
if ItemNum != 0 {
|
||||
ItemMod.AddItem(ItemId, -ItemNum)
|
||||
p.SendActivityMail(ItemId, ItemNum, ActivityId, nil)
|
||||
}
|
||||
}
|
||||
handleSimpleLogin(activity.ACT_TYPE_RACE, p.PlayMod.getRaceMod().Login)
|
||||
// 猫草大作战
|
||||
ActivityId = p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
CatnipActivityId := p.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
OldId, CatnipUnReward := CatnipMod.Login(ActivityId)
|
||||
OldId, CatnipUnReward := CatnipMod.Login(CatnipActivityId)
|
||||
if OldId != 0 && len(CatnipUnReward) > 0 {
|
||||
// 清空猫草大作战数据无需发邮件
|
||||
MailMod := p.PlayMod.getMailMod()
|
||||
@ -78,16 +63,16 @@ func (p *Player) ActivityLogin() {
|
||||
}
|
||||
|
||||
// 通行证
|
||||
ActivityId = p.GetActivityId(activity.ACT_TYPE_PASS)
|
||||
PassActivityId := p.GetActivityId(activity.ACT_TYPE_PASS)
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
OldId = PassMod.Login(ActivityId)
|
||||
if OldId != 0 {
|
||||
ItemId := passCfg.GetActivityItemId(OldId)
|
||||
PassOldId := PassMod.Login(PassActivityId)
|
||||
if PassOldId != 0 {
|
||||
ItemId := passCfg.GetActivityItemId(PassOldId)
|
||||
ItemNum := PassMod.Num
|
||||
RewardItems, _ := PassMod.GetRewardItems()
|
||||
if ItemNum != 0 {
|
||||
ItemMod.AddItem(ItemId, -ItemNum)
|
||||
p.SendActivityMail(ItemId, ItemNum, ActivityId, RewardItems)
|
||||
p.SendActivityMail(ItemId, ItemNum, PassActivityId, RewardItems)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -104,9 +89,9 @@ func (p *Player) SendActivityMail(ItemId, ItemNum, ActivityId int, RewardItems [
|
||||
mc_zh := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_CN, mail_content_key)
|
||||
mt_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, mail_title_key)
|
||||
mc_en := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_EN, mail_content_key)
|
||||
mt_pt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, activity_title_key)
|
||||
mt_pt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, mail_title_key)
|
||||
mc_pt := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_PTBR, mail_content_key)
|
||||
mt_es := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, activity_title_key)
|
||||
mt_es := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, mail_title_key)
|
||||
mc_es := languageCfg.GetLanguage(msg.LANG_TYPE_LANG_ES_LATAM, mail_content_key)
|
||||
Items := []*item.Item{item.NewItem(ItemId, ItemNum)}
|
||||
Items = append(Items, RewardItems...)
|
||||
@ -127,30 +112,22 @@ func (p *Player) SendActivityMail(ItemId, ItemNum, ActivityId int, RewardItems [
|
||||
// 活动模块 零点更新
|
||||
func (p *Player) ActivityZeroUpdate() {
|
||||
p.ActivityLogin()
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_MINING)
|
||||
if ActivityInfo != nil {
|
||||
MiningMod := p.PlayMod.getMiningMod()
|
||||
MiningMod.ZeroUpdate(ActivityInfo.Id)
|
||||
|
||||
type zeroHandler struct {
|
||||
actType int
|
||||
updateFn func(int)
|
||||
}
|
||||
ActivityInfo = p.GetActivityInfo(activity.ACT_TYPE_GUESS_COLOR)
|
||||
if ActivityInfo != nil {
|
||||
GuessColorMod := p.PlayMod.getGuessColorMod()
|
||||
GuessColorMod.ZeroUpdate(ActivityInfo.Id)
|
||||
handlers := []zeroHandler{
|
||||
{activity.ACT_TYPE_MINING, func(id int) { p.PlayMod.getMiningMod().ZeroUpdate(id) }},
|
||||
{activity.ACT_TYPE_GUESS_COLOR, func(id int) { p.PlayMod.getGuessColorMod().ZeroUpdate(id) }},
|
||||
{activity.ACT_TYPE_RACE, func(id int) { p.PlayMod.getRaceMod().ZeroUpdate(id) }},
|
||||
{activity.ACT_TYPE_PASS, func(id int) { p.PlayMod.getPassMod().ZeroUpdate(id) }},
|
||||
{activity.ACT_TYPE_CATNIP, func(id int) { p.PlayMod.getCatnipMod().ZeroUpdate(id) }},
|
||||
}
|
||||
ActivityInfo = p.GetActivityInfo(activity.ACT_TYPE_RACE)
|
||||
if ActivityInfo != nil {
|
||||
RaceMod := p.PlayMod.getRaceMod()
|
||||
RaceMod.ZeroUpdate(ActivityInfo.Id)
|
||||
for _, h := range handlers {
|
||||
if info := p.GetActivityInfo(h.actType); info != nil {
|
||||
h.updateFn(info.Id)
|
||||
}
|
||||
ActivityInfo = p.GetActivityInfo(activity.ACT_TYPE_PASS)
|
||||
if ActivityInfo != nil {
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
PassMod.ZeroUpdate(ActivityInfo.Id)
|
||||
}
|
||||
ActivityInfo = p.GetActivityInfo(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityInfo != nil {
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMod.ZeroUpdate(ActivityInfo.Id)
|
||||
}
|
||||
}
|
||||
|
||||
@ -320,12 +297,18 @@ func (p *Player) ActPassBackData() {
|
||||
// 获取活动道具
|
||||
func (p *Player) GetActivityItem(ActType []int) []*item.Item {
|
||||
Items := make([]*item.Item, 0)
|
||||
Now := GoUtil.Now()
|
||||
for _, v := range ActType {
|
||||
Status := p.GetActivityStatus(v)
|
||||
ActivityInfo := p.GetActivityInfo(v)
|
||||
if ActivityInfo == nil {
|
||||
continue
|
||||
}
|
||||
Status := ACT_STATUS_START
|
||||
if Now < ActivityInfo.StartT {
|
||||
Status = ACT_STATUS_NOT_START
|
||||
} else if Now > ActivityInfo.EndT {
|
||||
Status = ACT_STATUS_END
|
||||
}
|
||||
if Status != ACT_STATUS_START {
|
||||
continue
|
||||
}
|
||||
@ -351,7 +334,7 @@ func (p *Player) GetActivityItem(ActType []int) []*item.Item {
|
||||
|
||||
// 猫草大作战活动数据返回
|
||||
func (p *Player) CatnipBackData() {
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_PASS)
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_CATNIP)
|
||||
if ActivityInfo == nil {
|
||||
return
|
||||
}
|
||||
|
||||
@ -110,6 +110,7 @@ func (c *ChampshipMgr) NotifyAll() (interface{}, error) {
|
||||
NotifyAllPlayerMsg(&msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
HandleType: msg.HANDLE_MOD_PLAYER_MSG,
|
||||
End: GoUtil.Now() + onehour,
|
||||
})
|
||||
return nil, nil
|
||||
}
|
||||
@ -234,11 +235,12 @@ func (c *ChampshipMgr) ai() (interface{}, error) {
|
||||
}
|
||||
ChampshipData.Rank[k] = v
|
||||
}
|
||||
|
||||
now := GoUtil.Now()
|
||||
// 在锁外通知玩家,避免在持锁时启动 goroutine 访问可能被并发修改的数据
|
||||
for uid := range uids {
|
||||
go NotifyPlayer(uid, &msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
End: now + onehour,
|
||||
})
|
||||
}
|
||||
|
||||
@ -461,6 +463,7 @@ func (c *ChampshipMgr) group() (interface{}, error) {
|
||||
for _, uid := range notifyList {
|
||||
go NotifyPlayer(uid, &msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
End: GoUtil.Now() + onehour,
|
||||
})
|
||||
}
|
||||
return nil, nil
|
||||
@ -552,6 +555,7 @@ func (c *ChampshipMgr) inRank(m *msg.Msg) (interface{}, error) {
|
||||
for _, uid := range notifyList {
|
||||
go NotifyPlayer(uid, &msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY,
|
||||
End: GoUtil.Now() + onehour,
|
||||
})
|
||||
}
|
||||
return nil, nil
|
||||
|
||||
@ -85,22 +85,20 @@ func (p *Player) ActivityFire(ChargeId int) {
|
||||
}
|
||||
|
||||
func (p *Player) PassFire(ChargeId int) {
|
||||
ActivityStatus := p.GetActivityStatus(activity.ACT_TYPE_PASS)
|
||||
if ActivityStatus != ACT_STATUS_START {
|
||||
return
|
||||
}
|
||||
ActivityInfo := p.GetActivityInfo(activity.ACT_TYPE_PASS)
|
||||
if ActivityInfo == nil {
|
||||
return
|
||||
}
|
||||
LowChargeId := passCfg.GetLowChargeId(ActivityInfo.Id)
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
Items := []*item.Item{}
|
||||
if ChargeId == LowChargeId {
|
||||
Items = PassMod.GetLowChargeItems()
|
||||
Now := GoUtil.Now()
|
||||
if Now < ActivityInfo.StartT || Now > ActivityInfo.EndT {
|
||||
return
|
||||
}
|
||||
HighChargeId := passCfg.GetHighChargeId(ActivityInfo.Id)
|
||||
if ChargeId == HighChargeId {
|
||||
PassMod := p.PlayMod.getPassMod()
|
||||
var Items []*item.Item
|
||||
switch ChargeId {
|
||||
case passCfg.GetLowChargeId(ActivityInfo.Id):
|
||||
Items = PassMod.GetLowChargeItems()
|
||||
case passCfg.GetHighChargeId(ActivityInfo.Id):
|
||||
Items = PassMod.GetHighChargeItems()
|
||||
}
|
||||
if len(Items) == 0 {
|
||||
@ -122,7 +120,7 @@ func (p *Player) PlayroomFire(ChargeId int) {
|
||||
}
|
||||
err := p.HandleItem(Item, proto.ITEM_POP_LABEL_Playroom.String())
|
||||
if err != nil {
|
||||
log.Debug("ChargeFire err : %s", err)
|
||||
log.Debug("PlayroomFire err : %s", err)
|
||||
}
|
||||
p.TeLog("get_assist_battery", map[string]interface{}{
|
||||
"assist_battery _type": "charge",
|
||||
@ -138,7 +136,7 @@ func (p *Player) PiggyBankFire(ChargeId int) {
|
||||
}
|
||||
err := p.HandleItem(Item, proto.ITEM_POP_LABEL_PiggyBank.String())
|
||||
if err != nil {
|
||||
log.Debug("ChargeFire err : %s", err)
|
||||
log.Debug("PiggyBankFire err : %s", err)
|
||||
}
|
||||
p.LimitedTimePiggyBankTrigger()
|
||||
p.TeLog("piggy_bank_open", map[string]interface{}{
|
||||
@ -171,7 +169,7 @@ func (p *Player) ChargeItem(ChargeId int) []*item.Item {
|
||||
return Item
|
||||
}
|
||||
|
||||
// 处理玩家充值
|
||||
// 处理无尽礼包充值
|
||||
func (p *Player) EndlessFire(ChargeId int) {
|
||||
EndlessMod := p.PlayMod.getEndlessMod()
|
||||
Item := EndlessMod.Fire(ChargeId)
|
||||
@ -180,7 +178,7 @@ func (p *Player) EndlessFire(ChargeId int) {
|
||||
}
|
||||
err := p.HandleItem(Item, proto.ITEM_POP_LABEL_Endless.String())
|
||||
if err != nil {
|
||||
log.Debug("ChargeFire err : %s", err)
|
||||
log.Debug("EndlessFire err : %s", err)
|
||||
}
|
||||
p.PlayMod.save()
|
||||
p.PushClientRes(EndlessMod.BackData())
|
||||
@ -230,7 +228,7 @@ func (p *Player) GoogleVerify(OrderSn, ProduceId, Token string) (*db.SqlChargeOr
|
||||
outputStr := string(output)
|
||||
|
||||
// 替换单引号为双引号
|
||||
outputStr = strings.Replace(outputStr, "'", "\"", -1)
|
||||
outputStr = strings.ReplaceAll(outputStr, "'", "\"")
|
||||
type VerifyData struct {
|
||||
PurchaseState int `json:"purchaseState"`
|
||||
DeveloperPayload string `json:"developerPayload"`
|
||||
@ -268,9 +266,5 @@ func (p *Player) CancelOrder(OrderSn string) error {
|
||||
return fmt.Errorf("订单已支付")
|
||||
}
|
||||
Order.PayStatus = MergeConst.ORDER_STATUS_CANCEL
|
||||
err = db.UpdatePlayerChargeData(Order)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return db.UpdatePlayerChargeData(Order)
|
||||
}
|
||||
|
||||
@ -13,16 +13,20 @@ const (
|
||||
CHESS_MODULE = "chess"
|
||||
)
|
||||
|
||||
const (
|
||||
onehour = 3600
|
||||
oneday = 24 * onehour
|
||||
sevendays = 7 * oneday
|
||||
)
|
||||
|
||||
// 解析参数
|
||||
func ParseArgs(args []interface{}) (gate.Agent, *Player, []byte) {
|
||||
a := args[0].(gate.Agent)
|
||||
p, _ := internal.Agents.Load(a)
|
||||
player := p.(*Player)
|
||||
buf := args[1].([]byte)
|
||||
return a, player, buf
|
||||
return a, p.(*Player), args[1].([]byte)
|
||||
}
|
||||
|
||||
// 解析参数
|
||||
// 解析管理员参数
|
||||
func ParseAdminArgs(args []interface{}) (gate.Agent, []byte) {
|
||||
a := args[0].(gate.Agent)
|
||||
buf := args[1].([]byte)
|
||||
@ -41,22 +45,22 @@ func GetStructName(v interface{}) string {
|
||||
return ""
|
||||
}
|
||||
|
||||
// 判断两个切片的元素是否一致
|
||||
// 判断两个切片的元素是否一致(忽略顺序)
|
||||
func SlicesEqual(a, b []int) bool {
|
||||
if len(a) != len(b) {
|
||||
return false
|
||||
}
|
||||
|
||||
// 创建副本以避免修改原始切片
|
||||
aCopy := make([]int, len(a))
|
||||
bCopy := make([]int, len(b))
|
||||
copy(aCopy, a)
|
||||
copy(bCopy, b)
|
||||
|
||||
// 对切片进行排序
|
||||
sort.Ints(aCopy)
|
||||
sort.Ints(bCopy)
|
||||
|
||||
// 比较排序后的切片
|
||||
return reflect.DeepEqual(aCopy, bCopy)
|
||||
for i := range aCopy {
|
||||
if aCopy[i] != bCopy[i] {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
@ -35,6 +35,7 @@ func RegisterHandlerRPC(param []interface{}) {
|
||||
}
|
||||
|
||||
func init() {
|
||||
register()
|
||||
db.InitDB()
|
||||
db.InitRedis()
|
||||
// db.TestGetAllKey()
|
||||
@ -208,8 +209,10 @@ func HandleClientReq(args []interface{}) {
|
||||
backup := p.(*Player).BackUp() // 备份当前的 Player 值
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
if m.GetFunc() != "ReqGmCommand" { // 如果不是 GM 命令,才记录日志和发送飞书告警
|
||||
log.Error("uid : %d, func : %s, fatal : %s", p.(*Player).M_DwUin, m.GetFunc(), r)
|
||||
GoUtil.SendFeishuFatal(int(p.(*Player).M_DwUin), m.GetFunc(), fmt.Sprintf("fatal : %s", r))
|
||||
}
|
||||
p.(*Player).Recover(backup) //还原Player的数据
|
||||
}
|
||||
p.(*Player).lock.Unlock() //解锁
|
||||
|
||||
@ -44,19 +44,19 @@ func (p *Player) GetVisitorPlayer() int {
|
||||
}
|
||||
if len(PlayerList) != 0 {
|
||||
sort.Slice(PlayerList, func(i, j int) bool {
|
||||
return PlayerList[i].Time < PlayerList[j].Time
|
||||
return PlayerList[i].Time > PlayerList[j].Time
|
||||
})
|
||||
return PlayerList[0].Uid
|
||||
}
|
||||
if len(PlayerList2) != 0 {
|
||||
sort.Slice(PlayerList2, func(i, j int) bool {
|
||||
return PlayerList2[i].Time < PlayerList2[j].Time
|
||||
return PlayerList2[i].Time > PlayerList2[j].Time
|
||||
})
|
||||
return PlayerList2[0].Uid
|
||||
}
|
||||
// 若不存在符合条件的用户,则选择24小时内登入过游戏且上次登入时间与当前时间最近的好友
|
||||
var recentFriendUid int
|
||||
var recentLoginTime int64 = 0
|
||||
var recentLoginTime int64
|
||||
for uid := range FriendMod.GetFriendList() {
|
||||
if uid == int(p.M_DwUin) {
|
||||
continue
|
||||
@ -83,13 +83,12 @@ func (p *Player) GetVisitorPlayer() int {
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
PlayerList4 := make([]int, 0)
|
||||
var PlayerList4 []int
|
||||
for _, Uid := range uids {
|
||||
if Uid == int(p.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||
if PlayerSimpleData == nil {
|
||||
if G_GameLogicPtr.GetSimplePlayerByUid(Uid) == nil {
|
||||
continue
|
||||
}
|
||||
PlayerList4 = append(PlayerList4, Uid)
|
||||
@ -172,10 +171,7 @@ func GetRecommendPlayer(p *Player, Num int) []int {
|
||||
diffLimit := 10
|
||||
filtered := make([]int, 0, len(baseList))
|
||||
breakNum := 100
|
||||
for {
|
||||
if breakNum <= 0 {
|
||||
break
|
||||
}
|
||||
for breakNum > 0 {
|
||||
breakNum--
|
||||
filtered = filtered[:0]
|
||||
for _, ps := range baseList {
|
||||
@ -190,7 +186,7 @@ func GetRecommendPlayer(p *Player, Num int) []int {
|
||||
filtered = append(filtered, ps.Uid)
|
||||
}
|
||||
}
|
||||
if len(filtered) >= 5 || len(baseList) == 0 {
|
||||
if len(filtered) >= 5 {
|
||||
break
|
||||
}
|
||||
diffLimit++
|
||||
|
||||
@ -1,13 +1,9 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
mergeCluster "server/cluster"
|
||||
"server/conf"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/friend"
|
||||
"server/game/mod/item"
|
||||
"server/game/mod/msg"
|
||||
GoUtil "server/game_util"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
@ -24,10 +20,6 @@ type FirendData struct {
|
||||
}
|
||||
|
||||
func (f *FriendMgr) Init() {
|
||||
gob.Register(card.CardInfo{})
|
||||
gob.Register(item.Item{})
|
||||
gob.Register([]*item.Item{}) // 注册 []*item.Item 类型
|
||||
gob.Register(friend.ReplyInfo{})
|
||||
f.key = FRIEND_MGR_KEY
|
||||
f.data = &FirendData{
|
||||
List: make(map[int][]*msg.Msg),
|
||||
@ -98,7 +90,7 @@ func (f *FriendMgr) ZeroUpdate(m *msg.Msg) (interface{}, error) {
|
||||
Now := GoUtil.Now()
|
||||
for k, v := range f.getData().List {
|
||||
for j, msg := range v {
|
||||
if msg.End < Now-7*24*3600 {
|
||||
if msg.End < Now-sevendays {
|
||||
f.getData().List[k] = append(f.getData().List[k][:j], f.getData().List[k][j+1:]...)
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,6 +2,8 @@ package game
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
mergeCluster "server/cluster"
|
||||
"server/game/mod/activity"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/friend"
|
||||
"server/game/mod/item"
|
||||
@ -35,6 +37,8 @@ type PlayerSimpleData struct {
|
||||
CardInfo []int
|
||||
ActLog *friend.ActLogInfo
|
||||
Physiology map[int]int
|
||||
Lang int
|
||||
Account string
|
||||
}
|
||||
|
||||
type VarGoldCard struct {
|
||||
@ -113,9 +117,15 @@ type CatnipLock struct {
|
||||
End int
|
||||
}
|
||||
|
||||
func init() {
|
||||
func register() {
|
||||
gob.Register(card.CardInfo{})
|
||||
gob.Register(item.Item{})
|
||||
gob.Register(friend.ReplyInfo{})
|
||||
gob.Register(&msg.Msg{})
|
||||
gob.Register(&mergeCluster.ClusterJoinData{})
|
||||
gob.Register(&limitedTimeEvent.MoneyCat{})
|
||||
gob.Register(&limitedTimeEvent.LuckyCat{})
|
||||
gob.Register(&limitedTimeEvent.PaybackDay{})
|
||||
gob.Register(&msg.HandbookMsg{})
|
||||
gob.Register(&limitedTimeEvent.CatTrick{})
|
||||
gob.Register(&limitedTimeEvent.PaybackDay{})
|
||||
@ -133,4 +143,11 @@ func init() {
|
||||
gob.Register([]*item.Item{}) // 注册 []*item.Item 类型
|
||||
gob.Register(friend.ReplyInfo{})
|
||||
gob.Register(GameResult{})
|
||||
gob.Register(map[string]interface{}{})
|
||||
gob.Register(&MessageData{})
|
||||
gob.Register(&MessageList{})
|
||||
gob.Register(&activity.Gift{})
|
||||
gob.Register(&VarGoldCard{})
|
||||
gob.Register(&VarExpireData{})
|
||||
gob.Register(msg.VarData{})
|
||||
}
|
||||
|
||||
@ -11,7 +11,9 @@ import (
|
||||
chargeCfg "server/conf/charge"
|
||||
emojiCfg "server/conf/emoji"
|
||||
faceCfg "server/conf/face"
|
||||
languageCfg "server/conf/language"
|
||||
mergeDataCfg "server/conf/merge_data"
|
||||
notification_cfg "server/conf/notification"
|
||||
playroomCfg "server/conf/playroom"
|
||||
"server/db"
|
||||
"server/game/mod/activity"
|
||||
@ -599,22 +601,27 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
player.PushClientRes(LimitedTimeEventMod.BackData())
|
||||
case "resetTriggerMail":
|
||||
player.PlayMod.mod_list.Mail.TriggerMail = make([]int, 0, 8)
|
||||
case "debugMsg":
|
||||
to, _ := strconv.Atoi(arg[1])
|
||||
num, _ := strconv.Atoi(arg[1])
|
||||
for i := 0; i < num; i++ {
|
||||
uid := 100100000 + i
|
||||
if uid == int(player.M_DwUin) {
|
||||
continue
|
||||
}
|
||||
SendMsgToCenterAsync(&MsgMod.Msg{
|
||||
From: uid,
|
||||
To: to,
|
||||
Type: MsgMod.HANDLE_TYPE_APPLY,
|
||||
SendT: GoUtil.Now(),
|
||||
HandleType: MsgMod.HANDLE_MOD_PLAYER_MSG,
|
||||
})
|
||||
case "notification":
|
||||
Id, _ := strconv.Atoi(arg[1])
|
||||
NotifyFriendApply(Id, int(player.M_DwUin))
|
||||
NotifyPetroomGame(Id)
|
||||
case "notificationTest":
|
||||
Id, _ := strconv.Atoi(arg[1])
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Id)
|
||||
if PlayerSimpleData == nil {
|
||||
return nil
|
||||
}
|
||||
titlekey, infokey := notification_cfg.GetFriendApplyNotificationMsg()
|
||||
title := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey)
|
||||
info := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey)
|
||||
BaseMod := player.PlayMod.getBaseMod()
|
||||
GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), 1, title, fmt.Sprintf(info, BaseMod.NickName))
|
||||
|
||||
titlekey, infokey = notification_cfg.GetPetroomGameNotificationMsg()
|
||||
title = languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey)
|
||||
info = languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey)
|
||||
GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_PETROOM_GAME, fmt.Sprintf(title, PlayerSimpleData.PetName), fmt.Sprintf(info, PlayerSimpleData.PetName))
|
||||
|
||||
default:
|
||||
return fmt.Errorf("Player %d ReqGmCommand:%v not found", player.M_DwUin, arg)
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import (
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/item"
|
||||
limitedTimeEvent "server/game/mod/limited_time_event"
|
||||
MsgMod "server/game/mod/msg" // Ensure this package exists and is correctly referenced
|
||||
MsgMod "server/game/mod/msg"
|
||||
"server/game/mod/playroom"
|
||||
GoUtil "server/game_util"
|
||||
"server/msg"
|
||||
@ -20,7 +20,11 @@ func (p *Player) LimitedTimeEventTrigger(AddEventId int) {
|
||||
Lv := p.GetPlayerBaseMod().GetLevel()
|
||||
EndTime, TimeoutEvent, AddEvent := p.PlayMod.getLimitedTimeEventMod().Trigger(Lv)
|
||||
remainingTime := GoUtil.NextHourRemain()
|
||||
EndTime = GoUtil.IfTrue(EndTime > 0, min(EndTime, int(remainingTime)), int(remainingTime)).(int)
|
||||
if EndTime <= 0 {
|
||||
EndTime = int(remainingTime)
|
||||
} else {
|
||||
EndTime = min(EndTime, int(remainingTime))
|
||||
}
|
||||
if AddEventId != 0 {
|
||||
AddEvent = append(AddEvent, AddEventId)
|
||||
}
|
||||
@ -42,16 +46,14 @@ func (p *Player) LimitedTimeEventTrigger(AddEventId int) {
|
||||
case limitedTimeEvent.EVENT_TYPE_HIGH_ROLLER:
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
EnergyMul := BaseMod.GetEnergyMul()
|
||||
NewEnergyMul := p.PlayMod.getBaseMod().GetEnergyMul()
|
||||
OrderMod := p.PlayMod.getOrderMod()
|
||||
Lv := p.GetPlayerBaseMod().GetLevel()
|
||||
Emit := p.PlayMod.getChessMod().GetOrderEmit()
|
||||
ChessList := p.PlayMod.getChessMod().GetUnlockChessList()
|
||||
OrderMod.ChangeEnergyMul(Lv, Emit, NewEnergyMul, ChessList)
|
||||
OrderMod.ChangeEnergyMul(Lv, Emit, EnergyMul, ChessList)
|
||||
p.PushClientRes(OrderMod.BackData())
|
||||
p.TeLog("mutil_merge_change", map[string]interface{}{
|
||||
"change_from": math.Pow(2, float64(EnergyMul)),
|
||||
"change_to": math.Pow(2, float64(NewEnergyMul)),
|
||||
"change_to": math.Pow(2, float64(EnergyMul)),
|
||||
"is_auto": true,
|
||||
})
|
||||
p.PushClientRes(p.PlayMod.getBaseMod().BackData())
|
||||
@ -110,18 +112,18 @@ func (p *Player) LimitedTimeCardTrigger() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
CardMod := p.PlayMod.getCardMod()
|
||||
Now := GoUtil.Now()
|
||||
EndTime := int64(0)
|
||||
var EndTime int64
|
||||
for k, v := range FriendMod.Card {
|
||||
if v.EndTime > 0 && v.EndTime <= Now {
|
||||
if v.Status == card.STATUS_CARD_EX_1 {
|
||||
switch v.Status {
|
||||
case card.STATUS_CARD_EX_1:
|
||||
delete(FriendMod.Card, k)
|
||||
FriendMgrSend(&MsgMod.Msg{
|
||||
From: v.BUid,
|
||||
To: v.AUid,
|
||||
Type: MsgMod.HANDLE_TYPE_EX_CARD_SELECT_TIMEOUT,
|
||||
})
|
||||
}
|
||||
if v.Status == card.STATUS_CARD_EX_2 {
|
||||
case card.STATUS_CARD_EX_2:
|
||||
delete(FriendMod.Card, k)
|
||||
FriendMgrSend(&MsgMod.Msg{
|
||||
From: v.AUid,
|
||||
@ -133,8 +135,11 @@ func (p *Player) LimitedTimeCardTrigger() {
|
||||
p.PushClientRes(CardMod.NotifyTimes())
|
||||
p.PushClientRes(CardMod.NotifyCard())
|
||||
}
|
||||
continue
|
||||
}
|
||||
if v.EndTime > 0 && (EndTime == 0 || v.EndTime < EndTime) {
|
||||
EndTime = v.EndTime
|
||||
}
|
||||
EndTime = min(EndTime, v.EndTime)
|
||||
}
|
||||
if EndTime > 0 {
|
||||
p.CallEvent(time.Duration(EndTime-Now)*time.Second, func() {
|
||||
@ -170,7 +175,6 @@ func (p *Player) LimitedTimePlayroomTrigger_(Id int) {
|
||||
if Id == playroom.PHYSIOLOGY_TYPE_TOLIET && Num == 0 && CleanMood.Num > 50 {
|
||||
CleanMood.Num = 50
|
||||
}
|
||||
// log.Debug("PlayroomTrigger Id:%d, Time:%d, Num:%d, NewTime:%d, NextSecond:%d, MType:%d, MEffect:%d, Num :%d", Id, Physiology.Time, Physiology.Num, NewTime, NextSecond, MType, MEffect, Num)
|
||||
Physiology.Num = Num
|
||||
if PlayroomMod.GetMoodInfo(MType).Num == 0 { // 心情值为0时,重置生理状态
|
||||
PlayroomMod.ResetPhysiology(MType)
|
||||
@ -199,10 +203,7 @@ func PlayroomTrigger(Id int, Time int64, Num int) (int64, int64, int) {
|
||||
return Time, int64(NeedDuration), Num
|
||||
}
|
||||
n := 0
|
||||
for {
|
||||
if n > 100 {
|
||||
return 0, 0, 0
|
||||
}
|
||||
for n <= 100 {
|
||||
Num--
|
||||
NeedDuration := playroomCfg.GetPhysiologyDuration(Id, Num)
|
||||
Time += int64(NeedDuration)
|
||||
@ -214,6 +215,7 @@ func PlayroomTrigger(Id int, Time int64, Num int) (int64, int64, int) {
|
||||
}
|
||||
n++
|
||||
}
|
||||
return 0, 0, 0
|
||||
}
|
||||
|
||||
func LimitedTimePlayroomWorkTrigger(p *Player) {
|
||||
@ -227,7 +229,7 @@ func LimitedTimePlayroomWorkTrigger(p *Player) {
|
||||
p.SendClientRes()
|
||||
return
|
||||
}
|
||||
NextSecond := EndTime - GoUtil.Now()
|
||||
NextSecond := EndTime - Now
|
||||
if NextSecond > 0 {
|
||||
p.CallEvent(time.Duration(NextSecond)*time.Second, func() {
|
||||
p.lock.Lock()
|
||||
|
||||
@ -53,7 +53,7 @@ func (p *Player) HandleMsg(m *msg.Msg) {
|
||||
p.ProcessTrigger()
|
||||
p.SendClientRes()
|
||||
} else {
|
||||
p.Msg = make([]PlayerMsg, 0)
|
||||
p.Msg = nil
|
||||
}
|
||||
}
|
||||
|
||||
@ -134,7 +134,7 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
p.NoonUpdate(nil)
|
||||
case msg.HANDLE_TYPE_INVITE_ADD_FRIEND: // 邀请添加好友
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
if m.From == 0 && m.From == int(p.M_DwUin) {
|
||||
if m.From == 0 || m.From == int(p.M_DwUin) {
|
||||
return nil
|
||||
}
|
||||
FriendMod.AddFriend(m.From)
|
||||
@ -205,11 +205,9 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
}
|
||||
for k, v := range OtherUid { // 通知好友请求已结束
|
||||
v.Status = card.STATUS_CARD_GIVE_3
|
||||
msg := &msg.Msg{Type: msg.HANDLE_TYPE_REG_CARD_FINISH, From: k, Extra: &v}
|
||||
FriendMgrSend(msg)
|
||||
FriendMgrSend(&msg.Msg{Type: msg.HANDLE_TYPE_REG_CARD_FINISH, From: k, Extra: &v})
|
||||
CardMod.DelRequestCard(k)
|
||||
}
|
||||
// p.AddLog(int(p.M_DwUin), friend.LOG_TYPE_CARD_ACCEPT_GIVE, fmt.Sprintf("%d", CardInfo.CardId))
|
||||
p.PlayMod.save()
|
||||
p.PushClientRes(
|
||||
&proto.NotifyFriendCard{
|
||||
@ -249,7 +247,6 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
return nil
|
||||
}
|
||||
FriendMod.SetCardInfo(&CardInfo)
|
||||
// p.AddLog(int(p.M_DwUin), friend.LOG_TYPE_CARD_SELECT_GET, fmt.Sprintf("%d", CardInfo.CardId))
|
||||
p.PlayMod.save()
|
||||
p.PushClientRes(
|
||||
&proto.NotifyFriendCard{
|
||||
@ -300,8 +297,8 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
case msg.HANDLE_TYPE_CHAMPSHIP_RESULT: // # 好友锦标赛结果
|
||||
Extra := GoUtil.IntSlice(m.Extra)
|
||||
p.AddLog(m.From, friend.LOG_TYPE_PLAYROOM_CHAMPSHIP, fmt.Sprintf("%d_%d", Extra[0], Extra[1]), m.SendT)
|
||||
case msg.HANDLE_TYPE_TREASURE_RESULT: // # 好友宝藏结果
|
||||
//p.AddLog(m.From, friend.LOG_TYPE_TREASURE, fmt.Sprintf("%d", m.Extra.(int)), m.SendT)
|
||||
case msg.HANDLE_TYPE_TREASURE_RESULT: // 好友宝藏结果
|
||||
// 暂未处理
|
||||
case msg.HANDLE_TYPE_MAIL: // 邮件操作
|
||||
SyncMailMsg(p)
|
||||
case msg.HANDLE_TYPE_PLAYROOM_LOSE: // # 玩家输了
|
||||
@ -328,7 +325,7 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
PlayroomMod.AddMood(playroom.MOOD_TYPE_CLEAN, -50)
|
||||
PlayroomMod.AddVisitor(m.From, m.SendT)
|
||||
|
||||
if len(Items) > 0 && Items[0].Id == item.ITEM_STAR_ID {
|
||||
if Items[0].Id == item.ITEM_STAR_ID {
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
StarNum := BaseMod.GetStar()
|
||||
Items[0].Num = min(Items[0].Num, StarNum)
|
||||
@ -359,7 +356,7 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
p.AddLog(m.From, friend.LOG_TYPE_TREASURE_HELP, "", m.SendT)
|
||||
p.HandleItem(Items, proto.ITEM_POP_LABEL_Friendtreasure.String())
|
||||
case msg.HANDLE_TYPE_HANDBOOK_COLLECTION: // 图鉴收集奖励
|
||||
if m.Extra != nil {
|
||||
if m.Extra == nil {
|
||||
return nil
|
||||
}
|
||||
data, ok := m.Extra.(msg.HandbookMsg)
|
||||
@ -517,7 +514,7 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
case msg.HANDLE_TYPE_FRIEND_GREETING_REPLY:
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
if v, ok := m.Extra.(friend.ReplyInfo); ok {
|
||||
FriendMod.AddReplyInfo(v.Uid, v.Type, v.Param, GoUtil.Now()+24*3600, nil)
|
||||
FriendMod.AddReplyInfo(v.Uid, v.Type, v.Param, GoUtil.Now()+oneday, nil)
|
||||
p.FriendLogBackData()
|
||||
}
|
||||
case msg.HANDLE_TYPE_FRIEND_SPONSOER:
|
||||
@ -527,7 +524,6 @@ func (p *Player) handle(m *msg.Msg) error {
|
||||
default:
|
||||
log.Debug("uid : %d, handle msg type : %d not exist", p.M_DwUin, m.Type)
|
||||
}
|
||||
// #region 以下是处理系统请求
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -623,7 +619,7 @@ func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard {
|
||||
func (p *Player) EmitRetireTrigger1() {
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
EmitList := ChessMod.GetEmitList()
|
||||
EmitId := make(map[string]struct{}, 0)
|
||||
EmitId := make(map[string]struct{})
|
||||
for _, v := range EmitList {
|
||||
Emit_Id := mergeDataCfg.GetEmitId(v)
|
||||
if Emit_Id == "" {
|
||||
@ -631,7 +627,7 @@ func (p *Player) EmitRetireTrigger1() {
|
||||
}
|
||||
EmitId[Emit_Id] = struct{}{}
|
||||
}
|
||||
EmitId1 := make([]string, 0)
|
||||
var EmitId1 []string
|
||||
for k := range EmitId {
|
||||
EmitId1 = append(EmitId1, k)
|
||||
}
|
||||
@ -655,7 +651,7 @@ func (p *Player) EmitRetireTrigger2() {
|
||||
OrderMod := p.PlayMod.getOrderMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
OrderList := OrderMod.GetOrderList()
|
||||
AllChess := make(map[string]struct{}, 0)
|
||||
AllChess := make(map[string]struct{})
|
||||
for _, v := range OrderList {
|
||||
for _, v1 := range v.MergeId {
|
||||
Color := mergeDataCfg.GetColorById(v1)
|
||||
@ -720,13 +716,19 @@ func NotifyChampshipResult(Uid, Rank int) {
|
||||
if PlayerSimpleData == nil {
|
||||
return
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
serveropenday := GoUtil.GetServerOpenDay()
|
||||
for _, v := range PlayerSimpleData.Friend {
|
||||
if CheckPlayerLose(v) {
|
||||
continue
|
||||
}
|
||||
SendPlayerMsgAsync(&msg.Msg{
|
||||
Type: msg.HANDLE_TYPE_CHAMPSHIP_RESULT,
|
||||
From: Uid,
|
||||
To: v,
|
||||
SendT: GoUtil.Now(),
|
||||
Extra: []int{Rank, GoUtil.GetServerOpenDay()},
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
Extra: []int{Rank, serveropenday},
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -958,7 +960,7 @@ func (player *Player) CreatePetOrder() {
|
||||
if v.Type != order.Pet_type {
|
||||
continue
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
var Items []*item.Item
|
||||
Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList())
|
||||
// Star = int(float64(Star)*float64(OrderFactor)/1000) * 10
|
||||
Items = player.GetPetOrderReward(Star, Items)
|
||||
@ -995,10 +997,9 @@ func (player *Player) CreateNormalOrder() {
|
||||
if v.Type != order.COMFORT_TYPE {
|
||||
continue
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
Star := order.GetOrderStar(v.MergeId, ChessMod.GetOrderEmit())
|
||||
Star = int(float64(Star)*float64(OrderFactor)/1000) * 10
|
||||
v.Items = append(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
|
||||
}
|
||||
}
|
||||
@ -1021,7 +1022,7 @@ func (player *Player) CreateNormalOrder() {
|
||||
if v.Type != order.Pet_type {
|
||||
continue
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
var Items []*item.Item
|
||||
Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList())
|
||||
// Star = int(float64(Star)*float64(OrderFactor)/1000) * 10
|
||||
Items = player.GetPetOrderReward(Star, Items)
|
||||
@ -1076,10 +1077,9 @@ func (player *Player) InitOrderItem() {
|
||||
if len(v.Items) != 0 {
|
||||
continue
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
Star := order.GetOrderStar(v.MergeId, ChessMod.GetStarEmitList())
|
||||
Star = int(float64(Star)*float64(OrderFactor)/1000+0.5) * 10
|
||||
v.Items = append(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
|
||||
}
|
||||
}
|
||||
@ -1129,7 +1129,7 @@ func (p *Player) GetPlayroomGameReward(Type, SelectId int) []*item.Item {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
Level := BaseMod.GetLevel()
|
||||
Items := make([]*item.Item, 0)
|
||||
var Items []*item.Item
|
||||
switch Type {
|
||||
case playroom.GAME_RESULT_LOSE:
|
||||
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, 20))
|
||||
@ -1149,8 +1149,8 @@ func (p *Player) GetPetThiefReward(Target int) error {
|
||||
return fmt.Errorf("target %d not exist", Target)
|
||||
}
|
||||
CardStar := limitedTimeEventCfg.GetThiefProb()
|
||||
starMap := make(map[int][]int, 0)
|
||||
cardList := []int{}
|
||||
starMap := make(map[int][]int)
|
||||
var cardList []int
|
||||
for _, v := range PlayerData.CardInfo {
|
||||
Star := cardCfg.GetStarById(v)
|
||||
starMap[Star] = append(starMap[Star], v)
|
||||
@ -1200,10 +1200,10 @@ func (p *Player) AddHighOrder() {
|
||||
NewColor := mergeDataCfg.GetColorById(NewChess)
|
||||
LastEmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), LastColor)
|
||||
AddNewEmitId := order.GetEmitByColor(ChessMod.GetOrderEmit(), NewColor)
|
||||
Product := []string{}
|
||||
var Product []string
|
||||
Product = append(Product, mergeDataCfg.GetEmitProduceType(LastEmitId)...)
|
||||
Product = append(Product, mergeDataCfg.GetEmitProduceType(AddNewEmitId)...)
|
||||
ChessMap := make(map[string]int, 0)
|
||||
ChessMap := make(map[string]int)
|
||||
ChessList := ChessMod.GetUnlockChessList()
|
||||
for _, v := range ChessList {
|
||||
ChessType := mergeDataCfg.GetTypeById(v)
|
||||
@ -1250,7 +1250,7 @@ func (p *Player) AddHighOrder2() {
|
||||
OrderMod := p.PlayMod.getOrderMod()
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
ChessList := ChessMod.GetUnlockChessList()
|
||||
ChessMap := make(map[int]int, 0)
|
||||
ChessMap := make(map[int]int)
|
||||
for _, v := range ChessList {
|
||||
Lv := mergeDataCfg.GetLvById(v)
|
||||
MaxLv := mergeDataCfg.GetMaxLvById(v)
|
||||
@ -1282,7 +1282,7 @@ func (p *Player) AddHighOrder2() {
|
||||
}
|
||||
|
||||
func (p *Player) FormatPetOrderItem(Items []*item.Item) []*item.Item {
|
||||
NewItems := make([]*item.Item, 0)
|
||||
var NewItems []*item.Item
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
for _, v := range Items {
|
||||
if v.Id != item.ITEM_PLAYROOM_BOX_LOW_ID && v.Id != item.ITEM_PLAYROOM_BOX_MID_ID && v.Id != item.ITEM_PLAYROOM_BOX_HIGH_ID {
|
||||
@ -1315,7 +1315,7 @@ func (p *Player) FormatPetOrderItem(Items []*item.Item) []*item.Item {
|
||||
NewItems = append(NewItems, item.NewItem(GoUtil.RandSlice(RandList), 1))
|
||||
continue
|
||||
}
|
||||
RandList := make([]int, 0)
|
||||
var RandList []int
|
||||
for k, v1 := range OrderItem {
|
||||
if k == 1 || k == 2 {
|
||||
continue
|
||||
|
||||
@ -2,18 +2,12 @@ package game
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
"runtime/debug"
|
||||
mergeCluster "server/cluster"
|
||||
"server/conf"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/friend"
|
||||
"server/game/mod/item"
|
||||
limitedTimeEvent "server/game/mod/limited_time_event"
|
||||
"server/game/mod/msg"
|
||||
GoUtil "server/game_util"
|
||||
proto "server/msg"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"sync"
|
||||
"time"
|
||||
@ -92,26 +86,7 @@ func (m *MessageMgr) MessageMgrInit() {
|
||||
MessageList: make(map[int64]*MessageList),
|
||||
PlayerList: make(map[int64]int),
|
||||
}
|
||||
// 注册所有可能在消息中使用的类型
|
||||
gob.Register(&limitedTimeEvent.MoneyCat{})
|
||||
gob.Register(&limitedTimeEvent.LuckyCat{})
|
||||
gob.Register(&msg.HandbookMsg{})
|
||||
gob.Register(&limitedTimeEvent.CatTrick{})
|
||||
gob.Register(&VarOpration{})
|
||||
gob.Register(&VarUserData{})
|
||||
gob.Register(&ActivityInfo{})
|
||||
gob.Register(&ChargeExtra{})
|
||||
gob.Register(CatnipMsg{})
|
||||
gob.Register(&CatnipLock{})
|
||||
gob.Register(CRank{})
|
||||
gob.Register(&proto.ResChampshipRank{})
|
||||
gob.Register(&proto.ResChampshipPreRank{})
|
||||
gob.Register(card.CardInfo{})
|
||||
gob.Register(item.Item{})
|
||||
gob.Register([]*item.Item{}) // 注册 []*item.Item 类型
|
||||
gob.Register(friend.ReplyInfo{})
|
||||
gob.Register(msg.VarData{})
|
||||
gob.Register(GameResult{})
|
||||
|
||||
// 注册处理函数
|
||||
m.init()
|
||||
m.handler = make(map[int]MessageHandlerFunc)
|
||||
@ -138,12 +113,17 @@ func FixBug() {
|
||||
delete(messageMgrData.MessageList, k)
|
||||
continue
|
||||
}
|
||||
isLose := CheckPlayerLose(int(k))
|
||||
// 反向遍历以安全删除元素
|
||||
for i := len(v.Messages) - 1; i >= 0; i-- {
|
||||
if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY || (v.Messages[i].End != 0 && v.Messages[i].End < now) {
|
||||
// 删除消息
|
||||
v.Messages = append(v.Messages[:i], v.Messages[i+1:]...)
|
||||
}
|
||||
if isLose && v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_RESULT {
|
||||
// 删除消息
|
||||
v.Messages = append(v.Messages[:i], v.Messages[i+1:]...)
|
||||
}
|
||||
}
|
||||
if len(v.Messages) == 0 {
|
||||
delete(messageMgrData.MessageList, k)
|
||||
@ -219,11 +199,11 @@ func NotifyAllPlayerMsg(m *msg.Msg) {
|
||||
playerListCopy[k] = v
|
||||
}
|
||||
messageMgrData.mu.Unlock()
|
||||
|
||||
// 在锁外发送消息
|
||||
for PlayerId, node := range playerListCopy {
|
||||
m.To = int(PlayerId)
|
||||
SendMsgToNodeAsync(m, node)
|
||||
copym := m.Clone()
|
||||
copym.To = int(PlayerId)
|
||||
SendMsgToNodeAsync(copym, node)
|
||||
}
|
||||
}
|
||||
|
||||
@ -382,10 +362,22 @@ func CenterPlayerMsgHandler(data *msg.Msg) (interface{}, error) {
|
||||
SendMsgToNodeAsync(data, node)
|
||||
} else {
|
||||
// 不在线则存储消息
|
||||
applycount := 0
|
||||
if !GoUtil.InArray(data.Type, notify_msg_type) {
|
||||
messages := getMessge(PlayerId)
|
||||
messages.mu.Lock()
|
||||
messages.Messages = append(messages.Messages, data)
|
||||
for _, msgItem := range messages.Messages {
|
||||
if msgItem == nil {
|
||||
continue
|
||||
}
|
||||
if msgItem.Type == msg.HANDLE_TYPE_APPLY {
|
||||
applycount++
|
||||
}
|
||||
}
|
||||
if applycount > 1 && data.Type == msg.HANDLE_TYPE_APPLY {
|
||||
go NotifyFriendApply(data.To, data.From)
|
||||
}
|
||||
messages.mu.Unlock()
|
||||
}
|
||||
}
|
||||
@ -891,6 +883,8 @@ func saveMessage(m *msg.Msg) error {
|
||||
messages := getMessgeUnsafe(int64(m.To))
|
||||
messages.mu.Lock()
|
||||
defer messages.mu.Unlock()
|
||||
now := GoUtil.Now()
|
||||
applycount := 0
|
||||
for _, msgItem := range messages.Messages {
|
||||
if msgItem == nil {
|
||||
continue
|
||||
@ -899,9 +893,17 @@ func saveMessage(m *msg.Msg) error {
|
||||
// 已存在相同消息,直接返回
|
||||
return nil
|
||||
}
|
||||
if msgItem.End != 0 && msgItem.End < now {
|
||||
// 删除过期消息
|
||||
messages.Messages = append(messages.Messages[:0], messages.Messages[1:]...)
|
||||
}
|
||||
if msgItem.Type == msg.HANDLE_TYPE_APPLY {
|
||||
applycount++
|
||||
}
|
||||
}
|
||||
if applycount > 1 && m.Type == msg.HANDLE_TYPE_APPLY {
|
||||
go NotifyFriendApply(m.To, m.From)
|
||||
}
|
||||
// 添加消息
|
||||
messages.Messages = append(messages.Messages, m)
|
||||
// 添加消息
|
||||
messages.Messages = append(messages.Messages, m)
|
||||
// 设置上限为2000条,超过则丢弃最早的消息
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package activity
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
activityCfg "server/conf/activity"
|
||||
"server/game/mod/item"
|
||||
@ -43,67 +42,60 @@ type Gift struct {
|
||||
RewardTime int64
|
||||
}
|
||||
|
||||
func init() {
|
||||
gob.Register(&Gift{})
|
||||
}
|
||||
|
||||
func (a *Activity) InitData() {
|
||||
if a.Var == nil {
|
||||
a.Var = make(map[int]interface{}, 8)
|
||||
}
|
||||
}
|
||||
|
||||
// 获取活动数据
|
||||
func (a *Activity) GetVar(key int) interface{} {
|
||||
return a.Var[key]
|
||||
}
|
||||
|
||||
// 设置活动数据
|
||||
func (a *Activity) SetVar(key int, value interface{}) {
|
||||
a.Var[key] = value
|
||||
}
|
||||
|
||||
func (a *Activity) getGIftVar(key int) *Gift {
|
||||
Var := a.GetVar(key)
|
||||
if Var == nil {
|
||||
Var = &Gift{}
|
||||
a.SetVar(key, Var)
|
||||
return Var.(*Gift)
|
||||
}
|
||||
gift, ok := Var.(*Gift)
|
||||
if !ok {
|
||||
// 类型不匹配,重置为新的 Gift 对象
|
||||
gift = &Gift{}
|
||||
a.SetVar(key, gift)
|
||||
// 获取活动礼包数据
|
||||
func (a *Activity) getGiftVar(key int) *Gift {
|
||||
if v, ok := a.Var[key].(*Gift); ok {
|
||||
return v
|
||||
}
|
||||
// nil 或类型不匹配,重置为新的 Gift 对象
|
||||
gift := &Gift{}
|
||||
a.Var[key] = gift
|
||||
return gift
|
||||
}
|
||||
|
||||
// 获取活动状态
|
||||
func (a *Activity) GetActivityStatus(data *gamedata.ActivityData) int {
|
||||
if data.AType == ACT_ATYPE_NORMAL {
|
||||
switch data.AType {
|
||||
case ACT_ATYPE_NORMAL:
|
||||
return ACT_STATUS_START
|
||||
}
|
||||
|
||||
if data.AType == ACT_ATYPE_LIMIT_GIFT {
|
||||
Var := a.getGIftVar(data.Id)
|
||||
case ACT_ATYPE_LIMIT_GIFT:
|
||||
v := a.getGiftVar(data.Id)
|
||||
switch data.Type {
|
||||
case ACT_TYPE_ADD_GIFT, ACT_TYPE_SUPER_GIFT:
|
||||
if Var.Reward {
|
||||
if v.Reward {
|
||||
return ACT_STATUS_NOT_START
|
||||
}
|
||||
if Var.Buy {
|
||||
if v.Buy {
|
||||
return ACT_STATUS_END
|
||||
}
|
||||
default:
|
||||
if Var.Buy {
|
||||
if v.Buy {
|
||||
return ACT_STATUS_NOT_START
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ACT_STATUS_START
|
||||
}
|
||||
|
||||
// 活动礼包-获取奖励
|
||||
func (a *Activity) GetReward(ActId int) ([]*item.Item, error) {
|
||||
Var := a.getGIftVar(ActId)
|
||||
Var := a.getGiftVar(ActId)
|
||||
if !Var.Buy {
|
||||
return nil, fmt.Errorf("ActId:%d not buy", ActId)
|
||||
}
|
||||
|
||||
@ -7,9 +7,10 @@ import (
|
||||
GoUtil "server/game_util"
|
||||
)
|
||||
|
||||
// 活动礼包
|
||||
func (a *Activity) Fire(Id int) ([]*item.Item, error) {
|
||||
AId := activityCfg.GetActivityGiftId(Id)
|
||||
Var := a.getGIftVar(AId)
|
||||
Var := a.getGiftVar(AId)
|
||||
if Var.Buy {
|
||||
return nil, fmt.Errorf("Id%d已购买", Id)
|
||||
}
|
||||
|
||||
@ -113,6 +113,10 @@ func (c *CardMod) InitData() {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
卡牌系统-登录:赛季结束则重置
|
||||
*/
|
||||
func (c *CardMod) Login(ServerOpenTime int64) []*item.Item {
|
||||
Now := GoUtil.Now()
|
||||
Duration := cardCfg.GetCardDuration()
|
||||
@ -124,7 +128,6 @@ func (c *CardMod) Login(ServerOpenTime int64) []*item.Item {
|
||||
c.AllCollect = 0
|
||||
c.EndTime = 0
|
||||
c.Round = 0
|
||||
c.Handbook = make(map[int]int)
|
||||
for k, v := range c.Handbook {
|
||||
if v == HANDBOOK_STATUS_GET {
|
||||
continue
|
||||
@ -135,6 +138,7 @@ func (c *CardMod) Login(ServerOpenTime int64) []*item.Item {
|
||||
}
|
||||
HandbookItemNum += cardCfg.GetStarById(k)
|
||||
}
|
||||
c.Handbook = make(map[int]int)
|
||||
}
|
||||
if c.EndTime == 0 {
|
||||
c.EndTime = ((Now-ServerOpenTime)/Duration+1)*Duration + ServerOpenTime
|
||||
@ -142,6 +146,7 @@ func (c *CardMod) Login(ServerOpenTime int64) []*item.Item {
|
||||
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: HandbookItemNum}}
|
||||
}
|
||||
|
||||
// 零点更新
|
||||
func (c *CardMod) ZeroUpdate(ServerOpenTime int64) []*item.Item {
|
||||
c.ReqTimes = cardCfg.GetReqTimes()
|
||||
c.ExTimes = cardCfg.GetExTimes()
|
||||
@ -215,6 +220,28 @@ func (c *CardMod) OpenCardPack(Star int) ([]int, error) {
|
||||
return newCard, nil
|
||||
}
|
||||
|
||||
// cleanExpired 清理过期的请求和交换记录,返回有效 uid 列表
|
||||
func (c *CardMod) cleanExpired() (reqUid, exUid []int64) {
|
||||
Now := GoUtil.Now()
|
||||
reqUid = make([]int64, 0, len(c.ReqFriend))
|
||||
for k, v := range c.ReqFriend {
|
||||
if v.EndTime < Now {
|
||||
delete(c.ReqFriend, k)
|
||||
continue
|
||||
}
|
||||
reqUid = append(reqUid, int64(k))
|
||||
}
|
||||
exUid = make([]int64, 0, len(c.ExCard))
|
||||
for k, v := range c.ExCard {
|
||||
if v.EndTime < Now {
|
||||
delete(c.ExCard, k)
|
||||
continue
|
||||
}
|
||||
exUid = append(exUid, int64(k))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 协议返回
|
||||
func (c *CardMod) BackData() *msg.ResCardInfo {
|
||||
var cardList []*msg.Card
|
||||
@ -224,22 +251,7 @@ func (c *CardMod) BackData() *msg.ResCardInfo {
|
||||
}
|
||||
cardList = append(cardList, &msg.Card{Id: int32(k), Count: int32(v)})
|
||||
}
|
||||
ReqUid := make([]int64, 0, len(c.ReqFriend))
|
||||
for _, v := range c.ReqFriend {
|
||||
if v.EndTime < GoUtil.Now() {
|
||||
delete(c.ReqFriend, v.BUid)
|
||||
continue
|
||||
}
|
||||
ReqUid = append(ReqUid, int64(v.BUid))
|
||||
}
|
||||
ExUid := make([]int64, 0, len(c.ExCard))
|
||||
for k, v := range c.ExCard {
|
||||
if v.EndTime < GoUtil.Now() {
|
||||
delete(c.ExCard, k)
|
||||
continue
|
||||
}
|
||||
ExUid = append(ExUid, int64(k))
|
||||
}
|
||||
ReqUid, ExUid := c.cleanExpired()
|
||||
|
||||
if c.EndTime < GoUtil.Now() {
|
||||
log.Debug("CardMod BackData EndTime < Now, reset card data")
|
||||
@ -419,17 +431,16 @@ func (c *CardMod) AddExTimes(CardInfo *CardInfo) {
|
||||
|
||||
// 交换卡牌
|
||||
func (c *CardMod) ExchangeCard(From, To, CardId int) (*CardInfo, error) {
|
||||
Now := GoUtil.Now()
|
||||
Id := GoUtil.CreateCardId(From, To, CardId)
|
||||
err := c.SubCard(CardId)
|
||||
if c.ExTimes <= 0 {
|
||||
return nil, fmt.Errorf("ExchangeCard times not enough, CardId: %d", CardId)
|
||||
}
|
||||
c.ExTimes--
|
||||
err := c.SubCard(CardId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c.ExTimes--
|
||||
Now := GoUtil.Now()
|
||||
Id := GoUtil.CreateCardId(From, To, CardId)
|
||||
CardInfo := &CardInfo{
|
||||
Id: Id,
|
||||
AUid: From,
|
||||
@ -445,16 +456,16 @@ func (c *CardMod) ExchangeCard(From, To, CardId int) (*CardInfo, error) {
|
||||
}
|
||||
|
||||
func (c *CardMod) SendCard(From, To, CardId int) (*CardInfo, error) {
|
||||
Now := GoUtil.Now()
|
||||
Id := GoUtil.CreateCardId(From, To, CardId)
|
||||
err := c.SubCard(CardId)
|
||||
if c.ExTimes <= 0 {
|
||||
return nil, fmt.Errorf("SendCard times not enough, CardId: %d", CardId)
|
||||
}
|
||||
c.ExTimes--
|
||||
err := c.SubCard(CardId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
c.ExTimes--
|
||||
Now := GoUtil.Now()
|
||||
Id := GoUtil.CreateCardId(From, To, CardId)
|
||||
CardInfo := &CardInfo{
|
||||
Id: Id,
|
||||
AUid: From,
|
||||
@ -501,36 +512,19 @@ func (c *CardMod) NotifyCard() *msg.ResNotifyCard {
|
||||
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([]int64, 0, len(c.ReqFriend))
|
||||
for k, v := range c.ReqFriend {
|
||||
if v.EndTime < GoUtil.Now() {
|
||||
delete(c.ReqFriend, k)
|
||||
continue
|
||||
}
|
||||
ReqUid = append(ReqUid, int64(k))
|
||||
}
|
||||
ExUid := make([]int64, 0, len(c.ExCard))
|
||||
for k, v := range c.ExCard {
|
||||
if v.EndTime < GoUtil.Now() {
|
||||
delete(c.ExCard, k)
|
||||
continue
|
||||
}
|
||||
ExUid = append(ExUid, int64(k))
|
||||
}
|
||||
m := &msg.ResNotifyCardTimes{
|
||||
ReqUid, ExUid := c.cleanExpired()
|
||||
return &msg.ResNotifyCardTimes{
|
||||
ExTimes: int32(c.ExTimes),
|
||||
ReqTimes: int32(c.ReqTimes),
|
||||
ExUid: ExUid,
|
||||
ReqUid: ReqUid,
|
||||
GoldTimes: int32(c.GoldTimes),
|
||||
}
|
||||
return m
|
||||
}
|
||||
|
||||
func (c *CardMod) ResetGoldCardEx() {
|
||||
|
||||
@ -5,6 +5,7 @@ import (
|
||||
GoUtil "server/game_util"
|
||||
)
|
||||
|
||||
// 随机卡牌
|
||||
func randCard(Round, Star, IsGold int, Except []int) int {
|
||||
cardList := cardCfg.GetCardListByStar(Round, Star, IsGold)
|
||||
cardList = GoUtil.SubSlices(cardList, Except)
|
||||
@ -12,6 +13,7 @@ func randCard(Round, Star, IsGold int, Except []int) int {
|
||||
return cardId
|
||||
}
|
||||
|
||||
// 排位赛金卡
|
||||
func RankGoldCard() (int, int) {
|
||||
Card1 := randCard(0, 4, 1, []int{})
|
||||
Card2 := randCard(0, 5, 1, []int{Card1})
|
||||
|
||||
@ -39,8 +39,6 @@ const (
|
||||
)
|
||||
|
||||
func (c *CatnipMod) InitData() {
|
||||
// Initialize Catnip data here
|
||||
// c.Game = nil
|
||||
if c.Game == nil {
|
||||
c.Game = make(map[int]*CatnipGame)
|
||||
}
|
||||
@ -52,6 +50,7 @@ func (c *CatnipMod) InitData() {
|
||||
}
|
||||
}
|
||||
|
||||
// 登录 判断是否需要重置数据
|
||||
func (c *CatnipMod) Login(Id int) (int, []*item.Item) {
|
||||
OldId := c.Id
|
||||
if Id == 0 {
|
||||
@ -77,13 +76,14 @@ func (c *CatnipMod) Login(Id int) (int, []*item.Item) {
|
||||
Status: GAME_STATUS_IDLE, // Not started
|
||||
}
|
||||
}
|
||||
return c.Id, Items
|
||||
return OldId, Items
|
||||
}
|
||||
|
||||
func (c *CatnipMod) ZeroUpdate(Id int) {
|
||||
c.Login(Id)
|
||||
}
|
||||
|
||||
// 邀请好友
|
||||
func (c *CatnipMod) Invite(Uid, Id int) error {
|
||||
if c.InviteList[Uid] != nil {
|
||||
return fmt.Errorf("user with ID %d is already invited", Uid)
|
||||
@ -96,6 +96,7 @@ func (c *CatnipMod) Invite(Uid, Id int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 被邀请
|
||||
func (c *CatnipMod) BeInvited(Uid int, Time int64) error {
|
||||
// Check if the user is already invited
|
||||
invite := c.BeInvitedList[Uid]
|
||||
@ -109,63 +110,66 @@ func (c *CatnipMod) BeInvited(Uid int, Time int64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 同意邀请
|
||||
func (c *CatnipMod) Agree(Id, Uid int) ([]int, error) {
|
||||
_, exists := c.BeInvitedList[Uid]
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("user with ID %d is not invited to game ID %d", Uid, Id)
|
||||
}
|
||||
// Remove the invite after agreeing
|
||||
|
||||
delete(c.BeInvitedList, Uid)
|
||||
for _, GameInfo := range c.Game {
|
||||
if GameInfo.Partner == 0 {
|
||||
GameInfo.Partner = Uid
|
||||
GameInfo.Status = GAME_STATUS_IN_PROGRESS
|
||||
return []int{}, nil
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
return []int{}, nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// 同意邀请-指定格子
|
||||
func (c *CatnipMod) BeAgree(Id, Uid int) ([]int, error) {
|
||||
info, exists := c.InviteList[Uid]
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("user with ID %d is not invited to game ID %d", Uid, Id)
|
||||
}
|
||||
// Remove the invite after agreeing
|
||||
delete(c.InviteList, Uid)
|
||||
GameInfo := c.Game[info.InviteId]
|
||||
if GameInfo.Partner == 0 {
|
||||
GameInfo.Partner = Uid
|
||||
GameInfo.Status = GAME_STATUS_IN_PROGRESS
|
||||
delete(c.InviteList, Uid)
|
||||
return []int{}, nil
|
||||
return nil, nil
|
||||
}
|
||||
delete(c.InviteList, Uid)
|
||||
// 目标格子已有伙伴,分配到第一个空闲格
|
||||
for _, GameInfo := range c.Game {
|
||||
if GameInfo.Partner == 0 {
|
||||
GameInfo.Partner = Uid
|
||||
GameInfo.Status = GAME_STATUS_IN_PROGRESS
|
||||
return []int{}, nil
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
return []int{}, nil
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// 删除邀请
|
||||
func (c *CatnipMod) DelInvited(Id, Uid int) error {
|
||||
delete(c.InviteList, Uid)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 设置倍数
|
||||
func (c *CatnipMod) Multiply(Mul int) error {
|
||||
c.Mul = Mul
|
||||
return nil
|
||||
}
|
||||
|
||||
// 拒绝邀请
|
||||
func (c *CatnipMod) Refuse(Id, Uid int) error {
|
||||
delete(c.BeInvitedList, Uid)
|
||||
return nil
|
||||
}
|
||||
|
||||
// 玩游戏
|
||||
func (c *CatnipMod) Play(Id int) (int, int, int, []*item.Item, []*item.Item, int, error) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
@ -184,6 +188,7 @@ func (c *CatnipMod) Play(Id int) (int, int, int, []*item.Item, []*item.Item, int
|
||||
return Id, Growth, GameInfo.Partner, Items, ItemCost, FriendItems, nil
|
||||
}
|
||||
|
||||
// 领取奖励
|
||||
func (c *CatnipMod) Reward(Id int) ([]*item.Item, *CatnipGame, error) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
@ -201,6 +206,7 @@ func (c *CatnipMod) Reward(Id int) ([]*item.Item, *CatnipGame, error) {
|
||||
return Items, GameInfo, nil
|
||||
}
|
||||
|
||||
// 领取大奖励
|
||||
func (c *CatnipMod) GrandReward() ([]*item.Item, error) {
|
||||
for _, game := range c.Game {
|
||||
if game.Status != GAME_STATUS_COMPLETED {
|
||||
@ -214,6 +220,7 @@ func (c *CatnipMod) GrandReward() ([]*item.Item, error) {
|
||||
return catnipCfg.GetGrandReward(c.Id), nil
|
||||
}
|
||||
|
||||
// 进度增加
|
||||
func (c *CatnipMod) Growth(Id, Growth int) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
@ -223,17 +230,18 @@ func (c *CatnipMod) Growth(Id, Growth int) {
|
||||
return // Game is not in progress
|
||||
}
|
||||
GameInfo.Progress += Growth
|
||||
if GameInfo.Progress >= catnipCfg.GetGameMaxProgress(c.Id) { // Assuming the game ends when progress reaches a certain threshold
|
||||
if GameInfo.Progress >= catnipCfg.GetGameMaxProgress(c.Id) {
|
||||
GameInfo.Status = GAME_STATUS_COMPLETED
|
||||
}
|
||||
}
|
||||
|
||||
// 伙伴贡献增加
|
||||
func (c *CatnipMod) GrowthByUid(Uid, Growth int) {
|
||||
for _, v := range c.Game {
|
||||
if v.Partner == Uid {
|
||||
v.Progress += Growth
|
||||
v.PartnerAdd += Growth
|
||||
if v.Progress >= catnipCfg.GetGameMaxProgress(c.Id) { // Assuming the game ends when progress reaches a certain threshold
|
||||
if v.Progress >= catnipCfg.GetGameMaxProgress(c.Id) {
|
||||
v.Status = GAME_STATUS_COMPLETED
|
||||
}
|
||||
}
|
||||
@ -241,6 +249,7 @@ func (c *CatnipMod) GrowthByUid(Uid, Growth int) {
|
||||
|
||||
}
|
||||
|
||||
// 设置表情
|
||||
func (c *CatnipMod) SetEmoji(Uid, EmojiId int) {
|
||||
for _, v := range c.Game {
|
||||
if v.Partner == Uid {
|
||||
@ -262,6 +271,7 @@ func (c *CatnipMod) SetSendEmoji(Id, EmojiId int) {
|
||||
c.Game[Id].SendEmoji = EmojiId
|
||||
}
|
||||
|
||||
// 获取未领取的奖励
|
||||
func (c *CatnipMod) GetUnGetReward() []*item.Item {
|
||||
var rewards []*item.Item
|
||||
for _, v := range c.Game {
|
||||
|
||||
@ -19,6 +19,11 @@ type ChampshipMod struct {
|
||||
|
||||
func (c *ChampshipMod) InitData() {}
|
||||
|
||||
// isActive 判断当前是否在冠军赛活跃时段(零点后 30 分钟内为结算期,不计分)
|
||||
func (c *ChampshipMod) isActive() bool {
|
||||
return GoUtil.Now()-GoUtil.ZeroTimestamp() >= 1800
|
||||
}
|
||||
|
||||
func (c *ChampshipMod) ZeroUpdate() {
|
||||
c.PreMax = c.Reward
|
||||
c.Score = 0
|
||||
@ -39,8 +44,7 @@ func (c *ChampshipMod) GetRankReward(Rank int) ([]*item.Item, error) {
|
||||
}
|
||||
|
||||
func (c *ChampshipMod) AddScore(Chess []int) {
|
||||
Status := GoUtil.IfTrue(GoUtil.Now()-GoUtil.ZeroTimestamp() < 1800, 0, 1)
|
||||
if Status.(int) == 0 {
|
||||
if !c.isActive() {
|
||||
return
|
||||
}
|
||||
score := 0
|
||||
@ -60,23 +64,24 @@ func (c *ChampshipMod) GetReward() []*item.Item {
|
||||
}
|
||||
|
||||
func (c *ChampshipMod) BackData(MyRank, MyPreRank int) *msg.ResChampship {
|
||||
RankReward := 0
|
||||
rankReward := 0
|
||||
if c.RankReward {
|
||||
RankReward = 2
|
||||
} else {
|
||||
if MyPreRank > 0 {
|
||||
RankReward = 1
|
||||
rankReward = 2
|
||||
} else if MyPreRank > 0 {
|
||||
rankReward = 1
|
||||
}
|
||||
status := 0
|
||||
if c.isActive() {
|
||||
status = 1
|
||||
}
|
||||
Status := GoUtil.IfTrue(GoUtil.Now()-GoUtil.ZeroTimestamp() < 1800, 0, 1)
|
||||
return &msg.ResChampship{
|
||||
Score: int32(c.Score),
|
||||
Reward: int32(c.Reward),
|
||||
EndTime: int32(GoUtil.ZeroTimestamp() + 86400), // 零点结束
|
||||
EndTime: int32(GoUtil.ZeroTimestamp() + 86400),
|
||||
Period: int32(GoUtil.GetServerOpenDay()),
|
||||
Rank: int32(MyRank),
|
||||
RankReward: int32(RankReward),
|
||||
Status: int32(Status.(int)),
|
||||
RankReward: int32(rankReward),
|
||||
Status: int32(status),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -78,6 +78,11 @@ const (
|
||||
CHESS_SHOP = 2 // 棋子商店
|
||||
ENERGY_SHOP = 3 // 能量商店
|
||||
)
|
||||
const (
|
||||
secondsIn35Days = 35 * 24 * 3600
|
||||
secondsIn7Days = 7 * 24 * 3600
|
||||
secondsIn1Day = 24 * 3600
|
||||
)
|
||||
|
||||
func (c *ChargeMod) InitData() {
|
||||
if c.SpecialShop == nil {
|
||||
@ -110,12 +115,17 @@ func (c *ChargeMod) Login(LogoutTime int64) {
|
||||
c.PetWorkTime -= c.LastWorkTime
|
||||
}
|
||||
|
||||
// resetSpecialChargeIfExpired 若距上次充値超过 35 天则清零特惠充値记录
|
||||
func (c *ChargeMod) resetSpecialChargeIfExpired(now int64) {
|
||||
if c.LastCharge != 0 && now-c.LastCharge > secondsIn35Days {
|
||||
c.SpecialCharge = 0
|
||||
}
|
||||
}
|
||||
|
||||
// 零点更新
|
||||
func (c *ChargeMod) ZeroUpdate(Emit []int) {
|
||||
Now := GoUtil.Now()
|
||||
if c.LastCharge != 0 && Now-c.LastCharge > 35*24*3600 {
|
||||
c.SpecialCharge = 0
|
||||
}
|
||||
c.resetSpecialChargeIfExpired(Now)
|
||||
if GoUtil.IsFirstDayOfMonth() {
|
||||
c.MonthCharge = 0
|
||||
}
|
||||
@ -135,10 +145,12 @@ func (c *ChargeMod) ZeroUpdate(Emit []int) {
|
||||
SpecialGrade = max(1, M-a)
|
||||
c.SpecialShop[i] = &SepcialShop{Grade: SpecialGrade, Count: SpecialShopCount}
|
||||
}
|
||||
c.WishList.SendList = make([]int64, 0)
|
||||
if c.WishList != nil {
|
||||
c.WishList.SendList = nil
|
||||
}
|
||||
if c.IsWeeklyDiscountDay() && c.WeeklyEndTime < Now {
|
||||
c.WeeklyDiscount = make(map[int]int)
|
||||
c.WeeklyEndTime = GoUtil.ZeroTimestamp() + 7*24*3600
|
||||
c.WeeklyEndTime = GoUtil.ZeroTimestamp() + secondsIn7Days
|
||||
}
|
||||
c.InitChessShop(Emit)
|
||||
}
|
||||
@ -168,10 +180,7 @@ func (c *ChargeMod) Fire(ChargeId int) (Item []*item.Item) {
|
||||
if c.FirstCharge == 0 {
|
||||
c.FirstCharge = Now
|
||||
}
|
||||
if c.LastCharge != 0 && Now-c.LastCharge > 35*24*3600 {
|
||||
c.SpecialCharge = 0
|
||||
|
||||
}
|
||||
c.resetSpecialChargeIfExpired(Now)
|
||||
c.LastCharge = Now
|
||||
if Money > c.MaxCharge {
|
||||
c.MaxCharge = Money
|
||||
@ -206,6 +215,7 @@ func (c *ChargeMod) FireDiamondShop(ChargeId int) []*item.Item {
|
||||
return chargeCfg.GetDiamondShopReward(ChargeId)
|
||||
}
|
||||
|
||||
// 宠物币商店
|
||||
func (c *ChargeMod) FirePetCoinShop(ChargeId int) []*item.Item {
|
||||
return chargeCfg.GetPetCoinShopReward(ChargeId)
|
||||
}
|
||||
@ -265,11 +275,11 @@ func (c *ChargeMod) FireAdReward(ChargeId int) []*item.Item {
|
||||
if PetWorkDay != 0 {
|
||||
Now := GoUtil.Now()
|
||||
if c.AdEndTime < Now {
|
||||
c.AdEndTime = Now + int64(PetWorkDay*24*3600)
|
||||
c.AdEndTime = Now + int64(PetWorkDay*secondsIn1Day)
|
||||
} else {
|
||||
c.AdEndTime += int64(PetWorkDay * 24 * 3600)
|
||||
c.AdEndTime += int64(PetWorkDay * secondsIn1Day)
|
||||
}
|
||||
c.PetWorkTime += int64(PetWorkDay * 24 * 3600)
|
||||
c.PetWorkTime += int64(PetWorkDay * secondsIn1Day)
|
||||
c.Ad = true
|
||||
}
|
||||
return Items
|
||||
@ -284,6 +294,7 @@ func (c *ChargeMod) FireFreeShop() ([]*item.Item, error) {
|
||||
return chargeCfg.GetFreeShopReward(c.FreeShop), nil
|
||||
}
|
||||
|
||||
// 初始化棋子商店
|
||||
func (c *ChargeMod) InitChessShop(Emit []int) {
|
||||
if len(Emit) == 0 {
|
||||
return
|
||||
@ -328,6 +339,7 @@ func (c *ChargeMod) InitChessShop(Emit []int) {
|
||||
}
|
||||
}
|
||||
|
||||
// 购买能量
|
||||
func (c *ChargeMod) BuyEnergy(IsWeeklyDiscount bool) ([]*item.Item, []*item.Item, int) {
|
||||
diamond := 40
|
||||
if IsWeeklyDiscount {
|
||||
@ -346,6 +358,7 @@ func (c *ChargeMod) BuyEnergy(IsWeeklyDiscount bool) ([]*item.Item, []*item.Item
|
||||
}, diamond
|
||||
}
|
||||
|
||||
// 购买棋子
|
||||
func (c *ChargeMod) BuyChess(Chess int, IsWeeklyDiscount bool) ([]*item.Item, []*item.Item, int, error) {
|
||||
v, ok := c.ChessShop[Chess]
|
||||
if !ok {
|
||||
@ -376,10 +389,12 @@ func (c *ChargeMod) BuyChess(Chess int, IsWeeklyDiscount bool) ([]*item.Item, []
|
||||
}, v.Id, nil
|
||||
}
|
||||
|
||||
// 棋子商店解锁
|
||||
func (c *ChargeMod) TriggerChargeUnlock(Lv int, Emit []int) {
|
||||
c.InitChessShop(Emit)
|
||||
}
|
||||
|
||||
// 添加心愿单
|
||||
func (c *ChargeMod) AddWish(Id, Type int) ([]*item.Item, error) {
|
||||
ItemId := 0
|
||||
switch Type {
|
||||
@ -389,7 +404,7 @@ func (c *ChargeMod) AddWish(Id, Type int) ([]*item.Item, error) {
|
||||
if ItemId == 0 {
|
||||
return nil, fmt.Errorf("AddWish itemid not exist id:%d", Id)
|
||||
}
|
||||
Items := []*item.Item{}
|
||||
var Items []*item.Item
|
||||
if c.WishList.ItemId != 0 {
|
||||
if c.WishList.ItemId == ItemId {
|
||||
return nil, fmt.Errorf("AddWish itemid already exist id:%d", Id)
|
||||
@ -401,6 +416,7 @@ func (c *ChargeMod) AddWish(Id, Type int) ([]*item.Item, error) {
|
||||
return Items, nil
|
||||
}
|
||||
|
||||
// 获取心愿单奖励
|
||||
func (c *ChargeMod) GetWish() ([]*item.Item, error) {
|
||||
if c.WishList.ItemId == 0 {
|
||||
return nil, fmt.Errorf("AddWishCount itemid not exist")
|
||||
@ -409,11 +425,13 @@ func (c *ChargeMod) GetWish() ([]*item.Item, error) {
|
||||
if c.WishList.Count < Max {
|
||||
return nil, fmt.Errorf("AddWishCount count max")
|
||||
}
|
||||
rewardItemId := c.WishList.ItemId
|
||||
c.WishList.Count = 0
|
||||
c.WishList.ItemId = 0
|
||||
return []*item.Item{item.NewItem(c.WishList.ItemId, 1)}, nil
|
||||
return []*item.Item{item.NewItem(rewardItemId, 1)}, nil
|
||||
}
|
||||
|
||||
// 发送心愿单
|
||||
func (c *ChargeMod) SendWishBeg(Uids []int64) error {
|
||||
for _, v := range Uids {
|
||||
if GoUtil.InArray64(v, c.WishList.SendList) {
|
||||
@ -424,6 +442,7 @@ func (c *ChargeMod) SendWishBeg(Uids []int64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 增加心愿单完成度
|
||||
func (c *ChargeMod) AddWishCount() {
|
||||
if c.WishList.ItemId == 0 {
|
||||
return
|
||||
@ -435,6 +454,7 @@ func (c *ChargeMod) AddWishCount() {
|
||||
c.WishList.Count++
|
||||
}
|
||||
|
||||
// 是否在每周折扣日
|
||||
func (c *ChargeMod) IsWeeklyDiscountDay() bool {
|
||||
Day := chargeCfg.GetWeeklyDiscountDay()
|
||||
if Day == -1 {
|
||||
@ -444,6 +464,7 @@ func (c *ChargeMod) IsWeeklyDiscountDay() bool {
|
||||
return Weekday == Day || c.WeeklyEndTime > GoUtil.Now()
|
||||
}
|
||||
|
||||
// 重置每周折扣
|
||||
func (c *ChargeMod) ResetWeeklyDiscount() {
|
||||
if c.IsWeeklyDiscountDay() {
|
||||
return
|
||||
@ -451,6 +472,7 @@ func (c *ChargeMod) ResetWeeklyDiscount() {
|
||||
c.WeeklyDiscount = make(map[int]int)
|
||||
}
|
||||
|
||||
// 宠物打工数据
|
||||
func (c *ChargeMod) PetWorkBackData() *msg.LogoutPetWork {
|
||||
res := &msg.LogoutPetWork{
|
||||
WorkTime: c.LastWorkTime,
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"math"
|
||||
)
|
||||
|
||||
// 弃用
|
||||
func GetChessDiamond(Lv, Type int) int {
|
||||
Diamond := 0.0
|
||||
if Type == 1 {
|
||||
|
||||
@ -164,8 +164,7 @@ func (cb *ChessBorad) ComposeChess(id int) (int, error) {
|
||||
ChessType := mergeDataCfg.GetTypeById(id)
|
||||
if ChessType == "Emitter" {
|
||||
cb.EmitList[id+1]++
|
||||
cb.EmitList[id]--
|
||||
cb.EmitList[id]--
|
||||
cb.EmitList[id] -= 2
|
||||
}
|
||||
id++
|
||||
newList = append(newList, id)
|
||||
@ -178,6 +177,7 @@ func (cb *ChessBorad) GetChessList() []int {
|
||||
return cb.ChessList
|
||||
}
|
||||
|
||||
// 获取解锁棋子列表
|
||||
func (cb *ChessBorad) GetUnlockChessList() []int {
|
||||
r := make([]int, 0, len(cb.ChessList))
|
||||
for k, v := range cb.ChessMap {
|
||||
@ -189,18 +189,13 @@ func (cb *ChessBorad) GetUnlockChessList() []int {
|
||||
return r
|
||||
}
|
||||
|
||||
// func (cb *ChessBorad) GetUnlockChessList() []int {
|
||||
// return cb.ChessBag.List
|
||||
// }
|
||||
|
||||
// 添加棋子
|
||||
func (cb *ChessBorad) AddChess(id int) error {
|
||||
_, err := mergeDataCfg.GetOne(id)
|
||||
if err != nil {
|
||||
return errors.New("配置错误")
|
||||
}
|
||||
NewChessList := append(cb.ChessList, id)
|
||||
if len(NewChessList) > ChessBoradMaxNum { // 棋盘满了 加入缓存区
|
||||
if len(cb.ChessList)+1 > ChessBoradMaxNum { // 棋盘满了 加入缓存区
|
||||
cb.ChessBuff = append(cb.ChessBuff, id)
|
||||
return nil
|
||||
}
|
||||
@ -283,58 +278,41 @@ func (cb *ChessBorad) RemoveChess(Id int) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// emitListToSlice 将 EmitList 过滤并转换为发射器 ID 列表。
|
||||
// retireFilter 为 true 时过滤已退役的发射器。
|
||||
func (cb *ChessBorad) emitListToSlice(retireFilter bool) []int {
|
||||
EM := make(map[string]int)
|
||||
for k, v := range cb.EmitList {
|
||||
if v <= 0 {
|
||||
delete(cb.EmitList, k)
|
||||
continue
|
||||
}
|
||||
EmitID := mergeDataCfg.GetEmitId(k)
|
||||
if EmitID == "" {
|
||||
continue
|
||||
}
|
||||
if retireFilter && cb.Retire[EmitID] >= EMIT_RETIRE_START {
|
||||
continue
|
||||
}
|
||||
if mergeDataCfg.GetEmitType(k) == "sub" {
|
||||
continue
|
||||
}
|
||||
EM[EmitID] = max(EM[EmitID], k)
|
||||
}
|
||||
result := make([]int, 0, len(EM))
|
||||
for _, v := range EM {
|
||||
result = append(result, v)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (cb *ChessBorad) GetStarEmitList() []int {
|
||||
result := make([]int, 0, len(cb.EmitList))
|
||||
EM := make(map[string]int)
|
||||
for k, v := range cb.EmitList {
|
||||
if v <= 0 {
|
||||
delete(cb.EmitList, k)
|
||||
continue
|
||||
}
|
||||
EmitID := mergeDataCfg.GetEmitId(k)
|
||||
if EmitID == "" {
|
||||
continue
|
||||
}
|
||||
EmitType := mergeDataCfg.GetEmitType(k)
|
||||
if EmitType == "sub" {
|
||||
continue
|
||||
}
|
||||
if v > 0 {
|
||||
EM[EmitID] = max(EM[EmitID], k)
|
||||
}
|
||||
}
|
||||
for _, v := range EM {
|
||||
result = append(result, v)
|
||||
}
|
||||
return result
|
||||
return cb.emitListToSlice(false)
|
||||
}
|
||||
|
||||
func (cb *ChessBorad) GetEmitList() []int {
|
||||
result := make([]int, 0, len(cb.EmitList))
|
||||
EM := make(map[string]int)
|
||||
for k, v := range cb.EmitList {
|
||||
if v <= 0 {
|
||||
delete(cb.EmitList, k)
|
||||
continue
|
||||
}
|
||||
EmitID := mergeDataCfg.GetEmitId(k)
|
||||
if EmitID == "" {
|
||||
continue
|
||||
}
|
||||
if cb.Retire[EmitID] >= EMIT_RETIRE_START {
|
||||
continue
|
||||
}
|
||||
EmitType := mergeDataCfg.GetEmitType(k)
|
||||
if EmitType == "sub" {
|
||||
continue
|
||||
}
|
||||
if v > 0 {
|
||||
EM[EmitID] = max(EM[EmitID], k)
|
||||
}
|
||||
}
|
||||
for _, v := range EM {
|
||||
result = append(result, v)
|
||||
}
|
||||
return result
|
||||
return cb.emitListToSlice(true)
|
||||
}
|
||||
|
||||
// 完成订单 移除棋子
|
||||
@ -345,8 +323,8 @@ func (cb *ChessBorad) FinishOrder(ChessId []int) error {
|
||||
unlockChessMap[v]++
|
||||
}
|
||||
|
||||
boardChess := []int{}
|
||||
BagChess := []int{}
|
||||
var boardChess []int
|
||||
var BagChess []int
|
||||
for _, v := range ChessId {
|
||||
if unlockChessMap[v] > 0 {
|
||||
unlockChessMap[v]--
|
||||
@ -370,6 +348,7 @@ func (cb *ChessBorad) FinishOrder(ChessId []int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 完成订单 移除棋子
|
||||
func (cb *ChessBorad) FinishOrderChess(Chess int) error {
|
||||
for k, v := range cb.ChessList {
|
||||
if v == Chess {
|
||||
@ -380,6 +359,7 @@ func (cb *ChessBorad) FinishOrderChess(Chess int) error {
|
||||
return fmt.Errorf("order finish board chess id:%d not exist", Chess)
|
||||
}
|
||||
|
||||
// 完成订单 移除棋子
|
||||
func (cb *ChessBorad) FinishOrderChessByBag(Chess int) error {
|
||||
for k, v := range cb.ChessBag.List {
|
||||
if v.ChessId == Chess {
|
||||
@ -415,21 +395,18 @@ func (cb *ChessBorad) RemoveHonor(Id int) {
|
||||
delete(cb.Honor, Id)
|
||||
}
|
||||
|
||||
// 从暂存区添加棋子到棋盘
|
||||
func (cb *ChessBorad) GetChessFromBuff(Chess int) error {
|
||||
for i, v := range cb.ChessBuff {
|
||||
if v == Chess {
|
||||
cb.ChessBuff = append(cb.ChessBuff[:i], cb.ChessBuff[i+1:]...)
|
||||
cb.AddChess(Chess)
|
||||
ChessType := mergeDataCfg.GetTypeById(Chess)
|
||||
if ChessType == "Emitter" {
|
||||
cb.EmitList[Chess]++
|
||||
}
|
||||
return nil
|
||||
return cb.AddChess(Chess)
|
||||
}
|
||||
}
|
||||
return errors.New("chess id not exist")
|
||||
}
|
||||
|
||||
// 扣除零件
|
||||
func (cb *ChessBorad) LosePart(PartId int, Num int) error {
|
||||
v, ok := cb.PartBag.List[PartId]
|
||||
if !ok || v.Num < Num {
|
||||
@ -469,7 +446,7 @@ func (cb *ChessBorad) BackData() *msg.ResPlayerChessInfo {
|
||||
}
|
||||
Rw := make([]string, 0, len(cb.RetireReward))
|
||||
for k, v := range cb.RetireReward {
|
||||
if v == true {
|
||||
if v {
|
||||
Rw = append(Rw, k)
|
||||
}
|
||||
}
|
||||
@ -524,6 +501,7 @@ func (cb *ChessBorad) TriggerChessBagUnlock(Lv int) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// 将棋子放入背包
|
||||
func (cb *ChessBorad) PutChessInBag(Grid, ChessId, EmitId int) error {
|
||||
err := cb.RemoveChess(ChessId)
|
||||
if err != nil {
|
||||
@ -548,6 +526,7 @@ func (cb *ChessBorad) PutChessInBag(Grid, ChessId, EmitId int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 将零件放入背包
|
||||
func (cb *ChessBorad) PutPartInBag(ChessId int) error {
|
||||
err := cb.RemoveChess(ChessId)
|
||||
if err != nil {
|
||||
@ -558,14 +537,10 @@ func (cb *ChessBorad) PutPartInBag(ChessId int) error {
|
||||
if ChessLv != ChessMaxLv { // 零件只能放入满级棋子
|
||||
return errors.New("part Lv is not max")
|
||||
}
|
||||
Num := 0
|
||||
v, ok := cb.PartBag.List[ChessId]
|
||||
if ok {
|
||||
Num = v.Num
|
||||
}
|
||||
if cb.PartBag.List == nil {
|
||||
cb.PartBag.List = make(map[int]PartBagGrid)
|
||||
}
|
||||
Num := cb.PartBag.List[ChessId].Num
|
||||
cb.PartBag.List[ChessId] = PartBagGrid{
|
||||
PartId: ChessId,
|
||||
Num: Num + 1,
|
||||
@ -573,6 +548,7 @@ func (cb *ChessBorad) PutPartInBag(ChessId int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 将棋子从背包取出
|
||||
func (cb *ChessBorad) TakeChessOutBag(Grid int) (int, error) {
|
||||
if Grid < 0 {
|
||||
cb.RemoveHonor(-Grid)
|
||||
@ -598,6 +574,7 @@ func (cb *ChessBorad) GetRetireEmit() map[string]int {
|
||||
return cb.Retire
|
||||
}
|
||||
|
||||
// 获取退役发射器的棋子列表
|
||||
func (cb *ChessBorad) GetRetireChess(EmitType string) []int {
|
||||
v, ok := cb.RetireChessMap[EmitType]
|
||||
if !ok {
|
||||
@ -614,6 +591,7 @@ func (cb *ChessBorad) GetRetireChess(EmitType string) []int {
|
||||
return v[:2]
|
||||
}
|
||||
|
||||
// 开始退役
|
||||
func (cb *ChessBorad) BeginRetire(EmitType string) error {
|
||||
if cb.Retire == nil {
|
||||
cb.Retire = make(map[string]int)
|
||||
@ -626,6 +604,7 @@ func (cb *ChessBorad) BeginRetire(EmitType string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 退役棋子处理
|
||||
func (cb *ChessBorad) RetireOrder(EmitType string) error {
|
||||
if cb.Retire[EmitType] != 1 {
|
||||
return errors.New("chess has not been retired")
|
||||
@ -646,6 +625,7 @@ func (cb *ChessBorad) RetireOrder(EmitType string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 完成退役
|
||||
func (cb *ChessBorad) FinishRetire(EmitType string) error {
|
||||
_, ok := cb.Retire[EmitType]
|
||||
if !ok {
|
||||
@ -655,6 +635,7 @@ func (cb *ChessBorad) FinishRetire(EmitType string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取资源宝箱奖励
|
||||
func (cb *ChessBorad) SourceChest(ChessId int) ([]*item.Item, error) {
|
||||
err := cb.RemoveChess(ChessId)
|
||||
if err != nil {
|
||||
@ -670,6 +651,7 @@ func (cb *ChessBorad) SourceChest(ChessId int) ([]*item.Item, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// 降低棋子等级
|
||||
func (cb *ChessBorad) SeparateChess(ChessId int) (int, error) {
|
||||
ChessLv := mergeDataCfg.GetLvById(ChessId)
|
||||
if ChessLv == 1 {
|
||||
@ -694,6 +676,7 @@ func (cb *ChessBorad) SeparateChess(ChessId int) (int, error) {
|
||||
return NewChess, nil
|
||||
}
|
||||
|
||||
// 提高棋子等级
|
||||
func (cb *ChessBorad) UpgradeChess(ChessId int) (int, error) {
|
||||
ChessLv := mergeDataCfg.GetLvById(ChessId)
|
||||
ChessMaxLv := mergeDataCfg.GetMaxLvById(ChessId)
|
||||
|
||||
@ -21,6 +21,8 @@ const (
|
||||
COLLECT_TYPE_EMOJI = 1
|
||||
COLLECT_TYPE_FACE = 2
|
||||
COLLECT_TYPE_AVATAR = 3
|
||||
|
||||
jackpotPreviewSize = 18 // 展示的奖池预览数量,同时作为补充阈値
|
||||
)
|
||||
|
||||
func (c *Collect) InitData() {
|
||||
@ -30,11 +32,17 @@ func (c *Collect) InitData() {
|
||||
if len(c.Jackpot) == 0 {
|
||||
c.Jackpot = initJackpot()
|
||||
}
|
||||
if len(c.Jackpot) <= 18 {
|
||||
c.ensureJackpot()
|
||||
}
|
||||
|
||||
// ensureJackpot 当奖池剩余少于预览数量时自动补充
|
||||
func (c *Collect) ensureJackpot() {
|
||||
if len(c.Jackpot) <= jackpotPreviewSize {
|
||||
c.Jackpot = initJackpot2(c.Jackpot)
|
||||
}
|
||||
}
|
||||
|
||||
// 获取收集奖励
|
||||
func (c *Collect) GetReward(Id, Num int) ([]*item.Item, error) {
|
||||
// 判断是否已领取
|
||||
for _, v := range c.Reward {
|
||||
@ -50,17 +58,13 @@ func (c *Collect) GetReward(Id, Num int) ([]*item.Item, error) {
|
||||
c.Reward = append(c.Reward, Id)
|
||||
JackpotId := 0
|
||||
JackpotId, c.Jackpot = GoUtil.PopSlice(c.Jackpot)
|
||||
if len(c.Jackpot) <= 18 {
|
||||
c.Jackpot = initJackpot2(c.Jackpot)
|
||||
}
|
||||
Items := collectCfg.GetJackpotItems(JackpotId)
|
||||
// 删除收集记录
|
||||
return Items, nil
|
||||
c.ensureJackpot()
|
||||
return collectCfg.GetJackpotItems(JackpotId), nil
|
||||
}
|
||||
|
||||
func (c *Collect) BackData() *msg.ResCollectInfo {
|
||||
var ItemsMsg []*msg.CollectItem
|
||||
for i := 0; i < 18; i++ {
|
||||
ItemsMsg := make([]*msg.CollectItem, 0, jackpotPreviewSize)
|
||||
for i := 0; i < jackpotPreviewSize; i++ {
|
||||
Items := collectCfg.GetJackpotItems(c.Jackpot[i])
|
||||
ItemsMsg = append(ItemsMsg, &msg.CollectItem{
|
||||
Id: int32(i + 1),
|
||||
@ -80,9 +84,5 @@ func initJackpot2(r1 []int) []int {
|
||||
}
|
||||
|
||||
func initJackpot() []int {
|
||||
Ids := collectCfg.GetJackpotId()
|
||||
r1 := GoUtil.ShuffleArray(Ids)
|
||||
r2 := GoUtil.ShuffleArray(Ids)
|
||||
r3 := GoUtil.ShuffleArray(Ids)
|
||||
return append(append(r1, r2...), r3...)
|
||||
return initJackpot2(initJackpot2(initJackpot2(nil)))
|
||||
}
|
||||
|
||||
@ -10,45 +10,47 @@ import (
|
||||
|
||||
func getTaskReward(Id, AreaId int) []*item.Item {
|
||||
switch Id {
|
||||
case 1:
|
||||
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: 5}}
|
||||
case 2:
|
||||
StarNum := int(50 * math.Pow(1.04, float64(AreaId)))
|
||||
return []*item.Item{{Id: item.ITEM_STAR_ID, Num: StarNum}}
|
||||
case 3:
|
||||
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: 10}}
|
||||
}
|
||||
default: // case 1 及其他
|
||||
return []*item.Item{{Id: item.ITEM_ENERGY_ID, Num: 5}}
|
||||
}
|
||||
}
|
||||
|
||||
// randJackpot 随机选取 num 个奖池项,约束:不允许连续两个 is_card=1 的项相邻。
|
||||
// 最多尝试 100 次,超时则返回最后一次结果。
|
||||
func randJackpot(jackpot map[int]dailyTaskCfg.Jackpot, num int) map[int][]*item.Item {
|
||||
Ids := GoUtil.GetMapKey(jackpot)
|
||||
r := make(map[int][]*item.Item)
|
||||
t := 0
|
||||
for {
|
||||
var lastIds1 []int
|
||||
for t := 0; t <= 100; t++ {
|
||||
Ids1 := GoUtil.RandSliceNum(Ids, num)
|
||||
sort.Ints(Ids1)
|
||||
b := 0
|
||||
finish := true
|
||||
lastIds1 = Ids1
|
||||
prevIsCard := 0
|
||||
valid := true
|
||||
for _, k := range Ids1 {
|
||||
jack := jackpot[k]
|
||||
if b == jack.Is_card && b == 1 {
|
||||
finish = false
|
||||
curIsCard := jackpot[k].Is_card
|
||||
if prevIsCard == 1 && curIsCard == 1 {
|
||||
valid = false
|
||||
break
|
||||
}
|
||||
b = jack.Is_card
|
||||
prevIsCard = curIsCard
|
||||
}
|
||||
|
||||
if finish {
|
||||
if valid {
|
||||
r := make(map[int][]*item.Item, num)
|
||||
for _, k := range Ids1 {
|
||||
r[k] = jackpot[k].Items
|
||||
}
|
||||
return r
|
||||
}
|
||||
t++
|
||||
if t > 100 {
|
||||
}
|
||||
// 超时:返回最后一次随机结果
|
||||
r := make(map[int][]*item.Item, num)
|
||||
for _, k := range lastIds1 {
|
||||
r[k] = jackpot[k].Items
|
||||
}
|
||||
return r
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -67,10 +67,6 @@ func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId int) {
|
||||
TaskId := GoUtil.RandSliceNum(TaskList1, 3)
|
||||
for i := 0; i < len(TaskId); i++ {
|
||||
Id := i + 1
|
||||
Lock := false
|
||||
if Id == 1 {
|
||||
Lock = true
|
||||
}
|
||||
questStr := TaskList[TaskId[i]]
|
||||
QuestProgress, err := quest.ParseQuest(questStr)
|
||||
if err != nil {
|
||||
@ -79,10 +75,15 @@ func (dt *DailyTaskMod) ZeroUpdate(Lv, AreaId int) {
|
||||
Items := getTaskReward(Id, AreaId)
|
||||
dt.DayTask[Id] = DailyTask{
|
||||
Items: Items,
|
||||
UnLock: Lock,
|
||||
UnLock: Id == 1,
|
||||
Quest: QuestProgress,
|
||||
}
|
||||
}
|
||||
// 更新 lastTask,下次不重复当前任务
|
||||
dt.lastTask = make(map[int]struct{}, len(TaskId))
|
||||
for _, id := range TaskId {
|
||||
dt.lastTask[id] = struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
func (dt *DailyTaskMod) WeekUpdate() {
|
||||
@ -90,14 +91,12 @@ func (dt *DailyTaskMod) WeekUpdate() {
|
||||
jackpotRand := randJackpot(jackpot, 5)
|
||||
jackpotId := GoUtil.GetMapKey(jackpotRand)
|
||||
sort.Ints(jackpotId)
|
||||
weekReward := make(map[int]WeekReward)
|
||||
i := 1
|
||||
for _, v := range jackpotId {
|
||||
weekReward[i] = WeekReward{
|
||||
weekReward := make(map[int]WeekReward, len(jackpotId)+1)
|
||||
for i, v := range jackpotId {
|
||||
weekReward[i+1] = WeekReward{
|
||||
Id: v,
|
||||
Items: jackpotRand[v],
|
||||
}
|
||||
i++
|
||||
}
|
||||
weekReward[6] = WeekReward{
|
||||
Id: 0,
|
||||
@ -194,15 +193,14 @@ func (dt *DailyTaskMod) GetWeekReward(id int) ([]*item.Item, error) {
|
||||
}
|
||||
|
||||
func (dt *DailyTaskMod) GetWeekReward2() []*item.Item {
|
||||
max := 0
|
||||
maxId := 0
|
||||
for id := range dt.WeekReward {
|
||||
if id > max {
|
||||
max = id
|
||||
if id > maxId {
|
||||
maxId = id
|
||||
}
|
||||
}
|
||||
max++
|
||||
if v, ok := dt.WeekReward[max]; ok {
|
||||
NeedActive := dailyTaskCfg.GetTaskActiveById(max)
|
||||
if v, ok := dt.WeekReward[maxId]; ok {
|
||||
NeedActive := dailyTaskCfg.GetTaskActiveById(maxId)
|
||||
if dt.Active < NeedActive {
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -41,12 +41,19 @@ func (d *Decorate) InitData() {
|
||||
if len(d.PartCost) == 0 {
|
||||
d.initPartCost(d.AreaId)
|
||||
}
|
||||
d.prunePartCost()
|
||||
}
|
||||
|
||||
// prunePartCost 删除 PartCost 中属于已过区域的条目,若清空则初始化当前区域的零件消耗
|
||||
func (d *Decorate) prunePartCost() {
|
||||
for k := range d.PartCost {
|
||||
AreaId := decorateCfg.GetAreaIdByIndoorId(k)
|
||||
if AreaId < d.AreaId {
|
||||
if decorateCfg.GetAreaIdByIndoorId(k) < d.AreaId {
|
||||
delete(d.PartCost, k)
|
||||
}
|
||||
}
|
||||
if len(d.PartCost) == 0 {
|
||||
d.initPartCost(d.AreaId)
|
||||
}
|
||||
}
|
||||
|
||||
// 装饰
|
||||
@ -62,7 +69,7 @@ func (d *Decorate) Decorate(areaId int, decorateId int) ([]*item.Item, error) {
|
||||
return nil, fmt.Errorf("decorateId not in areaId")
|
||||
}
|
||||
d.FinishList[decorateId] = struct{}{}
|
||||
d.Progress += 1
|
||||
d.Progress++
|
||||
Item := decorateCfg.GetProgressReward(areaId, d.Progress)
|
||||
Item1 := decorateCfg.GetDecoarteReward(areaId, decorateId)
|
||||
Item = append(Item, Item1...)
|
||||
@ -70,15 +77,7 @@ func (d *Decorate) Decorate(areaId int, decorateId int) ([]*item.Item, error) {
|
||||
d.AreaId++
|
||||
d.Progress = 0
|
||||
d.FinishList = make(map[int]struct{})
|
||||
for k := range d.PartCost {
|
||||
AreaId := decorateCfg.GetAreaIdByIndoorId(k)
|
||||
if AreaId < d.AreaId {
|
||||
delete(d.PartCost, k)
|
||||
}
|
||||
}
|
||||
if len(d.PartCost) == 0 {
|
||||
d.initPartCost(d.AreaId)
|
||||
}
|
||||
d.prunePartCost()
|
||||
}
|
||||
|
||||
d.DecorateNum++
|
||||
@ -108,9 +107,9 @@ func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int, DecorateOffIsExis
|
||||
PartItemList = PartItem.Items
|
||||
delete(d.PartCost, Id)
|
||||
}
|
||||
// 清理旧区域零件;若当前区域全部消耗完则预加载下一区域
|
||||
for k := range d.PartCost {
|
||||
AreaId := decorateCfg.GetAreaIdByIndoorId(k)
|
||||
if AreaId < d.AreaId {
|
||||
if decorateCfg.GetAreaIdByIndoorId(k) < d.AreaId {
|
||||
delete(d.PartCost, k)
|
||||
}
|
||||
}
|
||||
@ -120,6 +119,7 @@ func (d *Decorate) GetDecorateCostItem(AreaId, DecorateId int, DecorateOffIsExis
|
||||
return Items, PetExp, PartItemList
|
||||
}
|
||||
|
||||
// 一键装饰
|
||||
func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item, []*item.Item, int, []int, []interface{}, int) {
|
||||
DecorateAll := decorateCfg.GetAllSortIdByAreaId(d.AreaId)
|
||||
SubAlice := GoUtil.SubSlices(DecorateAll, GoUtil.MapIntToIntSlice(d.FinishList))
|
||||
@ -176,15 +176,7 @@ func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item,
|
||||
d.AreaId++
|
||||
d.Progress = 0
|
||||
d.FinishList = make(map[int]struct{})
|
||||
for k := range d.PartCost {
|
||||
AreaId := decorateCfg.GetAreaIdByIndoorId(k)
|
||||
if AreaId < d.AreaId {
|
||||
delete(d.PartCost, k)
|
||||
}
|
||||
}
|
||||
if len(d.PartCost) == 0 {
|
||||
d.initPartCost(d.AreaId)
|
||||
}
|
||||
d.prunePartCost()
|
||||
}
|
||||
SubItems = append(SubItems, item.NewItem(item.ITEM_STAR_ID, SubItem))
|
||||
return SubItems, AddItem, Num, DecorateList, Log, PetExp
|
||||
@ -192,7 +184,7 @@ func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item,
|
||||
|
||||
// 获取装饰信息
|
||||
func (d *Decorate) BackData() *msg.ResDecorateInfo {
|
||||
PartRes := []*msg.DecoratePart{}
|
||||
var PartRes []*msg.DecoratePart
|
||||
for k, v := range d.PartCost {
|
||||
PartRes = append(PartRes, &msg.DecoratePart{
|
||||
Id: int32(k),
|
||||
@ -207,6 +199,7 @@ func (d *Decorate) BackData() *msg.ResDecorateInfo {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取装饰奖励
|
||||
func (d *Decorate) GetDecorateReward(areaId int) ([]*item.Item, error) {
|
||||
if GoUtil.InArray(areaId, d.AreaReward) {
|
||||
return nil, fmt.Errorf("areaId already rewarded")
|
||||
@ -227,9 +220,10 @@ func (d *Decorate) GetDecorateNum() int {
|
||||
return d.DecorateNum
|
||||
}
|
||||
|
||||
// 获取零件
|
||||
func (d *Decorate) GetPart(Num int) map[int]int {
|
||||
d.initPartPool()
|
||||
res := make(map[int]int, 0)
|
||||
res := make(map[int]int)
|
||||
ClassNum := min(Num, 3)
|
||||
ClassList := d.GetPartClass(ClassNum)
|
||||
NewClassList := d.sortClass(ClassList)
|
||||
@ -243,40 +237,38 @@ func (d *Decorate) GetPart(Num int) map[int]int {
|
||||
|
||||
func (d *Decorate) sortClass(Class []int) []int {
|
||||
d.initPartPool()
|
||||
type sortClass struct {
|
||||
type sortItem struct {
|
||||
Id int
|
||||
Num int
|
||||
}
|
||||
sortList := make([]sortClass, 0)
|
||||
for _, v := range Class {
|
||||
sortList = append(sortList, sortClass{
|
||||
Id: v,
|
||||
Num: d.PartPool[v],
|
||||
})
|
||||
sortList := make([]sortItem, len(Class))
|
||||
for i, v := range Class {
|
||||
sortList[i] = sortItem{Id: v, Num: d.PartPool[v]}
|
||||
}
|
||||
sort.Slice(sortList, func(i, j int) bool {
|
||||
return sortList[i].Num > sortList[j].Num
|
||||
})
|
||||
res := make([]int, 0)
|
||||
for _, v := range sortList {
|
||||
res = append(res, v.Id)
|
||||
res := make([]int, len(Class))
|
||||
for i, v := range sortList {
|
||||
res[i] = v.Id
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func (d *Decorate) GetPartClass(Num int) []int {
|
||||
res := []int{}
|
||||
Id := 0
|
||||
res := make([]int, 0, Num)
|
||||
for range Num {
|
||||
if len(d.PartClassPool) == 0 {
|
||||
d.initPartClassPool()
|
||||
}
|
||||
Id, d.PartClassPool = GoUtil.PopSlice(d.PartClassPool)
|
||||
Id, newPool := GoUtil.PopSlice(d.PartClassPool)
|
||||
d.PartClassPool = newPool
|
||||
res = append(res, Id)
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
// 初始化零件类别池,优先保证每个类别至少出现一次
|
||||
func (d *Decorate) initPartClassPool() {
|
||||
if len(d.PartClassPool) == 0 {
|
||||
ClassList := decorateCfg.GetAllPartId()
|
||||
@ -304,6 +296,7 @@ func (d *Decorate) initPartPool() {
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化零件消耗,预加载当前区域和下一区域的零件消耗,减少玩家装饰时的卡顿感
|
||||
func (d *Decorate) initPartCost(AreaId int) {
|
||||
AllPartList := decorateCfg.GetPartNumByAreaId(AreaId)
|
||||
for k, v := range AllPartList {
|
||||
|
||||
@ -30,8 +30,8 @@ func (e *EmojiMod) InitData() {
|
||||
e.Set = make(map[int]int)
|
||||
}
|
||||
if e.List == nil {
|
||||
e.List = make(map[int]*Emoji)
|
||||
InitId := emojiCfg.GetInitList()
|
||||
e.List = make(map[int]*Emoji, len(InitId))
|
||||
for _, v := range InitId {
|
||||
e.List[v] = &Emoji{
|
||||
AddTime: now,
|
||||
@ -44,6 +44,7 @@ func (e *EmojiMod) GetEmojiNum() int {
|
||||
return len(e.List)
|
||||
}
|
||||
|
||||
// 设置表情,Id为0表示清空该类型表情
|
||||
func (e *EmojiMod) SetEmoji(Id, Type int) error {
|
||||
if Id == 0 {
|
||||
e.Set[Type] = Id
|
||||
@ -56,6 +57,7 @@ func (e *EmojiMod) SetEmoji(Id, Type int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 解锁表情,Time为解锁时长,单位为秒
|
||||
func (e *EmojiMod) Unlock(Id, Time int) error {
|
||||
v, ok := e.List[Id]
|
||||
if ok {
|
||||
@ -73,6 +75,7 @@ func (e *EmojiMod) Unlock(Id, Time int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取表情列表
|
||||
func (e *EmojiMod) GetEmojiSet() map[int32]int32 {
|
||||
return GoUtil.MapIntToInt32(e.Set)
|
||||
|
||||
|
||||
@ -63,24 +63,22 @@ func (e *EndlessMod) ZeroUpdate(MaxMoney float64, Lv int) {
|
||||
}
|
||||
}
|
||||
|
||||
var r map[int]*Endless
|
||||
r, e.Auto = initGrade(FirstMoney, e.Auto, Lv)
|
||||
for k, v := range r {
|
||||
e.List[k] = v
|
||||
money := FirstMoney
|
||||
for range 3 {
|
||||
e.appendGrade(money, Lv)
|
||||
money = endlessCfg.NextMoney(money)
|
||||
}
|
||||
NextMoney := endlessCfg.NextMoney(FirstMoney)
|
||||
r, e.Auto = initGrade(NextMoney, e.Auto, Lv)
|
||||
for k, v := range r {
|
||||
e.List[k] = v
|
||||
e.Id = 1
|
||||
}
|
||||
|
||||
NextMoney = endlessCfg.NextMoney(NextMoney)
|
||||
r, e.Auto = initGrade(NextMoney, e.Auto, Lv)
|
||||
// appendGrade 初始化一档礼包并合并到列表
|
||||
func (e *EndlessMod) appendGrade(money float64, Lv int) {
|
||||
r, autoNext := initGrade(money, e.Auto, Lv)
|
||||
e.Auto = autoNext
|
||||
for k, v := range r {
|
||||
e.List[k] = v
|
||||
}
|
||||
e.LastMoney = NextMoney
|
||||
e.Id = 1
|
||||
e.LastMoney = money
|
||||
}
|
||||
|
||||
// 领取免费礼包
|
||||
@ -94,15 +92,8 @@ func (e *EndlessMod) GetReward(Lv int) ([]*item.Item, error) {
|
||||
}
|
||||
delete(e.List, e.Id)
|
||||
e.Id++
|
||||
v1 := e.List[e.Id]
|
||||
if v1.Type == ENDLESS_TYPE_CHARGE { //领完一阶段 随机新的一阶段
|
||||
var r map[int]*Endless
|
||||
NextMoney := endlessCfg.NextMoney(e.LastMoney)
|
||||
r, e.Auto = initGrade(NextMoney, e.Auto, Lv)
|
||||
for k, v := range r {
|
||||
e.List[k] = v
|
||||
}
|
||||
e.LastMoney = NextMoney
|
||||
if v1 := e.List[e.Id]; v1 != nil && v1.Type == ENDLESS_TYPE_CHARGE { //领完一阶段 随机新的一阶段
|
||||
e.appendGrade(endlessCfg.NextMoney(e.LastMoney), Lv)
|
||||
}
|
||||
return v.Items, nil
|
||||
}
|
||||
|
||||
@ -8,7 +8,7 @@ import (
|
||||
)
|
||||
|
||||
// 初始化奖励
|
||||
func InitReward(Energy float64, Order, Lv int) []*item.Item {
|
||||
func InitReward(Energy float64, Lv int) []*item.Item {
|
||||
numRand := map[int]int{1: 30, 2: 60, 3: 10}
|
||||
Num := Util.RandMap(numRand)
|
||||
PerEnergy := endlessCfg.GetPerEnergy(item.ITEM_ENERGY_ID)
|
||||
@ -77,7 +77,7 @@ func initGrade(Money float64, Auto, Lv int) (map[int]*Endless, int) {
|
||||
result[Auto] = &Endless{
|
||||
ChargeId: Charge,
|
||||
Type: Type,
|
||||
Items: InitReward(Energy*Per[i-1], i, Lv),
|
||||
Items: InitReward(Energy*Per[i-1], Lv),
|
||||
}
|
||||
Auto++
|
||||
}
|
||||
|
||||
@ -19,10 +19,9 @@ type Face struct {
|
||||
}
|
||||
|
||||
func (f *FaceMod) Login(RegisterTime int64) {
|
||||
for k, v := range f.List {
|
||||
for _, v := range f.List {
|
||||
if v.AddTime == 0 {
|
||||
v.AddTime = RegisterTime
|
||||
f.List[k] = v
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -46,24 +45,25 @@ func (f *FaceMod) InitData() {
|
||||
}
|
||||
}
|
||||
|
||||
// 获取表情数量
|
||||
func (f *FaceMod) GetFaceNum() int {
|
||||
return len(f.List)
|
||||
}
|
||||
|
||||
// 设置表情,Id为0表示清空表情
|
||||
func (f *FaceMod) SetFace(Id int) error {
|
||||
if Id == 0 {
|
||||
f.SetId = Id
|
||||
return nil
|
||||
}
|
||||
if Id != 0 {
|
||||
if _, ok := f.List[Id]; !ok {
|
||||
return fmt.Errorf("face id not exist")
|
||||
}
|
||||
}
|
||||
f.SetId = Id
|
||||
return nil
|
||||
}
|
||||
|
||||
func (a *FaceMod) Unlock(Id, Time int) error {
|
||||
v, ok := a.List[Id]
|
||||
// 解锁表情
|
||||
func (f *FaceMod) Unlock(Id, Time int) error {
|
||||
v, ok := f.List[Id]
|
||||
if ok {
|
||||
if v.Ts == 0 {
|
||||
return nil
|
||||
@ -72,7 +72,7 @@ func (a *FaceMod) Unlock(Id, Time int) error {
|
||||
return nil
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
a.List[Id] = &Face{
|
||||
f.List[Id] = &Face{
|
||||
Ts: now + int64(Time),
|
||||
AddTime: now,
|
||||
}
|
||||
|
||||
@ -183,12 +183,12 @@ type LogInfo struct {
|
||||
Reward bool // 是否已领取奖励
|
||||
}
|
||||
|
||||
// 初始化数据
|
||||
func (f *FriendMod) InitData() {
|
||||
if f.FriendList == nil {
|
||||
f.FriendList = make(map[int]struct{})
|
||||
}
|
||||
if len(f.ActivityLog) == 0 {
|
||||
f.ActivityLog = make([]*ActLogInfo, 0)
|
||||
f.AddActLog(ACT_LOG_TYPE_FIRST_LOGIN, "")
|
||||
}
|
||||
if f.ApplyList == nil {
|
||||
@ -218,6 +218,7 @@ func (f *FriendMod) InitData() {
|
||||
}
|
||||
}
|
||||
|
||||
// 零点更新
|
||||
func (f *FriendMod) ZeroUpdate() {
|
||||
f.DailySponsor = f.GetDailySponsorLimit()
|
||||
f.DailyGetApply = 0
|
||||
@ -227,6 +228,7 @@ func (f *FriendMod) GetNpc() []int {
|
||||
return f.Npc
|
||||
}
|
||||
|
||||
// 增加NPC好友
|
||||
func (f *FriendMod) SetNpc(id int) error {
|
||||
if !friendCfg.IsNpcFriend(id) {
|
||||
return fmt.Errorf("not npc friend")
|
||||
@ -248,6 +250,7 @@ func (f *FriendMod) SetSyncId(Id int64) {
|
||||
f.Id = Id
|
||||
}
|
||||
|
||||
// 好友交互
|
||||
func (f *FriendMod) Interact(id, t int, T int64) {
|
||||
if _, ok := f.NewFriendList[id]; !ok {
|
||||
return
|
||||
@ -264,11 +267,12 @@ func (f *FriendMod) Interact(id, t int, T int64) {
|
||||
})
|
||||
}
|
||||
|
||||
// 获取好友交互时间
|
||||
func (f *FriendMod) GetInteractTime(id int) int64 {
|
||||
if _, ok := f.NewFriendList[id]; !ok {
|
||||
return 0
|
||||
}
|
||||
LastTime := int64(0)
|
||||
var LastTime int64
|
||||
// 获取最近一次拜访或点赞的时间
|
||||
for _, v := range f.NewFriendList[id].Interact {
|
||||
if v.VisitTime > LastTime {
|
||||
@ -278,6 +282,7 @@ func (f *FriendMod) GetInteractTime(id int) int64 {
|
||||
return LastTime
|
||||
}
|
||||
|
||||
// 获取好友添加时间
|
||||
func (f *FriendMod) GetAddTime(id int) int64 {
|
||||
if _, ok := f.NewFriendList[id]; !ok {
|
||||
return 0
|
||||
@ -285,14 +290,15 @@ func (f *FriendMod) GetAddTime(id int) int64 {
|
||||
return f.NewFriendList[id].AddTime
|
||||
}
|
||||
|
||||
// 增加好友
|
||||
func (f *FriendMod) AddFriend(id int) {
|
||||
f.NewFriendList[id] = &FriendInfo{
|
||||
AddTime: GoUtil.Now(),
|
||||
DelTime: 0,
|
||||
}
|
||||
delete(f.ApplyList, id)
|
||||
}
|
||||
|
||||
// 获取卡牌交换信息
|
||||
func (f *FriendMod) GetCardInfo(Id string) *card.CardInfo {
|
||||
v, ok := f.Card[Id]
|
||||
if !ok {
|
||||
@ -301,35 +307,39 @@ func (f *FriendMod) GetCardInfo(Id string) *card.CardInfo {
|
||||
return v
|
||||
}
|
||||
|
||||
// 设置卡牌交换信息
|
||||
func (f *FriendMod) SetCardInfo(CardInfo *card.CardInfo) {
|
||||
f.Card[CardInfo.Id] = CardInfo
|
||||
}
|
||||
|
||||
// 删除卡牌交换信息
|
||||
func (f *FriendMod) DelCardInfo(Id string) {
|
||||
delete(f.Card, Id)
|
||||
}
|
||||
|
||||
// 删除好友
|
||||
func (f *FriendMod) DelFriend(id int) {
|
||||
f.NewFriendList[id].DelTime = GoUtil.Now()
|
||||
}
|
||||
|
||||
// 检查是否好友
|
||||
func (f *FriendMod) CheckFriend(Uid int) bool {
|
||||
_, ok := f.NewFriendList[Uid]
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
return f.NewFriendList[Uid].DelTime == 0
|
||||
v, ok := f.NewFriendList[Uid]
|
||||
return ok && v.DelTime == 0
|
||||
}
|
||||
|
||||
// 获取好友数量
|
||||
func (f *FriendMod) GetFriendLen() int {
|
||||
return len(f.GetFriendList())
|
||||
}
|
||||
|
||||
// 拒绝好友申请
|
||||
func (f *FriendMod) RefuseApply(id int) {
|
||||
delete(f.ApplyList, id)
|
||||
delete(f.SendApply, id)
|
||||
}
|
||||
|
||||
// 检查好友申请
|
||||
func (f *FriendMod) CheckApply(id int) bool {
|
||||
_, ok := f.ApplyList[id]
|
||||
return ok
|
||||
@ -343,6 +353,8 @@ func (f *FriendMod) GetFriendNum() int {
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
// 获取好友列表
|
||||
func (f *FriendMod) GetFriendList() map[int]*FriendInfo {
|
||||
res := make(map[int]*FriendInfo)
|
||||
for k, v := range f.NewFriendList {
|
||||
@ -353,6 +365,7 @@ func (f *FriendMod) GetFriendList() map[int]*FriendInfo {
|
||||
return res
|
||||
}
|
||||
|
||||
// 获取好友uid列表
|
||||
func (f *FriendMod) GetSimpleFriendList() []int {
|
||||
rs := make([]int, 0, len(f.NewFriendList))
|
||||
for k, v := range f.NewFriendList {
|
||||
@ -363,6 +376,8 @@ func (f *FriendMod) GetSimpleFriendList() []int {
|
||||
}
|
||||
return rs
|
||||
}
|
||||
|
||||
// 检查是否有新的好友
|
||||
func (f *FriendMod) CheckAddBefore(uid int) bool {
|
||||
_, ok := f.NewFriendList[uid]
|
||||
return ok
|
||||
@ -389,6 +404,7 @@ func (f *FriendMod) CheckSendApply(Id int) bool {
|
||||
return ok
|
||||
}
|
||||
|
||||
// 获取发送申请时间
|
||||
func (f *FriendMod) GetSendApplyTime(Id int) int64 {
|
||||
if t, ok := f.SendApply[Id]; ok {
|
||||
return t
|
||||
@ -396,12 +412,14 @@ func (f *FriendMod) GetSendApplyTime(Id int) int64 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// 同意申请
|
||||
func (f *FriendMod) AgreeApply(UId int) {
|
||||
f.AddFriend(UId)
|
||||
delete(f.SendApply, UId)
|
||||
delete(f.ApplyList, UId)
|
||||
}
|
||||
|
||||
// 增加好友日志
|
||||
func (f *FriendMod) AddLog(Uid, Type int, Param string) int {
|
||||
f.AutoId++
|
||||
f.Log = append(f.Log, &LogInfo{
|
||||
@ -412,9 +430,7 @@ func (f *FriendMod) AddLog(Uid, Type int, Param string) int {
|
||||
Param: Param,
|
||||
})
|
||||
switch Type {
|
||||
case LOG_TYPE_HANDBOOK_UPVOTE:
|
||||
f.AddBubble(f.AutoId, Type, nil)
|
||||
case LOG_TYPE_PLAYROOM_UPVOTE:
|
||||
case LOG_TYPE_HANDBOOK_UPVOTE, LOG_TYPE_PLAYROOM_UPVOTE:
|
||||
f.AddBubble(f.AutoId, Type, nil)
|
||||
case LOG_TYPE_TREASURE_HELP:
|
||||
ItemNum := GoUtil.RandNum(2, 5)
|
||||
@ -426,6 +442,8 @@ func (f *FriendMod) AddLog(Uid, Type int, Param string) int {
|
||||
}
|
||||
return f.AutoId
|
||||
}
|
||||
|
||||
// 增加气泡
|
||||
func (f *FriendMod) AddBubble(Id, Type int, ItemList []*item.Item) {
|
||||
f.Bubble[Id] = &BubbleInfo{
|
||||
Id: Id,
|
||||
@ -435,7 +453,8 @@ func (f *FriendMod) AddBubble(Id, Type int, ItemList []*item.Item) {
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetBubbble(Id int) *msg.FriendBubbleInfo {
|
||||
// 获取气泡信息
|
||||
func (f *FriendMod) GetBubble(Id int) *msg.FriendBubbleInfo {
|
||||
if v, ok := f.Bubble[Id]; ok {
|
||||
return &msg.FriendBubbleInfo{
|
||||
Id: int32(v.Id),
|
||||
@ -460,6 +479,7 @@ func (f *FriendMod) BubbleBackData() *msg.ResFriendBubble {
|
||||
}
|
||||
}
|
||||
|
||||
// 金卡限时事件结束后, 重置金卡交换请求
|
||||
func (f *FriendMod) ResetGoldCardEx() {
|
||||
for _, v := range f.Card {
|
||||
if cardCfg.CheckCardIsGold(v.CardId) || cardCfg.CheckCardIsGold(v.ExId) {
|
||||
@ -468,6 +488,7 @@ func (f *FriendMod) ResetGoldCardEx() {
|
||||
}
|
||||
}
|
||||
|
||||
// 增加活动日志
|
||||
func (f *FriendMod) AddActLog(Type int, Param string) {
|
||||
f.ActivityLog = append(f.ActivityLog, &ActLogInfo{
|
||||
Type: Type,
|
||||
@ -479,6 +500,7 @@ func (f *FriendMod) AddActLog(Type int, Param string) {
|
||||
}
|
||||
}
|
||||
|
||||
// 时间线点赞
|
||||
func (f *FriendMod) Upvote(Id int) ([]*item.Item, int, error) {
|
||||
info := &LogInfo{}
|
||||
for _, v := range f.Log {
|
||||
@ -497,16 +519,15 @@ func (f *FriendMod) Upvote(Id int) ([]*item.Item, int, error) {
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, 5)}, info.Uid, nil
|
||||
}
|
||||
|
||||
// 获取时间线点赞奖励
|
||||
func (f *FriendMod) GetReward(Id int) ([]*item.Item, error) {
|
||||
info, ok := f.Bubble[Id]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("bubble not exist")
|
||||
}
|
||||
reward := []*item.Item{}
|
||||
var reward []*item.Item
|
||||
switch info.Type {
|
||||
case LOG_TYPE_HANDBOOK_UPVOTE:
|
||||
reward = append(reward, item.NewItem(item.ITEM_ENERGY_ID, 5))
|
||||
case LOG_TYPE_PLAYROOM_UPVOTE:
|
||||
case LOG_TYPE_HANDBOOK_UPVOTE, LOG_TYPE_PLAYROOM_UPVOTE:
|
||||
reward = append(reward, item.NewItem(item.ITEM_ENERGY_ID, 5))
|
||||
case LOG_TYPE_TREASURE_HELP:
|
||||
reward = append(reward, info.ItemList...)
|
||||
@ -517,6 +538,7 @@ func (f *FriendMod) GetReward(Id int) ([]*item.Item, error) {
|
||||
return reward, nil
|
||||
}
|
||||
|
||||
// 增加心愿单申请
|
||||
func (f *FriendMod) AddWishApply(Uid int64) error {
|
||||
for _, v := range f.Apply {
|
||||
if v.Type == APPLY_TYPE_WISH && v.Uid == Uid {
|
||||
@ -531,8 +553,9 @@ func (f *FriendMod) AddWishApply(Uid int64) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取心愿单申请列表
|
||||
func (f *FriendMod) GetWishApply() []*ApplyInfo {
|
||||
rs := []*ApplyInfo{}
|
||||
var rs []*ApplyInfo
|
||||
for _, v := range f.Apply {
|
||||
if v.Type == APPLY_TYPE_WISH {
|
||||
rs = append(rs, v)
|
||||
@ -541,18 +564,18 @@ func (f *FriendMod) GetWishApply() []*ApplyInfo {
|
||||
return rs
|
||||
}
|
||||
|
||||
// 同意心愿单申请
|
||||
func (f *FriendMod) ApplyWish(Uid int64) error {
|
||||
for k, v := range f.Apply {
|
||||
if v.Type == APPLY_TYPE_WISH && v.Uid == Uid {
|
||||
r := make([]*ApplyInfo, len(f.Apply)-1)
|
||||
copy(r, f.Apply[:k])
|
||||
f.Apply = append(r, f.Apply[k+1:]...)
|
||||
f.Apply = append(f.Apply[:k], f.Apply[k+1:]...)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("wish apply not exist")
|
||||
}
|
||||
|
||||
// 获取最后一次活动日志
|
||||
func (f *FriendMod) GetActLogLast() *ActLogInfo {
|
||||
if len(f.ActivityLog) == 0 {
|
||||
return nil
|
||||
@ -560,6 +583,7 @@ func (f *FriendMod) GetActLogLast() *ActLogInfo {
|
||||
return f.ActivityLog[len(f.ActivityLog)-1]
|
||||
}
|
||||
|
||||
// 增加待回复请求
|
||||
func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64, Items []*item.Item) *ReplyInfo {
|
||||
f.AutoId++
|
||||
ReplyInfo := &ReplyInfo{
|
||||
@ -567,7 +591,6 @@ func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64,
|
||||
Uid: Uid,
|
||||
Type: Type,
|
||||
Param: Param,
|
||||
Status: 0,
|
||||
AddTime: GoUtil.Now(),
|
||||
EndTime: EndTime,
|
||||
Items: Items,
|
||||
@ -576,6 +599,7 @@ func (f *FriendMod) AddReplyInfo(Uid int, Type int, Param string, EndTime int64,
|
||||
return ReplyInfo
|
||||
}
|
||||
|
||||
// 回复请求
|
||||
func (f *FriendMod) ReplyFriend(LogId int) *ReplyInfo {
|
||||
for _, v := range f.ReplyList {
|
||||
if v.Id == LogId {
|
||||
@ -587,21 +611,24 @@ func (f *FriendMod) ReplyFriend(LogId int) *ReplyInfo {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取每日赞助次数
|
||||
func (f *FriendMod) GetSponsor() int {
|
||||
return f.DailySponsor
|
||||
}
|
||||
|
||||
// 获取每日赞助上限,随好友数量增加而减少
|
||||
func (f *FriendMod) GetDailySponsorLimit() int {
|
||||
len := len(f.FriendList)
|
||||
if len < 5 {
|
||||
n := f.GetFriendNum()
|
||||
if n < 5 {
|
||||
return 3
|
||||
}
|
||||
if len <= 30 {
|
||||
if n <= 30 {
|
||||
return 2
|
||||
}
|
||||
return 1
|
||||
}
|
||||
|
||||
// 获取好友赞助体力奖励
|
||||
func (f *FriendMod) GetSponsorReward() ([]*item.Item, error) {
|
||||
if f.DailySponsor <= 0 {
|
||||
return nil, fmt.Errorf("no sponsor left")
|
||||
@ -611,19 +638,20 @@ func (f *FriendMod) GetSponsorReward() ([]*item.Item, error) {
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, itemNum)}, nil
|
||||
}
|
||||
|
||||
// 增加好友推荐记录
|
||||
func (f *FriendMod) AddRecommend(Uid int) {
|
||||
for _, v := range f.RecommendList {
|
||||
if v.Uid == Uid {
|
||||
v.Time = GoUtil.Now()
|
||||
now := GoUtil.Now()
|
||||
if v, ok := f.RecommendList[Uid]; ok {
|
||||
v.Time = now
|
||||
return
|
||||
}
|
||||
}
|
||||
f.RecommendList[Uid] = &Recommend{
|
||||
Uid: Uid,
|
||||
Time: GoUtil.Now(),
|
||||
Time: now,
|
||||
}
|
||||
}
|
||||
|
||||
// 获取好友推荐时间
|
||||
func (f *FriendMod) GetRecommendTime(uid int) int64 {
|
||||
if recommend, ok := f.RecommendList[uid]; ok {
|
||||
return recommend.Time
|
||||
|
||||
@ -29,40 +29,45 @@ const (
|
||||
GAME_STATUS_END = 2 // 结束
|
||||
)
|
||||
|
||||
// 初始化数据
|
||||
func (f *FriendTreasureMod) InitData() {
|
||||
if f.List == nil {
|
||||
f.List = make(map[int]*msg.TreasureInfo)
|
||||
}
|
||||
}
|
||||
|
||||
// 零点重置
|
||||
func (f *FriendTreasureMod) ZeroUpdate() {
|
||||
f.Shift = 0
|
||||
f.Pos = []int{}
|
||||
f.Pos = nil
|
||||
f.List = make(map[int]*msg.TreasureInfo)
|
||||
f.List2 = []int32{}
|
||||
f.Uids = []int64{}
|
||||
f.List2 = nil
|
||||
f.Uids = nil
|
||||
f.Status = GAME_STATUS_IDLE
|
||||
}
|
||||
|
||||
// 初始化游戏数据
|
||||
func (f *FriendTreasureMod) InitGame(List []*msg.TreasureInfo, List2 []int32) {
|
||||
for _, v := range List {
|
||||
f.List[int(v.Pos)] = v
|
||||
}
|
||||
f.List2 = List2
|
||||
f.Status = 1
|
||||
f.Status = GAME_STATUS_START
|
||||
}
|
||||
|
||||
// 增加星级
|
||||
func (f *FriendTreasureMod) AddStar(Star int) {
|
||||
f.Star = min(200, f.Star+Star)
|
||||
}
|
||||
|
||||
// 翻牌
|
||||
func (f *FriendTreasureMod) Flip(Pos int) ([]*item.Item, int64, error) {
|
||||
if f.Status == GAME_STATUS_IDLE {
|
||||
return nil, 0, fmt.Errorf("game not start")
|
||||
}
|
||||
f.Shift++
|
||||
Info := f.List[Pos]
|
||||
//log.Debug("pos:%v, info:%v", Pos, Info)
|
||||
Info.Status = GAME_STATUS_START
|
||||
if Info.Uid != 0 {
|
||||
log.Debug("uid:%v", Info.Uid)
|
||||
f.Uids = append(f.Uids, Info.Uid)
|
||||
@ -70,17 +75,16 @@ func (f *FriendTreasureMod) Flip(Pos int) ([]*item.Item, int64, error) {
|
||||
if Info.Type == FRIEND_TYPE_ALIVE {
|
||||
ProbMap := friendTreasureCfg.GetChestProb()
|
||||
Prob := GoUtil.RandMap(ProbMap)
|
||||
Info.Status = GAME_STATUS_START
|
||||
Items := friendTreasureCfg.GetChestItems(Prob)
|
||||
if Items == nil {
|
||||
if Items != nil {
|
||||
f.BoxItems = append(f.BoxItems, Items...)
|
||||
}
|
||||
return Items, Info.Uid, nil
|
||||
}
|
||||
Info.Status = GAME_STATUS_START
|
||||
return nil, 0, nil
|
||||
}
|
||||
|
||||
// 结束游戏
|
||||
func (f *FriendTreasureMod) EndGame() ([]*item.Item, int, error) {
|
||||
if f.Status == GAME_STATUS_IDLE {
|
||||
return nil, 0, fmt.Errorf("game is over")
|
||||
@ -100,11 +104,12 @@ func (f *FriendTreasureMod) EndGame() ([]*item.Item, int, error) {
|
||||
return Reward, FriendItemNum, nil
|
||||
}
|
||||
|
||||
// 重置游戏数据
|
||||
func (f *FriendTreasureMod) ResetGame() {
|
||||
f.Star = 0
|
||||
f.Shift = 0
|
||||
f.Status = GAME_STATUS_END
|
||||
f.BoxItems = []*item.Item{}
|
||||
f.BoxItems = nil
|
||||
}
|
||||
|
||||
func (f *FriendTreasureMod) NotifyStar() *msg.ResFriendTreasureStar {
|
||||
@ -114,7 +119,7 @@ func (f *FriendTreasureMod) NotifyStar() *msg.ResFriendTreasureStar {
|
||||
}
|
||||
|
||||
func (f *FriendTreasureMod) BackData() *msg.ResFriendTreasure {
|
||||
TreasureInfoList := make([]*msg.TreasureInfo, 0)
|
||||
TreasureInfoList := make([]*msg.TreasureInfo, 0, len(f.List))
|
||||
|
||||
for _, v := range f.List {
|
||||
TreasureInfoList = append(TreasureInfoList, v)
|
||||
|
||||
@ -47,7 +47,6 @@ func (g *GuessColorMod) InitData() {
|
||||
Name: randnameCfg.GetRandName(),
|
||||
Face: GoUtil.RandNum(1, 10),
|
||||
Avatar: GoUtil.RandNum(1, 10),
|
||||
Progress: 0,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -56,7 +55,7 @@ func (g *GuessColorMod) Login(Id int) int {
|
||||
OldId := g.Id
|
||||
if Id == 0 {
|
||||
g.Id = 0
|
||||
return g.Id
|
||||
return 0
|
||||
}
|
||||
if g.Id == Id {
|
||||
return 0
|
||||
@ -67,11 +66,10 @@ func (g *GuessColorMod) Login(Id int) int {
|
||||
Name: randnameCfg.GetRandName(),
|
||||
Face: GoUtil.RandNum(1, 10),
|
||||
Avatar: GoUtil.RandNum(1, 10),
|
||||
Progress: 0,
|
||||
}
|
||||
g.Guess = 0
|
||||
g.MapList = make([]map[int32]int32, 0)
|
||||
g.OMap = make(map[int32]int32)
|
||||
g.MapList = nil
|
||||
g.OMap = nil
|
||||
g.WinTime = guesscolorCfg.GetWinTime(g.Pass)
|
||||
return OldId
|
||||
}
|
||||
@ -88,6 +86,7 @@ func (g *GuessColorMod) FirstIn() []*item.Item {
|
||||
return guesscolorCfg.GetFirstItem(g.Id)
|
||||
}
|
||||
|
||||
// 进行猜色
|
||||
func (g *GuessColorMod) Take(Map map[int32]int32, OMap map[int32]int32) {
|
||||
if len(Map) > 0 {
|
||||
g.MapList = append(g.MapList, Map)
|
||||
@ -96,6 +95,7 @@ func (g *GuessColorMod) Take(Map map[int32]int32, OMap map[int32]int32) {
|
||||
g.OMap = OMap
|
||||
}
|
||||
|
||||
// 获取失败奖励
|
||||
func (g *GuessColorMod) GetLoseItem() []*item.Item {
|
||||
Items := guesscolorCfg.GetLoseItem(g.Id)
|
||||
Num := guesscolorCfg.GetPassNum(g.Pass)
|
||||
@ -110,11 +110,11 @@ func (g *GuessColorMod) GetLoseItem() []*item.Item {
|
||||
return item.MutilItem(Items, Num)
|
||||
}
|
||||
|
||||
// 获取奖励
|
||||
func (g *GuessColorMod) GetReward() ([]*item.Item, error) {
|
||||
if g.Pass == 0 {
|
||||
return nil, fmt.Errorf("not pass")
|
||||
}
|
||||
// Num := guesscolorCfg.GetPassNum(g.Pass)
|
||||
if g.Guess < g.WinTime {
|
||||
return nil, fmt.Errorf("guess process not finish")
|
||||
}
|
||||
@ -126,7 +126,7 @@ func (g *GuessColorMod) GetReward() ([]*item.Item, error) {
|
||||
g.Pass++
|
||||
g.Guess = 0
|
||||
g.WinTime = guesscolorCfg.GetWinTime(g.Pass)
|
||||
g.MapList = make([]map[int32]int32, 0)
|
||||
g.OMap = make(map[int32]int32)
|
||||
g.MapList = nil
|
||||
g.OMap = nil
|
||||
return Item, nil
|
||||
}
|
||||
|
||||
@ -24,10 +24,7 @@ func (g *Guide) InitData() {
|
||||
|
||||
func (g *Guide) GetReward(Id int) ([]*item.Item, error) {
|
||||
Items, Num := guidecfg.GetGuideReward(Id)
|
||||
n, ok := g.Reward[Id]
|
||||
if !ok {
|
||||
n = 0
|
||||
}
|
||||
n := g.Reward[Id]
|
||||
if n >= Num {
|
||||
return nil, fmt.Errorf("Guide GetReward Id:%v has been received", Id)
|
||||
}
|
||||
@ -35,11 +32,6 @@ func (g *Guide) GetReward(Id int) ([]*item.Item, error) {
|
||||
return Items, nil
|
||||
}
|
||||
|
||||
func (g *Guide) CheckFinishFirstTask() bool {
|
||||
_, ok := g.Reward[4]
|
||||
return ok
|
||||
}
|
||||
|
||||
func (g *Guide) BackData() *msg.ResGuideInfo {
|
||||
return &msg.ResGuideInfo{
|
||||
Reward: GoUtil.MapIntToInt32(g.Reward),
|
||||
|
||||
@ -56,6 +56,7 @@ func (gt *GuideTaskMod) Login() {
|
||||
gt.Trigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_GUIDE_LOGIN, A: []interface{}{len(gt.LoginDay)}})
|
||||
}
|
||||
|
||||
// 解锁引导任务
|
||||
func (gt *GuideTaskMod) Unlock(lv int) bool {
|
||||
UnLockLv := GuideTaskCfg.GetUnlockLv()
|
||||
if lv >= UnLockLv && gt.UnlockTime == 0 {
|
||||
@ -66,12 +67,14 @@ func (gt *GuideTaskMod) Unlock(lv int) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
const guideTaskOpenSeconds = 96 * 3600 // 96小时内可以打开
|
||||
|
||||
func (gt *GuideTaskMod) CheckOpen() bool {
|
||||
// 检查是否可以打开引导任务
|
||||
if gt.UnlockTime == 0 {
|
||||
return false
|
||||
}
|
||||
return GoUtil.Now()-gt.UnlockTime <= 96*3600 // 96小时内可以打开
|
||||
return GoUtil.Now()-gt.UnlockTime <= guideTaskOpenSeconds
|
||||
}
|
||||
|
||||
func (gt *GuideTaskMod) Trigger(Tr *quest.Trigger) bool {
|
||||
@ -79,37 +82,36 @@ func (gt *GuideTaskMod) Trigger(Tr *quest.Trigger) bool {
|
||||
return false
|
||||
}
|
||||
update := false
|
||||
for k, v := range gt.Tasks {
|
||||
for _, v := range gt.Tasks {
|
||||
if v.Status != quest.QUEST_STATUS_UNFINISH {
|
||||
continue
|
||||
}
|
||||
if v.Quest.Label == quest.TRIGGER_LABEL_GUIDE_LOGIN {
|
||||
v.Quest.A = []interface{}{gt.UnlockTime}
|
||||
}
|
||||
up := quest.TriggerQuestProgress(&v.Quest, Tr)
|
||||
if up {
|
||||
update = true
|
||||
}
|
||||
update = quest.TriggerQuestProgress(&v.Quest, Tr) || update
|
||||
if v.Quest.Status {
|
||||
v.Status = quest.QUEST_STATUS_FINISH
|
||||
}
|
||||
gt.Tasks[k] = v
|
||||
}
|
||||
return update
|
||||
}
|
||||
|
||||
// 获取任务奖励
|
||||
func (gt *GuideTaskMod) GetTaskReward(Id int) ([]*item.Item, error) {
|
||||
if task, ok := gt.Tasks[Id]; ok {
|
||||
if task.Status == quest.QUEST_STATUS_FINISH {
|
||||
task, ok := gt.Tasks[Id]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("guide task %d not found", Id)
|
||||
}
|
||||
if task.Status != quest.QUEST_STATUS_FINISH {
|
||||
return nil, fmt.Errorf("guide task %d not finished or already claimed", Id)
|
||||
}
|
||||
task.Status = quest.QUEST_STATUS_REWARD
|
||||
Active := GuideTaskCfg.GetTaskActive(Id)
|
||||
gt.Active += Active
|
||||
gt.Active += GuideTaskCfg.GetTaskActive(Id)
|
||||
return GuideTaskCfg.GetTaskRewardById(Id), nil
|
||||
}
|
||||
}
|
||||
return nil, fmt.Errorf("no task id %d", Id)
|
||||
}
|
||||
|
||||
// 获取活跃度奖励
|
||||
func (gt *GuideTaskMod) GetActiveReward(Id int) ([]*item.Item, error) {
|
||||
for _, v := range gt.Reward {
|
||||
if v == Id {
|
||||
@ -131,7 +133,7 @@ func (gt *GuideTaskMod) BackData() *msg.ResGuideTask {
|
||||
if !gt.CheckOpen() {
|
||||
return nil
|
||||
}
|
||||
resTask := make(map[int32]*msg.GuideTask)
|
||||
resTask := make(map[int32]*msg.GuideTask, len(gt.Tasks))
|
||||
for k, v := range gt.Tasks {
|
||||
resTask[int32(k)] = &msg.GuideTask{
|
||||
Status: int32(v.Status),
|
||||
|
||||
@ -67,23 +67,23 @@ func (h *Handbook) CollectItem(Id string, AllChess []int) ([]*item.Item, error)
|
||||
if _, ok := h.Collect[Id]; ok {
|
||||
return nil, fmt.Errorf("已经领取过该奖励")
|
||||
}
|
||||
h.Collect[Id] = struct{}{}
|
||||
Reward := handbookCfg.GetHandbookReward(Id)
|
||||
if Reward == nil {
|
||||
return nil, fmt.Errorf("奖励不存在")
|
||||
}
|
||||
h.Collect[Id] = struct{}{}
|
||||
return Reward, nil
|
||||
}
|
||||
|
||||
func (h *Handbook) BackData() *msg.Handbook {
|
||||
var BookList []*msg.HandbookInfo
|
||||
BookList := make([]*msg.HandbookInfo, 0, len(h.BookList))
|
||||
for k, v := range h.BookList {
|
||||
BookList = append(BookList, &msg.HandbookInfo{
|
||||
ChessId: int32(k),
|
||||
Status: int32(v),
|
||||
})
|
||||
}
|
||||
Collect := []string{}
|
||||
Collect := make([]string, 0, len(h.Collect))
|
||||
for k := range h.Collect {
|
||||
Collect = append(Collect, k)
|
||||
}
|
||||
|
||||
@ -27,10 +27,11 @@ func (i *InviteMod) GetReward(Index int) ([]*item.Item, error) {
|
||||
if Index <= i.GetIndex {
|
||||
return nil, fmt.Errorf("index error")
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
for i.GetIndex < Index {
|
||||
i.GetIndex++
|
||||
Need, Reward := inviteCfg.GetInviteReward(i.GetIndex)
|
||||
var Items []*item.Item
|
||||
cur := i.GetIndex
|
||||
for cur < Index {
|
||||
cur++
|
||||
Need, Reward := inviteCfg.GetInviteReward(cur)
|
||||
if Need == 0 {
|
||||
return nil, fmt.Errorf("invite reward not found")
|
||||
}
|
||||
@ -39,6 +40,7 @@ func (i *InviteMod) GetReward(Index int) ([]*item.Item, error) {
|
||||
}
|
||||
Items = item.Merge(Items, Reward)
|
||||
}
|
||||
i.GetIndex = cur
|
||||
return Items, nil
|
||||
}
|
||||
|
||||
|
||||
@ -23,7 +23,7 @@ const (
|
||||
ITEM_FIVE_STAR_CARD_PACK = 100008
|
||||
ITEM_RACING_BATTERY_ID = 100027
|
||||
ITEM_LAUNCHER_ID = 1602
|
||||
ITEM_LAUNCHER_lOW_ID = 1601
|
||||
ITEM_LAUNCHER_LOW_ID = 1601
|
||||
ITEM_ENERGY_GIFT_ID = 562
|
||||
ITEM_DIAMOND_LV2_ID = 502
|
||||
ITEM_PLAYROOM_BOX_LOW_ID = 101445
|
||||
@ -43,7 +43,7 @@ const (
|
||||
ITEM_TYPE_BAG = 99 // 背包
|
||||
ITEM_TYPE_CHESS = 100 // 棋子
|
||||
ITEM_TYPE_CARD_PACK = 101 // 卡包
|
||||
ITEM_TYPE_LIMIED_TIME_EVENT = 102 //限时事件
|
||||
ITEM_TYPE_LIMITED_TIME_EVENT = 102 //限时事件
|
||||
ITEM_TYPE_PIGGY_BANK = 103 // 猪猪银行
|
||||
ITEM_TYPE_MASTER_CARD = 104 // 万能卡
|
||||
ITEM_TYPE_AVATAR = 105 // 头像框
|
||||
@ -70,10 +70,10 @@ func (i *ItemMod) InitData() {
|
||||
}
|
||||
|
||||
func (i *ItemMod) AddItem(id, num int) error {
|
||||
i.Data[id] += num
|
||||
if i.Data[id] < 0 {
|
||||
if i.Data[id]+num < 0 {
|
||||
return fmt.Errorf("item %d not enough", id)
|
||||
}
|
||||
i.Data[id] += num
|
||||
i.Cache[id] += num
|
||||
return nil
|
||||
}
|
||||
@ -104,7 +104,7 @@ func (i *ItemMod) CheckItem(id, num int) bool {
|
||||
}
|
||||
|
||||
func (i *ItemMod) BackData() *msg.ResItem {
|
||||
var data = make(map[int32]int32)
|
||||
data := make(map[int32]int32, len(i.Data))
|
||||
for k, v := range i.Data {
|
||||
data[int32(k)] = int32(v)
|
||||
}
|
||||
@ -114,7 +114,7 @@ func (i *ItemMod) BackData() *msg.ResItem {
|
||||
}
|
||||
|
||||
func (i *ItemMod) NotifyItem() *msg.ItemNotify {
|
||||
var data = make(map[int32]int32)
|
||||
data := make(map[int32]int32, len(i.Cache))
|
||||
for k, v := range i.Cache {
|
||||
data[int32(k)] = int32(v)
|
||||
}
|
||||
@ -137,8 +137,9 @@ func ParseItem(item interface{}) []*Item {
|
||||
if item == nil {
|
||||
return nil
|
||||
}
|
||||
itemList := make([]*Item, 0)
|
||||
for _, v := range item.([]interface{}) {
|
||||
raw := item.([]interface{})
|
||||
itemList := make([]*Item, 0, len(raw))
|
||||
for _, v := range raw {
|
||||
v1 := v.(map[string]interface{})
|
||||
itemList = append(itemList, NewItem(int(v1["Id"].(float64)), int(v1["Num"].(float64))))
|
||||
}
|
||||
@ -150,7 +151,7 @@ func ItemToMsg(items []*Item) []*msg.ItemInfo {
|
||||
if items == nil {
|
||||
return nil
|
||||
}
|
||||
itemList := make([]*msg.ItemInfo, 0)
|
||||
itemList := make([]*msg.ItemInfo, 0, len(items))
|
||||
for _, v := range items {
|
||||
itemList = append(itemList, &msg.ItemInfo{
|
||||
Id: int32(v.Id),
|
||||
|
||||
@ -118,23 +118,7 @@ func (l *LimitedTimeEventMod) InitData(Lv int) {
|
||||
SelectNum := limitedTimeEventCfg.GetProgressSelectNum(Lv)
|
||||
BonusLv := limitedTimeEventCfg.GetBonusLv(Lv)
|
||||
RandMap := limitedTimeEventCfg.GetProgressRewardRand(BonusLv)
|
||||
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
|
||||
l.fillProgressReward(RandMap, SelectNum)
|
||||
}
|
||||
}
|
||||
|
||||
@ -198,7 +182,11 @@ func (l *LimitedTimeEventMod) Trigger(Lv int) (int, []int, []int) {
|
||||
continue
|
||||
}
|
||||
NowRemain := (v.StartT + v.Remian) - Now
|
||||
Remain = GoUtil.IfTrue(Remain > 0, min(Remain, int(NowRemain)), int(NowRemain)).(int)
|
||||
if Remain > 0 {
|
||||
Remain = min(Remain, int(NowRemain))
|
||||
} else {
|
||||
Remain = int(NowRemain)
|
||||
}
|
||||
}
|
||||
return Remain, TimeoutEvent, AddEvent
|
||||
}
|
||||
@ -364,25 +352,27 @@ func (l *LimitedTimeEventMod) SelectProgressReward(Id, Lv, Energy int) ([]*item.
|
||||
// 参与猫咪大甩卖活动时,猫咪大甩卖事件不进池子
|
||||
delete(RandMap, limitedTimeEventCfg.GetJackpotIdByType(EVENT_TYPE_CAT_DAY_SALE))
|
||||
}
|
||||
n := 0
|
||||
r := make([]int, 0)
|
||||
l.fillProgressReward(RandMap, SelectNum)
|
||||
l.FirstReward = true
|
||||
return Item, limitedTimeEventCfg.GetProgressRewardType(RewardId), OrderNum, RewardList, nil
|
||||
}
|
||||
|
||||
// fillProgressReward 随机填充进度奖励(最多尝试10次避免与上次相同)
|
||||
func (l *LimitedTimeEventMod) fillProgressReward(RandMap map[int]int, SelectNum int) {
|
||||
LastOption := l.LastOption
|
||||
for n < 10 {
|
||||
n++
|
||||
var r []int
|
||||
for n := 0; 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
|
||||
l.FirstReward = true
|
||||
return Item, limitedTimeEventCfg.GetProgressRewardType(RewardId), OrderNum, RewardList, nil
|
||||
}
|
||||
|
||||
func (l *LimitedTimeEventMod) RemoveSuperOrder() bool {
|
||||
@ -410,10 +400,10 @@ func (l *LimitedTimeEventMod) LuckyCat(ChessId int) error {
|
||||
}
|
||||
|
||||
func (l *LimitedTimeEventMod) AddCatTrickEnergy(Energy int) {
|
||||
if l.EventList[EVENT_TYPE_CAT_TRICK] == nil {
|
||||
Event, ok := l.EventList[EVENT_TYPE_CAT_TRICK]
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
Event := l.EventList[EVENT_TYPE_CAT_TRICK]
|
||||
if Event.Remian+Event.StartT <= GoUtil.Now() {
|
||||
return
|
||||
}
|
||||
@ -423,26 +413,15 @@ func (l *LimitedTimeEventMod) AddCatTrickEnergy(Energy int) {
|
||||
}
|
||||
|
||||
func (l *LimitedTimeEventMod) SubPaybackDay() error {
|
||||
// 2026.1.20 改版 不限制次数
|
||||
// if l.EventList[EVENT_TYPE_PAYBACK_DAY] == nil {
|
||||
// return fmt.Errorf("PaybackDay event not exist")
|
||||
// }
|
||||
// d := l.EventList[EVENT_TYPE_PAYBACK_DAY].D.(*PaybackDay)
|
||||
// if d.count <= 0 {
|
||||
// return fmt.Errorf("PaybackDay count is 0")
|
||||
// }
|
||||
// d.count--
|
||||
// if d.count <= 0 {
|
||||
// delete(l.EventList, EVENT_TYPE_PAYBACK_DAY)
|
||||
// }
|
||||
return nil
|
||||
}
|
||||
|
||||
func (l *LimitedTimeEventMod) GetCatTrickReward() ([]*item.Item, error) {
|
||||
if l.EventList[EVENT_TYPE_CAT_TRICK] == nil {
|
||||
Event, ok := l.EventList[EVENT_TYPE_CAT_TRICK]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("CatTrick event not exist")
|
||||
}
|
||||
d := l.EventList[EVENT_TYPE_CAT_TRICK].D.(*CatTrick)
|
||||
d := Event.D.(*CatTrick)
|
||||
if d.Energy < 100 {
|
||||
return nil, fmt.Errorf("CatTrick energy not enough")
|
||||
}
|
||||
@ -464,13 +443,11 @@ func initEventInfo(E *LTEInfo, EventType int) {
|
||||
case EVENT_TYPE_MONEY_CAT:
|
||||
E.D = &MoneyCat{
|
||||
Id: 1,
|
||||
EndTime: 0,
|
||||
Mul: 1.1,
|
||||
}
|
||||
case EVENT_TYPE_LUCKY_CAT:
|
||||
MaxEarning := limitedTimeEventCfg.GetLuckyCatMaxEarning(int(E.Remian))
|
||||
E.D = &LuckyCat{
|
||||
Earnings: 0,
|
||||
MaxEarings: MaxEarning,
|
||||
}
|
||||
case EVENT_TYPE_PAYBACK_DAY:
|
||||
@ -511,7 +488,7 @@ func addEventInfo(E *LTEInfo, EventType, Duration int) {
|
||||
func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent {
|
||||
Cd := 0
|
||||
Mul := 0.0
|
||||
Param := make(map[string]int32, 0)
|
||||
Param := make(map[string]int32)
|
||||
ShowTime := int32(e.StartT + e.Remian)
|
||||
EndTime := int32(e.StartT + e.Remian)
|
||||
switch t {
|
||||
@ -550,13 +527,14 @@ func getLimitEventMsg(t int, e *LTEInfo) *msg.LimitEvent {
|
||||
}
|
||||
}
|
||||
|
||||
func (l LimitedTimeEventMod) EndCatDaySale() {
|
||||
func (l *LimitedTimeEventMod) EndCatDaySale() {
|
||||
delete(l.EventList, EVENT_TYPE_CAT_DAY_SALE)
|
||||
}
|
||||
|
||||
func (l LimitedTimeEventMod) GetCatDaySaleEndTime() int64 {
|
||||
if l.EventList[EVENT_TYPE_CAT_DAY_SALE] == nil {
|
||||
func (l *LimitedTimeEventMod) GetCatDaySaleEndTime() int64 {
|
||||
v, ok := l.EventList[EVENT_TYPE_CAT_DAY_SALE]
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
return l.EventList[EVENT_TYPE_CAT_DAY_SALE].StartT + l.EventList[EVENT_TYPE_CAT_DAY_SALE].Remian
|
||||
return v.StartT + v.Remian
|
||||
}
|
||||
|
||||
@ -85,11 +85,9 @@ func (m *MailMod) SendMail(mail *MailStruct) int {
|
||||
Title: mail.Title,
|
||||
SubTitle: mail.SubTitle,
|
||||
Content: mail.Content,
|
||||
|
||||
TitleEn: mail.TitleEn,
|
||||
SubTitleEn: mail.SubTitleEn,
|
||||
ContentEn: mail.ContentEn,
|
||||
|
||||
TitlePtBr: mail.TitlePtBr,
|
||||
SubTitlePtBr: mail.SubTitlePtBr,
|
||||
ContentPtBr: mail.ContentPtBr,
|
||||
@ -99,7 +97,6 @@ func (m *MailMod) SendMail(mail *MailStruct) int {
|
||||
Items: mail.Items,
|
||||
Send: GoUtil.Now(),
|
||||
Type: mail.Type,
|
||||
Status: MAIL_STATUS_IDLE,
|
||||
}
|
||||
return m.AutoId
|
||||
}
|
||||
@ -146,14 +143,30 @@ func (m *MailMod) Del(id int) error {
|
||||
func (m *MailMod) BackData() *msg.ResMailList {
|
||||
return &msg.ResMailList{}
|
||||
res := &msg.ResMailList{
|
||||
MailList: make(map[int32]*msg.MailInfo),
|
||||
MailList: make(map[int32]*msg.MailInfo, len(m.List)),
|
||||
}
|
||||
for k, v := range m.List {
|
||||
if v.Status == MAIL_STATUS_DEL {
|
||||
continue
|
||||
}
|
||||
res.MailList[int32(k)] = &msg.MailInfo{
|
||||
Id: int32(k),
|
||||
res.MailList[int32(k)] = mailInfoToMsg(k, v)
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func (m *MailMod) NotifyMail(Id int) *msg.MailNotify {
|
||||
mailInfo, ok := m.List[Id]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return &msg.MailNotify{
|
||||
Info: mailInfoToMsg(Id, mailInfo),
|
||||
}
|
||||
}
|
||||
|
||||
func mailInfoToMsg(id int, v *MailInfo) *msg.MailInfo {
|
||||
return &msg.MailInfo{
|
||||
Id: int32(id),
|
||||
Title: v.Title,
|
||||
SubTitle: v.SubTitle,
|
||||
Content: v.Content,
|
||||
@ -172,35 +185,6 @@ func (m *MailMod) BackData() *msg.ResMailList {
|
||||
Time: int32(v.Send),
|
||||
}
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func (m *MailMod) NotifyMail(Id int) *msg.MailNotify {
|
||||
mailInfo := m.List[Id]
|
||||
return &msg.MailNotify{
|
||||
Info: &msg.MailInfo{
|
||||
Id: int32(Id),
|
||||
Title: mailInfo.Title,
|
||||
Content: mailInfo.Content,
|
||||
ContentEn: mailInfo.ContentEn,
|
||||
SubTitle: mailInfo.SubTitle,
|
||||
SubTitleEn: mailInfo.SubTitleEn,
|
||||
TitleEn: mailInfo.TitleEn,
|
||||
|
||||
TitlePtBr: mailInfo.TitlePtBr,
|
||||
SubTitlePtBr: mailInfo.SubTitlePtBr,
|
||||
ContentPtBr: mailInfo.ContentPtBr,
|
||||
|
||||
TitleEsLa: mailInfo.TitleEsLatam,
|
||||
SubTitleEsLa: mailInfo.SubTitleEsLatam,
|
||||
ContentEsLa: mailInfo.ContentEsLatam,
|
||||
Type: int32(mailInfo.Type),
|
||||
Items: item.ItemToMsg(mailInfo.Items),
|
||||
Status: int32(mailInfo.Status),
|
||||
Time: int32(mailInfo.Send),
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MailMod) GetTriggerMail() []int {
|
||||
return m.TriggerMail
|
||||
|
||||
@ -31,10 +31,10 @@ func (m *MiningMod) Login(Id int) int {
|
||||
}
|
||||
m.Id = Id
|
||||
m.Map = make(map[int32]string)
|
||||
m.Gem = make([]int, 0)
|
||||
m.Gem = nil
|
||||
m.Pass = 1
|
||||
m.Mining = 0
|
||||
return m.Id
|
||||
return OldId
|
||||
}
|
||||
|
||||
func (m *MiningMod) ZeroUpdate(Id int) {
|
||||
@ -58,29 +58,29 @@ func (m *MiningMod) GetMining() int {
|
||||
}
|
||||
|
||||
func (m *MiningMod) Take(Map map[int32]string, Gem int) ([]*item.Item, error) {
|
||||
m.Map = Map
|
||||
m.Mining++
|
||||
AreaNum := miningCfg.GetPassArea(m.Pass)
|
||||
if AreaNum == 0 {
|
||||
return nil, fmt.Errorf("pass is not exist")
|
||||
}
|
||||
if m.Mining > AreaNum {
|
||||
if m.Mining+1 > AreaNum {
|
||||
return nil, fmt.Errorf("mining is full")
|
||||
}
|
||||
if Gem > 0 {
|
||||
m.Gem = append(m.Gem, Gem)
|
||||
GemList := miningCfg.GetPassGem(m.Pass)
|
||||
if len(m.Gem) > len(GemList) {
|
||||
if len(m.Gem)+1 > len(GemList) {
|
||||
return nil, fmt.Errorf("gem is full")
|
||||
}
|
||||
} else {
|
||||
m.Map = Map
|
||||
m.Mining++
|
||||
m.Gem = append(m.Gem, Gem)
|
||||
return nil, nil
|
||||
}
|
||||
m.Map = Map
|
||||
m.Mining++
|
||||
Items := miningCfg.GetRandItem()
|
||||
return Items, nil
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (m *MiningMod) GetReward() ([]*item.Item, int, error) {
|
||||
GemList := miningCfg.GetPassGem(m.Pass)
|
||||
if len(m.Gem) < len(GemList) {
|
||||
@ -90,7 +90,7 @@ func (m *MiningMod) GetReward() ([]*item.Item, int, error) {
|
||||
m.Pass++
|
||||
Ming := m.Mining
|
||||
m.Mining = 0
|
||||
m.Map = make(map[int32]string)
|
||||
m.Gem = make([]int, 0)
|
||||
m.Map = nil
|
||||
m.Gem = nil
|
||||
return Items, Ming, nil
|
||||
}
|
||||
|
||||
@ -53,6 +53,8 @@ const (
|
||||
HANDLE_MOD_CHAMPSHIP_RANK_LIST = 20015 // 锦标赛排行榜
|
||||
HANDLE_MOD_CHAMPSHIP_PRE_RANK = 20016 // 锦标赛上期排名
|
||||
HANDLE_MOD_CHAMPSHIP_GROUP = 20017 // 锦标赛分组
|
||||
HANDLE_MOD_DAILY_VAR_GET = 20018 // 获取变量
|
||||
HANDLE_MOD_DAILY_VAR_SET = 20019 // 设置变量
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@ -47,7 +47,7 @@ type Order struct {
|
||||
var PreheatItems = map[int][]*item.Item{
|
||||
1: {item.NewItem(item.ITEM_ENERGY_GIFT_ID, 1)},
|
||||
2: {item.NewItem(item.ITEM_DIAMOND_LV2_ID, 1)},
|
||||
3: {item.NewItem(item.ITEM_LAUNCHER_lOW_ID, 1)},
|
||||
3: {item.NewItem(item.ITEM_LAUNCHER_LOW_ID, 1)},
|
||||
}
|
||||
|
||||
const (
|
||||
@ -379,7 +379,7 @@ func (o *OrderMod) CreateNormalOrderSeed(lv int, Emit []int, EnergyMul int, Diff
|
||||
break
|
||||
}
|
||||
randNum++
|
||||
mergeList, _, err = randOrderChessSeed(o, lv, Emit, EnergyMul, Diff)
|
||||
mergeList, _, err = randOrderChessSeed(o, Emit, EnergyMul, Diff)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
@ -725,7 +725,7 @@ func (o *OrderMod) CreateComfortOrder(lv int, Emit []int, EnergyMul, Diff, Chess
|
||||
break
|
||||
}
|
||||
randNum++
|
||||
mergeList, _, err = randOrderChessWithDiff(o, lv, Emit, EnergyMul, Diff, ChessNum)
|
||||
mergeList, _, err = randOrderChessWithDiff(o, Emit, EnergyMul, Diff, ChessNum)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package order
|
||||
|
||||
import (
|
||||
"log"
|
||||
"math"
|
||||
mergeDataCfg "server/conf/merge_data"
|
||||
orderCfg "server/conf/order"
|
||||
@ -90,17 +89,8 @@ type orderConfigInfo struct {
|
||||
t int
|
||||
}
|
||||
|
||||
// 订单棋子数量
|
||||
// func getChessNumRand(OrderN int) map[int]int {
|
||||
// return map[int]int{
|
||||
// 1: int(70 - 2*OrderN),
|
||||
// 2: int(25 + OrderN),
|
||||
// 3: int(5 + OrderN),
|
||||
// }
|
||||
// }
|
||||
|
||||
// 根据上一个订单难度和系数 生成订单难度
|
||||
func getOrderDiffRand(Lv, Diff, OrderN int) map[int]int {
|
||||
func getOrderDiffRand(Lv, Diff int) map[int]int {
|
||||
var d map[int]int
|
||||
if Lv < 24 {
|
||||
switch Diff {
|
||||
@ -167,7 +157,7 @@ func getChessByDiff(Lv, Diff, Type int) (int, int, int) {
|
||||
}
|
||||
|
||||
// 根据订单难度生成棋子难度
|
||||
func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int {
|
||||
func getChessDiff(ChessNum, OrderDiff int) map[int]int {
|
||||
var rs map[int]int
|
||||
switch ChessNum {
|
||||
case 1:
|
||||
@ -426,7 +416,7 @@ func GetVirtualEnergy(MergeList, EmitList []int) int {
|
||||
return eneryg
|
||||
}
|
||||
|
||||
// 随机生成超级订单棋子
|
||||
// randSuperOrderChess 随机生成超级订单棋子
|
||||
func randSuperOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderDiff int) ([]int, int, error) {
|
||||
initReflectChess(Emit, EnergyMul)
|
||||
filterPool(o)
|
||||
@ -438,76 +428,25 @@ func randSuperOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderDiff i
|
||||
if err != nil {
|
||||
return nil, DIFF_LOW, err
|
||||
}
|
||||
// 生成订单难度和棋子数量
|
||||
ChessNum := GoUtil.RandMap(RandChessNum)
|
||||
ChessDiff := getChessDiff(ChessNum, OrderDiff, OrderN)
|
||||
mergeList := make([]int, 0, len(ChessDiff))
|
||||
// 根据订单棋子难度生成棋子
|
||||
for _, v := range ChessDiff {
|
||||
ChessId := 0
|
||||
Num := 0
|
||||
for {
|
||||
Num++
|
||||
if Num > 50 {
|
||||
break
|
||||
}
|
||||
ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul)
|
||||
if ChessId == 0 {
|
||||
continue
|
||||
}
|
||||
if !GoUtil.InArray(ChessId, mergeList) {
|
||||
break
|
||||
}
|
||||
}
|
||||
mergeList = append(mergeList, ChessId)
|
||||
}
|
||||
return mergeList, OrderDiff, nil
|
||||
ChessDiff := getChessDiff(ChessNum, OrderDiff)
|
||||
return buildMergeListFromDiff(o, ChessDiff, Emit, EnergyMul, OrderDiff)
|
||||
}
|
||||
|
||||
// 随机生成超级订单棋子
|
||||
func randOrderChessWithDiff(o *OrderMod, lv int, Emit []int, EnergyMul, OrderDiff, ChessNum int) ([]int, int, error) {
|
||||
// randOrderChessWithDiff 随机生成订单棋子
|
||||
func randOrderChessWithDiff(o *OrderMod, Emit []int, EnergyMul, OrderDiff, ChessNum int) ([]int, int, error) {
|
||||
initReflectChess(Emit, EnergyMul)
|
||||
filterPool(o)
|
||||
OrderN, err := userCfg.GetOrderNByLv(lv)
|
||||
if err != nil {
|
||||
return nil, DIFF_LOW, err
|
||||
}
|
||||
ChessDiff := getChessDiff(ChessNum, OrderDiff, OrderN)
|
||||
mergeList := make([]int, 0, len(ChessDiff))
|
||||
// 根据订单棋子难度生成棋子
|
||||
for _, v := range ChessDiff {
|
||||
ChessId := 0
|
||||
Num := 0
|
||||
for {
|
||||
Num++
|
||||
if Num > 50 {
|
||||
break
|
||||
}
|
||||
ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul)
|
||||
if ChessId == 0 {
|
||||
continue
|
||||
}
|
||||
if !GoUtil.InArray(ChessId, mergeList) {
|
||||
break
|
||||
}
|
||||
}
|
||||
mergeList = append(mergeList, ChessId)
|
||||
}
|
||||
return mergeList, OrderDiff, nil
|
||||
ChessDiff := getChessDiff(ChessNum, OrderDiff)
|
||||
return buildMergeListFromDiff(o, ChessDiff, Emit, EnergyMul, OrderDiff)
|
||||
}
|
||||
|
||||
// 随机生成订单棋子
|
||||
func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderType int) ([]int, int, error) {
|
||||
initReflectChess(Emit, EnergyMul)
|
||||
filterPool(o)
|
||||
OrderN, err := userCfg.GetOrderNByLv(lv)
|
||||
//RandChessNum := getChessNumRand(OrderN)
|
||||
if err != nil {
|
||||
return nil, DIFF_LOW, err
|
||||
}
|
||||
// 生成订单难度和棋子数量
|
||||
//ChessNum := GoUtil.RandMap(RandChessNum)
|
||||
OrderDiffRand := getOrderDiffRand(lv, o.LastDiff, OrderN)
|
||||
OrderDiffRand := getOrderDiffRand(lv, o.LastDiff)
|
||||
OrderDiff := GoUtil.RandMap(OrderDiffRand)
|
||||
if o.NextDiff != 0 {
|
||||
OrderDiff = o.NextDiff
|
||||
@ -519,31 +458,21 @@ func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul, OrderType int) (
|
||||
return mergeList, OrderDiff, nil
|
||||
}
|
||||
|
||||
func randOrderChessSeed(o *OrderMod, lv int, Emit []int, EnergyMul, OrderDiff int) ([]int, int, error) {
|
||||
func randOrderChessSeed(o *OrderMod, Emit []int, EnergyMul, OrderDiff int) ([]int, int, error) {
|
||||
initReflectChess(Emit, EnergyMul)
|
||||
filterPool(o)
|
||||
OrderN, err := userCfg.GetOrderNByLv(lv)
|
||||
if err != nil {
|
||||
return nil, DIFF_LOW, err
|
||||
ChessDiff := getChessDiff(2, OrderDiff)
|
||||
return buildMergeListFromDiff(o, ChessDiff, Emit, EnergyMul, OrderDiff)
|
||||
}
|
||||
// 生成订单难度和棋子数量
|
||||
ChessNum := 2
|
||||
ChessDiff := getChessDiff(ChessNum, OrderDiff, OrderN)
|
||||
|
||||
// buildMergeListFromDiff 根据棋子难度映射表从池中取棋子(提取三处重复逻辑)
|
||||
func buildMergeListFromDiff(o *OrderMod, ChessDiff map[int]int, Emit []int, EnergyMul, OrderDiff int) ([]int, int, error) {
|
||||
mergeList := make([]int, 0, len(ChessDiff))
|
||||
// 根据订单棋子难度生成棋子
|
||||
for _, v := range ChessDiff {
|
||||
ChessId := 0
|
||||
Num := 0
|
||||
for {
|
||||
Num++
|
||||
if Num > 50 {
|
||||
break
|
||||
}
|
||||
for n := 0; n < 50; n++ {
|
||||
ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul)
|
||||
if ChessId == 0 {
|
||||
continue
|
||||
}
|
||||
if !GoUtil.InArray(ChessId, mergeList) {
|
||||
if ChessId != 0 && !GoUtil.InArray(ChessId, mergeList) {
|
||||
break
|
||||
}
|
||||
}
|
||||
@ -554,7 +483,7 @@ func randOrderChessSeed(o *OrderMod, lv int, Emit []int, EnergyMul, OrderDiff in
|
||||
|
||||
// 筛选棋子池 从中剔除不符合难度的棋子
|
||||
func filterPool(o *OrderMod) {
|
||||
NewPool := make([]int, 0)
|
||||
var NewPool []int
|
||||
for _, v := range o.ChessPool {
|
||||
if _, ok := reflectChess[v]; ok {
|
||||
NewPool = append(NewPool, v)
|
||||
@ -568,8 +497,8 @@ func ShuffleColor(List []string, Last string) []string {
|
||||
return List
|
||||
}
|
||||
Break := 0
|
||||
List2 := make([]string, len(List))
|
||||
List3 := make([]string, len(List))
|
||||
var List2 []string
|
||||
var List3 []string
|
||||
for _, v := range List {
|
||||
if mergeDataCfg.GetEmitProductNumByColor(v) == 1 {
|
||||
List3 = append(List3, v)
|
||||
@ -733,7 +662,7 @@ func GetOrderStar(ChessList []int, EmitList []int) int {
|
||||
func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int {
|
||||
ChessMinLv, ChessMaxLv := getChesslvRange(EmitId, EnergyMul, false)
|
||||
LvRange := getChessLvRange(ChessMinLv, ChessMaxLv, Diff)
|
||||
ChessIds := []int{}
|
||||
var ChessIds []int
|
||||
for _, v := range LvRange {
|
||||
NewLev1 := mergeDataCfg.DynamicLev(v, EmitId, Color)
|
||||
MaxLev := mergeDataCfg.GetMaxLvByColor(Color)
|
||||
@ -744,7 +673,7 @@ func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int {
|
||||
return GoUtil.UniqueInts(ChessIds)
|
||||
}
|
||||
func (o *OrderMod) getChessLvFromConfig1(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) []int {
|
||||
rand := []int{}
|
||||
var rand []int
|
||||
t := 0
|
||||
if LastEnergy > 0 {
|
||||
t = 1
|
||||
@ -758,40 +687,8 @@ func (o *OrderMod) getChessLvFromConfig1(MinEnergy, MaxEnergy, MinLv, MaxLv, Las
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(rand) == 0 {
|
||||
return rand
|
||||
}
|
||||
return rand
|
||||
}
|
||||
|
||||
// func (o *OrderMod) getChessLvFromConfig2(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) []int {
|
||||
// rand := []int{}
|
||||
// for _, v := range orderCfgMap {
|
||||
// if MinEnergy >= v.Min && MaxEnergy <= v.Max {
|
||||
// for _, info := range v.Pool {
|
||||
// if MinLv <= info.lv && MaxLv >= info.lv {
|
||||
// rand = append(rand, info.lv)
|
||||
// }
|
||||
// }
|
||||
|
||||
// }
|
||||
// }
|
||||
// return rand
|
||||
// }
|
||||
// func (o *OrderMod) getChessLvFromConfig3(MinEnergy, MaxEnergy, MinLv, MaxLv, LastEnergy int) []int {
|
||||
// rand := []int{}
|
||||
// for _, v := range orderCfgMap {
|
||||
// if MinEnergy >= v.Min && MaxEnergy <= v.Max {
|
||||
// for _, info := range v.Pool {
|
||||
// if MinLv <= info.lv && MaxLv >= info.lv && LastEnergy+info.energy <= MaxEnergy && LastEnergy+info.energy >= MinEnergy {
|
||||
// rand = append(rand, info.lv)
|
||||
// }
|
||||
// }
|
||||
|
||||
// }
|
||||
// }
|
||||
// return rand
|
||||
// }
|
||||
|
||||
func (o *OrderMod) ChessPoolChess(Color string, Lv int) bool {
|
||||
for _, v := range o.ChessPool2[Color] {
|
||||
@ -830,7 +727,7 @@ func (o *OrderMod) getFromPool(Emit int, Color string, Lv int) {
|
||||
}
|
||||
}
|
||||
|
||||
func (o *OrderMod) getChessIdPool(Emit []int, Color string, EnergyMul, Lv, MinEnergy, MaxEnergy, OrderDiff, LastEnergy int) (int, int) {
|
||||
func (o *OrderMod) getChessIdPool(Emit []int, Color string, EnergyMul, MinEnergy, MaxEnergy, OrderDiff, LastEnergy int) (int, int) {
|
||||
ChessLv := 0
|
||||
EmitChessId := getEmitBySeries(Emit, Color)
|
||||
ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge)
|
||||
@ -873,27 +770,24 @@ func getChessFromPoolByEnergy(o *OrderMod, MinEnergy, MaxEnergy, ChessNum int, E
|
||||
ColorArr = append(ColorArr, getEmitSeries(o, Emit, OrderType))
|
||||
}
|
||||
if len(ColorArr) == 2 && ColorArr[0] == ColorArr[1] {
|
||||
log.Default()
|
||||
}
|
||||
ChessArr := make([]int, 0)
|
||||
if len(ColorArr) == 1 {
|
||||
Chess, _ := o.getChessIdPool(Emit, ColorArr[0], EnergyMul, 0, MinEnergy, MaxEnergy, OrderDiff, 0)
|
||||
Chess, _ := o.getChessIdPool(Emit, ColorArr[0], EnergyMul, MinEnergy, MaxEnergy, OrderDiff, 0)
|
||||
if Chess == 0 {
|
||||
Chess = mergeDataCfg.GetChessIdByLvAndColor(6, ColorArr[0])
|
||||
}
|
||||
return []int{Chess}
|
||||
}
|
||||
if len(ColorArr) == 2 {
|
||||
Chess1, Chess1Lv := o.getChessIdPool(Emit, ColorArr[0], EnergyMul, 0, MinEnergy, MaxEnergy, OrderDiff, 0)
|
||||
Chess1, Chess1Lv := o.getChessIdPool(Emit, ColorArr[0], EnergyMul, MinEnergy, MaxEnergy, OrderDiff, 0)
|
||||
if Chess1 == 0 {
|
||||
Chess1 = mergeDataCfg.GetChessIdByLvAndColor(6, ColorArr[0])
|
||||
}
|
||||
Energy := int(math.Pow(2, float64(Chess1Lv-1)))
|
||||
Chess2, _ := o.getChessIdPool(Emit, ColorArr[1], EnergyMul, 0, MinEnergy, MaxEnergy, OrderDiff, Energy)
|
||||
Chess2, _ := o.getChessIdPool(Emit, ColorArr[1], EnergyMul, MinEnergy, MaxEnergy, OrderDiff, Energy)
|
||||
return []int{Chess1, Chess2}
|
||||
}
|
||||
|
||||
return ChessArr
|
||||
return nil
|
||||
}
|
||||
|
||||
// 从棋子池中获取棋子
|
||||
|
||||
@ -22,17 +22,18 @@ func (p *PassMod) ZeroUpdate(Id int) {
|
||||
}
|
||||
|
||||
func (p *PassMod) GetRewardItems() ([]*item.Item, []int) {
|
||||
NewLevel := passCfg.GetNewLevel(passCfg.GetTemplate(p.Id), p.Num, p.Reward)
|
||||
template := passCfg.GetTemplate(p.Id)
|
||||
NewLevel := passCfg.GetNewLevel(template, p.Num, p.Reward)
|
||||
if len(NewLevel) == 0 {
|
||||
return nil, nil
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
Items = append(Items, passCfg.GetFreeChargeItems(passCfg.GetTemplate(p.Id), p.Reward)...)
|
||||
var Items []*item.Item
|
||||
Items = append(Items, passCfg.GetFreeChargeItems(template, p.Reward)...)
|
||||
if p.LowPass != 0 {
|
||||
Items = append(Items, passCfg.GetLowChargeItems(passCfg.GetTemplate(p.Id), p.Reward)...)
|
||||
Items = append(Items, passCfg.GetLowChargeItems(template, p.Reward)...)
|
||||
}
|
||||
if p.HighPass != 0 {
|
||||
Items = append(Items, passCfg.GetHighChargeItems(passCfg.GetTemplate(p.Id), p.Reward)...)
|
||||
Items = append(Items, passCfg.GetHighChargeItems(template, p.Reward)...)
|
||||
}
|
||||
p.Reward = append(p.Reward, NewLevel...)
|
||||
return Items, NewLevel
|
||||
@ -51,8 +52,8 @@ func (p *PassMod) Login(Id int) int {
|
||||
p.LowPass = 0
|
||||
p.HighPass = 0
|
||||
p.Num = 0
|
||||
p.Reward = make([]int, 0)
|
||||
return p.Id
|
||||
p.Reward = nil
|
||||
return OldId
|
||||
}
|
||||
|
||||
func (p *PassMod) GetLowChargeItems() []*item.Item {
|
||||
|
||||
@ -20,9 +20,6 @@ const (
|
||||
)
|
||||
|
||||
func (p *PiggyBankMod) InitData() {
|
||||
if p.List == nil {
|
||||
p.List = make([]int, 0)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *PiggyBankMod) AddPiggyBank(Type int) {
|
||||
@ -34,13 +31,11 @@ func (p *PiggyBankMod) Fire(ChargeId int) []*item.Item {
|
||||
if ChargeId != PiggyBankChargeId && ChargeId != 0 {
|
||||
return nil
|
||||
}
|
||||
// Now := GoUtil.Now()
|
||||
// if p.EndTime < Now {
|
||||
// return nil
|
||||
// }
|
||||
reward := []*item.Item{item.NewItem(item.ITEM_DIAMOND_ID, p.Diamond)}
|
||||
p.Diamond = 0
|
||||
p.EndTime = 0
|
||||
p.TimeOut()
|
||||
return []*item.Item{item.NewItem(item.ITEM_DIAMOND_ID, p.Diamond)}
|
||||
return reward
|
||||
}
|
||||
|
||||
func (p *PiggyBankMod) TimeOut() int64 {
|
||||
|
||||
@ -182,7 +182,6 @@ func (p *PlayroomMod) InitData() {
|
||||
p.NewCollect[v] = &CollectInfo{
|
||||
Id: v,
|
||||
AddTime: GoUtil.Now(),
|
||||
EndTime: 0,
|
||||
Num: 1,
|
||||
}
|
||||
}
|
||||
@ -192,7 +191,6 @@ func (p *PlayroomMod) InitData() {
|
||||
p.NewCollect[k] = &CollectInfo{
|
||||
Id: k,
|
||||
AddTime: GoUtil.Now(),
|
||||
EndTime: 0,
|
||||
Num: v,
|
||||
}
|
||||
}
|
||||
@ -214,18 +212,12 @@ func (p *PlayroomMod) InitData() {
|
||||
if p.Physiology == nil {
|
||||
p.Physiology = make(map[int]*Physiology)
|
||||
}
|
||||
if p.Reward == nil {
|
||||
p.Reward = make([]*item.Item, 0)
|
||||
}
|
||||
if p.HasVisit == nil {
|
||||
p.HasVisit = make(map[int]int64)
|
||||
}
|
||||
if p.GameReward == nil {
|
||||
p.GameReward = make(map[int]*item.Item)
|
||||
}
|
||||
if p.LoseItem == nil {
|
||||
p.LoseItem = make([]*item.Item, 0)
|
||||
}
|
||||
if p.Flip == nil {
|
||||
p.Flip = make(map[int]int)
|
||||
}
|
||||
@ -236,7 +228,7 @@ func (p *PlayroomMod) InitData() {
|
||||
p.DailyTask = make(map[int]*DailyTask)
|
||||
}
|
||||
if len(p.NewPetAir) == 0 {
|
||||
p.NewPetAir = make(map[int]*PetAirInfo, 0)
|
||||
p.NewPetAir = make(map[int]*PetAirInfo)
|
||||
InitPetAir := playroomCfg.GetInitAirList()
|
||||
for _, v := range InitPetAir {
|
||||
p.NewPetAir[v] = &PetAirInfo{
|
||||
@ -255,7 +247,7 @@ func (p *PlayroomMod) InitData() {
|
||||
Num: 1,
|
||||
}
|
||||
}
|
||||
p.PetAir = make([]int, 0)
|
||||
p.PetAir = nil
|
||||
}
|
||||
if p.NewDress == nil {
|
||||
p.NewDress = make(map[int]*DressInfo)
|
||||
@ -268,8 +260,6 @@ func (p *PlayroomMod) InitData() {
|
||||
Id: v,
|
||||
Part: Part,
|
||||
AddTime: GoUtil.Now(),
|
||||
EndTime: 0,
|
||||
Label: "",
|
||||
Num: 1,
|
||||
}
|
||||
}
|
||||
@ -283,13 +273,11 @@ func (p *PlayroomMod) InitData() {
|
||||
Id: id,
|
||||
Part: Part,
|
||||
AddTime: GoUtil.Now(),
|
||||
EndTime: 0,
|
||||
Label: "",
|
||||
Num: 1,
|
||||
}
|
||||
}
|
||||
}
|
||||
p.Dress = make(map[int][]int)
|
||||
p.Dress = nil
|
||||
}
|
||||
if p.ADItem == nil {
|
||||
p.ADItem = make(map[int]*ItemInfo)
|
||||
@ -303,9 +291,9 @@ func (p *PlayroomMod) ZeroUpdate() {
|
||||
p.TodayFlip = false
|
||||
p.LastFlip = 0
|
||||
p.JackpotNum = playroomCfg.GetJackpotNum()
|
||||
p.UpvoteList = make([]int, 0)
|
||||
p.DailyTaskReward = make([]int, 0)
|
||||
p.TodayVisitedUsers = make([]int, 0)
|
||||
p.UpvoteList = nil
|
||||
p.DailyTaskReward = nil
|
||||
p.TodayVisitedUsers = nil
|
||||
p.ADItem = make(map[int]*ItemInfo)
|
||||
p.InitDailyTask()
|
||||
}
|
||||
@ -319,7 +307,6 @@ func (p *PlayroomMod) InitDailyTask() {
|
||||
Quest, _ := quest.ParseQuest(v)
|
||||
p.DailyTask[k] = &DailyTask{
|
||||
Items: Items,
|
||||
Status: 0,
|
||||
Quest: Quest,
|
||||
UnLock: true,
|
||||
Index: Index,
|
||||
@ -332,7 +319,6 @@ func (p *PlayroomMod) InitDailyTask() {
|
||||
Quest, _ := quest.ParseQuest(v)
|
||||
p.DailyTask[k] = &DailyTask{
|
||||
Items: Items,
|
||||
Status: 0,
|
||||
Quest: Quest,
|
||||
UnLock: false,
|
||||
Index: Index,
|
||||
@ -351,10 +337,7 @@ func (p *PlayroomMod) QuestTrigger(Tr *quest.Trigger) bool {
|
||||
if v.Status != quest.QUEST_STATUS_UNFINISH {
|
||||
continue
|
||||
}
|
||||
up := quest.TriggerQuestProgress(&v.Quest, Tr)
|
||||
if up {
|
||||
update = true
|
||||
}
|
||||
update = quest.TriggerQuestProgress(&v.Quest, Tr) || update
|
||||
|
||||
if v.Quest.Status {
|
||||
v.Status = quest.QUEST_STATUS_FINISH
|
||||
@ -396,7 +379,6 @@ func (p *PlayroomMod) GetDailyTaskReward(Id int) ([]*item.Item, error) {
|
||||
return nil, fmt.Errorf("GetDailyTaskReward Status is not finish")
|
||||
}
|
||||
v.Status = quest.QUEST_STATUS_REWARD
|
||||
p.DailyTask[Id] = v
|
||||
return v.Items, nil
|
||||
}
|
||||
|
||||
@ -471,9 +453,6 @@ func (p *PlayroomMod) SetTarget(Target int) {
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) SetGameId(GameId int) {
|
||||
// if (p.GameId == GAME_TYPE_HOOK || p.GameId == GAME_TYPE_HIDE) && GameId == GAME_TYPE_HOOK {
|
||||
// return
|
||||
// }
|
||||
p.GameId = GameId
|
||||
}
|
||||
|
||||
@ -481,7 +460,6 @@ func (p *PlayroomMod) CreateOrderReward(Star int, itemMod *item.ItemMod) {
|
||||
if Star == 0 {
|
||||
return
|
||||
}
|
||||
p.Reward = make([]*item.Item, 0)
|
||||
FoodItem := playroomCfg.GetFoodItem()
|
||||
CleanItem := playroomCfg.GetCleanItem()
|
||||
ToyItem := playroomCfg.GetToyItem()
|
||||
@ -495,17 +473,18 @@ func (p *PlayroomMod) CreateOrderReward(Star int, itemMod *item.ItemMod) {
|
||||
Id []int
|
||||
Num int
|
||||
}
|
||||
sortList := make([]d, 0)
|
||||
sortList = append(sortList, d{Id: FoodItem, Num: FoodItemNum})
|
||||
sortList = append(sortList, d{Id: CleanItem, Num: CleanItemNum})
|
||||
sortList = append(sortList, d{Id: ToyItem, Num: ToyItemNum})
|
||||
sortList = append(sortList, d{Id: DailyItem, Num: DailyItemNum})
|
||||
sortList := []d{
|
||||
{Id: FoodItem, Num: FoodItemNum},
|
||||
{Id: CleanItem, Num: CleanItemNum},
|
||||
{Id: ToyItem, Num: ToyItemNum},
|
||||
{Id: DailyItem, Num: DailyItemNum},
|
||||
}
|
||||
sort.Slice(sortList, func(i, j int) bool {
|
||||
return sortList[i].Num < sortList[j].Num
|
||||
})
|
||||
|
||||
Prob := GoUtil.RandSlice(sortList[0].Id)
|
||||
p.Reward = append(p.Reward, &item.Item{Id: Prob, Num: 1})
|
||||
p.Reward = []*item.Item{{Id: Prob, Num: 1}}
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) GetReward() []*item.Item {
|
||||
@ -538,7 +517,7 @@ func (p *PlayroomMod) AddInteractNum(Lv int) {
|
||||
func (p *PlayroomMod) AddMood(Id, Num int) {
|
||||
_, ok := p.MoodInfo[Id]
|
||||
if !ok {
|
||||
p.MoodInfo[Id] = &Mood{Id: Id, Num: 0}
|
||||
p.MoodInfo[Id] = &Mood{Id: Id}
|
||||
}
|
||||
p.MoodInfo[Id].Num = max(0, min(p.MoodInfo[Id].Num+Num, 100))
|
||||
if p.MoodInfo[Id].Num != 0 && p.MoodInfo[Id].Time == 0 {
|
||||
@ -560,7 +539,8 @@ func (p *PlayroomMod) GetMoodNum(MoodType int) int {
|
||||
func (p *PlayroomMod) AddPhysiology(Id, Num int) {
|
||||
Phy := p.GetPhysiology(Id)
|
||||
if Phy == nil {
|
||||
Phy = &Physiology{Id: Id, Num: 0, Time: 0}
|
||||
Phy = &Physiology{Id: Id}
|
||||
p.Physiology[Id] = Phy
|
||||
}
|
||||
Max := playroomCfg.GetPhysiologyMax(Id)
|
||||
Phy.Num = max(0, min(Phy.Num+Num, Max))
|
||||
@ -601,7 +581,6 @@ func (p *PlayroomMod) AddDress(Id int, Label string) {
|
||||
Id: Id,
|
||||
Part: Part,
|
||||
AddTime: GoUtil.Now(),
|
||||
EndTime: 0,
|
||||
Label: Label,
|
||||
Num: 1,
|
||||
}
|
||||
@ -624,7 +603,7 @@ func (p *PlayroomMod) GetGameId() int {
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) ResetLose() {
|
||||
p.LoseItem = make([]*item.Item, 0)
|
||||
p.LoseItem = nil
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) SetGameReward(Chess1, Chess2, Star int) {
|
||||
@ -654,7 +633,7 @@ func (p *PlayroomMod) SelectReward(Id int) []*item.Item {
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
var Items []*item.Item
|
||||
Items = append(Items, v)
|
||||
if Id < 3 {
|
||||
Items = append(Items, item.NewItem(item.ITEM_STAR_ID, 5))
|
||||
@ -765,7 +744,7 @@ func (p *PlayroomMod) NotifyWork() *msg.NotifyPlayroomWork {
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) NotifyLose() *msg.NotifyPlayroomLose {
|
||||
ChipMessage := make([]*msg.ChipInfo, 0)
|
||||
ChipMessage := make([]*msg.ChipInfo, 0, len(p.ChipList))
|
||||
for _, v := range p.ChipList {
|
||||
ChipMessage = append(ChipMessage, &msg.ChipInfo{
|
||||
Uid: int64(v.Uid),
|
||||
@ -794,11 +773,11 @@ func (p *PlayroomMod) NotifyStatus() *msg.NofiPlayroomStatus {
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) NotifyMood() *msg.NotifyPlayroomMood {
|
||||
Mood := make(map[int32]int32, 0)
|
||||
Mood := make(map[int32]int32)
|
||||
for k, v := range p.MoodInfo {
|
||||
Mood[int32(k)] = int32(v.Num)
|
||||
}
|
||||
resAdItems := make([]*msg.AdItem, 0)
|
||||
var resAdItems []*msg.AdItem
|
||||
for k, v := range p.ADItem {
|
||||
resAdItems = append(resAdItems, &msg.AdItem{
|
||||
ItemId: int32(k),
|
||||
@ -830,14 +809,14 @@ func (p *PlayroomMod) RemoveChip(Uids []int64) ([]*item.Item, int, error) {
|
||||
return nil, 0, fmt.Errorf("RemoveChip Uids is 0")
|
||||
}
|
||||
if len1 == len2 {
|
||||
p.ChipList = make([]*ChipInfo, 0)
|
||||
p.ChipList = nil
|
||||
} else {
|
||||
uidCount := make(map[int64]int)
|
||||
for _, uid := range Uids {
|
||||
uidCount[uid]++
|
||||
}
|
||||
|
||||
newChipList := make([]*ChipInfo, 0)
|
||||
var newChipList []*ChipInfo
|
||||
for _, chip := range p.ChipList {
|
||||
if uidCount[int64(chip.Uid)] > 0 {
|
||||
uidCount[int64(chip.Uid)]--
|
||||
@ -885,7 +864,7 @@ func (p *PlayroomMod) FlipCard(Pos int) (int, error) {
|
||||
|
||||
func (p *PlayroomMod) GetFlipReward() ([]*item.Item, int, int, error) {
|
||||
check := make(map[int]int)
|
||||
Items := make([]*item.Item, 0)
|
||||
var Items []*item.Item
|
||||
T := p.Target
|
||||
Result := FLIP_TYPE_COPPER
|
||||
for _, v := range p.Flip {
|
||||
@ -924,7 +903,6 @@ func (p *PlayroomMod) UnLock(Lv int) bool {
|
||||
if Lv < UnlockLv || len(p.Physiology) != 0 {
|
||||
return false
|
||||
}
|
||||
if len(p.Physiology) == 0 {
|
||||
Now := GoUtil.Now()
|
||||
p.Physiology = make(map[int]*Physiology)
|
||||
TypeList := playroomCfg.GetPhysiologyTypeList()
|
||||
@ -932,7 +910,6 @@ func (p *PlayroomMod) UnLock(Lv int) bool {
|
||||
Max := playroomCfg.GetPhysiologyMax(v)
|
||||
p.Physiology[v] = &Physiology{Id: v, Num: Max, Time: Now}
|
||||
}
|
||||
}
|
||||
if len(p.MoodInfo) == 0 {
|
||||
p.MoodInfo = make(map[int]*Mood)
|
||||
for k := 1; k <= 3; k++ {
|
||||
@ -966,8 +943,6 @@ func (p *PlayroomMod) UnlockDress(Type, Id int) error {
|
||||
Id: Id,
|
||||
Part: Type,
|
||||
AddTime: GoUtil.Now(),
|
||||
EndTime: 0,
|
||||
Label: "",
|
||||
Num: 1,
|
||||
}
|
||||
return nil
|
||||
@ -987,7 +962,7 @@ func (p *PlayroomMod) UnlockPetAir(Id int) {
|
||||
|
||||
func (p *PlayroomMod) PlayroomDressSet(DressSet map[int]int) ([]int, map[int]int, error) {
|
||||
// 判断服装是否存在
|
||||
Part := make([]int, 0)
|
||||
var Part []int
|
||||
Diff := GoUtil.DiffMap(DressSet, p.DressSet)
|
||||
for Type, Id := range DressSet {
|
||||
if Id == 0 {
|
||||
@ -1038,7 +1013,7 @@ func (p *PlayroomMod) Unlock(Id int) error {
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) GetUnlockIds() []int32 {
|
||||
UnlockIds := make([]int32, 0)
|
||||
UnlockIds := make([]int32, 0, len(p.UnlockList))
|
||||
for k := range p.UnlockList {
|
||||
UnlockIds = append(UnlockIds, int32(k))
|
||||
}
|
||||
@ -1062,7 +1037,7 @@ func (p *PlayroomMod) GetPetAir() map[int]*PetAirInfo {
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) BackDataTask() []*msg.DailyTask {
|
||||
DailyTask := make([]*msg.DailyTask, 0)
|
||||
DailyTask := make([]*msg.DailyTask, 0, len(p.DailyTask))
|
||||
for k, v := range p.DailyTask {
|
||||
DailyTask = append(DailyTask, &msg.DailyTask{
|
||||
Status: int32(v.Status),
|
||||
@ -1089,7 +1064,7 @@ func (p *PlayroomMod) Guide(Type int) error {
|
||||
|
||||
func (p *PlayroomMod) AdWatch(Id int) error {
|
||||
if _, ok := p.ADItem[Id]; !ok {
|
||||
p.ADItem[Id] = &ItemInfo{Watch: 0, LastTime: 0}
|
||||
p.ADItem[Id] = &ItemInfo{}
|
||||
}
|
||||
p.ADItem[Id].Watch++
|
||||
p.ADItem[Id].LastTime = GoUtil.Now()
|
||||
|
||||
@ -58,7 +58,7 @@ type Trigger struct {
|
||||
func ParseQuest(s string) (QuestProgress, error) {
|
||||
sArr := strings.Split(s, "=")
|
||||
if len(sArr) < 2 {
|
||||
return QuestProgress{}, fmt.Errorf("quest string not legel")
|
||||
return QuestProgress{}, fmt.Errorf("quest string not legal")
|
||||
}
|
||||
target, _ := strconv.Atoi(sArr[1])
|
||||
return QuestProgress{
|
||||
@ -87,7 +87,7 @@ func TriggerQuestProgress(q *QuestProgress, Tr *Trigger) bool {
|
||||
Lv := GoUtil.Int(Tr.A[0])
|
||||
TargetLv, _ := strconv.Atoi(q.A[0].(string))
|
||||
if TargetLv == Lv {
|
||||
q.Num += 1
|
||||
q.Num++
|
||||
}
|
||||
case TRIGGER_LABEL_GUIDE_LOGIN: // 引导任务登录
|
||||
LoginDay := GoUtil.Int(Tr.A[0])
|
||||
@ -95,15 +95,12 @@ func TriggerQuestProgress(q *QuestProgress, Tr *Trigger) bool {
|
||||
case TRIGGER_LABEL_MERGETIME, // 合成x次
|
||||
TRIGGER_LABEL_FINISHORDER,
|
||||
TRIGGER_LABEL_BUBBLE: // 完成x次订单
|
||||
q.Num += 1
|
||||
q.Num++
|
||||
case TRIGGER_LABEL_INTERACT: // 互动x类型y次
|
||||
InteractId := GoUtil.Int(Tr.A[0])
|
||||
Ids := make([]int, 0)
|
||||
for _, v := range q.A {
|
||||
Ids = append(Ids, GoUtil.Int(v))
|
||||
}
|
||||
Ids := GoUtil.IntSliceInterface(q.A)
|
||||
if GoUtil.InArray(InteractId, Ids) {
|
||||
q.Num += 1
|
||||
q.Num++
|
||||
}
|
||||
case TRIGGER_LABEL_PETDRESS: // 换装x次
|
||||
if len(q.A) == 0 {
|
||||
@ -116,11 +113,11 @@ func TriggerQuestProgress(q *QuestProgress, Tr *Trigger) bool {
|
||||
arg := GoUtil.IntSlice(Tr.A[0])
|
||||
for _, t := range arg {
|
||||
if GoUtil.InArray(t, Ids) {
|
||||
q.Num += 1
|
||||
q.Num++
|
||||
}
|
||||
}
|
||||
default:
|
||||
q.Num += 1
|
||||
q.Num++
|
||||
}
|
||||
if q.Num >= q.Target {
|
||||
q.Num = q.Target
|
||||
|
||||
@ -81,13 +81,11 @@ func (r *RaceMod) GetReward() ([]*item.Item, error) {
|
||||
if r.Rank != 1 {
|
||||
return nil, fmt.Errorf("you are not the first")
|
||||
}
|
||||
Items := make([]*item.Item, 0)
|
||||
Reward := raceCfg.GetReward(r.Pass)
|
||||
Items = append(Items, Reward...)
|
||||
var Items []*item.Item
|
||||
Items = append(Items, raceCfg.GetReward(r.Pass)...)
|
||||
Now := GoUtil.Now()
|
||||
if Now <= r.EndTime {
|
||||
ExtraReward := raceCfg.GetExtraReward(r.Pass)
|
||||
Items = append(Items, ExtraReward...)
|
||||
Items = append(Items, raceCfg.GetExtraReward(r.Pass)...)
|
||||
}
|
||||
r.Pass++
|
||||
r.Progress -= Need
|
||||
@ -108,12 +106,12 @@ func (r *RaceMod) GetReward() ([]*item.Item, error) {
|
||||
}
|
||||
|
||||
func randOpponents(OpponentNum int) []*Opponent {
|
||||
Opponent := make([]*Opponent, 0, OpponentNum-1)
|
||||
opponents := make([]*Opponent, 0, OpponentNum-1)
|
||||
names := randnameCfg.GetRandNames(OpponentNum)
|
||||
for i := 1; i < OpponentNum; i++ {
|
||||
Opponent = append(Opponent, randOpponent(i, names[i]))
|
||||
opponents = append(opponents, randOpponent(i, names[i]))
|
||||
}
|
||||
return Opponent
|
||||
return opponents
|
||||
}
|
||||
func randOpponent(Id int, name string) *Opponent {
|
||||
return &Opponent{
|
||||
|
||||
@ -43,6 +43,7 @@ func (s *SevenLoginMod) ZeroUpdate(Add, LastLoginTime int) {
|
||||
|
||||
if Now > s.MonthResetTime+GoUtil.MONTHDAYS {
|
||||
s.MonthReward = randMonthReward()
|
||||
s.Active = 0
|
||||
s.MonthResetTime = s.MonthResetTime + (Now-s.MonthResetTime)/GoUtil.MONTHDAYS*GoUtil.MONTHDAYS
|
||||
}
|
||||
s.DayR++
|
||||
|
||||
@ -25,14 +25,17 @@ func randWeekReward(Add, Type int) map[int]Reward {
|
||||
sort.Slice(jackpot, func(i, j int) bool {
|
||||
return jackpot[i].Diamond < jackpot[j].Diamond
|
||||
})
|
||||
RI := make([]int, 0)
|
||||
RI := make([]int, 0, len(RewardList))
|
||||
for _, v := range RewardList {
|
||||
RI = append(RI, v.Id)
|
||||
}
|
||||
CardPackIds := GoUtil.RandSliceNumNonAdjacent(RI, 3)
|
||||
result := make(map[int]Reward)
|
||||
LastType := 0
|
||||
EnergyMul := float64(GoUtil.IfTrue(Type == BACK_REWARD, 2, 1).(int))
|
||||
EnergyMul := 1.0
|
||||
if Type == BACK_REWARD {
|
||||
EnergyMul = 2.0
|
||||
}
|
||||
for _, v := range RewardList {
|
||||
v.Diamond = int(float64(v.Diamond) * (1 + float64(Add)/100))
|
||||
Reward := randReward(v, LastType, jackpot, CardPackIds, 0.5, EnergyMul)
|
||||
@ -85,7 +88,7 @@ func randReward(RewardData *gamedata.SevenLoginRewardData, LastType int, jackpot
|
||||
Item2 = NewJackpot[Index].Items
|
||||
RemainDiamond -= NewJackpot[Index].Diamond
|
||||
}
|
||||
Item3 := make([]*item.Item, 0)
|
||||
var Item3 []*item.Item
|
||||
if RewardData.RewardNum == 3 {
|
||||
RemainDiamond += 5
|
||||
NewJackpot3 := make([]*gamedata.SevenLoginJackpotData, 0, len(jackpot))
|
||||
@ -121,20 +124,3 @@ func randMonthReward() map[int]Reward {
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func F() map[int]Reward {
|
||||
RewardList := sevenLoginCfg.GetSevenLoginMonthReward()
|
||||
sort.Slice(RewardList, func(i, j int) bool {
|
||||
return RewardList[i].Id < RewardList[j].Id
|
||||
})
|
||||
jackpot := sevenLoginCfg.GetSevenLoginJackpot(1)
|
||||
sort.Slice(jackpot, func(i, j int) bool {
|
||||
return jackpot[i].Diamond < jackpot[j].Diamond
|
||||
})
|
||||
result := make(map[int]Reward)
|
||||
for _, v := range RewardList {
|
||||
Reward := randReward(v, 0, jackpot, []int{}, 0.65, 1)
|
||||
result[v.Id] = Reward
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@ -36,7 +36,7 @@ func (v *Var) SetDailyVar(key int, value interface{}) {
|
||||
func (v *Var) GetDailyVar(key int) (interface{}, error) {
|
||||
val, ok := v.DailyVar[key]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("key not exist")
|
||||
return nil, fmt.Errorf("key %d not exist", key)
|
||||
}
|
||||
return val, nil
|
||||
}
|
||||
@ -48,7 +48,7 @@ func (v *Var) SetWeeklyVar(key int, value interface{}) {
|
||||
func (v *Var) GetWeeklyVar(key int) (interface{}, error) {
|
||||
val, ok := v.WeeklyVar[key]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("key not exist")
|
||||
return nil, fmt.Errorf("key %d not exist", key)
|
||||
}
|
||||
return val, nil
|
||||
}
|
||||
@ -60,7 +60,7 @@ func (v *Var) SetMonthVar(key int, value interface{}) {
|
||||
func (v *Var) GetMonthVar(key int) (interface{}, error) {
|
||||
val, ok := v.MonthVar[key]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("key not exist")
|
||||
return nil, fmt.Errorf("key %d not exist", key)
|
||||
}
|
||||
return val, nil
|
||||
}
|
||||
@ -72,7 +72,7 @@ func (v *Var) SetVar(key int, value interface{}) {
|
||||
func (v *Var) GetVar(key int) (interface{}, error) {
|
||||
val, ok := v.Var[key]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("key not exist")
|
||||
return nil, fmt.Errorf("key %d not exist", key)
|
||||
}
|
||||
return val, nil
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ import (
|
||||
limitedTimeEvent "server/game/mod/limited_time_event"
|
||||
"server/game/mod/mail"
|
||||
"server/game/mod/playroom"
|
||||
sevenLogin "server/game/mod/seven_login"
|
||||
)
|
||||
|
||||
func (p *Player) GetChessMod() *chess.ChessBorad {
|
||||
@ -47,3 +48,7 @@ func (p *Player) GetChargeMod() *charge.ChargeMod {
|
||||
func (p *Player) GetMailMod() *mail.MailMod {
|
||||
return p.PlayMod.getMailMod()
|
||||
}
|
||||
|
||||
func (p *Player) GetSevenLoginMod() *sevenLogin.SevenLoginMod {
|
||||
return p.PlayMod.getSevenLoginMod()
|
||||
}
|
||||
|
||||
84
src/server/game/notification.go
Normal file
84
src/server/game/notification.go
Normal file
@ -0,0 +1,84 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
languageCfg "server/conf/language"
|
||||
notification_cfg "server/conf/notification"
|
||||
GoUtil "server/game_util"
|
||||
"server/msg"
|
||||
)
|
||||
|
||||
const (
|
||||
NOTIFY_TYPE_FRIEND_APPLY = 1
|
||||
NOTIFY_TYPE_PETROOM_GAME = 2
|
||||
)
|
||||
|
||||
/*
|
||||
对方来petroom游戏的通知
|
||||
每天最多通知3次
|
||||
*/
|
||||
func NotifyPetroomGame(PlayerId int) {
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(PlayerId)
|
||||
if !checkLogout(PlayerSimpleData) {
|
||||
return
|
||||
}
|
||||
count, last := GetPetroomGameNotification(PlayerId)
|
||||
cooldown, dailyLimit := notification_cfg.GetPetroomGameNotificationCooldown()
|
||||
if count >= dailyLimit {
|
||||
return
|
||||
}
|
||||
if GoUtil.Now()-last < int64(cooldown*onehour) {
|
||||
return
|
||||
}
|
||||
titlekey, infokey := notification_cfg.GetPetroomGameNotificationMsg()
|
||||
title := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey)
|
||||
info := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey)
|
||||
GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_PETROOM_GAME, fmt.Sprintf(title, PlayerSimpleData.PetName), fmt.Sprintf(info, PlayerSimpleData.PetName))
|
||||
SetPetroomGameNotification(PlayerId, count+1)
|
||||
}
|
||||
|
||||
/*
|
||||
好友申请通知
|
||||
好友申请累计两次
|
||||
*/
|
||||
func NotifyFriendApply(PlayerId, FriendId int) {
|
||||
PlayerSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(PlayerId)
|
||||
if !checkLogout(PlayerSimpleData) {
|
||||
return
|
||||
}
|
||||
FriendSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(FriendId)
|
||||
if FriendSimpleData == nil {
|
||||
return
|
||||
}
|
||||
count := GetFriendApplyNotification(PlayerId)
|
||||
if count > 0 {
|
||||
return
|
||||
}
|
||||
titlekey, infokey := notification_cfg.GetFriendApplyNotificationMsg()
|
||||
title := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), titlekey)
|
||||
info := languageCfg.GetLanguage(msg.LANG_TYPE(PlayerSimpleData.Lang), infokey)
|
||||
GoUtil.NotifyPlayer(GoUtil.Int(PlayerSimpleData.Account), NOTIFY_TYPE_FRIEND_APPLY, title, fmt.Sprintf(info, FriendSimpleData.Name))
|
||||
SetFriendApplyNotification(PlayerId, count+1)
|
||||
}
|
||||
|
||||
/*
|
||||
玩家需处于离线状态
|
||||
玩家离线时间少于10分钟时,不发送消息
|
||||
若用户已连续7天未登入游戏,不再发送通知
|
||||
*/
|
||||
func checkLogout(PlayerSimpleData *PlayerSimpleData) bool {
|
||||
if PlayerSimpleData == nil {
|
||||
return false
|
||||
}
|
||||
if PlayerSimpleData.Loginout == 0 {
|
||||
return false
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
if now-PlayerSimpleData.Loginout > 7*24*3600 {
|
||||
return false
|
||||
}
|
||||
if now-PlayerSimpleData.Loginout < 600 {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
@ -25,9 +25,7 @@ func (p *Player) PlayroomBackData() {
|
||||
r.Status = int32(PlayroomMod.Status)
|
||||
r.Items = item.ItemToMsg(PlayroomMod.Reward)
|
||||
|
||||
// 预分配切片容量,避免动态扩容
|
||||
visitorCount := len(PlayroomMod.Visitor)
|
||||
Opponent := make([]*proto.RoomOpponent, 0, visitorCount)
|
||||
Opponent := make([]*proto.RoomOpponent, 0, len(PlayroomMod.Visitor))
|
||||
FriendList := make([]*proto.FriendRoom, 0, len(FriendMod.GetFriendList()))
|
||||
if PlayroomMod.Target == 0 {
|
||||
PlayroomMod.SetTarget(p.GetVisitorPlayer())
|
||||
@ -78,7 +76,6 @@ func (p *Player) PlayroomBackData() {
|
||||
r.Friend = FriendList
|
||||
r.Target = TargerRoom
|
||||
|
||||
// 预分配装饰品切片容量
|
||||
collectList := PlayroomMod.GetCollect()
|
||||
Collect := make([]*proto.PlayroomCollectInfo, 0, len(collectList))
|
||||
for _, v := range collectList {
|
||||
@ -104,7 +101,6 @@ func (p *Player) PlayroomBackData() {
|
||||
})
|
||||
Dress[int32(v.Part)] = PlayroomDress
|
||||
}
|
||||
// 预分配芯片列表容量
|
||||
ChipMessage := make([]*proto.ChipInfo, 0, len(PlayroomMod.ChipList))
|
||||
for _, v := range PlayroomMod.ChipList {
|
||||
ChipMessage = append(ChipMessage, &proto.ChipInfo{
|
||||
@ -112,7 +108,6 @@ func (p *Player) PlayroomBackData() {
|
||||
EmojiId: int32(v.Emoji),
|
||||
})
|
||||
}
|
||||
// 预分配广告列表容量
|
||||
AdWatch := make([]*proto.AdItem, 0, len(PlayroomMod.ADItem))
|
||||
for k, v := range PlayroomMod.ADItem {
|
||||
AdWatch = append(AdWatch, &proto.AdItem{
|
||||
@ -124,7 +119,6 @@ func (p *Player) PlayroomBackData() {
|
||||
|
||||
r.Dress = Dress
|
||||
r.DressSet = GoUtil.MapIntToInt32(PlayroomMod.GetDressSet())
|
||||
// 预分配宠物空气列表容量
|
||||
petAirList := PlayroomMod.GetPetAir()
|
||||
PetAir := make([]*proto.PlayroomAirInfo, 0, len(petAirList))
|
||||
for _, v := range petAirList {
|
||||
@ -180,6 +174,10 @@ func (p *Player) PlayroomVisit(Uid int) {
|
||||
PlayroomMod := p.PlayMod.getPlayroomMod()
|
||||
r := &proto.ResPlayroomInfo{}
|
||||
PlayerData := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||
if PlayerData == nil {
|
||||
p.PushClientRes(&proto.ResPlayroomInfo{})
|
||||
return
|
||||
}
|
||||
Now := GoUtil.Now()
|
||||
Work := false
|
||||
if PlayerData.WorkStart > 0 && PlayerData.WorkStart+86400 > Now {
|
||||
@ -194,7 +192,7 @@ func (p *Player) PlayroomVisit(Uid int) {
|
||||
r.Defense = Work
|
||||
r.Emoji = GoUtil.MapIntToInt32(PlayerData.Emoji)
|
||||
r.PetName = PlayerData.PetName
|
||||
Items := make(map[int32]*proto.ItemInfo, 0)
|
||||
Items := make(map[int32]*proto.ItemInfo)
|
||||
for k, v := range PlayroomMod.GameReward {
|
||||
Items[int32(k)] = &proto.ItemInfo{
|
||||
Id: int32(v.Id),
|
||||
@ -242,7 +240,7 @@ func (p *Player) BackUserInfo() {
|
||||
|
||||
func (p *Player) ChargeBackData() {
|
||||
c := p.PlayMod.getChargeMod()
|
||||
LimitedEvnetMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
LimitedEventMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
SpecialShop := make(map[int32]*proto.ResSpecialShop)
|
||||
ChessShop := make(map[int32]*proto.ResChessShop)
|
||||
for k, v := range c.SpecialShop {
|
||||
@ -270,7 +268,7 @@ func (p *Player) ChargeBackData() {
|
||||
WeeklyDiscount := make(map[int32]*proto.WeeklyDiscountInfo)
|
||||
WeeklyDiscountInfo := chargeCfg.GetWeeklyInfoAll()
|
||||
// 优惠日开启或者猫咪闪促开启
|
||||
if c.IsWeeklyDiscountDay() || LimitedEvnetMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CAT_DAY_SALE) {
|
||||
if c.IsWeeklyDiscountDay() || LimitedEventMod.CheckExist(limitedTimeEvent.EVENT_TYPE_CAT_DAY_SALE) {
|
||||
for k, v := range WeeklyDiscountInfo {
|
||||
LimitNum := c.WeeklyDiscount[k]
|
||||
WeeklyDiscount[int32(k)] = &proto.WeeklyDiscountInfo{
|
||||
@ -280,7 +278,7 @@ func (p *Player) ChargeBackData() {
|
||||
}
|
||||
}
|
||||
}
|
||||
CatDaySaleEndTime := LimitedEvnetMod.GetCatDaySaleEndTime()
|
||||
CatDaySaleEndTime := LimitedEventMod.GetCatDaySaleEndTime()
|
||||
p.PushClientRes(&proto.ResCharge{
|
||||
Charge: float32(c.Charge),
|
||||
Total: int32(c.Total),
|
||||
@ -318,7 +316,6 @@ func (p *Player) GetChampshipRank() (int, int) {
|
||||
func (p *Player) FriendListBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
friendList := FriendMod.GetFriendList()
|
||||
// 预分配切片容量
|
||||
fl := make([]*proto.ResPlayerSimple, 0, len(friendList))
|
||||
for k, v := range friendList {
|
||||
if k == int(p.M_DwUin) {
|
||||
@ -331,7 +328,6 @@ func (p *Player) FriendListBackData() {
|
||||
fl = append(fl, ps)
|
||||
}
|
||||
}
|
||||
// 预分配申请列表容量
|
||||
ReqFriendList := make([]int64, 0, len(FriendMod.SendApply))
|
||||
for k := range FriendMod.SendApply {
|
||||
ReqFriendList = append(ReqFriendList, int64(k))
|
||||
@ -346,7 +342,6 @@ func (p *Player) FriendListBackData() {
|
||||
|
||||
func (p *Player) FriendApplyBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
// 预分配切片容量
|
||||
al := make([]*proto.ResFriendApplyInfo, 0, len(FriendMod.ApplyList))
|
||||
for k, v := range FriendMod.ApplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(k)
|
||||
@ -364,7 +359,6 @@ func (p *Player) FriendApplyBackData() {
|
||||
|
||||
func (p *Player) FriendLogBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
// 预分配切片容量
|
||||
log := make([]*proto.ResFriendLog, 0, len(FriendMod.Log))
|
||||
for _, v := range FriendMod.Log {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
@ -382,7 +376,6 @@ func (p *Player) FriendLogBackData() {
|
||||
Upvote: v.Upvote,
|
||||
})
|
||||
}
|
||||
// 预分配回复列表容量
|
||||
reply := make([]*proto.ResFriendReply, 0, len(FriendMod.ReplyList))
|
||||
for _, v := range FriendMod.ReplyList {
|
||||
ps := G_GameLogicPtr.GetResSimplePlayerByUid(v.Uid)
|
||||
@ -409,11 +402,9 @@ func (p *Player) FriendLogBackData() {
|
||||
|
||||
func (p *Player) FriendCardBackData() {
|
||||
FriendMod := p.PlayMod.getFriendMod()
|
||||
// 预分配切片容量
|
||||
msgList := make([]*proto.ResFriendCard, 0, len(FriendMod.Card))
|
||||
for _, v := range FriendMod.Card {
|
||||
m := GetCardInfoMsg(v)
|
||||
msgList = append(msgList, m)
|
||||
msgList = append(msgList, GetCardInfoMsg(v))
|
||||
}
|
||||
p.PushClientRes(&proto.ResFriendCardMsg{
|
||||
MsgList: msgList,
|
||||
|
||||
@ -129,24 +129,6 @@ func (p *PlayerChessData) UpdateChessData(player *Player, MChessData map[string]
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *PlayerChessData) UpdateChessDataTest(player *Player, MChessData map[string]int32) error {
|
||||
p.Data.MChessData = MChessData
|
||||
if true {
|
||||
res := &msg.ResUpdatePlayerChessData{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: "棋子数据不一致",
|
||||
}
|
||||
log.Debug("棋子数据不一致, %v---%v", p.Data.MChessData, player.PlayMod.getChessMod().GetChessList())
|
||||
player.SendErrClienRes(res)
|
||||
player.TeLog("outsync_event", map[string]interface{}{
|
||||
"outsync_event": "UpdatePlayerChessDataFunc",
|
||||
})
|
||||
return fmt.Errorf("棋子数据不一致")
|
||||
}
|
||||
player.PlayMod.getChessMod().ChessMap = MChessData
|
||||
return nil
|
||||
}
|
||||
|
||||
// 检查棋子数据是否一致
|
||||
func (p *PlayerChessData) checkChessEqual(player *Player) bool {
|
||||
if len(p.Data.MChessData) == 0 && conf.Server.GameName == "Merge_Pet_Local" {
|
||||
@ -156,12 +138,11 @@ func (p *PlayerChessData) checkChessEqual(player *Player) bool {
|
||||
if len(ChessList) != len(p.Data.MChessData) {
|
||||
return false
|
||||
}
|
||||
aCopy := make([]int, len(ChessList))
|
||||
bCopy := make([]int, len(p.Data.MChessData))
|
||||
aCopy := make([]int, 0, len(ChessList))
|
||||
bCopy := make([]int, 0, len(p.Data.MChessData))
|
||||
for _, v := range ChessList {
|
||||
aCopy = append(aCopy, int(v))
|
||||
}
|
||||
|
||||
for _, v := range p.Data.MChessData {
|
||||
bCopy = append(bCopy, int(v))
|
||||
}
|
||||
@ -181,8 +162,8 @@ func (p *PlayerChessData) checkChessEqual(player *Player) bool {
|
||||
bMap[v]++
|
||||
}
|
||||
|
||||
extra := make([]int, 0)
|
||||
missing := make([]int, 0)
|
||||
var extra []int
|
||||
var missing []int
|
||||
|
||||
// 找出aCopy多的元素
|
||||
for k, v := range aMap {
|
||||
@ -219,10 +200,10 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
|
||||
var addChessCostEnergy int
|
||||
var buyChess int
|
||||
LimitPush := false // 限时事件推送
|
||||
TriggerList := make([]*quest.Trigger, 0)
|
||||
itemList := make([]*item.Item, 0)
|
||||
AddChessList := make([]int, 0)
|
||||
AddNewEmit := make([]int, 0)
|
||||
var TriggerList []*quest.Trigger
|
||||
var itemList []*item.Item
|
||||
var AddChessList []int
|
||||
var AddNewEmit []int
|
||||
EmitList := ChessMod.GetEmitList()
|
||||
for _, v := range handle_list {
|
||||
ChessId := int(v.ChessId)
|
||||
@ -253,8 +234,7 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
HandbookMod := player.PlayMod.getHandbookMod() // 添加图鉴
|
||||
b := HandbookMod.SetHandbook(NewChessId)
|
||||
b := HandbookMod.SetHandbook(NewChessId) // 添加图鉴
|
||||
if b {
|
||||
AddNewEmit = append(AddNewEmit, NewChessId)
|
||||
}
|
||||
@ -322,12 +302,12 @@ func (p *PlayerChessData) HandleChess(player *Player, handle_list []*msg.ChessHa
|
||||
return nil, nil, err
|
||||
}
|
||||
NewEmitList := ChessMod.GetEmitList()
|
||||
EmitProductList := make([]string, 0)
|
||||
var EmitProductList []string
|
||||
for _, v := range EmitList {
|
||||
ColorList := mergeDataCfg.GetEmitProduceType(v)
|
||||
EmitProductList = append(EmitProductList, ColorList...)
|
||||
}
|
||||
NewEmitProductList := make([]string, 0)
|
||||
var NewEmitProductList []string
|
||||
for _, v := range NewEmitList {
|
||||
ColorList := mergeDataCfg.GetEmitProduceType(v)
|
||||
NewEmitProductList = append(NewEmitProductList, ColorList...)
|
||||
|
||||
@ -682,7 +682,7 @@ func (p *Player) HandleItem(itemList []*item.Item, Label string) error {
|
||||
}
|
||||
|
||||
p.PushClientRes(ChessMod.BackData())
|
||||
case item.ITEM_TYPE_LIMIED_TIME_EVENT: // 限时事件
|
||||
case item.ITEM_TYPE_LIMITED_TIME_EVENT: // 限时事件
|
||||
EffectList := itemCfg.GetItemEffectList(v.Id)
|
||||
LimitedTimeEventMod := p.PlayMod.getLimitedTimeEventMod()
|
||||
if len(EffectList) < 2 {
|
||||
@ -892,6 +892,7 @@ func (p *Player) LoginBackData() {
|
||||
HandleType: MsgMod.HANDLE_MOD_PLAYER_LOGIN,
|
||||
Extra: conf.Server.ServerID,
|
||||
})
|
||||
SetFriendApplyNotification(int(p.M_DwUin), 0)
|
||||
p.PushClientRes(p.PlayMod.mod_list.Base.BackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.Handbook.BackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.Base.BackData())
|
||||
@ -1001,7 +1002,8 @@ func (p *Player) UpdateUserInfo() {
|
||||
simple.CardInfo = CardMod.GetCardList()
|
||||
simple.ActLog = p.PlayMod.getFriendMod().GetActLogLast()
|
||||
simple.Physiology = p.PlayMod.getPlayroomMod().GetPhysiologyList()
|
||||
|
||||
simple.Lang = int(p.PlayMod.getBaseMod().Lang)
|
||||
simple.Account = p.PlayMod.getBaseMod().Account
|
||||
//TODO 存储到redis 在新版本中将优化成gob进行压缩
|
||||
value, _ := json.Marshal(simple)
|
||||
IdStr := GoUtil.String(p.M_DwUin)
|
||||
@ -1060,7 +1062,7 @@ func (p *Player) AddLog(Uid int, Type int, Param string, Time int64) {
|
||||
Id: int32(Id),
|
||||
Time: int32(Time),
|
||||
},
|
||||
Bubble: FriendMod.GetBubbble(Id),
|
||||
Bubble: FriendMod.GetBubble(Id),
|
||||
})
|
||||
}
|
||||
|
||||
@ -1246,3 +1248,15 @@ func (p *Player) DispatcherHandle() {
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
func CheckPlayerLose(Uid int) bool {
|
||||
FriendSimpleData := G_GameLogicPtr.GetSimplePlayerByUid(Uid)
|
||||
if FriendSimpleData == nil {
|
||||
return true
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
if now-FriendSimpleData.Loginout > sevendays {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
@ -246,10 +246,12 @@ func RegHandbookAllReward(player *Player, buf []byte) error {
|
||||
player.PushClientRes(&msg.ResHandbookAllReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
now := GoUtil.Now()
|
||||
NotifyAllFriend(player, &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_HANDBOOK_COLLECTION,
|
||||
From: int(player.M_DwUin),
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
Extra: MsqMod.HandbookMsg{
|
||||
Type: req.Type,
|
||||
},
|
||||
@ -1076,6 +1078,7 @@ func ReqChessEx(player *Player, buf []byte) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 领取资源宝箱
|
||||
func ReqSourceChest(player *Player, buf []byte) error {
|
||||
req := &msg.ReqSourceChest{}
|
||||
err := proto.Unmarshal(buf, req)
|
||||
@ -1880,6 +1883,7 @@ func ReqApplyFriend(player *Player, buf []byte) error {
|
||||
})
|
||||
return fmt.Errorf("already applied")
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
if req.Type == 1 {
|
||||
Items, err := FriendMod.GetSponsorReward()
|
||||
if err != nil {
|
||||
@ -1899,12 +1903,13 @@ func ReqApplyFriend(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.AddLog(int(req.Uid), friend.LOG_TYPE_FRIEND_SPONSOR, "", GoUtil.Now())
|
||||
player.AddLog(int(req.Uid), friend.LOG_TYPE_FRIEND_SPONSOR, "", now)
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_FRIEND_SPONSOER,
|
||||
From: int(player.M_DwUin),
|
||||
To: Uid,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
})
|
||||
player.PushClientRes(BaseMod.BackData())
|
||||
player.TeLog("friend_invite_reward", map[string]interface{}{
|
||||
@ -1915,7 +1920,8 @@ func ReqApplyFriend(player *Player, buf []byte) error {
|
||||
Type: MsqMod.HANDLE_TYPE_APPLY,
|
||||
From: int(player.M_DwUin),
|
||||
To: Uid,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
}
|
||||
FriendMgrSend(m)
|
||||
player.PushClientRes(&msg.ResApplyFriend{
|
||||
@ -1951,7 +1957,7 @@ func ReqAgreeFriend(player *Player, buf []byte) error {
|
||||
}
|
||||
// 新好友才可以打招呼
|
||||
if !FriendMod.CheckAddBefore(Uid) {
|
||||
FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+24*3600, nil)
|
||||
FriendMod.AddReplyInfo(Uid, friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+oneday, nil)
|
||||
}
|
||||
FriendMod.AddFriend(Uid)
|
||||
player.PushClientRes(&msg.ResAgreeFriend{
|
||||
@ -2022,11 +2028,13 @@ func ReqRefuseFriend(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Uid: req.Uid,
|
||||
})
|
||||
now := GoUtil.Now()
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_REFUSE,
|
||||
From: int(player.M_DwUin),
|
||||
To: Uid,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + 86400*7,
|
||||
}
|
||||
FriendMgrSend(m)
|
||||
player.FriendApplyBackData()
|
||||
@ -2069,13 +2077,6 @@ func ReqCardGive(player *Player, buf []byte) error {
|
||||
})
|
||||
return fmt.Errorf("card id empty")
|
||||
}
|
||||
// err = player.SubCard(CardId)
|
||||
// if err != nil {
|
||||
// player.SendErrClienRes(&msg.ResCardGive{
|
||||
// Code: msg.RES_CODE_FAIL,
|
||||
// Msg: err.Error(),
|
||||
// })
|
||||
// }
|
||||
Id := GoUtil.CreateCardId(int(player.M_DwUin), 0, int(req.CardId))
|
||||
for _, v := range req.Uid {
|
||||
Uid := int(v)
|
||||
@ -2203,11 +2204,13 @@ func ReqRefuseCardGive(player *Player, buf []byte) error {
|
||||
player.TeLog("ReqRefuseCardGive", map[string]interface{}{
|
||||
"card_id": CardInfo.CardId,
|
||||
})
|
||||
now := GoUtil.Now()
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_REG_CARD_REFUSE,
|
||||
From: int(player.M_DwUin),
|
||||
To: CardInfo.AUid,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + 86400,
|
||||
Extra: *CardInfo,
|
||||
}
|
||||
FriendMgrSend(m)
|
||||
@ -3109,12 +3112,14 @@ func ReqFriendTLUpvote(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
// 添加时间线
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_HANDBOOK_UPVOTE,
|
||||
From: int(player.M_DwUin),
|
||||
To: int(FUid),
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
}
|
||||
FriendMod.AddActLog(friend.ACT_LOG_TYPE_VISIT_UPVOTE, "")
|
||||
player.UpdateUserInfo()
|
||||
@ -3304,11 +3309,13 @@ func ReqSelfInvited(player *Player, buf []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_INVITE_FRIEND,
|
||||
From: int(player.M_DwUin),
|
||||
To: int(req.InviterId),
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + 86400,
|
||||
})
|
||||
player.PushClientRes(&msg.ResSelfInvited{
|
||||
ResultCode: 1,
|
||||
@ -3887,11 +3894,13 @@ func ReqPlayroomGame(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: Target,
|
||||
Type: MsqMod.HANDLE_TYPE_PLAYROOM_GAME,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
Extra: GameResult{
|
||||
T: PlayroomMod.GetGameId(),
|
||||
Emoji: int(req.EmojiId),
|
||||
@ -3947,11 +3956,13 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
|
||||
})
|
||||
return fmt.Errorf("no game or target")
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: Target,
|
||||
Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
Item: Items,
|
||||
Extra: GameResult{
|
||||
T: PlayroomMod.GetGameId(),
|
||||
@ -3975,6 +3986,7 @@ func ReqPlayroomSelectReward(player *Player, buf []byte) error {
|
||||
PlayroomMod.ResetGame()
|
||||
player.PlayerDecoSetLog("emoji", int(req.EmojiId), "playroom_select_reward")
|
||||
player.PlayroomBackData()
|
||||
go NotifyPetroomGame(Target)
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResPlayroomSelectReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -4180,11 +4192,13 @@ func ReqPlayroomFlipReward(player *Player, buf []byte) error {
|
||||
FriendMod.AddActLog(friend.ACT_LOG_TYPE_GET_VISIT_GAME_PRIZE, "")
|
||||
player.UpdateUserInfo()
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: Target,
|
||||
Type: MsqMod.HANDLE_TYPE_PLAYROOM_LOSE,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
Item: Items,
|
||||
Extra: GameResult{
|
||||
T: playroom.GAME_TYPE_FILP,
|
||||
@ -4270,17 +4284,20 @@ func ReqPlayroomUpvote(player *Player, buf []byte) error {
|
||||
Msg: err.Error(),
|
||||
})
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: int(req.Id),
|
||||
Type: MsqMod.HANDLE_TYPE_PLAYROOM_UPVOTE,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
})
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: int(req.Id),
|
||||
Type: MsqMod.HANDLE_TYPE_PLAYROOM_KISS,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
})
|
||||
player.QuestTrigger(&quest.Trigger{Label: quest.TRIGGER_LABEL_PLAYROOM_UPVOTE})
|
||||
player.AddPlayroomUpvote(int(req.Id))
|
||||
@ -4597,13 +4614,15 @@ func ReqFriendTreasureFilp(player *Player, buf []byte) error {
|
||||
)
|
||||
return err
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
if Uid != 0 && Items != nil {
|
||||
FriendMgrSend(&MsqMod.Msg{
|
||||
From: int(player.M_DwUin),
|
||||
To: int(Uid),
|
||||
Type: MsqMod.HANDLE_TYPE_TREASURE_RESULT,
|
||||
Extra: Items[0].Num,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
})
|
||||
}
|
||||
|
||||
@ -4641,6 +4660,7 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error {
|
||||
)
|
||||
return err
|
||||
}
|
||||
now := GoUtil.Now()
|
||||
for _, v := range FriendTreasureMod.List {
|
||||
ItemNum := 0
|
||||
if v.Status == 1 {
|
||||
@ -4650,7 +4670,8 @@ func ReqFriendTreasureEnd(player *Player, buf []byte) error {
|
||||
From: int(player.M_DwUin),
|
||||
To: int(v.Uid),
|
||||
Type: MsqMod.FRIEND_TREASURE_HANDLE,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
Extra: []*item.Item{item.NewItem(item.ITEM_STAR_ID, ItemNum)},
|
||||
})
|
||||
}
|
||||
@ -5050,8 +5071,8 @@ func ReqAddNpc(player *Player, buf []byte) error {
|
||||
player.TeLog("add_npc", map[string]interface{}{
|
||||
"NpcId": int(req.NpcId),
|
||||
})
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+24*3600, nil)
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING_Get, "", GoUtil.Now()+24*3600, nil)
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING, "", GoUtil.Now()+oneday, nil)
|
||||
FriendMod.AddReplyInfo(int(req.NpcId), friend.REPLY_TYPE_GREETING_Get, "", GoUtil.Now()+oneday, nil)
|
||||
player.AddLog(int(req.NpcId), friend.LOG_TYPE_FRIEND_BECOME_NPC, GoUtil.String(req.NpcId), GoUtil.Now())
|
||||
player.PushClientRes(&msg.ResAddNpc{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
@ -5772,6 +5793,7 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error {
|
||||
return fmt.Errorf("reply info not exist")
|
||||
}
|
||||
ErrType := msg.FRIEND_REPLY_HANDLE_ERR_TYPE_NONE
|
||||
now := GoUtil.Now()
|
||||
if req.Type == 1 && ReplyInfo.Uid > 10000 {
|
||||
switch ReplyInfo.Type {
|
||||
case friend.REPLY_TYPE_GREETING:
|
||||
@ -5784,7 +5806,8 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error {
|
||||
From: int(player.M_DwUin),
|
||||
To: int(ReplyInfo.Uid),
|
||||
Type: MsqMod.HANDLE_TYPE_FRIEND_GREETING_REPLY,
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
Extra: ReplyData,
|
||||
})
|
||||
case friend.REPLY_TYPE_CATNIP: // 猫草大作战同意邀请
|
||||
@ -5796,7 +5819,7 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error {
|
||||
err := player.SetCatnipPartner(GameId, ReplyInfo.Uid, activityInfo.EndT)
|
||||
if err == nil {
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_MINING)
|
||||
ActivityId := player.GetActivityId(activity.ACT_TYPE_CATNIP)
|
||||
UserList, _ := CatnipMod.Agree(GameId, ReplyInfo.Uid)
|
||||
player.TeLog("catnip_agree", map[string]interface{}{
|
||||
"Id": int(GameId),
|
||||
@ -5809,7 +5832,8 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error {
|
||||
ActivityId: ActivityId,
|
||||
GameId: int(GameId),
|
||||
},
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
})
|
||||
|
||||
for _, v := range UserList {
|
||||
@ -5821,7 +5845,8 @@ func ReqFriendReplyHandle(player *Player, buf []byte) error {
|
||||
ActivityId: ActivityId,
|
||||
GameId: int(GameId),
|
||||
},
|
||||
SendT: GoUtil.Now(),
|
||||
SendT: now,
|
||||
End: now + sevendays,
|
||||
})
|
||||
}
|
||||
player.CatnipBackData()
|
||||
|
||||
@ -195,11 +195,7 @@ func (p *Player) TriggerSeed() {
|
||||
}
|
||||
}
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
if !b {
|
||||
BaseMod.SetSeed(false)
|
||||
} else {
|
||||
BaseMod.SetSeed(true)
|
||||
}
|
||||
BaseMod.SetSeed(b)
|
||||
}
|
||||
|
||||
func (p *Player) TriggerSeedSource() {
|
||||
@ -207,9 +203,7 @@ func (p *Player) TriggerSeedSource() {
|
||||
if !BaseMod.GetSeed() {
|
||||
return
|
||||
}
|
||||
Total := 0
|
||||
Energy := BaseMod.GetEnergy()
|
||||
Total += Energy
|
||||
Total := BaseMod.GetEnergy()
|
||||
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
ChessList := ChessMod.GetUnlockChessList()
|
||||
@ -308,17 +302,17 @@ func (p *Player) TriggerSeedOrder() *order.Order {
|
||||
}
|
||||
}
|
||||
Q += max(Q1-Q2-Q3, 0)
|
||||
}
|
||||
Order.Q = Q
|
||||
MaxQ = max(MaxQ, Q)
|
||||
MinQ = min(MinQ, Q)
|
||||
}
|
||||
}
|
||||
|
||||
if E > MaxQ {
|
||||
return nil
|
||||
}
|
||||
// 生成订单
|
||||
ProduceChessList := []int{}
|
||||
var ProduceChessList []int
|
||||
for _, v := range AllChess {
|
||||
Type := mergeDataCfg.GetTypeById(v)
|
||||
if Type != "Product" {
|
||||
@ -333,13 +327,13 @@ func (p *Player) TriggerSeedOrder() *order.Order {
|
||||
break
|
||||
}
|
||||
}
|
||||
EmitTypeList := []string{}
|
||||
var EmitTypeList []string
|
||||
for _, v := range NewOrder.MergeId {
|
||||
Color := mergeDataCfg.GetColorById(v)
|
||||
EmitType := mergeDataCfg.GetEmitTypeByColor(Color)
|
||||
EmitTypeList = append(EmitTypeList, EmitType)
|
||||
}
|
||||
ChessList := []int{}
|
||||
var ChessList []int
|
||||
for _, v := range ProduceChessList {
|
||||
Color := mergeDataCfg.GetColorById(v)
|
||||
EmitType := mergeDataCfg.GetEmitTypeByColor(Color)
|
||||
@ -373,7 +367,7 @@ func (p *Player) TriggerSeedOrder() *order.Order {
|
||||
if E < MinQ {
|
||||
for _, Order := range OrderMod.OrderPool {
|
||||
if Order.Q == MinQ {
|
||||
ChessList := []int{}
|
||||
var ChessList []int
|
||||
for _, v := range ProduceChessList {
|
||||
Lv := mergeDataCfg.GetLvById(v)
|
||||
if Lv < 5 {
|
||||
@ -390,7 +384,7 @@ func (p *Player) TriggerSeedOrder() *order.Order {
|
||||
}
|
||||
|
||||
if E > MinQ && E < MaxQ {
|
||||
L1 := []*order.Order{}
|
||||
var L1 []*order.Order
|
||||
for _, Order := range OrderMod.OrderPool {
|
||||
if Order.Q > E {
|
||||
L1 = append(L1, Order)
|
||||
@ -412,7 +406,7 @@ func (p *Player) TriggerSeedOrder() *order.Order {
|
||||
if NeedScore > Smax {
|
||||
for _, Order := range OrderMod.OrderPool {
|
||||
if Order.Q == MinQ {
|
||||
ChessList := []int{}
|
||||
var ChessList []int
|
||||
for _, v := range ProduceChessList {
|
||||
Lv := mergeDataCfg.GetLvById(v)
|
||||
if Lv < 5 {
|
||||
@ -442,7 +436,7 @@ func (p *Player) TriggerSeedOrder() *order.Order {
|
||||
}
|
||||
}
|
||||
}
|
||||
L2 := []*order.Order{}
|
||||
var L2 []*order.Order
|
||||
for _, Order := range L1 {
|
||||
if Order.S > NeedScore {
|
||||
L2 = append(L2, Order)
|
||||
|
||||
@ -28,7 +28,16 @@ func (p *Player) GetVarData(key string) interface{} {
|
||||
return cache.D
|
||||
}
|
||||
|
||||
func (p *Player) GetUserVarData(key string, PlayerId int) interface{} {
|
||||
func GetDailyVarData(key string) interface{} {
|
||||
cache := &VarExpireData{}
|
||||
err := LoadCacheVarData(key, cache)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return cache.D
|
||||
}
|
||||
|
||||
func GetUserVarData(key string, PlayerId int) interface{} {
|
||||
cache := map[string]*VarExpireData{}
|
||||
err := LoadCacheVarData(GoUtil.GetVarKey(int(PlayerId)), &cache)
|
||||
if err != nil {
|
||||
@ -39,24 +48,18 @@ func (p *Player) GetUserVarData(key string, PlayerId int) interface{} {
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
if data.T > 0 && data.T < GoUtil.Now() {
|
||||
return nil
|
||||
}
|
||||
return data.D
|
||||
}
|
||||
|
||||
// func GetServerVarData(key string) interface{} {
|
||||
// data, err := GetServerData(key)
|
||||
// if err != nil {
|
||||
// log.Error("GetServerVarData err : %s", err)
|
||||
// return nil
|
||||
// }
|
||||
// return data.Extra
|
||||
// }
|
||||
|
||||
func (p *Player) OpVarDataAsync(PlayerId int, key string, value interface{}, opType int) {
|
||||
func OpDailyVarDataAsync(PlayerId int, key string, value interface{}, opType int) {
|
||||
SendMsgToCenterAsync(&msg.Msg{
|
||||
From: int(p.M_DwUin),
|
||||
From: 0,
|
||||
To: PlayerId,
|
||||
SendT: GoUtil.Now(),
|
||||
HandleType: msg.HANDLE_MOD_USER_VAR_SET,
|
||||
HandleType: msg.HANDLE_MOD_DAILY_VAR_SET,
|
||||
Extra: msg.VarData{
|
||||
Key: key,
|
||||
Value: value,
|
||||
@ -65,12 +68,28 @@ func (p *Player) OpVarDataAsync(PlayerId int, key string, value interface{}, opT
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) OpVarDataSync(PlayerId int, key string, value interface{}, opType int) (*msg.Msg, error) {
|
||||
func (p *Player) OpVarDataAsync(PlayerId int, key string, value interface{}, opType int, end int64) {
|
||||
SendMsgToCenterAsync(&msg.Msg{
|
||||
From: int(p.M_DwUin),
|
||||
To: PlayerId,
|
||||
SendT: GoUtil.Now(),
|
||||
HandleType: msg.HANDLE_MOD_USER_VAR_SET,
|
||||
End: end,
|
||||
Extra: msg.VarData{
|
||||
Key: key,
|
||||
Value: value,
|
||||
SetType: opType,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) OpVarDataSync(PlayerId int, key string, value interface{}, opType int, end int64) (*msg.Msg, error) {
|
||||
return SendMsgToCenterSync(&msg.Msg{
|
||||
From: int(p.M_DwUin),
|
||||
To: PlayerId,
|
||||
SendT: GoUtil.Now(),
|
||||
HandleType: msg.HANDLE_MOD_USER_VAR_SET,
|
||||
End: end,
|
||||
Extra: msg.VarData{
|
||||
Key: key,
|
||||
Value: value,
|
||||
@ -93,56 +112,56 @@ func (p *Player) OpServerVarDataSync(key string, Value interface{}, opType int)
|
||||
})
|
||||
}
|
||||
|
||||
func (p *Player) SetVarDataAsync(key string, value interface{}, PlayerId int) {
|
||||
p.OpVarDataAsync(PlayerId, key, value, msg.VAR_OP_SET)
|
||||
func (p *Player) SetVarDataAsync(key string, value interface{}, PlayerId int, end int64) {
|
||||
p.OpVarDataAsync(PlayerId, key, value, msg.VAR_OP_SET, end)
|
||||
}
|
||||
|
||||
func (p *Player) AddVarDataAsync(key string, PlayerId int) {
|
||||
p.OpVarDataAsync(PlayerId, key, nil, msg.VAR_OP_ADD)
|
||||
func (p *Player) AddVarDataAsync(key string, PlayerId int, end int64) {
|
||||
p.OpVarDataAsync(PlayerId, key, nil, msg.VAR_OP_ADD, end)
|
||||
}
|
||||
|
||||
func (p *Player) SubVarDataAsync(key string, PlayerId int) {
|
||||
p.OpVarDataAsync(PlayerId, key, nil, msg.VAR_OP_SUB)
|
||||
func (p *Player) SubVarDataAsync(key string, PlayerId int, end int64) {
|
||||
p.OpVarDataAsync(PlayerId, key, nil, msg.VAR_OP_SUB, end)
|
||||
}
|
||||
|
||||
func (p *Player) AddPlayroomUpvote(PlayerId int) {
|
||||
p.AddVarDataAsync(VAR_PLAYROOM_UPVOTE, PlayerId)
|
||||
p.AddVarDataAsync(VAR_PLAYROOM_UPVOTE, PlayerId, 0)
|
||||
}
|
||||
|
||||
func (p *Player) AddPlayroomChip(PlayerId int) {
|
||||
p.AddVarDataAsync(VAR_PLAYROOM_CHIP, PlayerId)
|
||||
p.AddVarDataAsync(VAR_PLAYROOM_CHIP, PlayerId, 0)
|
||||
}
|
||||
|
||||
func (p *Player) SubPlayroomChip(PlayerId int) {
|
||||
p.SubVarDataAsync(VAR_PLAYROOM_CHIP, PlayerId)
|
||||
p.SubVarDataAsync(VAR_PLAYROOM_CHIP, PlayerId, 0)
|
||||
}
|
||||
|
||||
func (p *Player) GetPlayroomUpvote(PlayerId int) int {
|
||||
data := p.GetUserVarData(VAR_PLAYROOM_UPVOTE, PlayerId)
|
||||
data := GetUserVarData(VAR_PLAYROOM_UPVOTE, PlayerId)
|
||||
if data == nil {
|
||||
return 0
|
||||
}
|
||||
return data.(int)
|
||||
return GoUtil.Int(data)
|
||||
}
|
||||
|
||||
func (p *Player) GetPlayroomChip(PlayerId int) int {
|
||||
data := p.GetUserVarData(VAR_PLAYROOM_CHIP, PlayerId)
|
||||
data := GetUserVarData(VAR_PLAYROOM_CHIP, PlayerId)
|
||||
if data == nil {
|
||||
return 0
|
||||
}
|
||||
return data.(int)
|
||||
return GoUtil.Int(data)
|
||||
}
|
||||
|
||||
func (p *Player) SetPlayroomKiss(Kiss int, PlayerId int) {
|
||||
p.SetVarDataAsync(VAR_PLAYROOM_KISS, Kiss, PlayerId)
|
||||
p.SetVarDataAsync(VAR_PLAYROOM_KISS, Kiss, PlayerId, 0)
|
||||
}
|
||||
|
||||
func (p *Player) GetPlayroomKiss(PlayerId int) int {
|
||||
data := p.GetUserVarData(VAR_PLAYROOM_KISS, PlayerId)
|
||||
data := GetUserVarData(VAR_PLAYROOM_KISS, PlayerId)
|
||||
if data == nil {
|
||||
return 0
|
||||
}
|
||||
return data.(int)
|
||||
return GoUtil.Int(data)
|
||||
}
|
||||
|
||||
func (p *Player) GetGoldCard() *VarGoldCard {
|
||||
@ -150,7 +169,11 @@ func (p *Player) GetGoldCard() *VarGoldCard {
|
||||
if data == nil {
|
||||
return &VarGoldCard{}
|
||||
}
|
||||
return data.(*VarGoldCard)
|
||||
i, ok := data.(*VarGoldCard)
|
||||
if !ok {
|
||||
return &VarGoldCard{}
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
func (p *Player) GetCatnipPartner(Uid int) []int {
|
||||
@ -184,3 +207,43 @@ func LoadCacheVarData(key string, value interface{}) error {
|
||||
}
|
||||
return GoUtil.GobUnmarshal(data, value)
|
||||
}
|
||||
|
||||
const (
|
||||
notifyKeyFriendApply = "friend_apply_n"
|
||||
notifyKeyPetroomGame = "petroom_game_n"
|
||||
)
|
||||
|
||||
func GetFriendApplyNotification(PlayerId int) int {
|
||||
data := GetUserVarData(notifyKeyFriendApply, PlayerId)
|
||||
if data == nil {
|
||||
return 0
|
||||
}
|
||||
return GoUtil.Int(data)
|
||||
}
|
||||
|
||||
func SetFriendApplyNotification(PlayerId int, Count int) {
|
||||
p := new(Player)
|
||||
p.SetVarDataAsync(notifyKeyFriendApply, Count, PlayerId, 0)
|
||||
}
|
||||
|
||||
func GetPetroomGameNotification(PlayerId int) (int, int64) {
|
||||
data := GetUserVarData(notifyKeyPetroomGame, PlayerId)
|
||||
if data == nil {
|
||||
return 0, 0
|
||||
}
|
||||
info, ok := data.(map[string]interface{})
|
||||
if !ok {
|
||||
return 0, 0
|
||||
}
|
||||
return GoUtil.Int(info["count"]), GoUtil.Int64(info["send"])
|
||||
}
|
||||
|
||||
func SetPetroomGameNotification(PlayerId int, Count int) {
|
||||
p := new(Player)
|
||||
end := GoUtil.ZeroTimestamp() + oneday
|
||||
value := map[string]interface{}{
|
||||
"count": Count,
|
||||
"send": GoUtil.Now(),
|
||||
}
|
||||
p.SetVarDataAsync(notifyKeyPetroomGame, value, PlayerId, end)
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"fmt"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/msg"
|
||||
@ -22,6 +21,7 @@ type VarData struct {
|
||||
|
||||
NewVar map[string]*VarExpireData
|
||||
NewUseVar map[int]map[string]*VarExpireData
|
||||
DailyVar map[string]*VarExpireData
|
||||
ZeroTime int64
|
||||
Version int64
|
||||
mu sync.Mutex
|
||||
@ -36,8 +36,6 @@ const (
|
||||
)
|
||||
|
||||
func (f *VarMgr) Init() {
|
||||
gob.Register(&VarGoldCard{})
|
||||
gob.Register(&VarExpireData{})
|
||||
f.key = VAR_MGR_KEY
|
||||
f.data = &VarData{
|
||||
NewVar: map[string]*VarExpireData{},
|
||||
@ -47,14 +45,17 @@ func (f *VarMgr) Init() {
|
||||
f.init()
|
||||
// 版本更新 重构
|
||||
f.version()
|
||||
if f.data.(*VarData).NewVar == nil {
|
||||
f.data.(*VarData).NewVar = make(map[string]*VarExpireData)
|
||||
if f.getData().NewVar == nil {
|
||||
f.getData().NewVar = make(map[string]*VarExpireData)
|
||||
}
|
||||
if f.data.(*VarData).UserVar == nil {
|
||||
f.data.(*VarData).UserVar = make(map[string]*VarUserData)
|
||||
if f.getData().UserVar == nil {
|
||||
f.getData().UserVar = make(map[string]*VarUserData)
|
||||
}
|
||||
if f.data.(*VarData).VarExpire == nil {
|
||||
f.data.(*VarData).VarExpire = make(map[string]*VarExpireData)
|
||||
if f.getData().VarExpire == nil {
|
||||
f.getData().VarExpire = make(map[string]*VarExpireData)
|
||||
}
|
||||
if f.getData().DailyVar == nil {
|
||||
f.getData().DailyVar = make(map[string]*VarExpireData)
|
||||
}
|
||||
if f.getData().ZeroTime == GoUtil.ZeroTimestamp() {
|
||||
f.ZeroUpdate()
|
||||
@ -72,7 +73,7 @@ func (f *VarMgr) fixbug() {
|
||||
if v != nil {
|
||||
del := true
|
||||
for _, ved := range v {
|
||||
if ved.D.(int) != 0 {
|
||||
if n, ok := ved.D.(int); ok && n != 0 {
|
||||
del = false
|
||||
}
|
||||
}
|
||||
@ -92,13 +93,13 @@ func (f *VarMgr) version() {
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
// set to next version
|
||||
for k, v := range data.UserVar {
|
||||
if v != nil {
|
||||
for k, userData := range data.UserVar {
|
||||
if userData != nil {
|
||||
uidStr := strings.Split(k, "_")[2]
|
||||
uid := GoUtil.Int(uidStr)
|
||||
f.SetUserVar(uid, VAR_PLAYROOM_UPVOTE, v.Upvote)
|
||||
f.SetUserVar(uid, VAR_PLAYROOM_CHIP, v.Chip)
|
||||
f.SetUserVar(uid, VAR_PLAYROOM_KISS, v.Kiss)
|
||||
f.SetUserVar(uid, VAR_PLAYROOM_UPVOTE, userData.Upvote)
|
||||
f.SetUserVar(uid, VAR_PLAYROOM_CHIP, userData.Chip)
|
||||
f.SetUserVar(uid, VAR_PLAYROOM_KISS, userData.Kiss)
|
||||
delete(data.UserVar, k)
|
||||
}
|
||||
}
|
||||
@ -111,18 +112,23 @@ func (f *VarMgr) version() {
|
||||
}
|
||||
|
||||
func (f *VarMgr) ZeroUpdate() {
|
||||
f.getData().ZeroTime = GoUtil.ZeroTimestamp()
|
||||
data := f.getData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
data.ZeroTime = GoUtil.ZeroTimestamp()
|
||||
// 随机生成两个金卡
|
||||
Card1, Card2 := card.RankGoldCard()
|
||||
f.SetVar(VAR_GOLD_CARD, &VarGoldCard{
|
||||
Four: Card1,
|
||||
Five: Card2,
|
||||
})
|
||||
for k, v := range f.getData().NewVar {
|
||||
for k, v := range data.NewVar {
|
||||
if v.T < GoUtil.ZeroTimestamp() {
|
||||
delete(f.getData().Var, k)
|
||||
delete(data.NewVar, k)
|
||||
}
|
||||
}
|
||||
// 清空每日变量
|
||||
data.DailyVar = make(map[string]*VarExpireData)
|
||||
f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() {
|
||||
f.ZeroUpdate()
|
||||
})
|
||||
@ -163,7 +169,6 @@ func (f *VarMgr) SetUserVar(uid int, key string, value interface{}) {
|
||||
}
|
||||
ved.D = value
|
||||
varData[key] = ved
|
||||
f.getData().NewUseVar[uid] = varData
|
||||
SaveCacheVarData(GoUtil.GetVarKey(uid), varData)
|
||||
}
|
||||
|
||||
@ -171,7 +176,6 @@ func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData {
|
||||
varData := f.getData().NewUseVar[uid]
|
||||
if varData == nil {
|
||||
varData = make(map[string]*VarExpireData)
|
||||
//f.getData().NewUseVar[uid] = varData
|
||||
}
|
||||
ved, ok := varData[key]
|
||||
if !ok {
|
||||
@ -200,38 +204,20 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
data := getVarData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
if v, ok := m.Extra.(msg.VarData); ok {
|
||||
v, ok := m.Extra.(msg.VarData)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("invalid parameters for setting var data")
|
||||
}
|
||||
ved, ok := data.NewVar[v.Key]
|
||||
if !ok {
|
||||
ved = &VarExpireData{}
|
||||
}
|
||||
switch v.SetType {
|
||||
case msg.VAR_OP_SET:
|
||||
ved.D = v.Value
|
||||
case msg.VAR_OP_ADD:
|
||||
if num, ok := ved.D.(int); ok {
|
||||
ved.D = num + 1
|
||||
} else {
|
||||
ved.D = 1
|
||||
}
|
||||
case msg.VAR_OP_SUB:
|
||||
if num, ok := ved.D.(int); ok {
|
||||
if num > 0 {
|
||||
ved.D = num - 1
|
||||
} else {
|
||||
ved.D = 0
|
||||
}
|
||||
} else {
|
||||
ved.D = 0
|
||||
}
|
||||
}
|
||||
ved.U = time.Now().Unix()
|
||||
varDataOperation(ved, v.SetType, v.Value)
|
||||
if m.End > 0 {
|
||||
ved.T = m.End
|
||||
}
|
||||
data.NewVar[v.Key] = ved
|
||||
SaveCacheVarData(v.Key, ved)
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
@ -257,53 +243,69 @@ func SetUserVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
data := getVarData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
if v, ok := m.Extra.(msg.VarData); ok {
|
||||
v, ok := m.Extra.(msg.VarData)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("invalid parameters for setting var data")
|
||||
}
|
||||
varData := data.NewUseVar[m.To]
|
||||
if varData == nil {
|
||||
varData = make(map[string]*VarExpireData)
|
||||
data.NewUseVar[m.To] = varData
|
||||
}
|
||||
ved, ok := varData[v.Key]
|
||||
if !ok {
|
||||
ved := varData[v.Key]
|
||||
if ved == nil {
|
||||
ved = &VarExpireData{}
|
||||
}
|
||||
switch v.SetType {
|
||||
case msg.VAR_OP_SET:
|
||||
ved.D = v.Value
|
||||
case msg.VAR_OP_ADD:
|
||||
if num, ok := ved.D.(int); ok {
|
||||
ved.D = num + 1
|
||||
} else {
|
||||
ved.D = 1
|
||||
}
|
||||
case msg.VAR_OP_SUB:
|
||||
if num, ok := ved.D.(int); ok {
|
||||
if num > 0 {
|
||||
ved.D = num - 1
|
||||
} else {
|
||||
ved.D = 0
|
||||
}
|
||||
} else {
|
||||
ved.D = 0
|
||||
}
|
||||
}
|
||||
ved.U = time.Now().Unix()
|
||||
varDataOperation(ved, v.SetType, v.Value)
|
||||
if m.End > 0 {
|
||||
ved.T = m.End
|
||||
}
|
||||
varData[v.Key] = ved
|
||||
data.NewUseVar[m.To] = varData
|
||||
SaveCacheVarData(GoUtil.GetVarKey(m.To), data.NewUseVar[m.To])
|
||||
}
|
||||
// 保存到缓存中
|
||||
SaveCacheVarData(GoUtil.GetVarKey(m.To), varData)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func GetVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
data := getVarData()
|
||||
varData := &VarExpireData{}
|
||||
info, ok := m.Extra.(msg.VarData)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("invalid parameters for getting var data")
|
||||
}
|
||||
varData, _ = data.NewVar[info.Key]
|
||||
if varData == nil {
|
||||
varData = &VarExpireData{}
|
||||
}
|
||||
ReplyPlayerMsgASync(m, varData.D)
|
||||
return varData, nil
|
||||
}
|
||||
|
||||
func SetDailyVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
data := getVarData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
info, ok := m.Extra.(msg.VarData)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("invalid parameters for getting daily var data")
|
||||
}
|
||||
varData := data.DailyVar[info.Key]
|
||||
if varData == nil {
|
||||
varData = &VarExpireData{}
|
||||
}
|
||||
varDataOperation(varData, info.SetType, info.Value)
|
||||
if m.End > 0 {
|
||||
varData.T = m.End
|
||||
}
|
||||
data.DailyVar[info.Key] = varData
|
||||
SaveCacheVarData(GoUtil.GetVarKey(m.To), varData)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func GetDailyVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
data := getVarData()
|
||||
varData := &VarExpireData{}
|
||||
if v, ok := m.Extra.(msg.VarData); ok {
|
||||
varData, _ = data.NewVar[v.Key]
|
||||
varData, _ = data.DailyVar[v.Key]
|
||||
if varData == nil {
|
||||
varData = &VarExpireData{}
|
||||
}
|
||||
@ -312,3 +314,28 @@ func GetVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
}
|
||||
return nil, fmt.Errorf("invalid parameters for getting var data")
|
||||
}
|
||||
|
||||
func varDataOperation(varData *VarExpireData, setType int, value interface{}) *VarExpireData {
|
||||
switch setType {
|
||||
case msg.VAR_OP_SET:
|
||||
varData.D = value
|
||||
case msg.VAR_OP_ADD:
|
||||
if num, ok := varData.D.(int); ok {
|
||||
varData.D = num + 1
|
||||
} else {
|
||||
varData.D = 1
|
||||
}
|
||||
case msg.VAR_OP_SUB:
|
||||
if num, ok := varData.D.(int); ok {
|
||||
if num > 0 {
|
||||
varData.D = num - 1
|
||||
} else {
|
||||
varData.D = 0
|
||||
}
|
||||
} else {
|
||||
varData.D = 0
|
||||
}
|
||||
}
|
||||
varData.U = GoUtil.Now()
|
||||
return varData
|
||||
}
|
||||
|
||||
@ -6,12 +6,16 @@ import (
|
||||
"crypto/cipher"
|
||||
"crypto/md5"
|
||||
crand "crypto/rand"
|
||||
"crypto/sha256"
|
||||
"encoding/base64"
|
||||
"encoding/gob"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"io"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
@ -321,6 +325,11 @@ func Rand6DigitNumber() string {
|
||||
return fmt.Sprintf("%06d", n)
|
||||
}
|
||||
|
||||
func Rand8DigitNumber() string {
|
||||
n := rand.Intn(100000000)
|
||||
return fmt.Sprintf("%08d", n)
|
||||
}
|
||||
|
||||
func UniqueInts(input []int) []int {
|
||||
seen := make(map[int]struct{})
|
||||
result := make([]int, 0, len(input))
|
||||
@ -547,3 +556,70 @@ func GetISOCodeByIP(ip string) (string, error) {
|
||||
func GetVarKey(Uid int) string {
|
||||
return fmt.Sprintf("var_%d", Uid)
|
||||
}
|
||||
|
||||
const (
|
||||
PROJECT_ID = "20659"
|
||||
ACCESS_ID = "a3d8c1f0e5b72a49"
|
||||
NOTIFICATION_SECRET_KEY = "K8pYrR6fXcVzWbAqN3mHsD4gJtL9iUvO1"
|
||||
)
|
||||
|
||||
func NotifyPlayer(uid, pushid int, title, content string) {
|
||||
|
||||
url := "https://tygapi-new.tuyooglobal.com/api/push/ga/push_message/project_trigger"
|
||||
method := "POST"
|
||||
executeId := fmt.Sprintf("%s_%s", PROJECT_ID, Rand8DigitNumber()+Rand8DigitNumber())
|
||||
payload := strings.NewReader(`[
|
||||
{
|
||||
"projectId": "` + PROJECT_ID + `",
|
||||
"platform": "firebasepush",
|
||||
"pushId": "` + PROJECT_ID + `_` + fmt.Sprintf("%08d", pushid) + `",
|
||||
"executeId": "` + executeId + `",
|
||||
"environment": "production",
|
||||
"title": "` + title + `",
|
||||
"body": "` + content + `",
|
||||
"userId": [
|
||||
"` + strconv.Itoa(uid) + `"
|
||||
]
|
||||
}
|
||||
]`)
|
||||
|
||||
client := &http.Client{}
|
||||
req, err := http.NewRequest(method, url, payload)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
d, _ := time.ParseDuration("30m")
|
||||
timestamp := time.Now().Add(d).Unix()
|
||||
|
||||
var strBuilder strings.Builder
|
||||
strBuilder.WriteString("Access-Id=" + ACCESS_ID + "&Random=a2dS8Iyak03Ma91JC1xR&Secret-Type=forever&Sign-Type=sha256&Timestamp=")
|
||||
strBuilder.WriteString(strconv.Itoa(int(timestamp)))
|
||||
strBuilder.WriteString(":" + NOTIFICATION_SECRET_KEY)
|
||||
|
||||
m := sha256.New()
|
||||
m.Write([]byte(strBuilder.String()))
|
||||
signature := hex.EncodeToString(m.Sum(nil))
|
||||
|
||||
req.Header.Add("Access-Id", ACCESS_ID)
|
||||
req.Header.Add("Secret-Type", "forever")
|
||||
req.Header.Add("Sign-Type", "sha256")
|
||||
req.Header.Add("Random", "a2dS8Iyak03Ma91JC1xR")
|
||||
req.Header.Add("Timestamp", strconv.Itoa(int(timestamp)))
|
||||
req.Header.Add("Signature", signature)
|
||||
req.Header.Add("Content-Type", "application/json")
|
||||
res, err := client.Do(req)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
defer res.Body.Close()
|
||||
|
||||
body, err := io.ReadAll(res.Body)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
log.Debug("notification send uid %d, type %d , res %s", uid, pushid, string(body))
|
||||
}
|
||||
|
||||
@ -17,6 +17,9 @@ const (
|
||||
|
||||
// AAqFpbuPhFSEx
|
||||
func SendFeishuFatal(PlayerId int, FuncName string, msg string) error {
|
||||
if conf.Server.GameName == "pet_home_local" {
|
||||
return nil
|
||||
}
|
||||
// 创建请求体
|
||||
stack := make([]byte, 1024)
|
||||
length := runtime.Stack(stack, false)
|
||||
|
||||
@ -6,6 +6,7 @@ import (
|
||||
baseCfg "server/conf/base"
|
||||
friendCfg "server/conf/friend"
|
||||
languageCfg "server/conf/language"
|
||||
notification_cfg "server/conf/notification"
|
||||
playroomCfg "server/conf/playroom"
|
||||
userCfg "server/conf/user"
|
||||
GoUtil "server/game_util"
|
||||
@ -42,3 +43,26 @@ func TestGetEnergyByADNum(t *testing.T) {
|
||||
r := baseCfg.GetEnergyByADNum()
|
||||
fmt.Println("r:", r)
|
||||
}
|
||||
|
||||
func TestGetFriendApplyNotificationCooldown(t *testing.T) {
|
||||
Cooldown := notification_cfg.GetFriendApplyNotificationCooldown()
|
||||
fmt.Println("Cooldown:", Cooldown)
|
||||
}
|
||||
|
||||
func TestGetPetroomGameNotificationCooldown(t *testing.T) {
|
||||
Cooldown, dailyLimit := notification_cfg.GetPetroomGameNotificationCooldown()
|
||||
fmt.Println("Cooldown:", Cooldown)
|
||||
fmt.Println("dailyLimit:", dailyLimit)
|
||||
}
|
||||
|
||||
func TestGetPetroomGameNotificationMsg(t *testing.T) {
|
||||
titlekey, infokey := notification_cfg.GetPetroomGameNotificationMsg()
|
||||
fmt.Println("titlekey:", titlekey)
|
||||
fmt.Println("infokey:", infokey)
|
||||
}
|
||||
|
||||
func TestGetFriendApplyNotificationMsg(t *testing.T) {
|
||||
titlekey, infokey := notification_cfg.GetFriendApplyNotificationMsg()
|
||||
fmt.Println("titlekey:", titlekey)
|
||||
fmt.Println("infokey:", infokey)
|
||||
}
|
||||
|
||||
@ -3,8 +3,12 @@ package test
|
||||
import (
|
||||
"fmt"
|
||||
decorateCfg "server/conf/decorate"
|
||||
languageCfg "server/conf/language"
|
||||
notification_cfg "server/conf/notification"
|
||||
"server/db"
|
||||
"server/game"
|
||||
GoUtil "server/game_util"
|
||||
"server/msg"
|
||||
"server/pkg/github.com/name5566/leaf/log"
|
||||
"testing"
|
||||
)
|
||||
@ -91,8 +95,18 @@ func TestRandInt(t *testing.T) {
|
||||
func TestEndless(t *testing.T) {
|
||||
p1 := new(game.Player)
|
||||
p1.InitPlayer("3625212")
|
||||
BaseMod := p1.GetBaseMod()
|
||||
ChargeMod := p1.GetChargeMod()
|
||||
EndlessMod := p1.GetEndlessMod()
|
||||
EndlessMod.ZeroUpdate(ChargeMod.GetMaxCharge(), BaseMod.GetLevel())
|
||||
MailMod := p1.GetMailMod()
|
||||
MailMod.BackData()
|
||||
}
|
||||
|
||||
// 10130 10165
|
||||
func TestNotify(t *testing.T) {
|
||||
titlekey, infokey := notification_cfg.GetFriendApplyNotificationMsg()
|
||||
title := languageCfg.GetLanguage(msg.LANG_TYPE(1), titlekey)
|
||||
info := languageCfg.GetLanguage(msg.LANG_TYPE(1), infokey)
|
||||
// titlekey, infokey := notification_cfg.GetPetroomGameNotificationMsg()
|
||||
// title := languageCfg.GetLanguage(msg.LANG_TYPE(1), titlekey)
|
||||
// info := languageCfg.GetLanguage(msg.LANG_TYPE(1), infokey)
|
||||
GoUtil.NotifyPlayer(10130, 2, title, fmt.Sprintf(info, "猫猫"))
|
||||
// GoUtil.NotifyPlayer(19246, 1, "Test Notification", "This is a test notification from the server.")
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user