Merge branch 'meixiongfeng' of http://git.legu.cc/liwei_3d/go_dreamfactory into dev

This commit is contained in:
meixiongfeng 2022-12-14 17:14:36 +08:00
commit 16624faeb1
6 changed files with 115 additions and 63 deletions

View File

@ -645,3 +645,17 @@ const (
Arena = "arena"
Sign = "sign"
)
// 特权类型
const (
PrivilegeType1 = iota + 1 //每日获得
PrivilegeType2 //金币商店每日免费刷新次数
PrivilegeType3 //维京远征每日可购买挑战次数
PrivilegeType4 //狩猎每日可购买挑战次数
PrivilegeType5 //竞技场每日可购买挑战次数
PrivilegeType6 //梦境每日可购买挑战次数
PrivilegeType7 //巨怪商队背包容量
PrivilegeType8 //美食馆每日最大制作时间
PrivilegeType9 //武馆每日最大练功时间
PrivilegeType10 //铁匠铺每日最大锻造时间
)

View File

@ -281,10 +281,10 @@ type (
RenewPrivilegeCard(session IUserSession, cId string) (code pb.ErrorCode)
// 检查特权
CheckPrivilege(session IUserSession, cId string) (privilege *pb.DBPrivilege)
// 查询玩家当前所有特权 返回特权id
QueryPrivilege(session IUserSession) (privilegeID []int32)
// 检查每日特权邮件
CheckDailyPrivilegeMail(session IUserSession)
// 获得vip
AddVipData(session IUserSession)
AddVipData(session IUserSession, oldVip, newVip int32)
}
//武馆
IMartialhall interface {

View File

@ -3,12 +3,9 @@ package privilege
import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/mgo"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/sys/configure"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/x/bsonx"
)
@ -33,16 +30,8 @@ func (this *ModelVip) Init(service core.IService, module core.IModule, comp core
// 获取vip信息
func (this *ModelVip) getVipList(uid string) (vip *pb.DBVip, err error) {
vip = &pb.DBVip{}
if err = this.Get(uid, vip); err == mgo.MongodbNil { // 没有数据 直接创建一条
vip.Id = primitive.NewObjectID().Hex()
vip.CTime = configure.Now().Unix()
if err = this.Add(uid, vip); err != nil {
this.module.Errorf("err:%v", err)
return
}
err = nil
return vip, err
if err = this.Get(uid, vip); err != nil {
return
}
return
}
@ -53,19 +42,11 @@ func (this *ModelVip) modifyVipData(uid string, data map[string]interface{}) err
}
// 增加vip信息
func (this *ModelVip) addVipData(uId string) (vip *pb.DBVip, err error) {
func (this *ModelVip) addVipData(uId string, vip *pb.DBVip) (err error) {
vip, err = this.getVipList(uId)
if err != nil {
return vip, err
}
if vip.Id == "" {
vip.Id = primitive.NewObjectID().Hex()
vip.CTime = configure.Now().Unix()
if err = this.Add(uId, vip); err != nil {
this.module.Errorf("err:%v", err)
return
}
if err = this.Add(uId, vip); err != nil {
this.module.Errorf("err:%v", err)
return
}
return

View File

@ -4,10 +4,10 @@ import (
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/sys/event"
"go_dreamfactory/lego/sys/mgo"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"go_dreamfactory/sys/configure"
"go_dreamfactory/sys/db"
"go_dreamfactory/utils"
"go.mongodb.org/mongo-driver/bson/primitive"
@ -46,6 +46,7 @@ func (this *Privilege) OnInstallComp() {
this.api_comp = this.RegisterComp(new(apiComp)).(*apiComp)
this.modelPrivilege = this.RegisterComp(new(ModelPrivilege)).(*ModelPrivilege)
this.configure = this.RegisterComp(new(configureComp)).(*configureComp)
this.modelVip = this.RegisterComp(new(ModelVip)).(*ModelVip)
}
func (this *Privilege) Start() (err error) {
@ -61,7 +62,7 @@ func (this *Privilege) Start() (err error) {
//Event------------------------------------------------------------------------------------------------------------
func (this *Privilege) EventUserOffline(session comm.IUserSession) {
this.modelPrivilege.DelByUId(session.GetUserId(), db.SetDBMgoLog(false))
//this.modelPrivilege.DelByUId(session.GetUserId(), db.SetDBMgoLog(false))
}
// 购买了一个新的特权
@ -82,20 +83,23 @@ func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cId string
}
for _, v := range list {
if v.CId == cId {
update := map[string]interface{}{}
if v.ETime > configure.Now().Unix() { // 加时间
v.ETime += int64(conf.AssertDay) * 24 * 3600
} else {
// 检测能否续费
if configure.Now().Unix()-v.ETime <= int64(conf.RenewDay)*24*3600 {
v.ETime = configure.Now().Unix() + int64(conf.AssertDay)*24*3600
} else {
if v.ETime-configure.Now().Unix() > int64(conf.RenewDay)*24*3600 {
code = pb.ErrorCode_PayRenewTimeErr
return
}
v.ETime += int64(conf.AssertDay) * 24 * 3600
update["eTime"] = v.ETime
} else { // 过期了
v.CTime = configure.Now().Unix()
v.ETime = v.CTime + int64(conf.AssertDay)*24*3600
update["cTime"] = v.CTime
update["eTime"] = v.ETime
}
if err = this.modelPrivilege.Change(session.GetUserId(), map[string]interface{}{
"eTime": v.ETime,
}); err != nil {
if err = this.modelPrivilege.Change(session.GetUserId(), update); err != nil {
this.Errorf("err:%v", err)
return
}
@ -103,36 +107,55 @@ func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cId string
break
}
}
if !bFind {
if !bFind { // 创建一条新的信息
data := &pb.DBPrivilege{
Id: primitive.NewObjectID().Hex(),
Uid: session.GetUserId(),
CId: cId,
Id: primitive.NewObjectID().Hex(),
Uid: session.GetUserId(),
CId: cId,
CTime: configure.Now().Unix(),
ETime: 0,
ETime: configure.Now().Unix() + int64(conf.AssertDay*24*3600), // 设置过期时间
RewardTime: configure.Now().Unix(),
}
data.ETime = configure.Now().Unix() + int64(conf.AssertDay*24*3600) // 设置过期时间
// 特权插入
vip, err := this.modelVip.getVipList(session.GetUserId())
if err == nil {
if err != nil && err == mgo.MongodbNil { // 没有数据 直接创建一条
vip = &pb.DBVip{
Id: primitive.NewObjectID().Hex(),
Uid: session.GetUserId(),
Reward: map[int32]bool{},
Privilege: map[int32]*pb.PrivilegeData{},
CTime: configure.Now().Unix(),
RewardTime: 0,
}
if err = this.modelVip.addVipData(session.GetUserId(), vip); err != nil {
this.Errorf("err:%v", err)
return
}
}
if vip.Id != "" {
update := map[string]interface{}{}
for _, v := range conf.PrivilegeId {
conf := this.configure.GetPrivilegeData(v)
if conf != nil {
if _, ok := vip.Privilege[conf.PrivilegeType]; ok {
vip.Privilege[conf.PrivilegeType].PrivilegeID = append(vip.Privilege[conf.PrivilegeType].PrivilegeID, v)
// 过滤重复的特权
bRepeat := false
for _, v1 := range vip.Privilege[conf.PrivilegeType].PrivilegeID {
if v1 == v {
bRepeat = true
break
}
}
if !bRepeat {
vip.Privilege[conf.PrivilegeType].PrivilegeID = append(vip.Privilege[conf.PrivilegeType].PrivilegeID, v)
}
} else {
sz := &pb.PrivilegeData{}
sz.PrivilegeID = append(sz.PrivilegeID, v)
vip.Privilege[conf.PrivilegeType] = sz
}
}
}
update["privilege"] = vip.Privilege
this.modelVip.modifyVipData(session.GetUserId(), update)
@ -141,7 +164,7 @@ func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cId string
this.modelPrivilege.addNewPrivilegeData(session.GetUserId(), data)
this.SendDailyMail(session, cId, 1, conf.PType)
}
// 即使奖励 马上发送
if code = this.DispenseRes(session, conf.DisposableReward, true); code != pb.ErrorCode_Success {
return
}
@ -206,8 +229,8 @@ func (this *Privilege) CheckPrivilege(session comm.IUserSession, cId string) (pr
return
}
// 查询特权信息,把过期的特权清除掉
func (this *Privilege) QueryPrivilege(session comm.IUserSession) (privilegeID []int32) {
// 检查特权 并发送每日邮件
func (this *Privilege) CheckDailyPrivilegeMail(session comm.IUserSession) {
privilgeList, err := this.modelVip.getVipList(session.GetUserId())
if err != nil {
return
@ -219,13 +242,10 @@ func (this *Privilege) QueryPrivilege(session comm.IUserSession) (privilegeID []
for _, v := range list {
conf, err := this.configure.GetPrivilegeCard(v.CId)
if err != nil {
return nil
return
}
if v.ETime < configure.Now().Unix() { // 判断当前特权是否过期
if err := this.modelPrivilege.DelListlds(session.GetUserId(), v.Id); err != nil {
this.Errorf("delete privilege failed:%v", err)
}
update := map[string]interface{}{}
for _, id := range conf.PrivilegeId { // 找到过期的特权 并删除
data := this.configure.GetPrivilegeData(id)
@ -302,8 +322,46 @@ func (this *Privilege) SendDailyMail(session comm.IUserSession, cId string, coun
}
}
func (this *Privilege) AddVipData(session comm.IUserSession) {
vip, err := this.modelVip.addVipData(session.GetUserId())
func (this *Privilege) AddVipData(session comm.IUserSession, oldVip, newVip int32) {
if newVip <= oldVip {
return
}
vip, err := this.modelVip.getVipList(session.GetUserId())
if err != nil && err == mgo.MongodbNil { // 没有数据 直接创建一条
vip = &pb.DBVip{
Id: primitive.NewObjectID().Hex(),
Uid: session.GetUserId(),
Reward: map[int32]bool{},
Privilege: map[int32]*pb.PrivilegeData{},
CTime: configure.Now().Unix(),
RewardTime: 0,
}
if err = this.modelVip.addVipData(session.GetUserId(), vip); err != nil {
this.Errorf("err:%v", err)
return
}
}
update := map[string]interface{}{}
for i := oldVip; i < newVip; i++ {
conf := this.configure.GetVipConfigureData(i)
if conf != nil {
for _, v := range conf.VipPrivilege {
data := this.configure.GetPrivilegeData(v)
if data != nil {
if _, ok := vip.Privilege[data.PrivilegeType]; ok {
vip.Privilege[data.PrivilegeType].PrivilegeID = append(vip.Privilege[data.PrivilegeType].PrivilegeID, v)
} else {
sz := &pb.PrivilegeData{}
sz.PrivilegeID = append(sz.PrivilegeID, v)
vip.Privilege[data.PrivilegeType] = sz
}
}
}
}
}
update["privilege"] = vip.Privilege
this.modelVip.modifyVipData(session.GetUserId(), update)
if err != nil { // 推送
session.SendMsg(string(this.GetType()), PrivilegeGetListResp, &pb.PrivilegeVipListResp{Data: vip})
}

View File

@ -148,8 +148,7 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (cod
// 日常登录任务
this.module.ModuleRtask.SendToRtask(session, comm.Rtype7, 1)
// 检查特权 并发送每日邮件
// this.module.ModulePrivilege.QueryPrivilege(session)
this.module.ModulePrivilege.CheckDailyPrivilegeMail(session)
//推送登录公告
if this.module.modelUser.isLoginFirst(lastLoginTime) {
this.chat.SendSysChatToUser(session, comm.ChatSystem2, 0, 0)

View File

@ -211,8 +211,8 @@ func (this *ModelUser) ChangeVipExp(event interface{}, next func(event interface
}
}
//
if ul.viplv == 0 && vipLv > 0 { // 新获得了vip
this.module.ModulePrivilege.AddVipData(ul.session)
if ul.viplv != vipLv { // 新获得了vip
this.module.ModulePrivilege.AddVipData(ul.session, ul.viplv, vipLv)
}
// 推送玩家vip 经验变化
ul.session.SendMsg(string(this.module.GetType()), UserSubTypeVipChangedPush,