diff --git a/src/server/MergeConst/ErrorCode.go b/src/server/MergeConst/ErrorCode.go index b43e4ace..6befcfe4 100644 --- a/src/server/MergeConst/ErrorCode.go +++ b/src/server/MergeConst/ErrorCode.go @@ -12,6 +12,7 @@ const ( Protocol_Error_Account_Device_Error int32 = 106 Protocol_Error_Id_Not_Verify int32 = 107 Protocol_Error_Id_Verify_Error int32 = 108 + Protocol_Error_Account_Ban int32 = 109 Protocol_Res_Buy_Cnt_Limit int32 = 110 Protocol_Res_Buy_CD int32 = 111 diff --git a/src/server/conf/user/UserData.go b/src/server/conf/user/UserData.go index b75e7538..1c4f6985 100644 --- a/src/server/conf/user/UserData.go +++ b/src/server/conf/user/UserData.go @@ -6,10 +6,14 @@ import ( "server/pkg/github.com/name5566/leaf/log" ) -var CFG_NAME = "UserData" +const ( + CFG_NAME = "UserData" + CFG_NANE_CONST = "UserDataConst" +) func init() { gamedata.InitCfg(CFG_NAME) + gamedata.InitCfg(CFG_NANE_CONST) } // 获取用户能量倍数 @@ -103,3 +107,30 @@ func GetUnlock(Lv int) string { s2 := gamedata.GetStringValue(data, "Unlock_2") return s1 + "," + s2 } + +func GetInitEnergy() int { + data, err := gamedata.GetDataByKey(CFG_NANE_CONST, "Energy") + if err != nil { + log.Debug("UserDataCfg GetInitEnergy not found") + return 0 + } + return gamedata.GetIntValue(data, "Value") +} + +func GetInitDiamond() int { + data, err := gamedata.GetDataByKey(CFG_NANE_CONST, "Diamond") + if err != nil { + log.Debug("UserDataCfg GetInitDiamond not found") + return 0 + } + return gamedata.GetIntValue(data, "Value") +} + +func GetInitStar() int { + data, err := gamedata.GetDataByKey(CFG_NANE_CONST, "Star") + if err != nil { + log.Debug("UserDataCfg GetInitStar not found") + return 0 + } + return gamedata.GetIntValue(data, "Value") +} diff --git a/src/server/game/BanMgr.go b/src/server/game/BanMgr.go new file mode 100644 index 00000000..c1b0fcb5 --- /dev/null +++ b/src/server/game/BanMgr.go @@ -0,0 +1,51 @@ +package game + +import ( + "encoding/gob" + "server/GoUtil" +) + +type BanMgr struct { + *ServerMod +} + +type BanData struct { + BanList map[int64]int64 // 玩家ID -> 是否被封禁 +} + +func (f *BanMgr) Init() { + gob.Register(&VarGoldCard{}) + f.key = VAR_MGR_KEY + f.data = &BanData{ + BanList: make(map[int64]int64), + } + // 注册处理函数 + f.init() + if f.data.(*BanData).BanList == nil { + f.data.(*BanData).BanList = make(map[int64]int64) + } + if f.data.(*VarData).UserVar == nil { + f.data.(*VarData).UserVar = make(map[string]*VarUserData) + } +} + +func (f *BanMgr) IsBanned(userId int64) bool { + if f.data.(*BanData).BanList == nil { + return false + } + EndTime, banned := f.data.(*BanData).BanList[userId] + if !banned { + return false + } + return EndTime > GoUtil.Now() || EndTime == 0 // 如果EndTime为0,表示永久封禁 +} + +func (f *BanMgr) BanUser(userId int64, endTime int64) { + f.data.(*BanData).BanList[userId] = endTime + f.SaveData() +} + +func (f *BanMgr) UnbanUser(userId int64) { + delete(f.data.(*BanData).BanList, userId) + f.SaveData() +} diff --git a/src/server/game/GameLogic.go b/src/server/game/GameLogic.go index d97f8a9f..7e735cfb 100644 --- a/src/server/game/GameLogic.go +++ b/src/server/game/GameLogic.go @@ -9,6 +9,7 @@ import ( "server/GoUtil" "server/MergeConst" "server/conf" + userCfg "server/conf/user" "strconv" "sync" @@ -83,6 +84,7 @@ type GameLogic struct { MailMgr *MailMgr // 邮件管理器 ChampshipMgr *ChampshipMgr // 锦标赛管理器 VarMgr *VarMgr // 变量管理器 + BanMgr *BanMgr // 封号管理器 StartTime int64 // 服务器启动时间 } @@ -102,9 +104,6 @@ func (gl *GameLogic) ZeroFlush() { }) var a1 = []interface{}{gl.DailyTaskTimestamp} GoUtil.CallEvent(MergeConst.Notify_Daily_Renew, a1) - // gl.RankMgrSend(MsgMod.MSG_ZERO_UPDATE) // 零点更新排行榜 - // gl.ChampshipMgrSend(MsgMod.MSG_ZERO_UPDATE) // 零点更新锦标赛 - // gl.VarMgrSend(MsgMod.MSG_ZERO_UPDATE) // 零点更新变量 gl.NotifyAll(MsgMod.MSG_ZERO_UPDATE) gl.CreateDailyLogFile() log.Debug("Server ZeroFlush") @@ -185,10 +184,10 @@ func (ad *GameLogic) NewAccountInsertDataToDB() bool { insertId = insertId + int64(conf.Server.ServerID*100000) + int64(conf.Server.AppID*100000000) playerInfo := &db.ResPlayerBaseInfo{} playerInfo.DwUin = int64(insertId) - playerInfo.Energy = 100 - playerInfo.Star = 0 + playerInfo.Energy = int32(userCfg.GetInitEnergy()) + playerInfo.Star = int32(userCfg.GetInitStar()) playerInfo.RecoverTime = int32(time.Now().Unix()) - playerInfo.Diamond = 0 + playerInfo.Diamond = int32(userCfg.GetInitDiamond()) playerInfo.Level = 1 playerInfo.Exp = 0 playerInfo.StartOrderId = "1" @@ -400,6 +399,26 @@ func (ad *GameLogic) VarMgrCall(m *MsgMod.Msg) interface{} { return result } +// 封号管理器 +func (ad *GameLogic) CreateBanMgr() { + ad.BanMgr = &BanMgr{ + ServerMod: new(ServerMod), + } + ad.BanMgr.Init() +} + +func (ad *GameLogic) BanMgrSend(m *MsgMod.Msg) { + ad.BanMgr.Send(m) +} + +func (ad *GameLogic) BanMgrCall(m *MsgMod.Msg) interface{} { + result, err := ad.BanMgr.Call(m) + if err != nil { + return nil + } + return result +} + func (ad *GameLogic) GetSimplePlayerByUid(Id int) *PlayerSimpleData { if Id == 0 { return nil @@ -480,6 +499,7 @@ func G_getGameLogic() *GameLogic { G_GameLogicPtr.CreateMailMgr() //创建邮件管理器 G_GameLogicPtr.CreateChampshipMgr() // 创建竞标赛管理器 G_GameLogicPtr.CreateVarMgr() // 创建变量管理器 + G_GameLogicPtr.CreateBanMgr() // 创建封号管理器 ClusterMgrInit() //初始化集群 G_GameLogicPtr.StartTime = time.Now().Unix() // G_GameLogicPtr.CreateHttpManager() @@ -946,6 +966,7 @@ func Destroy() { G_GameLogicPtr.ChampshipMgr.SaveData() G_GameLogicPtr.MailMgr.SaveData() G_GameLogicPtr.VarMgr.SaveData() + G_GameLogicPtr.BanMgr.SaveData() G_GameLogicPtr.MLogManager.Close() } log.Debug("服务器下线完成") diff --git a/src/server/game/PlayerMod.go b/src/server/game/PlayerMod.go index 826b8b0c..cc192824 100644 --- a/src/server/game/PlayerMod.go +++ b/src/server/game/PlayerMod.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/gob" "fmt" + userCfg "server/conf/user" "server/db" "server/game/mod/activity" "server/game/mod/avatar" @@ -145,9 +146,9 @@ func (p *PlayerModData) InitMod(player *Player) (bool, error) { BaseMod.SetAccount(PlayerBaseMod.Data.UserName) BaseMod.SetLevel(int(PlayerBaseMod.Data.Level)) BaseMod.SetExp(int(PlayerBaseMod.Data.Exp)) - BaseMod.SetEnergy(int(PlayerBaseMod.Data.Energy)) - BaseMod.SetStar(int(PlayerBaseMod.Data.Star)) - BaseMod.SetDiamond(int(PlayerBaseMod.Data.Diamond)) + BaseMod.SetEnergy(userCfg.GetInitEnergy()) + BaseMod.SetStar(userCfg.GetInitStar()) + BaseMod.SetDiamond(userCfg.GetInitDiamond()) BaseMod.SetRecoverTime(int64(PlayerBaseMod.Data.RecoverTime)) BaseMod.FackBookId = PlayerBaseMod.Data.FaceBookId is_update = true diff --git a/src/server/game/admin.go b/src/server/game/admin.go index c67dc9a8..2a0f2d09 100644 --- a/src/server/game/admin.go +++ b/src/server/game/admin.go @@ -87,6 +87,14 @@ func VerifyUser(accountInfo *db.Db_Account, detail *msg.ReqLogin) (ResLogin *msg return } + if G_GameLogicPtr.BanMgr.IsBanned(playerbaseinfo.DwUin) { + ResLogin = &msg.ResLogin{ + ResultCode: MergeConst.Protocol_Error_Account_Ban, + DwUin: 0, + } + return + } + ResLogin = &msg.ResLogin{ ResultCode: 0, DwUin: playerbaseinfo.DwUin,