1227 lines
40 KiB
Go
1227 lines
40 KiB
Go
package game
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/gob"
|
|
"encoding/json"
|
|
"fmt"
|
|
"os"
|
|
"server/GoUtil"
|
|
"server/MergeConst"
|
|
"server/conf"
|
|
"sort"
|
|
"strconv"
|
|
|
|
l "log"
|
|
"server/db"
|
|
"server/game/internal"
|
|
MsgMod "server/game/mod/msg"
|
|
"server/gamedata" // Ensure this package exists and is correctly referenced
|
|
"server/msg"
|
|
"time"
|
|
|
|
"math/rand"
|
|
|
|
"github.com/robfig/cron/v3"
|
|
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
"server/pkg/github.com/name5566/leaf/gate"
|
|
"server/pkg/github.com/name5566/leaf/log"
|
|
"server/pkg/github.com/name5566/leaf/timer"
|
|
)
|
|
|
|
var (
|
|
G_GameLogicPtr *GameLogic
|
|
)
|
|
|
|
var isInitGameLogic = false
|
|
var RegisterNetWorkFunc = make(map[string]interface{})
|
|
|
|
const (
|
|
SERVER_STATUS_OPEN = 1 // 服务器状态 开放
|
|
SERVER_STATUS_CLOSE = 2 // 服务器状态 关闭
|
|
SERVER_STATUS_MAINTAIN = 3 // 服务器状态 维护
|
|
SERVER_STATUS_FULL = 4 // 服务器状态 爆满
|
|
)
|
|
|
|
func RegisterMsgProcessFunc(key string, value1 interface{}) {
|
|
RegisterNetWorkFunc[key] = value1
|
|
}
|
|
|
|
func RunNetProcessByKey(key string, param []interface{}) error {
|
|
fun, ok := RegisterNetWorkFunc[key]
|
|
if ok {
|
|
err := fun.(func([]interface{}) error)(param)
|
|
return err
|
|
}
|
|
return fmt.Errorf("cant find network func %s", key)
|
|
}
|
|
|
|
type LimitActPeriod struct {
|
|
StartCronID cron.EntryID
|
|
EndTimer *timer.Timer
|
|
StartTime int32
|
|
EndTime int32
|
|
}
|
|
|
|
type GameLogic struct {
|
|
Db_AccountInfo db.Db_Account
|
|
DailyTaskTimestamp int64
|
|
M_Players map[int32]*Player
|
|
m_CronEntryIDs map[int]*LimitActPeriod
|
|
Mdispatr *timer.Dispatcher
|
|
M_LimitActiveList []int
|
|
NotInitPlayer *Player
|
|
MReadyToRemoveList map[*Player]*timer.Timer
|
|
Mlogger *log.Logger
|
|
MloggerErr error
|
|
Version int32
|
|
M_SvrGlobal db.SqlSvrGlobalStruct
|
|
MChampshipsManager *NewChampshipsManager
|
|
MLimiteEventManager *LimiteEventManager
|
|
MPlayerProfileManager *PlayerProfileManager
|
|
MOldPlayerCompensateMgr *OldPlayerCompensateMgr
|
|
MHttpManager *HttpManager
|
|
|
|
MLogManager *LogMgr
|
|
SeverInfo *ServerInfo
|
|
FriendMgr *FriendMgr
|
|
RankMgr *RankMgr
|
|
MailMgr *MailMgr
|
|
ChampshipMgr *ChampshipMgr
|
|
}
|
|
|
|
type ServerInfo struct {
|
|
ServerID int // 服务器ID
|
|
CenterID int // 中心ID
|
|
GroupID int // 组ID
|
|
OpenTime int64 // 开服时间
|
|
Name string // 服务器名字
|
|
Status int // 服务器状态
|
|
}
|
|
|
|
// 零点更新
|
|
func (gl *GameLogic) ZeroFlush() {
|
|
gl.Mdispatr.AfterFunc(time.Second*86400, func() {
|
|
gl.ZeroFlush()
|
|
})
|
|
var a1 = []interface{}{gl.DailyTaskTimestamp}
|
|
GoUtil.CallEvent(MergeConst.Notify_Daily_Renew, a1)
|
|
gl.RankMgrSend(&MsgMod.Msg{Type: MsgMod.SERVER_ZERO_UPDATE}) // 零点更新排行榜
|
|
gl.CreateDailyLogFile()
|
|
}
|
|
|
|
// 中午更新
|
|
func (gl *GameLogic) NoonFlush() {
|
|
gl.Mdispatr.AfterFunc(time.Second*86400, func() {
|
|
gl.NoonFlush()
|
|
})
|
|
var a1 = []interface{}{gl.DailyTaskTimestamp}
|
|
GoUtil.CallEvent(MergeConst.Notify_Midday_Renew, a1)
|
|
}
|
|
|
|
func (gl *GameLogic) SetPlayer(player *Player) {
|
|
gl.M_Players[player.M_DwUin] = player
|
|
}
|
|
|
|
func (gl *GameLogic) DelPlayer(player *Player) {
|
|
delete(gl.M_Players, player.M_DwUin)
|
|
}
|
|
|
|
func (gl *GameLogic) OpenTimestampTick() {
|
|
gl.DailyTaskTimestamp = 0
|
|
gl.Mdispatr = timer.NewDispatcher(0)
|
|
gl.Mdispatr.AfterFunc(time.Second*time.Duration(GoUtil.NextZeroTimestampDuration()), func() {
|
|
gl.ZeroFlush()
|
|
})
|
|
gl.Mdispatr.AfterFunc(time.Second*time.Duration(GoUtil.NextNoonTimestampDuration()), func() {
|
|
gl.NoonFlush()
|
|
})
|
|
gl.Mdispatr.AfterFunc(time.Second*time.Duration(GoUtil.NextNoonTimestampDuration()), func() {
|
|
gl.NoonFlush()
|
|
})
|
|
gl.CreateDailyLogFile()
|
|
|
|
go func() {
|
|
for k := range gl.Mdispatr.ChanTimer {
|
|
k.Cb()
|
|
}
|
|
}()
|
|
go func() {
|
|
// 注释内容也可以使用
|
|
|
|
ticker := time.NewTicker(time.Second * 1)
|
|
|
|
for range ticker.C {
|
|
timeStamp := (int64)(time.Now().Unix())
|
|
GoUtil.CallEvent(MergeConst.Notify_Clock_Tick_Sec, []interface{}{timeStamp})
|
|
if gl.M_SvrGlobal.StartMileStoneSvrTime == 0 {
|
|
gl.M_SvrGlobal.StartMileStoneSvrTime = int32(gl.DailyTaskTimestamp)
|
|
gl.M_SvrGlobal.OpenSvrTime = int32(gl.DailyTaskTimestamp)
|
|
db.FormatAllMemUpdateDb(&gl.M_SvrGlobal, "t_server_global_data", "Id")
|
|
}
|
|
if int32(timeStamp) >= gl.M_SvrGlobal.StartMileStoneSvrTime+MergeConst.G_MailStone_Period {
|
|
deltaTime := int32(timeStamp) - gl.M_SvrGlobal.StartMileStoneSvrTime
|
|
mod := deltaTime % MergeConst.G_MailStone_Period
|
|
gl.M_SvrGlobal.StartMileStoneSvrTime = int32(timeStamp) - mod
|
|
db.FormatAllMemUpdateDb(&gl.M_SvrGlobal, "t_server_global_data", "Id")
|
|
var a1 = []interface{}{gl.M_SvrGlobal.StartMileStoneSvrTime}
|
|
GoUtil.CallEvent(MergeConst.Notify_MileStone_Renew, a1)
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
|
|
func (ad *GameLogic) IsExsitAccount(UserName string) bool {
|
|
return ad.LoadDataFromDB(UserName)
|
|
}
|
|
|
|
func (ad *GameLogic) LoadDataFromDB(UserName string) bool {
|
|
sqlStr := "SELECT * FROM t_account WHERE user_name = ?"
|
|
if err := db.SqlDb.Get(&ad.Db_AccountInfo, sqlStr, UserName); err != nil {
|
|
log.Debug("get data failed, err:%v\n", err)
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func (ad *GameLogic) NewAccountInsertDataToDB() bool {
|
|
sqlStr := "INSERT INTO t_account(user_name, user_password) VALUES(:user_name, :user_password)"
|
|
result, err := db.SqlDb.NamedExec(sqlStr, map[string]interface{}{
|
|
"user_name": ad.Db_AccountInfo.UserName,
|
|
"user_password": ad.Db_AccountInfo.UserPassword,
|
|
})
|
|
if err != nil {
|
|
log.Debug("named exec failed, err:%v\n", err)
|
|
return false
|
|
}
|
|
insertId, err := result.LastInsertId()
|
|
if err != nil {
|
|
log.Debug("get last insert id failed, err:%v\n", err)
|
|
return false
|
|
}
|
|
|
|
insertId = insertId + int64(conf.Server.ServerID*100000)
|
|
playerInfo := &db.ResPlayerBaseInfo{}
|
|
playerInfo.DwUin = int32(insertId)
|
|
playerInfo.Energy = 100
|
|
playerInfo.Star = 0
|
|
playerInfo.RecoverTime = int32(time.Now().Unix())
|
|
playerInfo.Diamond = 0
|
|
playerInfo.Level = 1
|
|
playerInfo.Exp = 0
|
|
playerInfo.StartOrderId = "1"
|
|
playerInfo.MusicCode = 1
|
|
playerInfo.Guild = 1
|
|
playerInfo.PackUnlockCount = 5
|
|
playerInfo.EnergyBuyCount = 0
|
|
playerInfo.UserName = ad.Db_AccountInfo.UserName
|
|
playerInfo.LoginTime = 0
|
|
playerInfo.LogoutTime = 0
|
|
playerInfo.Todayolinetime = 0
|
|
playerInfo.Rolecreatetime = (int32)(time.Now().Unix())
|
|
playerInfo.FaceBookId = ""
|
|
db.FormatAllMemInsertDb(playerInfo, "t_player_baseinfo")
|
|
|
|
var buf bytes.Buffer
|
|
encode := gob.NewEncoder(&buf)
|
|
encode.Encode(&PlayerModList{})
|
|
playerMod := &db.SqlModStruct{
|
|
DwUin: int32(insertId),
|
|
ModData: buf.Bytes(),
|
|
UpdataTime: int32(time.Now().Unix()),
|
|
}
|
|
db.FormatAllMemInsertDb(playerMod, "t_player_mod")
|
|
|
|
return true
|
|
}
|
|
|
|
func (ad *GameLogic) PackResInfo(a gate.Agent, Func string, data []byte) {
|
|
if a == nil {
|
|
return
|
|
}
|
|
response := &msg.ClientRes{}
|
|
response.Func = Func
|
|
response.Cid = "cid"
|
|
response.Info = data
|
|
a.WriteMsg(response)
|
|
}
|
|
|
|
// 创建新玩家,初始化数据
|
|
func (ad *GameLogic) CreateNewPlayer(a gate.Agent, UserName string) {
|
|
player := new(Player)
|
|
internal.AsignPlayerToAgents(a, player) //绑定player和网络连接代理
|
|
player.agent = a
|
|
err := player.InitPlayer(UserName)
|
|
if err != nil {
|
|
data, _ := proto.Marshal(&msg.ResLogin{ResultCode: MergeConst.Protocol_Error_Account_Fail})
|
|
G_GameLogicPtr.PackResInfo(a, "ResLogin", data)
|
|
panic(err)
|
|
}
|
|
ad.M_Players[player.M_DwUin] = player
|
|
|
|
}
|
|
|
|
// 重新绑定玩家和网络连接代理
|
|
func (ad *GameLogic) RebindPlayerAndAgent(a gate.Agent, player *Player) {
|
|
internal.AsignPlayerToAgents(a, player)
|
|
ad.M_Players[player.M_DwUin] = player
|
|
player.Reconnect()
|
|
player.SetAgent(a)
|
|
timer1 := ad.MReadyToRemoveList[player]
|
|
timer1.Disabled()
|
|
ad.Mdispatr.ChanTimer <- timer1
|
|
timer1.Stop()
|
|
delete(G_GameLogicPtr.MReadyToRemoveList, player)
|
|
}
|
|
|
|
func (ad *GameLogic) GetPlayerByAgent(gate gate.Agent) *Player {
|
|
p, ok := internal.Agents.Load(gate)
|
|
if ok {
|
|
return p.(*Player)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (ad *GameLogic) GetPlayerByUid(Uid int) *Player {
|
|
p, ok := ad.M_Players[int32(Uid)]
|
|
if ok {
|
|
return p
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (ad *GameLogic) ReadAllConfigs() {
|
|
gamedata.InitReadAllCfg()
|
|
// gamedata.ReadConfigFromAllConfig("Activity.txt")
|
|
}
|
|
|
|
// 好友管理器
|
|
func (ad *GameLogic) CreateFriendMgr() {
|
|
ad.FriendMgr = &FriendMgr{
|
|
ServerMod: new(ServerMod),
|
|
}
|
|
ad.FriendMgr.Init()
|
|
}
|
|
|
|
func (ad *GameLogic) FriendMgrSend(m *MsgMod.Msg) {
|
|
ad.FriendMgr.Send(m)
|
|
}
|
|
|
|
func (ad *GameLogic) FriendMgrCall(m *MsgMod.Msg) interface{} {
|
|
result, err := ad.FriendMgr.Call(m)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return result
|
|
}
|
|
|
|
// 排行榜管理器
|
|
func (ad *GameLogic) CreateRankMgr() {
|
|
ad.RankMgr = &RankMgr{
|
|
ServerMod: new(ServerMod),
|
|
}
|
|
ad.RankMgr.Init()
|
|
}
|
|
|
|
func (ad *GameLogic) RankMgrSend(m *MsgMod.Msg) {
|
|
ad.RankMgr.Send(m)
|
|
}
|
|
|
|
func (ad *GameLogic) RankMgrCall(m *MsgMod.Msg) interface{} {
|
|
result, err := ad.RankMgr.Call(m)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return result
|
|
}
|
|
|
|
// 邮件管理器
|
|
func (ad *GameLogic) CreateMailMgr() {
|
|
ad.MailMgr = &MailMgr{
|
|
ServerMod: new(ServerMod),
|
|
}
|
|
ad.MailMgr.Init()
|
|
}
|
|
|
|
func (ad *GameLogic) MailMgrSend(m *MsgMod.Msg) {
|
|
ad.MailMgr.Send(m)
|
|
}
|
|
|
|
func (ad *GameLogic) MailMgrCall(m *MsgMod.Msg) interface{} {
|
|
result, err := ad.MailMgr.Call(m)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return result
|
|
}
|
|
|
|
// 锦标赛管理器
|
|
func (ad *GameLogic) CreateChampshipMgr() {
|
|
ad.ChampshipMgr = &ChampshipMgr{
|
|
ServerMod: new(ServerMod),
|
|
}
|
|
ad.ChampshipMgr.Init()
|
|
}
|
|
|
|
func (ad *GameLogic) ChampshipMgrSend(m *MsgMod.Msg) {
|
|
ad.ChampshipMgr.Send(m)
|
|
}
|
|
|
|
func (ad *GameLogic) ChampshipMgrCall(m *MsgMod.Msg) interface{} {
|
|
result, err := ad.ChampshipMgr.Call(m)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
return result
|
|
}
|
|
|
|
func (ad *GameLogic) GetSimplePlayerByUid(Id int) *PlayerSimpleData {
|
|
Idstr := strconv.Itoa(Id)
|
|
Value, _ := db.RedisGetKey(Idstr)
|
|
player := &PlayerSimpleData{}
|
|
player.Uid = Id
|
|
if Value == "" {
|
|
p := new(Player)
|
|
err := p.GetSimpleData(Id, player)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
value, _ := json.Marshal(player)
|
|
db.RedisSetKey(Idstr, string(value), 300)
|
|
} else {
|
|
err := json.Unmarshal([]byte(Value), player)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
}
|
|
return player
|
|
}
|
|
|
|
func (ad *GameLogic) GetResSimplePlayerByUid(Id int) *msg.ResPlayerSimple {
|
|
Idstr := strconv.Itoa(Id)
|
|
Value, _ := db.RedisGetKey(Idstr)
|
|
player := &PlayerSimpleData{}
|
|
player.Uid = Id
|
|
if Value == "" {
|
|
p := new(Player)
|
|
p.GetSimpleData(Id, player)
|
|
value, _ := json.Marshal(player)
|
|
db.RedisSetKey(Idstr, string(value), 0)
|
|
} else {
|
|
err := json.Unmarshal([]byte(Value), player)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
return &msg.ResPlayerSimple{
|
|
Uid: int32(player.Uid),
|
|
Name: player.Name,
|
|
Level: int32(player.Level),
|
|
Avatar: int32(player.Avatar),
|
|
Face: int32(player.Face),
|
|
Decorate: int32(player.Decorate),
|
|
Login: int32(player.Login),
|
|
Loginout: int32(player.Loginout),
|
|
}
|
|
}
|
|
|
|
// 初始化服务器协程
|
|
func G_getGameLogic() *GameLogic {
|
|
if !isInitGameLogic {
|
|
G_GameLogicPtr = new(GameLogic)
|
|
isInitGameLogic = true
|
|
G_GameLogicPtr.Mdispatr = timer.NewDispatcher(10)
|
|
G_GameLogicPtr.InitServerInfo()
|
|
G_GameLogicPtr.M_Players = make(map[int32]*Player)
|
|
G_GameLogicPtr.MReadyToRemoveList = make(map[*Player]*timer.Timer)
|
|
G_GameLogicPtr.NotInitPlayer = new(Player)
|
|
G_GameLogicPtr.M_LimitActiveList = []int{}
|
|
G_GameLogicPtr.LoadSvrGlobalData() // 加载服务器全局数据
|
|
G_GameLogicPtr.CreateChamshipsMgr() // 创建锦标赛管理器
|
|
G_GameLogicPtr.CreateLimiteEventManager() // 创建限时活动管理器
|
|
G_GameLogicPtr.CreateProfileManager() // 创建玩家档案管理器
|
|
G_GameLogicPtr.CreateCompensateMgr() // 创建老玩家补偿管理器
|
|
G_GameLogicPtr.OpenTimestampTick() // 开启时间戳计时器
|
|
G_GameLogicPtr.ReadAllConfigs() // 读取所有配置文件
|
|
G_GameLogicPtr.RegisterEvent() // 注册事件
|
|
G_GameLogicPtr.RegisterNetWorkFunc() // 注册客户端接口
|
|
G_GameLogicPtr.InitActivity() // 初始化活动
|
|
G_GameLogicPtr.GetVersion() // 获取版本号
|
|
G_GameLogicPtr.CreateLogManager() //加载日志管理器
|
|
G_GameLogicPtr.CreateFriendMgr() //创建好友管理器
|
|
G_GameLogicPtr.CreateRankMgr() //创建排行榜管理器
|
|
G_GameLogicPtr.CreateMailMgr() //创建邮件管理器
|
|
G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器
|
|
ClusterMgrInit() //初始化集群
|
|
|
|
// G_GameLogicPtr.CreateHttpManager()
|
|
}
|
|
return G_GameLogicPtr
|
|
}
|
|
|
|
func (ad *GameLogic) InitServerInfo() {
|
|
Now := time.Now().Unix()
|
|
ServerInfo := &ServerInfo{}
|
|
ServerInfo.ServerID = conf.Server.ServerID
|
|
ServerInfo.OpenTime = GoUtil.ParseTime(conf.Server.ServerOpenTime)
|
|
ServerInfo.Name = conf.Server.ServerName
|
|
if Now < ServerInfo.OpenTime {
|
|
ServerInfo.Status = SERVER_STATUS_CLOSE
|
|
} else {
|
|
ServerInfo.Status = SERVER_STATUS_OPEN
|
|
}
|
|
ad.SeverInfo = ServerInfo
|
|
}
|
|
|
|
func (ad *GameLogic) DisorderLuaTable(length int, Cnt int) []int {
|
|
|
|
// length := len(tb)
|
|
indexList := []int{}
|
|
copy := []int{}
|
|
for i := 0; i < Cnt; i++ {
|
|
index := rand.Intn(length - i)
|
|
if len(indexList) == 0 {
|
|
indexList = append(indexList, index)
|
|
} else {
|
|
for n := 0; n < len(copy); n++ {
|
|
if index >= copy[n] {
|
|
index = index + 1
|
|
}
|
|
}
|
|
indexList = append(indexList, index)
|
|
}
|
|
copy = []int{}
|
|
for j := 0; j < len(indexList); j++ {
|
|
copy = append(copy, indexList[j])
|
|
}
|
|
|
|
sort.Slice(copy, func(i, j int) bool { return copy[i] < copy[j] })
|
|
}
|
|
contentList := indexList[:]
|
|
return contentList
|
|
}
|
|
|
|
func (ad *GameLogic) GetVersion() {
|
|
sqlStr := "SELECT * FROM t_gameserver WHERE id = ?"
|
|
sqlStruck := db.SqlVersionStruct{}
|
|
IsHaveDataDb := false
|
|
sqlStruck.Id = 1
|
|
G_GameLogicPtr.Version = 0
|
|
if err := db.SqlDb.Get(&sqlStruck, sqlStr, 1); err != nil {
|
|
G_GameLogicPtr.Version = 1
|
|
IsHaveDataDb = false
|
|
} else {
|
|
G_GameLogicPtr.Version = sqlStruck.IsClose + 1
|
|
IsHaveDataDb = true
|
|
}
|
|
sqlStruck.IsClose = G_GameLogicPtr.Version
|
|
|
|
if IsHaveDataDb {
|
|
db.FormatAllMemUpdateDb(&sqlStruck, "t_gameserver", "id")
|
|
} else {
|
|
db.FormatAllMemInsertDb(&sqlStruck, "t_gameserver")
|
|
}
|
|
}
|
|
|
|
func (ad *GameLogic) SendServerVersion(a gate.Agent) {
|
|
res := &msg.ResServerVersion{}
|
|
res.Version = G_GameLogicPtr.Version
|
|
data, _ := proto.Marshal(res)
|
|
G_getGameLogic().PackResInfo(a, "ResServerVersion", data)
|
|
}
|
|
|
|
func (ad *GameLogic) ClearData(args []interface{}) {
|
|
player := args[0].(*Player)
|
|
if player != nil && player.M_DwUin != 0 {
|
|
player.agent = nil
|
|
log.Debug("player %d 断开连接", player.M_DwUin)
|
|
go func() {
|
|
time.Sleep(100 * time.Second)
|
|
if player != nil {
|
|
player.lock.Lock()
|
|
defer player.lock.Unlock()
|
|
if player.agent == nil {
|
|
delete(ad.M_Players, player.M_DwUin)
|
|
player.ClearData()
|
|
log.Debug("player %d 延迟100s关闭", player.M_DwUin)
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
}
|
|
|
|
func (ad *GameLogic) FindOfflinePlayer(dwUin int32) *Player {
|
|
for k := range G_GameLogicPtr.MReadyToRemoveList {
|
|
if k.M_DwUin == dwUin {
|
|
return k
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (ad *GameLogic) InitPassportInsertDb(player *Player, StartSvrTime int32, EndSvrTime int32, ConfigActId int) int32 {
|
|
st := &db.SqlLimitPassportStruct{}
|
|
st.CurFreeLv = 0
|
|
st.CurPayLv = 0
|
|
st.DwUin = player.M_DwUin
|
|
st.IsPay = 0
|
|
st.Star = 0
|
|
st.StartSvrTime = StartSvrTime
|
|
st.EndSvrTime = EndSvrTime
|
|
st.Status = 0
|
|
st.ActiveID = 0
|
|
st.ConfigActId = int32(ConfigActId)
|
|
activityID, _ := db.FormatAllMemInsertDb(st, "t_player_LimitPassport")
|
|
|
|
return int32(activityID)
|
|
}
|
|
|
|
func (ad *GameLogic) InitPromotionInsertDb(player *Player, StartSvrTime int32, EndSvrTime int32, ConfigActId int) int32 {
|
|
st := &db.SqlLimitPromotionStruct{}
|
|
st.DwUin = player.M_DwUin
|
|
st.IsPay = 0
|
|
st.StartSvrTime = StartSvrTime
|
|
st.EndSvrTime = EndSvrTime
|
|
st.ActiveID = 0
|
|
st.ConfigActId = int32(ConfigActId)
|
|
activityID, _ := db.FormatAllMemInsertDb(st, "t_player_LimitPromotion")
|
|
|
|
return int32(activityID)
|
|
}
|
|
|
|
func (ad *GameLogic) InitInfinitePackInsertDb(player *Player, StartSvrTime int32, EndSvrTime int32, ConfigActId int) int32 {
|
|
st := &db.SqlLimitInfinitePackStruct{}
|
|
st.DwUin = player.M_DwUin
|
|
st.CurGear = 1
|
|
st.StartSvrTime = StartSvrTime
|
|
st.EndSvrTime = EndSvrTime
|
|
st.ActiveID = 0
|
|
st.ConfigActId = int32(ConfigActId)
|
|
activityID, _ := db.FormatAllMemInsertDb(st, "t_player_LimitInfinitePack")
|
|
|
|
return int32(activityID)
|
|
}
|
|
|
|
func (ad *GameLogic) Init7DayLoginInsertDb(player *Player, StartSvrTime int32, EndSvrTime int32, ConfigActId int) int32 {
|
|
st := &db.SqlSevenDayLoginStruct{}
|
|
st.DwUin = player.M_DwUin
|
|
st.LastGetTime = 0
|
|
st.StartSvrTime = StartSvrTime
|
|
st.EndSvrTime = EndSvrTime
|
|
st.ActiveID = 0
|
|
st.GetIndex = 0
|
|
st.ConfigActId = int32(ConfigActId)
|
|
activityID, _ := db.FormatAllMemInsertDb(st, "t_player_Limit7DayLogin")
|
|
|
|
return int32(activityID)
|
|
}
|
|
|
|
func (ad *GameLogic) InitCardCollectInsertDb(player *Player, StartSvrTime int32, EndSvrTime int32, ConfigActId int) int32 {
|
|
st := &db.SqlCardCollectStruct{}
|
|
st.DwUin = player.M_DwUin
|
|
|
|
st.StartSvrTime = StartSvrTime
|
|
st.EndSvrTime = EndSvrTime
|
|
st.ActiveID = 0
|
|
st.Fragment = 0
|
|
st.CardInfo = ""
|
|
st.ConfigActId = int32(ConfigActId)
|
|
activityID, _ := db.FormatAllMemInsertDb(st, "t_player_card_data")
|
|
|
|
return int32(activityID)
|
|
}
|
|
|
|
func (ad *GameLogic) LoadSvrGlobalData() {
|
|
sqlStr := "SELECT * FROM t_server_global_data WHERE Id = ?"
|
|
|
|
ad.M_SvrGlobal = db.SqlSvrGlobalStruct{}
|
|
|
|
if err := db.SqlDb.Get(&ad.M_SvrGlobal, sqlStr, 1); err != nil {
|
|
log.Debug("get data failed, err:%v\n", err)
|
|
timeStamp := time.Now().Unix()
|
|
t := time.Unix(timeStamp, 0).Local()
|
|
zero := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second())
|
|
ad.M_SvrGlobal.StartMileStoneSvrTime = int32(zero)
|
|
ad.M_SvrGlobal.Id = 1
|
|
db.FormatAllMemInsertDb(&ad.M_SvrGlobal, "t_server_global_data")
|
|
} else {
|
|
|
|
}
|
|
}
|
|
|
|
func (ad *GameLogic) OpenNewLimitActivity(args []interface{}) {
|
|
go func() {
|
|
internal.Agents.Range(func(k, v interface{}) bool {
|
|
if v == ad.NotInitPlayer {
|
|
return true
|
|
}
|
|
player := v.(*Player)
|
|
notify := &msg.NotifyLimitedTimeActiveData{}
|
|
notify.MActiveList = []*msg.LimitedTimeActiveStruct{}
|
|
|
|
id := args[0].(int)
|
|
activityCfg := gamedata.GetConfigByName("Activity")
|
|
record := activityCfg.Index(id).(*gamedata.ActivityRecord)
|
|
|
|
act := &msg.LimitedTimeActiveStruct{}
|
|
act.StartSvrTime = args[1].(int32)
|
|
act.EndSvrTime = args[2].(int32)
|
|
act.Type = int32(record.Type)
|
|
if act.Type == 1 {
|
|
act.ActiveID = ad.InitPassportInsertDb(player, act.StartSvrTime, act.EndSvrTime, id)
|
|
}
|
|
if act.Type == 2 {
|
|
act.ActiveID = ad.InitPromotionInsertDb(player, act.StartSvrTime, act.EndSvrTime, id)
|
|
}
|
|
if act.Type == 3 {
|
|
act.ActiveID = ad.InitInfinitePackInsertDb(player, act.StartSvrTime, act.EndSvrTime, id)
|
|
}
|
|
if act.Type == 4 {
|
|
act.ActiveID = ad.Init7DayLoginInsertDb(player, act.StartSvrTime, act.EndSvrTime, id)
|
|
}
|
|
if act.Type == 5 {
|
|
act.ActiveID = ad.InitCardCollectInsertDb(player, act.StartSvrTime, act.EndSvrTime, id)
|
|
}
|
|
notify.MActiveList = append(notify.MActiveList, act)
|
|
data, _ := proto.Marshal(notify)
|
|
ad.PackResInfo(k.(gate.Agent), "NotifyLimitedTimeActiveData", data)
|
|
return true
|
|
})
|
|
}()
|
|
|
|
}
|
|
|
|
func (ad *GameLogic) RegisterEvent() {
|
|
|
|
GoUtil.RegisterEvent(MergeConst.Notify_Socket_Closed, ad.ClearData, nil)
|
|
GoUtil.RegisterEvent(MergeConst.Notify_Socket_Connect, ad.NewPlayerConnect, nil)
|
|
GoUtil.RegisterEvent(MergeConst.OpenNewLimitActivity, ad.OpenNewLimitActivity, nil)
|
|
}
|
|
|
|
func (ad *GameLogic) NewPlayerConnect(args []interface{}) {
|
|
a := args[0].(gate.Agent)
|
|
internal.AsignPlayerToAgents(a, ad.NotInitPlayer)
|
|
}
|
|
|
|
func (ad *GameLogic) ReplaceExistPlayerAndAgent(a gate.Agent, player *Player) {
|
|
agent := player.GetAgentByPlayer()
|
|
|
|
notify := &msg.ForceKickOut{}
|
|
data, _ := proto.Marshal(notify)
|
|
if agent != nil && a != agent {
|
|
G_getGameLogic().PackResInfo(agent, "ForceKickOut", data)
|
|
internal.AsignPlayerToAgents(agent, ad.NotInitPlayer)
|
|
}
|
|
internal.AsignPlayerToAgents(a, player)
|
|
player.SetAgent(a)
|
|
ad.M_Players[player.M_DwUin] = player
|
|
player.PushClientRes(&msg.ResLogin{
|
|
ResultCode: 0,
|
|
DwUin: player.M_DwUin,
|
|
})
|
|
player.LoginBackData()
|
|
}
|
|
|
|
func (ad *GameLogic) SendMassage(dwUin int32, Func string, data []byte) bool {
|
|
player, ok := ad.M_Players[dwUin]
|
|
if ok {
|
|
agent := player.GetAgentByPlayer()
|
|
if agent != nil {
|
|
G_getGameLogic().PackResInfo(agent, Func, data)
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (ad *GameLogic) FileExist(path string) bool {
|
|
_, err := os.Lstat(path)
|
|
return !os.IsNotExist(err)
|
|
}
|
|
|
|
func (ad *GameLogic) CreateDailyLogFile() {
|
|
zero := GoUtil.ZeroTimestamp()
|
|
now := time.Unix(zero, 0).Local()
|
|
|
|
filename := fmt.Sprintf("%d%02d%02d_%02d_%02d_%02d.log",
|
|
now.Year(),
|
|
now.Month(),
|
|
now.Day(),
|
|
now.Hour(),
|
|
now.Minute(),
|
|
now.Second())
|
|
|
|
filepathname := "log/" + filename
|
|
if !ad.FileExist(filepathname) {
|
|
if ad.Mlogger != nil {
|
|
ad.Mlogger.Close()
|
|
}
|
|
ad.Mlogger, ad.MloggerErr = log.NewDailyLog(now, "Debug", "log", l.LstdFlags)
|
|
if ad.MloggerErr != nil {
|
|
return
|
|
}
|
|
log.Export(ad.Mlogger)
|
|
} else {
|
|
ad.Mlogger, ad.MloggerErr = log.BindLoggerToFile("Debug", filepathname, l.LstdFlags)
|
|
log.Export(ad.Mlogger)
|
|
}
|
|
ad.Mlogger.Debug("CreateDailyLogFile")
|
|
}
|
|
|
|
func (ad *GameLogic) RegisterNetWorkFunc() {
|
|
|
|
RegisterMsgProcessFunc("ReqPlayerBaseInfo", ReqPlayerBaseInfofunction) // 请求玩家基本信息
|
|
RegisterMsgProcessFunc("UpdateBaseItemInfo", UpdateBaseItemInfofunction) // 保存引导
|
|
RegisterMsgProcessFunc("ReqKv", ReqKv) // 保存客户端数据
|
|
|
|
RegisterMsgProcessFunc("ReqPlayerEmitUnlockData", ReqPlayerEmitUnlockDatafunction)
|
|
RegisterMsgProcessFunc("UpdatePlayerEmitUnlockData", UpdatePlayerEmitUnlockDatafunction)
|
|
|
|
RegisterMsgProcessFunc("ReqPlayerChessData", ReqPlayerChessDataFunc)
|
|
RegisterMsgProcessFunc("UpdatePlayerChessData", UpdatePlayerChessDataFunc)
|
|
|
|
RegisterMsgProcessFunc("UpdateChessColorData", UpdateChessColorDataFunc)
|
|
RegisterMsgProcessFunc("ReqChessColorData", ResChessColorDataFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqUnlockingChestID", ReqUnlockingChestIDFunc)
|
|
RegisterMsgProcessFunc("ReqChestUnlockCD", ReqChestUnlockCDFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqEmitMergeMap", ReqEmitMergeMapFunc)
|
|
RegisterMsgProcessFunc("ReqEmitCountMap", ReqResEmitCountMapFunc)
|
|
RegisterMsgProcessFunc("ReqEmitCDStartData", ReqEmitCDStartDataFunc)
|
|
RegisterMsgProcessFunc("UpdateEmitMergeMap", UpdateEmitMergeMapFunc)
|
|
RegisterMsgProcessFunc("UpdateEmitCountMap", UpdateEmitCountMapFunc)
|
|
RegisterMsgProcessFunc("ReqEmitSubCD", ReqEmitSubCDFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqShopData", ReqShopDatafunc)
|
|
RegisterMsgProcessFunc("ReqShopBuy", ReqShopBuyFunc)
|
|
RegisterMsgProcessFunc("ReqRenewItemBuyCnt", ReqRenewItemBuyCntFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqBriefEmailData", ReqBriefEmailDataFunc)
|
|
RegisterMsgProcessFunc("ReqDetailEmailData", ReqDetailEmailDataFunc)
|
|
RegisterMsgProcessFunc("ReqGetEmailReward", ReqGetEmailRewardFunc)
|
|
RegisterMsgProcessFunc("ReqDeleteEmail", ReqDeleteEmailFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqLimitPassportDetail", ReqLimitPassportDetailFunc)
|
|
RegisterMsgProcessFunc("ReqPromotionDetail", ReqPromotionDetailFunc)
|
|
RegisterMsgProcessFunc("ReqInfinitePackDetail", ReqInfinitePackDetailFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqGetLimitPassportReward", ReqGetLimitPassportRewardFunc)
|
|
RegisterMsgProcessFunc("ReqBuyLimitPromotionReward", ReqBuyLimitPromotionRewardFunc)
|
|
RegisterMsgProcessFunc("ReqBuyInfinitePack", ReqBuyInfinitePackFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqPayPassport", ReqPayPassportFunc)
|
|
RegisterMsgProcessFunc("ReqActiveAddStar", ReqActiveAddStarFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqOfflineReconnect", ReqOfflineReconnectFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqOpenNewPig", ReqOpenNewPigFunc)
|
|
RegisterMsgProcessFunc("ReqPigDetailInfo", ReqPigDetailInfoFunc)
|
|
RegisterMsgProcessFunc("UpdateFinishOrderDiamond", UpdateFinishOrderDiamondFunc)
|
|
RegisterMsgProcessFunc("ReqGetPigReward", ReqGetPigRewardFunc)
|
|
RegisterMsgProcessFunc("ReqDropPigReward", ReqDropPigRewardFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqLevelUpPackInfo", ReqLevelUpPackInfoFunc)
|
|
RegisterMsgProcessFunc("ReqBuyLevelUpPack", ReqBuyLevelUpPackFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqGrowthFundInfo", ReqGrowthFundInfoFunc)
|
|
RegisterMsgProcessFunc("ReqBuyGrowthFund", ReqBuyGrowthFundFunc)
|
|
RegisterMsgProcessFunc("ReqGetGrowthFundWard", ReqGetGrowthFundWardFunc)
|
|
RegisterMsgProcessFunc("ReqRemoveAd", ReqRemoveAdFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqSupremeGiftInfo", ReqSupremeGiftInfoFunc)
|
|
RegisterMsgProcessFunc("ReqBuySupremeGift", ReqBuySupremeGiftFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqIllustratedInfo", ReqIllustratedInfoFunc)
|
|
RegisterMsgProcessFunc("ReqGetIllustrateItemReward", ReqGetIllustrateItemRewardFunc)
|
|
RegisterMsgProcessFunc("UpdateIllustrateItem", UpdateIllustrateItemFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqCardCollectDetail", ReqCardCollectDetailFunc)
|
|
RegisterMsgProcessFunc("ReqGetCardAlbumReward", ReqGetCardAlbumRewardFunc)
|
|
RegisterMsgProcessFunc("ReqGetAllCardReward", ReqGetAllCardRewardFunc)
|
|
RegisterMsgProcessFunc("ReqAddCard", ReqAddCardFunc)
|
|
RegisterMsgProcessFunc("ReqUnpackCard", ReqUnpackCardFunc)
|
|
RegisterMsgProcessFunc("ReqAddMasterCard", ReqAddMasterCardFunc)
|
|
RegisterMsgProcessFunc("ReqUseMasterCard", ReqUseMasterCardFunc)
|
|
RegisterMsgProcessFunc("ReqBuyStickerItem", ReqBuyStickerItemFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqExchangeCardBoxData", ReqExchangeCardBoxDataFunc)
|
|
RegisterMsgProcessFunc("ReqDonateFriendCard", ReqDonateFriendCardFunc)
|
|
RegisterMsgProcessFunc("ReqGetDonateCard", ReqGetDonateCardFunc)
|
|
RegisterMsgProcessFunc("ReqExchangeCard", ReqExchangeCardFunc)
|
|
RegisterMsgProcessFunc("ReqReceiptCard", ReqReceiptCardFunc)
|
|
RegisterMsgProcessFunc("ReqCompleteExchangeCard", ReqCompleteExchangeCardFunc)
|
|
RegisterMsgProcessFunc("ReqGetExchangeCard", ReqGetExchangeCardFunc)
|
|
RegisterMsgProcessFunc("ReqRefuseExchange", ReqRefuseExchangeFunc)
|
|
RegisterMsgProcessFunc("ReqRequestCard", ReqRequestCardFunc)
|
|
RegisterMsgProcessFunc("ReqCompleteRequestCard", ReqCompleteRequestCardFunc)
|
|
RegisterMsgProcessFunc("ReqRefuseRequestCard", ReqRefuseRequestCardFunc)
|
|
RegisterMsgProcessFunc("ReqGetRequestCard", ReqGetRequestCardFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqDailyTaskData", ResDailyTaskDataFunc)
|
|
RegisterMsgProcessFunc("UpdateDailyTaskData", UpdateDailyTaskDataFunc)
|
|
RegisterMsgProcessFunc("RenewDailyTaskData", RenewDailyTaskDataFunc)
|
|
RegisterMsgProcessFunc("RenewWeekyActiveData", RenewWeekyActiveDataFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqMileStoneData", ResMileStoneDataFunc)
|
|
RegisterMsgProcessFunc("UpdateMileStoneData", UpdateMileStoneDataFunc)
|
|
RegisterMsgProcessFunc("RenewMileStoneData", RenewMileStoneDataFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqChampshipData", ReqChampshipDataFunc)
|
|
RegisterMsgProcessFunc("ReqChampshipAddScore", ReqChampshipAddScoreFunc)
|
|
RegisterMsgProcessFunc("ReqChampshipAddTime", ReqChampshipAddTimeFunc)
|
|
RegisterMsgProcessFunc("ReqPlayerChampshipData", ReqPlayerChampshipData)
|
|
|
|
RegisterMsgProcessFunc("ReqAdPackData", ReqAdPackDataFunc)
|
|
RegisterMsgProcessFunc("ReqWatchAdPack", ReqWatchAdPackFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqPlayerSingleData", ReqPlayerSingleDataFunc)
|
|
RegisterMsgProcessFunc("ReqOpenNewbiePack", ReqOpenNewbiePackFunc)
|
|
RegisterMsgProcessFunc("ReqBuyNewbiePack", ReqBuyNewbiePackFunc)
|
|
RegisterMsgProcessFunc("ReqAddNoAdCnt", ReqAddNoAdCntFunc)
|
|
RegisterMsgProcessFunc("ReqAddWatchAdCnt", ReqAddWatchAdCntFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqPlayerPayData", ReqPlayerPayDataFunc)
|
|
RegisterMsgProcessFunc("ReqAddPay", ReqAddPayFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqLimitData", ReqLimitDataFunc)
|
|
RegisterMsgProcessFunc("ReqAddLimitTime", ReqAddLimitTimeFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqGenSuperOrder", ReqGenSuperOrderFunc)
|
|
RegisterMsgProcessFunc("ReqEndSuperOrder", ReqEndSuperOrder)
|
|
RegisterMsgProcessFunc("ReqCompleteDoubleHit", ReqCompleteDoubleHit)
|
|
RegisterMsgProcessFunc("ReqTagThief", ReqTagThief)
|
|
|
|
RegisterMsgProcessFunc("ReqFriendData", ReqFriendDataFunc)
|
|
RegisterMsgProcessFunc("ReqWillPlayerDetail", ReqWillPlayerDetailFunc)
|
|
RegisterMsgProcessFunc("ReqAddFriendData", ReqAddFriendDataFunc)
|
|
RegisterMsgProcessFunc("ReqAllAddFriendInfo", ReqAllAddFriendInfoFunc)
|
|
RegisterMsgProcessFunc("ReqAgreeFriendReq", ReqAgreeFriendReqFunc)
|
|
RegisterMsgProcessFunc("ReqRefuseFriendReq", ReqRefuseFriendReqFunc)
|
|
RegisterMsgProcessFunc("ReqDeleteFriend", ReqDeleteFriendFunc)
|
|
RegisterMsgProcessFunc("ReqAutoFBAddFriend", ReqAutoFBAddFriend)
|
|
RegisterMsgProcessFunc("ReqAutoAddInviteFriend", ReqAutoAddInviteFriend)
|
|
RegisterMsgProcessFunc("ReqRecommendFriendList", ReqRecommendFriendList)
|
|
RegisterMsgProcessFunc("ReqInviteFriendData", ReqInviteFriendData)
|
|
RegisterMsgProcessFunc("ReqSelfInvited", ReqSelfInvited)
|
|
RegisterMsgProcessFunc("ReqGetInviteReward", ReqGetInviteReward)
|
|
RegisterMsgProcessFunc("ReqFriendTreasureData", ReqFriendTreasureData)
|
|
RegisterMsgProcessFunc("ReqUpdateFriendStar", ReqUpdateFriendStar)
|
|
|
|
RegisterMsgProcessFunc("ReqPlayerProfileData", ReqPlayerProfileDataFunc)
|
|
RegisterMsgProcessFunc("ReqUpdatePlayerProfile", ReqUpdatePlayerProfileFunc)
|
|
RegisterMsgProcessFunc("ReqPlayerBriefProfileData", ReqPlayerBriefProfileDataFunc)
|
|
RegisterMsgProcessFunc("ReqFriendEventData", ReqFriendEventDataFunc)
|
|
RegisterMsgProcessFunc("ReqUpdateFBPicURL", ReqUpdateFBPicURLFunc)
|
|
|
|
RegisterMsgProcessFunc("ReqBindFacebookAccount", ReqBindFacebookAccount)
|
|
RegisterMsgProcessFunc("ReqOnlyBindFacebook", ReqOnlyBindFacebook)
|
|
RegisterMsgProcessFunc("ReqUnBindFacebook", ReqUnBindFacebook)
|
|
RegisterMsgProcessFunc("ReqSynGameData", ReqSynGameData)
|
|
|
|
RegisterMsgProcessFunc("ReqPlayerPetData", ReqPlayerPetData)
|
|
RegisterMsgProcessFunc("ReqUpdatePetProfile", ReqUpdatePetProfile)
|
|
|
|
RegisterMsgProcessFunc("ReqPetHomeData", ReqPetHomeData)
|
|
RegisterMsgProcessFunc("ReqOpenOtherPetHome", ReqOpenOtherPetHome)
|
|
RegisterMsgProcessFunc("ReqCompleteMiniGame", ReqCompleteMiniGame)
|
|
RegisterMsgProcessFunc("ReqOpenSelfPet", ReqOpenSelfPet)
|
|
RegisterMsgProcessFunc("ReqPetHomeInterActST", ReqPetHomeInterActST)
|
|
RegisterMsgProcessFunc("ReqShiftVisitPet", ReqShiftVisitPet)
|
|
RegisterMsgProcessFunc("ReqCallBackPet", ReqCallBackPet)
|
|
RegisterMsgProcessFunc("ReqUnlockDecorate", ReqUnlockDecorate)
|
|
RegisterMsgProcessFunc("ReqSaveSelectDecorate", ReqSaveSelectDecorate)
|
|
|
|
// 玩家
|
|
RegisterMsgProcessFunc("ReqUserInfo", ReqUserInfo)
|
|
RegisterMsgProcessFunc("ReqSetName", ReqSetName) // 设置名字
|
|
|
|
// 棋盘
|
|
RegisterMsgProcessFunc("ReqSetEnergyMul", RegSetEneryFunc) //设置能量倍数
|
|
RegisterMsgProcessFunc("ReqChessEx", ReqChessEx) // 转换棋子
|
|
RegisterMsgProcessFunc("ReqGetChessFromBuff", ReqGetChessFromBuff) // 从buff中获取棋子
|
|
RegisterMsgProcessFunc("ReqPutChessInBag", ReqPutChessInBag) // 把棋子放入背包
|
|
RegisterMsgProcessFunc("ReqTakeChessOutBag", ReqTakeChessOutBag) // 从背包中取出棋子
|
|
RegisterMsgProcessFunc("ReqBuyChessBagGrid", ReqBuyChessBagGrid) // 使用棋子技能
|
|
|
|
RegisterMsgProcessFunc("ReqBuyEnergy", ReqBuyEnergy) //购买能量
|
|
|
|
//领取图鉴奖励
|
|
RegisterMsgProcessFunc("ReqGetHandbookReward", ReqGetHandbookReward)
|
|
|
|
//领取订单奖励
|
|
RegisterMsgProcessFunc("ReqRewardOrder", ReqRewardOrder)
|
|
|
|
//装饰
|
|
RegisterMsgProcessFunc("ReqDecorate", ReqDecorate)
|
|
RegisterMsgProcessFunc("ReqDecorateAll", ReqDecorateAll)
|
|
//Gm命令
|
|
RegisterMsgProcessFunc("ReqGmCommand", ReqGmCommand)
|
|
|
|
//卡牌
|
|
RegisterMsgProcessFunc("ReqCardCollectReward", ReqCardCollectReward) //领取卡牌系列收集奖励
|
|
RegisterMsgProcessFunc("ReqExStarReward", ReqExStarReward) // 兑换收集星星奖励
|
|
RegisterMsgProcessFunc("ReqAllCollectReward", ReqAllCollectReward) // 领取全收集奖励
|
|
RegisterMsgProcessFunc("ReqCardGive", ReqCardGive) // 请求赠送卡牌
|
|
RegisterMsgProcessFunc("ReqAgreeCardGive", ReqAgreeCardGive) // 同意赠送卡牌
|
|
RegisterMsgProcessFunc("ReqRefuseCardGive", ReqRefuseCardGive) // 拒绝赠送卡牌
|
|
|
|
RegisterMsgProcessFunc("ReqCardExchange", ReqCardExchange) // 请求兑换卡牌
|
|
RegisterMsgProcessFunc("ReqSelectCardExchange", ReqSelectCardExchange) // 选择交换的卡牌
|
|
RegisterMsgProcessFunc("ReqAgreeCardExchange", ReqAgreeCardExchange) // 完成交换卡牌
|
|
RegisterMsgProcessFunc("ReqRefuseCardSelect", ReqRefuseCardSelect) // 拒绝选择卡牌进行交换
|
|
RegisterMsgProcessFunc("ReqRefuseCardExchange", ReqRefuseCardExchange) // 拒绝卡牌交换
|
|
RegisterMsgProcessFunc("ReqCardSend", ReqCardSend) // 直接赠送卡牌
|
|
RegisterMsgProcessFunc("ReqGetFriendCard", ReqGetFriendCard) // 领取好友赠送的卡牌
|
|
RegisterMsgProcessFunc("ReqMasterCard", ReqMasterCard) // 万能卡兑换
|
|
|
|
// 日常任务
|
|
RegisterMsgProcessFunc("ReqGetDailyTaskReward", ReqGetDailyTaskReward) // 领取日常任务奖励
|
|
RegisterMsgProcessFunc("ReqGetDailyWeekReward", ReqGetDailyWeekReward) // 领取周活跃奖励
|
|
// 引导奖励
|
|
RegisterMsgProcessFunc("ReqGuideReward", ReqGuideReward)
|
|
// 头像
|
|
RegisterMsgProcessFunc("ReqSetFace", ReqSetFace)
|
|
// 头像框
|
|
RegisterMsgProcessFunc("ReqSetAvatar", ReqSetAvatar)
|
|
|
|
// 领取七日签到奖励
|
|
RegisterMsgProcessFunc("ReqGetSevenLoginReward", ReqGetSevenLoginReward)
|
|
RegisterMsgProcessFunc("ReqGetMonthLoginReward", ReqGetMonthLoginReward)
|
|
|
|
// 连击快手奖励
|
|
RegisterMsgProcessFunc("ReqLimitEvent", ReqLimitEvent)
|
|
RegisterMsgProcessFunc("ReqFastProduceReward", ReqFastProduceReward)
|
|
//场景转盘
|
|
RegisterMsgProcessFunc("ReqLimitSenceReward", ReqLimitSenceReward)
|
|
//领取限时事件进度奖励
|
|
|
|
// 好友
|
|
RegisterMsgProcessFunc("ReqFriendList", ReqFriendList) // 请求好友列表
|
|
RegisterMsgProcessFunc("ReqFriendApply", ReqFriendApply) // 请求申请好友列表
|
|
RegisterMsgProcessFunc("ReqFriendCardMsg", ReqFriendCardMsg) // 请求好友卡牌申请列表
|
|
RegisterMsgProcessFunc("ReqFriendTimeLine", ReqFriendTimeLine) // 请求好友时间线
|
|
RegisterMsgProcessFunc("ReqFriendRecommend", ReqFriendRecommend) // 获取推荐好友
|
|
|
|
RegisterMsgProcessFunc("ReqSearchPlayer", ReqSearchPlayer) // 搜索好友
|
|
RegisterMsgProcessFunc("ReqApplyFriend", ReqApplyFriend) // 申请好友
|
|
RegisterMsgProcessFunc("ReqAgreeFriend", ReqAgreeFriend) // 同意申请
|
|
RegisterMsgProcessFunc("ReqRefuseFriend", ReqRefuseFriend) // 拒绝申请
|
|
RegisterMsgProcessFunc("ReqDelFriend", ReqDelFriend) // 删除好友
|
|
|
|
// 榜单
|
|
RegisterMsgProcessFunc("ReqRank", ReqRank) // 请求榜单数据
|
|
|
|
// 邮件
|
|
RegisterMsgProcessFunc("ReqMailList", ReqMailList) // 请求邮件数据
|
|
RegisterMsgProcessFunc("ReqReadMail", ReqReadMail) // 读取邮件
|
|
RegisterMsgProcessFunc("ReqGetMailReward", ReqGetMailReward) // 领取邮件奖励
|
|
RegisterMsgProcessFunc("ReqDeleteMail", ReqDeleteMail) // 删除邮件
|
|
|
|
// 商店
|
|
RegisterMsgProcessFunc("ReqFreeShop", ReqFreeShop) // 领取商店免费奖励
|
|
RegisterMsgProcessFunc("ReqBuyChessShop", ReqBuyChessShop) // 购买商店棋子
|
|
RegisterMsgProcessFunc("ReqRefreshChessShop", ReqRefreshChessShop) // 刷新棋子商店
|
|
|
|
// 无尽礼包
|
|
RegisterMsgProcessFunc("ReqEndless", ReqEndless) // 请求无尽礼包数据
|
|
RegisterMsgProcessFunc("ReqEndlessReward", ReqEndlessReward) // 领取无尽礼包免费奖励
|
|
|
|
// 小猪存钱罐
|
|
RegisterMsgProcessFunc("ReqPiggyBankReward", ReqPiggyBankReward) // 小猪存钱罐领取奖励
|
|
|
|
// 锦标赛
|
|
RegisterMsgProcessFunc("ReqChampshipReward", ReqChampshipReward) // 领取锦标赛奖励
|
|
RegisterMsgProcessFunc("ReqChampshipRankReward", ReqChampshipRankReward) // 领取锦标赛排行榜奖励
|
|
RegisterMsgProcessFunc("ReqChampshipRank", ReqChampshipRank) // 请求锦标赛排行榜
|
|
RegisterMsgProcessFunc("ReqChampshipPreRank", ReqChampshipPreRank) // 请求锦标赛昨日排行榜
|
|
|
|
}
|
|
|
|
func (ad *GameLogic) ResPlayerEmitUnlockData(param []interface{}) {
|
|
data := (param[0].(*Player).GetIFGameData("PlayerEmitUnlockData"))
|
|
data.(*PlayerEmitUnlockData).ResPlayerEmitUnlockData(param[0].(*Player))
|
|
}
|
|
|
|
func (ad *GameLogic) broadcastInfoAllPlayer(Func string, data []byte) {
|
|
internal.Agents.Range(func(k, v interface{}) bool {
|
|
if v == ad.NotInitPlayer {
|
|
return true
|
|
}
|
|
ad.PackResInfo(k.(gate.Agent), Func, data)
|
|
return true
|
|
})
|
|
}
|
|
|
|
func (ad *GameLogic) JudgeIsActivity(c *cron.Cron, Id int) int {
|
|
activityCfg := gamedata.GetConfigByName("Activity")
|
|
record := activityCfg.Index(Id).(*gamedata.ActivityRecord)
|
|
|
|
timeStamp := time.Now().Unix()
|
|
t := time.Unix(timeStamp, 0).Local()
|
|
nianchu := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) - int64((t.YearDay()-1)*3600*24)
|
|
|
|
key := ad.m_CronEntryIDs[record.Id]
|
|
Schedule := c.Entry(key.StartCronID).Schedule
|
|
Next := Schedule.Next(time.Unix(nianchu, 0))
|
|
|
|
if timeStamp >= Next.Unix() && timeStamp <= Next.Unix()+int64(record.Duration) {
|
|
return 2
|
|
} else {
|
|
if timeStamp < Next.Unix() {
|
|
return 1
|
|
}
|
|
}
|
|
return 3
|
|
}
|
|
|
|
func (ad *GameLogic) CalcDeltaEndTime(c *cron.Cron, Id int) int32 {
|
|
activityCfg := gamedata.GetConfigByName("Activity")
|
|
record := activityCfg.Index(Id).(*gamedata.ActivityRecord)
|
|
|
|
timeStamp := time.Now().Unix()
|
|
t := time.Unix(timeStamp, 0).Local()
|
|
nianchu := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) - int64((t.YearDay()-1)*3600*24)
|
|
|
|
key := ad.m_CronEntryIDs[record.Id]
|
|
Schedule := c.Entry(key.StartCronID).Schedule
|
|
Next := Schedule.Next(time.Unix(nianchu, 0))
|
|
return int32(Next.Unix() + int64(record.Duration) - timeStamp)
|
|
}
|
|
|
|
func (ad *GameLogic) GetActiveParamById(Id int) *LimitActPeriod {
|
|
v, ok := ad.m_CronEntryIDs[Id]
|
|
if ok {
|
|
return v
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (ad *GameLogic) CreateLimiteEventManager() {
|
|
ad.MLimiteEventManager = new(LimiteEventManager)
|
|
ad.MLimiteEventManager.InitManager()
|
|
}
|
|
|
|
func (ad *GameLogic) CreateProfileManager() {
|
|
ad.MPlayerProfileManager = new(PlayerProfileManager)
|
|
ad.MPlayerProfileManager.InitManager()
|
|
}
|
|
|
|
func (ad *GameLogic) CreateChamshipsMgr() {
|
|
ad.MChampshipsManager = new(NewChampshipsManager)
|
|
ad.MChampshipsManager.InitManager()
|
|
}
|
|
|
|
func (ad *GameLogic) CreateCompensateMgr() {
|
|
ad.MOldPlayerCompensateMgr = new(OldPlayerCompensateMgr)
|
|
ad.MOldPlayerCompensateMgr.InitManager()
|
|
}
|
|
|
|
func (ad *GameLogic) CreateHttpManager() {
|
|
|
|
go func() {
|
|
ad.MHttpManager = new(HttpManager)
|
|
ad.MHttpManager.InitRounter()
|
|
}()
|
|
|
|
}
|
|
|
|
func (ad *GameLogic) CreateLogManager() {
|
|
ad.MLogManager = new(LogMgr)
|
|
ad.MLogManager.InitManager()
|
|
}
|
|
|
|
func (ad *GameLogic) InitActivity() {
|
|
ad.m_CronEntryIDs = make(map[int]*LimitActPeriod)
|
|
activityCfg := gamedata.GetConfigByName("Activity")
|
|
c := cron.New()
|
|
|
|
timeStamp := time.Now().Unix()
|
|
t := time.Unix(timeStamp, 0).Local()
|
|
nianchu := timeStamp - (int64)(t.Hour()*3600+t.Minute()*60+t.Second()) - int64((t.YearDay()-1)*3600*24)
|
|
|
|
for i := 0; i < activityCfg.NumRecord(); i++ {
|
|
record := activityCfg.Record(i).(*gamedata.ActivityRecord)
|
|
start := record.StartTime
|
|
var LAP = LimitActPeriod{}
|
|
|
|
LAP.StartCronID, _ = c.AddFunc(start, func() {
|
|
log.Debug("Next: UTC", c.Entry(LAP.StartCronID).Next.Unix())
|
|
G_GameLogicPtr.M_LimitActiveList = append(G_GameLogicPtr.M_LimitActiveList, record.Id)
|
|
cur := int32(time.Now().Unix())
|
|
GoUtil.CallEvent(MergeConst.OpenNewLimitActivity, []interface{}{record.Id, cur, cur + int32(record.Duration), record.Type})
|
|
go func() {
|
|
LeafTimer := ad.Mdispatr.AfterFunc(time.Duration(record.Duration)*time.Second, func() {
|
|
GoUtil.CallEvent(MergeConst.CloseNewLimitActivity, []interface{}{record})
|
|
G_GameLogicPtr.M_LimitActiveList = GoUtil.DeleteEleByValue(G_GameLogicPtr.M_LimitActiveList, record.Id)
|
|
})
|
|
LAP.EndTimer = LeafTimer
|
|
}()
|
|
})
|
|
ad.m_CronEntryIDs[record.Id] = &LAP
|
|
}
|
|
c.Start()
|
|
for k, v := range ad.m_CronEntryIDs {
|
|
ret := ad.JudgeIsActivity(c, k)
|
|
if ret == 3 { //已经结束
|
|
delete(ad.m_CronEntryIDs, k)
|
|
}
|
|
if ret == 2 {
|
|
key := k
|
|
value := v
|
|
G_GameLogicPtr.M_LimitActiveList = append(G_GameLogicPtr.M_LimitActiveList, k)
|
|
go func() {
|
|
delta := ad.CalcDeltaEndTime(c, key)
|
|
LeafTimer := ad.Mdispatr.AfterFunc(time.Duration(delta)*time.Second, func() {
|
|
record := activityCfg.Index(key).(*gamedata.ActivityRecord)
|
|
GoUtil.CallEvent(MergeConst.CloseNewLimitActivity, []interface{}{record})
|
|
G_GameLogicPtr.M_LimitActiveList = GoUtil.DeleteEleByValue(G_GameLogicPtr.M_LimitActiveList, key)
|
|
})
|
|
value.EndTimer = LeafTimer
|
|
Schedule := c.Entry(value.StartCronID).Schedule
|
|
Next := Schedule.Next(time.Unix(nianchu, 0))
|
|
value.StartTime = int32(Next.Unix())
|
|
value.EndTime = int32(Next.Unix()) + activityCfg.Index(key).(*gamedata.ActivityRecord).Duration
|
|
}()
|
|
}
|
|
}
|
|
}
|
|
|
|
func (ad *GameLogic) AddLog(Log *Log) {
|
|
Log.TimeStamp = time.Now().Unix()
|
|
go func() {
|
|
ad.MLogManager.AddLog(Log)
|
|
}()
|
|
}
|
|
|
|
func (ad *GameLogic) NotifyAll(m *MsgMod.Msg) {
|
|
for _, v := range ad.M_Players {
|
|
v.Send(m)
|
|
}
|
|
}
|
|
|
|
func NotifyPlayer(Uid int, m *MsgMod.Msg) {
|
|
p := G_GameLogicPtr.GetPlayerByUid(Uid)
|
|
if p == nil || p.stop {
|
|
return
|
|
}
|
|
p.SendMsg(m)
|
|
}
|
|
|
|
func setRedisLock(key, value string, Duration time.Duration) bool {
|
|
return db.RedisLock(key, "", Duration)
|
|
}
|
|
|
|
func getRedisLock(key string) error {
|
|
_, err := db.RedisGetKey(key)
|
|
return err
|
|
}
|
|
|
|
func unsetRedisLock(key string) {
|
|
db.RedisUnlock(key, "")
|
|
}
|