Merge branch 'sdk' into online
This commit is contained in:
commit
34cfcb9656
@ -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
|
||||
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
package catnipCfg
|
||||
|
||||
import "server/gamedata"
|
||||
import (
|
||||
"server/GoUtil"
|
||||
"server/game/mod/item"
|
||||
"server/gamedata"
|
||||
)
|
||||
|
||||
const (
|
||||
CATNIP_TEMPLATE_CFG_NAME = "CatnipTemplate"
|
||||
@ -9,6 +13,12 @@ const (
|
||||
CATNIP_GAME_CFG_NAME = "CatnipGame"
|
||||
)
|
||||
|
||||
const (
|
||||
CATNIP_REWARD_TYPE_LOW = 1
|
||||
CATNIP_REWARD_TYPE_MID = 2
|
||||
CATNIP_REWARD_TYPE_HIGH = 3
|
||||
)
|
||||
|
||||
func init() {
|
||||
gamedata.InitCfg(CATNIP_TEMPLATE_CFG_NAME)
|
||||
gamedata.InitCfg(CATNIP_JACKPOT_CFG_NAME)
|
||||
@ -23,3 +33,78 @@ func GetGameNum(Id int) int {
|
||||
}
|
||||
return gamedata.GetIntValue(data, "PassNum")
|
||||
}
|
||||
|
||||
func GetJackpotItem(Mul int) (int, []*item.Item, int) {
|
||||
data, err := gamedata.GetData(CATNIP_JACKPOT_CFG_NAME)
|
||||
if err != nil {
|
||||
return 0, nil, 0
|
||||
}
|
||||
JackpotType := GetJackpotType(Mul)
|
||||
r := make(map[int]int)
|
||||
for k, v := range data {
|
||||
if gamedata.GetIntValue(v, "Type") == JackpotType {
|
||||
r[GoUtil.Int(k)] = 1
|
||||
}
|
||||
}
|
||||
Id := GoUtil.RandMap(r)
|
||||
if Id == 0 {
|
||||
return 0, nil, 0
|
||||
}
|
||||
itemData, err := gamedata.GetDataByIntKey(CATNIP_JACKPOT_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
return 0, nil, 0
|
||||
}
|
||||
return Id, gamedata.GetItemList(itemData, "Items"), gamedata.GetIntValue(itemData, "Growth")
|
||||
}
|
||||
|
||||
func GetJackpotType(Mul int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_MULTIPLIER_CFG_NAME, Mul)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
R := map[int]int{
|
||||
CATNIP_REWARD_TYPE_LOW: gamedata.GetIntValue(data, "Low"),
|
||||
CATNIP_REWARD_TYPE_MID: gamedata.GetIntValue(data, "Mid"),
|
||||
CATNIP_REWARD_TYPE_HIGH: gamedata.GetIntValue(data, "High"),
|
||||
}
|
||||
return GoUtil.RandMap(R)
|
||||
}
|
||||
|
||||
func GetTemplateId(Id int) int {
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_TEMPLATE_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
return 0
|
||||
}
|
||||
return gamedata.GetIntValue(data, "Template")
|
||||
}
|
||||
|
||||
func GetProgressReward(Id int, Progress int) []*item.Item {
|
||||
TemplateId := GetTemplateId(Id)
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_GAME_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "Need") == Progress && gamedata.GetIntValue(v, "Template") == TemplateId {
|
||||
return gamedata.GetItemList(v, "Items")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetItemCost(Id, Mul int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_TEMPLATE_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return item.MutilItem(gamedata.GetItemList(data, "ItemCost"), Mul)
|
||||
}
|
||||
|
||||
func GetGrandReward(Id int) []*item.Item {
|
||||
data, err := gamedata.GetDataByIntKey(CATNIP_TEMPLATE_CFG_NAME, Id)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return gamedata.GetItemList(data, "Reward")
|
||||
}
|
||||
|
||||
@ -583,3 +583,17 @@ func GetPetOrderItemExpByList(ItemList []*item.Item) int {
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
func GetShopItemAdNum(Id int) int {
|
||||
data, err := gamedata.GetData(CFG_PLAYROOM_SHOP)
|
||||
if err != nil {
|
||||
log.Debug("GetShopItemAdNum err:%v", err)
|
||||
return 0
|
||||
}
|
||||
for _, v := range data {
|
||||
if gamedata.GetIntValue(v, "ItemId") == Id {
|
||||
return gamedata.GetIntValue(v, "Dailystorage")
|
||||
}
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
@ -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")
|
||||
}
|
||||
|
||||
69
src/server/game/BanMgr.go
Normal file
69
src/server/game/BanMgr.go
Normal file
@ -0,0 +1,69 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"encoding/gob"
|
||||
"server/GoUtil"
|
||||
)
|
||||
|
||||
type BanMgr struct {
|
||||
*ServerMod
|
||||
}
|
||||
|
||||
type BanData struct {
|
||||
NewBanList map[int64]*BanInfo // 新增的封禁列表
|
||||
}
|
||||
|
||||
type BanInfo struct {
|
||||
UserId int64 // 玩家ID
|
||||
EndTime int64 // 封禁结束时间,0表示永久封禁
|
||||
Reason string // 封禁原因
|
||||
}
|
||||
|
||||
func (f *BanMgr) Init() {
|
||||
gob.Register(&BanData{})
|
||||
f.key = BAN_MGR_KEY
|
||||
f.data = &BanData{
|
||||
NewBanList: make(map[int64]*BanInfo),
|
||||
}
|
||||
// 注册处理函数
|
||||
f.init()
|
||||
if f.data.(*BanData).NewBanList == nil {
|
||||
f.data.(*BanData).NewBanList = make(map[int64]*BanInfo)
|
||||
}
|
||||
}
|
||||
|
||||
func (f *BanMgr) IsBanned(userId int64) bool {
|
||||
if f.data.(*BanData).NewBanList == nil {
|
||||
return false
|
||||
}
|
||||
Info, banned := f.data.(*BanData).NewBanList[userId]
|
||||
if !banned {
|
||||
return false
|
||||
}
|
||||
return Info.EndTime > GoUtil.Now() || Info.EndTime == -1 // 如果EndTime为0,表示永久封禁
|
||||
}
|
||||
|
||||
func (f *BanMgr) GetBanInfo(userId int64) *BanInfo {
|
||||
if f.data.(*BanData).NewBanList == nil {
|
||||
return &BanInfo{}
|
||||
}
|
||||
Info, banned := f.data.(*BanData).NewBanList[userId]
|
||||
if !banned {
|
||||
return &BanInfo{}
|
||||
}
|
||||
return Info
|
||||
}
|
||||
|
||||
func (f *BanMgr) BanUser(userId int64, endTime int64, reason string) {
|
||||
f.data.(*BanData).NewBanList[userId] = &BanInfo{
|
||||
UserId: userId,
|
||||
EndTime: endTime,
|
||||
Reason: reason,
|
||||
}
|
||||
f.SaveData()
|
||||
}
|
||||
|
||||
func (f *BanMgr) UnbanUser(userId int64) {
|
||||
delete(f.data.(*BanData).NewBanList, userId)
|
||||
f.SaveData()
|
||||
}
|
||||
@ -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()
|
||||
@ -752,6 +772,7 @@ func (ad *GameLogic) RegisterNetWorkFunc() {
|
||||
RegisterMsgProcessFunc("ReqFriendTimeLine", ReqFriendTimeLine) // 请求好友时间线
|
||||
RegisterMsgProcessFunc("ReqFriendRecommend", ReqFriendRecommend) // 获取推荐好友
|
||||
RegisterMsgProcessFunc("ReqFriendTLUpvote", ReqFriendTLUpvote) // 请求时间线点赞
|
||||
RegisterMsgProcessFunc("ReqFriendTReward", ReqFriendTReward) // 请求时间线点赞
|
||||
RegisterMsgProcessFunc("ReqAddNpc", ReqAddNpc) // 增加npc
|
||||
RegisterMsgProcessFunc("ReqWishApply", ReqWishApply) // 同意好友心愿单请求
|
||||
RegisterMsgProcessFunc("ReqFriendByCode", ReqFriendByCode) // 根据邀请码查询好友
|
||||
@ -946,6 +967,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("服务器下线完成")
|
||||
|
||||
@ -45,6 +45,9 @@ func ReqGmCommand_(player *Player, Command string) error {
|
||||
// log.Error("ReqGmCommand panic: %v", err)
|
||||
// }
|
||||
// }()
|
||||
if conf.Server.GameName != "pet_home" && conf.Server.GameName != "merge_pet_sdk" {
|
||||
return fmt.Errorf("Player %d ReqGmCommand not support in game %s, command %s", player.M_DwUin, conf.Server.GameName, Command)
|
||||
}
|
||||
player.TeLog("gm", map[string]interface{}{
|
||||
"command": Command,
|
||||
})
|
||||
|
||||
@ -780,6 +780,7 @@ func (p *Player) LoginBackData() {
|
||||
p.PushClientRes(p.PlayMod.mod_list.Item.BackData())
|
||||
p.PushClientRes(p.GetPlayerBaseMod().BackAsset())
|
||||
p.PushClientRes(p.PlayMod.mod_list.Kv.BackData())
|
||||
p.PushClientRes(p.PlayMod.mod_list.Friend.BubbleBackData())
|
||||
p.BackDataActivity()
|
||||
BackChampship(p)
|
||||
BackUserInfo(p)
|
||||
@ -922,6 +923,7 @@ func (p *Player) AddLog(Uid int, Type int, Param string, Time int64) {
|
||||
Id: int32(Id),
|
||||
Time: int32(Time),
|
||||
},
|
||||
Bubble: FriendMod.GetBubbble(Id),
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@ -76,6 +76,14 @@ func PlayroomBackData(p *Player) {
|
||||
EmojiId: int32(v.Emoji),
|
||||
})
|
||||
}
|
||||
AdWatch := make([]*proto.AdItem, 0)
|
||||
for k, v := range PlayroomMod.ADItem {
|
||||
AdWatch = append(AdWatch, &proto.AdItem{
|
||||
Watch: int32(v.Watch),
|
||||
LastWatch: int32(v.LastTime),
|
||||
ItemId: int32(k),
|
||||
})
|
||||
}
|
||||
data := G_GameLogicPtr.GetUserData(int(p.M_DwUin))
|
||||
|
||||
r.Dress = Dress
|
||||
@ -98,6 +106,7 @@ func PlayroomBackData(p *Player) {
|
||||
r.Kiss = int32(data.Kiss)
|
||||
r.Revenge = PlayroomMod.RevengeUid
|
||||
r.InteractNum = int32(PlayroomMod.InteractNum)
|
||||
r.AdItem = AdWatch
|
||||
p.PushClientRes(r)
|
||||
}
|
||||
|
||||
|
||||
@ -309,7 +309,7 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
p.PushClientRes(ChargeMod.BackData())
|
||||
case msg.HANDLE_TYPE_PLAYROOM_KISS: // playroom亲吻
|
||||
p.NotifyPlayroomKiss()
|
||||
case msg.HANDLE_TYPE_CATNIP_INVITE:
|
||||
case msg.HANDLE_TYPE_CATNIP_INVITE: // 邀请好友参与猫咪游戏
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMsg := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
@ -317,7 +317,7 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
return nil
|
||||
}
|
||||
CatnipMod.BeInvited(CatnipMsg.GameId, int(m.From), m.SendT)
|
||||
case msg.HANDLE_TYPE_CATNIP_AGREE:
|
||||
case msg.HANDLE_TYPE_CATNIP_AGREE: // 同意好友参与猫咪游戏
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMsgInfo := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
@ -337,7 +337,7 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
SendT: GoUtil.Now(),
|
||||
})
|
||||
}
|
||||
case msg.HANDLE_TYPE_CATNIP_AGREE_DEL:
|
||||
case msg.HANDLE_TYPE_CATNIP_AGREE_DEL: // 同意好友参与猫咪游戏后删除邀请
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMsg := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
@ -345,6 +345,22 @@ func handle(p *Player, m *msg.Msg) error {
|
||||
return nil
|
||||
}
|
||||
CatnipMod.DelInvited(CatnipMsg.GameId, int(m.From))
|
||||
case msg.HANDLE_TYPE_CATNIP_REFUSE: // 拒绝好友参与猫咪游戏
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipMsg := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId != CatnipMsg.ActivityId { // 活动ID不匹配
|
||||
return nil
|
||||
}
|
||||
CatnipMod.DelInvited(CatnipMsg.GameId, int(m.From))
|
||||
case msg.HANDLE_TYPE_CATNIP_GROWTH:
|
||||
CatnipMod := p.PlayMod.getCatnipMod()
|
||||
CatnipGrowthInfo := m.Extra.(CatnipMsg)
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
if ActivityId != CatnipGrowthInfo.ActivityId { // 活动ID不匹配
|
||||
return nil
|
||||
}
|
||||
CatnipMod.Growth(CatnipGrowthInfo.GameId, CatnipGrowthInfo.Growth)
|
||||
default:
|
||||
log.Debug("uid : %d, handle msg type : %d not exist", p.M_DwUin, m.Type)
|
||||
}
|
||||
@ -666,6 +682,7 @@ func GetCardInfoMsg(CardInfo *card.CardInfo) *proto.ResFriendCard {
|
||||
Type: int32(CardInfo.Type),
|
||||
Status: int32(CardInfo.Status),
|
||||
Id: CardInfo.Id,
|
||||
Emoji: int32(CardInfo.Emoji),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
@ -191,13 +192,18 @@ func (p *PlayerMod) save() {
|
||||
p.is_update = true
|
||||
}
|
||||
|
||||
func (p *PlayerMod) IsBlackList() bool {
|
||||
BaseMod := p.getBaseMod()
|
||||
return BaseMod.Account == "cecf89cd063b93c63da531daf7204afa"
|
||||
}
|
||||
|
||||
func (p *PlayerMod) ClearData(player *Player) {
|
||||
ChessMod := p.getChessMod()
|
||||
if len(ChessMod.ChessMap) > 0 && len(ChessMod.ChessList) != len(ChessMod.ChessMap) {
|
||||
log.Debug("uid: %d, SaveData, chess error ", player.M_DwUin)
|
||||
return
|
||||
}
|
||||
if p.is_update {
|
||||
if p.is_update && !p.IsBlackList() {
|
||||
//序列化模块
|
||||
var buf bytes.Buffer
|
||||
encode := gob.NewEncoder(&buf)
|
||||
|
||||
23
src/server/game/PlayerMsg.go
Normal file
23
src/server/game/PlayerMsg.go
Normal file
@ -0,0 +1,23 @@
|
||||
package game
|
||||
|
||||
import (
|
||||
"server/GoUtil"
|
||||
"server/game/mod/activity"
|
||||
"server/game/mod/msg"
|
||||
)
|
||||
|
||||
func (p *Player) CatnipGrowthMsg(To, Id, Growth int) error {
|
||||
ActivityId := GetActivityId(p, activity.ACT_TYPE_CATNIP)
|
||||
FriendMgrSend(&msg.Msg{
|
||||
From: int(p.M_DwUin),
|
||||
To: To,
|
||||
Type: msg.HANDLE_TYPE_CATNIP_GROWTH,
|
||||
SendT: GoUtil.Now(),
|
||||
Extra: CatnipMsg{
|
||||
ActivityId: ActivityId,
|
||||
GameId: Id,
|
||||
Growth: Growth,
|
||||
},
|
||||
})
|
||||
return nil
|
||||
}
|
||||
@ -1864,6 +1864,7 @@ func ReqCardSend(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
CardInfo.Emoji = int(req.Emoji)
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_SEND_CARD,
|
||||
From: int(player.M_DwUin),
|
||||
@ -1901,6 +1902,7 @@ func ReqCardExchange(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
CardInfo.Emoji = int(req.Emoji)
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_EX_CARD,
|
||||
From: int(player.M_DwUin),
|
||||
@ -2027,8 +2029,9 @@ func ReqAgreeCardExchange(player *Player, buf []byte) error {
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
player.PushClientRes(&msg.ResAgreeCardExchange{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: req.Id,
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: req.Id,
|
||||
Emoji: int32(CardInfo.Emoji),
|
||||
})
|
||||
m := &MsqMod.Msg{
|
||||
Type: MsqMod.HANDLE_TYPE_ARGREE_EX_CARD,
|
||||
@ -2151,6 +2154,7 @@ func ReqGetFriendCard(player *Player, buf []byte) error {
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: req.Id,
|
||||
CardId: int32(CardInfo.CardId),
|
||||
Emoji: int32(CardInfo.Emoji),
|
||||
})
|
||||
player.PushClientRes(CardMod.NotifyCard())
|
||||
return nil
|
||||
@ -2675,6 +2679,34 @@ func ReqFriendTLUpvote(player *Player, buf []byte) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqFriendTReward(player *Player, buf []byte) error {
|
||||
req := &msg.ReqFriendTReward{}
|
||||
proto.Unmarshal(buf, req)
|
||||
FriendMod := player.PlayMod.getFriendMod()
|
||||
Items, err := FriendMod.GetReward(int(req.Id))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResFriendTReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_FriendTReward.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResFriendTReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResFriendTReward{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: req.Id,
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqChampshipRankReward(player *Player, buf []byte) error {
|
||||
MyLastRank := G_GameLogicPtr.ChampshipMgr.getLastMyRank(int(player.M_DwUin))
|
||||
ChampshipMod := player.PlayMod.getChampshipMod()
|
||||
@ -3638,6 +3670,7 @@ func ReqPlayroomBuyItem(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
err := player.HandleLoseItem(CostItem, msg.ITEM_POP_LABEL_PlayroomBuyItem.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResPlayroomBuyItem{
|
||||
@ -3892,6 +3925,17 @@ func ReqPlayroomShop(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
// 消耗道具为0则为广告获取
|
||||
if LoseItem[0].Num == 0 {
|
||||
err := PlayroomMod.AdWatch(AddItems[0].Id)
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResPlayroomBuyItem{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
}
|
||||
err = player.HandleLoseItem(LoseItem, msg.ITEM_POP_LABEL_PlayroomShop.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResPlayroomShop{
|
||||
@ -3914,7 +3958,7 @@ func ReqPlayroomShop(player *Player, buf []byte) error {
|
||||
"reward": AddItems,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
PlayroomBackData(player)
|
||||
player.PushClientRes(PlayroomMod.NotifyMood())
|
||||
player.PushClientRes(&msg.ResPlayroomShop{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
})
|
||||
@ -4783,7 +4827,8 @@ func ReqCatnipMultiply(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
player.TeLog("catnip_multiply", map[string]interface{}{
|
||||
"Id": int(req.Id),
|
||||
"Id": int(req.Id),
|
||||
"Mul": int(req.Multiply),
|
||||
})
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipMultiply{
|
||||
@ -4797,7 +4842,7 @@ func ReqCatnipPlay(player *Player, buf []byte) error {
|
||||
req := &msg.ReqCatnipPlay{}
|
||||
proto.Unmarshal(buf, req)
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
err := CatnipMod.Play(int(req.Id))
|
||||
Id, Growth, PartnerId, Items, ItemCost, err := CatnipMod.Play(int(req.Id))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipPlay{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -4805,12 +4850,33 @@ func ReqCatnipPlay(player *Player, buf []byte) error {
|
||||
})
|
||||
return err
|
||||
}
|
||||
err = player.HandleLoseItem(ItemCost, msg.ITEM_POP_LABEL_CatnipPlay.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipPlay{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
}
|
||||
err = player.HandleItem(Items, msg.ITEM_POP_LABEL_CatnipPlay.String())
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipPlay{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
Msg: err.Error(),
|
||||
})
|
||||
}
|
||||
player.TeLog("catnip_play", map[string]interface{}{
|
||||
"Id": int(req.Id),
|
||||
"Id": int(req.Id),
|
||||
"Growth": Growth,
|
||||
"PartnerId": PartnerId,
|
||||
"Items": Items,
|
||||
})
|
||||
if Growth > 0 {
|
||||
player.CatnipGrowthMsg(PartnerId, int(req.Id), Growth)
|
||||
}
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipPlay{
|
||||
Code: msg.RES_CODE_SUCCESS,
|
||||
Id: int32(Id),
|
||||
})
|
||||
return nil
|
||||
}
|
||||
@ -4820,7 +4886,7 @@ func ReqCatnipReward(player *Player, buf []byte) error {
|
||||
req := &msg.ReqCatnipReward{}
|
||||
proto.Unmarshal(buf, req)
|
||||
CatnipMod := player.PlayMod.getCatnipMod()
|
||||
Items, err := CatnipMod.Reward(int(req.Progress))
|
||||
Items, err := CatnipMod.Reward(int(req.Id), int(req.Progress))
|
||||
if err != nil {
|
||||
player.SendErrClienRes(&msg.ResCatnipReward{
|
||||
Code: msg.RES_CODE_FAIL,
|
||||
@ -4837,7 +4903,9 @@ func ReqCatnipReward(player *Player, buf []byte) error {
|
||||
return err
|
||||
}
|
||||
player.TeLog("catnip_reward", map[string]interface{}{
|
||||
"Items": Items,
|
||||
"Id": int(req.Id),
|
||||
"Progress": int(req.Progress),
|
||||
"Items": Items,
|
||||
})
|
||||
player.PlayMod.save()
|
||||
player.PushClientRes(&msg.ResCatnipReward{
|
||||
@ -4846,6 +4914,7 @@ func ReqCatnipReward(player *Player, buf []byte) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 猫草大作战领取大奖
|
||||
func ReqCatnipGrandReward(player *Player, buf []byte) error {
|
||||
req := &msg.ReqCatnipGrandReward{}
|
||||
proto.Unmarshal(buf, req)
|
||||
|
||||
@ -19,6 +19,7 @@ const (
|
||||
MAIL_MGR_KEY = "MAIL_MGR"
|
||||
VAR_MGR_KEY = "VAR_MGR"
|
||||
CHAMPSHIP_MGR_KEY = "CHAMPSHIP_MGR"
|
||||
BAN_MGR_KEY = "BAN_MGR"
|
||||
PER_SAVE_TIME = 60
|
||||
)
|
||||
|
||||
|
||||
@ -85,6 +85,7 @@ type GameResult struct {
|
||||
type CatnipMsg struct {
|
||||
ActivityId int
|
||||
GameId int
|
||||
Growth int // 增长值
|
||||
}
|
||||
|
||||
type CatnipLock struct {
|
||||
|
||||
@ -26,6 +26,7 @@ var AdminFuncMap = map[string]func([]interface{}) error{
|
||||
"ReqReloadServerMail": ReqReloadServerMail,
|
||||
"ReqReload": ReqReload,
|
||||
"ReqAdminGm": ReqAdminGm,
|
||||
"ReqAdminBan": ReqAdminBan,
|
||||
}
|
||||
|
||||
func AdminProcess(Func string, args []interface{}) {
|
||||
@ -87,6 +88,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,
|
||||
@ -124,6 +133,7 @@ func AdminPlayerInfo(args []interface{}) error {
|
||||
res["Cumulative"] = player.PlayMod.getBaseMod().Cumulative
|
||||
res["RegisterTime"] = player.GetPlayerBaseMod().GetRegisterTime()
|
||||
res["TodayCumulative"] = player.PlayMod.getBaseMod().TodayCumulative
|
||||
res["Ban"] = G_GameLogicPtr.BanMgr.GetBanInfo(player.M_DwUin).EndTime
|
||||
if online {
|
||||
res["Cumulative"] = int64(player.PlayMod.getBaseMod().Cumulative) + GoUtil.Now() - int64(player.PlayMod.getBaseMod().LoginTime)
|
||||
res["TodayCumulative"] = int64(player.PlayMod.getBaseMod().TodayCumulative) + GoUtil.Now() - int64(player.PlayMod.getBaseMod().LoginTime)
|
||||
@ -211,11 +221,6 @@ func ReqAdminGm(args []interface{}) error {
|
||||
player.lock.Lock()
|
||||
defer player.lock.Unlock()
|
||||
err := ReqGmCommand_(player, req.Command)
|
||||
|
||||
if err != nil {
|
||||
res["Code"] = 1
|
||||
res["Msg"] = err.Error()
|
||||
}
|
||||
if err != nil {
|
||||
res["Code"] = 1
|
||||
res["Msg"] = err.Error()
|
||||
@ -225,3 +230,15 @@ func ReqAdminGm(args []interface{}) error {
|
||||
AdminPlayerBack(a, res)
|
||||
return nil
|
||||
}
|
||||
|
||||
func ReqAdminBan(args []interface{}) error {
|
||||
a, buf := ParseAdminArgs(args)
|
||||
req := &msg.ReqAdminBan{}
|
||||
proto.Unmarshal(buf, req)
|
||||
res := make(map[string]interface{})
|
||||
res["Code"] = 0
|
||||
res["Msg"] = "ok"
|
||||
G_GameLogicPtr.BanMgr.BanUser(req.Uid, int64(req.Time), req.Reason)
|
||||
AdminPlayerBack(a, res)
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -73,6 +73,7 @@ type CardInfo struct {
|
||||
EndTime int64
|
||||
StartTime int64
|
||||
Status int
|
||||
Emoji int
|
||||
}
|
||||
|
||||
func (c *CardMod) InitData() {
|
||||
|
||||
@ -8,10 +8,10 @@ import (
|
||||
)
|
||||
|
||||
type CatnipMod struct {
|
||||
Id int
|
||||
Game map[int]*CatnipGame
|
||||
InviteList map[int][]*InviteInfo // 邀请列表,key: 邀请者ID, value: 被邀请者ID
|
||||
BeInvitedList map[int][]*InviteInfo // 被邀请列表,key: 被邀请者ID, value: 邀请者ID
|
||||
Id int
|
||||
Game map[int]*CatnipGame
|
||||
|
||||
IsGetGrandReward bool // 是否领取过大丰收奖励
|
||||
}
|
||||
|
||||
type InviteInfo struct {
|
||||
@ -20,13 +20,15 @@ type InviteInfo struct {
|
||||
}
|
||||
|
||||
type CatnipGame struct {
|
||||
Id int // 游戏ID
|
||||
Partner int // 伙伴ID
|
||||
Progress int // 进度
|
||||
PartnerAdd int // 伙伴贡献
|
||||
Reward []int // 已领取阶段奖励
|
||||
Mul int // 倍数
|
||||
Status int // 0: Not Started, 1: In Progress, 2: Completed
|
||||
Id int // 游戏ID
|
||||
Partner int // 伙伴ID
|
||||
Progress int // 进度
|
||||
PartnerAdd int // 伙伴贡献
|
||||
Reward []int // 已领取阶段奖励
|
||||
Mul int // 倍数
|
||||
Status int // 0: Not Started, 1: In Progress, 2: Completed
|
||||
InviteList map[int]*InviteInfo // 邀请列表,key: 邀请者ID, value: 被邀请者ID
|
||||
BeInvitedList map[int]*InviteInfo // 被邀请列表,key: 被邀请者ID, value: 邀请者ID
|
||||
}
|
||||
|
||||
const (
|
||||
@ -40,12 +42,6 @@ func (c *CatnipMod) InitData() {
|
||||
if c.Game == nil {
|
||||
c.Game = make(map[int]*CatnipGame)
|
||||
}
|
||||
if c.InviteList == nil {
|
||||
c.InviteList = make(map[int][]*InviteInfo)
|
||||
}
|
||||
if c.BeInvitedList == nil {
|
||||
c.BeInvitedList = make(map[int][]*InviteInfo)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Login(Id int) int {
|
||||
@ -58,6 +54,7 @@ func (c *CatnipMod) Login(Id int) int {
|
||||
return 0
|
||||
}
|
||||
c.Id = Id
|
||||
c.IsGetGrandReward = false // Reset grand reward status on login
|
||||
c.Game = make(map[int]*CatnipGame)
|
||||
GameNum := catnipCfg.GetGameNum(c.Id) // Assuming 1 is the default game ID
|
||||
for i := 1; i <= GameNum; i++ {
|
||||
@ -83,15 +80,15 @@ func (c *CatnipMod) Invite(Id, Uid int) error {
|
||||
if GameInfo.Status != 0 {
|
||||
return fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
}
|
||||
for _, invite := range c.InviteList[Id] {
|
||||
if invite.InviteId == Uid {
|
||||
return fmt.Errorf("user with ID %d is already invited to game ID %d", Uid, Id)
|
||||
}
|
||||
|
||||
if GameInfo.InviteList[Uid] != nil {
|
||||
return fmt.Errorf("user with ID %d is already invited to game ID %d", Uid, Id)
|
||||
}
|
||||
c.InviteList[Id] = append(c.InviteList[Id], &InviteInfo{
|
||||
|
||||
GameInfo.InviteList[Uid] = &InviteInfo{
|
||||
InviteId: Uid,
|
||||
Time: GoUtil.Now(),
|
||||
})
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -104,15 +101,14 @@ func (c *CatnipMod) BeInvited(Id, Uid int, Time int64) error {
|
||||
return fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
}
|
||||
// Check if the user is already invited
|
||||
for _, invite := range c.BeInvitedList[Uid] {
|
||||
if invite.InviteId == Id {
|
||||
return fmt.Errorf("user with ID %d has already been invited to game ID %d", Uid, Id)
|
||||
}
|
||||
invite := GameInfo.BeInvitedList[Uid]
|
||||
if invite != nil && invite.InviteId == Id {
|
||||
return fmt.Errorf("user with ID %d has already been invited to game ID %d", Uid, Id)
|
||||
}
|
||||
c.BeInvitedList[Uid] = append(c.BeInvitedList[Uid], &InviteInfo{
|
||||
GameInfo.BeInvitedList[Uid] = &InviteInfo{
|
||||
InviteId: Id,
|
||||
Time: Time,
|
||||
})
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -125,27 +121,15 @@ func (c *CatnipMod) Agree(Id, Uid int) ([]int, error) {
|
||||
return nil, fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
}
|
||||
// Check if the user is in the invite list
|
||||
inviteList, exists := c.InviteList[Id]
|
||||
_, exists := GameInfo.InviteList[Uid]
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("no invites found for game ID %d", Id)
|
||||
}
|
||||
userExists := false
|
||||
InviteUser := []int{}
|
||||
for _, invite := range inviteList {
|
||||
if invite.InviteId == Uid {
|
||||
userExists = true
|
||||
continue
|
||||
}
|
||||
InviteUser = append(InviteUser, invite.InviteId)
|
||||
|
||||
}
|
||||
if !userExists {
|
||||
return nil, fmt.Errorf("user with ID %d is not invited to game ID %d", Uid, Id)
|
||||
}
|
||||
c.InviteList[Id] = make([]*InviteInfo, 0) // Clear the invite list after agreeing
|
||||
GameInfo.Partner = Uid // Set the partner for the game
|
||||
GameInfo.Status = GAME_STATUS_COMPLETED // Set the game status to in progress
|
||||
return InviteUser, nil
|
||||
// Remove the invite after agreeing
|
||||
delete(GameInfo.InviteList, Uid)
|
||||
GameInfo.Partner = Uid // Set the partner for the game
|
||||
GameInfo.Status = GAME_STATUS_COMPLETED // Set the game status to completed
|
||||
return []int{}, nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) DelInvited(Id, Uid int) error {
|
||||
@ -156,14 +140,8 @@ func (c *CatnipMod) DelInvited(Id, Uid int) error {
|
||||
if GameInfo.Status != GAME_STATUS_IDLE {
|
||||
return fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
}
|
||||
for k, invite := range c.BeInvitedList[Id] {
|
||||
if invite.InviteId == Uid {
|
||||
// Remove the invite from the list
|
||||
c.BeInvitedList[Id] = append(c.InviteList[Id][:k], c.InviteList[Id][k+1:]...)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return fmt.Errorf("user with ID %d is not invited to game ID %d", Uid, Id)
|
||||
delete(GameInfo.InviteList, Uid)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Multiply(Id, Mul int) error {
|
||||
@ -183,24 +161,61 @@ func (c *CatnipMod) Refuse(Id, Uid int) error {
|
||||
if GameInfo.Status != GAME_STATUS_IDLE {
|
||||
return fmt.Errorf("game with ID %d is already in progress or completed", Id)
|
||||
}
|
||||
for k, invite := range c.InviteList[Id] {
|
||||
if invite.InviteId == Uid {
|
||||
// Remove the invite from the list
|
||||
c.InviteList[Id] = append(c.InviteList[Id][:k], c.InviteList[Id][k+1:]...)
|
||||
return nil
|
||||
}
|
||||
delete(GameInfo.BeInvitedList, Uid)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Play(Id int) (int, int, int, []*item.Item, []*item.Item, error) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return 0, 0, 0, nil, nil, fmt.Errorf("game with ID %d does not exist", Id)
|
||||
}
|
||||
return nil
|
||||
Id, Items, Growth := catnipCfg.GetJackpotItem(GameInfo.Mul)
|
||||
if Growth > 0 {
|
||||
c.Growth(Id, Growth)
|
||||
}
|
||||
ItemCost := catnipCfg.GetItemCost(c.Id, GameInfo.Mul)
|
||||
return Id, Growth, GameInfo.Partner, Items, ItemCost, nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Play(Id int) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Reward(Id int) ([]*item.Item, error) {
|
||||
return nil, nil
|
||||
func (c *CatnipMod) Reward(Id, Progress int) ([]*item.Item, error) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("game with Progress %d does not exist", Id)
|
||||
}
|
||||
if GameInfo.Progress < Progress {
|
||||
return nil, fmt.Errorf("game with ID %d has not reached the required progress %d", Id, Progress)
|
||||
}
|
||||
if GoUtil.InArray(Progress, GameInfo.Reward) {
|
||||
return nil, fmt.Errorf("reward for progress %d has already been claimed in game ID %d", Progress, Id)
|
||||
}
|
||||
GameInfo.Reward = append(GameInfo.Reward, Progress)
|
||||
return catnipCfg.GetProgressReward(c.Id, Progress), nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) GrandReward() ([]*item.Item, error) {
|
||||
return nil, nil
|
||||
for _, game := range c.Game {
|
||||
if game.Status != GAME_STATUS_COMPLETED {
|
||||
return nil, fmt.Errorf("game with ID %d is not completed", game.Id)
|
||||
}
|
||||
}
|
||||
if c.IsGetGrandReward {
|
||||
return nil, fmt.Errorf("grand reward has already been claimed")
|
||||
}
|
||||
c.IsGetGrandReward = true
|
||||
return catnipCfg.GetGrandReward(c.Id), nil
|
||||
}
|
||||
|
||||
func (c *CatnipMod) Growth(Id, Growth int) {
|
||||
GameInfo, ok := c.Game[Id]
|
||||
if !ok {
|
||||
return // Game does not exist
|
||||
}
|
||||
if GameInfo.Status != GAME_STATUS_IN_PROGRESS {
|
||||
return // Game is not in progress
|
||||
}
|
||||
GameInfo.Progress += Growth
|
||||
if GameInfo.Progress >= catnipCfg.GetGameNum(Id) { // Assuming the game ends when progress reaches a certain threshold
|
||||
GameInfo.Status = GAME_STATUS_COMPLETED
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import (
|
||||
cardCfg "server/conf/card"
|
||||
"server/game/mod/card"
|
||||
"server/game/mod/item"
|
||||
"server/msg"
|
||||
)
|
||||
|
||||
type FriendMod struct {
|
||||
@ -17,8 +18,15 @@ type FriendMod struct {
|
||||
Card map[string]*card.CardInfo // 收到的申请交换
|
||||
Log []*LogInfo // 日志
|
||||
AutoId int
|
||||
Id int64 // 已同步msg ID
|
||||
Npc []int // npc id
|
||||
Id int64 // 已同步msg ID
|
||||
Npc []int // npc id
|
||||
Bubble map[int]*BubbleInfo // 气泡
|
||||
}
|
||||
|
||||
type BubbleInfo struct {
|
||||
Id int // 气泡ID
|
||||
Time int64 // 气泡时间
|
||||
Type int
|
||||
}
|
||||
|
||||
type FriendInfo struct {
|
||||
@ -94,6 +102,7 @@ type LogInfo struct {
|
||||
Time int64
|
||||
Param string
|
||||
Upvote bool // 点赞
|
||||
Reward bool // 是否已领取奖励
|
||||
}
|
||||
|
||||
func (f *FriendMod) InitData() {
|
||||
@ -112,6 +121,9 @@ func (f *FriendMod) InitData() {
|
||||
if f.NewFriendList == nil {
|
||||
f.NewFriendList = make(map[int]*FriendInfo)
|
||||
}
|
||||
if f.Bubble == nil {
|
||||
f.Bubble = make(map[int]*BubbleInfo)
|
||||
}
|
||||
if len(f.FriendList) > 0 && len(f.NewFriendList) == 0 {
|
||||
for k := range f.FriendList {
|
||||
f.NewFriendList[k] = &FriendInfo{
|
||||
@ -257,12 +269,47 @@ func (f *FriendMod) AddLog(Uid, Type int, Param string) int {
|
||||
Time: GoUtil.Now(),
|
||||
Param: Param,
|
||||
})
|
||||
|
||||
switch Type {
|
||||
case LOG_TYPE_HANDBOOK_UPVOTE:
|
||||
f.AddBubble(f.AutoId, Type)
|
||||
case LOG_TYPE_PLAYROOM_UPVOTE:
|
||||
f.AddBubble(f.AutoId, Type)
|
||||
}
|
||||
if len(f.Log) > 30 {
|
||||
f.Log = f.Log[len(f.Log)-30:]
|
||||
}
|
||||
return f.AutoId
|
||||
}
|
||||
func (f *FriendMod) AddBubble(Id, Type int) {
|
||||
f.Bubble[Id] = &BubbleInfo{
|
||||
Id: Id,
|
||||
Time: GoUtil.Now(),
|
||||
Type: Type,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FriendMod) GetBubbble(Id int) *msg.FriendBubbleInfo {
|
||||
if v, ok := f.Bubble[Id]; ok {
|
||||
return &msg.FriendBubbleInfo{
|
||||
Id: int32(v.Id),
|
||||
Type: int32(v.Type),
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (f *FriendMod) BubbleBackData() *msg.ResFriendBubble {
|
||||
rs := make([]*msg.FriendBubbleInfo, 0, len(f.Bubble))
|
||||
for _, v := range f.Bubble {
|
||||
rs = append(rs, &msg.FriendBubbleInfo{
|
||||
Id: int32(v.Id),
|
||||
Type: int32(v.Type),
|
||||
})
|
||||
}
|
||||
return &msg.ResFriendBubble{
|
||||
Bubble: rs,
|
||||
}
|
||||
}
|
||||
|
||||
func (f *FriendMod) ResetGoldCardEx() {
|
||||
for _, v := range f.Card {
|
||||
@ -287,7 +334,25 @@ func (f *FriendMod) Upvote(Id int) ([]*item.Item, int, error) {
|
||||
return nil, 0, fmt.Errorf("already upvote")
|
||||
}
|
||||
info.Upvote = true
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, 1)}, info.Uid, nil
|
||||
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{}
|
||||
switch info.Type {
|
||||
case LOG_TYPE_HANDBOOK_UPVOTE:
|
||||
reward = append(reward, item.NewItem(item.ITEM_ENERGY_ID, 5))
|
||||
case LOG_TYPE_PLAYROOM_UPVOTE:
|
||||
reward = append(reward, item.NewItem(item.ITEM_ENERGY_ID, 5))
|
||||
default:
|
||||
return nil, fmt.Errorf("log type not support")
|
||||
}
|
||||
delete(f.Bubble, Id)
|
||||
return reward, nil
|
||||
}
|
||||
|
||||
func (f *FriendMod) AddWishApply(Uid int64) error {
|
||||
|
||||
@ -450,19 +450,12 @@ func (l *LimitedTimeEventMod) GetCatTrickReward() ([]*item.Item, error) {
|
||||
return nil, fmt.Errorf("CatTrick event not exist")
|
||||
}
|
||||
d := l.EventList[EVENT_TYPE_CAT_TRICK].D.(*CatTrick)
|
||||
if len(d.List) == 0 {
|
||||
return nil, fmt.Errorf("CatTrick list is empty")
|
||||
}
|
||||
info := d.List[0]
|
||||
Diamon, Energy := limitedTimeEventCfg.GetCatTrickDiamond(info.Type)
|
||||
d.Energy -= Diamon * Energy
|
||||
if len(d.List) == 1 {
|
||||
delete(l.EventList, EVENT_TYPE_CAT_TRICK)
|
||||
} else {
|
||||
d.List = d.List[1:]
|
||||
if d.Energy < 100 {
|
||||
return nil, fmt.Errorf("CatTrick energy not enough")
|
||||
}
|
||||
d.Energy -= 100
|
||||
return []*item.Item{
|
||||
{Id: item.ITEM_DIAMOND_ID, Num: Diamon},
|
||||
{Id: item.ITEM_DIAMOND_ID, Num: 1},
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
@ -56,6 +56,12 @@ type PlayroomMod struct {
|
||||
RevengeUid int64 // 复仇Uid
|
||||
FilterVisitor bool // 是否过滤访客
|
||||
TodayVisitedUsers []int // 今日已拜访过的用户
|
||||
ADItem map[int]*ItemInfo
|
||||
}
|
||||
|
||||
type ItemInfo struct {
|
||||
Watch int // 观看次数
|
||||
LastTime int64 // 上次观看时间
|
||||
}
|
||||
|
||||
type DailyTask struct {
|
||||
@ -184,6 +190,9 @@ func (p *PlayroomMod) InitData() {
|
||||
p.Dress[Part] = append(p.Dress[Part], v)
|
||||
}
|
||||
}
|
||||
if p.ADItem == nil {
|
||||
p.ADItem = make(map[int]*ItemInfo)
|
||||
}
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) ZeroUpdate() {
|
||||
@ -193,6 +202,7 @@ func (p *PlayroomMod) ZeroUpdate() {
|
||||
p.UpvoteList = make([]int, 0)
|
||||
p.DailyTaskReward = make([]int, 0)
|
||||
p.TodayVisitedUsers = make([]int, 0)
|
||||
p.ADItem = make(map[int]*ItemInfo)
|
||||
p.InitDailyTask()
|
||||
}
|
||||
|
||||
@ -632,10 +642,19 @@ func (p *PlayroomMod) NotifyMood() *msg.NotifyPlayroomMood {
|
||||
for k, v := range p.MoodInfo {
|
||||
Mood[int32(k)] = int32(v.Num)
|
||||
}
|
||||
resAdItems := make([]*msg.AdItem, 0)
|
||||
for k, v := range p.ADItem {
|
||||
resAdItems = append(resAdItems, &msg.AdItem{
|
||||
ItemId: int32(k),
|
||||
Watch: int32(v.Watch),
|
||||
LastWatch: int32(v.LastTime),
|
||||
})
|
||||
}
|
||||
return &msg.NotifyPlayroomMood{
|
||||
AllMood: int32(p.AllMood),
|
||||
Mood: Mood,
|
||||
Physiology: GoUtil.MapIntToInt32(p.GetPhysiologyList()),
|
||||
AdItem: resAdItems,
|
||||
}
|
||||
}
|
||||
|
||||
@ -739,6 +758,7 @@ func (p *PlayroomMod) GetFlipReward() ([]*item.Item, int, error) {
|
||||
|
||||
func (p *PlayroomMod) BuyItem(Id int) ([]*item.Item, []*item.Item) {
|
||||
return playroomCfg.GetBuyItem(Id)
|
||||
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) UnLock(Lv int) bool {
|
||||
@ -819,7 +839,7 @@ func (p *PlayroomMod) GiveUpvote(Uid int) ([]*item.Item, error) {
|
||||
return nil, fmt.Errorf("upvote already")
|
||||
}
|
||||
p.UpvoteList = append(p.UpvoteList, Uid)
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, 10)}, nil
|
||||
return []*item.Item{item.NewItem(item.ITEM_ENERGY_ID, 5)}, nil
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) AddUpvote() {
|
||||
@ -915,3 +935,15 @@ func (p *PlayroomMod) Guide(Type int) error {
|
||||
p.Physiology[Type].Num = 0
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *PlayroomMod) AdWatch(Id int) error {
|
||||
if _, ok := p.ADItem[Id]; !ok {
|
||||
p.ADItem[Id] = &ItemInfo{Watch: 0, LastTime: 0}
|
||||
}
|
||||
p.ADItem[Id].Watch++
|
||||
p.ADItem[Id].LastTime = GoUtil.Now()
|
||||
if p.ADItem[Id].Watch > playroomCfg.GetShopItemAdNum(Id) {
|
||||
return fmt.Errorf("AdWatch Watch is over limit")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user